[SCM] Packaging for getfem++ branch, master, updated. debian/4.2+dfsg1-1-3-gd8f89e4
Anton Gladky
gladky.anton at gmail.com
Sun Jun 30 15:32:23 UTC 2013
The following commit has been merged in the master branch:
commit 0522ea29e405694a3705041c74bd0d4988e1b1b6
Author: Anton Gladky <gladky.anton at gmail.com>
Date: Sun Jun 30 17:27:58 2013 +0200
Recover corrupted sources in master branch.
diff --git a/COPYING b/COPYING
old mode 100755
new mode 100644
index f3f1b3b..867d831
--- a/COPYING
+++ b/COPYING
@@ -1,504 +1,12 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 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.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-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 and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, 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 library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete 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 distribute a copy of this License along with the
-Library.
-
- 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 Library or any portion
-of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-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 Library, 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 Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you 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.
-
- If distribution of 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 satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be 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.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library 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.
-
- 9. 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 Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-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 with
-this License.
-
- 11. 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 Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library 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 Library.
-
-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.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library 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.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-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 Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-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
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. 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 LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. 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.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; 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.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+Getfem++ is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version along with the GCC Runtime Library
+Exception either version 3.1 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 Lesser General Public
+License and the GCC Runtime Library Exception for more details.
+You should have received a copy of the GNU Lesser General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index b281e16..e28f677 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,7 +42,7 @@
2008-09-26 Yves Renard <Yves.Renard at insa-lyon.fr>
* src/getfem/getfem_nonlinear_elasticity.h
- Adding the the contribution of Jean-Yves Heddebaut <jyhed at alpino.be>
+ Adding the contribution of Jean-Yves Heddebaut <jyhed at alpino.be>
concerning the deformation of a nonlinear membrane.
2008-08-11 Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/Makefile.in b/Makefile.in
index 5141694..7fcb5b1 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -82,6 +82,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(bindir)"
SCRIPTS = $(bin_SCRIPTS)
SOURCES =
@@ -105,9 +111,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
- { test ! -d "$(distdir)" \
- || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr "$(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,'; \
@@ -136,6 +144,8 @@ am__relativize = \
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@
@@ -161,6 +171,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -179,6 +190,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -195,6 +207,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -259,6 +272,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -294,7 +308,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -325,7 +338,7 @@ all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-am--refresh:
+am--refresh: Makefile
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
@@ -361,10 +374,8 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps):
config.h: stamp-h1
- @if test ! -f $@; then \
- rm -f stamp-h1; \
- $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
- else :; fi
+ @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
@@ -415,9 +426,7 @@ uninstall-binSCRIPTS:
@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
+ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -635,7 +644,11 @@ dist-gzip: distdir
$(am__remove_distdir)
dist-bzip2: distdir
- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ 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
@@ -643,7 +656,7 @@ dist-lzma: distdir
$(am__remove_distdir)
dist-xz: distdir
- tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir
@@ -674,6 +687,8 @@ distcheck: dist
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*) \
@@ -693,6 +708,7 @@ distcheck: dist
&& 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 \
@@ -721,8 +737,16 @@ distcheck: dist
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:
- @$(am__cd) '$(distuninstallcheck_dir)' \
- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ @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)"; \
@@ -756,10 +780,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
@@ -848,8 +877,8 @@ uninstall-am: uninstall-binSCRIPTS
.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-lzma dist-shar dist-tarZ dist-xz dist-zip \
- distcheck distclean distclean-generic distclean-hdr \
+ 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-binSCRIPTS install-data \
diff --git a/aclocal.m4 b/aclocal.m4
index 33391ee..cc2f4a6 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# 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.
@@ -13,18 +14,21 @@
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
-[m4_warning([this file was generated for autoconf 2.65.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
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'.])])
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 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
@@ -34,7 +38,7 @@ 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.1], [],
+m4_if([$1], [1.11.3], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -50,19 +54,21 @@ m4_define([_AM_AUTOCONF_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.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.3])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 Free Software Foundation, Inc.
+# 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/../..'.
@@ -144,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# 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 10
+# 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,
@@ -191,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
# 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.
@@ -255,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
break
fi
;;
- msvisualcpp | msvcmsys)
+ 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.
@@ -320,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK],
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 -*-
@@ -545,12 +555,15 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+# 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.
@@ -682,12 +695,15 @@ else
fi
])
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 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'.
@@ -710,13 +726,14 @@ esac
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+# 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 4
+# serial 5
# _AM_MANGLE_OPTION(NAME)
# -----------------------
@@ -724,13 +741,13 @@ 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)])])
@@ -741,13 +758,15 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009,
+# 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 2
+
# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# ---------------------------------------------------------------------------
# Adds support for distributing Python modules and packages. To
@@ -775,8 +794,10 @@ AC_DEFUN([AM_PATH_PYTHON],
dnl Find a Python interpreter. Python versions prior to 2.0 are not
dnl supported. (2.0 was released on October 16, 2000).
m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
- [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl
-python2.1 python2.0])
+[python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl
+ python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0])
+
+ AC_ARG_VAR([PYTHON], [the Python interpreter])
m4_if([$1],[],[
dnl No version check is needed.
@@ -848,9 +869,7 @@ python2.1 python2.0])
dnl site-packages directory, not the python standard library
dnl directory like in previous automake betas. This behavior
dnl is more consistent with lispdir.m4 for example.
- dnl Query distutils for this directory. distutils does not exist in
- dnl Python 1.5, so we fall back to the hardcoded directory if it
- dnl doesn't work.
+ dnl Query distutils for this directory.
AC_CACHE_CHECK([for $am_display_PYTHON script directory],
[am_cv_python_pythondir],
[if test "x$prefix" = xNONE
@@ -859,8 +878,7 @@ python2.1 python2.0])
else
am_py_prefix=$prefix
fi
- am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
- echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+ am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null`
case $am_cv_python_pythondir in
$am_py_prefix*)
am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
@@ -886,9 +904,7 @@ python2.1 python2.0])
dnl pyexecdir -- directory for installing python extension modules
dnl (shared libraries)
- dnl Query distutils for this directory. distutils does not exist in
- dnl Python 1.5, so we fall back to the hardcoded directory if it
- dnl doesn't work.
+ dnl Query distutils for this directory.
AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
[am_cv_python_pyexecdir],
[if test "x$exec_prefix" = xNONE
@@ -897,8 +913,7 @@ python2.1 python2.0])
else
am_py_exec_prefix=$exec_prefix
fi
- am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
- echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+ am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null`
case $am_cv_python_pyexecdir in
$am_py_exec_prefix*)
am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
@@ -946,12 +961,14 @@ for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
sys.exit(sys.hexversion < minverhex)"
AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+# 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_RUN_LOG(COMMAND)
# -------------------
# Run COMMAND, save the exit status in ac_status, and log it.
@@ -1028,12 +1045,14 @@ Check your system clock])
fi
AC_MSG_RESULT(yes)])
-# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+# 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
@@ -1056,13 +1075,13 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+# 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 2
+# serial 3
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
@@ -1071,13 +1090,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
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 Free Software Foundation, Inc.
+# 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,
@@ -1099,10 +1118,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [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='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [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])
diff --git a/bin/Makefile.in b/bin/Makefile.in
index fce70be..7c77d39 100644
--- a/bin/Makefile.in
+++ b/bin/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(bindir)"
SCRIPTS = $(bin_SCRIPTS)
SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -319,9 +328,7 @@ uninstall-binSCRIPTS:
@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(bindir)" && rm -f $$files
+ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -382,10 +389,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/bin/extract_doc b/bin/extract_doc
index e4ea053..c8b03d6 100755
--- a/bin/extract_doc
+++ b/bin/extract_doc
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- python -*-
#
-# Copyright (C) 2004-2010 Yves Renard, Julien Pommier.
+# Copyright (C) 2004-2012 Yves Renard, Julien Pommier.
#
# This file is a part of GETFEM++
#
@@ -252,6 +252,21 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
d += r[(j+1):]
i = d.find(m)
+ if (langage == 'scilab'):
+ # Replace the :math:` ... ` by scilab latex xml tag
+ i = d.find(':math:`')
+ while (i != -1):
+ d = d[:i] + d[i:].replace(':math:`','<latex style="text"><![CDATA[',1)
+ d = d[:i] + d[i:].replace('`',']]></latex>',1)
+ i = d.find(':math:`')
+
+ # Replace the ` ... ` by scilab literal xml tag
+ i = d.find('`')
+ while (i != -1):
+ d = d[:i] + d[i:].replace('`','<literal>',1)
+ d = d[:i] + d[i:].replace('`','</literal>',1)
+ i = d.find('`')
+
if (langage == 'matlab' or langage == 'scilab'):
for o in objects:
[r, I] = StandardObjectName(o)
@@ -285,11 +300,13 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
d = string.replace(d, '@tpoly', 'poly')
# Authorized abbreviations
+ d = string.replace(d, '@tcs', 'cont_struct')
d = string.replace(d, '@tmf', 'mesh_fem')
d = string.replace(d, '@tbrick', 'mdbrick')
d = string.replace(d, '@tstate', 'mdstate')
d = string.replace(d, '@tgt', 'geotrans')
d = string.replace(d, '@tgf', 'global_function')
+ d = string.replace(d, '@tmo', 'mesher_object')
d = string.replace(d, '@tmls', 'mesh_levelset')
d = string.replace(d, '@tmim', 'mesh_im')
d = string.replace(d, '@tls', 'levelset')
@@ -366,11 +383,13 @@ def FilterDoc(d, langage, objects, commands, set_replace = set()):
d = string.replace(d, '@tpoly', 'poly')
# Authorized abbreviations
+ d = string.replace(d, '@tcs', 'ContStruct')
d = string.replace(d, '@tmf', 'MeshFem')
d = string.replace(d, '@tbrick', 'MdBrick')
d = string.replace(d, '@tstate', 'MdState')
d = string.replace(d, '@tgt', 'GeoTrans')
d = string.replace(d, '@tgf', 'GlobalFunction')
+ d = string.replace(d, '@tmo', 'MesherObject')
d = string.replace(d, '@tmls', 'MeshLevelSet')
d = string.replace(d, '@tmim', 'MeshIm')
d = string.replace(d, '@tls', 'LevelSet')
@@ -877,6 +896,8 @@ elif (option == 'matlab-doc'):
print '`integ` integration method descriptor (or gfInteg object)'
print '`model` model descriptor (or gfModel object)'
print '`global_function` global function descriptor'
+ print '`mesher_object` mesher object descriptor'
+ print '`cont_struct` continuation-structure descriptor'
print '================= =================================================='
print ''
print 'Arguments listed between square brackets are optional. Lists between braces indicate that the argument must match one of the elements of the list. For example::'
@@ -975,7 +996,7 @@ elif (option == 'matlab-doc'):
#
#
# Option scilab-com
-# Extract the scilab documentation for each command in rst format
+# Extract the scilab documentation for each command in xml format
#
#
#
@@ -984,6 +1005,209 @@ elif (option == 'matlab-doc'):
elif (option == 'scilab-com'):
langage = 'scilab'
+
+ # Write XML page related to types
+
+ mfile = open('getfem_types.xml', 'w')
+
+ mfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+ mfile.write('<refentry version="5.0-subset Scilab" xml:id="getfem_types" xml:lang="en"\n')
+ mfile.write(' xmlns="http://docbook.org/ns/docbook"\n')
+ mfile.write(' xmlns:xlink="http://www.w3.org/1999/xlink"\n')
+ mfile.write(' xmlns:xi="http://www.w3.org/2001/XInclude"\n')
+ mfile.write(' xmlns:svg="http://www.w3.org/2000/svg"\n')
+ mfile.write(' xmlns:mml="http://www.w3.org/1998/Math/MathML"\n')
+ mfile.write(' xmlns:html="http://www.w3.org/1999/xhtml"\n')
+ mfile.write(' xmlns:db="http://docbook.org/ns/docbook">\n')
+
+ mfile.write(' <refnamediv>\n')
+ mfile.write(' <refname>getfem types</refname>\n')
+ mfile.write(' <refpurpose>Types reference</refpurpose>\n')
+ mfile.write(' </refnamediv>\n\n')
+
+ mfile.write('')
+
+ mfile.write(' <refsection>\n')
+ mfile.write(' <title>Description</title>\n')
+ mfile.write(' <para>The expected type of each function argument is indicated in this reference. Here is a list of these types:</para>\n\n')
+ mfile.write(' <variablelist>\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>int</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>integer value</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>hobj</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>a handle for any getfem++ object</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>scalar</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>scalar value</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>string</term>\n');
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>string</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>ivec</term>')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>vector of integer values</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>vec</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>vector</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>imat</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>matrix of integer values</para>')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mat</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>matrix</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>spmat</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>sparse matrix (both matlab native sparse matrices, and getfem sparse matrices)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>precond</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>getfem preconditioner object</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mesh mesh</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>object descriptor (or gfMesh object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mesh_fem</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>mesh fem object descriptor (or gfMeshFem object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mesh_im</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>mesh im object descriptor( or gfMeshIm object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mesh_slice</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>mesh slice object descriptor (or gfSlice object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>cvstruct</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>convex structure descriptor (or gfCvStruct object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>geotrans</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>geometric transformation descriptor (or gfGeoTrans object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>fem</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>fem descriptor (or gfFem object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>eltm</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>elementary matrix descriptor (or gfEltm object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>integ</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>integration method descriptor (or gfInteg object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>model</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>model descriptor (or gfModel object)</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>global_function</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>global function descriptor</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>mesher_object</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>mesher object descriptor</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+
+ mfile.write(' <varlistentry>\n')
+ mfile.write(' <term>cont_struct</term>\n')
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para>continuation-structure descriptor</para>\n')
+ mfile.write(' </listitem>\n')
+ mfile.write(' </varlistentry>\n\n')
+ mfile.write(' </variablelist>\n\n')
+
+ mfile.write(' <para>Arguments listed between square brackets are optional. Lists between braces indicate</para>\n')
+ mfile.write(' <para>that the argument must match one of the elements of the list. For example:</para>\n\n')
+
+ mfile.write(' <programlisting role=""><![CDATA[ >> [X,Y]=dummy(int i, \'foo\' | \'bar\' [,vec v])]]></programlisting>\n\n')
+
+ mfile.write(' <para>means that the dummy function takes two or three arguments, its first being an integer value,</para>\n')
+ mfile.write(' <para>the second a string which is either \'foo\' or \'bar\', and a third optional argument. It returns two</para>\n')
+ mfile.write(' <para>values (with the usual matlab meaning, i.e. the caller can always choose to ignore them).</para>\n')
+ mfile.write(' </refsection>\n')
+ mfile.write('</refentry>\n')
+
+ mfile.close()
+
+ # Write XML function documentation pages
allc = sorted(objects+commands)
for o in allc:
@@ -992,13 +1216,29 @@ elif (option == 'scilab-com'):
[r, initiale] = StandardObjectName(o)
if (os.path.exists(src_dir) and os.path.isfile(src_dir)):
- mfile = open('gf_'+o+ext+'.rst', 'w')
+ mfile = open('gf_'+o+ext+'.xml', 'w')
- mfile.write('gf_' + o + ext+'\n')
- mfile.write('-------------------------------------------\n\n')
- mfile.write('Synopsis\n')
- mfile.write('++++++++\n')
- mfile.write('::\n\n')
+ mfile.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+ mfile.write('<refentry version="5.0-subset Scilab" xml:id="gf_' + o + ext + '" xml:lang="en"\n')
+ mfile.write(' xmlns="http://docbook.org/ns/docbook"\n')
+ mfile.write(' xmlns:xlink="http://www.w3.org/1999/xlink"\n')
+ mfile.write(' xmlns:xi="http://www.w3.org/2001/XInclude"\n')
+ mfile.write(' xmlns:svg="http://www.w3.org/2000/svg"\n')
+ mfile.write(' xmlns:mml="http://www.w3.org/1998/Math/MathML"\n')
+ mfile.write(' xmlns:html="http://www.w3.org/1999/xhtml"\n')
+ mfile.write(' xmlns:db="http://docbook.org/ns/docbook">\n')
+
+ [gdoc, args] = ExtractGlobalDoc(src_dir);
+ gdoc = FilterDoc(gdoc, langage, objects, commands)
+
+ mfile.write(' <refnamediv>\n')
+ mfile.write(' <refname>gf_' + o + ext + '</refname>\n')
+ mfile.write(' <refpurpose>' + gdoc + '</refpurpose>\n')
+ mfile.write(' </refnamediv>\n\n')
+
+ mfile.write(' <refsynopsisdiv>\n')
+ mfile.write(' <title>Calling Sequence</title>\n\n')
+
[gdoc, args] = ExtractGlobalDoc(src_dir);
if (args != ''):
args = FilterDoc(args, langage, objects, commands) + ', '
@@ -1019,18 +1259,26 @@ elif (option == 'scilab-com'):
else:
mname = ''
params = params[1:].strip()
- mfile.write(' ' + ret + 'gf_'+o+ext+firstarg+mname + params+')\n')
+ mfile.write(' <synopsis>' + ret + 'gf_'+o+ext+firstarg+mname + params+')</synopsis>\n')
[ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
+ mfile.write(' </refsynopsisdiv>\n\n')
fl.close()
- mfile.write('\nDescription :\n')
- mfile.write('+++++++++++++\n\n')
+
+ mfile.write(' <refsection>\n')
+ mfile.write(' <title>Description</title>\n')
+
if ((o in set_objects) and (ext == '')):
- mfile.write('General constructor for ' + o + ' objects.\n\n')
+ mfile.write(' <para>General constructor for ' + o + ' objects.</para>\n\n')
+
gdoc = FilterDoc(gdoc, langage, objects, commands)
- mfile.write(gdoc)
- mfile.write('\n\nCommand list :\n')
- mfile.write('++++++++++++++\n\n')
+ mfile.write(' <para>' + gdoc + '</para>\n')
+ mfile.write(' </refsection>\n\n')
+
+ mfile.write(' <refsection>\n')
+ mfile.write(' <title>Command list</title>\n\n')
+ mfile.write(' <itemizedlist>\n')
+
fl = open(src_dir)
doc = '';
[ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
@@ -1044,23 +1292,37 @@ elif (option == 'scilab-com'):
else:
mname = ''
params = params[1:].strip()
- mfile.write('\n ``' + ret + 'gf_'+o+ext+firstarg+mname + params+')``\n\n')
+
+ mfile.write(' <listitem>\n')
+ mfile.write(' <para><literal>' + ret + 'gf_'+o+ext+firstarg+mname + params+')</literal></para>\n\n')
+
+ mfile.write(' <para>')
doc = FilterDoc(doc, langage, objects, commands)
- nbspace = -1
- for l in doc.split('\n'):
- if (nbspace == -1 and len(l.strip()) > 0):
- for i in range(len(l)):
- nbspace = i
- if (not l[i].isspace()): break
-
- if (nbspace > 0):
- l = l[:nbspace-1].strip() + l[nbspace:]
- if (nbspace >= 0):
- mfile.write(' ' + l + '\n')
- mfile.write('\n')
+ mfile.write(' ' + doc + '\n')
+
+ mfile.write(' </para>\n')
+ mfile.write(' </listitem>\n\n')
+
[ok, doc, dtype, mname, params, ret] = ExtractSubDoc(fl, langage)
fl.close()
+ mfile.write(' </itemizedlist>\n')
+ mfile.write(' </refsection>\n\n')
+
+ mfile.write(' <refsection>\n')
+ mfile.write(' <title>See Also</title>\n')
+ mfile.write(' <simplelist type="inline">\n')
+ mfile.write(' <member><link linkend="getfem_types">getfem types</link></member>\n')
+ mfile.write(' </simplelist>\n')
+ mfile.write(' </refsection>\n\n')
+
+ mfile.write(' <refsection>\n')
+ mfile.write(' <title>Authors</title>\n')
+ mfile.write(' <para>Y. Collette</para>\n')
+ mfile.write(' </refsection>\n\n')
+
+ mfile.write('</refentry>\n')
+
mfile.close()
@@ -1068,14 +1330,14 @@ elif (option == 'scilab-com'):
#
#
#
-# Option scilab-doc
+# Option scilab-doc-rst
# Extract the scilab documentation for commands in rst format
#
#
#
#######################################################################
-elif (option == 'scilab-doc'):
+elif (option == 'scilab-doc-rst'):
langage = 'scilab'
@@ -1123,6 +1385,8 @@ elif (option == 'scilab-doc'):
print '`integ` integration method descriptor (or gfInteg object)'
print '`model` model descriptor (or gfModel object)'
print '`global_function` global function descriptor'
+ print '`mesher_object` mesher object descriptor'
+ print '`cont_struct` continuation-structure descriptor'
print '================= =================================================='
print ''
print 'Arguments listed between square brackets are optional. Lists between braces indicate that the argument must match one of the elements of the list. For example::'
@@ -1244,17 +1508,18 @@ elif (option == 'python-com'):
#
# GetFEM++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
#
-# File autogenerated by interface/bin/extract_doc. Do not edit it.
+# File autogenerated by bin/extract_doc. Do not edit it.
\"\"\"GetFEM-interface classes.
Provides access to the pseudo-objects exported by the python-getfem
@@ -1346,6 +1611,7 @@ def generic_destructor(self, destructible=True):
non_destructible_objects.add('fem');
non_destructible_objects.add('integ');
non_destructible_objects.add('global_function');
+ non_destructible_objects.add('mesher_object');
non_destructible_objects.add('eltm');
non_destructible_objects.add('cvstruct');
for o in ob:
diff --git a/config.guess b/config.guess
index e3a2116..d622a44 100755
--- a/config.guess
+++ b/config.guess
@@ -1,10 +1,10 @@
#! /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
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2009-06-10'
+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
@@ -17,9 +17,7 @@ timestamp='2009-06-10'
# 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -27,16 +25,16 @@ timestamp='2009-06-10'
# the same distribution terms that you use for the rest of that program.
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches at gnu.org> 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.
#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# 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,.*/,,'`
@@ -56,8 +54,9 @@ 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 Free Software Foundation, Inc.
+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."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # 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
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
fi
;;
*)
- os=netbsd
+ os=netbsd
;;
esac
# The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# 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'`
- exit ;;
+ # 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
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo s390-ibm-zvmoe
exit ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
+ echo powerpc-ibm-os400
exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
@@ -333,6 +335,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
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"
@@ -391,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# 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}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
exit ;;
@@ -477,8 +482,8 @@ EOF
echo m88k-motorola-sysv3
exit ;;
AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ # 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 ] || \
@@ -491,7 +496,7 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit ;;
@@ -548,7 +553,7 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[456])
+ *: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
@@ -591,52 +596,52 @@ EOF
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" ;;
+ 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
+ esac ;;
+ esac
fi
if [ "${HP_ARCH}" = "" ]; then
eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >$dummy.c
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
+ 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);
- }
+ 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
@@ -727,22 +732,22 @@ EOF
exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
@@ -766,14 +771,14 @@ EOF
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 ;;
+ 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}"
+ 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}
@@ -785,13 +790,12 @@ EOF
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
amd64)
echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
esac
exit ;;
i*:CYGWIN*:*)
@@ -800,19 +804,22 @@ EOF
*: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
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
- EM64T | authenticamd | genuineintel)
+ authenticamd | genuineintel | EM64T)
echo x86_64-unknown-interix${UNAME_RELEASE}
exit ;;
IA64)
@@ -854,6 +861,27 @@ EOF
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 \
@@ -861,20 +889,40 @@ EOF
then
echo ${UNAME_MACHINE}-unknown-linux-gnu
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ 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 cris-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
frv:Linux:*:*)
- echo frv-unknown-linux-gnu
+ 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
@@ -901,39 +949,18 @@ EOF
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
+ 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 or32-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-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}
+ 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
@@ -942,14 +969,17 @@ EOF
*) echo hppa-unknown-linux-gnu ;;
esac
exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
+ 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
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -957,67 +987,18 @@ EOF
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 x86_64-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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
@@ -1025,11 +1006,11 @@ EOF
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,
+ # 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.
+ # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit ;;
i*86:OS/2:*:*)
@@ -1061,7 +1042,7 @@ EOF
fi
exit ;;
i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
@@ -1089,13 +1070,13 @@ EOF
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.
+ # 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 ;;
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit ;;
@@ -1130,8 +1111,8 @@ EOF
/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; } ;;
+ /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 \
@@ -1174,10 +1155,10 @@ EOF
echo ns32k-sni-sysv
fi
exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel at ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel at ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes at openmarket.com>.
# How about differentiating between stratus architectures? -djm
@@ -1203,11 +1184,11 @@ EOF
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
+ echo mips-nec-sysv${UNAME_RELEASE}
else
- echo mips-unknown-sysv${UNAME_RELEASE}
+ echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit ;;
@@ -1247,6 +1228,16 @@ EOF
*: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}
@@ -1262,6 +1253,9 @@ EOF
*: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 ;;
@@ -1307,13 +1301,13 @@ EOF
echo pdp10-unknown-its
exit ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
+ 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`
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
@@ -1331,6 +1325,9 @@ EOF
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
@@ -1353,11 +1350,11 @@ main ()
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
- "4"
+ "4"
#else
- ""
+ ""
#endif
- ); exit (0);
+ ); exit (0);
#endif
#endif
diff --git a/config.h.in b/config.h.in
index 9e3dc70..e0f2726 100644
--- a/config.h.in
+++ b/config.h.in
@@ -31,9 +31,6 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
-/* Define to 1 if you have the `metis' library (-lmetis). */
-#undef HAVE_LIBMETIS
-
/* Define to 1 if you have the `mpich' library (-lmpich). */
#undef HAVE_LIBMPICH
@@ -52,14 +49,8 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
-/* Define to 1 if you have the <mpich2/mpi.h> header file. */
-#undef HAVE_MPICH2_MPI_H
-
-/* Define to 1 if you have the <mpi.h> header file. */
-#undef HAVE_MPI_H
-
-/* Define to 1 if you have the <mpi/mpi.h> header file. */
-#undef HAVE_MPI_MPI_H
+/* defined if the Metis library was found and is working */
+#undef HAVE_METIS
/* Define to 1 if you have the <muParser.h> header file. */
#undef HAVE_MUPARSER_H
diff --git a/config.sub b/config.sub
index eb0389a..c894da4 100755
--- a/config.sub
+++ b/config.sub
@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2009-06-11'
+timestamp='2012-02-10'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-06-11'
# 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@ timestamp='2009-06-11'
# Please send patches to <config-patches at gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# 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.
@@ -72,8 +73,9 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+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."
@@ -120,13 +122,18 @@ esac
# 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-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ 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 ]
@@ -149,12 +156,12 @@ case $os in
-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)
+ -apple | -axis | -knuth | -cray | -microblaze)
os=
basic_machine=$1
;;
- -bluegene*)
- os=-cnk
+ -bluegene*)
+ os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
@@ -170,10 +177,10 @@ case $os in
os=-chorusos
basic_machine=$1
;;
- -chorusrdb)
- os=-chorusrdb
+ -chorusrdb)
+ os=-chorusrdb
basic_machine=$1
- ;;
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -242,17 +249,22 @@ case $basic_machine in
# 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 \
@@ -278,27 +290,39 @@ case $basic_machine in
| moxie \
| mt \
| msp430 \
+ | nds32 | nds32le | nds32be \
| nios | nios2 \
| ns16k | ns32k \
+ | open8 \
| or32 \
| pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | 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 | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
| we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
+ 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
;;
@@ -308,6 +332,21 @@ case $basic_machine in
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.
@@ -322,25 +361,29 @@ case $basic_machine in
# 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-* | c54x-* | c55x-* | c6x-* \
+ | 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-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
@@ -362,24 +405,29 @@ case $basic_machine in
| mmix-* \
| mt-* \
| msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
- | romp-* | rs6000-* \
+ | 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-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
| tron-* \
- | v850-* | v850e-* | vax-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-* | z80-*)
@@ -404,7 +452,7 @@ case $basic_machine in
basic_machine=a29k-amd
os=-udi
;;
- abacus)
+ abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@@ -474,11 +522,20 @@ case $basic_machine in
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)
+ cegcc)
basic_machine=arm-unknown
os=-cegcc
;;
@@ -510,7 +567,7 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16)
+ cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
@@ -668,7 +725,6 @@ case $basic_machine in
i370-ibm* | ibm*)
basic_machine=i370-ibm
;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
@@ -726,6 +782,9 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
mingw32)
basic_machine=i386-pc
os=-mingw32
@@ -762,10 +821,18 @@ case $basic_machine in
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
@@ -830,6 +897,12 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -912,9 +985,10 @@ case $basic_machine in
;;
power) basic_machine=power-ibm
;;
- ppc) basic_machine=powerpc-unknown
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
@@ -1008,6 +1082,9 @@ case $basic_machine in
basic_machine=i860-stratus
os=-sysv4
;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -1064,20 +1141,8 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
tile*)
- basic_machine=tile-unknown
+ basic_machine=$basic_machine-unknown
os=-linux-gnu
;;
tx39)
@@ -1147,6 +1212,9 @@ case $basic_machine in
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
@@ -1244,9 +1312,12 @@ esac
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
+ # 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|'`
;;
@@ -1268,8 +1339,8 @@ case $os in
# -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* | -solaris* | -sym* \
- | -kopensolaris* \
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1281,8 +1352,9 @@ case $os in
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -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* \
@@ -1290,7 +1362,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1329,7 +1401,7 @@ case $os in
-opened*)
os=-openedition
;;
- -os400*)
+ -os400*)
os=-os400
;;
-wince*)
@@ -1378,7 +1450,7 @@ case $os in
-sinix*)
os=-sysv4
;;
- -tpf*)
+ -tpf*)
os=-tpf
;;
-triton*)
@@ -1423,6 +1495,8 @@ case $os in
-dicos*)
os=-dicos
;;
+ -nacl*)
+ ;;
-none)
;;
*)
@@ -1445,10 +1519,10 @@ else
# system, and we'll never get to this point.
case $basic_machine in
- score-*)
+ score-*)
os=-elf
;;
- spu-*)
+ spu-*)
os=-elf
;;
*-acorn)
@@ -1460,8 +1534,17 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
@@ -1481,14 +1564,11 @@ case $basic_machine in
;;
m68000-sun)
os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
;;
m68*-cisco)
os=-aout
;;
- mep-*)
+ mep-*)
os=-elf
;;
mips*-cisco)
@@ -1515,7 +1595,7 @@ case $basic_machine in
*-ibm)
os=-aix
;;
- *-knuth)
+ *-knuth)
os=-mmixware
;;
*-wec)
diff --git a/configure b/configure
index b17ff9c..2f956f7 100755
--- a/configure
+++ b/configure
@@ -1,11 +1,11 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for getfem 4.1.1.
+# Generated by GNU Autoconf 2.68 for getfem 4.2.
#
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -89,6 +89,7 @@ fi
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
@@ -171,6 +172,14 @@ test x\$exitcode = x0 || exit 1"
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
@@ -214,11 +223,18 @@ IFS=$as_save_IFS
# 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
export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+ 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+"$@"}
fi
if test x$as_have_required = xno; then :
@@ -316,7 +332,7 @@ $as_echo X"$as_dir" |
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"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
@@ -356,19 +372,19 @@ else
fi # as_fn_arith
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+ 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: $1" >&2
+ $as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -525,161 +541,14 @@ 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'"
-
-
-# Check that we are running under the correct shell.
SHELL=${CONFIG_SHELL-/bin/sh}
-case X$lt_ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
- ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
- # Yippee, $ECHO works!
- :
-else
- # Restart under the correct shell.
- exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<_LT_EOF
-$*
-_LT_EOF
- exit 0
-fi
-
-# 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
-
-if test -z "$lt_ECHO"; then
- if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
- { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
- then
- break
- fi
- done
- fi
-
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
- else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$ECHO" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- ECHO='print -r'
- elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
- else
- # Try using printf.
- ECHO='printf %s\n'
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- ECHO="$CONFIG_SHELL $0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$CONFIG_SHELL $0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
- if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
-
- if test "$prev" != 'sed 50q "$0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
- else
- # Oops. We lost completely, so just stick with echo.
- ECHO=echo
- fi
- fi
- fi
- fi
- fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
- lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
test -n "$DJDIR" || exec 7<&0 </dev/null
exec 6>&1
# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# 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`
@@ -698,8 +567,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='getfem'
PACKAGE_TARNAME='getfem'
-PACKAGE_VERSION='4.1.1'
-PACKAGE_STRING='getfem 4.1.1'
+PACKAGE_VERSION='4.2'
+PACKAGE_STRING='getfem 4.2'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -744,6 +613,7 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+IM_METHODS_LOC
IM_METHODS
GETFEM_BUILD_INTERFACE_PATH
GETFEM_INTERFACE_PATH
@@ -828,9 +698,11 @@ OTOOL
LIPO
NMEDIT
DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
RANLIB
+ac_ct_AR
AR
+DLLTOOL
OBJDUMP
LN_S
NM
@@ -865,6 +737,7 @@ CC
am__fastdepCXX_FALSE
am__fastdepCXX_TRUE
CXXDEPMODE
+am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
@@ -944,24 +817,29 @@ ac_user_opts='
enable_option_checking
with_optimization
enable_dependency_tracking
+with_pic
enable_shared
enable_static
-with_pic
enable_fast_install
with_gnu_ld
+with_sysroot
enable_libtool_lock
with_blas
enable_superlu
+enable_experimental
with_qd_lib_dir
with_qd_include_dir
enable_dd
enable_qd
enable_qhull
+with_muparser_include_dir
enable_muparser
with_mumps_include_dir
-with_mumps
enable_mumps
+enable_par_mumps
+with_mumps
enable_paralevel
+enable_metis
enable_boost
enable_matlab
with_matlab_toolbox_dir
@@ -989,6 +867,7 @@ FC
FCFLAGS
CXXCPP
CPP
+PYTHON
PYTHON_VERSION'
@@ -1052,8 +931,9 @@ do
fi
case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1098,7 +978,7 @@ do
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"
+ 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
@@ -1124,7 +1004,7 @@ do
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"
+ 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
@@ -1328,7 +1208,7 @@ do
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"
+ 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
@@ -1344,7 +1224,7 @@ do
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"
+ 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
@@ -1374,8 +1254,8 @@ do
| --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."
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
;;
*=*)
@@ -1383,7 +1263,7 @@ Try \`$0 --help' for more information."
# 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'" ;;
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
@@ -1393,7 +1273,7 @@ Try \`$0 --help' for more information."
$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}
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
esac
@@ -1401,13 +1281,13 @@ done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error "missing argument to $ac_option"
+ 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" ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1430,7 +1310,7 @@ do
[\\/$]* | ?:[\\/]* ) continue;;
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+ 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'
@@ -1444,8 +1324,8 @@ target=$target_alias
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
@@ -1460,9 +1340,9 @@ 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"
+ 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"
+ as_fn_error $? "pwd does not report name of working directory"
# Find the source files, if location was not specified.
@@ -1501,11 +1381,11 @@ else
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"
+ 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"
+ 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
@@ -1531,7 +1411,7 @@ 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 getfem 4.1.1 to adapt to many kinds of systems.
+\`configure' configures getfem 4.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1545,7 +1425,7 @@ Configuration:
--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
+ -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
@@ -1601,7 +1481,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of getfem 4.1.1:";;
+ short | recursive ) echo "Configuration of getfem 4.2:";;
esac
cat <<\_ACEOF
@@ -1617,21 +1497,25 @@ Optional Features:
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-superlu turn on/off SuperLU support
+ --enable-experimental compile experimental parts of the library
--enable-dd enable the use of the qd library (some computation
- will be done with double-double precision, usefull
+ will be done with double-double precision, useful
for high order FEMs)
--enable-qd enable the use of the qd library (some computation
- will be done with quad-double precision, usefull for
+ will be done with quad-double precision, useful for
high order FEMs)
--enable-qhull enable the use of the qhull library (required for
generation of non regular meshes)
--enable-muparser enable the use of the muParser library (required for
parsing mathematical expressions)
- --enable-mumps enable the use of the MUMPS library. A direct solver
- for large sparse linear systems.
+ --enable-mumps enable the use of the (sequential) MUMPS library. A
+ direct solver for large sparse linear systems.
+ --enable-par-mumps enable the use of the parrallel MUMPS library. A
+ direct solver for large sparse linear systems.
--enable-paralevel=level
enable the parallel version fo Getfem (use MPI and
METIS)
+ --enable-metis enable the use of the METIS library.
--enable-boost assume that boost is installed and use it
--enable-matlab turn on/off matlab support
--enable-python turn on/off python support
@@ -1643,12 +1527,17 @@ Optional Packages:
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-optimization=FLAG
Set the optimization level (-O3 by default)
- --with-pic try to use only PIC/non-PIC objects [default=use
+ --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-blas=<lib> use BLAS library <lib>
--with-qd-lib-dir directory in which the libqd.a can be found
--with-qd-include-dir directory in which the qd.h header can be found
+ --with-muparser-include-dir
+ directory in which the muParser.h header can be
+ found
--with-mumps-include-dir
directory in which the dmumps.h header can be found
--with-mumps=<lib> use MUMPS library <lib>
@@ -1663,6 +1552,9 @@ Optional Packages:
Set the required Scilab version
--with-scilab-toolbox-dir=DIR
Set the path to the toolbox installation directory
+ --with-scilab-toolbox-dir
+ directory in which the scilab interface will be
+ installed
Some influential environment variables:
CXX C++ compiler command
@@ -1678,6 +1570,7 @@ Some influential environment variables:
FCFLAGS Fortran compiler flags
CXXCPP C++ preprocessor
CPP C preprocessor
+ PYTHON the Python interpreter
PYTHON_VERSION
The installed Python version to use, for example '2.3'. This
string will be appended to the Python interpreter canonical
@@ -1749,10 +1642,10 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-getfem configure 4.1.1
-generated by GNU Autoconf 2.65
+getfem configure 4.2
+generated by GNU Autoconf 2.68
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1796,7 +1689,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_compile
@@ -1834,7 +1727,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_compile
@@ -1872,7 +1765,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_fc_try_compile
@@ -1898,7 +1791,7 @@ $as_echo "$ac_try_echo"; } >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } >/dev/null && {
+ test $ac_status = 0; } > conftest.i && {
test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
test ! -s conftest.err
}; then :
@@ -1909,7 +1802,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_cpp
@@ -1955,7 +1848,7 @@ fi
# 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_link
@@ -1969,7 +1862,7 @@ 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1987,7 +1880,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
@@ -2012,7 +1905,7 @@ $as_echo "$ac_try_echo"; } >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } >/dev/null && {
+ test $ac_status = 0; } > conftest.i && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
}; then :
@@ -2023,7 +1916,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_cpp
@@ -2065,7 +1958,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_run
@@ -2078,7 +1971,7 @@ 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2133,7 +2026,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
@@ -2178,7 +2071,7 @@ fi
# 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_link
@@ -2224,7 +2117,7 @@ fi
# 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_fc_try_link
@@ -2237,7 +2130,7 @@ ac_fn_cxx_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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2300,7 +2193,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_cxx_check_func
@@ -2312,10 +2205,10 @@ $as_echo "$ac_res" >&6; }
ac_fn_cxx_check_header_mongrel ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+ if eval \${$3+:} false; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
fi
eval ac_res=\$$3
@@ -2351,7 +2244,7 @@ if ac_fn_cxx_try_cpp "$LINENO"; then :
else
ac_header_preproc=no
fi
-rm -f conftest.err conftest.$ac_ext
+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; }
@@ -2378,7 +2271,7 @@ $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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
eval "$3=\$ac_header_compiler"
@@ -2387,7 +2280,7 @@ 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_cxx_check_header_mongrel
@@ -2428,7 +2321,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_run
@@ -2436,8 +2329,8 @@ 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 getfem $as_me 4.1.1, which was
-generated by GNU Autoconf 2.65. Invocation command line was
+It was created by getfem $as_me 4.2, which was
+generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2547,11 +2440,9 @@ trap 'exit_status=$?
{
echo
- cat <<\_ASBOX
-## ---------------- ##
+ $as_echo "## ---------------- ##
## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
echo
# The following way of writing the cache mishandles newlines in values,
(
@@ -2585,11 +2476,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
)
echo
- cat <<\_ASBOX
-## ----------------- ##
+ $as_echo "## ----------------- ##
## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
echo
for ac_var in $ac_subst_vars
do
@@ -2602,11 +2491,9 @@ _ASBOX
echo
if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
+ $as_echo "## ------------------- ##
## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
echo
for ac_var in $ac_subst_files
do
@@ -2620,11 +2507,9 @@ _ASBOX
fi
if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
+ $as_echo "## ----------- ##
## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
echo
cat confdefs.h
echo
@@ -2679,7 +2564,12 @@ _ACEOF
ac_site_file1=NONE
ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
+ # 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
@@ -2694,7 +2584,11 @@ do
{ $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"
+ . "$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
@@ -2754,7 +2648,7 @@ if $ac_cache_corrupted; then
$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
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2768,8 +2662,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
MAJOR_VERSION="4"
-MINOR_VERSION="1"
-PATCH_VERSION="1"
+MINOR_VERSION="2"
+PATCH_VERSION="0"
@@ -2797,16 +2691,22 @@ am__api_version='1.11'
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- for ac_t in install-sh install.sh shtool; do
- if test -f "$ac_dir/$ac_t"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/$ac_t -c"
- break 2
- fi
- done
+ 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
+ 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,
@@ -2835,7 +2735,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
{ $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 test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
$as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2922,11 +2822,11 @@ am_lf='
'
case `pwd` in
*[\\\"\#\$\&\'\`$am_lf]*)
- as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+ 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;;
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
esac
# Do `set' in a subshell so we don't clobber the current shell's
@@ -2948,7 +2848,7 @@ if (
# 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
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
alias in your environment" "$LINENO" 5
fi
@@ -2958,7 +2858,7 @@ then
# Ok.
:
else
- as_fn_error "newly created file is older than distributed files!
+ 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
@@ -3002,7 +2902,7 @@ if test "$cross_compiling" != no; then
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 test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
@@ -3042,7 +2942,7 @@ if test -z "$ac_cv_prog_STRIP"; then
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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
@@ -3095,7 +2995,7 @@ 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 test "${ac_cv_path_mkdir+set}" = set; then :
+ if ${ac_cv_path_mkdir+:} false; then :
$as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3146,7 +3046,7 @@ do
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 test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$AWK"; then
@@ -3186,7 +3086,7 @@ done
$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
$as_echo_n "(cached) " >&6
else
cat >conftest.make <<\_ACEOF
@@ -3194,7 +3094,7 @@ SHELL = /bin/sh
all:
@echo '@@@%%%=$(MAKE)=@@@%%%'
_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# 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;;
@@ -3228,7 +3128,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
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
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
fi
fi
@@ -3244,7 +3144,7 @@ fi
# Define the identity of the package.
PACKAGE='getfem'
- VERSION='4.1.1'
+ VERSION='4.2'
cat >>confdefs.h <<_ACEOF
@@ -3274,11 +3174,11 @@ 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.
+# 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}'
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
@@ -3315,7 +3215,7 @@ if test -z "$CXX"; then
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 test "${ac_cv_prog_CXX+set}" = set; then :
+if ${ac_cv_prog_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CXX"; then
@@ -3359,7 +3259,7 @@ do
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 test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CXX"; then
@@ -3522,9 +3422,8 @@ 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_set_status 77
-as_fn_error "C++ compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+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; }
@@ -3566,8 +3465,8 @@ 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; }
+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
@@ -3624,9 +3523,9 @@ $as_echo "$ac_try_echo"; } >&5
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.
+as_fn_error $? "cannot run C++ compiled programs.
If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
@@ -3637,7 +3536,7 @@ 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 test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3677,8 +3576,8 @@ 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; }
+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
@@ -3688,7 +3587,7 @@ 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 test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3725,7 +3624,7 @@ ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
+if ${ac_cv_prog_cxx_g+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
@@ -3858,6 +3757,7 @@ 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=
@@ -3873,7 +3773,7 @@ depcc="$CXX" 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 test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3882,6 +3782,7 @@ else
# 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.
@@ -3941,7 +3842,7 @@ else
break
fi
;;
- msvisualcpp | msvcmsys)
+ 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.
@@ -4008,7 +3909,7 @@ if test -n "$ac_tool_prefix"; then
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 test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
@@ -4052,7 +3953,7 @@ do
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 test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
@@ -4104,8 +4005,8 @@ 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; }
+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
@@ -4134,7 +4035,7 @@ done
{ $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 test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4171,7 +4072,7 @@ 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 test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_c_werror_flag=$ac_c_werror_flag
@@ -4249,7 +4150,7 @@ else
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 test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_cv_prog_cc_c89=no
@@ -4348,7 +4249,7 @@ 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+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
@@ -4357,6 +4258,7 @@ else
# 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.
@@ -4416,7 +4318,7 @@ else
break
fi
;;
- msvisualcpp | msvcmsys)
+ 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.
@@ -4476,13 +4378,13 @@ 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 g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+ for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
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 test "${ac_cv_prog_FC+set}" = set; then :
+if ${ac_cv_prog_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$FC"; then
@@ -4520,13 +4422,13 @@ fi
fi
if test -z "$FC"; then
ac_ct_FC=$FC
- for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+ for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
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 test "${ac_cv_prog_ac_ct_FC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_FC"; then
@@ -4608,7 +4510,7 @@ 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 test "${ac_cv_fc_compiler_gnu+set}" = set; then :
+if ${ac_cv_fc_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.$ac_ext <<_ACEOF
@@ -4636,7 +4538,7 @@ 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 test "${ac_cv_prog_fc_g+set}" = set; then :
+if ${ac_cv_prog_fc_g+:} false; then :
$as_echo_n "(cached) " >&6
else
FCFLAGS=-g
@@ -4686,7 +4588,7 @@ ac_compiler_gnu=$ac_cv_cxx_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; }
if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+ if ${ac_cv_prog_CXXCPP+:} false; then :
$as_echo_n "(cached) " >&6
else
# Double quotes because CXXCPP needs to be expanded
@@ -4716,7 +4618,7 @@ else
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
@@ -4732,11 +4634,11 @@ else
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
if $ac_preproc_ok; then :
break
fi
@@ -4775,7 +4677,7 @@ else
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
@@ -4791,18 +4693,18 @@ else
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+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 \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=c
@@ -4821,7 +4723,7 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5
$as_echo_n "checking how to get verbose linking output from $FC... " >&6; }
-if test "${ac_cv_prog_fc_v+set}" = set; then :
+if ${ac_cv_prog_fc_v+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.$ac_ext <<_ACEOF
@@ -4851,7 +4753,8 @@ $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_fc_v_output=`eval $ac_link 5>&1 2>&1 |
- grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="`
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
$as_echo "$ac_fc_v_output" >&5
FCFLAGS=$ac_save_FCFLAGS
@@ -4916,7 +4819,7 @@ fi
$as_echo "$ac_cv_prog_fc_v" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5
$as_echo_n "checking for Fortran libraries of $FC... " >&6; }
-if test "${ac_cv_fc_libs+set}" = set; then :
+if ${ac_cv_fc_libs+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "x$FCLIBS" != "x"; then
@@ -4941,7 +4844,8 @@ $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_fc_v_output=`eval $ac_link 5>&1 2>&1 |
- grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="`
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
$as_echo "$ac_fc_v_output" >&5
FCFLAGS=$ac_save_FCFLAGS
@@ -5031,7 +4935,7 @@ fi
;;
# Ignore these flags.
-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
- |-LANG:=* | -LIST:* | -LNO:*)
+ |-LANG:=* | -LIST:* | -LNO:* | -link)
;;
-lkernel32)
test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
@@ -5139,7 +5043,7 @@ fi;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler recognizes the partial specialization syntax" >&5
$as_echo_n "checking whether the compiler recognizes the partial specialization syntax... " >&6; }
-if test "${ac_cv_cxx_partial_specialization_syntax+set}" = set; then :
+if ${ac_cv_cxx_partial_specialization_syntax+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -5186,27 +5090,27 @@ 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_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 test "${ac_cv_build+set}" = set; then :
+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
+ 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
+ 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;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
esac
build=$ac_cv_build
ac_save_IFS=$IFS; IFS='-'
@@ -5224,14 +5128,14 @@ 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 test "${ac_cv_host+set}" = set; then :
+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
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
fi
fi
@@ -5239,7 +5143,7 @@ fi
$as_echo "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
esac
host=$ac_cv_host
ac_save_IFS=$IFS; IFS='-'
@@ -5463,80 +5367,86 @@ esac
-# 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=no
-fi
+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'
+
-# 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
+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'
-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
+# 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 ""
+}
-macro_version='2.2.6b'
-macro_revision='1.3017'
+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
@@ -5550,11 +5460,10 @@ macro_revision='1.3017'
-ltmain="$ac_aux_dir/ltmain.sh"
{ $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 test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -5609,7 +5518,7 @@ esac
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
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
fi
else
ac_cv_path_SED=$SED
@@ -5636,7 +5545,7 @@ 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 test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$GREP"; then
@@ -5685,7 +5594,7 @@ esac
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
+ 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
@@ -5699,7 +5608,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -5751,7 +5660,7 @@ esac
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
+ 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
@@ -5766,7 +5675,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
$as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+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
@@ -5818,7 +5727,7 @@ esac
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
+ 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
@@ -5897,7 +5806,7 @@ 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 test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$LD"; then
@@ -5934,10 +5843,10 @@ 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
+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 test "${lt_cv_prog_gnu_ld+set}" = set; then :
+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.
@@ -5964,7 +5873,7 @@ 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 test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$NM"; then
@@ -6017,14 +5926,17 @@ 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 "$ac_tool_prefix"; then
- for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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 test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$DUMPBIN"; then
@@ -6062,13 +5974,13 @@ fi
fi
if test -z "$DUMPBIN"; then
ac_ct_DUMPBIN=$DUMPBIN
- for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ 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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_DUMPBIN"; then
@@ -6117,6 +6029,15 @@ esac
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"
@@ -6131,18 +6052,18 @@ 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 test "${lt_cv_nm_interface+set}" = set; then :
+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:6139: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:6142: $NM \\\"conftest.$ac_objext\\\"\"" >&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:6145: output\"" >&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"
@@ -6166,7 +6087,7 @@ 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 test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
$as_echo_n "(cached) " >&6
else
i=0
@@ -6199,6 +6120,11 @@ else
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.
@@ -6224,6 +6150,11 @@ else
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
@@ -6263,8 +6194,8 @@ else
# 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
- = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ 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`
@@ -6306,8 +6237,8 @@ $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"}, \
- = c,a/b,, \
+ 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
@@ -6356,9 +6287,83 @@ 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 test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_ld_reload_flag='-r'
@@ -6372,6 +6377,11 @@ case $reload_flag in
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'
@@ -6394,7 +6404,7 @@ if test -n "$ac_tool_prefix"; then
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 test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OBJDUMP"; then
@@ -6434,7 +6444,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OBJDUMP"; then
@@ -6493,7 +6503,7 @@ 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 test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -6535,16 +6545,18 @@ 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.
- if ( file / ) >/dev/null 2>&1; then
+ # 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
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ # 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)
+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'
@@ -6574,6 +6586,10 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
case $host_cpu in
@@ -6582,11 +6598,11 @@ hpux10.20* | hpux11*)
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]) shared object file - PA-RISC [0-9].[0-9]'
+ 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_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
@@ -6607,7 +6623,7 @@ irix5* | irix6* | nonstopux*)
lt_cv_deplibs_check_method=pass_all
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
@@ -6689,6 +6705,21 @@ 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
@@ -6704,16 +6735,26 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+ # 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 test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
+ 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
@@ -6722,7 +6763,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
+ 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
@@ -6732,10 +6773,10 @@ 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; }
+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; }
@@ -6743,17 +6784,17 @@ fi
fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
+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 test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} 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.
+ 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
@@ -6762,7 +6803,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_AR="ar"
+ 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
@@ -6772,17 +6813,17 @@ 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; }
+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_AR" = x; then
- AR="false"
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
else
case $cross_compiling:$ac_tool_warned in
yes:)
@@ -6790,15 +6831,13 @@ yes:)
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
- AR=$ac_ct_AR
+ DLLTOOL=$ac_ct_DLLTOOL
fi
else
- AR="$ac_cv_prog_AR"
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
fi
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-
+test -z "$DLLTOOL" && DLLTOOL=dlltool
@@ -6809,19 +6848,228 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
-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 test "${ac_cv_prog_STRIP+set}" = set; then :
+{ $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
- 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
+ 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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_cxx_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=.
@@ -6854,7 +7102,7 @@ if test -z "$ac_cv_prog_STRIP"; then
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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
@@ -6913,7 +7161,7 @@ if test -n "$ac_tool_prefix"; then
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 test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$RANLIB"; then
@@ -6953,7 +7201,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_RANLIB"; then
@@ -7015,15 +7263,27 @@ old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
;;
*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
;;
esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ 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
+
+
+
+
+
+
@@ -7070,7 +7330,7 @@ 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -7131,8 +7391,8 @@ esac
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'"
+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=
@@ -7156,6 +7416,7 @@ for ac_symprfx in "" "_"; do
# 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};"\
@@ -7168,6 +7429,7 @@ for ac_symprfx in "" "_"; do
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
@@ -7193,8 +7455,8 @@ _LT_EOF
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
+ 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
@@ -7209,6 +7471,18 @@ _LT_EOF
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
@@ -7220,7 +7494,7 @@ _LT_EOF
cat <<_LT_EOF >> conftest.$ac_ext
/* The mapping between symbol names and symbols. */
-const struct {
+LT_DLSYM_CONST struct {
const char *name;
void *address;
}
@@ -7246,8 +7520,8 @@ static const void *lt_preloaded_setup() {
_LT_EOF
# Now try linking the two files.
mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
+ 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
@@ -7257,8 +7531,8 @@ _LT_EOF
test $ac_status = 0; } && test -s conftest${ac_exeext}; then
pipe_works=yes
fi
- LIBS="$lt_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
else
echo "cannot find nm_test_func in $nlist" >&5
fi
@@ -7295,6 +7569,19 @@ else
$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
+
+
+
+
+
+
+
@@ -7315,6 +7602,42 @@ 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.
@@ -7348,7 +7671,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 7351 "configure"' > conftest.$ac_ext
+ 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=$?
@@ -7442,7 +7765,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
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 test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=c
@@ -7483,7 +7806,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
CFLAGS="$SAVE_CFLAGS"
fi
;;
-sparc*-*solaris*)
+*-*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
@@ -7494,7 +7817,20 @@ sparc*-*solaris*)
case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ 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"
@@ -7510,19 +7846,16 @@ esac
need_locks="$enable_libtool_lock"
-
- 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
+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 test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+ 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
@@ -7531,7 +7864,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ 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
@@ -7541,10 +7874,10 @@ 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; }
+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; }
@@ -7552,17 +7885,17 @@ 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
+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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} 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.
+ 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
@@ -7571,7 +7904,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ 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
@@ -7581,17 +7914,17 @@ 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; }
+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_DSYMUTIL" = x; then
- DSYMUTIL=":"
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
else
case $cross_compiling:$ac_tool_warned in
yes:)
@@ -7599,32 +7932,152 @@ yes:)
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
- DSYMUTIL=$ac_ct_DSYMUTIL
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
fi
else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
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 test "${ac_cv_prog_NMEDIT+set}" = set; then :
+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
- 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+ 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
@@ -7650,7 +8103,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_NMEDIT"; then
@@ -7702,7 +8155,7 @@ fi
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 test "${ac_cv_prog_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$LIPO"; then
@@ -7742,7 +8195,7 @@ if test -z "$ac_cv_prog_LIPO"; then
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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_LIPO"; then
@@ -7794,7 +8247,7 @@ fi
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 test "${ac_cv_prog_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OTOOL"; then
@@ -7834,7 +8287,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OTOOL"; then
@@ -7886,7 +8339,7 @@ fi
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 test "${ac_cv_prog_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$OTOOL64"; then
@@ -7926,7 +8379,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_OTOOL64"; then
@@ -8001,7 +8454,7 @@ 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 test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_apple_cc_single_mod=no
@@ -8017,7 +8470,13 @@ else
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ # 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
@@ -8028,9 +8487,10 @@ else
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 test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_ld_exported_symbols_list=no
@@ -8060,6 +8520,41 @@ rm -f core conftest.err conftest.$ac_objext \
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' ;;
@@ -8087,7 +8582,7 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
else
_lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
fi
- if test "$DSYMUTIL" != ":"; then
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
_lt_dsymutil='~$DSYMUTIL $lib || :'
else
_lt_dsymutil=
@@ -8107,7 +8602,7 @@ if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then :
+ if ${ac_cv_prog_CPP+:} false; then :
$as_echo_n "(cached) " >&6
else
# Double quotes because CPP needs to be expanded
@@ -8137,7 +8632,7 @@ else
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
@@ -8153,11 +8648,11 @@ else
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
if $ac_preproc_ok; then :
break
fi
@@ -8196,7 +8691,7 @@ else
# Broken: fails on valid input.
continue
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
@@ -8212,18 +8707,18 @@ else
ac_preproc_ok=:
break
fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+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; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=c
@@ -8235,7 +8730,7 @@ 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 test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8352,8 +8847,7 @@ 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
"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
+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
@@ -8367,7 +8861,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_DLFCN_H 1
_ACEOF
@@ -8378,746 +8872,78 @@ done
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- 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 test "${ac_cv_prog_CXX+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CXX="$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
+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
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-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 test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+
+# Set options
+
+# 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
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ pic_mode=default
fi
- test -n "$ac_ct_CXX" && break
-done
+test -z "$pic_mode" && pic_mode=yes
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- 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
- CXX=$ac_ct_CXX
- fi
-fi
- fi
-fi
-# 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
-
-{ $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 test "${ac_cv_cxx_compiler_gnu+set}" = set; 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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-depcc="$CXX" 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 test "${am_cv_CXX_dependencies_compiler_type+set}" = set; 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'.
- 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_CXX_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
- ;;
- 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_CXX_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_CXX_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
- am__fastdepCXX_TRUE=
- am__fastdepCXX_FALSE='#'
-else
- am__fastdepCXX_TRUE='#'
- am__fastdepCXX_FALSE=
-fi
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
- ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
- (test "X$CXX" != "Xg++"))) ; then
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_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; }
-if test -z "$CXXCPP"; then
- if test "${ac_cv_prog_CXXCPP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err 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 <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> 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 <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err 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 <ac_nonexistent.h>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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;}
-_lt_caught_CXX_error=yes; }
-fi
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-else
- _lt_caught_CXX_error=yes
-fi
-
-
-
-
-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 g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
- 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 test "${ac_cv_prog_FC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
-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 test "${ac_cv_prog_ac_ct_FC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_fc_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_fc_g+set}" = set; 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
+# 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
- ac_cv_prog_fc_g=no
+ enable_shared=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
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$FC" || test "X$FC" = "Xno"; then
- _lt_disable_FC=yes
-fi
-# Set options
@@ -9128,17 +8954,31 @@ fi
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
- withval=$with_pic; pic_mode="$withval"
+ # 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
- pic_mode=default
+ enable_static=yes
fi
-test -z "$pic_mode" && pic_mode=default
+
@@ -9209,6 +9049,11 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
test -z "$LN_S" && LN_S="ln -s"
@@ -9230,7 +9075,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
$as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
$as_echo_n "(cached) " >&6
else
rm -f .libs 2>/dev/null
@@ -9258,19 +9103,6 @@ _ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
case $host_os in
aix3*)
# AIX sometimes has problems with the GCC collect2 program. For some
@@ -9283,23 +9115,6 @@ aix3*)
;;
esac
-# Sed substitution that helps us do robust quoting. It backslashifies
-# 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'
-
# Global variables:
ofile=libtool
can_build_shared=yes
@@ -9328,7 +9143,7 @@ for cc_temp in $compiler""; do
*) break;;
esac
done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
# Only perform the check for file, if the check method requires it
@@ -9338,7 +9153,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
$as_echo_n "(cached) " >&6
else
case $MAGIC_CMD in
@@ -9404,7 +9219,7 @@ 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
$as_echo_n "(cached) " >&6
else
case $MAGIC_CMD in
@@ -9537,11 +9352,16 @@ if test -n "$compiler"; then
lt_prog_compiler_no_builtin_flag=
if test "$GCC" = yes; then
- lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+ 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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_rtti_exceptions=no
@@ -9557,15 +9377,15 @@ else
-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:9560: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9564: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $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
@@ -9594,8 +9414,6 @@ fi
lt_prog_compiler_pic=
lt_prog_compiler_static=
-{ $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 test "$GCC" = yes; then
lt_prog_compiler_wl='-Wl,'
@@ -9643,6 +9461,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
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
@@ -9685,6 +9509,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
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
@@ -9747,7 +9580,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic='--shared'
lt_prog_compiler_static='--static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
+ 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,'
@@ -9759,25 +9598,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
# All Alpha code is PIC.
lt_prog_compiler_static='-non_shared'
;;
- xl*)
- # IBM XL C 8.0/Fortran 10.1 on PPC
+ 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,'
;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
+ *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'
- lt_prog_compiler_wl=''
;;
esac
;;
@@ -9809,7 +9663,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
case $cc_basename in
- f77* | f90* | f95*)
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
lt_prog_compiler_wl='-Qoption ld ';;
*)
lt_prog_compiler_wl='-Wl,';;
@@ -9866,13 +9720,17 @@ case $host_os in
lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
+{ $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.
@@ -9880,7 +9738,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
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 test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_pic_works=no
@@ -9896,15 +9754,15 @@ else
-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:9899: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9903: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $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
@@ -9933,13 +9791,18 @@ 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 test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_static_works=no
@@ -9952,7 +9815,7 @@ else
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&5
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $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
@@ -9982,7 +9845,7 @@ 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 test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o=no
@@ -10001,16 +9864,16 @@ else
-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:10004: $lt_compile\"" >&5)
+ (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:10008: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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
@@ -10037,7 +9900,7 @@ $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 test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o=no
@@ -10056,16 +9919,16 @@ else
-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:10059: $lt_compile\"" >&5)
+ (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:10063: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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
@@ -10131,7 +9994,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
hardcode_direct=no
hardcode_direct_absolute=no
hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld=
hardcode_libdir_separator=
hardcode_minus_L=no
hardcode_shlibpath_var=unsupported
@@ -10175,13 +10037,39 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd*)
with_gnu_ld=no
;;
- linux* | k*bsd*-gnu)
+ 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}'
@@ -10215,11 +10103,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
ld_shlibs=no
cat <<_LT_EOF 1>&2
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** 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
@@ -10255,10 +10144,12 @@ _LT_EOF
# _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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ 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'
@@ -10276,6 +10167,11 @@ _LT_EOF
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
@@ -10301,15 +10197,16 @@ _LT_EOF
if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
&& test "$tmp_diet" = no
then
- tmp_addflag=
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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*) # 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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' ;;
@@ -10320,13 +10217,17 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec=
tmp_sharedflag='--shared' ;;
- xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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
@@ -10342,17 +10243,16 @@ _LT_EOF
fi
case $cc_basename in
- xlf*)
+ 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=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ 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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
;;
esac
@@ -10366,8 +10266,8 @@ _LT_EOF
archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
else
- 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'
+ 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
;;
@@ -10385,8 +10285,8 @@ _LT_EOF
_LT_EOF
elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- 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'
+ 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
@@ -10432,8 +10332,8 @@ _LT_EOF
*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- 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'
+ 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
@@ -10473,8 +10373,10 @@ _LT_EOF
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")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 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
@@ -10562,7 +10464,13 @@ _LT_EOF
allow_undefined_flag='-berok'
# Determine the default libpath from the value encoded in an
# empty executable.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ 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
@@ -10575,25 +10483,32 @@ main ()
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ 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
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ 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'
@@ -10602,7 +10517,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
else
# Determine the default libpath from the value encoded in an
# empty executable.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ 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
@@ -10615,30 +10536,42 @@ main ()
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+ 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ 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'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
+ 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'
@@ -10670,20 +10603,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
- 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 `$ECHO "X$deplibs" | $Xsed -e '\''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'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes=yes
+ 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*)
@@ -10693,7 +10670,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_direct=no
hardcode_automatic=yes
hardcode_shlibpath_var=unsupported
- whole_archive_flag_spec=''
+ 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
@@ -10701,7 +10683,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*) _lt_dar_can_shared=$GCC ;;
esac
if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=echo
+ 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}"
@@ -10719,10 +10701,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_shlibpath_var=no
;;
- freebsd1*)
- ld_shlibs=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
@@ -10735,7 +10713,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
+ freebsd2.*)
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
hardcode_direct=yes
hardcode_minus_L=yes
@@ -10744,7 +10722,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ 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
@@ -10752,7 +10730,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hpux9*)
if test "$GCC" = yes; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ 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
@@ -10767,14 +10745,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ 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_flag_spec_ld='+b $libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
hardcode_direct_absolute=yes
@@ -10786,16 +10763,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -10807,7 +10784,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -10835,26 +10851,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
irix5* | irix6* | nonstopux*)
if test "$GCC" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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.
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ # 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) {}
+int foo (void) { return 0; }
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+ 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"
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ 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'
@@ -10916,17 +10945,17 @@ rm -f core conftest.err conftest.$ac_objext \
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'
+ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ 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'
@@ -10936,13 +10965,13 @@ rm -f core conftest.err conftest.$ac_objext \
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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ 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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $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'
@@ -10955,9 +10984,9 @@ rm -f core conftest.err conftest.$ac_objext \
no_undefined_flag=' -z defs'
if test "$GCC" = yes; then
wlarc='${wl}'
- archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*)
@@ -11145,44 +11174,50 @@ x|xyes)
# 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; }
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+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
+ 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
+ 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
- archive_cmds_need_lc=no
- else
- archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+ 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
@@ -11340,11 +11375,6 @@ esac
-
-
-
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
$as_echo_n "checking dynamic linker characteristics... " >&6; }
@@ -11353,16 +11383,23 @@ if test "$GCC" = yes; then
darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
*) lt_awk_arg="/^libraries:/" ;;
esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ 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 -e 's/;/ /g'`
- else
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
+ 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=
@@ -11375,7 +11412,7 @@ if test "$GCC" = yes; then
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 '
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
BEGIN {RS=" "; FS="/|\n";} {
lt_foo="";
lt_count=0;
@@ -11395,7 +11432,13 @@ BEGIN {RS=" "; FS="/|\n";} {
if (lt_foo != "") { lt_freq[lt_foo]++; }
if (lt_freq[lt_foo] == 1) { print lt_foo; }
}'`
- sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+ # 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
@@ -11421,7 +11464,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ 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
@@ -11430,7 +11473,7 @@ aix3*)
;;
aix[4-9]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -11483,7 +11526,7 @@ amigaos*)
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=`$ECHO "X$lib" | $Xsed -e '\''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'
+ 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
;;
@@ -11495,7 +11538,7 @@ beos*)
;;
bsdi[45]*)
- version_type=linux
+ 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'
@@ -11514,8 +11557,9 @@ cygwin* | mingw* | pw32* | cegcc*)
need_version=no
need_lib_prefix=no
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ 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}`~
@@ -11536,36 +11580,83 @@ cygwin* | mingw* | pw32* | cegcc*)
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="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+ 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}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- 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
;;
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
- dynamic_linker='Win32 ld.exe'
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
;;
@@ -11586,7 +11677,7 @@ darwin* | rhapsody*)
;;
dgux*)
- version_type=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'
@@ -11594,10 +11685,6 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd1*)
- dynamic_linker=no
- ;;
-
freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
@@ -11605,7 +11692,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[123]*) objformat=aout ;;
+ freebsd[23].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -11623,7 +11710,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[01]* | freebsdelf3.[01]*)
@@ -11643,12 +11730,26 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=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}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+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
;;
@@ -11694,12 +11795,14 @@ hpux9* | hpux10* | hpux11*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ # 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
+ 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}'
@@ -11715,7 +11818,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -11752,9 +11855,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=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}'
@@ -11762,12 +11865,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
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
- 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
+ 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
@@ -11780,13 +11888,17 @@ main ()
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- shlibpath_overrides_runpath=yes
+ 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
+ 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
@@ -11795,7 +11907,7 @@ rm -f core conftest.err conftest.$ac_objext \
# 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;/^$/d' | tr '\n' ' '`
+ 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
@@ -11839,7 +11951,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ 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
@@ -11908,7 +12020,7 @@ rdos*)
;;
solaris*)
- version_type=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}'
@@ -11933,7 +12045,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ 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
@@ -11957,7 +12069,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ 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
@@ -11988,7 +12100,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=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}'
@@ -11998,7 +12110,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ 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
@@ -12110,6 +12222,11 @@ 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=
@@ -12182,7 +12299,7 @@ else
# 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 test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -12216,7 +12333,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
else
@@ -12230,12 +12347,12 @@ fi
*)
ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+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 test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -12269,16 +12386,16 @@ 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" = x""yes; then :
+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" = x""yes; then :
+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 test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -12312,12 +12429,12 @@ 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" = x""yes; then :
+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 test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -12351,12 +12468,12 @@ 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" = x""yes; then :
+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 test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -12390,7 +12507,7 @@ 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" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
fi
@@ -12431,7 +12548,7 @@ fi
{ $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 test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then :
@@ -12440,7 +12557,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12443 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12481,7 +12598,13 @@ else
# endif
#endif
-void fnord() { int i=42;}
+/* 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);
@@ -12490,7 +12613,11 @@ int main ()
if (self)
{
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
/* dlclose (self); */
}
else
@@ -12527,7 +12654,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
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 test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$cross_compiling" = yes; then :
@@ -12536,7 +12663,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12539 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12577,7 +12704,13 @@ else
# endif
#endif
-void fnord() { int i=42;}
+/* 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);
@@ -12586,7 +12719,11 @@ int main ()
if (self)
{
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
/* dlclose (self); */
}
else
@@ -12741,8 +12878,147 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-CC="$lt_save_CC"
-
+CC="$lt_save_CC"
+
+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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; }
+if test -z "$CXXCPP"; then
+ if ${ac_cv_prog_CXXCPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_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 <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_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_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_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 <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_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 \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+else
+ _lt_caught_CXX_error=yes
+fi
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -12759,7 +13035,6 @@ export_dynamic_flag_spec_CXX=
hardcode_direct_CXX=no
hardcode_direct_absolute_CXX=no
hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
hardcode_libdir_separator_CXX=
hardcode_minus_L_CXX=no
hardcode_shlibpath_var_CXX=unsupported
@@ -12769,6 +13044,8 @@ module_cmds_CXX=
module_expsym_cmds_CXX=
link_all_deplibs_CXX=unknown
old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
no_undefined_flag_CXX=
whole_archive_flag_spec_CXX=
enable_shared_with_static_runtimes_CXX=no
@@ -12824,6 +13101,7 @@ $RM -r conftest*
# 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
@@ -12841,6 +13119,7 @@ $RM -r conftest*
fi
test -z "${LDCXX+set}" || LD=$LDCXX
CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
compiler=$CC
compiler_CXX=$CC
for cc_temp in $compiler""; do
@@ -12851,7 +13130,7 @@ $RM -r conftest*
*) break;;
esac
done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
if test -n "$compiler"; then
@@ -12914,7 +13193,7 @@ 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 test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$LD"; then
@@ -12951,10 +13230,10 @@ 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
+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 test "${lt_cv_prog_gnu_ld+set}" = set; then :
+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.
@@ -12980,8 +13259,8 @@ with_gnu_ld=$lt_cv_prog_gnu_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
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$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'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13013,7 +13292,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
# 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 "\-L"'
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else
GXX=no
@@ -13123,7 +13402,13 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
allow_undefined_flag_CXX='-berok'
# Determine the default libpath from the value encoded in an empty
# executable.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath__CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -13136,26 +13421,33 @@ main ()
_ACEOF
if ac_fn_cxx_try_link "$LINENO"; then :
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath__CXX=`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__CXX"; then
+ lt_cv_aix_libpath__CXX=`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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ if test -z "$lt_cv_aix_libpath__CXX"; then
+ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath__CXX
+fi
hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ archive_expsym_cmds_CXX='$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_CXX='${wl}-R $libdir:/usr/lib:/lib'
@@ -13164,7 +13456,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
else
# Determine the default libpath from the value encoded in an
# empty executable.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath__CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -13177,30 +13475,42 @@ main ()
_ACEOF
if ac_fn_cxx_try_link "$LINENO"; then :
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath__CXX=`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__CXX"; then
+ lt_cv_aix_libpath__CXX=`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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ if test -z "$lt_cv_aix_libpath__CXX"; then
+ lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath__CXX
+fi
hardcode_libdir_flag_spec_CXX='${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_CXX=' ${wl}-bernotok'
allow_undefined_flag_CXX=' ${wl}-berok'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_CXX='$convenience'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_CXX='$convenience'
+ fi
archive_cmds_need_lc_CXX=yes
# This is similar to how AIX traditionally builds its shared
# libraries.
@@ -13230,28 +13540,75 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
cygwin* | mingw* | pw32* | cegcc*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec_CXX='-L$libdir'
- allow_undefined_flag_CXX=unsupported
- always_export_symbols_CXX=no
- enable_shared_with_static_runtimes_CXX=yes
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds_CXX='$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...
- archive_expsym_cmds_CXX='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
- ld_shlibs_CXX=no
- fi
- ;;
+ 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.
+ hardcode_libdir_flag_spec_CXX=' '
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=yes
+ file_list_spec_CXX='@'
+ # 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_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ archive_expsym_cmds_CXX='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, CXX)='true'
+ enable_shared_with_static_runtimes_CXX=yes
+ # Don't use ranlib
+ old_postinstall_cmds_CXX='chmod 644 $oldlib'
+ postlink_cmds_CXX='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, CXX) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=no
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds_CXX='$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...
+ archive_expsym_cmds_CXX='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
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
darwin* | rhapsody*)
@@ -13259,7 +13616,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_direct_CXX=no
hardcode_automatic_CXX=yes
hardcode_shlibpath_var_CXX=unsupported
- whole_archive_flag_spec_CXX=''
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec_CXX='`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_CXX=''
+ fi
link_all_deplibs_CXX=yes
allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
case $cc_basename in
@@ -13267,7 +13629,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*) _lt_dar_can_shared=$GCC ;;
esac
if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=echo
+ output_verbose_link_cmd=func_echo_all
archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
archive_expsym_cmds_CXX="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}"
@@ -13301,7 +13663,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
;;
- freebsd[12]*)
+ freebsd2.*)
# C++ shared libraries reported to be fairly broken before
# switch to ELF
ld_shlibs_CXX=no
@@ -13320,6 +13682,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
gnu*)
;;
+ haiku*)
+ archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs_CXX=yes
+ ;;
+
hpux9*)
hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
hardcode_libdir_separator_CXX=:
@@ -13344,11 +13711,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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; $ECHO "X$list" | $Xsed'
+ 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
- archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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'
+ archive_cmds_CXX='$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
ld_shlibs_CXX=no
@@ -13409,7 +13776,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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; $ECHO "X$list" | $Xsed'
+ 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
@@ -13419,10 +13786,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
ia64*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
- archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_cmds_CXX='$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
@@ -13452,7 +13819,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
case $cc_basename in
CC*)
# SGI C++
- archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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
@@ -13463,9 +13830,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*)
if test "$GXX" = yes; then
if test "$with_gnu_ld" = no; then
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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
- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ archive_cmds_CXX='$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
link_all_deplibs_CXX=yes
@@ -13494,7 +13861,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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; $ECHO "X$list" | $Xsed'
+ 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"'
hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13531,26 +13898,26 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
pgCC* | pgcpp*)
# Portland Group C++ compiler
case `$CC -V` in
- *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+ *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
prelink_cmds_CXX='tpldir=Template.dir~
rm -rf $tpldir~
$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
- compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
old_archive_cmds_CXX='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 | $NL2SP`~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
$RANLIB $oldlib'
archive_cmds_CXX='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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
archive_expsym_cmds_CXX='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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ $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 will use weak symbols
+ *) # Version 6 and above use weak symbols
archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
archive_expsym_cmds_CXX='$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'
;;
@@ -13558,7 +13925,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ whole_archive_flag_spec_CXX='${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++
@@ -13577,9 +13944,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ 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*)
+ xl* | mpixl* | bgxl*)
# IBM XL 8.0 on PPC, with GNU ld
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
@@ -13599,13 +13966,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
hardcode_libdir_flag_spec_CXX='-R$libdir'
- whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ whole_archive_flag_spec_CXX='${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_CXX=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='echo'
+ 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
@@ -13674,7 +14041,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
export_dynamic_flag_spec_CXX='${wl}-E'
whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
fi
- output_verbose_link_cmd=echo
+ output_verbose_link_cmd=func_echo_all
else
ld_shlibs_CXX=no
fi
@@ -13709,15 +14076,15 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
case $host in
osf3*)
allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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'
hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
;;
*)
allow_undefined_flag_CXX=' -expect_unresolved \*'
- archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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'
archive_expsym_cmds_CXX='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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $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'
hardcode_libdir_flag_spec_CXX='-rpath $libdir'
;;
@@ -13733,17 +14100,17 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# 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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ 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
allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
case $host in
osf3*)
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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'
;;
*)
- archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ archive_cmds_CXX='$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
@@ -13753,7 +14120,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/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 "\-L"'
+ 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
@@ -13789,7 +14156,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
solaris*)
case $cc_basename in
- CC*)
+ CC* | sunCC*)
# Sun C++ 4.2, 5.x and Centerline C++
archive_cmds_need_lc_CXX=yes
no_undefined_flag_CXX=' -zdefs'
@@ -13810,7 +14177,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
esac
link_all_deplibs_CXX=yes
- output_verbose_link_cmd='echo'
+ 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
@@ -13830,14 +14197,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
if test "$GXX" = yes && test "$with_gnu_ld" = no; then
no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
if $CC --version | $GREP -v '^2\.7' > /dev/null; then
- archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 "\-L"'
+ 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.
@@ -13848,7 +14215,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/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 -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
fi
hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
@@ -13902,6 +14269,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
CC*)
archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+ '"$old_archive_cmds_CXX"
+ reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+ '"$reload_cmds_CXX"
;;
*)
archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -13963,6 +14334,14 @@ private:
};
_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=$?
@@ -13976,7 +14355,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
pre_test_object_deps_done=no
for p in `eval "$output_verbose_link_cmd"`; do
- case $p in
+ case ${prev}${p} in
-L* | -R* | -l*)
# Some compilers place space between "-{L,R}" and the path.
@@ -13985,13 +14364,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
test $p = "-R"; then
prev=$p
continue
- else
- prev=
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 $p in
- -L* | -R*)
+ 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.
@@ -14011,8 +14399,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
postdeps_CXX="${postdeps_CXX} ${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.
@@ -14048,6 +14438,7 @@ else
fi
$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
# PORTME: override above test on systems where it is broken
case $host_os in
@@ -14083,7 +14474,7 @@ linux*)
solaris*)
case $cc_basename in
- CC*)
+ 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
@@ -14148,8 +14539,6 @@ fi
lt_prog_compiler_pic_CXX=
lt_prog_compiler_static_CXX=
-{ $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; }
# C++ specific cases for pic, static, wl, etc.
if test "$GXX" = yes; then
@@ -14199,6 +14588,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
# DJGPP does not support shared libraries at all
lt_prog_compiler_pic_CXX=
;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static_CXX=
+ ;;
interix[3-9]*)
# Interix 3.x gcc -fpic/-fPIC options generate broken code.
# Instead, we relocate shared libraries at runtime.
@@ -14248,6 +14642,11 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
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).
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ ;;
dgux*)
case $cc_basename in
ec++*)
@@ -14337,8 +14736,8 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_CXX=
lt_prog_compiler_static_CXX='-non_shared'
;;
- xlc* | xlC*)
- # IBM XL 8.0 on PPC
+ xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
lt_prog_compiler_wl_CXX='-Wl,'
lt_prog_compiler_pic_CXX='-qpic'
lt_prog_compiler_static_CXX='-qstaticlink'
@@ -14400,7 +14799,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
;;
solaris*)
case $cc_basename in
- CC*)
+ CC* | sunCC*)
# Sun C++ 4.2, 5.x and Centerline C++
lt_prog_compiler_pic_CXX='-KPIC'
lt_prog_compiler_static_CXX='-Bstatic'
@@ -14465,10 +14864,17 @@ case $host_os in
lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
-$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
-
+{ $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_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
#
# Check to make sure the PIC flag actually works.
@@ -14476,7 +14882,7 @@ $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
if test -n "$lt_prog_compiler_pic_CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_pic_works_CXX=no
@@ -14492,15 +14898,15 @@ else
-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:14495: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14499: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $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_CXX=yes
@@ -14526,13 +14932,15 @@ fi
+
+
#
# Check to make sure the static flag actually works.
#
wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
{ $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 test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_static_works_CXX=no
@@ -14545,7 +14953,7 @@ else
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&5
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $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_CXX=yes
@@ -14572,7 +14980,7 @@ 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 test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o_CXX=no
@@ -14591,16 +14999,16 @@ else
-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:14594: $lt_compile\"" >&5)
+ (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:14598: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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_CXX=yes
@@ -14624,7 +15032,7 @@ $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&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 test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o_CXX=no
@@ -14643,16 +15051,16 @@ else
-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:14646: $lt_compile\"" >&5)
+ (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:14650: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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_CXX=yes
@@ -14703,30 +15111,40 @@ fi
$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms_CXX='_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
- export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds_CXX='$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_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
export_symbols_cmds_CXX="$ltdll_cmds"
- ;;
+ ;;
cygwin* | mingw* | cegcc*)
- export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- linux* | k*bsd*-gnu)
+ case $cc_basename in
+ cl*)
+ exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ export_symbols_cmds_CXX='$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_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
link_all_deplibs_CXX=no
- ;;
+ ;;
*)
export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
+ ;;
esac
- exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
$as_echo "$ld_shlibs_CXX" >&6; }
@@ -14758,44 +15176,50 @@ x|xyes)
# 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; }
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc_CXX+:} 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
+ 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_CXX
- pic_flag=$lt_prog_compiler_pic_CXX
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
- allow_undefined_flag_CXX=
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_CXX
+ pic_flag=$lt_prog_compiler_pic_CXX
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+ allow_undefined_flag_CXX=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
(eval $archive_cmds_CXX 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
- archive_cmds_need_lc_CXX=no
- else
- archive_cmds_need_lc_CXX=yes
- fi
- allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
-$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+ then
+ lt_cv_archive_cmds_need_lc_CXX=no
+ else
+ lt_cv_archive_cmds_need_lc_CXX=yes
+ fi
+ allow_undefined_flag_CXX=$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_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+ archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
;;
esac
fi
@@ -14863,8 +15287,6 @@ esac
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
$as_echo_n "checking dynamic linker characteristics... " >&6; }
@@ -14890,7 +15312,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ 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
@@ -14899,7 +15321,7 @@ aix3*)
;;
aix[4-9]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -14952,7 +15374,7 @@ amigaos*)
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=`$ECHO "X$lib" | $Xsed -e '\''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'
+ 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
;;
@@ -14964,7 +15386,7 @@ beos*)
;;
bsdi[45]*)
- version_type=linux
+ 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'
@@ -14983,8 +15405,9 @@ cygwin* | mingw* | pw32* | cegcc*)
need_version=no
need_lib_prefix=no
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ 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}`~
@@ -15005,36 +15428,82 @@ cygwin* | mingw* | pw32* | cegcc*)
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="/usr/lib /lib/w32api /lib /usr/local/lib"
+
;;
mingw* | cegcc*)
# MinGW DLLs use traditional 'lib' prefix
soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- 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
;;
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
- dynamic_linker='Win32 ld.exe'
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
;;
@@ -15054,7 +15523,7 @@ darwin* | rhapsody*)
;;
dgux*)
- version_type=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'
@@ -15062,10 +15531,6 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd1*)
- dynamic_linker=no
- ;;
-
freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
@@ -15073,7 +15538,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[123]*) objformat=aout ;;
+ freebsd[23].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -15091,7 +15556,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[01]* | freebsdelf3.[01]*)
@@ -15111,12 +15576,26 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=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}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+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
;;
@@ -15162,12 +15641,14 @@ hpux9* | hpux10* | hpux11*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ # 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
+ 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}'
@@ -15183,7 +15664,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -15220,9 +15701,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=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}'
@@ -15230,12 +15711,17 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
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
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ 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_CXX\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -15248,13 +15734,17 @@ main ()
_ACEOF
if ac_fn_cxx_try_link "$LINENO"; then :
if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- shlibpath_overrides_runpath=yes
+ 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
+ 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
@@ -15263,7 +15753,7 @@ rm -f core conftest.err conftest.$ac_objext \
# 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;/^$/d' | tr '\n' ' '`
+ 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
@@ -15307,7 +15797,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ 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
@@ -15376,7 +15866,7 @@ rdos*)
;;
solaris*)
- version_type=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}'
@@ -15401,7 +15891,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ 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
@@ -15425,7 +15915,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ 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
@@ -15456,7 +15946,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=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}'
@@ -15466,7 +15956,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ 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
@@ -15527,6 +16017,8 @@ 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_CXX=
@@ -15574,6 +16066,7 @@ fi
fi # test -n "$compiler"
CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
LDCXX=$LD
LD=$lt_save_LD
GCC=$lt_save_GCC
@@ -15600,6 +16093,10 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
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
@@ -15608,7 +16105,6 @@ export_dynamic_flag_spec_FC=
hardcode_direct_FC=no
hardcode_direct_absolute_FC=no
hardcode_libdir_flag_spec_FC=
-hardcode_libdir_flag_spec_ld_FC=
hardcode_libdir_separator_FC=
hardcode_minus_L_FC=no
hardcode_automatic_FC=no
@@ -15617,6 +16113,8 @@ 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
@@ -15680,7 +16178,9 @@ $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
@@ -15693,7 +16193,7 @@ $RM -r conftest*
*) break;;
esac
done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
if test -n "$compiler"; then
@@ -15755,6 +16255,14 @@ cat > conftest.$ac_ext <<_LT_EOF
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=$?
@@ -15768,7 +16276,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
pre_test_object_deps_done=no
for p in `eval "$output_verbose_link_cmd"`; do
- case $p in
+ case ${prev}${p} in
-L* | -R* | -l*)
# Some compilers place space between "-{L,R}" and the path.
@@ -15777,13 +16285,22 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
test $p = "-R"; then
prev=$p
continue
- else
- prev=
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 $p in
- -L* | -R*)
+ 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.
@@ -15803,8 +16320,10 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
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.
@@ -15840,6 +16359,7 @@ else
fi
$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
# PORTME: override above test on systems where it is broken
@@ -15868,8 +16388,6 @@ fi
lt_prog_compiler_pic_FC=
lt_prog_compiler_static_FC=
-{ $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 test "$GCC" = yes; then
lt_prog_compiler_wl_FC='-Wl,'
@@ -15917,6 +16435,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
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
@@ -15959,6 +16483,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
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
@@ -16021,7 +16554,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_FC='--shared'
lt_prog_compiler_static_FC='--static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
+ 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,'
@@ -16033,25 +16572,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
# All Alpha code is PIC.
lt_prog_compiler_static_FC='-non_shared'
;;
- xl*)
- # IBM XL C 8.0/Fortran 10.1 on PPC
+ 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,'
;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic_FC='-KPIC'
+ *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'
- lt_prog_compiler_wl_FC=''
;;
esac
;;
@@ -16083,7 +16637,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
lt_prog_compiler_pic_FC='-KPIC'
lt_prog_compiler_static_FC='-Bstatic'
case $cc_basename in
- f77* | f90* | f95*)
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
lt_prog_compiler_wl_FC='-Qoption ld ';;
*)
lt_prog_compiler_wl_FC='-Wl,';;
@@ -16140,10 +16694,17 @@ case $host_os in
lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC"
;;
esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_FC" >&5
-$as_echo "$lt_prog_compiler_pic_FC" >&6; }
-
+{ $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.
@@ -16151,7 +16712,7 @@ $as_echo "$lt_prog_compiler_pic_FC" >&6; }
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 test "${lt_cv_prog_compiler_pic_works_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_pic_works_FC=no
@@ -16167,15 +16728,15 @@ else
-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:16170: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16174: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $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
@@ -16201,13 +16762,15 @@ 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 test "${lt_cv_prog_compiler_static_works_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_static_works_FC=no
@@ -16220,7 +16783,7 @@ else
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&5
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $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
@@ -16247,7 +16810,7 @@ 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 test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o_FC=no
@@ -16266,16 +16829,16 @@ else
-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:16269: $lt_compile\"" >&5)
+ (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:16273: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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
@@ -16299,7 +16862,7 @@ $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 test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
$as_echo_n "(cached) " >&6
else
lt_cv_prog_compiler_c_o_FC=no
@@ -16318,16 +16881,16 @@ else
-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:16321: $lt_compile\"" >&5)
+ (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:16325: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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
@@ -16390,7 +16953,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
hardcode_direct_FC=no
hardcode_direct_absolute_FC=no
hardcode_libdir_flag_spec_FC=
- hardcode_libdir_flag_spec_ld_FC=
hardcode_libdir_separator_FC=
hardcode_minus_L_FC=no
hardcode_shlibpath_var_FC=unsupported
@@ -16434,13 +16996,39 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
openbsd*)
with_gnu_ld=no
;;
- linux* | k*bsd*-gnu)
+ 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}'
@@ -16474,11 +17062,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
ld_shlibs_FC=no
cat <<_LT_EOF 1>&2
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** 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
@@ -16514,10 +17103,12 @@ _LT_EOF
# _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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ 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'
@@ -16535,6 +17126,11 @@ _LT_EOF
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
@@ -16560,15 +17156,16 @@ _LT_EOF
if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
&& test "$tmp_diet" = no
then
- tmp_addflag=
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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*) # 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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' ;;
@@ -16579,13 +17176,17 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec_FC=
tmp_sharedflag='--shared' ;;
- xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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
@@ -16601,17 +17202,16 @@ _LT_EOF
fi
case $cc_basename in
- xlf*)
+ 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=
- hardcode_libdir_flag_spec_ld_FC='-rpath $libdir'
- archive_cmds_FC='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ 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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
;;
esac
@@ -16625,8 +17225,8 @@ _LT_EOF
archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
else
- 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'
+ 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
;;
@@ -16644,8 +17244,8 @@ _LT_EOF
_LT_EOF
elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- 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'
+ 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
@@ -16691,8 +17291,8 @@ _LT_EOF
*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- 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'
+ 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
@@ -16732,8 +17332,10 @@ _LT_EOF
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")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ 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
@@ -16821,32 +17423,45 @@ _LT_EOF
allow_undefined_flag_FC='-berok'
# Determine the default libpath from the value encoded in an
# empty executable.
- cat > conftest.$ac_ext <<_ACEOF
+ 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
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+ 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ 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'
@@ -16855,37 +17470,55 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
else
# Determine the default libpath from the value encoded in an
# empty executable.
- cat > conftest.$ac_ext <<_ACEOF
+ 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
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
+ 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+ 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'
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec_FC='$convenience'
+ 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'
@@ -16917,20 +17550,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
- 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 `$ECHO "X$deplibs" | $Xsed -e '\''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'
- fix_srcfile_path_FC='`cygpath -w "$srcfile"`'
- enable_shared_with_static_runtimes_FC=yes
+ 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*)
@@ -16940,7 +17617,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_direct_FC=no
hardcode_automatic_FC=yes
hardcode_shlibpath_var_FC=unsupported
- whole_archive_flag_spec_FC=''
+ 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
@@ -16948,7 +17630,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
*) _lt_dar_can_shared=$GCC ;;
esac
if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=echo
+ 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}"
@@ -16966,10 +17648,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hardcode_shlibpath_var_FC=no
;;
- freebsd1*)
- ld_shlibs_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
@@ -16982,7 +17660,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
# Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
+ freebsd2.*)
archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
hardcode_direct_FC=yes
hardcode_minus_L_FC=yes
@@ -16991,7 +17669,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
- archive_cmds_FC='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ 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
@@ -16999,7 +17677,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
hpux9*)
if test "$GCC" = yes; then
- archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ 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
@@ -17014,14 +17692,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ 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_flag_spec_ld_FC='+b $libdir'
hardcode_libdir_separator_FC=:
hardcode_direct_FC=yes
hardcode_direct_absolute_FC=yes
@@ -17033,16 +17710,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
;;
hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ archive_cmds_FC='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -17054,7 +17731,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
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'
+ archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
;;
esac
fi
@@ -17082,25 +17759,40 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
irix5* | irix6* | nonstopux*)
if test "$GCC" = yes; then
- archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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.
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
- cat > conftest.$ac_ext <<_ACEOF
-int foo(void) {}
+ # 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 :
- archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+ 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"
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ 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'
@@ -17162,17 +17854,17 @@ rm -f core conftest.err conftest.$ac_objext \
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'
+ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ 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'
@@ -17182,13 +17874,13 @@ rm -f core conftest.err conftest.$ac_objext \
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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ 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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ 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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $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'
@@ -17201,9 +17893,9 @@ rm -f core conftest.err conftest.$ac_objext \
no_undefined_flag_FC=' -z defs'
if test "$GCC" = yes; then
wlarc='${wl}'
- archive_cmds_FC='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ 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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*)
@@ -17382,44 +18074,50 @@ x|xyes)
# 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; }
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+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
+ 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
+ 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
- archive_cmds_need_lc_FC=no
- else
- 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*
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_FC" >&5
-$as_echo "$archive_cmds_need_lc_FC" >&6; }
+ 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
@@ -17487,8 +18185,6 @@ esac
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
$as_echo_n "checking dynamic linker characteristics... " >&6; }
@@ -17514,7 +18210,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ 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
@@ -17523,7 +18219,7 @@ aix3*)
;;
aix[4-9]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -17576,7 +18272,7 @@ amigaos*)
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=`$ECHO "X$lib" | $Xsed -e '\''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'
+ 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
;;
@@ -17588,7 +18284,7 @@ beos*)
;;
bsdi[45]*)
- version_type=linux
+ 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'
@@ -17607,8 +18303,9 @@ cygwin* | mingw* | pw32* | cegcc*)
need_version=no
need_lib_prefix=no
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ 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}`~
@@ -17629,36 +18326,82 @@ cygwin* | mingw* | pw32* | cegcc*)
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="/usr/lib /lib/w32api /lib /usr/local/lib"
+
;;
mingw* | cegcc*)
# MinGW DLLs use traditional 'lib' prefix
soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- 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
;;
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
- dynamic_linker='Win32 ld.exe'
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
;;
@@ -17678,7 +18421,7 @@ darwin* | rhapsody*)
;;
dgux*)
- version_type=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'
@@ -17686,10 +18429,6 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd1*)
- dynamic_linker=no
- ;;
-
freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
@@ -17697,7 +18436,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[123]*) objformat=aout ;;
+ freebsd[23].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -17715,7 +18454,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[01]* | freebsdelf3.[01]*)
@@ -17735,12 +18474,26 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=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}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+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
;;
@@ -17786,12 +18539,14 @@ hpux9* | hpux10* | hpux11*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ # 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
+ 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}'
@@ -17807,7 +18562,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -17844,9 +18599,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=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}'
@@ -17854,25 +18609,34 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
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
- 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
+ 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 :
- shlibpath_overrides_runpath=yes
+ 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
+ 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
@@ -17881,7 +18645,7 @@ rm -f core conftest.err conftest.$ac_objext \
# 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;/^$/d' | tr '\n' ' '`
+ 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
@@ -17925,7 +18689,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ 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
@@ -17994,7 +18758,7 @@ rdos*)
;;
solaris*)
- version_type=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}'
@@ -18019,7 +18783,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ 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
@@ -18043,7 +18807,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ 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
@@ -18074,7 +18838,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=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}'
@@ -18084,7 +18848,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ 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
@@ -18145,6 +18909,8 @@ 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=
@@ -18192,7 +18958,8 @@ fi
fi # test -n "$compiler"
GCC=$lt_save_GCC
- CC="$lt_save_CC"
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
fi # test "$_lt_disable_FC" != yes
ac_ext=cpp
@@ -18209,14 +18976,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- ac_config_commands="$ac_config_commands libtool"
+ ac_config_commands="$ac_config_commands libtool"
-# Only expand once:
+# Only expand once:
@@ -18250,7 +19017,7 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5
$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; }
-if test "${ac_cv_fc_dummy_main+set}" = set; then :
+if ${ac_cv_fc_dummy_main+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_fc_dm_save_LIBS=$LIBS
@@ -18346,8 +19113,8 @@ 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; }
+as_fn_error $? "linking to Fortran libraries from C fails
+See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=cpp
@@ -18362,7 +19129,7 @@ ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest
ac_compiler_gnu=$ac_cv_fc_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5
$as_echo_n "checking for Fortran name-mangling scheme... " >&6; }
-if test "${ac_cv_fc_mangling+set}" = set; then :
+if ${ac_cv_fc_mangling+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.$ac_ext <<_ACEOF
@@ -18508,8 +19275,8 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
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; }
+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
@@ -18620,8 +19387,7 @@ if test $acx_blas_ok = no; then
save_LIBS="$LIBS"; LIBS="$LIBS"
as_ac_var=`$as_echo "ac_cv_func_$sgemm" | $as_tr_sh`
ac_fn_cxx_check_func "$LINENO" "$sgemm" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
acx_blas_ok=yes
fi
@@ -18632,7 +19398,7 @@ fi
if test $acx_blas_ok = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -latlas" >&5
$as_echo_n "checking for ATL_xerbla in -latlas... " >&6; }
-if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then :
+if ${ac_cv_lib_atlas_ATL_xerbla+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18674,11 +19440,11 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_atlas_ATL_xerbla" >&5
$as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; }
-if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then :
+if test "x$ac_cv_lib_atlas_ATL_xerbla" = xyes; then :
as_ac_Lib=`$as_echo "ac_cv_lib_f77blas_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lf77blas" >&5
$as_echo_n "checking for $sgemm in -lf77blas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18721,11 +19487,10 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lcblas" >&5
$as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; }
-if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then :
+if ${ac_cv_lib_cblas_cblas_dgemm+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18767,7 +19532,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cblas_cblas_dgemm" >&5
$as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; }
-if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then :
+if test "x$ac_cv_lib_cblas_cblas_dgemm" = xyes; then :
acx_blas_ok=yes
BLAS_LIBS="-lf77blas -latlas $FCLIBS"
fi
@@ -18783,7 +19548,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
$as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18826,12 +19591,11 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
as_ac_Lib=`$as_echo "ac_cv_lib_dgemm_$dgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgemm in -ldgemm" >&5
$as_echo_n "checking for $dgemm in -ldgemm... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18874,12 +19638,11 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
as_ac_Lib=`$as_echo "ac_cv_lib_sgemm_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsgemm" >&5
$as_echo_n "checking for $sgemm in -lsgemm... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18922,8 +19685,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"
fi
@@ -18938,7 +19700,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_cxml_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcxml" >&5
$as_echo_n "checking for $sgemm in -lcxml... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -18981,8 +19743,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes;BLAS_LIBS="-lcxml"
fi
@@ -18993,7 +19754,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_dxml_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -ldxml" >&5
$as_echo_n "checking for $sgemm in -ldxml... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19036,8 +19797,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes;BLAS_LIBS="-ldxml"
fi
@@ -19048,7 +19808,7 @@ if test $acx_blas_ok = no; then
if test "x$GCC" != xyes; then # only works with Sun CC
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosp in -lsunmath" >&5
$as_echo_n "checking for acosp in -lsunmath... " >&6; }
-if test "${ac_cv_lib_sunmath_acosp+set}" = set; then :
+if ${ac_cv_lib_sunmath_acosp+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19090,11 +19850,11 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_acosp" >&5
$as_echo "$ac_cv_lib_sunmath_acosp" >&6; }
-if test "x$ac_cv_lib_sunmath_acosp" = x""yes; then :
+if test "x$ac_cv_lib_sunmath_acosp" = xyes; then :
as_ac_Lib=`$as_echo "ac_cv_lib_sunperf_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsunperf" >&5
$as_echo_n "checking for $sgemm in -lsunperf... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19137,8 +19897,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BLAS_LIBS="-xlic_lib=sunperf -lsunmath"
acx_blas_ok=yes
fi
@@ -19153,7 +19912,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_scs_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lscs" >&5
$as_echo_n "checking for $sgemm in -lscs... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19196,8 +19955,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lscs"
fi
@@ -19208,7 +19966,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_complib.sgimath_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcomplib.sgimath" >&5
$as_echo_n "checking for $sgemm in -lcomplib.sgimath... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19251,8 +20009,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"
fi
@@ -19263,7 +20020,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
$as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19306,12 +20063,11 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
as_ac_Lib=`$as_echo "ac_cv_lib_essl_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lessl" >&5
$as_echo_n "checking for $sgemm in -lessl... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19354,8 +20110,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lessl -lblas"
fi
@@ -19368,7 +20123,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
$as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19411,8 +20166,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lblas"
fi
@@ -19422,7 +20176,7 @@ if test $acx_blas_ok = no; then
as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5
$as_echo_n "checking for $sgemm in -lblas... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19465,8 +20219,7 @@ fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
- if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
acx_blas_ok=yes; BLAS_LIBS="-lblas $FCLIBS"
fi
@@ -19494,7 +20247,7 @@ if test "${enable_superlu+set}" = set; then :
enableval=$enable_superlu; case "${enableval}" in
yes) usesuperlu=YES ;;
no) usesuperlu=NO ;;
- *) as_fn_error "bad value ${enableval} for --enable-superlu" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-superlu" "$LINENO" 5 ;;
esac
else
usesuperlu=YES
@@ -19546,7 +20299,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
F77_CALL_C="ADD__";
;;
*)
- as_fn_error "\"superlu won't handle this calling convention: sgemm -> $sgemm\"" "$LINENO" 5
+ as_fn_error $? "\"superlu won't handle this calling convention: sgemm -> $sgemm\"" "$LINENO" 5
;;
esac
SUPERLU_CPPFLAGS="$CPPFLAGS -DUSE_VENDOR_BLAS -DF77_CALL_C=$F77_CALL_C"
@@ -19557,7 +20310,7 @@ else
echo "Building without SuperLU support (use --enable-superlu=yes to enable it)"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dCreate_CompCol_Matrix in -lsuperlu" >&5
$as_echo_n "checking for dCreate_CompCol_Matrix in -lsuperlu... " >&6; }
-if test "${ac_cv_lib_superlu_dCreate_CompCol_Matrix+set}" = set; then :
+if ${ac_cv_lib_superlu_dCreate_CompCol_Matrix+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19599,7 +20352,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_superlu_dCreate_CompCol_Matrix" >&5
$as_echo "$ac_cv_lib_superlu_dCreate_CompCol_Matrix" >&6; }
-if test "x$ac_cv_lib_superlu_dCreate_CompCol_Matrix" = x""yes; then :
+if test "x$ac_cv_lib_superlu_dCreate_CompCol_Matrix" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSUPERLU 1
_ACEOF
@@ -19607,7 +20360,7 @@ _ACEOF
LIBS="-lsuperlu $LIBS"
else
- as_fn_error "SuperLU library not found" "$LINENO" 5
+ as_fn_error $? "SuperLU library not found" "$LINENO" 5
fi
@@ -19618,8 +20371,7 @@ for ac_header in superlu/colamd.h superlu/slu_Cnames.h \
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
+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
@@ -19627,7 +20379,7 @@ _ACEOF
else
if test "x$usesuperlu" = "xYES"; then
- as_fn_error "header files of superlu not found. Use --enable-superlu=yes flag" "$LINENO" 5;
+ as_fn_error $? "header files of superlu not found. Use --enable-superlu=yes flag" "$LINENO" 5;
fi;
fi
@@ -19653,6 +20405,17 @@ fi
echo "Configuration of SuperLU done"
+EXPER=""
+# Check whether --enable-experimental was given.
+if test "${enable_experimental+set}" = set; then :
+ enableval=$enable_experimental; if test "x$enableval" = "xyes" ; then EXPER="-DEXPERIMENTAL_PURPOSE_ONLY"; fi
+else
+ EXPER=""
+fi
+
+CPPFLAGS="$CPPFLAGS $EXPER"
+
+
# Check whether --with-qd-lib-dir was given.
if test "${with_qd_lib_dir+set}" = set; then :
withval=$with_qd_lib_dir; QDLIB="$withval/libqd.a"
@@ -19688,8 +20451,8 @@ if test "x$useQDlib" = "xyes" ; then
if test "$cross_compiling" = yes; then :
{ { $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 test program while cross compiling
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19758,7 +20521,7 @@ if test "x$useQHULL" = "xno"; then
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for qh_new_qhull in -lqhull" >&5
$as_echo_n "checking for qh_new_qhull in -lqhull... " >&6; }
-if test "${ac_cv_lib_qhull_qh_new_qhull+set}" = set; then :
+if ${ac_cv_lib_qhull_qh_new_qhull+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19800,7 +20563,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_qhull_qh_new_qhull" >&5
$as_echo "$ac_cv_lib_qhull_qh_new_qhull" >&6; }
-if test "x$ac_cv_lib_qhull_qh_new_qhull" = x""yes; then :
+if test "x$ac_cv_lib_qhull_qh_new_qhull" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBQHULL 1
_ACEOF
@@ -19812,7 +20575,7 @@ fi
for ac_header in qhull/qhull.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "qhull/qhull.h" "ac_cv_header_qhull_qhull_h" "$ac_includes_default"
-if test "x$ac_cv_header_qhull_qhull_h" = x""yes; then :
+if test "x$ac_cv_header_qhull_qhull_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_QHULL_QHULL_H 1
_ACEOF
@@ -19820,7 +20583,7 @@ _ACEOF
else
if test "x$useQHULL" = "xyes"; then
- as_fn_error "header files qhull/qhull.h not found. Use --enable-qhull=no flag" "$LINENO" 5;
+ as_fn_error $? "header files qhull/qhull.h not found. Use --enable-qhull=no flag" "$LINENO" 5;
useQHULL="no"
fi;
@@ -19845,6 +20608,21 @@ fi
echo "Configuration of qhull done"
+MUPARSERSINC=""
+
+# Check whether --with-muparser-include-dir was given.
+if test "${with_muparser_include_dir+set}" = set; then :
+ withval=$with_muparser_include_dir; case $withval in
+ -I* ) MUPARSERINC="$withval";;
+ * ) MUPARSERINC="-I$withval";;
+ esac
+else
+ MUPARSERINC="-I$GFPREFIX/include"
+
+fi
+
+CPPFLAGS="$CPPFLAGS $MUPARSERINC"
+
usemuparser="no"
# Check whether --enable-muparser was given.
if test "${enable_muparser+set}" = set; then :
@@ -19860,7 +20638,7 @@ if test "x$usemuparser" = "xno"; then
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _init in -lmuparser" >&5
$as_echo_n "checking for _init in -lmuparser... " >&6; }
-if test "${ac_cv_lib_muparser__init+set}" = set; then :
+if ${ac_cv_lib_muparser__init+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -19902,7 +20680,59 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_muparser__init" >&5
$as_echo "$ac_cv_lib_muparser__init" >&6; }
-if test "x$ac_cv_lib_muparser__init" = x""yes; then :
+if test "x$ac_cv_lib_muparser__init" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMUPARSER 1
+_ACEOF
+
+ LIBS="-lmuparser $LIBS"
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mupEval in -lmuparser" >&5
+$as_echo_n "checking for mupEval in -lmuparser... " >&6; }
+if ${ac_cv_lib_muparser_mupEval+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmuparser $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 mupEval ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return mupEval ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_muparser_mupEval=yes
+else
+ ac_cv_lib_muparser_mupEval=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_muparser_mupEval" >&5
+$as_echo "$ac_cv_lib_muparser_mupEval" >&6; }
+if test "x$ac_cv_lib_muparser_mupEval" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBMUPARSER 1
_ACEOF
@@ -19911,10 +20741,12 @@ _ACEOF
fi
+fi
+
for ac_header in muParser/muParser.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "muParser/muParser.h" "ac_cv_header_muParser_muParser_h" "$ac_includes_default"
-if test "x$ac_cv_header_muParser_muParser_h" = x""yes; then :
+if test "x$ac_cv_header_muParser_muParser_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_MUPARSER_MUPARSER_H 1
_ACEOF
@@ -19924,7 +20756,7 @@ else
for ac_header in muParser.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "muParser.h" "ac_cv_header_muParser_h" "$ac_includes_default"
-if test "x$ac_cv_header_muParser_h" = x""yes; then :
+if test "x$ac_cv_header_muParser_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_MUPARSER_H 1
_ACEOF
@@ -19932,7 +20764,7 @@ _ACEOF
else
if test "x$usemuparser" = "xyes"; then
- as_fn_error "header file muParser.h or muParser/muParser.h not found. Use --enable-muparser=no flag" "$LINENO" 5;
+ as_fn_error $? "header file muParser.h or muParser/muParser.h not found. Use --enable-muparser=no flag" "$LINENO" 5;
usemuparser="no"
fi;
@@ -19963,57 +20795,66 @@ fi
echo "Configuration of muParser done"
-MUMPSINC=""
+MUMPSINC=""
+
+# Check whether --with-mumps-include-dir was given.
+if test "${with_mumps_include_dir+set}" = set; then :
+ withval=$with_mumps_include_dir; case $withval in
+ -I* ) MUMPSINC="$withval";;
+ * ) MUMPSINC="-I$withval";;
+ esac
+else
+ MUMPSINC="-I$GFPREFIX/include"
+
+fi
+
+CPPFLAGS="$CPPFLAGS $MUMPSINC"
+
+MUMPS_LIBS=""
+acx_mumps_ok="no"
+usemumps="no"
+# Check whether --enable-mumps was given.
+if test "${enable_mumps+set}" = set; then :
+ enableval=$enable_mumps; case $enableval in
+ yes | "") usemumps="yes"; acx_mumps_ok="yes"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq";;
+ no) usemumps="no";;
+ esac
+else
+ usemumps="test"; acx_mumps_ok="test"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq"
+
+fi
+
-# Check whether --with-mumps-include-dir was given.
-if test "${with_mumps_include_dir+set}" = set; then :
- withval=$with_mumps_include_dir; case $withval in
- -I* ) MUMPSINC="$withval";;
- * ) MUMPSINC="-I$withval";;
+# Check whether --enable-par-mumps was given.
+if test "${enable_par_mumps+set}" = set; then :
+ enableval=$enable_par_mumps; case $enableval in
+ yes | "") usemumps="yes"; MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps";;
+ no) usemumps="no";;
esac
-else
- MUMPSINC="-I$GFPREFIX/include"
fi
-CPPFLAGS="$CPPFLAGS $MUMPSINC"
-MUMPS_LIBS=""
-acx_mumps_ok="no"
# Check whether --with-mumps was given.
if test "${with_mumps+set}" = set; then :
withval=$with_mumps; case $with_mumps in
- yes | "") acx_mumps_ok="yes" ;;
+ yes | "") usemumps="yes";;
no) acx_mumps_ok="no" ;;
-* | */* | *.a | *.so | *.so.* | *.o| builtin) MUMPS_LIBS="$with_mumps"; acx_mumps_ok="yes" ;;
- *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; acx_mumps_ok="yes" ;;
+ *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; usemumps="yes";;
esac
-else
- MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps"; acx_mumps_ok="test"
fi
-usemumps="no"
-# Check whether --enable-mumps was given.
-if test "${enable_mumps+set}" = set; then :
- enableval=$enable_mumps; case $enableval in
- yes | "") usemumps="yes"; acx_mumps_ok="yes" ;;
- no) usemumps="no"; MUMPS_LIBS="" ;;
- esac
-else
- usemumps="test"
-
-fi
-
if test "x$usemumps" = "xno" -o "x$acx_mumps_ok" = "xno"; then
echo "Building with MUMPS explicitly disabled";
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing smumps_c" >&5
$as_echo_n "checking for library containing smumps_c... " >&6; }
-if test "${ac_cv_search_smumps_c+set}" = set; then :
+if ${ac_cv_search_smumps_c+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -20055,11 +20896,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test "${ac_cv_search_smumps_c+set}" = set; then :
+ if ${ac_cv_search_smumps_c+:} false; then :
break
fi
done
-if test "${ac_cv_search_smumps_c+set}" = set; then :
+if ${ac_cv_search_smumps_c+:} false; then :
else
ac_cv_search_smumps_c=no
@@ -20075,7 +20916,7 @@ if test "$ac_res" != no; then :
usemumps="yes"
else
if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "The function smumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+ as_fn_error $? "The function smumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
fi;
usemumps="no"
@@ -20083,7 +20924,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dmumps_c" >&5
$as_echo_n "checking for library containing dmumps_c... " >&6; }
-if test "${ac_cv_search_dmumps_c+set}" = set; then :
+if ${ac_cv_search_dmumps_c+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -20125,11 +20966,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test "${ac_cv_search_dmumps_c+set}" = set; then :
+ if ${ac_cv_search_dmumps_c+:} false; then :
break
fi
done
-if test "${ac_cv_search_dmumps_c+set}" = set; then :
+if ${ac_cv_search_dmumps_c+:} false; then :
else
ac_cv_search_dmumps_c=no
@@ -20145,7 +20986,7 @@ if test "$ac_res" != no; then :
usemumps="yes"
else
if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "The function dmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+ as_fn_error $? "The function dmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
fi;
usemumps="no"
@@ -20153,7 +20994,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cmumps_c" >&5
$as_echo_n "checking for library containing cmumps_c... " >&6; }
-if test "${ac_cv_search_cmumps_c+set}" = set; then :
+if ${ac_cv_search_cmumps_c+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -20195,11 +21036,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test "${ac_cv_search_cmumps_c+set}" = set; then :
+ if ${ac_cv_search_cmumps_c+:} false; then :
break
fi
done
-if test "${ac_cv_search_cmumps_c+set}" = set; then :
+if ${ac_cv_search_cmumps_c+:} false; then :
else
ac_cv_search_cmumps_c=no
@@ -20215,7 +21056,7 @@ if test "$ac_res" != no; then :
usemumps="yes"
else
if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "The function cmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
+ as_fn_error $? "The function cmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
fi;
usemumps="no"
@@ -20223,7 +21064,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zmumps_c" >&5
$as_echo_n "checking for library containing zmumps_c... " >&6; }
-if test "${ac_cv_search_zmumps_c+set}" = set; then :
+if ${ac_cv_search_zmumps_c+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -20265,11 +21106,11 @@ for ac_lib in '' `echo $MUMPS_LIBS | sed -e 's/^-l//g;s/ -l/ /g'`; do
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test "${ac_cv_search_zmumps_c+set}" = set; then :
+ if ${ac_cv_search_zmumps_c+:} false; then :
break
fi
done
-if test "${ac_cv_search_zmumps_c+set}" = set; then :
+if ${ac_cv_search_zmumps_c+:} false; then :
else
ac_cv_search_zmumps_c=no
@@ -20285,223 +21126,7 @@ if test "$ac_res" != no; then :
usemumps="yes"
else
if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "The function zmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
- fi;
- usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smumps_c in -lsmumps" >&5
-$as_echo_n "checking for smumps_c in -lsmumps... " >&6; }
-if test "${ac_cv_lib_smumps_smumps_c+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsmumps $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 smumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-# ifdef __cplusplus
- extern "C"
-# endif
- int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return smumps_c ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_smumps_smumps_c=yes
-else
- ac_cv_lib_smumps_smumps_c=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_smumps_smumps_c" >&5
-$as_echo "$ac_cv_lib_smumps_smumps_c" >&6; }
-if test "x$ac_cv_lib_smumps_smumps_c" = x""yes; then :
- usemumps="yes"
-else
- if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "Couldn't find a smumps library supporting the smumps_c function." "$LINENO" 5;
- fi;
- usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dmumps_c in -ldmumps" >&5
-$as_echo_n "checking for dmumps_c in -ldmumps... " >&6; }
-if test "${ac_cv_lib_dmumps_dmumps_c+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldmumps $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 dmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-# ifdef __cplusplus
- extern "C"
-# endif
- int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return dmumps_c ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_dmumps_dmumps_c=yes
-else
- ac_cv_lib_dmumps_dmumps_c=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_dmumps_dmumps_c" >&5
-$as_echo "$ac_cv_lib_dmumps_dmumps_c" >&6; }
-if test "x$ac_cv_lib_dmumps_dmumps_c" = x""yes; then :
- usemumps="yes"
-else
- if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "Couldn't find a dmumps library supporting the dmumps_c function." "$LINENO" 5;
- fi;
- usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmumps_c in -lcmumps" >&5
-$as_echo_n "checking for cmumps_c in -lcmumps... " >&6; }
-if test "${ac_cv_lib_cmumps_cmumps_c+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcmumps $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 cmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-# ifdef __cplusplus
- extern "C"
-# endif
- int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return cmumps_c ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_cmumps_cmumps_c=yes
-else
- ac_cv_lib_cmumps_cmumps_c=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_cmumps_cmumps_c" >&5
-$as_echo "$ac_cv_lib_cmumps_cmumps_c" >&6; }
-if test "x$ac_cv_lib_cmumps_cmumps_c" = x""yes; then :
- usemumps="yes"
-else
- if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "Couldn't find a cmumps library supporting the cmumps_c function." "$LINENO" 5;
- fi;
- usemumps="no"
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zmumps_c in -lzmumps" >&5
-$as_echo_n "checking for zmumps_c in -lzmumps... " >&6; }
-if test "${ac_cv_lib_zmumps_zmumps_c+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lzmumps $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 zmumps_c ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-# ifdef __cplusplus
- extern "C"
-# endif
- int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return zmumps_c ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_zmumps_zmumps_c=yes
-else
- ac_cv_lib_zmumps_zmumps_c=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_zmumps_zmumps_c" >&5
-$as_echo "$ac_cv_lib_zmumps_zmumps_c" >&6; }
-if test "x$ac_cv_lib_zmumps_zmumps_c" = x""yes; then :
- usemumps="yes"
-else
- if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "Couldn't find a zmumps library supporting the zmumps_c function." "$LINENO" 5;
+ as_fn_error $? "The function zmumps_c couldn't be found in the provided MUMPS libraries." "$LINENO" 5;
fi;
usemumps="no"
@@ -20511,15 +21136,14 @@ fi
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
+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
usemumps="yes"
else
if test "x$acx_mumps_ok" = "xyes"; then
- as_fn_error "header file dmumps_c.h not found." "$LINENO" 5;
+ as_fn_error $? "header file dmumps_c.h not found." "$LINENO" 5;
fi;
usemumps="no"
@@ -20563,14 +21187,29 @@ if test $paralevel -ge 1; then
fi;
usemetis="no"
-METIS_LIBS=""
-
if test $paralevel -ge 2; then
usemetis="yes"
- METIS_LIBS=""
+fi;
+
+METIS_LIBS=""
+# Check whether --enable-metis was given.
+if test "${enable_metis+set}" = set; then :
+ enableval=$enable_metis; case $enableval in
+ yes | "") usemetis="yes" ;;
+ no) usemetis="no"; METIS_LIBS="" ;;
+ esac
+else
+ usemetis="test"
+
+fi
+
+
+if test "x$usemetis" = "xno"; then
+ echo "Building without METIS";
+else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SelectQueueOneWay in -lmetis" >&5
$as_echo_n "checking for SelectQueueOneWay in -lmetis... " >&6; }
-if test "${ac_cv_lib_metis_SelectQueueOneWay+set}" = set; then :
+if ${ac_cv_lib_metis_SelectQueueOneWay+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -20612,20 +21251,25 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_metis_SelectQueueOneWay" >&5
$as_echo "$ac_cv_lib_metis_SelectQueueOneWay" >&6; }
-if test "x$ac_cv_lib_metis_SelectQueueOneWay" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMETIS 1
-_ACEOF
-
- LIBS="-lmetis $LIBS"
-
+if test "x$ac_cv_lib_metis_SelectQueueOneWay" = xyes; then :
+ usemetis="yes"
+else
+ usemetis="no"
fi
if test "x$usemetis" = "xyes"; then
METIS_LIBS="-lmetis"
+ LIBS="$LIBS $METIS_LIBS"
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_METIS 1
+_ACEOF
+
+ echo "Building with METIS (use --enable-metis=no to disable it)"
+ else
+ echo "Building without METIS";
fi;
- echo "Building with METIS (use --enable-metis=no to disable it)"
fi;
if test x$usemetis = xyes; then
@@ -20650,7 +21294,7 @@ if test $paralevel -ge 2; then
MPI_LIBS=""
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Test in -lmpich" >&5
$as_echo_n "checking for MPI_Test in -lmpich... " >&6; }
-if test "${ac_cv_lib_mpich_MPI_Test+set}" = set; then :
+if ${ac_cv_lib_mpich_MPI_Test+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -20692,7 +21336,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mpich_MPI_Test" >&5
$as_echo "$ac_cv_lib_mpich_MPI_Test" >&6; }
-if test "x$ac_cv_lib_mpich_MPI_Test" = x""yes; then :
+if test "x$ac_cv_lib_mpich_MPI_Test" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBMPICH 1
_ACEOF
@@ -20703,7 +21347,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPI_Test in -lmpichcxx" >&5
$as_echo_n "checking for MPI_Test in -lmpichcxx... " >&6; }
-if test "${ac_cv_lib_mpichcxx_MPI_Test+set}" = set; then :
+if ${ac_cv_lib_mpichcxx_MPI_Test+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -20739,72 +21383,24 @@ if ac_fn_cxx_try_link "$LINENO"; then :
else
ac_cv_lib_mpichcxx_MPI_Test=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_mpichcxx_MPI_Test" >&5
-$as_echo "$ac_cv_lib_mpichcxx_MPI_Test" >&6; }
-if test "x$ac_cv_lib_mpichcxx_MPI_Test" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMPICHCXX 1
-_ACEOF
-
- LIBS="-lmpichcxx $LIBS"
-
-fi
-
- for ac_header in mpi/mpi.h
-do :
- ac_fn_cxx_check_header_mongrel "$LINENO" "mpi/mpi.h" "ac_cv_header_mpi_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpi_mpi_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MPI_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
- for ac_header in mpi.h
-do :
- ac_fn_cxx_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpi_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
- for ac_header in mpich2/mpi.h
-do :
- ac_fn_cxx_check_header_mongrel "$LINENO" "mpich2/mpi.h" "ac_cv_header_mpich2_mpi_h" "$ac_includes_default"
-if test "x$ac_cv_header_mpich2_mpi_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MPICH2_MPI_H 1
-_ACEOF
- usempi="yes"
-else
-
- if test "x$usempi" = "xyes"; then
- as_fn_error "header file mpi.h not found." "$LINENO" 5;
- usempi="no"
- fi;
-
-fi
-
-done
-
-
+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_mpichcxx_MPI_Test" >&5
+$as_echo "$ac_cv_lib_mpichcxx_MPI_Test" >&6; }
+if test "x$ac_cv_lib_mpichcxx_MPI_Test" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPICHCXX 1
+_ACEOF
-done
-
+ LIBS="-lmpichcxx $LIBS"
fi
-done
-
+ CPPFLAGS="$CPPFLAGS -DGETFEM_HAVE_MPI_MPI_H=1 -I/usr/include/mpi"
if test "x$usempi" = "xyes"; then
- MPI_LIBS="-lmpich -lmpichcxx"
+ MPI_LIBS="-lmpi -lmpi++"
fi;
echo "Building with MPI (use --enable-mpi=no to disable it)"
fi;
@@ -20850,7 +21446,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgetrf_ in -llapack" >&5
$as_echo_n "checking for dgetrf_ in -llapack... " >&6; }
-if test "${ac_cv_lib_lapack_dgetrf_+set}" = set; then :
+if ${ac_cv_lib_lapack_dgetrf_+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
@@ -20892,7 +21488,7 @@ LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lapack_dgetrf_" >&5
$as_echo "$ac_cv_lib_lapack_dgetrf_" >&6; }
-if test "x$ac_cv_lib_lapack_dgetrf_" = x""yes; then :
+if test "x$ac_cv_lib_lapack_dgetrf_" = xyes; then :
acx_lapack_ok=yes; LAPACK_LIBS="-llapack "
fi
@@ -20909,60 +21505,6 @@ if test "$MPI_CFLAGS" -o "$MPI_LIBS"; then
echo "You are using MPI! Trying to build a parallelised version of getfem (require METIS)"
LIBS="$LIBS $MPI_LIBS -lmetis"
CXXFLAGS="$CXXFLAGS $MPI_CFLAGS -DGETFEM_PARA_LEVEL=2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for METIS_PartMeshNodal in -lmetis" >&5
-$as_echo_n "checking for METIS_PartMeshNodal in -lmetis... " >&6; }
-if test "${ac_cv_lib_metis_METIS_PartMeshNodal+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmetis $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 METIS_PartMeshNodal ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-# ifdef __cplusplus
- extern "C"
-# endif
- int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return METIS_PartMeshNodal ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_metis_METIS_PartMeshNodal=yes
-else
- ac_cv_lib_metis_METIS_PartMeshNodal=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_metis_METIS_PartMeshNodal" >&5
-$as_echo "$ac_cv_lib_metis_METIS_PartMeshNodal" >&6; }
-if test "x$ac_cv_lib_metis_METIS_PartMeshNodal" = x""yes; then :
- metis_ok="yes"
-else
- metis_ok="no"
-fi
-
- if test "x$metis_ok" = "xno"; then
- as_fn_error "Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
- ----------> Please add the path to libmetis.a to the MPI_LIBS variable." "$LINENO" 5
- fi
fi
@@ -20973,7 +21515,7 @@ fi
for ac_header in sys/times.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_times_h" = x""yes; then :
+if test "x$ac_cv_header_sys_times_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_SYS_TIMES_H 1
_ACEOF
@@ -20987,7 +21529,7 @@ done
for ac_header in cxxabi.h
do :
ac_fn_cxx_check_header_mongrel "$LINENO" "cxxabi.h" "ac_cv_header_cxxabi_h" "$ac_includes_default"
-if test "x$ac_cv_header_cxxabi_h" = x""yes; then :
+if test "x$ac_cv_header_cxxabi_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_CXXABI_H 1
_ACEOF
@@ -20998,7 +21540,7 @@ done
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __PRETTY_FUNCTION__" >&5
$as_echo_n "checking for __PRETTY_FUNCTION__... " >&6; }
-if test "${ac_cv_have_pretty_function+set}" = set; then :
+if ${ac_cv_have_pretty_function+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -21042,7 +21584,7 @@ fi;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for execinfo.h and backtrace" >&5
$as_echo_n "checking for execinfo.h and backtrace... " >&6; }
-if test "${ac_cv_have_backtrace+set}" = set; then :
+if ${ac_cv_have_backtrace+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -21084,7 +21626,7 @@ fi;
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fenv.h and feenableexcept" >&5
$as_echo_n "checking for fenv.h and feenableexcept... " >&6; }
-if test "${ac_cv_have_feenableexcept+set}" = set; then :
+if ${ac_cv_have_feenableexcept+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -21150,7 +21692,7 @@ if test "${enable_boost+set}" = set; then :
enableval=$enable_boost; case "${enableval}" in
yes) useboost=YES ;;
no) useboost=NO ;;
- *) as_fn_error "bad value ${enableval} for --enable-boost" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-boost" "$LINENO" 5 ;;
esac
else
useboost=NO
@@ -21180,7 +21722,7 @@ if test "${enable_matlab+set}" = set; then :
enableval=$enable_matlab; case "${enableval}" in
yes) usematlab=YES ;;
no) usematlab=NO ;;
- *) as_fn_error "bad value ${enableval} for --enable-matlab" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-matlab" "$LINENO" 5 ;;
esac
else
usematlab=NO
@@ -21202,7 +21744,7 @@ if test "${enable_python+set}" = set; then :
enableval=$enable_python; case "${enableval}" in
yes) usepython=YES ;;
no) usepython=NO ;;
- *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
esac
else
usepython=YES
@@ -21216,7 +21758,7 @@ do
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 test "${ac_cv_prog_MEX+set}" = set; then :
+if ${ac_cv_prog_MEX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$MEX"; then
@@ -21259,7 +21801,7 @@ do
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 test "${ac_cv_prog_MEX+set}" = set; then :
+if ${ac_cv_prog_MEX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$MEX"; then
@@ -21297,7 +21839,7 @@ done
if test x"$MEX" = x""; then
if test x$usematlab = xYES; then
- as_fn_error "Impossible to build the matlab interface without mex -- specify its full path with the MEX=/path/to/mex option, or use --enable-matlab-interface=no" "$LINENO" 5
+ as_fn_error $? "Impossible to build the matlab interface without mex -- specify its full path with the MEX=/path/to/mex option, or use --enable-matlab-interface=no" "$LINENO" 5
exit 1
fi
else
@@ -21323,7 +21865,7 @@ done
fi
else
if $(echo "" | $MEX 2>&1 | grep 'This is .*TeX'); then
- as_fn_error "the mex binary which is in the PATH appears to be part of LaTeX, not matlab !! run ./configure MEX=/path/to/matlab/mex" "$LINENO" 5;
+ as_fn_error $? "the mex binary which is in the PATH appears to be part of LaTeX, not matlab !! run ./configure MEX=/path/to/matlab/mex" "$LINENO" 5;
fi;
MATLAB_ROOT=`$MEX -v 2>&1 | grep "MATLAB " | awk '{print $4}'|sed -e '2,$d'`
MATLAB_INC_DIR=$MATLAB_ROOT/extern/include
@@ -21457,6 +21999,8 @@ if test x$usepython = xYES; then
+
+
if test -n "$PYTHON"; then
# If the user set $PYTHON, use it and don't search something else.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.2" >&5
@@ -21478,7 +22022,7 @@ sys.exit(sys.hexversion < minverhex)"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
- as_fn_error "too old" "$LINENO" 5
+ as_fn_error $? "too old" "$LINENO" 5
fi
am_display_PYTHON=$PYTHON
else
@@ -21486,11 +22030,11 @@ fi
# VERSION.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.2" >&5
$as_echo_n "checking for a Python interpreter with version >= 2.2... " >&6; }
-if test "${am_cv_pathless_PYTHON+set}" = set; then :
+if ${am_cv_pathless_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
- for am_cv_pathless_PYTHON in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+ for am_cv_pathless_PYTHON in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
test "$am_cv_pathless_PYTHON" = none && break
prog="import sys
# split strings by '.' and convert to numeric. Append some zeros
@@ -21520,7 +22064,7 @@ $as_echo "$am_cv_pathless_PYTHON" >&6; }
set dummy $am_cv_pathless_PYTHON; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PYTHON+set}" = set; then :
+if ${ac_cv_path_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
case $PYTHON in
@@ -21568,7 +22112,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
$as_echo_n "checking for $am_display_PYTHON version... " >&6; }
-if test "${am_cv_python_version+set}" = set; then :
+if ${am_cv_python_version+:} false; then :
$as_echo_n "(cached) " >&6
else
am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
@@ -21587,7 +22131,7 @@ $as_echo "$am_cv_python_version" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
$as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
-if test "${am_cv_python_platform+set}" = set; then :
+if ${am_cv_python_platform+:} false; then :
$as_echo_n "(cached) " >&6
else
am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`
@@ -21599,9 +22143,9 @@ $as_echo "$am_cv_python_platform" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
-if test "${am_cv_python_pythondir+set}" = set; then :
+if ${am_cv_python_pythondir+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "x$prefix" = xNONE
@@ -21610,8 +22154,7 @@ else
else
am_py_prefix=$prefix
fi
- am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
- echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+ am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null`
case $am_cv_python_pythondir in
$am_py_prefix*)
am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
@@ -21637,9 +22180,9 @@ $as_echo "$am_cv_python_pythondir" >&6; }
pkgpythondir=\${pythondir}/$PACKAGE
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; }
-if test "${am_cv_python_pyexecdir+set}" = set; then :
+if ${am_cv_python_pyexecdir+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "x$exec_prefix" = xNONE
@@ -21648,8 +22191,7 @@ else
else
am_py_exec_prefix=$exec_prefix
fi
- am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
- echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+ am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null`
case $am_cv_python_pyexecdir in
$am_py_exec_prefix*)
am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
@@ -21703,7 +22245,7 @@ if test x$usepython = xYES; then
set dummy python$PYTHON_VERSION; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PYTHON+set}" = set; then :
+if ${ac_cv_path_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
case $PYTHON in
@@ -21740,7 +22282,7 @@ fi
if test -z "$PYTHON"; then
- as_fn_error "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
+ as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
fi
#
@@ -21757,7 +22299,7 @@ $as_echo_n "checking for a version of Python >= '2.1.0'... " >&6; }
$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 "
+as_fn_error $? "
This version of the AC_PYTHON_DEVEL macro
doesn't work properly with versions of Python before
2.1.0. You may need to re-run configure, setting the
@@ -21766,7 +22308,7 @@ PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
to something else than an empty string.
-See \`config.log' for more details." "$LINENO" 5; } else
+See \`config.log' for more details" "$LINENO" 5; } else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: skip at user request" >&5
$as_echo "skip at user request" >&6; }
fi
@@ -21790,7 +22332,7 @@ $as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error "this package requires Python .
+ as_fn_error $? "this package requires Python .
If you have it installed, but it isn't the default Python
interpreter in your system path, please pass the PYTHON_VERSION
variable to configure. See \`\`configure --help'' for reference.
@@ -21810,7 +22352,7 @@ $as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error "cannot import Python module \"distutils\".
+ as_fn_error $? "cannot import Python module \"distutils\".
Please check your Python installation. The error was:
$ac_distutils_result" "$LINENO" 5
fi
@@ -21921,7 +22463,7 @@ if test "${enable_scilab+set}" = set; then :
enableval=$enable_scilab; case "${enableval}" in
yes) usescilab=YES ;;
no) usescilab=NO ;;
- *) as_fn_error "bad value ${enableval} for --enable-scilab" "$LINENO" 5 ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-scilab" "$LINENO" 5 ;;
esac
else
usescilab=NO
@@ -21981,7 +22523,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Scilab binary program was found in $with_scilab_prefix" >&5
$as_echo "Scilab binary program was found in $with_scilab_prefix" >&6; }
else
- as_fn_error "Scilab binary program was not found in $with_scilab_prefix/bin" "$LINENO" 5
+ as_fn_error $? "Scilab binary program was not found in $with_scilab_prefix/bin" "$LINENO" 5
fi
SCILAB_EXE="$with_scilab_prefix/bin/scilab"
$as_echo "#define HAVE_SCILAB 1" >>confdefs.h
@@ -21991,7 +22533,7 @@ $as_echo "Scilab binary program was found in $with_scilab_prefix" >&6; }
set dummy scilab; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_has_scilab+set}" = set; then :
+if ${ac_cv_prog_has_scilab+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$has_scilab"; then
@@ -22026,7 +22568,7 @@ fi
if test x$has_scilab = xno; then
- as_fn_error "Scilab binary program was found in your PATH, your PATH is $PATH" "$LINENO" 5
+ as_fn_error $? "Scilab binary program was not found in your PATH, your PATH is $PATH" "$LINENO" 5
fi
SCILAB_EXE="scilab"
$as_echo "#define HAVE_SCILAB 1" >>confdefs.h
@@ -22068,15 +22610,15 @@ fi
if test $SCILAB_VERSION_MAJOR -lt $REQUIRED_SCILAB_MAJOR
then
- as_fn_error "scilab major version does not match" "$LINENO" 5
+ as_fn_error $? "scilab major version does not match" "$LINENO" 5
else
if test $SCILAB_VERSION_MINOR -lt $REQUIRED_SCILAB_MINOR
then
- as_fn_error "scilab minor version does not match" "$LINENO" 5
+ as_fn_error $? "scilab minor version does not match" "$LINENO" 5
else
if test $SCILAB_VERSION_MICRO -lt $REQUIRED_SCILAB_MICRO
then
- as_fn_error "scilab micro version does not match" "$LINENO" 5
+ as_fn_error $? "scilab micro version does not match" "$LINENO" 5
fi
fi
fi
@@ -22127,6 +22669,16 @@ then
fi
+# Check whether --with-scilab-toolbox-dir was given.
+if test "${with_scilab_toolbox_dir+set}" = set; then :
+ withval=$with_scilab_toolbox_dir; SCILAB_TOOLBOX_DIR="$withval"
+else
+ SCILAB_TOOLBOX_DIR="$GFPREFIX/getfem_toolbox"
+fi
+
+
+
+
IM_METHODS=`$srcdir/bin/extract_doc $srcdir/interface/src cubature`
@@ -22134,6 +22686,7 @@ IM_METHODS_LOC=`$srcdir/bin/extract_doc $srcdir/interface/src cubature_loc`
+
ac_config_files="$ac_config_files Makefile m4/Makefile cubature/Makefile $SUPERLU_MAKEFILE doc/Makefile doc/sphinx/Makefile src/Makefile tests/Makefile tests-2.0/Makefile contrib/Makefile contrib/icare/Makefile contrib/delaminated_crack/Makefile contrib/static_friction/Makefile contrib/bimaterial_crack_test/Makefile contrib/bimat_contact_crack_test/Makefile contrib/xfem_stab_unilat_contact/Makefile contrib/mixed_elastostatic/Makefile contrib/contact_grd_trans/Makefile contrib/mixed_dynamic_friction/Makefile contrib/xfem_large_strain/Makefile contrib/xfem_contact/Makefile contrib/crack_plate/Makefile contrib/inter_element_test/Makefile contrib/aposteriori/Makefile contrib/static_contact_gears/Makefile bin/Makefile interface/Makefile interface/src/Makefile interface/src/matlab/Makefile interface/src/matlab/private/Makefile interface/src/python/Makefile interface/src/python/setup.py interface/src/scilab/Makefile interface/src/scilab/sci_gateway/c/builder_gateway_c.sce interface/tests/Makefile interface/tests/meshes/Makefile interface/tests/matlab/Makefile interface/tests/matlab/private/Makefile interface/tests/python/Makefile getfem-config getfem-config-notinstalled gmm-config"
@@ -22146,6 +22699,7 @@ 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$//'
@@ -22169,67 +22723,63 @@ else
fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
- as_fn_error "conditional \"AMDEP\" was never defined.
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+ as_fn_error $? "conditional \"am__fastdepCXX\" 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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${USEBLASLITE_TRUE}" && test -z "${USEBLASLITE_FALSE}"; then
- as_fn_error "conditional \"USEBLASLITE\" was never defined.
+ as_fn_error $? "conditional \"USEBLASLITE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${QHULL_TRUE}" && test -z "${QHULL_FALSE}"; then
- as_fn_error "conditional \"QHULL\" was never defined.
+ as_fn_error $? "conditional \"QHULL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${MUPARSER_TRUE}" && test -z "${MUPARSER_FALSE}"; then
- as_fn_error "conditional \"MUPARSER\" was never defined.
+ as_fn_error $? "conditional \"MUPARSER\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${MUMPS_TRUE}" && test -z "${MUMPS_FALSE}"; then
- as_fn_error "conditional \"MUMPS\" was never defined.
+ as_fn_error $? "conditional \"MUMPS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${METIS_TRUE}" && test -z "${METIS_FALSE}"; then
- as_fn_error "conditional \"METIS\" was never defined.
+ as_fn_error $? "conditional \"METIS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${MPI_TRUE}" && test -z "${MPI_FALSE}"; then
- as_fn_error "conditional \"MPI\" was never defined.
+ as_fn_error $? "conditional \"MPI\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILDMEX_TRUE}" && test -z "${BUILDMEX_FALSE}"; then
- as_fn_error "conditional \"BUILDMEX\" was never defined.
+ as_fn_error $? "conditional \"BUILDMEX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${USE_MINGW_MEX_TRUE}" && test -z "${USE_MINGW_MEX_FALSE}"; then
- as_fn_error "conditional \"USE_MINGW_MEX\" was never defined.
+ as_fn_error $? "conditional \"USE_MINGW_MEX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILDMEXRPC_TRUE}" && test -z "${BUILDMEXRPC_FALSE}"; then
- as_fn_error "conditional \"BUILDMEXRPC\" was never defined.
+ as_fn_error $? "conditional \"BUILDMEXRPC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILDPYTHON_TRUE}" && test -z "${BUILDPYTHON_FALSE}"; then
- as_fn_error "conditional \"BUILDPYTHON\" was never defined.
+ as_fn_error $? "conditional \"BUILDPYTHON\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${BUILDSCILAB_TRUE}" && test -z "${BUILDSCILAB_FALSE}"; then
- as_fn_error "conditional \"BUILDSCILAB\" was never defined.
+ as_fn_error $? "conditional \"BUILDSCILAB\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -22330,6 +22880,7 @@ fi
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
@@ -22375,19 +22926,19 @@ export LANGUAGE
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# 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.
+# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+ 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: $1" >&2
+ $as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -22583,7 +23134,7 @@ $as_echo X"$as_dir" |
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"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
@@ -22636,8 +23187,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by getfem $as_me 4.1.1, which was
-generated by GNU Autoconf 2.65. Invocation command line was
+This file was extended by getfem $as_me 4.2, which was
+generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -22702,11 +23253,11 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-getfem config.status 4.1.1
-configured by $0, generated by GNU Autoconf 2.65,
+getfem config.status 4.2
+configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -22724,11 +23275,16 @@ 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
@@ -22750,6 +23306,7 @@ do
$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;;
@@ -22762,7 +23319,7 @@ do
ac_need_defaults=false;;
--he | --h)
# Conflict between --help and --header
- as_fn_error "ambiguous option: \`$1'
+ as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
--help | --hel | -h )
$as_echo "$ac_cs_usage"; exit ;;
@@ -22771,7 +23328,7 @@ Try \`$0 --help' for more information.";;
ac_cs_silent=: ;;
# This is an error.
- -*) as_fn_error "unrecognized option: \`$1'
+ -*) as_fn_error $? "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;
*) as_fn_append ac_config_targets " $1"
@@ -22826,231 +23383,256 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
sed_quote_subst='$sed_quote_subst'
double_quote_subst='$double_quote_subst'
delay_variable_subst='$delay_variable_subst'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
-predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
-LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-LD_FC='`$ECHO "X$LD_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds_FC='`$ECHO "X$old_archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_FC='`$ECHO "X$compiler_FC" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-GCC_FC='`$ECHO "X$GCC_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag_FC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl_FC='`$ECHO "X$lt_prog_compiler_wl_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic_FC='`$ECHO "X$lt_prog_compiler_pic_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static_FC='`$ECHO "X$lt_prog_compiler_static_FC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o_FC='`$ECHO "X$lt_cv_prog_compiler_c_o_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc_FC='`$ECHO "X$archive_cmds_need_lc_FC" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes_FC='`$ECHO "X$enable_shared_with_static_runtimes_FC" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec_FC='`$ECHO "X$export_dynamic_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec_FC='`$ECHO "X$whole_archive_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object_FC='`$ECHO "X$compiler_needs_object_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds_FC='`$ECHO "X$old_archive_from_new_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds_FC='`$ECHO "X$old_archive_from_expsyms_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_FC='`$ECHO "X$archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds_FC='`$ECHO "X$archive_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds_FC='`$ECHO "X$module_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds_FC='`$ECHO "X$module_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld_FC='`$ECHO "X$with_gnu_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag_FC='`$ECHO "X$allow_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag_FC='`$ECHO "X$no_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_FC='`$ECHO "X$hardcode_libdir_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld_FC='`$ECHO "X$hardcode_libdir_flag_spec_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator_FC='`$ECHO "X$hardcode_libdir_separator_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_FC='`$ECHO "X$hardcode_direct_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute_FC='`$ECHO "X$hardcode_direct_absolute_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L_FC='`$ECHO "X$hardcode_minus_L_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var_FC='`$ECHO "X$hardcode_shlibpath_var_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic_FC='`$ECHO "X$hardcode_automatic_FC" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath_FC='`$ECHO "X$inherit_rpath_FC" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs_FC='`$ECHO "X$link_all_deplibs_FC" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path_FC='`$ECHO "X$fix_srcfile_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols_FC='`$ECHO "X$always_export_symbols_FC" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds_FC='`$ECHO "X$export_symbols_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms_FC='`$ECHO "X$exclude_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms_FC='`$ECHO "X$include_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds_FC='`$ECHO "X$prelink_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec_FC='`$ECHO "X$file_list_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action_FC='`$ECHO "X$hardcode_action_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_dirs_FC='`$ECHO "X$compiler_lib_search_dirs_FC" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predep_objects_FC='`$ECHO "X$predep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdep_objects_FC='`$ECHO "X$postdep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-predeps_FC='`$ECHO "X$predeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-postdeps_FC='`$ECHO "X$postdeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_lib_search_path_FC='`$ECHO "X$compiler_lib_search_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $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"`'
+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"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $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"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $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_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $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_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $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_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $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_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $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_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $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_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $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_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $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_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $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_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $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_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $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_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $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 SED \
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
GREP \
EGREP \
FGREP \
@@ -23063,8 +23645,13 @@ reload_flag \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
AR \
AR_FLAGS \
+archiver_list_spec \
STRIP \
RANLIB \
CC \
@@ -23074,14 +23661,14 @@ 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 \
-SHELL \
-ECHO \
+nm_file_list_spec \
lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
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 \
@@ -23095,9 +23682,7 @@ with_gnu_ld \
allow_undefined_flag \
no_undefined_flag \
hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
hardcode_libdir_separator \
-fix_srcfile_path \
exclude_expsyms \
include_expsyms \
file_list_spec \
@@ -23105,6 +23690,7 @@ variables_saved_for_relink \
libname_spec \
library_names_spec \
soname_spec \
+install_override_mode \
finish_eval \
old_striplib \
striplib \
@@ -23116,14 +23702,16 @@ postdeps \
compiler_lib_search_path \
LD_CXX \
LD_FC \
+reload_flag_CXX \
+reload_flag_FC \
compiler_CXX \
compiler_FC \
lt_prog_compiler_no_builtin_flag_CXX \
lt_prog_compiler_no_builtin_flag_FC \
-lt_prog_compiler_wl_CXX \
-lt_prog_compiler_wl_FC \
lt_prog_compiler_pic_CXX \
lt_prog_compiler_pic_FC \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_wl_FC \
lt_prog_compiler_static_CXX \
lt_prog_compiler_static_FC \
lt_cv_prog_compiler_c_o_CXX \
@@ -23142,12 +23730,8 @@ no_undefined_flag_CXX \
no_undefined_flag_FC \
hardcode_libdir_flag_spec_CXX \
hardcode_libdir_flag_spec_FC \
-hardcode_libdir_flag_spec_ld_CXX \
-hardcode_libdir_flag_spec_ld_FC \
hardcode_libdir_separator_CXX \
hardcode_libdir_separator_FC \
-fix_srcfile_path_CXX \
-fix_srcfile_path_FC \
exclude_expsyms_CXX \
exclude_expsyms_FC \
include_expsyms_CXX \
@@ -23166,9 +23750,9 @@ postdeps_CXX \
postdeps_FC \
compiler_lib_search_path_CXX \
compiler_lib_search_path_FC; do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -23190,11 +23774,14 @@ 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_CXX \
+reload_cmds_FC \
old_archive_cmds_CXX \
old_archive_cmds_FC \
old_archive_from_new_cmds_CXX \
@@ -23212,10 +23799,12 @@ module_expsym_cmds_FC \
export_symbols_cmds_CXX \
export_symbols_cmds_FC \
prelink_cmds_CXX \
-prelink_cmds_FC; do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+prelink_cmds_FC \
+postlink_cmds_CXX \
+postlink_cmds_FC; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[\\\\\\\`\\"\\\$]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -23223,12 +23812,6 @@ prelink_cmds_FC; do
esac
done
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
- ;;
-esac
-
ac_aux_dir='$ac_aux_dir'
xsi_shell='$xsi_shell'
lt_shell_append='$lt_shell_append'
@@ -23308,7 +23891,7 @@ do
"getfem-config-notinstalled") CONFIG_FILES="$CONFIG_FILES getfem-config-notinstalled" ;;
"gmm-config") CONFIG_FILES="$CONFIG_FILES gmm-config" ;;
- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
done
@@ -23331,9 +23914,10 @@ fi
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- tmp=
+ tmp= ac_tmp=
trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $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
}
@@ -23341,12 +23925,13 @@ $debug ||
{
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
+ test -d "$tmp"
} ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || 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.
@@ -23363,12 +23948,12 @@ if test "x$ac_cr" = x; then
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\r'
+ ac_cs_awk_cr='\\r'
else
ac_cs_awk_cr=$ac_cr
fi
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
_ACEOF
@@ -23377,18 +23962,18 @@ _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 '$'`
+ 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
+ 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
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
else
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
@@ -23396,7 +23981,7 @@ done
rm -f conf$$subs.sh
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
sed -n '
h
@@ -23444,7 +24029,7 @@ t delim
rm -f conf$$subs.awk
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
for (key in S) S_is_set[key] = 1
FS = ""
@@ -23476,21 +24061,29 @@ 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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || as_fn_error "could not setup config files machinery" "$LINENO" 5
+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 $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# 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[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
+ 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
@@ -23502,7 +24095,7 @@ fi # test -n "$CONFIG_FILES"
# 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 >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
BEGIN {
_ACEOF
@@ -23514,11 +24107,11 @@ _ACEOF
# handling of long lines.
ac_delim='%!_!# '
for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
+ 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
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
else
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
@@ -23603,7 +24196,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACAWK
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error "could not setup config headers machinery" "$LINENO" 5
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
fi # test -n "$CONFIG_HEADERS"
@@ -23616,7 +24209,7 @@ do
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@@ -23635,7 +24228,7 @@ do
for ac_f
do
case $ac_f in
- -) ac_f="$tmp/stdin";;
+ -) 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 `:'.
@@ -23644,7 +24237,7 @@ do
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ 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'"
@@ -23670,8 +24263,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
esac
case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
@@ -23807,23 +24400,24 @@ 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 "$tmp/subs.awk" >$tmp/out \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
+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' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { 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
+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;}
+which seems to be undefined. Please make sure it is defined" >&2;}
- rm -f "$tmp/stdin"
+ rm -f "$ac_tmp/stdin"
case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ -) 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
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
;;
:H)
#
@@ -23832,21 +24426,21 @@ which seems to be undefined. Please make sure it is defined." >&2;}
if test x"$ac_file" != x-; then
{
$as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ && 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 "$tmp/config.h" "$ac_file" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
+ 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 "$tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error "could not create -" "$LINENO" 5
+ && 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"
@@ -23917,7 +24511,7 @@ if test ".$ac_prefix_conf_INP" = "."; then
esac
fi
if test -z "$ac_prefix_conf_PKG" ; then
- as_fn_error "no prefix for _PREFIX_PKG_CONFIG_H" "$LINENO" 5
+ as_fn_error $? "no prefix for _PREFIX_PKG_CONFIG_H" "$LINENO" 5
else
if test ! -f "$ac_prefix_conf_INP" ; then if test -f "$srcdir/$ac_prefix_conf_INP" ; then
ac_prefix_conf_INP="$srcdir/$ac_prefix_conf_INP"
@@ -23976,7 +24570,7 @@ $as_echo X"$ac_prefix_conf_OUT" |
fi
cp conftest.prefix _configs.sed
else
- as_fn_error "input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" "$LINENO" 5
+ as_fn_error $? "input file $ac_prefix_conf_INP does not exist - skip generating $ac_prefix_conf_OUT" "$LINENO" 5
fi
rm -f conftest.*
fi
@@ -24097,7 +24691,8 @@ $as_echo X"$file" |
# 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 Free Software Foundation, Inc.
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is part of GNU Libtool.
@@ -24129,12 +24724,6 @@ available_tags="CXX FC "
# ### BEGIN LIBTOOL CONFIG
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
# Which release of libtool.m4 was used?
macro_version=$macro_version
macro_revision=$macro_revision
@@ -24142,9 +24731,24 @@ macro_revision=$macro_revision
# What type of objects to build.
pic_mode=$pic_mode
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
# 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
@@ -24194,9 +24798,11 @@ SP2NL=$lt_lt_SP2NL
# turn newlines into spaces.
NL2SP=$lt_lt_NL2SP
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# 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
# An object symbol dumper.
OBJDUMP=$lt_OBJDUMP
@@ -24204,13 +24810,30 @@ OBJDUMP=$lt_OBJDUMP
# 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".
+# 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
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# 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
@@ -24219,6 +24842,9 @@ 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
@@ -24237,14 +24863,14 @@ 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
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# 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
@@ -24252,6 +24878,9 @@ 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
@@ -24308,6 +24937,9 @@ 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
@@ -24347,6 +24979,10 @@ 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
@@ -24359,12 +24995,12 @@ with_gcc=$GCC
# Compiler flag to turn off builtin functions.
no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
# 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
@@ -24414,10 +25050,6 @@ no_undefined_flag=$lt_no_undefined_flag
# This must work even if \$libdir does not exist
hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking. This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=$lt_hardcode_libdir_separator
@@ -24451,9 +25083,6 @@ inherit_rpath=$inherit_rpath
# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=$link_all_deplibs
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
# Set to "yes" if exported symbols are required.
always_export_symbols=$always_export_symbols
@@ -24469,6 +25098,9 @@ 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
@@ -24515,212 +25147,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
# 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- case $xsi_shell in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# 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 ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result="${1##*/}"
-}
-
-# 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 ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
- func_basename_result="${1##*/}"
-}
-
-# 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_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}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=${1%%=*}
- func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- case ${1} in
- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
- *) func_lo2o_result=${1} ;;
- esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=${#1}
-}
-
-_LT_EOF
- ;;
- *) # Bourne compatible functions.
- cat << \_LT_EOF >> "$cfgfile"
-
-# 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 ()
-{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -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 file
-func_basename ()
-{
- func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# 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 "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
- *) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
- esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
- func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$1+=\$2"
-}
-_LT_EOF
- ;;
- *)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$1=\$$1\$2"
-}
-
-_LT_EOF
- ;;
- esac
-
-
- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- mv -f "$cfgfile" "$ofile" ||
+ 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"
@@ -24732,6 +25321,10 @@ _LT_EOF
# The linker used to build libraries.
LD=$lt_LD_CXX
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
# Commands used to build an old-style archive.
old_archive_cmds=$lt_old_archive_cmds_CXX
@@ -24744,12 +25337,12 @@ with_gcc=$GCC_CXX
# Compiler flag to turn off builtin functions.
no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
# Additional compiler flags for building library objects.
pic_flag=$lt_lt_prog_compiler_pic_CXX
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
# Compiler flag to prevent dynamic linking.
link_static_flag=$lt_lt_prog_compiler_static_CXX
@@ -24799,10 +25392,6 @@ no_undefined_flag=$lt_no_undefined_flag_CXX
# This must work even if \$libdir does not exist
hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking. This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-
# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
@@ -24836,9 +25425,6 @@ inherit_rpath=$inherit_rpath_CXX
# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=$link_all_deplibs_CXX
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_CXX
-
# Set to "yes" if exported symbols are required.
always_export_symbols=$always_export_symbols_CXX
@@ -24854,6 +25440,9 @@ include_expsyms=$lt_include_expsyms_CXX
# Commands necessary for linking programs (against libraries) with templates.
prelink_cmds=$lt_prelink_cmds_CXX
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
# Specify filename containing input files.
file_list_spec=$lt_file_list_spec_CXX
@@ -24885,6 +25474,10 @@ _LT_EOF
# 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
@@ -24897,12 +25490,12 @@ with_gcc=$GCC_FC
# Compiler flag to turn off builtin functions.
no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_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
@@ -24952,10 +25545,6 @@ no_undefined_flag=$lt_no_undefined_flag_FC
# This must work even if \$libdir does not exist
hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking. This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_FC
-
# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC
@@ -24989,9 +25578,6 @@ inherit_rpath=$inherit_rpath_FC
# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=$link_all_deplibs_FC
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path_FC
-
# Set to "yes" if exported symbols are required.
always_export_symbols=$always_export_symbols_FC
@@ -25007,6 +25593,9 @@ 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
@@ -25041,7 +25630,7 @@ _ACEOF
ac_clean_files=$ac_clean_files_save
test $ac_write_fail = 0 ||
- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
# configure is writing to config.log, and then calls config.status.
@@ -25062,7 +25651,7 @@ if test "$no_create" != yes; then
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 $?
+ $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
@@ -25086,59 +25675,68 @@ fi;
-echo ""
+echo
echo "------------------------------------------------------------------------------"
-echo "If you want to build the shared library of getfem++, use --enable-shared"
-echo "(by default, only the static one will be built)"
+echo
+echo "Libraries Used:"
+echo "---------------"
+echo
+
+
if test "x$useQDlib" = "xyes" ; then
- echo "Using the QD library:"
- echo " high precision (${QD_PREC}-double precision) polynomials and integration methods are enabled";
+ echo "- QD library found. High precision (${QD_PREC}-double precision) polynomials"
+ echo " and integration methods are enabled.";
+else
+ echo "- QD library not found (not recommended)."
fi;
if test "x$useQHULL" = "xyes"; then
- echo "Using the qhull library for delaunay triangulations."
+ echo "- Qhull found. Using the Qhull library for delaunay triangulations."
else
- echo "Not using the qhull library. Mesh generation will be disabled."
+ echo "- Qhull not found. Mesh generation will be disabled."
fi;
if test "x$usemuparser" = "xyes"; then
- echo "Using the muParser library for parsing mathematical expressions."
+ echo "- MuParser found. Used for parsing mathematical expressions."
else
- echo "Not using the muParser library. Parsing mathematical expressions will be disabled."
+ echo "- MuParser not found. Parsing mathematical expressions will be disabled."
fi;
if test "x$usemumps" = "xyes"; then
- echo "Using the MUMPS library. A direct solver for large sparse linear systems."
+ echo "- Mumps found. A direct solver for large sparse linear systems."
else
- echo "Not using the MUMPS library. A direct solver for large sparse linear systems."
+ echo "- Mumps not found. Not using the MUMPS library for large sparse linear systems."
fi;
-echo
+if test x"$acx_lapack_ok" = xyes; then
+ echo "- Lapack library found: $LAPACK_LIBS"
+else
+ echo "- Lapack library not found: generic (less effective) algorithms will be used"
+fi
+
if test "x$HAVE_VENDOR_BLAS" = "x0"; then
- echo "*** No usable blas library was found ***"
- echo "A generic BLAS implementation will be used, however you should "
- echo "consider installing a faster BLAS, such as ATLAS"
+ echo "- *** No usable blas library was found ***"
+ echo " A generic BLAS implementation will be used, however you should "
+ echo " consider installing a faster BLAS, such as ATLAS"
else
- echo "Link options for the BLAS library: $BLAS_LIBS"
+ echo "- BLAS library found. Link options: $BLAS_LIBS"
fi;
-echo "You can give the location of your prefered blas library with either"
-echo "the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
-echo 'for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo " You can give the location of your prefered blas library with either"
+echo " the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
+echo ' for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo
echo
-if test x"$acx_lapack_ok" = xyes; then
- echo "Lapack library found : $LAPACK_LIBS"
-else
- echo "No lapack library found : generic (less effective) algorithms will be used"
-fi
-echo "---------------------------------------"
+echo "-----------------------------------------------------------------------"
echo "Ready to build getfem"
echo " building MATLAB interface: $usematlab"
echo " building PYTHON interface: $usepython (requires numpy and scipy)"
echo " building SCILAB interface: $usescilab"
-echo "---------------------------------------"
+echo " If you want to build the shared library of getfem++, use --enable-shared"
+echo " (by default, only the static one will be built)"
+echo "-----------------------------------------------------------------------"
case $host in
x86_64-*)
@@ -25152,3 +25750,5 @@ case $host in
fi
;;
esac
+
+echo $shared_mode
diff --git a/configure.in b/configure.in
index adbb334..79a731f 100644
--- a/configure.in
+++ b/configure.in
@@ -8,10 +8,10 @@ dnl thus, updating cache ./config.cache avoided.
define([AC_CACHE_LOAD], )dnl
define([AC_CACHE_SAVE], )dnl
-AC_INIT(getfem, 4.1.1)
+AC_INIT(getfem, 4.2)
MAJOR_VERSION="4"
-MINOR_VERSION="1"
-PATCH_VERSION="1"
+MINOR_VERSION="2"
+PATCH_VERSION="0"
AC_CONFIG_SRCDIR([install-sh])
AC_CONFIG_MACRO_DIR([m4])
@@ -171,20 +171,10 @@ dnl ------------------------------------------------------------------------
dnl init libtools for shared libraries
dnl ------------------------------------------------------------------------
-dnl AC_DISABLE_FAST_INSTALL
-AM_DISABLE_SHARED
-AM_ENABLE_STATIC
-
-dnl always build with -fPIC so that the matlab and python interface
-dnl can be run on x86_64 platforms
-dnl unfortunately , it does not work... I HATE LIBTOOL
-dnl AC_LIBTOOL_PICMODE(['yes'])
-
-AM_PROG_LIBTOOL
+dnl option pic-only is not working: a libtool bug ...
+LT_INIT([pic-only disable-shared])
AC_SUBST([LIBTOOL_DEPS])
-
-
dnl -------------------------------BLAS----------------------------------
dnl why I hate autoconf: if the code below is put into a separate file,
@@ -392,6 +382,14 @@ AC_SUBST([SUPERLU_LIBS])
AM_CONDITIONAL(USEBLASLITE, test x$HAVE_VENDOR_BLAS = x0)
echo "Configuration of SuperLU done"
+
+dnl ----------------EXPERIMENTAL PARTS OF THE LIBRARY--------------------
+EXPER=""
+AC_ARG_ENABLE(experimental,
+ [AS_HELP_STRING([--enable-experimental],[compile experimental parts of the library])],
+[ if test "x$enableval" = "xyes" ; then EXPER="-DEXPERIMENTAL_PURPOSE_ONLY"; fi], [EXPER=""])
+CPPFLAGS="$CPPFLAGS $EXPER"
+
dnl -----------------------------QD TESTS--------------------------------
AC_ARG_WITH(qd-lib-dir,
[AS_HELP_STRING([--with-qd-lib-dir],[directory in which the libqd.a can be found])],
@@ -400,10 +398,10 @@ AC_ARG_WITH(qd-include-dir,
[AS_HELP_STRING([--with-qd-include-dir],[directory in which the qd.h header can be found])],
QDINC="-I$withval",QDINC="-I$GFPREFIX/include")
AC_ARG_ENABLE(dd,
- [AS_HELP_STRING([--enable-dd],[enable the use of the qd library (some computation will be done with double-double precision, usefull for high order FEMs)])],
+ [AS_HELP_STRING([--enable-dd],[enable the use of the qd library (some computation will be done with double-double precision, useful for high order FEMs)])],
[ if test "x$enableval" = "xyes" ; then useQDlib="yes"; QD_PREC="double"; fi], [useQDlib="no"])
AC_ARG_ENABLE(qd,
- [AS_HELP_STRING([--enable-qd],[enable the use of the qd library (some computation will be done with quad-double precision, usefull for high order FEMs)])],
+ [AS_HELP_STRING([--enable-qd],[enable the use of the qd library (some computation will be done with quad-double precision, useful for high order FEMs)])],
[ if test "x$enableval" = "xyes" ; then useQDlib="yes"; QD_PREC="quad"; fi], [if test "x$useQDlib" = "xyes"; then useQDlib="yes"; else useQDlib="no"; fi])
if test "x$useQDlib" = "xyes" ; then
LIBS="$LIBS $QDLIB -lm"
@@ -471,6 +469,19 @@ AC_SUBST([QHULL_LIBS])
echo "Configuration of qhull done"
dnl -----------------------------END OF QHULL TEST---------------------------
+dnl ------------------------------MUPARSER------------------------------
+MUPARSERSINC=""
+AC_ARG_WITH(muparser-include-dir,
+ [AS_HELP_STRING([--with-muparser-include-dir],[directory in which the muParser.h header can be found])],
+ [case $withval in
+ -I* ) MUPARSERINC="$withval";;
+ * ) MUPARSERINC="-I$withval";;
+ esac],
+ [MUPARSERINC="-I$GFPREFIX/include"]
+)
+CPPFLAGS="$CPPFLAGS $MUPARSERINC"
+dnl ---------------------------END OF MUPARSER--------------------------
+
dnl ------------------------------MUPARSER TEST------------------------------
usemuparser="no"
AC_ARG_ENABLE(muparser,
@@ -481,7 +492,7 @@ MUPARSER_LIBS=""
if test "x$usemuparser" = "xno"; then
echo "Building with muParser explicitly disabled";
else
- AC_CHECK_LIB(muparser, _init)
+ AC_CHECK_LIB(muparser, _init, [], [AC_CHECK_LIB(muparser, mupEval)])
AC_CHECK_HEADERS(muParser/muParser.h, [usemuparser="yes"],
[
AC_CHECK_HEADERS(muParser.h, [usemuparser="yes"],
@@ -504,7 +515,7 @@ AC_SUBST([MUPARSER_LIBS])
echo "Configuration of muParser done"
dnl ---------------------------END OF MUPARSER TEST--------------------------
-dnl ------------------------------MUMPS------------------------------
+dnl ------------------------------MUMPS TEST------------------------------
MUMPSINC=""
AC_ARG_WITH(mumps-include-dir,
[AS_HELP_STRING([--with-mumps-include-dir],[directory in which the dmumps.h header can be found])],
@@ -518,28 +529,34 @@ CPPFLAGS="$CPPFLAGS $MUMPSINC"
MUMPS_LIBS=""
acx_mumps_ok="no"
+usemumps="no"
+AC_ARG_ENABLE(mumps,
+ [AS_HELP_STRING([--enable-mumps],[enable the use of the (sequential) MUMPS library. A direct solver for large sparse linear systems.])],
+ [case $enableval in
+ yes | "") usemumps="yes"; acx_mumps_ok="yes"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq";;
+ no) usemumps="no";;
+ esac],
+ [usemumps="test"; acx_mumps_ok="test"; MUMPS_LIBS="-lsmumps_seq -ldmumps_seq -lcmumps_seq -lzmumps_seq"]
+)
+
+AC_ARG_ENABLE(par-mumps,
+ [AS_HELP_STRING([--enable-par-mumps],[enable the use of the parrallel MUMPS library. A direct solver for large sparse linear systems.])],
+ [case $enableval in
+ yes | "") usemumps="yes"; MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps";;
+ no) usemumps="no";;
+ esac]
+)
+
AC_ARG_WITH(mumps,
[AS_HELP_STRING([--with-mumps=<lib>],[use MUMPS library <lib>])],
[case $with_mumps in
- yes | "") acx_mumps_ok="yes" ;;
+ yes | "") usemumps="yes";;
no) acx_mumps_ok="no" ;;
-* | */* | *.a | *.so | *.so.* | *.o| builtin) MUMPS_LIBS="$with_mumps"; acx_mumps_ok="yes" ;;
- *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; acx_mumps_ok="yes" ;;
- esac],
- [MUMPS_LIBS="-lsmumps -ldmumps -lcmumps -lzmumps"; acx_mumps_ok="test"]
+ *) MUMPS_LIBS=`echo $with_mumps | sed -e 's/^/-l/g;s/ / -l/g'` ; usemumps="yes";;
+ esac]
)
-dnl ---------------------------END OF MUMPS--------------------------
-dnl ------------------------------MUMPS TEST------------------------------
-usemumps="no"
-AC_ARG_ENABLE(mumps,
- [AS_HELP_STRING([--enable-mumps],[enable the use of the MUMPS library. A direct solver for large sparse linear systems.])],
- [case $enableval in
- yes | "") usemumps="yes"; acx_mumps_ok="yes" ;;
- no) usemumps="no"; MUMPS_LIBS="" ;;
- esac],
- [usemumps="test"]
-)
if test "x$usemumps" = "xno" -o "x$acx_mumps_ok" = "xno"; then
echo "Building with MUMPS explicitly disabled";
@@ -572,34 +589,6 @@ else
fi;
usemumps="no"]
)
- AC_CHECK_LIB(smumps, smumps_c,
- [usemumps="yes"],
- [if test "x$acx_mumps_ok" = "xyes"; then
- AC_MSG_ERROR([Couldn't find a smumps library supporting the smumps_c function.]);
- fi;
- usemumps="no"]
- )
- AC_CHECK_LIB(dmumps, dmumps_c,
- [usemumps="yes"],
- [if test "x$acx_mumps_ok" = "xyes"; then
- AC_MSG_ERROR([Couldn't find a dmumps library supporting the dmumps_c function.]);
- fi;
- usemumps="no"]
- )
- AC_CHECK_LIB(cmumps, cmumps_c,
- [usemumps="yes"],
- [if test "x$acx_mumps_ok" = "xyes"; then
- AC_MSG_ERROR([Couldn't find a cmumps library supporting the cmumps_c function.]);
- fi;
- usemumps="no"]
- )
- AC_CHECK_LIB(zmumps, zmumps_c,
- [usemumps="yes"],
- [if test "x$acx_mumps_ok" = "xyes"; then
- AC_MSG_ERROR([Couldn't find a zmumps library supporting the zmumps_c function.]);
- fi;
- usemumps="no"]
- )
AC_CHECK_HEADERS([smumps_c.h dmumps_c.h cmumps_c.h zmumps_c.h],
[usemumps="yes"],
[if test "x$acx_mumps_ok" = "xyes"; then
@@ -638,12 +627,24 @@ dnl ---------------------------END OF PARA LEVEL--------------------------
dnl ---------------------------METIS--------------------------
usemetis="no"
-METIS_LIBS=""
-
if test $paralevel -ge 2; then
usemetis="yes"
- METIS_LIBS=""
- AC_CHECK_LIB(metis, SelectQueueOneWay)
+fi;
+
+METIS_LIBS=""
+AC_ARG_ENABLE(metis,
+ [AS_HELP_STRING([--enable-metis],[enable the use of the METIS library.])],
+ [case $enableval in
+ yes | "") usemetis="yes" ;;
+ no) usemetis="no"; METIS_LIBS="" ;;
+ esac],
+ [usemetis="test"]
+)
+
+if test "x$usemetis" = "xno"; then
+ echo "Building without METIS";
+else
+ AC_CHECK_LIB(metis, SelectQueueOneWay, [usemetis="yes"], [usemetis="no"])
dnl AC_CHECK_HEADERS(metis.h, [usemetis="yes"],
dnl [
dnl AC_MSG_ERROR([header file metis.h not found]);
@@ -652,8 +653,12 @@ dnl ])
if test "x$usemetis" = "xyes"; then
METIS_LIBS="-lmetis"
+ LIBS="$LIBS $METIS_LIBS"
+ AC_DEFINE_UNQUOTED([HAVE_METIS],1,[defined if the Metis library was found and is working])
+ echo "Building with METIS (use --enable-metis=no to disable it)"
+ else
+ echo "Building without METIS";
fi;
- echo "Building with METIS (use --enable-metis=no to disable it)"
fi;
AM_CONDITIONAL(METIS, test x$usemetis = xyes)
@@ -673,21 +678,22 @@ if test $paralevel -ge 2; then
MPI_LIBS=""
AC_CHECK_LIB(mpich, MPI_Test)
AC_CHECK_LIB(mpichcxx, MPI_Test)
- AC_CHECK_HEADERS(mpi/mpi.h, [usempi="yes"],
- [
- AC_CHECK_HEADERS(mpi.h, [usempi="yes"],
- [
- AC_CHECK_HEADERS(mpich2/mpi.h, [usempi="yes"],
- [
- if test "x$usempi" = "xyes"; then
- AC_MSG_ERROR([header file mpi.h not found.]);
- usempi="no"
- fi;
- ])
- ])
- ])
+dnl AC_CHECK_HEADERS(mpi/mpi.h, [usempi="yes"],
+dnl [
+dnl AC_CHECK_HEADERS(mpi.h, [usempi="yes"],
+dnl [
+dnl AC_CHECK_HEADERS(mpich2/mpi.h, [usempi="yes"],
+dnl [
+dnl if test "x$usempi" = "xyes"; then
+dnl AC_MSG_ERROR([header file mpi.h not found.]);
+dnl usempi="no"
+dnl fi;
+dnl ])
+dnl ])
+dnl ])
+ CPPFLAGS="$CPPFLAGS -DGETFEM_HAVE_MPI_MPI_H=1 -I/usr/include/mpi"
if test "x$usempi" = "xyes"; then
- MPI_LIBS="-lmpich -lmpichcxx"
+ MPI_LIBS="-lmpi -lmpi++"
fi;
echo "Building with MPI (use --enable-mpi=no to disable it)"
fi;
@@ -725,11 +731,11 @@ if test "$MPI_CFLAGS" -o "$MPI_LIBS"; then
dnl AC_DEFINE_UNQUOTED([PARA_LEVEL], 2, [getfem parallelisation flag])
LIBS="$LIBS $MPI_LIBS -lmetis"
CXXFLAGS="$CXXFLAGS $MPI_CFLAGS -DGETFEM_PARA_LEVEL=2"
- AC_CHECK_LIB(metis, METIS_PartMeshNodal, [metis_ok="yes"], [metis_ok="no"])
- if test "x$metis_ok" = "xno"; then
- AC_MSG_ERROR([Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
- ----------> Please add the path to libmetis.a to the MPI_LIBS variable.])
- fi
+dnl AC_CHECK_LIB(metis, METIS_PartMeshNodal, [metis_ok="yes"], [metis_ok="no"])
+dnl if test "x$metis_ok" = "xno"; then
+dnl AC_MSG_ERROR([Parallel getfem requires the METIS ( http://www-users.cs.umn.edu/~karypis/metis/metis/ ) library
+dnl ----------> Please add the path to libmetis.a to the MPI_LIBS variable.])
+dnl fi
AC_SUBST(MPI_LIBS)
AC_SUBST(MPI_CFLAGS)
fi
@@ -1033,6 +1039,11 @@ then
fi
fi
+AC_ARG_WITH(scilab-toolbox-dir,
+ [AS_HELP_STRING([--with-scilab-toolbox-dir],[directory in which the scilab interface will be installed])],
+ SCILAB_TOOLBOX_DIR="$withval",SCILAB_TOOLBOX_DIR="$GFPREFIX/getfem_toolbox")
+AC_SUBST(SCILAB_TOOLBOX_DIR)
+
dnl -----------------------------------------------
@@ -1042,6 +1053,7 @@ dnl -----------------------------------------------
IM_METHODS=`$srcdir/bin/extract_doc $srcdir/interface/src cubature`
IM_METHODS_LOC=`$srcdir/bin/extract_doc $srcdir/interface/src cubature_loc`
AC_SUBST(IM_METHODS)
+AC_SUBST(IM_METHODS_LOC)
AC_CONFIG_FILES(\
@@ -1109,59 +1121,68 @@ fi;
dnl configuration sum-up
-echo ""
+echo
echo "------------------------------------------------------------------------------"
-echo "If you want to build the shared library of getfem++, use --enable-shared"
-echo "(by default, only the static one will be built)"
+echo
+echo "Libraries Used:"
+echo "---------------"
+echo
+
+
if test "x$useQDlib" = "xyes" ; then
- echo "Using the QD library:"
- echo " high precision (${QD_PREC}-double precision) polynomials and integration methods are enabled";
+ echo "- QD library found. High precision (${QD_PREC}-double precision) polynomials"
+ echo " and integration methods are enabled.";
+else
+ echo "- QD library not found (not recommended)."
fi;
if test "x$useQHULL" = "xyes"; then
- echo "Using the qhull library for delaunay triangulations."
+ echo "- Qhull found. Using the Qhull library for delaunay triangulations."
else
- echo "Not using the qhull library. Mesh generation will be disabled."
+ echo "- Qhull not found. Mesh generation will be disabled."
fi;
if test "x$usemuparser" = "xyes"; then
- echo "Using the muParser library for parsing mathematical expressions."
+ echo "- MuParser found. Used for parsing mathematical expressions."
else
- echo "Not using the muParser library. Parsing mathematical expressions will be disabled."
+ echo "- MuParser not found. Parsing mathematical expressions will be disabled."
fi;
if test "x$usemumps" = "xyes"; then
- echo "Using the MUMPS library. A direct solver for large sparse linear systems."
+ echo "- Mumps found. A direct solver for large sparse linear systems."
else
- echo "Not using the MUMPS library. A direct solver for large sparse linear systems."
+ echo "- Mumps not found. Not using the MUMPS library for large sparse linear systems."
fi;
-echo
+if test x"$acx_lapack_ok" = xyes; then
+ echo "- Lapack library found: $LAPACK_LIBS"
+else
+ echo "- Lapack library not found: generic (less effective) algorithms will be used"
+fi
+
if test "x$HAVE_VENDOR_BLAS" = "x0"; then
- echo "*** No usable blas library was found ***"
- echo "A generic BLAS implementation will be used, however you should "
- echo "consider installing a faster BLAS, such as ATLAS"
+ echo "- *** No usable blas library was found ***"
+ echo " A generic BLAS implementation will be used, however you should "
+ echo " consider installing a faster BLAS, such as ATLAS"
else
- echo "Link options for the BLAS library: $BLAS_LIBS"
+ echo "- BLAS library found. Link options: $BLAS_LIBS"
fi;
-echo "You can give the location of your prefered blas library with either"
-echo "the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
-echo 'for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo " You can give the location of your prefered blas library with either"
+echo " the --with-blas=<lib> option, or the BLAS_LIBS environment variable"
+echo ' for example: ./configure BLAS_LIBS="-L/usr/lib/sse2/atlas/ -lblas"'
+echo
echo
-if test x"$acx_lapack_ok" = xyes; then
- echo "Lapack library found : $LAPACK_LIBS"
-else
- echo "No lapack library found : generic (less effective) algorithms will be used"
-fi
-echo "---------------------------------------"
+echo "-----------------------------------------------------------------------"
echo "Ready to build getfem"
echo " building MATLAB interface: $usematlab"
echo " building PYTHON interface: $usepython (requires numpy and scipy)"
echo " building SCILAB interface: $usescilab"
-echo "---------------------------------------"
+echo " If you want to build the shared library of getfem++, use --enable-shared"
+echo " (by default, only the static one will be built)"
+echo "-----------------------------------------------------------------------"
case $host in
x86_64-*)
@@ -1175,3 +1196,5 @@ case $host in
fi
;;
esac
+
+echo $shared_mode
\ No newline at end of file
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
index 5d46e2f..157a682 100644
--- a/contrib/Makefile.in
+++ b/contrib/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -523,10 +526,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/aposteriori/Makefile.in b/contrib/aposteriori/Makefile.in
index 5f4e7f7..00cf09b 100644
--- a/contrib/aposteriori/Makefile.in
+++ b/contrib/aposteriori/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -107,6 +107,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -125,6 +126,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -141,6 +143,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -205,6 +208,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -240,7 +244,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -318,10 +321,10 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-aposteriori$(EXEEXT): $(aposteriori_OBJECTS) $(aposteriori_DEPENDENCIES)
+aposteriori$(EXEEXT): $(aposteriori_OBJECTS) $(aposteriori_DEPENDENCIES) $(EXTRA_aposteriori_DEPENDENCIES)
@rm -f aposteriori$(EXEEXT)
$(CXXLINK) $(aposteriori_OBJECTS) $(aposteriori_LDADD) $(LIBS)
-aposteriori_laplacian$(EXEEXT): $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_DEPENDENCIES)
+aposteriori_laplacian$(EXEEXT): $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_DEPENDENCIES) $(EXTRA_aposteriori_laplacian_DEPENDENCIES)
@rm -f aposteriori_laplacian$(EXEEXT)
$(CXXLINK) $(aposteriori_laplacian_OBJECTS) $(aposteriori_laplacian_LDADD) $(LIBS)
@@ -494,14 +497,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -551,10 +555,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/aposteriori/aposteriori.cc b/contrib/aposteriori/aposteriori.cc
index de5ad11..9a37c88 100644
--- a/contrib/aposteriori/aposteriori.cc
+++ b/contrib/aposteriori/aposteriori.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Vanessa Lleras, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Vanessa Lleras, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
#include "getfem/getfem_error_estimate.h"
#include "getfem/getfem_interpolated_fem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/aposteriori/aposteriori.pl b/contrib/aposteriori/aposteriori.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/aposteriori/aposteriori.pl
+++ b/contrib/aposteriori/aposteriori.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/aposteriori/aposteriori_laplacian.cc b/contrib/aposteriori/aposteriori_laplacian.cc
index 9af1d1f..e67eb7d 100644
--- a/contrib/aposteriori/aposteriori_laplacian.cc
+++ b/contrib/aposteriori/aposteriori_laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Vanessa Lleras, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Vanessa Lleras, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
#include "getfem/getfem_error_estimate.h"
#include "getfem/getfem_interpolated_fem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/aposteriori/aposteriori_laplacian.pl b/contrib/aposteriori/aposteriori_laplacian.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/aposteriori/aposteriori_laplacian.pl
+++ b/contrib/aposteriori/aposteriori_laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/bimat_contact_crack_test/Makefile.in b/contrib/bimat_contact_crack_test/Makefile.in
index 78cbddc..5d08902 100644
--- a/contrib/bimat_contact_crack_test/Makefile.in
+++ b/contrib/bimat_contact_crack_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -310,7 +313,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES)
+bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) $(EXTRA_bimaterial_crack_test_DEPENDENCIES)
@rm -f bimaterial_crack_test$(EXEEXT)
$(CXXLINK) $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_LDADD) $(LIBS)
@@ -482,14 +485,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -539,10 +543,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc b/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
index 3a34c88..2b2af46 100644
--- a/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
+++ b/contrib/bimat_contact_crack_test/bimaterial_crack_test.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -43,6 +43,9 @@
#include "getfem/getfem_interpolated_fem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl b/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
+++ b/contrib/bimat_contact_crack_test/bimaterial_crack_test.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/Makefile.in b/contrib/bimaterial_crack_test/Makefile.in
index 6dcf223..0aaa37d 100644
--- a/contrib/bimaterial_crack_test/Makefile.in
+++ b/contrib/bimaterial_crack_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -115,6 +115,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -133,6 +134,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -149,6 +151,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -213,6 +216,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -248,7 +252,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -326,10 +329,10 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES)
+bimaterial_crack_test$(EXEEXT): $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_DEPENDENCIES) $(EXTRA_bimaterial_crack_test_DEPENDENCIES)
@rm -f bimaterial_crack_test$(EXEEXT)
$(CXXLINK) $(bimaterial_crack_test_OBJECTS) $(bimaterial_crack_test_LDADD) $(LIBS)
-crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES)
+crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) $(EXTRA_crack_DEPENDENCIES)
@rm -f crack$(EXEEXT)
$(CXXLINK) $(crack_OBJECTS) $(crack_LDADD) $(LIBS)
@@ -503,14 +506,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -560,10 +564,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/bimaterial_crack_test/bimaterial_crack_test.cc b/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
index e784eba..d08699b 100644
--- a/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
+++ b/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
#include <sstream>
#include "getfem/getfem_interpolated_fem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/bimaterial_crack_test/bimaterial_crack_test.pl b/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
+++ b/contrib/bimaterial_crack_test/bimaterial_crack_test.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/crack.cc b/contrib/bimaterial_crack_test/crack.cc
index 3dd31c8..ffbf446 100644
--- a/contrib/bimaterial_crack_test/crack.cc
+++ b/contrib/bimaterial_crack_test/crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -42,6 +42,9 @@
#include "crack_exact_solution.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* definition of some matrix/vector types. These ones are built
* using the predefined types in Gmm++
*/
diff --git a/contrib/bimaterial_crack_test/crack.pl b/contrib/bimaterial_crack_test/crack.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/bimaterial_crack_test/crack.pl
+++ b/contrib/bimaterial_crack_test/crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/bimaterial_crack_test/crack_exact_solution.cc b/contrib/bimaterial_crack_test/crack_exact_solution.cc
index 7c14225..fc99d89 100644
--- a/contrib/bimaterial_crack_test/crack_exact_solution.cc
+++ b/contrib/bimaterial_crack_test/crack_exact_solution.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_exact_solution.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* returns sin(theta/2) where theta is the angle
of 0-(x,y) with the axis Ox */
static scalar_type sint2(scalar_type x, scalar_type y) {
diff --git a/contrib/bimaterial_crack_test/crack_exact_solution.h b/contrib/bimaterial_crack_test/crack_exact_solution.h
index 9c08bd2..819bbc3 100644
--- a/contrib/bimaterial_crack_test/crack_exact_solution.h
+++ b/contrib/bimaterial_crack_test/crack_exact_solution.h
@@ -1,35 +1,39 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#include "getfem/getfem_mesh_fem_global_function.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/contact_grd_trans/Makefile.am b/contrib/contact_grd_trans/Makefile.am
index da7be03..7a6ba1f 100644
--- a/contrib/contact_grd_trans/Makefile.am
+++ b/contrib/contact_grd_trans/Makefile.am
@@ -1,11 +1,12 @@
# SUBDIRS =
-check_PROGRAMS = contact contact_continuation
+check_PROGRAMS = contact contact_continuation_load contact_continuation_time
CLEANFILES =
contact_SOURCES = contact.cc
-contact_continuation_SOURCES = contact_continuation.cc my_getfem_Coulomb_friction.h
+contact_continuation_load_SOURCES = contact_continuation_load.cc
+contact_continuation_time_SOURCES = contact_continuation_time.cc
SUPLDFLAGS = @SUPLDFLAGS@
INCLUDES = -I$(top_srcdir)/src -I../../src
LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
@@ -14,7 +15,8 @@ TESTS = $(top_srcdir)/contrib/contact_grd_trans/contact.pl
EXTRA_DIST = \
contact.pl \
contact.param
- contact_continuation.param
+ contact_continuation_load.param
+ contact_continuation_time.param
diff --git a/contrib/contact_grd_trans/Makefile.in b/contrib/contact_grd_trans/Makefile.in
index 664f19d..e8cc864 100644
--- a/contrib/contact_grd_trans/Makefile.in
+++ b/contrib/contact_grd_trans/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -35,7 +35,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-check_PROGRAMS = contact$(EXEEXT) contact_continuation$(EXEEXT)
+check_PROGRAMS = contact$(EXEEXT) contact_continuation_load$(EXEEXT) \
+ contact_continuation_time$(EXEEXT)
subdir = contrib/contact_grd_trans
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -57,10 +58,19 @@ contact_OBJECTS = $(am_contact_OBJECTS)
contact_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
contact_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1)
-am_contact_continuation_OBJECTS = contact_continuation.$(OBJEXT)
-contact_continuation_OBJECTS = $(am_contact_continuation_OBJECTS)
-contact_continuation_LDADD = $(LDADD)
-contact_continuation_DEPENDENCIES = ../../src/libgetfem.la \
+am_contact_continuation_load_OBJECTS = \
+ contact_continuation_load.$(OBJEXT)
+contact_continuation_load_OBJECTS = \
+ $(am_contact_continuation_load_OBJECTS)
+contact_continuation_load_LDADD = $(LDADD)
+contact_continuation_load_DEPENDENCIES = ../../src/libgetfem.la \
+ $(am__DEPENDENCIES_1)
+am_contact_continuation_time_OBJECTS = \
+ contact_continuation_time.$(OBJEXT)
+contact_continuation_time_OBJECTS = \
+ $(am_contact_continuation_time_OBJECTS)
+contact_continuation_time_LDADD = $(LDADD)
+contact_continuation_time_DEPENDENCIES = ../../src/libgetfem.la \
$(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -75,17 +85,10 @@ CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
-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 = $(contact_SOURCES) $(contact_continuation_SOURCES)
-DIST_SOURCES = $(contact_SOURCES) $(contact_continuation_SOURCES)
+SOURCES = $(contact_SOURCES) $(contact_continuation_load_SOURCES) \
+ $(contact_continuation_time_SOURCES)
+DIST_SOURCES = $(contact_SOURCES) $(contact_continuation_load_SOURCES) \
+ $(contact_continuation_time_SOURCES)
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
@@ -115,6 +118,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -133,6 +137,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -149,6 +154,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -213,6 +219,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -248,7 +255,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -270,7 +276,8 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
CLEANFILES =
contact_SOURCES = contact.cc
-contact_continuation_SOURCES = contact_continuation.cc my_getfem_Coulomb_friction.h
+contact_continuation_load_SOURCES = contact_continuation_load.cc
+contact_continuation_time_SOURCES = contact_continuation_time.cc
INCLUDES = -I$(top_srcdir)/src -I../../src
LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/contact_grd_trans/contact.pl
@@ -322,12 +329,15 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-contact$(EXEEXT): $(contact_OBJECTS) $(contact_DEPENDENCIES)
+contact$(EXEEXT): $(contact_OBJECTS) $(contact_DEPENDENCIES) $(EXTRA_contact_DEPENDENCIES)
@rm -f contact$(EXEEXT)
$(CXXLINK) $(contact_OBJECTS) $(contact_LDADD) $(LIBS)
-contact_continuation$(EXEEXT): $(contact_continuation_OBJECTS) $(contact_continuation_DEPENDENCIES)
- @rm -f contact_continuation$(EXEEXT)
- $(CXXLINK) $(contact_continuation_OBJECTS) $(contact_continuation_LDADD) $(LIBS)
+contact_continuation_load$(EXEEXT): $(contact_continuation_load_OBJECTS) $(contact_continuation_load_DEPENDENCIES) $(EXTRA_contact_continuation_load_DEPENDENCIES)
+ @rm -f contact_continuation_load$(EXEEXT)
+ $(CXXLINK) $(contact_continuation_load_OBJECTS) $(contact_continuation_load_LDADD) $(LIBS)
+contact_continuation_time$(EXEEXT): $(contact_continuation_time_OBJECTS) $(contact_continuation_time_DEPENDENCIES) $(EXTRA_contact_continuation_time_DEPENDENCIES)
+ @rm -f contact_continuation_time$(EXEEXT)
+ $(CXXLINK) $(contact_continuation_time_OBJECTS) $(contact_continuation_time_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -336,7 +346,8 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation_load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/contact_continuation_time.Po at am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -498,14 +509,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -555,10 +567,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
@@ -658,7 +675,8 @@ uninstall-am:
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
- contact_continuation.param
+ contact_continuation_load.param
+ contact_continuation_time.param
# 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.
diff --git a/contrib/contact_grd_trans/contact.cc b/contrib/contact_grd_trans/contact.cc
index b0947e9..96e0655 100644
--- a/contrib/contact_grd_trans/contact.cc
+++ b/contrib/contact_grd_trans/contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file nonlinear_elastostatic.cc
@@ -39,6 +39,9 @@
#include "gmm/gmm.h"
#include "getfem/getfem_import.h" //ajout des fonctionnalités d'importation de maillage (pfe)
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -459,7 +462,7 @@ bool elastostatic_problem::solve(plain_vector &U) {
/* let the default non-linear solve (Newton) do its job */
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::standard_solve(MS, final_model, iter,
getfem::default_linear_solver(final_model), ls);
diff --git a/contrib/contact_grd_trans/contact.param b/contrib/contact_grd_trans/contact.param
index 9e6a1de..9e55329 100644
--- a/contrib/contact_grd_trans/contact.param
+++ b/contrib/contact_grd_trans/contact.param
@@ -12,12 +12,15 @@ P2 = 200E6; % Second elastic coefficient.
P3 = 200E6; % Third elastic coefficient.
MU = 5;
LAMBDA = 11500; % Lamé coefficient.
+RHO = 100;
-LAW = 2; % 0 : SaintVenant-Kirchhoff
+LAW = 3; % 0 : SaintVenant-Kirchhoff
% 1 : SaintVenant-Kirchhoff+incompressibility
% 2 : Ciarlet-Geymonat
% 3 : Mooney-Rivlin (+incompressibility)
+DYNAMIC = 1;
+
FORCEX = 0 % Amplitude of the external force
FORCEY = 0;
FORCEZ = -0.00;
diff --git a/contrib/contact_grd_trans/contact.pl b/contrib/contact_grd_trans/contact.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/contact_grd_trans/contact.pl
+++ b/contrib/contact_grd_trans/contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/contact_grd_trans/contact_continuation.cc b/contrib/contact_grd_trans/contact_continuation.cc
deleted file mode 100644
index 731c652..0000000
--- a/contrib/contact_grd_trans/contact_continuation.cc
+++ /dev/null
@@ -1,1193 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-
-/**
- @file nonlinear_elastostatic.cc
- @brief Nonlinear Elastostatic problem (large strain).
-
- A rubber bar is submitted to a large torsion.
-
- This program is used to check that getfem++ is working. This is also
- a good example of use of Getfem++.
-*/
-
-#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
-#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
-#include "getfem/getfem_regular_meshes.h"
-#include "getfem/getfem_model_solvers.h"
-#include "getfem/getfem_nonlinear_elasticity.h"
-#include "my_getfem_Coulomb_friction.h"
-#include "getfem/getfem_superlu.h"
-#include "gmm/gmm.h"
-
-/* some Getfem++ types that we will be using */
-using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
-using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
-using bgeot::base_vector;
-using bgeot::scalar_type; /* = double */
-using bgeot::size_type; /* = unsigned long */
-using bgeot::base_matrix; /* small dense matrix. */
-
-/* definition of some matrix/vector types. These ones are built
- * using the predefined types in Gmm++
- */
-typedef getfem::modeling_standard_sparse_vector sparse_vector;
-typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
-typedef getfem::modeling_standard_plain_vector plain_vector;
-
-template<typename MAT> void smallest_eigenvalue(const MAT &M);
-
-template<class VEC, class VECT, class MAT>
-void compute_tangent(const VEC &T, const MAT &A, VECT &V, int noisy);
-
-template<class VEC, class VECT, class MAT>
-int compute_Newton_iteration(const VEC &T, const MAT &A, VECT &V, VECT &X, const VEC &P,
- scalar_type tolerance, scalar_type residual, int noisy);
-
-/*
- structure for the elastostatic problem
-*/
-struct elastostatic_problem {
-
- enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
- getfem::mesh mesh; /* the mesh */
- getfem::mesh_im mim; /* the integration methods */
- getfem::mesh_fem mf_u; /* main mesh_fem, for the elastostatic solution */
- getfem::mesh_fem mf_p; /* mesh_fem for the pressure. */
- getfem::mesh_fem mf_rhs; /* mesh_fem for the right hand side (f(x),..) */
- getfem::mesh_fem mf_coef; /* mesh_fem used to represent pde coefficients */
- getfem::mesh_fem mf_vm; /* mesh_fem used for the VonMises stress */
- scalar_type p1, p2, p3; /* elastic coefficients. */
- scalar_type LX, LY, LZ; /* system dimensions */
- // scalar_type lambda, mu; /* Lamé coefficients. */
- scalar_type residual; /* max residual for the iterative solvers */
- std::string datafilename;
- bgeot::md_param PARAM;
-
-
- template<class VEC, class STDVEC, class ALLOCVEC, class MAT>
- int compute_test_functions(const VEC &UN, const VEC &UT, const VEC &UT0, const VEC &LN,
- const VEC <, MAT &TST, const MAT &TST0,
- const STDVEC &contact_nodes, const ALLOCVEC &gap,
- scalar_type deltat, scalar_type friction_coef);
- bool solve(plain_vector &U);
- void init(void);
- elastostatic_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
-};
-
-
-/* Read parameters from the .param file, build the mesh, set finite element
- and integration methods and selects the boundaries.
-
- (this is boilerplate code, not very interesting)
- */
-void elastostatic_problem::init(void) {
- std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
- std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
- std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
- std::string INTEGRATION = PARAM.string_value("INTEGRATION",
- "Name of integration method");
- cout << "MESH_TYPE=" << MESH_TYPE << "\n";
- cout << "FEM_TYPE=" << FEM_TYPE << "\n";
- cout << "INTEGRATION=" << INTEGRATION << "\n";
-
- /* First step : build the mesh */
- int refine = PARAM.int_value("REFINE");
- int nb_refine = PARAM.int_value("NBREFINE");
- bgeot::pgeometric_trans pgt =
- bgeot::geometric_trans_descriptor(MESH_TYPE);
- size_type N = pgt->dim();
- std::vector<size_type> nsubdiv(N);
- std::fill(nsubdiv.begin(),nsubdiv.end(),
- PARAM.int_value("NX", "Number of space steps "));
- nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
- if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
- getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
- PARAM.int_value("MESH_NOISED") != 0);
-
- LX = PARAM.real_value("LX", "Length along X axis");
- LY = PARAM.real_value("LY", "Length along Y axis");
- LZ = PARAM.real_value("LZ", "Length along Z axis");
- // mu = PARAM.real_value("MU", "Lamé coefficient mu");
- // lambda = PARAM.real_value("LAMBDA", "Lamé coefficient lambda");
- bgeot::base_matrix M(N,N);
- for (size_type i=0; i < N; ++i) {
- static const char *t[] = {"LX","LY","LZ"};
- M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
- }
- if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
-
- /* scale the unit mesh to [LX,LY,..] and incline it */
- mesh.transformation(M);
-
- if (refine > 0) { /* manual refinement */
- scalar_type layerx, layerz;
- dal::bit_vector cvref;
- layerx = 0.201; layerz = 1.5 * layerx;
- for (int i=0; i < nb_refine; ++i) {
- cvref.clear();
- for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
- if ((mesh.points_of_convex(j)[0][0] > LX*(1-layerx))
- && (mesh.points_of_convex(j)[1][0] > LX*(1-layerx))
- && (mesh.points_of_convex(j)[2][0] > LX*(1-layerx))
- && (mesh.points_of_convex(j)[0][N-1] < LZ*layerz)
- && (mesh.points_of_convex(j)[1][N-1] < LZ*layerz)
- && (mesh.points_of_convex(j)[2][N-1] < LZ*layerz))
- cvref.add(j);
- }
- mesh.Bank_refine(cvref);
- layerx = 0.5 * layerx;
- if (i < 9) layerz = 0.5 * layerz;
- }
- }
-
- datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
- residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
-
- p1 = PARAM.real_value("P1", "First Elastic coefficient");
- p2 = PARAM.real_value("P2", "Second Elastic coefficient");
- p3 = PARAM.real_value("P3", "Third Elastic coefficient");
-
- mf_u.set_qdim(bgeot::dim_type(N));
-
- /* set the finite element on the mf_u */
- getfem::pfem pf_u =
- getfem::fem_descriptor(FEM_TYPE);
- getfem::pintegration_method ppi =
- getfem::int_method_descriptor(INTEGRATION);
-
- mim.set_integration_method(ppi);
- mf_u.set_finite_element(pf_u);
-
- mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
-
- /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
- not used in the .param file */
- std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
- if (data_fem_name.size() == 0) {
- GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
- ". In that case you need to set "
- << "DATA_FEM_TYPE in the .param file");
- mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
- } else {
- mf_rhs.set_finite_element(mesh.convex_index(),
- getfem::fem_descriptor(data_fem_name));
- }
-
- /* set the finite element on mf_coef. Here we use a very simple element
- * since the only function that need to be interpolated on the mesh_fem
- * is f(x)=1 ... */
- mf_coef.set_finite_element(mesh.convex_index(),
- getfem::classical_fem(pgt,0));
-
- mf_vm.set_classical_discontinuous_finite_element(1);
-
- /* set boundary conditions
- * (Dirichlet on the upper face, contact on the bottom face) */
- cout << "Selecting Dirichlet and contact boundaries\n";
- getfem::mesh_region border_faces;
- getfem::outer_faces_of_mesh(mesh, border_faces);
- for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
- assert(it.is_face());
- base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
- un /= gmm::vect_norm2(un);
- if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) {
- mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
- } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
- mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
- } else if (mesh.points_of_convex(it.cv())[0][N-1] < LZ*0.3) {
- mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
- }
- }
-}
-
-/**************************************************************************/
-/* Model. */
-/**************************************************************************/
-
-template<typename MAT>
-void smallest_eigenvalue(const MAT &M) {
-
- size_type N = gmm::mat_nrows(M);
- plain_vector V(N), U(N), W(N);
- plain_vector V2(N), U2(N);
- gmm::fill_random(V);
- gmm::fill_random(V2);
- scalar_type lambda = 0., lambda2 = 0.;
- gmm::SuperLU_factor<scalar_type> SLU;
- SLU.build_with(M);
-
- for(size_type i = 0; i < 100; ++i) {
- gmm::scale(V, 1./gmm::vect_norm2(V));
- gmm::scale(V2, 1./gmm::vect_norm2(V2));
- SLU.solve(U, V);
- gmm::mult(M, V2, U2);
-
- lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
- lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
-
- gmm::add(V, gmm::scaled(U, -1./lambda), W);
- if (0) // (i > 90)
- cout << "iteration " << i << " norm(W) = " << gmm::vect_norm2(W)
- << " lambda = " << lambda
- << " lambda2 = " << lambda2 << endl;
- if (gmm::vect_norm2(W) < 1E-2) break;
-
- gmm::copy(U, V);
- gmm::copy(U2, V2);
- }
-
- // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
- // cout << "Largest eigenvalue : " << lambda2 << endl;
- cout << "Condition number: " << lambda2 * lambda << endl;
-
-}
-
-
-/* computes initial tangent for the Moore-Penrose method */
-template<class VEC, class VECT, class MAT>
-void compute_tangent(const VEC &T, const MAT &A, VECT &V, int noisy) {
-
- bool singular_tangent_matrix = false;
- size_type N = gmm::mat_nrows(A);
- double rcond;
- scalar_type sp;
- plain_vector Y(N);
-
- try { /* whether A is singular */
- if (noisy > 1) cout << "starting computing tangent" << endl;
-
- gmm::SuperLU_solve(A, Y, T, rcond);;
- sp = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y);
-
- V[0] = 1.0 / (V[0] - sp);
- gmm::copy(gmm::scaled(Y, -1.0*V[0]),
- gmm::sub_vector(V, gmm::sub_interval(1, N)));
- }
- catch (...) {
- singular_tangent_matrix = true;
- cout << "Tangent matrix is close to be singular!" << endl;
- }
-
- if (singular_tangent_matrix) {
- plain_vector R(1+N);
- sparse_matrix B(1+N, 1+N);
-
- gmm::copy(gmm::col_vector(T),
- gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(0, 1)));
- gmm::copy(A, gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(1, N)));
- gmm::copy(gmm::row_vector(V),
- gmm::sub_matrix(B, gmm::sub_interval(N, 1), gmm::sub_interval(0, 1+N)));
-
- gmm::clear(R);
- R[N] = 1.0;
-
- gmm::SuperLU_solve(B, V, R, rcond);
- }
-
- gmm::scale(V, 1.0/gmm::vect_norm2(V));
-
- if (noisy > 1) cout << "tangent computed" << endl;
-
-} // compute_tangent
-
-
-/* Newton iteration for the Moore-Penrose method */
-template<class VEC, class VECT, class MAT>
-int compute_Newton_iteration(const VEC &T, const MAT &A, VECT &V, VECT &X, const VEC &P,
- scalar_type tolerance, scalar_type residual, int noisy) {
-
- bool singular_tangent_matrix = false;
- int convergence = 1;
- size_type N = gmm::mat_nrows(A);
- scalar_type sp1, sp2, normdX, normP;
- plain_vector Y1(N), Y2(N);
- plain_vector dX(1+N);
-
- try { /* whether A is singular */
- if (noisy > 1) {
- cout << "starting linear solvers" << endl;
- smallest_eigenvalue(A);
- }
-
- gmm::SuperLU_factor<scalar_type> SLU;
- SLU.build_with(A);
- SLU.solve(Y1, T);
- SLU.solve(Y2, P);
-
- sp1 = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y1);
- sp2 = gmm::vect_sp(gmm::sub_vector(V, gmm::sub_interval(1,N)), Y2);
-
- dX[0] = sp2 / (sp1 - V[0]);
- gmm::add(gmm::scaled(Y1, -1.0*dX[0]), Y2);
- gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(1, N)));
-
- V[0] = 1.0 / (V[0] - sp1);
- gmm::copy(gmm::scaled(Y1, -1.0*V[0]),
- gmm::sub_vector(V, gmm::sub_interval(1, N)) );
- }
- catch (...) {
- singular_tangent_matrix = true;
- cout << "Tangent matrix is close to be singular!" << endl;
- }
-
-
- try {
- if (singular_tangent_matrix) {
- plain_vector Q(1+N), R(1+N);
- sparse_matrix B(1+N, 1+N);
-
- gmm::copy(gmm::col_vector(T),
- gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(0, 1)));
- gmm::copy(A, gmm::sub_matrix(B, gmm::sub_interval(0, N), gmm::sub_interval(1, N)));
- gmm::copy(gmm::row_vector(V),
- gmm::sub_matrix(B, gmm::sub_interval(N, 1), gmm::sub_interval(0, 1+N)));
-
- gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
- Q[N] = 0.0;
-
- gmm::clear(R);
- R[N] = 1.0;
-
- gmm::SuperLU_factor<scalar_type> SLU;
- SLU.build_with(B);
- SLU.solve(dX, Q);
- SLU.solve(V, R);
- }
-
- gmm::add(gmm::scaled(dX, -1.0), X);
- gmm::scale(V, 1.0/gmm::vect_norm2(V));
-
- if (noisy > 1) cout << "linear solver done" << endl;
-
- normdX = gmm::vect_norm2(dX);
- normP = gmm::vect_norm2(P);
- if (noisy) cout << "difference " << normdX << " residual " << normP << endl;
-
- if ((normdX < tolerance) && (normP < residual)) convergence = 2;
- else if (normP > 1E10) convergence = 0;
- }
- catch (...) {
- convergence = 0;
- cout << "SuperLU failed!" << endl;
- }
-
- return convergence;
-
-} // compute_Newton_iteration
-
-
-template<class VEC, class STDVEC, class ALLOCVEC, class MAT>
-int elastostatic_problem::compute_test_functions
-(const VEC &UN, const VEC &UT, const VEC &UT0, const VEC &LN, const VEC <,
- MAT &TST, const MAT &TST0, const STDVEC &contact_nodes, const ALLOCVEC &gap,
- scalar_type deltat, scalar_type friction_coef) {
-
- scalar_type r = PARAM.real_value("R", "Augmentation parameter");
- scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
- scalar_type beta = PARAM.real_value("BETA_T", "Augmentation parameter");
- scalar_type classboundary = PARAM.real_value
- ("CLASSBOUNDARY", "parameter for classification of the boundary");
- int noisy = PARAM.int_value("NOISY");
- size_type nbchange = 0, nblimit = 0;
-// size_type N = mesh.dim();
-
- for (size_type i = 0; i < LN.size(); ++i) {
-// if (LN[i] > -1E-12)
-// cout << "node " << i << " : " << contact_nodes[i] << " no contact ";
-// else {
-// scalar_type lt =
-// gmm::vect_norm2(gmm::sub_vector(LT, gmm::sub_interval(i*(N-1), N-1)));
-// if (lt < - friction_coef * LN[i] - 1E-12)
-// cout << "node " << i << " : " << contact_nodes[i] << " sticking ";
-// else
-// cout << "node " << i << " : " << contact_nodes[i] << " sliding ";
-// }
-
- TST(i,0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
- if (deltat >= 0) {
- TST(i,1) = -friction_coef * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
- TST(i,2) = friction_coef * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
- } else {
- TST(i,1) = -friction_coef * LN[i] + LT[i] + r * beta * (UT[i] - UT0[i]);
- TST(i,2) = friction_coef * LN[i] + LT[i] + r * beta * (UT[i] - UT0[i]);
- }
-
- if (noisy > 1) {
- cout << "node " << i << " : " << contact_nodes[i] << " ";
- cout << ((LN[i] - r * alpha * (UN[i] - gap[i])) <= 0)
- << (-friction_coef * LN[i] + LT[i] - r * (UT[i] - UT0[i]) / deltat >= 0)
- << (friction_coef * LN[i] + LT[i] - r * (UT[i] - UT0[i]) / deltat <= 0) << " ";
- for (size_type j = 0; j < 3; ++j){
- if (((TST0(i,j) < 0 && TST(i,j) > classboundary)
- || (TST0(i,j) > 0 && TST(i,j) < -classboundary))
- && (j == 0 || (j != 0 && TST(i,0) <= classboundary))) {
- cout << " change of the sign: " << TST0(i,j) << " -> ";
- ++nbchange;
- }
- else if (((TST(i,j) >= -classboundary && TST(i,j) <= classboundary)
- || (TST(i,j) >= -classboundary && TST(i,j) <= classboundary))
- && (j == 0 || (j != 0 && TST(i,0) <= classboundary))) {
- cout << " close to a limit: ";
- ++nblimit;
- }
- cout << TST(i,j) << " ";
- }
- cout << endl;
-
- if (noisy > 2)
- cout << LN[i] << " " << r * alpha * (UN[i] - gap[i]) << " "
- << -friction_coef * LN[i] + LT[i] << " "
- << friction_coef * LN[i] + LT[i] << " " << r * beta * (UT[i]-UT0[i]) << endl;
- }
- }
-
- if (noisy > 1) {
- cout << "Number of changes of characters = " << nbchange << endl;
- cout << "Number of test functions on a limit = " << nblimit << endl;
- }
-
- return nbchange + nblimit;
-}
-
-
-bool elastostatic_problem::solve(plain_vector &U) {
-
- size_type nb_dof_rhs = mf_rhs.nb_dof();
- size_type N = mesh.dim();
- size_type law_num = PARAM.int_value("LAW");
- // Linearized elasticity brick.
- base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
-
- /* choose the material law */
- getfem::abstract_hyperelastic_law *pl = 0;
- switch (law_num) {
- case 0:
- case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
- case 2: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
- case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
- case 4 : case 5 : break;
- default: GMM_ASSERT1(false, "no such law");
- }
-
- getfem::mdbrick_abstract<> *pELAS = 0;
- getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
- getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
-
- if (law_num < 4) {
- p.resize(pl->nb_params());
- pELAS = pELAS_nonlin
- = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
- } else {
- pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
- (mim, mf_u, law_num == 5 ? 0.0 : p[0], p[1]);
- }
-
- getfem::mdbrick_abstract<> *pINCOMP = pELAS;
- switch (law_num) {
- case 1:
- case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
- break;
- case 5: {
- getfem::mdbrick_linear_incomp<> *pb =
- new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
- pINCOMP = pb;
- pb->penalization_coeff().set(1.0/p[0]);
- }
- }
-
- int nb_step = int(PARAM.int_value("NBSTEP"));
- scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
-
- // contact condition for Lagrange elements
- dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
- sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
- sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
- std::vector<base_node> contact_nodes;
- plain_vector gap(cn.card()/N);
- size_type jj = 0;
- for (dal::bv_visitor i(cn); !i.finished(); ++i)
- if (i % N == 0) {
- BN(jj, i+N-1) = -1.;
- gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
- contact_nodes.push_back(mf_u.point_of_basic_dof(i));
- for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
- ++jj;
- }
-
- // creating force density vectors
- int nbc = int(jj);
- sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
- plain_vector LN1(nbc), LT1(nbc*(N-1));
- {
- sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
- getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
- std::vector<size_type> indN, indT;
- for (dal::bv_visitor i(cn); !i.finished(); ++i)
- if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
- gmm::sub_index SUBI(indN);
- gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
- gmm::sub_index SUBJ(indT);
- gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);
- }
-
-
-
- scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF",
- "Friction cefficient");
- scalar_type r = PARAM.real_value("R", "Augmentation parameter");
- scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
- gmm::dense_matrix<size_type> CH(nbc+1, 4);
- CH(0,0) = size_type(-1);
-
-
- getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
- friction_coef, BT);
- FRICTION.set_r(r);
- FRICTION.set_alpha(alpha);
- // if (deltat < 0) FRICTION.set_beta(-1.0);
- FRICTION.set_beta(1./deltat);
- FRICTION.set_CH(CH);
-
- // Defining the volumic source term.
- base_vector f(N);
- f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
- f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
- if (N>2)
- f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
- plain_vector F(nb_dof_rhs * N);
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
- }
-
- getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
-
- // Dirichlet condition
- plain_vector F2(nb_dof_rhs * N);
- getfem::mdbrick_Dirichlet<> final_model(VOL_F, DIRICHLET_BOUNDARY_NUM);
- final_model.rhs().set(mf_rhs, F2);
- final_model.set_constraints_type(getfem::constraints_type
- (PARAM.int_value("DIRICHLET_VERSION")));
-
- // Generic solver.
- getfem::standard_model_state MS(final_model);
- size_type maxit = PARAM.int_value("MAXITER");
- int noisy = PARAM.int_value("NOISY");
- gmm::iteration iter;
-
- size_type continuation = PARAM.int_value("CONTINUATION", "Continuation method");
- int step_init = PARAM.int_value("STEP_INIT");
-
- scalar_type dz = PARAM.real_value("DIRICHLET_Z",
- "Prescribed displacement in z");
- scalar_type dyv = PARAM.real_value("DIRICHLET_Y_SPEED",
- "Prescribed velocity in y");
-
-
- bool converged = true;
- char strstep[100];
- size_type stot = gmm::mat_ncols(MS.tangent_matrix());
- scalar_type t = 0, deltat0 = deltat;
- plain_vector UN(gmm::mat_nrows(BN)), UT(gmm::mat_nrows(BT)), UT0(gmm::mat_nrows(BT));
- plain_vector U0 = U, U00 = U0;
- plain_vector X0(1+stot);
- bgeot::base_matrix TST0(nbc,3), TST(nbc,3);
-
- if (step_init > 0) { // load initial values
- sprintf(strstep, "step%d", step_init);
- gmm::vecload(datafilename + strstep + ".U",U0);
- gmm::vecload(datafilename + strstep + ".X",X0);
- t = X0[0];
- gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
- Harwell_Boeing_load(datafilename + strstep + ".TST", TST0);
- }
-
- for (int step = step_init; step < nb_step; ++step) { /* Newton */
-
- if ((step > 2) && (continuation > 0)) break; /* proceed to continuations */
-
- cout << "beginning of step " << step+1
- << ", number of variables : " << final_model.nb_dof() << endl;
-
- t += (step < 2) ? 0.0 : deltat;
- if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = (step < 2) ? dz*(step+1)/2.0 : dz;
- F2[i*N+N-2] = t*dyv;
- }
- final_model.rhs().set(F2);
-
- FRICTION.set_WT(gmm::scaled(U0, -1.0));
-
-
- iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
- cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
-
-
-
- /* let the default non-linear solve (Newton) do its job */
- gmm::default_newton_line_search ls;
- getfem::standard_solve(MS, final_model, iter,
- getfem::default_linear_solver(final_model), ls);
-
-
-
- if (law_num < 4) {
- pl->reset_unvalid_flag();
- final_model.compute_residual(MS);
- if (pl->get_unvalid_flag())
- GMM_WARNING1("The solution is not completely valid, the determinant "
- "of the transformation is negative on "
- << pl->get_unvalid_flag() << " gauss points");
- }
-
- if (law_num < 4)
- gmm::copy(pELAS_nonlin->get_solution(MS), U);
- else
- gmm::copy(pELAS_lin->get_solution(MS), U);
-
- gmm::copy(FRICTION.get_LN(MS), LN1);
- gmm::copy(FRICTION.get_LT(MS), LT1);
-
- gmm::mult(BN, U, UN);
- gmm::mult(BT, U, UT);
- gmm::mult(BT, U0, UT0);
-
- compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0, contact_nodes,
- gap, deltat, friction_coef);
-
-
- converged = iter.converged();
- if (!converged) break;
-
- gmm::copy(U0, U00);
- gmm::copy(U, U0);
- gmm::copy(TST, TST0);
- X0[0] = t;
- gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(1, stot)));
-
- char s[100]; sprintf(s, "step%d", step+1);
- gmm::vecsave(datafilename + s + ".U",U);
-
- plain_vector VM(mf_vm.nb_dof());
- if (law_num < 4)
- pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- else
- pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- gmm::vecsave(datafilename + s + ".VM", VM);
-
- gmm::vecsave(datafilename + s + ".X", X0);
- Harwell_Boeing_save(datafilename + s + ".TST", TST);
-
- cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
-
- } // Newton
-
-
- if (continuation > 0){
- GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0,
- "Continuations only implemented for Dirichlet "
- "condition with multipliers");
-
- size_type maxcorrit = PARAM.int_value("MAXCORRITER");
- size_type ind = final_model.first_ind(), sc = gmm::vect_size(final_model.get_CRHS());
- plain_vector T(stot);
-
- /* load initial values if necessary and compute derivative with respect to time */
- if (step_init < 3) step_init = 3;
- else {
- sprintf(strstep, "step%d", step_init-1);
- plain_vector X00(1+stot);
- gmm::vecload(datafilename + strstep + ".X",X00);
- deltat0 = X0[0] - X00[0];
- // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
- FRICTION.set_beta(1./deltat0);
- gmm::vecload(datafilename + strstep + ".U",U00);
- FRICTION.set_WT(gmm::scaled(U00, -1.0));
-
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = dz;
- F2[i*N+N-2] = t*dyv;
- }
- final_model.rhs().set(F2);
-
- final_model.compute_tangent_matrix(MS);
- }
-
- gmm::copy(final_model.get_CRHS(),
- gmm::sub_vector(T, gmm::sub_interval(ind, sc)));
- for (size_type i = 0; i < sc/N; ++i)
- T[ind+i*N + N-1] = 0.;
- gmm::scale(T, -1.0/t);
-
- sprintf(strstep, "step%d", step_init);
- gmm::vecload(datafilename + strstep + ".U",U0);
-
-
- if (continuation < 2){ /* Euler-Newton */
- scalar_type deltat_max = PARAM.real_value("DELTAT_MAX", "Maximal step length");
- scalar_type deltat_min = PARAM.real_value("DELTAT_MIN", "Minimal step length");
- scalar_type deltat_inc_fac = PARAM.real_value("DELTAT_INC_FAC", "Increment factor");
- scalar_type deltat_dec_fac = PARAM.real_value("DELTAT_DEC_FAC", "Decrement factor");
-
- int corrections;
- double rcond;
- plain_vector V0(stot), V(stot);
-
- gmm::SuperLU_solve(MS.tangent_matrix(), V0, T, rcond); // compute initial tangent
-
- // (deltat < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
- FRICTION.set_beta(1./deltat);
-
- for (int step = step_init; step < nb_step; ++step) {
- cout << "beginning of step " << step+1
- << ", number of variables : " << final_model.nb_dof() << endl;
-
- FRICTION.set_WT(gmm::scaled(U0, -1.0));
- corrections = 1;
-
- while (1) {
- /* predict next point */
- gmm::add(gmm::scaled(V0, -deltat), MS.state());
-
- t = X0[0] + deltat;
- if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = dz;
- F2[i*N+N-2] = t*dyv;
- }
- final_model.rhs().set(F2);
-
-
- iter = gmm::iteration(residual, noisy, maxcorrit ? maxcorrit : 40000);
- cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
-
-
-
- /* let the default non-linear solve (Newton) do its job */
- gmm::default_newton_line_search ls;
- getfem::standard_solve(MS, final_model, iter,
- getfem::default_linear_solver(final_model), ls);
-
-
-
- if (law_num < 4) {
- pl->reset_unvalid_flag();
- final_model.compute_residual(MS);
- if (pl->get_unvalid_flag())
- GMM_WARNING1("The solution is not completely valid, the determinant "
- "of the transformation is negative on "
- << pl->get_unvalid_flag() << " gauss points");
- }
-
- if (law_num < 4)
- gmm::copy(pELAS_nonlin->get_solution(MS), U);
- else
- gmm::copy(pELAS_lin->get_solution(MS), U);
-
- gmm::copy(FRICTION.get_LN(MS), LN1);
- gmm::copy(FRICTION.get_LT(MS), LT1);
-
- gmm::mult(BN, U, UN);
- gmm::mult(BT, U, UT);
- gmm::mult(BT, U0, UT0);
-
- int nb_nodes = compute_test_functions(UN, UT, UT0, LN1, LT1, TST,TST0,
- contact_nodes, gap, deltat, friction_coef);
-
-
- gmm::SuperLU_solve(MS.tangent_matrix(), V, T, rcond);
-
- scalar_type SP = (gmm::vect_sp(V, V0) / (gmm::vect_norm2(V) * gmm::vect_norm2(V0)));
- cout << "SP = " << SP << endl;
-
- if (iter.converged() && ((SP > 0.9) || ((SP <= 0.9) && (nb_nodes < 2))))
- break;
-
- if (deltat > deltat_min) {
- deltat = (deltat*deltat_dec_fac > deltat_min)
- ? deltat*deltat_dec_fac : deltat_min;
- // if (deltat < 0) FRICTION.set_beta(-1.0);
- FRICTION.set_beta(1./deltat);
- ++corrections;
- gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
- }
- } // while (1)
-
- converged = iter.converged();
- if (!converged) break;
-
- deltat0 = deltat;
- gmm::copy(U0, U00);
- gmm::copy(U, U0);
- gmm::copy(V, V0);
- gmm::copy(TST, TST0);
- X0[0] = t;
- gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(1, stot)));
-
- char s[100]; sprintf(s, "step%d", step+1);
- gmm::vecsave(datafilename + s + ".U",U);
-
- plain_vector VM(mf_vm.nb_dof());
- if (law_num < 4)
- pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- else
- pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- gmm::vecsave(datafilename + s + ".VM", VM);
-
- gmm::vecsave(datafilename + s + ".X", X0);
- Harwell_Boeing_save(datafilename + s + ".TST", TST);
-
- if ((deltat < deltat_max) && (corrections == 1) && (iter.converged())) {
- deltat = (deltat*deltat_inc_fac < deltat_max) ? deltat*deltat_inc_fac : deltat_max;
- // if (deltat < 0) FRICTION.set_beta(-1.);
- FRICTION.set_beta(1./deltat);
- }
-
- cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
- } // for (int step = 3; step < nb_step; ++step)
-
- } // Euler-Newton
-
-
- else { /* Moore-Penrose */
- scalar_type tolerance = PARAM.real_value("TOLERANCE");
- if (tolerance == 0.) tolerance = 1e-10;
- scalar_type h = PARAM.real_value("H", "Actual step length");
- scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
- scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
- scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
- scalar_type h_inc_fac = PARAM.real_value("H_INC_FAC", "Increment factor");
- scalar_type h_dec_fac = PARAM.real_value("H_DEC_FAC", "Decrement factor");
-
- int convergence = 1, corrections;
- plain_vector V0(1+stot), V(1+stot), X(1+stot);
- gmm::dense_matrix<size_type> CH0(nbc+1, 4);
- CH0(0,0) = size_type(-1);
-
- if (step_init < 4) {
- gmm::clear(V0);
- V0[0] = 1.0;
- compute_tangent(T, MS.tangent_matrix(), V0, noisy);
- }
- else {
- gmm::vecload(datafilename + strstep + ".V",V0);
- }
-
- gmm::copy(X0, X);
- gmm::copy(V0, V);
-
- for (int step = step_init; step < nb_step; ++step) {
- cout << "beginning of step " << step+1
- << ", number of variables : " << final_model.nb_dof() << endl;
-
- FRICTION.set_WT(gmm::scaled(U0, -1.0));
- corrections = 1;
-
- cout << " |U| = " << gmm::vect_norm2(MS.state()) << "\n";
-
- while (1) {
-
- /* predict next point */
- gmm::add(gmm::scaled(V0, h), X);
- cout << "h = " << h << endl;
-
- for (size_type j = 0; j < maxcorrit; ++j) {
- if (noisy) cout << "iter " << j << endl;
- if (noisy > 1) cout << "starting computing matrices" << endl;
-
- gmm::copy(gmm::sub_vector(X, gmm::sub_interval(1, stot)), MS.state());
-
- deltat = X[0]-X0[0];
- // (deltat < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
- FRICTION.set_beta(1./deltat);
-
- t = X[0];
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = dz;
- F2[i*N+N-2] = t*dyv;
- }
- final_model.rhs().set(F2);
-
- final_model.compute_tangent_matrix(MS);
- final_model.compute_residual(MS);
-
- if (noisy) cout << "t = " << t << " (deltat = " << deltat << ")" << endl;
-
- if (noisy > 2) {
- if (law_num < 4)
- gmm::copy(pELAS_nonlin->get_solution(MS), U);
- else
- gmm::copy(pELAS_lin->get_solution(MS), U);
-
- gmm::copy(FRICTION.get_LN(MS), LN1);
- gmm::copy(FRICTION.get_LT(MS), LT1);
-
- gmm::mult(BN, U, UN);
- gmm::mult(BT, U, UT);
- gmm::mult(BT, U0, UT0);
-
- compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0,
- contact_nodes, gap, deltat, friction_coef);
- }
-
- convergence = compute_Newton_iteration(T, MS.tangent_matrix(), V, X,
- MS.residual(), tolerance, residual, noisy);
- cout << "SP = " << gmm::vect_sp(V, V0) << endl;
-
- if (convergence < 1) break; /* an error occured */
-
- if (convergence > 1) {/* convergence */
-
- gmm::copy(gmm::sub_vector(X, gmm::sub_interval(1, stot)), MS.state());
-
- CH(0,0) = size_type(-1);
- FRICTION.set_CH(CH);
-
- deltat = X[0]-X0[0];
- // (deltat < 0.) ? FRICTION.set_beta(-1.) : FRICTION.set_beta(1.);
- FRICTION.set_beta(1./deltat);
-
- t = X[0];
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = dz;
- F2[i*N+N-2] = t*dyv;
- }
-
- final_model.rhs().set(F2);
-
- final_model.compute_tangent_matrix(MS);
- final_model.compute_residual(MS);
-
- scalar_type res = gmm::vect_norm2(MS.residual());
- cout << "final residual = " << res << endl;
- if (res < residual)
- compute_tangent(T, MS.tangent_matrix(), V, noisy);
- else convergence = 1;
-
- break;
-
- } // if (convergence > 1)
-
- } // for (size_type j = 1; j < maxcorrit; ++j)
-
- if (convergence > 1) { /* convergence */
- if (law_num < 4) {
- pl->reset_unvalid_flag();
- final_model.compute_residual(MS);
- if (pl->get_unvalid_flag())
- GMM_WARNING1("The solution is not completely valid, the determinant "
- "of the transformation is negative on "
- << pl->get_unvalid_flag() << " gauss points");
- }
-
- if (law_num < 4)
- gmm::copy(pELAS_nonlin->get_solution(MS), U);
- else
- gmm::copy(pELAS_lin->get_solution(MS), U);
-
- deltat = X[0]-X0[0];
-
- if (deltat < 0.0) cout << "Warning: deltat is negative!" << endl;
-
- gmm::copy(FRICTION.get_LN(MS), LN1);
- gmm::copy(FRICTION.get_LT(MS), LT1);
-
- gmm::mult(BN, U, UN);
- gmm::mult(BT, U, UT);
- gmm::mult(BT, U0, UT0);
-
- int nb_nodes = compute_test_functions(UN, UT, UT0, LN1, LT1, TST, TST0,
- contact_nodes, gap, deltat, friction_coef);
-
-
- scalar_type SP = gmm::vect_sp(V, V0);
- cout << "SP = " << SP << endl;
-
- if ((SP > 0.9) || ((SP > 0.7) && (nb_nodes < 2)))
- break;
-// else {
-// cout << "Do you want to accept this increment? (1, 0, -1) ";
-// int sign;
-// cin >> sign;
-// if (sign != 0) {
-// if (sign < 0) gmm::scale(V, -1.0);
-// h = h_init;
-// ++corrections;
-// break;
-// }
-// }
-
- } // if (convergence > 1)
-
- if (h > h_min) {
- FRICTION.set_CH(CH0);
- gmm::copy(X0, X);
- gmm::copy(V0, V);
- h = (h*h_dec_fac > h_min) ? h*h_dec_fac : h_min;
- ++corrections;
- }
- else { /* try to change the Jacobian */
-
- cout << "Set changes: ";
- for (int i = 0; i < nbc+1; ++i) {
- cin >> CH(i,0) >> CH(i,1) >> CH(i,2) >> CH(i,3);
- if (CH(i,0) == size_type(-1)) break;
- }
-
- for (int i = 0; i < nbc; ++i) {
- CH0(i,0) = i;
- CH0(i,1) = (TST0(i,0) <= 0) ? 1 : 0;
- if (TST0(i,1) < 0) { CH0(i,2) = 0; CH0(i,3) = 1; }
- else if (TST0(i,2) > 0) { CH0(i,2) = 1; CH0(i,3) = 0; }
- else { CH0(i,2) = 1; CH0(i,3) = 1; }
- }
- for (int i = 0; i < nbc; ++i) {
- if (CH(i,0) == size_type(-1)) break;
- CH0(CH(i,0), 1) = CH(i,1);
- CH0(CH(i,0), 2) = CH(i,2);
- CH0(CH(i,0), 3) = CH(i,3);
- }
- CH0(nbc,0) = size_type(-1);
-
- gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(1, stot)), MS.state());
- gmm::copy(V0, V);
-
- t = X0[0];
- for (size_type i = 0; i < nb_dof_rhs; ++i) {
- F2[i*N+N-1] = dz;
- F2[i*N+N-2] = t*dyv;
- }
-
- final_model.rhs().set(F2);
- FRICTION.set_WT(gmm::scaled(U00, -1.0));
- // (deltat0 < 0.0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
- FRICTION.set_beta(1./deltat0);
-
- final_model.compute_tangent_matrix(MS);
-
- FRICTION.set_CH(CH0);
- FRICTION.do_compute_tangent_matrix(MS, 0, 0);
- compute_tangent(T, MS.tangent_matrix(), V0, noisy);
-
- CH0(0,0) = size_type(-1);
- FRICTION.set_CH(CH0);
- FRICTION.set_WT(gmm::scaled(U0, -1.0));
-
- cout << "Choose a sign for the tangent (1, 0, -1): ";
- int sign;
- cin >> sign;
- if (sign == 0) {
- convergence = 1; /* no convergence */
- break;
- }
- if (sign < 0) gmm::scale(V0, -1.0);
- cout << "SP = " << gmm::vect_sp(V, V0) << endl;
-
- gmm::copy(X0, X);
- gmm::copy(V0, V);
- h = h_init;
-
- } // try to change the Jacobian
-
- } // while (1)
-
- converged = (convergence > 1);
- if (!converged) break;
-
- CH0(0,0) = size_type(-1);
- deltat0 = deltat;
- gmm::copy(U0, U00);
- gmm::copy(U, U0);
- gmm::copy(X, X0);
- gmm::copy(V, V0);
- gmm::copy(TST, TST0);
-
- char s[100]; sprintf(s, "step%d", step+1);
- gmm::vecsave(datafilename + s + ".U",U);
-
- plain_vector VM(mf_vm.nb_dof());
- if (law_num < 4)
- pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- else
- pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
- gmm::vecsave(datafilename + s + ".VM", VM);
-
- gmm::vecsave(datafilename + s + ".X", X);
- gmm::vecsave(datafilename + s + ".V", V);
- Harwell_Boeing_save(datafilename + s + ".TST", TST);
-
- if ((h < h_max) && (corrections == 1) && (convergence > 1)) {
- h = (h*h_inc_fac < h_max) ? h*h_inc_fac : h_max;
- }
-
- cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
-
- } // for (int step = 3; step < nb_step; ++step)
-
- } // Moore-Penrose
-
- } // continuation
-
-
- if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;
-
- return converged;
-
-}
-
-
-/**************************************************************************/
-/* main program. */
-/**************************************************************************/
-
-int main(int argc, char *argv[]) {
-
- GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
- FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
-
- // try {
- elastostatic_problem p;
- p.PARAM.read_command_line(argc, argv);
- p.init();
- p.mesh.write_to_file(p.datafilename + ".mesh");
- p.mf_u.write_to_file(p.datafilename + ".mf", true);
- p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
- p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
- plain_vector U(p.mf_u.nb_dof());
- if (!p.solve(U)) cerr << "Solve has failed\n";
- if (p.PARAM.int_value("VTK_EXPORT")) {
- cout << "export to " << p.datafilename + ".vtk" << "..\n";
- getfem::vtk_export exp(p.datafilename + ".vtk",
- p.PARAM.int_value("VTK_EXPORT")==1);
- exp.exporting(p.mf_u);
- exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
- cout << "export done, you can view the data file with (for example)\n"
- "mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
- "WarpVector -m BandedSurfaceMap -m Outline &\n";
- }
- // } GMM_STANDARD_CATCH_ERROR;
-
- return 0;
-
-}
diff --git a/contrib/contact_grd_trans/contact_continuation_load.cc b/contrib/contact_grd_trans/contact_continuation_load.cc
new file mode 100755
index 0000000..8cd3425
--- /dev/null
+++ b/contrib/contact_grd_trans/contact_continuation_load.cc
@@ -0,0 +1,1444 @@
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ @file contact_continuation_load.cc
+ @brief Nonlinear Problem with Friction (large strain).
+
+ A rubber bar is submitted to a large torsion. If the standard
+ solver (Newton) fails, one tries to find a more suitable initial
+ approximation by numerical continuation with respect to the
+ Dirichlet condition and then restart the standard solver.
+ NOTE: The continuation is proposed only for the quasi-static case.
+
+ This program is used to check that getfem++ is working. This is
+ also a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type; /* = unsigned long */
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+/*
+ structure for the frictional problem
+*/
+struct friction_problem {
+
+ enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
+ getfem::mesh mesh; /* the mesh */
+ getfem::mesh_im mim; /* the integration methods */
+ getfem::mesh_fem mf_u; /* main mesh_fem, for the elastostatic solution */
+ getfem::mesh_fem mf_p; /* mesh_fem for the pressure. */
+ getfem::mesh_fem mf_rhs; /* mesh_fem for the right hand side (f(x),..) */
+ getfem::mesh_fem mf_coef; /* mesh_fem used to represent pde coefficients */
+ getfem::mesh_fem mf_vm; /* mesh_fem used for the von Mises stress */
+ scalar_type p1, p2, p3; /* elastic coefficients. */
+ scalar_type LX, LY, LZ; /* system dimensions */
+ scalar_type lambda, mu; /* Lame coefficients */
+ scalar_type residual; /* max residual for the iterative solvers */
+ bool is_dynamic;
+ scalar_type rho; /* density */
+ size_type nocontact_mass;
+ std::string datafilename;
+ bgeot::md_param PARAM;
+
+ bool solve(plain_vector &U);
+ void init(void);
+ friction_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ and integration methods and selects the boundaries.
+
+ (this is boilerplate code, not very interesting)
+ */
+void friction_problem::init(void) {
+ std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
+ std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
+ std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+ "Name of integration method");
+ cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+ /* First step : build the mesh */
+ bgeot::pgeometric_trans pgt =
+ bgeot::geometric_trans_descriptor(MESH_TYPE);
+ size_type N = pgt->dim();
+
+ LX = PARAM.real_value("LX", "Length along X axis");
+ LY = PARAM.real_value("LY", "Length along Y axis");
+ LZ = PARAM.real_value("LZ", "Length along Z axis");
+ std::string meshfilename = PARAM.string_value("MESHFILENAME");
+ int nb_refine = PARAM.int_value("NBREFINE") ? PARAM.int_value("NBREFINE") : 0;
+ scalar_type layerx = PARAM.real_value("LAYERX",
+ "Thickness of the refinement along the X-axis");
+ scalar_type layery = PARAM.real_value("LAYERY",
+ "Thickness of the refinement along the Y-axis");
+ scalar_type layerx_fact = PARAM.real_value("LAYERX_FACT", "Multiplicative factor");
+ scalar_type layery_fact = PARAM.real_value("LAYERY_FACT", "Multiplicative factor");
+ lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+ mu = PARAM.real_value("MU", "Lame coefficient mu");
+
+ if (meshfilename.size() > 0)
+ mesh.read_from_file(meshfilename);
+ else {
+ std::vector<size_type> nsubdiv(N);
+ std::fill(nsubdiv.begin(),nsubdiv.end(),
+ PARAM.int_value("NX", "Number of space steps "));
+ nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
+ if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
+ getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+ PARAM.int_value("MESH_NOISED") != 0);
+
+ bgeot::base_matrix M(N,N);
+ for (size_type i=0; i < N; ++i) {
+ static const char *t[] = {"LX","LY","LZ"};
+ M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
+ }
+ if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
+
+ /* scale the unit mesh to [LX,LY,..] and incline it */
+ mesh.transformation(M);
+ }
+
+ if (nb_refine > 0) { /* refinement in the right-bottom corner */
+ dal::bit_vector cvref;
+ for (int i = 0; i < nb_refine; ++i) {
+ cvref.clear();
+ for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
+ if ((mesh.points_of_convex(j)[0][0] > LX * (1 - layerx)
+ && mesh.points_of_convex(j)[1][0] > LX * (1 - layerx)
+ && mesh.points_of_convex(j)[2][0] > LX * (1 - layerx))
+ && (mesh.points_of_convex(j)[0][N-1] < LY * layery
+ && mesh.points_of_convex(j)[1][N-1] < LY * layery
+ && mesh.points_of_convex(j)[2][N-1] < LY * layery))
+ cvref.add(j);
+ }
+ mesh.Bank_refine(cvref);
+ layerx *= layerx_fact;
+ layery *= layery_fact;
+ }
+ }
+
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+ residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+ is_dynamic = (PARAM.int_value("DYNAMIC", "Is dynamic?") != 0);
+ rho = PARAM.real_value("RHO", "Density");
+ nocontact_mass = PARAM.int_value("NOCONTACT_MASS", "Suppress the mass "
+ "of contact nodes");
+
+ p1 = PARAM.real_value("P1", "First Elastic coefficient");
+ p2 = PARAM.real_value("P2", "Second Elastic coefficient");
+ p3 = PARAM.real_value("P3", "Third Elastic coefficient");
+
+ mf_u.set_qdim(bgeot::dim_type(N));
+
+ /* set the finite element on the mf_u */
+ getfem::pfem pf_u =
+ getfem::fem_descriptor(FEM_TYPE);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor(INTEGRATION);
+
+ mim.set_integration_method(ppi);
+ mf_u.set_finite_element(pf_u);
+
+ mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
+
+ /* set the finite element on mf_rhs (same as mf_u if DATA_FEM_TYPE is
+ not used in the .param file */
+ std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+ if (data_fem_name.size() == 0) {
+ GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+ ". In that case you need to set "
+ << "DATA_FEM_TYPE in the .param file");
+ mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+ } else {
+ mf_rhs.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(data_fem_name));
+ }
+
+ /* set the finite element on mf_coef. Here we use a very simple element
+ * since the only function that need to be interpolated on the mesh_fem
+ * is f(x)=1 ... */
+ mf_coef.set_finite_element(mesh.convex_index(),
+ getfem::classical_fem(pgt,0));
+
+ mf_vm.set_classical_discontinuous_finite_element(1);
+
+ /* set boundary conditions
+ * (Dirichlet on the upper face, contact on the bottom face
+ * and on parts of the adjacent faces, Neumann elsewhere) */
+ cout << "Selecting the Dirichlet, Neumann and contact boundaries\n";
+ getfem::mesh_region border_faces;
+ getfem::outer_faces_of_mesh(mesh, border_faces);
+ for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+ assert(it.is_face());
+ base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+ un /= gmm::vect_norm2(un);
+ if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) {
+ mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
+ } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
+ mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+ } else if (mesh.points_of_convex(it.cv())[0][N-1] < LY * 0.3)
+ mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+ }
+}
+
+/* The Iteration object for corrections */
+class iteration_corr {
+ size_type maxiter; /* Max. number of iterations. */
+ int noise; /* if noise > 0 iterations are printed. */
+ double resmax; /* maximum residual. */
+ double diffmax; /* maximum difference. */
+ size_type nit; /* iteration number. */
+ double res; /* last computed residual. */
+ double diff; /* last computed difference. */
+public:
+ void init(void) {
+ nit = 0; res = 0.0; diff = 0.0;
+ }
+
+ iteration_corr(double r = 1.0E-8, double d = 1.0E-8, int noi = 0,
+ size_type mit = size_type(-1))
+ : maxiter(mit), noise(noi), resmax(r), diffmax(d) { init(); }
+
+ void operator ++(int) { nit++; }
+
+ int get_noisy(void) const { return noise; }
+ void set_res(double r) { res = r; }
+ void set_diff(double d) { diff = d; }
+ size_type get_iteration(void) const { return nit; }
+
+ bool converged(void) { return (res <= resmax && diff <= diffmax); }
+
+ bool finished(void) {
+ if (noise > 0)
+ cout << "iter " << nit << " residual " << gmm::abs(res)
+ << " difference " << gmm::abs(diff) << endl;
+ return ((nit >= maxiter || res > 1.0E+200) || converged());
+ }
+};
+
+/* The object for adaptation of the continuation to non-smoothness of
+ the problem by means of active selection functions */
+class selections {
+ size_type row, nba;
+ gmm::dense_matrix<bool> CH;
+ gmm::dense_matrix<size_type> ACT;
+ plain_vector LV;
+public:
+ void clear(void) { row = nba = 0; }
+ selections(void) { clear(); }
+ bool empty(void) { return (nba == 0); }
+
+ template<typename CH_MATRIX, typename T_MATRIX, typename VECT>
+ void proper_update
+ (const VECT &contact_nodes, const CH_MATRIX &CH_, const T_MATRIX &TST, scalar_type limit,
+ int noisy);
+
+ template<typename MODEL_STATE, typename CH_MATRIX, typename VECT>
+ bool compute_new_tangent
+ (MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ plain_vector grad_XI, const plain_vector &F2_start, const plain_vector &deltaF2,
+ const plain_vector &X, plain_vector &T, CH_MATRIX &CH_, int noisy);
+
+ template<typename MODEL_STATE>
+ void determine_tangent_orientation
+ (getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector <, plain_vector &T);
+};
+
+template<typename MAT>
+void compute_condition_number(const MAT &M) {
+/* computes the smallest and the largest eigenvalue of the matrix M
+ and then its condition number */
+
+ size_type N = gmm::mat_nrows(M);
+ plain_vector V(N), U(N), W(N);
+ plain_vector V2(N), U2(N);
+ gmm::fill_random(V);
+ gmm::fill_random(V2);
+ scalar_type lambda = 0., lambda2 = 0.;
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(M);
+
+ for(size_type i = 0; i < 100; ++i) {
+ gmm::scale(V, 1./gmm::vect_norm2(V));
+ gmm::scale(V2, 1./gmm::vect_norm2(V2));
+ SLU.solve(U, V);
+ gmm::mult(M, V2, U2);
+
+ lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
+ lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
+
+ gmm::add(V, gmm::scaled(U, -1./lambda), W);
+// if (i > 90)
+// cout << "iteration " << i << " norm(W) = " << gmm::vect_norm2(W)
+// << " lambda = " << lambda
+// << " lambda2 = " << lambda2 << endl;
+ if (gmm::vect_norm2(W) < 1E-2) break;
+
+ gmm::copy(U, V);
+ gmm::copy(U2, V2);
+ }
+
+ // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
+ // cout << "Largest eigenvalue : " << lambda2 << endl;
+ cout << "Condition number: " << lambda2 * lambda << endl;
+
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void compute_tangent(const MAT &A, const VECT1 &B, VECT2 &T, int noisy) {
+/* computes a unit tangent at the point X to the curve given implicitly by the equation H = 0
+ with the Jacobian grad H(X) = (A|B) which is positively oriented w.r.t. the vector T
+ and saves it into T, i.e.:
+ solves (A|B)T_+ = 0 & T.T_+ = 1;
+ sets T = T_+ / ||T_+||; */
+
+ bool singular_A = false;
+ size_type N = gmm::mat_nrows(A);
+ double rcond;
+
+ try { /* whether A is singular; if not, the calculation can be accelerated provided that
+ A is sparse */
+ scalar_type sp;
+ plain_vector Y(N);
+ if (noisy > 1) cout << "starting computing tangent" << endl;
+
+ gmm::SuperLU_solve(A, Y, B, rcond);
+ sp = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y);
+
+ T[N] = 1.0 / (T[N] - sp);
+ gmm::copy(gmm::scaled(Y, -1.0*T[N]),
+ gmm::sub_vector(T, gmm::sub_interval(0, N)));
+ }
+ catch (...) {
+ singular_A = true;
+ }
+
+ if (singular_A) {
+ sparse_matrix C(N+1, N+1);
+ plain_vector R(N+1);
+
+ gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+ gmm::copy(gmm::col_vector(B),
+ gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+ gmm::copy(gmm::row_vector(T),
+ gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+ gmm::clear(R);
+ R[N] = 1.0;
+
+ gmm::SuperLU_solve(C, T, R, rcond);
+ }
+
+ gmm::scale(T, 1.0/gmm::vect_norm2(T));
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void correction_solver
+(const MAT &A, const VECT1 &B, VECT2 &X, VECT2 &T, const VECT1 &P, iteration_corr &iter) {
+/* computes one correction step of the Moore-Penrose method for continuing the implicit curve
+ H = 0 with P = H(X), (A|B) = grad H(X), X and T being the approximations of the point
+ and the tangent, respectively, i.e.:
+ solves (A|B)T_+ = 0 & T.T_+ = 1;
+ solves (A|B)dX = P; T.dX = 0;
+ sets X = X - dX;
+ sets T = T_+ / ||T_+||; */
+
+ bool singular_A = false;
+ size_type N = gmm::mat_nrows(A);
+ plain_vector dX(N+1);
+
+ try { /* whether A is singular; if not, the calculation can be accelerated provided that
+ A is sparse */
+ scalar_type sp1, sp2;
+ plain_vector Y1(N), Y2(N);
+
+ compute_condition_number(A);
+
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(A);
+ SLU.solve(Y1, B);
+ SLU.solve(Y2, P);
+
+ sp1 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y1);
+ sp2 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y2);
+
+ dX[N] = sp2 / (sp1 - T[N]);
+ gmm::add(gmm::scaled(Y1, -1.0*dX[N]), Y2);
+ gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(0, N)));
+
+ T[N] = 1.0 / (T[N] - sp1);
+ gmm::copy(gmm::scaled(Y1, -1.0*T[N]),
+ gmm::sub_vector(T, gmm::sub_interval(0, N)) );
+ }
+ catch (...) {
+ singular_A = true;
+ }
+
+
+ try {
+ if (singular_A) {
+ plain_vector Q(N+1), R(N+1);
+ sparse_matrix C(N+1, N+1);
+
+ gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+ gmm::copy(gmm::col_vector(B),
+ gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+ gmm::copy(gmm::row_vector(T),
+ gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+ gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
+ Q[N] = 0.0;
+
+ gmm::clear(R);
+ R[N] = 1.0;
+
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(C);
+ SLU.solve(dX, Q);
+ SLU.solve(T, R);
+ }
+ }
+ catch (...) {
+ cout << "SuperLU failed!" << endl;
+ }
+
+ gmm::add(gmm::scaled(dX, -1.0), X);
+ gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+ iter.set_diff(gmm::vect_norm2(dX));
+
+}
+
+template<typename MODEL_STATE>
+void standard_solver
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET, const plain_vector &F2,
+gmm::iteration &iter) {
+ /* standard solver (Newton) */
+
+ DIRICHLET.rhs().set(F2);
+// cout << "F2 = " << F2 << endl;
+// cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
+
+ getfem::basic_newton_line_search ls(size_type(-1), 5.0/3.0, 0.1, 0.5, 3.0);
+// getfem::default_newton_line_search ls;
+ getfem::standard_solve(MS, final_model, iter,
+ getfem::default_linear_solver(final_model), ls);
+}
+
+template<typename MODEL_STATE>
+void Newton_correction
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET, const plain_vector &grad_XI,
+ const plain_vector &F2_start, const plain_vector &deltaF2, plain_vector &X, plain_vector &T,
+ iteration_corr &iter) {
+
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ plain_vector F2 = F2_start;
+
+ gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+ gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+ DIRICHLET.rhs().set(F2);
+
+ final_model.compute_residual(MS);
+
+ do {
+ if (iter.get_noisy() > 1)
+ cout << "starting computing tangent matrix" << endl;
+ final_model.compute_tangent_matrix(MS);
+
+ if (iter.get_noisy() > 1)
+ cout << "starting linear solver" << endl;
+ correction_solver(MS.tangent_matrix(), grad_XI, X, T, MS.residual(), iter);
+ if (iter.get_noisy() > 1)
+ cout << "linear solver done" << endl;
+
+ gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+ gmm::copy(F2_start, F2);
+ gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+ DIRICHLET.rhs().set(F2);
+
+ final_model.compute_residual(MS);
+ iter.set_res(gmm::vect_norm2(MS.residual()));
+
+ iter++;
+ } while (!iter.finished());
+}
+
+template<typename MODEL_STATE>
+void compute_displacement
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::abstract_hyperelastic_law &l,
+ getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> &ELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> &ELAS_lin, plain_vector &U,
+ size_type law_num) {
+
+ if (law_num < 4) {
+ l.reset_unvalid_flag();
+ final_model.compute_residual(MS);
+ if (l.get_unvalid_flag())
+ GMM_WARNING1("The solution is not completely valid, the determinant "
+ "of the transformation is negative on "
+ << l.get_unvalid_flag() << " Gauss points");
+
+ gmm::copy(ELAS_nonlin.get_solution(MS), U);
+ } else
+ gmm::copy(ELAS_lin.get_solution(MS), U);
+}
+
+template<typename MODEL_STATE>
+void compute_von_Mises
+(MODEL_STATE &MS, getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> &ELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> &ELAS_lin,
+ getfem::mesh_fem &mf_vm, plain_vector &VM, size_type law_num) {
+ /* computes the von Mises stress from the solution */
+ if (law_num < 4)
+ ELAS_nonlin.compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+ else
+ ELAS_lin.compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+}
+
+template<typename MODEL_STATE>
+scalar_type compute_test_function
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector <, size_type i, size_type j) {
+
+ scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+ plain_vector gap(LN.size()), friction_coef(LN.size());
+ scalar_type tst;
+
+ gmm::copy(FRICTION.get_gap(), gap);
+ gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+
+ switch (j) {
+ case 0: tst = (LN[i] - r * alpha * (UN[i] - gap[i])) / r; break;
+ case 1: tst = (-friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r; break;
+ default: tst = (friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r; break;
+ }
+
+ return tst;
+}
+
+template<typename MODEL_STATE, typename T_MATRIX>
+void compute_test_functions
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector <, T_MATRIX &TST) {
+
+ scalar_type r = FRICTION.get_r();
+ scalar_type alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+ plain_vector gap(LN.size()), friction_coef(LN.size());
+
+ gmm::copy(FRICTION.get_gap(), gap);
+ gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+
+ for (size_type i = 0; i < LN.size(); ++i) {
+ TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i])) / r;
+ TST(i, 1) = (- friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r;
+ TST(i, 2) = (friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i])) / r;
+ }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename T_MATRIX, typename VECT>
+void compute_activity
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &UN, const plain_vector &UT, const plain_vector &UT0,
+ const plain_vector &LN, const plain_vector <, CH_MATRIX &CH, T_MATRIX &TST, int noisy) {
+
+ compute_test_functions(FRICTION, UN, UT, UT0, LN, LT, TST);
+
+ if (noisy > 1)
+ cout << "characters of the solution:" << endl;
+
+ for (size_type i = 0; i < LN.size(); ++i) {
+ CH(i, 0) = (TST(i, 0) <= 0);
+ CH(i, 1) = (TST(i, 1) >= 0);
+ CH(i, 2) = (TST(i, 2) <= 0);
+
+ if (noisy > 1)
+ cout << "node " << i << ": " << contact_nodes[i] << " "
+ << CH(i, 0) << CH(i, 1) << CH(i, 2)
+// << " " << TST(i, 0) << " " << TST(i, 1) << " " << TST(i, 2)
+ << endl;
+ }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename T_MATRIX, typename VECT>
+size_type compute_activity
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &UN, const plain_vector &UT, const plain_vector &UT0,
+ const plain_vector &LN, const plain_vector <, const CH_MATRIX &CH0, CH_MATRIX &CH,
+ T_MATRIX &TST, scalar_type x_min, int noisy) {
+
+ size_type nch = 0, nch_i = 0;
+
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN, LT, CH, TST, noisy);
+
+ for (size_type i = 0; i < LN.size(); ++i) {
+ nch_i = 0;
+ for (size_type j = 0; j < 3; ++j) {
+ if ((CH(i, j) != CH0(i, j)) && (j == 0 || (j > 0 && (CH(i, 0) || CH0(i, 0))))
+ && contact_nodes[i][0] >= x_min)
+ ++nch_i;
+ }
+
+ if (nch_i > 0) {
+ if (nch == 0)
+ cout << "changes of characters:" << endl;
+ cout << "node " << i << ": " << contact_nodes[i] << " "
+ << CH0(i, 0) << CH0(i, 1) << CH0(i, 2) << " -> "
+ << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+ nch += nch_i;
+ }
+ }
+
+ return nch;
+}
+
+template<typename MATRIX>
+void straight_insertion
+(MATRIX &M, plain_vector &KEY, size_type i) {
+/* places the i-th row of M according to the absolut values of the corresponding components
+ in KEY; increasing order is wanted in the first i components of KEY */
+
+ bool found;
+ size_type j = i;
+ std::vector<size_type> X(2);
+ scalar_type X_KEY;
+
+ X[0] = M(i, 0); X[1] = M(i, 1);
+ X_KEY = KEY[i];
+ if (j == 0) found = true;
+ else found = (gmm::abs(X_KEY) >= gmm::abs(KEY[j - 1]));
+
+ while (!found) { // seeking the appropriate position
+ KEY[j] = KEY[j - 1];
+ M(j, 0) = M(j - 1, 0);
+ M(j, 1) = M(j - 1, 1);
+ --j;
+ if (j == 0) found = true;
+ else found = (gmm::abs(X_KEY) >= gmm::abs(KEY[j - 1]));
+ }
+
+ M(j, 0) = X[0]; M(j, 1) = X[1];
+ KEY[j] = X_KEY;
+}
+
+template<typename CH_MATRIX, typename T_MATRIX, typename VECT>
+void selections::proper_update
+(const VECT &contact_nodes, const CH_MATRIX &CH_, const T_MATRIX &TST, scalar_type limit,
+ int noisy) {
+
+ size_type nbc = gmm::mat_nrows(CH_);
+
+ if (noisy > 1) {
+ cout << "characters of the last computed solution:" << endl;
+ for (size_type i = 0; i < nbc; ++i)
+ cout << "node " << i << ": " << contact_nodes[i] << " "
+ << CH_(i, 0) << CH_(i, 1) << CH_(i, 2) << endl;
+ }
+
+ if (gmm::mat_nrows(CH) == 0) {
+ gmm::resize(CH, nbc, 3); gmm::resize(ACT, 3 * nbc, 2); gmm::resize(LV, 3 * nbc);
+ }
+
+ gmm::copy(CH_, CH);
+ nba = 0;
+
+ for (size_type i = 0; i < nbc; ++i) {
+ for (size_type j = 0; j < 3; ++j)
+ if (gmm::abs(TST(i, j)) <= limit) {
+ if (nba == 0)
+ cout << "test functions with values close to zero:" << endl;
+ cout << "TST(" << i << ", " << j << ") = " << TST(i, j) << endl;
+
+ ACT(nba, 0) = i; ACT(nba, 1) = j; LV[nba] = TST(i, j);
+ straight_insertion(ACT, LV, nba);
+ ++nba;
+ }
+ }
+
+ if (nba == 0)
+ cout << "No test functions with values close to zero were founded. " << endl;
+ if (nba >= nbc) {
+ row = nba;
+ cout << "The continuation path seems to be circular. " << endl;
+ }
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename VECT>
+bool selections::compute_new_tangent
+(MODEL_STATE &MS, getfem::mdbrick_abstract<MODEL_STATE> &final_model,
+ getfem::mdbrick_Dirichlet<MODEL_STATE> &DIRICHLET,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ plain_vector grad_XI, const plain_vector &F2_start, const plain_vector &deltaF2,
+ const plain_vector &X, plain_vector &T, CH_MATRIX &CH_, int noisy) {
+ /* comes through the proposed Jacobians and changes exactly one character */
+
+ bool new_tangent = false;
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ plain_vector F2 = F2_start;
+
+ if (row < nba) {
+ gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+ gmm::add(gmm::scaled(deltaF2, X[stot]), F2);
+ DIRICHLET.rhs().set(F2);
+
+ size_type i, j;
+ while (!new_tangent && row < nba) {
+
+ i = ACT(row, 0), j = ACT(row, 1);
+ CH(i, j) = !CH(i, j);
+
+ if ((CH(i, 0) && (CH(i, 1) || CH(i, 2))) || (!CH(i, 0) && CH(i, 1) != CH(i, 2))) {
+ /* the transition is meaningful */
+ cout << "enforcing transition of node " << i << ": " << contact_nodes[i] << " ";
+ switch (j) {
+ case 0: cout << !CH(i, 0) << CH(i, 1) << CH(i, 2); break;
+ case 1: cout << CH(i, 0) << !CH(i, 1) << CH(i, 2); break;
+ case 2: cout << CH(i, 0) << CH(i, 1) << !CH(i, 2); break;
+ }
+ cout << " -> " << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+
+ FRICTION.set_character_matrix(CH);
+ final_model.compute_tangent_matrix(MS);
+
+ compute_tangent(MS.tangent_matrix(), grad_XI, T, noisy);
+ new_tangent = true; gmm::copy(CH, CH_);
+ }
+
+ CH(i, j) = !CH(i, j);
+ ++row;
+ }
+
+ FRICTION.clear_character_matrix();
+ }
+
+ return new_tangent;
+
+}
+
+template<typename MODEL_STATE>
+void selections::determine_tangent_orientation
+(getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &UN,
+ const plain_vector &UT, const plain_vector &UT0, const plain_vector &LN,
+ const plain_vector <, plain_vector &T) {
+
+ size_type i = ACT(row - 1, 0), j = ACT(row - 1, 1);
+ scalar_type tst = compute_test_function(FRICTION, UN, UT, UT0, LN, LT, i, j);
+
+ if (LV[row - 1] * (tst - LV[row - 1]) > 0) {
+ gmm::scale(T, -1.0);
+ cout << "TST(i, j)(X0 + T) - TST(i, j)(X0) = " << LV[row - 1] - tst << ", ";
+ } else
+ cout << "TST(i, j)(X0 + T) - TST(i, j)(X0) = " << tst - LV[row - 1] << ", ";
+}
+
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
+
+bool friction_problem::solve(plain_vector &U) {
+
+ size_type nb_dof_rhs = mf_rhs.nb_dof();
+ size_type N = mesh.dim();
+ size_type law_num = PARAM.int_value("LAW");
+ // Elasticity brick.
+ base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
+
+ /* choose the material law */
+ getfem::abstract_hyperelastic_law *pl = 0, *pCG = 0;
+ switch (law_num) {
+ case 0:
+ case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 2:
+ if (N < 3) {
+ pCG = new getfem::Ciarlet_Geymonat_hyperelastic_law();
+ pl = new getfem::plane_strain_hyperelastic_law(pCG);
+ } else
+ pl = new getfem::Ciarlet_Geymonat_hyperelastic_law();
+ break;
+ case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+ case 4 : case 5 : break;
+ default: GMM_ASSERT1(false, "no such law");
+ }
+
+ getfem::mdbrick_abstract<> *pELAS = 0;
+ getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
+ getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
+
+ if (law_num < 4) {
+ p.resize(pl->nb_params());
+ pELAS = pELAS_nonlin
+ = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
+ } else {
+ pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
+ (mim, mf_u, law_num == 5 ? 0.0 : lambda, mu);
+ }
+
+ getfem::mdbrick_abstract<> *pINCOMP = pELAS;
+ switch (law_num) {
+ case 1:
+ case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
+ break;
+ case 5: {
+ getfem::mdbrick_linear_incomp<> *pb =
+ new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
+ pINCOMP = pb;
+ pb->penalization_coeff().set(1.0/lambda);
+ }
+ }
+
+ size_type nb_step = int(PARAM.int_value("NBSTEP"));
+ scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
+
+ // contact condition for the Lagrange elements
+ dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
+// cout << "cn = " << cn << endl;
+// cout << "cn.card()/N = " << cn.card()/N << endl;
+ sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
+ sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
+ std::vector<base_node> contact_nodes;
+ plain_vector gap(cn.card()/N);
+ size_type jj = 0;
+ for (dal::bv_visitor i(cn); !i.finished(); ++i)
+ if (i % N == 0) {
+// cout << "point de contact " << mf_u.point_of_dof(i) << endl;
+ BN(jj, i+N-1) = -1.;
+ gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
+ contact_nodes.push_back(mf_u.point_of_basic_dof(i));
+ for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
+ ++jj;
+ }
+
+ // creating force density vectors
+ int nbc = int(jj);
+// sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
+ plain_vector UN(nbc), UT(nbc*(N-1)), LN1(nbc), LT1(nbc*(N-1));
+// {
+// sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
+// getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
+// std::vector<size_type> indN, indT;
+// for (dal::bv_visitor i(cn); !i.finished(); ++i)
+// if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
+// gmm::sub_index SUBI(indN);
+// gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
+// gmm::sub_index SUBJ(indT);
+// gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);
+// }
+
+
+
+ scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF",
+ "Friction cefficient");
+ scalar_type r = PARAM.real_value("R", "Augmentation parameter");
+ scalar_type alpha = PARAM.real_value("ALPHA") ? PARAM.real_value("ALPHA") : 1.0;
+
+
+ getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
+ friction_coef, BT);
+ FRICTION.set_r(r);
+ FRICTION.set_alpha(alpha);
+ FRICTION.set_beta(1./deltat);
+
+ // Defining the volumic source term.
+ base_vector f(N);
+ f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
+ f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
+ if (N>2)
+ f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
+ plain_vector F(nb_dof_rhs * N);
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
+ }
+
+ getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
+
+ // Dirichlet condition
+ plain_vector F2(nb_dof_rhs * N);
+ getfem::mdbrick_Dirichlet<> DIRICHLET(VOL_F, DIRICHLET_BOUNDARY_NUM);
+ DIRICHLET.rhs().set(mf_rhs, F2);
+ DIRICHLET.set_constraints_type(getfem::constraints_type
+ (PARAM.int_value("DIRICHLET_VERSION")));
+
+ getfem::mdbrick_abstract<> *pfinal_model = &DIRICHLET;
+
+ getfem::mdbrick_dynamic<> *pDYNAMIC = 0;
+
+ // Eventual dynamic brick
+ if (is_dynamic) {
+ pfinal_model = pDYNAMIC = new getfem::mdbrick_dynamic<>(DIRICHLET, rho);
+ pDYNAMIC->set_dynamic_coeff(1./(deltat*deltat), 1.);
+ if (nocontact_mass)
+ pDYNAMIC->no_mass_on_boundary(FRICTION_BOUNDARY_NUM, nocontact_mass == 2);
+ }
+
+ // Generic solver.
+ getfem::standard_model_state MS(*pfinal_model);
+ size_type step0 = PARAM.int_value("STEP0") ? PARAM.int_value("STEP0") : 0;
+ bool start_standard_solver = (PARAM.int_value("STANDARD_SOLVER",
+ "Start with the standard solver?") != 0);
+ size_type step0_cont = start_standard_solver ? 0 : PARAM.int_value("STEP0_CONT");
+ size_type range_cont = start_standard_solver ? 1 : PARAM.int_value("RANGE_CONT");
+ size_type range_cont_inc = PARAM.int_value("RANGE_CONT_INC");
+ std::string X0filename = start_standard_solver ? "" : PARAM.string_value("X0FILENAME");
+ scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
+ scalar_type h = PARAM.real_value("H") ? PARAM.real_value("H") : h_init;
+ scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
+ scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
+ scalar_type h_change = PARAM.real_value("H_CHANGE");
+ scalar_type h_inc = PARAM.real_value("H_INC");
+ scalar_type h_dec = PARAM.real_value("H_DEC");
+ scalar_type maxdist = PARAM.real_value("DISTANCE");
+ scalar_type XI_end = start_standard_solver ? 1. : PARAM.real_value("XI_END");
+ size_type maxit = PARAM.int_value("MAXITER");
+ gmm::iteration iter;
+
+ scalar_type dy = PARAM.real_value("DIRICHLET_Y",
+ "Prescribed displacement in y");
+ scalar_type dxv = PARAM.real_value("DIRICHLET_X_SPEED",
+ "Prescribed velocity in x");
+ scalar_type x_min = PARAM.real_value("X_MIN");
+ int noisy = PARAM.int_value("NOISY");
+
+
+ plain_vector U0 = U, UT0 = UT, V0(gmm::vect_size(U)), DF(gmm::vect_size(U));
+ gmm::dense_matrix<bool> CH_(nbc, 3), CH0_(nbc, 3);
+ gmm::dense_matrix<scalar_type> TST(nbc, 3);
+ short convergence = -1;
+// plain_vector SumN(nb_step), SumT(nb_step),Pressure(nb_step);
+// plain_vector maxT(nb_step);
+// plain_vector maxN(nb_step);
+// plain_vector max(nb_step);
+// double Fmax =0;
+
+ if (step0 > 0){ /* load the foregoing values */
+ char s[100]; sprintf(s, "step%d", step0);
+ gmm::vecload(datafilename + s + ".U", U0);
+ gmm::vecload(datafilename + s + ".Y", MS.state());
+ if (is_dynamic)
+ gmm::vecload(datafilename + s + ".V", V0);
+ }
+
+
+ for (size_type step = step0; step < nb_step; ++step) {
+ cout << "beginning of step " << step+1
+ << ", number of variables : " << pfinal_model->nb_dof() << endl ;
+
+ convergence = -1;
+
+ do { /* seek the solution */
+
+ if (is_dynamic) {
+ gmm::mult(pDYNAMIC->get_M(), gmm::scaled(U0, 1./(deltat*deltat)), DF);
+ gmm::mult_add(pDYNAMIC->get_M(), gmm::scaled(V0, 1./deltat), DF);
+ pDYNAMIC->set_DF(DF);
+ }
+ FRICTION.set_WT(gmm::scaled(U0, -1.0));
+
+ /* in the first eleven iterations, the body is compressed,
+ afterwards, it is pulling to the right while subject to a constant pressure */
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ F2[i*N+N-1] = (step < 10) ? (dy * step/10.0) : dy;
+ // F2[i*N+N-1] = dy;
+ F2[i*N+N-2] = (step < 10) ? 0.0 : (step-10)*deltat*dxv;
+ // F2[i*N+N-1] = dy+dy*3*step/nb_step;
+ }
+
+ if (start_standard_solver) { /* the standard solver */
+ iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+ standard_solver(MS, *pfinal_model, DIRICHLET, F2, iter);
+
+ if (iter.converged()) {
+ convergence = 1;
+ }
+ else {
+ cout << "the standard solver has failed, ";
+ if (convergence == 0) /* the initial approximation was given by the continuation */
+ convergence = - 2;
+ }
+
+ } // the standard solver
+
+ if (convergence == -1) {
+ /* the solution has not been found by the standard solver;
+ proceed with continuation -- the continuation parameter XI is such that
+ the actual Dirichlet condition (load) is F2_start + XI * (F2 - F2_start) */
+
+ cout << "starting to continue" << endl;
+ GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0, "The continuation only "
+ "implemented for the Dirichlet condition with multipliers");
+ GMM_ASSERT1(!is_dynamic,
+ "The continuation is proposed only for a quasi-static case");
+
+ scalar_type difference = PARAM.real_value("DIFFERENCE");
+ if (difference == 0.) difference = 1e-10;
+ scalar_type minangle = PARAM.real_value("ANGLE");
+ scalar_type limit = PARAM.real_value("LIMIT", "limit for the test functions");
+ size_type maxit_corr = PARAM.int_value("MAXITER_CORR");
+ size_type thr_corr = PARAM.int_value("THRESHOLD_CORR");
+ size_type nb_step_cont = PARAM.int_value("NBSTEP_CONT");
+
+ short new_point;
+ scalar_type XI0;
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ size_type ind = DIRICHLET.first_ind();
+ size_type sc = gmm::vect_size(DIRICHLET.get_CRHS());
+ plain_vector UT_init(nbc*(N-1)), U_init(nb_dof_rhs * N), F2_start(nb_dof_rhs * N),
+ F2_end = F2, deltaF2(nb_dof_rhs * N), grad_XI(stot), X0(stot+1), X(stot+1),
+ T0(stot+1), T(stot+1), VM(mf_vm.nb_dof());;
+ gmm::dense_matrix<bool> CH(nbc, 3), CH0(nbc, 3);
+ gmm::dense_matrix<scalar_type> TST0(nbc, 3);
+
+ while (convergence == -1 && range_cont < step + 1) {
+ cout << "Continuation " << step - range_cont + 1 << " -> " << step + 1 << endl;
+
+ char s[100]; sprintf(s, "step%d", step - range_cont + 1);
+ gmm::vecload(datafilename + s + ".U", U_init);
+ FRICTION.set_WT(gmm::scaled(U_init, -1.0));
+ gmm::mult(BT, U_init, UT_init);
+
+ gmm::copy(F2_end, deltaF2);
+ gmm::vecload(datafilename + s + ".F2", F2_start);
+ gmm::add(gmm::scaled(F2_start, -1.0), deltaF2);
+ DIRICHLET.rhs().set(deltaF2);
+ pfinal_model->compute_tangent_matrix(MS);
+ gmm::copy(DIRICHLET.get_CRHS(),
+ gmm::sub_vector(grad_XI, gmm::sub_interval(ind, sc)));
+ gmm::scale(grad_XI, -1.0);
+
+ new_point = -1;
+ if (step0_cont == 0 && (range_cont == 1 && X0filename.size() == 0)) {
+ /* the starting point together with the corresponding tangent is given by
+ the solution from the previous time step */
+ cout << "the starting point is given by the solution "
+ << "from the previous time step" << endl;
+ sprintf(s, "step%d", step);
+ gmm::vecload(datafilename + s + ".Y", MS.state());
+ gmm::vecload(datafilename + s + ".U", U);
+ gmm::vecload(datafilename + s + ".UN", UN);
+ gmm::vecload(datafilename + s + ".UT", UT);
+ gmm::vecload(datafilename + s + ".LN", LN1);
+ gmm::vecload(datafilename + s + ".LT", LT1);
+ gmm::vecload(datafilename + s + ".VM", VM);
+ sprintf(s, "step%d", step - 1);
+ gmm::vecload(datafilename + s + ".UT", UT0);
+ gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot)));
+ XI0 = X0[stot] = 1. - 1. / range_cont;
+
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH0, TST0,
+ noisy);
+ // TST0 will not be up-to-date in the 1st iteration!!
+ DIRICHLET.rhs().set(F2_start);
+ FRICTION.set_character_matrix(CH0);
+ pfinal_model->compute_tangent_matrix(MS);
+ gmm::fill_random(T0);
+ compute_tangent(MS.tangent_matrix(), grad_XI, T0, noisy);
+ if (T0[stot] < 0) gmm::scale(T0, -1.0);
+ FRICTION.clear_character_matrix();
+
+ new_point = 1;
+ } else {
+ if (step0_cont == 0) {
+ if (range_cont > 1) {
+ /* an approximation of the starting point is given by
+ the solution from the previous time step */
+ cout << "an approximation of the starting point is given by "
+ << "the solution from the previous time step" << endl;
+ sprintf(s, "step%d", step);
+ gmm::vecload(datafilename + s + ".Y", MS.state());
+ XI0 = X0[stot] = 1. - 1. / range_cont;
+ } else {
+ /* an approximation of the starting point is loaded from a given file */
+ cout << "an approximation of the starting point is loaded" << endl;
+ gmm::vecload(X0filename, X0);
+ gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+ XI0 = X0[stot];
+ }
+
+ cout << "XI0 = " << XI0 << endl;
+ cout << "correcting the starting point" << endl;
+ gmm::copy(F2_start, F2);
+ gmm::add(gmm::scaled(deltaF2, XI0), F2);
+ iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+ standard_solver(MS, *pfinal_model, DIRICHLET, F2, iter);
+
+ if (iter.converged()) {
+ gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot)));
+ X0[stot] = XI0;
+
+ /* the tangent is computed in the standard manner */
+ pfinal_model->compute_tangent_matrix(MS);
+ gmm::fill_random(T0);
+ compute_tangent(MS.tangent_matrix(), grad_XI, T0, noisy);
+ if (T0[stot] < 0) gmm::scale(T0, -1.0);
+
+ new_point = 1;
+ }
+ } else {
+ /* the starting point is loaded together with the corresponding tangent */
+ cout << "the starting point is loaded" << endl;
+ char s1[100]; sprintf(s1, "step%d", step + 1);
+ char s2[100]; sprintf(s2, "_%d", range_cont);
+ char s3[100]; sprintf(s3, "_%d", step0_cont);
+ gmm::vecload(datafilename + s1 + s2 + s3 + ".X", X0);
+ gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+ XI0 = X0[stot];
+ gmm::vecload(datafilename + s1 + s2 + s3 + ".T", T0);
+ new_point = 1;
+ }
+
+ if (new_point == 1) {
+ compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U,
+ law_num);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+ gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1, LT1, CH0, TST0,
+ noisy + 1);
+ compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+ }
+ }
+
+ if (new_point == 1 && step0_cont == 0){
+ char s1[100]; sprintf(s1, "step%d", step + 1);
+ char s2[100]; sprintf(s2, "_%d", range_cont);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.U", U);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.UN", UN);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.UT", UT);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.LN", LN1);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.LT", LT1);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.X", X0);
+ gmm::vecsave(datafilename + s1 + s2 + "_0.VM", VM);
+ }
+
+ size_type nb_dec;
+ selections sel;
+ iteration_corr iter_corr;
+ size_type step_cont = step0_cont;
+ h_init /= range_cont; h_max /= range_cont; h_min /= range_cont;
+ h_change /= range_cont; maxdist /= range_cont;
+
+ while (new_point == 1 && gmm::abs(XI_end - XI0) > maxdist && -XI0 < step
+ && step_cont < nb_step_cont) {
+ cout << "beginning of step " << step + 1 << "_" << range_cont << "_"
+ << step_cont + 1 << ", number of variables : " << stot + 1<< endl;
+ nb_dec = 0;
+
+ do { /* seek a new point */
+ new_point = -1;
+ cout << "XI0 = " << XI0 << ", h = " << h << ", deltaXI = " << h * T0[stot]
+ << endl;
+
+ gmm::copy(X0, X); gmm::copy(T0, T);
+ gmm::add(gmm::scaled(T, h), X);
+
+ iter_corr = iteration_corr(residual, difference, noisy,
+ maxit_corr ? maxit_corr : 40000);
+ Newton_correction(MS, *pfinal_model, DIRICHLET, grad_XI, F2_start, deltaF2,
+ X, T, iter_corr);
+
+ if (iter_corr.converged()) {
+ compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U,
+ law_num);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+ gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+ size_type nb_change;
+ if (step_cont == 0 && (range_cont == 1 && X0filename.size() == 0)) {
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1, LT1, CH0,
+ CH, TST, x_min, noisy + 1);
+ nb_change = 0;
+ } else
+ nb_change = compute_activity(FRICTION, contact_nodes, UN, UT, UT_init, LN1,
+ LT1, CH0, CH, TST, x_min, noisy - 1);
+
+ scalar_type XI = X[stot], angle = gmm::vect_sp(T0, T);
+ cout << "XI = " << XI << ", XI - XI0 = " << XI - XI0 << ", T0.T = "
+ << angle;
+ if (((nb_change == 0 && angle >= minangle)
+ || ((nb_change == 1 && h <= h_change) || step_cont == 0))
+ && XI <= XI_end + maxdist) {
+// && XI >= XI_end - maxdist) {
+ char s1[100]; sprintf(s1, "step%d", step + 1);
+ char s2[100]; sprintf(s2, "_%d", range_cont);
+ char s3[100]; sprintf(s3, "_%d", step_cont+1);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".U", U);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".UN", UN);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".UT", UT);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".LN", LN1);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".LT", LT1);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".X", X);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".T", T);
+
+ compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+ gmm::vecsave(datafilename + s1 + s2 + s3 + ".VM", VM);
+
+ XI0 = XI; gmm::copy(X, X0); gmm::copy(T, T0); gmm::copy(CH, CH0);
+ gmm::copy(TST, TST0);
+ if ((nb_dec == 0) && (iter_corr.get_iteration() <= thr_corr))
+ h = (h_inc * h < h_max) ? h_inc * h : h_max;
+ sel.clear(); new_point = 1;
+
+ cout << endl << "end of Step n° " << step + 1 << "_" << range_cont << "_"
+ << step_cont + 1 << endl;
+ }
+ else
+ cout << " - the point rejected" << endl;
+ }
+
+ if (new_point <= 0) {
+ if (h > h_min) {
+ h = (h_dec * h > h_min) ? h_dec * h : h_min;
+ ++nb_dec;
+ new_point = 0;
+ } else { /* try to change the Jacobian */
+ if (sel.empty()) {
+ cout << "classical continuation has broken down, "
+ << "starting searching for a new Jacobian" << endl;
+ sel.proper_update(contact_nodes, CH0, TST0, limit, noisy);
+ }
+ gmm::copy(T0, T);
+ if (sel.compute_new_tangent(MS, *pfinal_model, DIRICHLET, FRICTION,
+ contact_nodes, grad_XI, F2_start, deltaF2,
+ X0, T, CH0, noisy)) {
+ gmm::add(gmm::sub_vector(X0, gmm::sub_interval(0, stot)),
+ gmm::sub_vector(T, gmm::sub_interval(0, stot)), MS.state());
+ compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin,
+ U, law_num);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT);
+ gmm::copy(FRICTION.get_LN(MS), LN1);
+ gmm::copy(FRICTION.get_LT(MS), LT1);
+ sel.determine_tangent_orientation(FRICTION, UN, UT, UT_init, LN1, LT1,
+ T);
+ cout << "T0.T = " << gmm::vect_sp(T0, T) << endl;
+ gmm::copy(T, T0);
+
+ h = h_init; nb_dec = 0;
+ new_point = 0;
+ }
+ }
+ }
+ } while (new_point == 0);
+
+ ++step_cont;
+ } // the main loop of continuation
+
+ if (new_point == 1 && gmm::abs(XI_end - XI0) <= maxdist) {
+ start_standard_solver = true; convergence = 0;
+ range_cont = 1; XI_end = 1.;
+ cout << "stop continuing, restarting the standard solver"
+ << " with a new initial approximation" << endl;
+ } else {
+ h = h_init = h_init * range_cont; h_max *= range_cont;
+ h_min *= range_cont; h_change *= range_cont; maxdist *= range_cont;
+ range_cont += (range_cont == 1) ? 1 : range_cont_inc;
+ h /= range_cont;
+ }
+ step0_cont = 0; X0filename = "";
+
+ } // loop of continuations for different values of range_cont
+
+ } // continuation
+
+ } while (convergence == 0);
+
+ if (convergence == 1) { /* solution in the actual step has been found */
+
+ compute_displacement(MS, *pfinal_model, *pl, *pELAS_nonlin, *pELAS_lin, U, law_num);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+ gmm::copy(FRICTION.get_LN(MS), LN1); gmm::copy(FRICTION.get_LT(MS), LT1);
+ if (step == step0)
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH_, TST,
+ noisy + 1);
+ else
+ compute_activity(FRICTION, contact_nodes, UN, UT, UT0, LN1, LT1, CH0_, CH_, TST,
+ x_min, noisy);
+
+ // gmm::copy(FRICTION.get_LN(MS), LN1);
+ // gmm::copy(FRICTION.get_LT(MS), LT1);
+
+ // {
+ // gmm::iteration itercg(1e-12, 1);
+ // plain_vector LLN(nbc), LLT(nbc*(N-1));
+ // gmm::cg(MMBN, LLN, LN1, gmm::identity_matrix(), itercg);
+ // itercg.init();
+ // gmm::cg(MMBT, LLT, LT1, gmm::identity_matrix(), itercg);
+ // }
+ /* cout << "LT1 = " << LT1 << endl;
+ cout << "LN1 = " << LN1 << endl;
+ */
+
+
+ // plain_vector LT2(nbc);
+ // maxT[step]=-LT1[0];
+ // maxN[step]=-LN1[0];
+ // Calculating forces on contact nodes and total contact pressure
+ // for (int y = 0; y < nbc; ++y) {
+ //
+ // if (N>2)
+ // LT2[y] = sqrt(LT1[N*y]*LT1[N*y] + LT1[N*y +1]*LT1[N*y +1]);
+ //
+ //
+ // if (N<3)
+ // LT2[y]=LT1[y];
+ //
+ // // if (LT2[y]> maxT[step])
+ // // maxT[step]=-LT2[y];
+ // //
+ // // if (LN1[y]> maxN[step])
+ // // maxN[step]=-LN1[y];
+ //
+ //
+ // SumT[step]+= -LT2[y];
+ // SumN[step]+= -LN1[y];
+ // Pressure[step]+= SumN[step]/(LX*LY);
+ // }
+ // cout << "Tu vas marcher BORDEL 3 \n";
+ // // max[step]=sqrt(maxN[step]*maxN[step]+maxT[step]*maxT[step]);
+ //
+ //
+ // cout << "\n \n \n normal contact pressure " << Pressure << endl;
+ // cout << "\n Total force along normal " << SumN << endl;
+ // cout << "\n Total force along tangential plane " << SumT << endl;
+ //
+ // gmm::vecsave(datafilename + ".SumT",SumT);
+ // gmm::vecsave(datafilename + ".SumN",SumN);
+ // // cout << "LT2 = " << LT2 << endl;
+ // cout << "LN2 = " << LN1 << endl;
+
+ // cout << "CN = " << FRICTION.get_LN(MS) << endl;
+
+ // plain_vector UN(gmm::mat_nrows(BN));
+ // gmm::mult(BN, U, UN);
+ // cout << "UN = " << UN << endl;
+
+ char s[100]; sprintf(s, "step%d", step+1);
+ gmm::vecsave(datafilename + s + ".F2", F2);
+ gmm::vecsave(datafilename + s + ".U", U);
+ gmm::vecsave(datafilename + s + ".Y", MS.state());
+ gmm::vecsave(datafilename + s + ".UN", UN);
+ gmm::vecsave(datafilename + s + ".UT", UT);
+ gmm::vecsave(datafilename + s + ".LN", LN1);
+ gmm::vecsave(datafilename + s + ".LT", LT1);
+
+
+ plain_vector VM(mf_vm.nb_dof());
+ compute_von_Mises(MS, *pELAS_nonlin, *pELAS_lin, mf_vm, VM, law_num);
+ gmm::vecsave(datafilename + s + ".VM", VM);
+
+ if (is_dynamic) {
+ gmm::add(U, gmm::scaled(U0, -1.0), V0);
+ gmm::scale(V0, 1./deltat);
+ gmm::vecsave(datafilename + s + ".V", V0);
+ }
+
+ gmm::copy(U, U0); gmm::copy(CH_, CH0_);
+ cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+
+ // if (max[step]> Fmax)
+ // Fmax = max[step];
+
+ } else /* solution has not been found */
+ break;
+
+ } // the main cycle
+
+// cout << "end of all steps \n" ;
+ if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;
+ /* plain_vector VM(mf_u.nb_dof());
+ cout << "calcul von mises\n";
+ calcul_von_mises(mf_u, U0, mf_vm, VM, mu);
+ cout << "Fin calcul von mises\n";
+ */
+
+ return (convergence == 1);
+
+}
+
+
+/**************************************************************************/
+/* main program. */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ // try {
+ friction_problem p;
+ p.PARAM.read_command_line(argc, argv);
+ p.init();
+ p.mesh.write_to_file(p.datafilename + ".mesh");
+ p.mf_u.write_to_file(p.datafilename + ".mf", true);
+ p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
+ p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
+ plain_vector U(p.mf_u.nb_dof());
+ if (!p.solve(U)) cerr << "Solve has failed\n";
+ if (p.PARAM.int_value("VTK_EXPORT")) {
+ cout << "export to " << p.datafilename + ".vtk" << "..\n";
+ getfem::vtk_export exp(p.datafilename + ".vtk",
+ p.PARAM.int_value("VTK_EXPORT")==1);
+ exp.exporting(p.mf_u);
+ exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
+ cout << "export done, you can view the data file with (for example)\n"
+ "mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
+ "WarpVector -m BandedSurfaceMap -m Outline &\n";
+ }
+ // } GMM_STANDARD_CATCH_ERROR;
+
+ return 0;
+
+}
diff --git a/contrib/contact_grd_trans/contact_continuation_time.cc b/contrib/contact_grd_trans/contact_continuation_time.cc
new file mode 100644
index 0000000..7c80c3e
--- /dev/null
+++ b/contrib/contact_grd_trans/contact_continuation_time.cc
@@ -0,0 +1,1284 @@
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ @file contact_continuation_time.cc
+ @brief Nonlinear Problem with Friction(large strain).
+
+ A rubber bar is submitted to a large torsion. An attempt to compute
+ the solution by numerical continuation w.r.t. time. Not too
+ satisfactory because the structure of retrograde branches seems to
+ be very complicated (each sliding point may get stuck).
+
+ NOTE: In the case of neg_deltat = 0 the absolut value of deltat is
+ set in the friction condition, in the opposite case deltat is used
+ instead; in fact, neg_deltat = 0 should correspond to the case when
+ the term deltat does not occur in the denominator of the friction
+ condition whereas neg_deltat = 1 should correspond to the case when
+ it occurs there; however, in both cases the derivative with respect
+ to time is zero in the rows corresponding to the friction
+ conditions and both cases are actually some mixture of the
+ possibilities described above.
+ In the case of possibly more active functions when seeking a new
+ Jacobian, all possibilities are tested. Moreover, instead of using
+ some criterion for determining direction of a new tangent when
+ changing the Jacobian, both directions are tested --- unefficient.
+
+ This program is used to check that getfem++ is working. This is
+ also a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type; /* = unsigned long */
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+/*
+ structure for the frictional problem
+*/
+struct friction_problem {
+
+ enum { DIRICHLET_BOUNDARY_NUM = 0, FRICTION_BOUNDARY_NUM = 1, NEUMANN_BOUNDARY_NUM = 2};
+ getfem::mesh mesh; /* the mesh */
+ getfem::mesh_im mim; /* the integration methods */
+ getfem::mesh_fem mf_u; /* main mesh_fem, for the elastostatic solution */
+ getfem::mesh_fem mf_p; /* mesh_fem for the pressure. */
+ getfem::mesh_fem mf_rhs; /* mesh_fem for the right hand side (f(x),..) */
+ getfem::mesh_fem mf_coef; /* mesh_fem used to represent pde coefficients */
+ getfem::mesh_fem mf_vm; /* mesh_fem used for the VonMises stress */
+ scalar_type p1, p2, p3; /* elastic coefficients. */
+ scalar_type LX, LY, LZ; /* system dimensions */
+ scalar_type lambda, mu; /* Lame coefficients. */
+ scalar_type residual; /* max residual for the iterative solvers */
+ std::string datafilename;
+ bgeot::md_param PARAM;
+
+ bool solve(plain_vector &U);
+ void init(void);
+ friction_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh), mf_rhs(mesh), mf_coef(mesh), mf_vm(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ and integration methods and selects the boundaries.
+
+ (this is boilerplate code, not very interesting)
+ */
+void friction_problem::init(void) {
+ std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
+ std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P","FEM name for the pressure");
+ std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+ "Name of integration method");
+ cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+ /* First step : build the mesh */
+ bgeot::pgeometric_trans pgt =
+ bgeot::geometric_trans_descriptor(MESH_TYPE);
+ size_type N = pgt->dim();
+ std::vector<size_type> nsubdiv(N);
+ std::fill(nsubdiv.begin(),nsubdiv.end(),
+ PARAM.int_value("NX", "Number of space steps "));
+ nsubdiv[1] = PARAM.int_value("NY") ? PARAM.int_value("NY") : nsubdiv[0];
+ if (N>2) nsubdiv[2] = PARAM.int_value("NZ") ? PARAM.int_value("NZ") : nsubdiv[0];
+ getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+ PARAM.int_value("MESH_NOISED") != 0);
+
+ LX = PARAM.real_value("LX", "Length along X axis");
+ LY = PARAM.real_value("LY", "Length along Y axis");
+ LZ = PARAM.real_value("LZ", "Length along Z axis");
+ int nb_refine = PARAM.int_value("NBREFINE");
+ lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+ mu = PARAM.real_value("MU", "Lame coefficient mu");
+ bgeot::base_matrix M(N,N);
+ for (size_type i=0; i < N; ++i) {
+ static const char *t[] = {"LX","LY","LZ"};
+ M(i,i) = (i<3) ? PARAM.real_value(t[i],t[i]) : 1.0;
+ }
+ if (N>1) { M(0,1) = PARAM.real_value("INCLINE") * PARAM.real_value("LY"); }
+
+ /* scale the unit mesh to [LX,LY,..] and incline it */
+ mesh.transformation(M);
+
+ if (nb_refine > 0) { /* refinement in the right-bottom corner */
+ scalar_type layerx, layerz;
+ dal::bit_vector cvref;
+ layerx = 0.201; layerz = 1.5 * layerx;
+ for (int i=0; i < nb_refine; ++i) {
+ cvref.clear();
+ for (dal::bv_visitor j(mesh.convex_index()); !j.finished(); ++j) {
+ if ((mesh.points_of_convex(j)[0][0] > LX*(1-layerx))
+ && (mesh.points_of_convex(j)[1][0] > LX*(1-layerx))
+ && (mesh.points_of_convex(j)[2][0] > LX*(1-layerx))
+ && (mesh.points_of_convex(j)[0][N-1] < LZ*layerz)
+ && (mesh.points_of_convex(j)[1][N-1] < LZ*layerz)
+ && (mesh.points_of_convex(j)[2][N-1] < LZ*layerz))
+ cvref.add(j);
+ }
+ mesh.Bank_refine(cvref);
+ layerx = 0.5 * layerx;
+ if (i < 9) layerz = 0.5 * layerz;
+ }
+ }
+
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+ residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+ p1 = PARAM.real_value("P1", "First Elastic coefficient");
+ p2 = PARAM.real_value("P2", "Second Elastic coefficient");
+ p3 = PARAM.real_value("P3", "Third Elastic coefficient");
+
+ mf_u.set_qdim(bgeot::dim_type(N));
+
+ /* set the finite element on the mf_u */
+ getfem::pfem pf_u =
+ getfem::fem_descriptor(FEM_TYPE);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor(INTEGRATION);
+
+ mim.set_integration_method(ppi);
+ mf_u.set_finite_element(pf_u);
+
+ mf_p.set_finite_element(getfem::fem_descriptor(FEM_TYPE_P));
+
+ /* set the finite element on mf_rhs (same as mf_u if DATA_FEM_TYPE is
+ not used in the .param file */
+ std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+ if (data_fem_name.size() == 0) {
+ GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+ ". In that case you need to set "
+ << "DATA_FEM_TYPE in the .param file");
+ mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+ } else {
+ mf_rhs.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(data_fem_name));
+ }
+
+ /* set the finite element on mf_coef. Here we use a very simple element
+ * since the only function that need to be interpolated on the mesh_fem
+ * is f(x)=1 ... */
+ mf_coef.set_finite_element(mesh.convex_index(),
+ getfem::classical_fem(pgt,0));
+
+ mf_vm.set_classical_discontinuous_finite_element(1);
+
+ /* set boundary conditions
+ * (Dirichlet on the upper face, contact on the bottom face
+ * and on parts of the adjacent faces, Neumann elsewhere) */
+ cout << "Selecting Dirichlet, Neumann and contact boundaries\n";
+ getfem::mesh_region border_faces;
+ getfem::outer_faces_of_mesh(mesh, border_faces);
+ for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+ assert(it.is_face());
+ base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+ un /= gmm::vect_norm2(un);
+ if (gmm::abs(un[N-1] - 1.0) < 1.0E-7) {
+ mesh.region(DIRICHLET_BOUNDARY_NUM).add(it.cv(),it.f());
+ } else if (gmm::abs(un[N-1] + 1.0) < 1.0E-7) {
+ mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+ } else if (mesh.points_of_convex(it.cv())[0][N-1] < LZ*0.3) {
+ mesh.region(FRICTION_BOUNDARY_NUM).add(it.cv(),it.f());
+ }
+ }
+}
+
+/* The Iteration object for corrections; to accelerate the
+ computation, heuristics is used if anglemin is used */
+class iteration_corr {
+ size_type maxiter; /* Max. number of iterations. */
+ int noise; /* if noise > 0 iterations are printed. */
+ double resmax; /* maximum residual. */
+ double diffmax; /* maximum difference. */
+ double anglemin; /* minimum angle. */
+ size_type nit; /* iteration number. */
+ double res; /* last computed residual. */
+ double diff; /* last computed difference. */
+ double angle; /* last computed angle. */
+public:
+ void init(void) {
+ nit = 0; res = 0.0; diff = 0.0; angle = 0.0;
+ }
+
+ iteration_corr(double r = 1.0E-8, double d = 1.0E-8, int noi = 0,
+ size_type mit = size_type(-1), double a = - 2.0)
+ : maxiter(mit), noise(noi), resmax(r), diffmax(d), anglemin(a) { init(); }
+
+ void operator ++(int) { nit++; }
+
+ int get_noisy(void) const { return noise; }
+ void set_res(double r) { res = r; }
+ void set_diff(double d) { diff = d; }
+ void set_angle(double a) { angle = a; }
+ size_type get_iteration(void) const { return nit; }
+ void set_iteration(size_type i) { nit = i; }
+
+ bool converged(void) { return ((res <= resmax) && (diff <= diffmax)); }
+
+ bool finished(void) {
+ if (noise > 0) {
+ cout << "iter " << nit << " residual " << gmm::abs(res)
+ << " difference " << gmm::abs(diff);
+ if (anglemin >= -1.0)
+ cout << " angle = " << angle;
+ cout << endl;
+ }
+ return ((nit >= maxiter) || converged() || ((nit == 1) && (angle < anglemin)));
+ }
+};
+
+template<typename MAT>
+void compute_condition_number(const MAT &M) {
+/* computes the smallest and the largest eigenvalue of the matrix M
+ and consequently its condition number */
+
+ size_type N = gmm::mat_nrows(M);
+ plain_vector V(N), U(N), W(N);
+ plain_vector V2(N), U2(N);
+ gmm::fill_random(V);
+ gmm::fill_random(V2);
+ scalar_type lambda = 0., lambda2 = 0.;
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(M);
+
+ for(size_type i = 0; i < 100; ++i) {
+ gmm::scale(V, 1./gmm::vect_norm2(V));
+ gmm::scale(V2, 1./gmm::vect_norm2(V2));
+ SLU.solve(U, V);
+ gmm::mult(M, V2, U2);
+
+ lambda = gmm::vect_sp(U, V) / gmm::vect_sp(V, V);
+ lambda2 = gmm::vect_sp(U2, V2) / gmm::vect_sp(V2, V2);
+
+ gmm::add(V, gmm::scaled(U, -1./lambda), W);
+// if (i > 90)
+// cout << "iteration " << i << " norm(W) = " << gmm::vect_norm2(W)
+// << " lambda = " << lambda
+// << " lambda2 = " << lambda2 << endl;
+ if (gmm::vect_norm2(W) < 1E-2) break;
+
+ gmm::copy(U, V);
+ gmm::copy(U2, V2);
+ }
+
+ // cout << "Smallest eigenvalue : " << 1.0/lambda << endl;
+ // cout << "Largest eigenvalue : " << lambda2 << endl;
+ cout << "Condition number: " << lambda2 * lambda << endl;
+
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void compute_tangent(const MAT &A, const VECT1 &B, VECT2 &T, int noisy) {
+/* computes a unit tangent at the point X to the curve given implicitly by the equation H = 0
+ with the Jacobian grad H(X) = (A|B) which is positively oriented w.r.t. the vector T
+ and saves it into T, i.e.:
+ solves (A|B)T_+ = 0 & T.T_+ = 1;
+ sets T = T_+ / ||T_+||; */
+
+ bool singular_A = false;
+ size_type N = gmm::mat_nrows(A);
+ double rcond;
+
+ try { /* whether A is singular; if not, the calculation can be accelerated provided that
+ A is sparse */
+ scalar_type sp;
+ plain_vector Y(N);
+ if (noisy > 1) cout << "starting computing tangent" << endl;
+
+ gmm::SuperLU_solve(A, Y, B, rcond);
+ sp = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y);
+
+ T[N] = 1.0 / (T[N] - sp);
+ gmm::copy(gmm::scaled(Y, -1.0*T[N]),
+ gmm::sub_vector(T, gmm::sub_interval(0, N)));
+ }
+ catch (...) {
+ singular_A = true;
+ }
+
+ if (singular_A) {
+ sparse_matrix C(N+1, N+1);
+ plain_vector R(N+1);
+
+ gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+ gmm::copy(gmm::col_vector(B),
+ gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+ gmm::copy(gmm::row_vector(T),
+ gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+ gmm::clear(R);
+ R[N] = 1.0;
+
+ gmm::SuperLU_solve(C, T, R, rcond);
+ }
+
+ gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+}
+
+template<typename MAT, typename VECT1, typename VECT2>
+void correction_solver
+(const MAT &A, const VECT1 &B, VECT2 &X, VECT2 &T, const VECT1 &P, iteration_corr &iter) {
+/* computes one correction step of the Moore-Penrose method for continuing the implicit curve
+ H = 0 with P = H(X), (A|B) = grad H(X), X and T being the approximations of the point
+ and the tangent, respectively, i.e.:
+ solves (A|B)T_+ = 0 & T.T_+ = 1;
+ solves (A|B)dX = P; T.dX = 0;
+ sets X = X - dX;
+ sets T = T_+ / ||T_+||; */
+
+ bool singular_A = false;
+ size_type N = gmm::mat_nrows(A);
+ plain_vector dX(N+1), T0 = T;
+
+ try { /* whether A is singular; if not, the calculation can be accelerated provided that
+ A is sparse */
+ scalar_type sp1, sp2;
+ plain_vector Y1(N), Y2(N);
+
+ compute_condition_number(A);
+
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(A);
+ SLU.solve(Y1, B);
+ SLU.solve(Y2, P);
+
+ sp1 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y1);
+ sp2 = gmm::vect_sp(gmm::sub_vector(T, gmm::sub_interval(0,N)), Y2);
+
+ dX[N] = sp2 / (sp1 - T[N]);
+ gmm::add(gmm::scaled(Y1, -1.0*dX[N]), Y2);
+ gmm::copy(Y2, gmm::sub_vector(dX, gmm::sub_interval(0, N)));
+
+ T[N] = 1.0 / (T[N] - sp1);
+ gmm::copy(gmm::scaled(Y1, -1.0*T[N]),
+ gmm::sub_vector(T, gmm::sub_interval(0, N)) );
+ }
+ catch (...) {
+ singular_A = true;
+ }
+
+
+ try {
+ if (singular_A) {
+ plain_vector Q(N+1), R(N+1);
+ sparse_matrix C(N+1, N+1);
+
+ gmm::copy(A, gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(0, N)));
+ gmm::copy(gmm::col_vector(B),
+ gmm::sub_matrix(C, gmm::sub_interval(0, N), gmm::sub_interval(N, 1)));
+ gmm::copy(gmm::row_vector(T),
+ gmm::sub_matrix(C, gmm::sub_interval(N, 1), gmm::sub_interval(0, N+1)));
+
+ gmm::copy(P, gmm::sub_vector(Q, gmm::sub_interval(0, N)));
+ Q[N] = 0.0;
+
+ gmm::clear(R);
+ R[N] = 1.0;
+
+ gmm::SuperLU_factor<scalar_type> SLU;
+ SLU.build_with(C);
+ SLU.solve(dX, Q);
+ SLU.solve(T, R);
+ }
+ }
+ catch (...) {
+ cout << "SuperLU failed!" << endl;
+ }
+
+ gmm::add(gmm::scaled(dX, -1.0), X);
+ gmm::scale(T, 1.0/gmm::vect_norm2(T));
+
+ iter.set_diff(gmm::vect_norm2(dX));
+ iter.set_angle(gmm::vect_sp(T, T0));
+
+}
+
+template<typename MODEL_STATE>
+void Newton_correction
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const plain_vector &grad_t,
+ const plain_vector &F2_init, const plain_vector &deltaF2, plain_vector &X, plain_vector &T,
+ scalar_type t0, bool neg_deltat, iteration_corr &iter) {
+
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ scalar_type deltat = X[stot] - t0, t;
+ plain_vector F2 = F2_init;
+
+ gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+ t = X[stot];
+
+ deltat = t - t0; if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+ FRICTION.set_beta(1./deltat);
+ // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+
+ gmm::add(gmm::scaled(deltaF2, t), F2);
+ problem.rhs().set(F2);
+
+ problem.compute_residual(MS);
+
+ do {
+ if (iter.get_noisy() > 1)
+ cout << "starting computing tangent matrix" << endl;
+ problem.compute_tangent_matrix(MS);
+
+ if (iter.get_noisy() > 1)
+ cout << "starting linear solver" << endl;
+ correction_solver(MS.tangent_matrix(), grad_t, X, T, MS.residual(), iter);
+ if (iter.get_noisy() > 1)
+ cout << "linear solver done" << endl;
+
+ gmm::copy(gmm::sub_vector(X, gmm::sub_interval(0, stot)), MS.state());
+ t = X[stot];
+
+ deltat = t - t0; if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+ FRICTION.set_beta(1./deltat);
+ // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+
+ gmm::copy(F2_init, F2);
+ gmm::add(gmm::scaled(deltaF2, t), F2);
+ problem.rhs().set(F2);
+
+ problem.compute_residual(MS);
+ iter.set_res(gmm::vect_norm2(MS.residual()));
+
+ iter++;
+ } while (!iter.finished());
+}
+
+template<typename MODEL_STATE>
+void compute_displacement
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::abstract_hyperelastic_law *pl,
+ getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> *pELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> *pELAS_lin, plain_vector &U,
+ size_type law_num) {
+
+ if (law_num < 4) {
+ pl->reset_unvalid_flag();
+ problem.compute_residual(MS);
+ if (pl->get_unvalid_flag())
+ GMM_WARNING1("The solution is not completely valid, the determinant "
+ "of the transformation is negative on "
+ << pl->get_unvalid_flag() << " Gauss points");
+
+ gmm::copy(pELAS_nonlin->get_solution(MS), U);
+ } else
+ gmm::copy(pELAS_lin->get_solution(MS), U);
+}
+
+template<typename MODEL_STATE>
+void compute_Von_Mises
+(MODEL_STATE &MS, getfem::mdbrick_nonlinear_elasticity<MODEL_STATE> *pELAS_nonlin,
+ getfem::mdbrick_isotropic_linearized_elasticity<MODEL_STATE> *pELAS_lin,
+ getfem::mesh_fem &mf_vm, plain_vector &VM, size_type law_num) {
+ /* computes the Von Mises stress from the solution */
+ if (law_num < 4)
+ pELAS_nonlin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+ else
+ pELAS_lin->compute_Von_Mises_or_Tresca(MS, mf_vm, VM, false);
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+void test_functions
+(MODEL_STATE &MS, getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION,
+ const VECT &contact_nodes, const sparse_matrix &BN, const sparse_matrix &BT,
+ const plain_vector &U, const plain_vector &U0, MATRIX &TST, scalar_type limit, int noisy) {
+ /* saves the values of the test functions at the solution given by
+ MS.state() and U into TST */
+
+ size_type nb_dof_N = gmm::mat_nrows(BN), nb_dof_T = gmm::mat_nrows(BT);
+ scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+ plain_vector gap(nb_dof_N), friction_coef(nb_dof_N);
+ plain_vector UN(nb_dof_N), UT(nb_dof_T), UT0(nb_dof_T), LN(nb_dof_N), LT(nb_dof_T);
+
+ gmm::copy(FRICTION.get_gap(), gap); gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+ gmm::copy(FRICTION.get_LN(MS), LN); gmm::copy(FRICTION.get_LT(MS), LT);
+
+ if (noisy > 1)
+ cout << "characters, eventually limit values of the test functions:" << endl;
+
+ for (size_type i = 0; i < nb_dof_N; ++i) {
+ TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
+ TST(i, 1) = - friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+ TST(i, 2) = friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+
+ if (noisy > 1) {
+ cout << "node " << i << ": " << contact_nodes[i] << " "
+ << (TST(i, 0) <= 0) << (TST(i, 1) >= 0) << (TST(i, 2) <= 0) << " ";
+
+ for (size_type j = 0; j < 3; ++j){
+ if (gmm::abs(TST(i,j)) <= limit && (j == 0 || (j > 0 && TST(i,0) <= limit)))
+ cout << " ("<< j + 1 << "-th component close to the limit: " << TST(i,j) << ") ";
+ }
+
+ cout << endl;
+
+// cout << "LN[i] = " << LN[i]
+// << ", r * alpha * (UN[i] - gap[i]) = " << r * alpha * (UN[i] - gap[i])
+// << ", - friction_coef[i] * LN[i] + LT[i] = "
+// << -friction_coef[i] * LN[i] + LT[i]
+// << ", friction_coef[i] * LN[i] + LT[i] = "
+// << friction_coef[i] * LN[i] + LT[i]
+// << ", r * beta * (UT[i]-UT0[i]) = "
+// << r * beta * (UT[i]-UT0[i]) << endl;
+ }
+ }
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+size_type test_functions
+(MODEL_STATE &MS, getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION,
+ const VECT &contact_nodes, const sparse_matrix &BN, const sparse_matrix &BT,
+ const plain_vector &U, const plain_vector &U0, MATRIX &TST, MATRIX &TST0,
+ scalar_type limit, int noisy) {
+ /* saves the values of the test functions at the solution given by
+ MS.state() and U into TST; moreover, returns the number of
+ changes in comparison with TST0 */
+
+ size_type nb_dof_N = gmm::mat_nrows(BN), nb_dof_T = gmm::mat_nrows(BT);
+ size_type nb_change = 0;
+ scalar_type r = FRICTION.get_r(), alpha = FRICTION.get_alpha(), beta = FRICTION.get_beta();
+ plain_vector gap(nb_dof_N), friction_coef(nb_dof_N);
+ plain_vector UN(nb_dof_N), UT(nb_dof_T), UT0(nb_dof_T), LN(nb_dof_N), LT(nb_dof_T);
+
+ gmm::copy(FRICTION.get_gap(), gap); gmm::copy(FRICTION.get_friction_coef(), friction_coef);
+ gmm::mult(BN, U, UN); gmm::mult(BT, U, UT); gmm::mult(BT, U0, UT0);
+ gmm::copy(FRICTION.get_LN(MS), LN); gmm::copy(FRICTION.get_LT(MS), LT);
+
+ if (noisy > 1)
+ cout << "changes of signs or limit values of the test functions (if any):" << endl;
+
+ for (size_type i = 0; i < nb_dof_N; ++i) {
+ TST(i, 0) = (LN[i] - r * alpha * (UN[i] - gap[i]));
+ TST(i, 1) = - friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+ TST(i, 2) = friction_coef[i] * LN[i] + LT[i] - r * beta * (UT[i] - UT0[i]);
+
+ for (size_type j = 0; j < 3; ++j) {
+ if (((TST0(i,j) < 0 && TST(i,j) > 0) || (TST0(i,j) > 0 && TST(i,j) < 0))
+ && (j == 0 || (j > 0 && TST(i,0) < 0))) {
+ ++nb_change;
+ if (noisy > 1)
+ cout << "node " << i << ": " << contact_nodes[i]
+ << (TST(i, 0) <= 0) << (TST(i, 1) >= 0) << (TST(i, 2) <= 0)
+ << " - change of the sign of the " << j+1 << "-th component: "
+ << TST0(i,j) << " -> " << TST(i,j) << endl;
+ } else if (gmm::abs(TST(i,j)) <= limit && (j == 0 || (j > 0 && TST(i,0) <= limit)))
+ cout << "node " << i << ": " << contact_nodes[i]
+ << " (" << j + 1 << "-th component close to the limit: " << TST(i,j) << endl;
+
+// cout << "LN[i] = " << LN[i]
+// << ", r * alpha * (UN[i] - gap[i]) = " << r * alpha * (UN[i] - gap[i])
+// << ", - friction_coef[i] * LN[i] + LT[i] = "
+// << -friction_coef[i] * LN[i] + LT[i]
+// << ", friction_coef[i] * LN[i] + LT[i] = "
+// << friction_coef[i] * LN[i] + LT[i]
+// << ", r * beta * (UT[i]-UT0[i]) = "
+// << r * beta * (UT[i]-UT0[i]) << endl;
+ }
+ }
+
+ return nb_change;
+}
+
+template<typename MATRIX>
+void straight_insertion
+(MATRIX &M, plain_vector &key, size_type i) {
+/* places the i-th row of M according to the corresponding values in key;
+ increasing order is wanted in the first i components of key */
+
+ bool found;
+ size_type j = i;
+ std::vector<size_type> X(3);
+ scalar_type X_key;
+
+ X[0] = M(i, 0); X[1] = M(i, 1); X[2] = M(i, 2);
+ X_key = key[i];
+ if (j == 0) found = true;
+ else found = (X_key >= key[j - 1]);
+
+ while (!found) { // seeking the appropriate position
+ key[j] = key[j - 1];
+ M(j, 0) = M(j - 1, 0);
+ M(j, 1) = M(j - 1, 1);
+ M(j, 2) = M(j - 1, 2);
+ --j;
+ if (j == 0) found = true;
+ else found = (X_key >= key[j - 1]);
+ }
+
+ M(j, 0) = X[0]; M(j, 1) = X[1]; M(j, 2) = X[2];
+ key[j] = X_key;
+}
+
+template<typename CH_MATRIX, typename A_MATRIX, typename T_MATRIX, typename VECT>
+void compute_Jacobians
+(const VECT &contact_nodes, CH_MATRIX &CH, A_MATRIX &ACT, const T_MATRIX &TST,
+ scalar_type limit) {
+ /* computes CH and ACT determining the Jacobian and the active selection functions,
+ respectively; the items in ACT are ordered so that the corresponding values in KEY are
+ increasing (a heuristics is used!), the values of the test functions are saved in TST */
+
+ size_type nbc = gmm::mat_nrows(TST);
+ plain_vector KEY(3*nbc);
+
+ size_type pos = 0;
+ for (size_type i = 0; i < nbc; ++i) {
+
+ CH(i, 0) = (TST(i, 0) <= 0);
+ if (gmm::abs(TST(i, 0)) < limit) {
+ ACT(pos, 0) = i; ACT(pos, 1) = 0; ACT(pos, 2) = CH(i, 0);
+ KEY[pos] = gmm::abs(TST(i, 0));
+ straight_insertion(ACT, KEY, pos);
+ ++pos;
+ }
+
+ if (TST(i, 1) < 0) { // positive slip
+ CH(i, 1) = 0; CH(i, 2) = 1;
+ if (TST(i, 0) < limit) { // contact is possible
+ ACT(pos, 0) = i; ACT(pos, 1) = 1; ACT(pos, 2) = CH(i, 1);
+ KEY[pos] = (-TST(i, 1) < 1./contact_nodes[i][0]) ?
+ -TST(i, 1) : 1./contact_nodes[i][0]; // (!)
+ straight_insertion(ACT, KEY, pos);
+ ++pos;
+ }
+ }
+ else if (TST(i, 2) > 0) { // negative slip
+ CH(i, 1) = 1; CH(i, 2) = 0;
+ if (TST(i, 0) < limit) { // contact is possible
+ ACT(pos, 0) = i; ACT(pos, 1) = 2; ACT(pos, 2) = CH(i, 2);
+ KEY[pos] = (TST(i, 2) < 1./contact_nodes[i][0]) ?
+ TST(i, 2) : 1./contact_nodes[i][0]; // (!)
+ straight_insertion(ACT, KEY, pos);
+ ++pos;
+ }
+ }
+ else { // stick
+ CH(i, 1) = 1; CH(i, 2) = 1;
+ if (TST(i, 0) < limit) { // contact is possible
+ if (TST(i, 1) < limit) {
+ ACT(pos, 0) = i; ACT(pos, 1) = 1; ACT(pos, 2) = CH(i, 1);
+ KEY[pos] = TST(i, 1);
+ straight_insertion(ACT, KEY, pos);
+ ++pos;
+ }
+
+ if (TST(i, 2) > -limit) {
+ ACT(pos, 0) = i; ACT(pos, 1) = 2; ACT(pos, 2) = CH(i, 2);
+ KEY[pos] = -TST(i, 2);
+ straight_insertion(ACT, KEY, pos);
+ ++pos;
+ }
+ }
+ }
+ }
+
+ ACT(pos, 0) = size_type(-1);
+}
+
+template<typename MODEL_STATE, typename MATRIX, typename VECT>
+bool test_Jacobian
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &grad_t, const plain_vector &F2_init, const plain_vector &deltaF2,
+ const plain_vector &U00, const plain_vector &U0, scalar_type deltat0, plain_vector &T0,
+ const plain_vector &X0, const MATRIX &CH, scalar_type h, scalar_type minangle_back,
+ bool neg_deltat, iteration_corr &iter) {
+ /* tries to continuate according to the Jacobian given by CH;
+ returns `true' in the case of success, `false' otherwise */
+
+ bool success = false;
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ plain_vector F2 = F2_init, T_test = T0, T(stot+1), X = X0;
+
+ if (iter.get_noisy() > 1)
+ cout << "testing the following Jacobian:" << endl;
+
+ for (size_type i = 0; i < gmm::mat_nrows(CH); ++i) {
+ if (iter.get_noisy() > 1)
+ cout << "node " << i << ": " << contact_nodes[i] << " "
+ << CH(i, 0) << CH(i, 1) << CH(i, 2) << endl;
+ if ((!CH(i, 1) && !CH(i, 2)) || (!CH(i, 0) && (CH(i, 1) && CH(i, 2)))) /* not wanted */
+ return success;
+ }
+
+ gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+
+ scalar_type t0 = X0[stot];
+ gmm::add(gmm::scaled(deltaF2, t0), F2);
+ problem.rhs().set(F2);
+
+ FRICTION.set_WT(gmm::scaled(U00, -1.0));
+ FRICTION.set_beta(1./deltat0);
+
+ problem.compute_tangent_matrix(MS);
+
+ FRICTION.set_character_matrix(CH);
+ FRICTION.do_compute_tangent_matrix(MS, 0, 0);
+ compute_tangent(MS.tangent_matrix(), grad_t, T_test, iter.get_noisy());
+
+ FRICTION.clear_character_matrix();
+ FRICTION.set_WT(gmm::scaled(U0, -1.0));
+ gmm::copy(T_test, T);
+
+ gmm::add(gmm::scaled(T, h), X);
+ iter.set_iteration(0);
+ Newton_correction(MS, problem, FRICTION, grad_t, F2_init, deltaF2, X, T, t0, neg_deltat,
+ iter);
+
+ if (iter.converged()) {
+ scalar_type angle = gmm::vect_sp(T, T0);
+ if (iter.get_noisy()) cout << "angle = " << angle << endl;;
+
+ if (angle >= minangle_back) { // tests whether we have not arrived at the incoming branch
+ cout << ", success? (1/0): "; // for confirmation
+ cin >> success;
+ }
+ }
+
+ if (!success) { // try the opposite tangent
+ gmm::copy(X0, X);
+ gmm::scale(T_test, -1.0);
+ gmm::copy(T_test, T);
+
+ gmm::add(gmm::scaled(T, h), X);
+ iter.set_iteration(0);
+ Newton_correction(MS, problem, FRICTION, grad_t, F2_init, deltaF2, X, T, t0, neg_deltat,
+ iter);
+
+ if (iter.converged()) {
+ scalar_type angle = gmm::vect_sp(T, T0);
+ if (iter.get_noisy()) cout << "angle = " << angle;
+
+ if (angle >= minangle_back) { // tests whether we have not
+ // arrived at the incoming branch
+ cout << ", success? (1/0): "; // for confirmation
+ cin >> success;
+ }
+ }
+ }
+
+ if (success) gmm::copy(T_test, T0);
+ return success;
+}
+
+template<typename MODEL_STATE, typename CH_MATRIX, typename A_MATRIX, typename VECT>
+bool systematic_test_Jacobians
+(MODEL_STATE &MS, getfem::mdbrick_Dirichlet<MODEL_STATE> &problem,
+ getfem::mdbrick_Coulomb_friction<MODEL_STATE> &FRICTION, const VECT &contact_nodes,
+ const plain_vector &grad_t, const plain_vector &F2_init, const plain_vector &deltaF2,
+ const plain_vector &U00, const plain_vector &U0, scalar_type deltat0, plain_vector &T0,
+ const plain_vector &X0, CH_MATRIX &CH, const A_MATRIX &ACT, size_type level, scalar_type h,
+ scalar_type minangle_back, bool neg_deltat, iteration_corr &iter) {
+ /* recursive procedure for systematic testing of all possible Jacobians according the order
+ in ACT; returns true in the case success, false otherwise */
+
+ bool success = false;
+
+ if (level == 0)
+ success =
+ test_Jacobian(MS, problem, FRICTION, contact_nodes, grad_t, F2_init, deltaF2, U00, U0,
+ deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter);
+ else
+ success =
+ systematic_test_Jacobians(MS, problem, FRICTION, contact_nodes, grad_t, F2_init,
+ deltaF2, U00, U0, deltat0, T0, X0, CH, ACT, level - 1, h,
+ minangle_back, neg_deltat, iter);
+
+ if (!success){
+ CH(ACT(level, 0), ACT(level, 1)) = (ACT(level, 2) == 0);
+ if (level == 0)
+ success =
+ test_Jacobian(MS, problem, FRICTION, contact_nodes, grad_t, F2_init, deltaF2, U00,
+ U0, deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter);
+ else
+ success =
+ systematic_test_Jacobians(MS, problem, FRICTION, contact_nodes, grad_t, F2_init,
+ deltaF2, U00, U0, deltat0, T0, X0, CH, ACT, level - 1, h,
+ minangle_back, neg_deltat, iter);
+ CH(ACT(level, 0), ACT(level, 1)) = ACT(level, 2);
+ }
+
+ return success;
+}
+
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
+
+bool friction_problem::solve(plain_vector &U) {
+
+ size_type nb_dof_rhs = mf_rhs.nb_dof();
+ size_type N = mesh.dim();
+ size_type law_num = PARAM.int_value("LAW");
+ // Linearized elasticity brick.
+ base_vector p(3); p[0] = p1; p[1] = p2; p[2] = p3;
+
+ /* choose the material law */
+ getfem::abstract_hyperelastic_law *pl = 0;
+ switch (law_num) {
+ case 0:
+ case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 2: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+ case 3: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+ case 4 : case 5 : break;
+ default: GMM_ASSERT1(false, "no such law");
+ }
+
+ getfem::mdbrick_abstract<> *pELAS = 0;
+ getfem::mdbrick_nonlinear_elasticity<> *pELAS_nonlin = 0;
+ getfem::mdbrick_isotropic_linearized_elasticity<> *pELAS_lin = 0;
+
+ if (law_num < 4) {
+ p.resize(pl->nb_params());
+ pELAS = pELAS_nonlin
+ = new getfem::mdbrick_nonlinear_elasticity<>(*pl, mim, mf_u, p);
+ } else {
+ pELAS = pELAS_lin = new getfem::mdbrick_isotropic_linearized_elasticity<>
+ (mim, mf_u, law_num == 5 ? 0.0 : lambda, mu);
+ }
+
+ getfem::mdbrick_abstract<> *pINCOMP = pELAS;
+ switch (law_num) {
+ case 1:
+ case 3: pINCOMP = new getfem::mdbrick_nonlinear_incomp<>(*pELAS, mf_p);
+ break;
+ case 5: {
+ getfem::mdbrick_linear_incomp<> *pb =
+ new getfem::mdbrick_linear_incomp<>(*pELAS, mf_p);
+ pINCOMP = pb;
+ pb->penalization_coeff().set(1.0/lambda);
+ }
+ }
+
+ size_type nb_step = int(PARAM.int_value("NBSTEP"));
+ bool neg_deltat = (PARAM.int_value("NEGATIVE_DELTAT",
+ "Negative deltat is permitted or not") != 0);
+ scalar_type deltat = PARAM.real_value("DELTAT", "Time step");
+ if ((deltat < 0) && (!neg_deltat)) deltat = -deltat;
+
+ // contact condition for Lagrange elements
+ dal::bit_vector cn = mf_u.basic_dof_on_region(FRICTION_BOUNDARY_NUM);
+ sparse_matrix BN(cn.card()/N, mf_u.nb_dof());
+ sparse_matrix BT((N-1)*cn.card()/N, mf_u.nb_dof());
+ std::vector<base_node> contact_nodes;
+ plain_vector gap(cn.card()/N);
+ size_type jj = 0;
+ for (dal::bv_visitor i(cn); !i.finished(); ++i)
+ if (i % N == 0) {
+ BN(jj, i+N-1) = -1.;
+ gap[jj] = mf_u.point_of_basic_dof(i)[N-1];
+ contact_nodes.push_back(mf_u.point_of_basic_dof(i));
+ for (size_type k = 0; k < N-1; ++k) BT((N-1)*jj+k, i+k) = 1.;
+ ++jj;
+ }
+
+ // creating force density vectors
+ size_type nbc = int(jj);
+// sparse_matrix MMBN(nbc, nbc), MMBT(nbc*(N-1), nbc*(N-1));
+// plain_vector LN1(nbc), LT1(nbc*(N-1));
+// {
+// sparse_matrix BB(mf_u.nb_dof(), mf_u.nb_dof());
+// getfem::asm_mass_matrix(BB, mim, mf_u, mf_u, FRICTION_BOUNDARY_NUM);
+// std::vector<size_type> indN, indT;
+// for (dal::bv_visitor i(cn); !i.finished(); ++i)
+// if ((i%N) == N-1) indN.push_back(i); else indT.push_back(i);
+// gmm::sub_index SUBI(indN);
+// gmm::copy(gmm::sub_matrix(BB, SUBI, SUBI), MMBN);
+// gmm::sub_index SUBJ(indT);
+// gmm::copy(gmm::sub_matrix(BB, SUBJ, SUBJ), MMBT);
+// }
+
+
+
+ scalar_type friction_coef = PARAM.real_value("FRICTION_COEFF",
+ "Friction cefficient");
+ scalar_type r = PARAM.real_value("R", "Augmentation parameter");
+ scalar_type alpha = PARAM.real_value("ALPHA", "Augmentation parameter");
+ gmm::dense_matrix<bool> CH(nbc, 3);
+
+
+ getfem::mdbrick_Coulomb_friction<> FRICTION(*pINCOMP, BN, gap,
+ friction_coef, BT);
+ FRICTION.set_r(r);
+ FRICTION.set_alpha(alpha);
+ FRICTION.set_beta(1./deltat);
+
+ // Defining the volumic source term.
+ base_vector f(N);
+ f[0] = PARAM.real_value("FORCEX","Amplitude of the gravity");
+ f[1] = PARAM.real_value("FORCEY","Amplitude of the gravity");
+ if (N>2)
+ f[2] = PARAM.real_value("FORCEZ","Amplitude of the gravity");
+ plain_vector F(nb_dof_rhs * N);
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ gmm::copy(f, gmm::sub_vector(F, gmm::sub_interval(i*N, N)));
+ }
+
+ getfem::mdbrick_source_term<> VOL_F(FRICTION, mf_rhs, F);
+
+ // Dirichlet condition
+ plain_vector F2(nb_dof_rhs * N);
+ getfem::mdbrick_Dirichlet<> final_model(VOL_F, DIRICHLET_BOUNDARY_NUM);
+ final_model.rhs().set(mf_rhs, F2);
+ final_model.set_constraints_type(getfem::constraints_type
+ (PARAM.int_value("DIRICHLET_VERSION")));
+
+ // Generic solver.
+ getfem::standard_model_state MS(final_model);
+ size_type step0 = PARAM.int_value("STEP0") ? PARAM.int_value("STEP0") : 0;
+ size_type maxit = PARAM.int_value("MAXITER");
+ gmm::iteration iter;
+
+ scalar_type dz = PARAM.real_value("DIRICHLET_Z",
+ "Prescribed displacement in z");
+ scalar_type dyv = PARAM.real_value("DIRICHLET_Y_SPEED",
+ "Prescribed velocity in y");
+ int noisy = PARAM.int_value("NOISY");
+
+ plain_vector U0 = U;
+ size_type stot = gmm::mat_ncols(MS.tangent_matrix());
+ plain_vector X0(stot+1);
+
+ if (step0 > 0) { /* load the foregoing values */
+ char s[100]; sprintf(s, "step%d", step0);
+ gmm::vecload(datafilename + s + ".U", U0);
+ gmm::vecload(datafilename + s + ".X", X0);
+ gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+ }
+
+ /* the standard solver is used for the first eleven steps when the body
+ is compressed, for the next iterations, when the body is pulling
+ to the right while subject to a constant pressure, numerical
+ continuation is used */
+
+ bool converged = true;
+ size_type step = step0;
+ while ((step < nb_step) && (step < 11) && converged) { /* standard solver */
+ cout << "beginning of step " << step+1
+ << ", number of variables : " << final_model.nb_dof() << endl;
+
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ F2[i*N+N-1] = dz * step / 10.0;
+ F2[i*N+N-2] = 0.0;
+ }
+ final_model.rhs().set(F2);
+
+ FRICTION.set_WT(gmm::scaled(U0, -1.0));
+
+
+ iter = gmm::iteration(residual, noisy, maxit ? maxit : 40000);
+// cout << "|U| = " << gmm::vect_norm2(MS.state()) << "\n";
+
+
+
+ /* let the default non-linear solve (Newton) do its job */
+ getfem::basic_newton_line_search ls(size_type(-1), 5.0/3.0, 0.1, 0.5, 3.0);
+// getfem::default_newton_line_search ls;
+ getfem::standard_solve(MS, final_model, iter,
+ getfem::default_linear_solver(final_model), ls);
+
+ converged = iter.converged();
+
+ if (converged) {
+
+ compute_displacement(MS, final_model, pl, pELAS_nonlin, pELAS_lin, U, law_num);
+
+ char s[100]; sprintf(s, "step%d", step+1);
+ gmm::vecsave(datafilename + s + ".U",U);
+
+ gmm::copy(MS.state(), gmm::sub_vector(X0, gmm::sub_interval(0, stot))); X0[stot] = 0.0;
+ gmm::vecsave(datafilename + s + ".X", X0);
+
+ plain_vector VM(mf_vm.nb_dof());
+ compute_Von_Mises(MS, pELAS_nonlin, pELAS_lin, mf_vm, VM, law_num);
+ gmm::vecsave(datafilename + s + ".VM", VM);
+
+ gmm::copy(U, U0);
+ cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+ }
+
+ ++step;
+ } // standard solver
+
+ if ((nb_step > 11) && converged) { /* continuation */
+ GMM_ASSERT1(PARAM.int_value("DIRICHLET_VERSION") == 0,
+ "Continuations only implemented for Dirichlet "
+ "condition with multipliers");
+
+ scalar_type difference = PARAM.real_value("DIFFERENCE");
+ if (difference == 0.) difference = 1e-10;
+ scalar_type minangle = PARAM.real_value("ANGLE");
+ scalar_type minangle_back = PARAM.real_value("ANGLE_BACK");
+ size_type maxit_corr = PARAM.int_value("MAXITER_CORR");
+ size_type thr_corr = PARAM.int_value("THRESHOLD_CORR");
+ scalar_type limit = PARAM.real_value("LIMIT", "limit for the test functions");
+
+ scalar_type h_init = PARAM.real_value("H_INIT", "Initial step length");
+ scalar_type h_max = PARAM.real_value("H_MAX", "Maximal step length");
+ scalar_type h_min = PARAM.real_value("H_MIN", "Minimal step length");
+ scalar_type h_inc = PARAM.real_value("H_INC");
+ scalar_type h_dec = PARAM.real_value("H_DEC");
+ scalar_type h = PARAM.real_value("H") ? PARAM.real_value("H") : h_init;
+
+ scalar_type deltat0, t0, t;
+ plain_vector deltaF2(nb_dof_rhs * N);
+ plain_vector U00 = U0;
+ plain_vector X(stot+1), T0(stot+1), T(stot+1);
+ gmm::dense_matrix<scalar_type> TST(nbc,3), TST0(nbc,3);
+ size_type ind = final_model.first_ind(), sc = gmm::vect_size(final_model.get_CRHS());
+ plain_vector grad_t(stot);
+
+ if (step0 >= 11)
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ F2[i*N+N-1] = dz;
+ F2[i*N+N-2] = 0.0;
+ }
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ deltaF2[i*N+N-1] = 0.0;
+ deltaF2[i*N+N-2] = dyv;
+ }
+ final_model.rhs().set(deltaF2);
+ final_model.compute_tangent_matrix(MS);
+ gmm::copy(final_model.get_CRHS(),
+ gmm::sub_vector(grad_t, gmm::sub_interval(ind, sc)));
+ gmm::scale(grad_t, -1.0);
+
+ char s[100]; sprintf(s, "step%d", step - 1);
+ plain_vector X00(stot+1);
+ gmm::vecload(datafilename + s + ".X",X00);
+ gmm::vecload(datafilename + s + ".U",U00);
+
+ sprintf(s, "step%d", step);
+ gmm::vecload(datafilename + s + ".U",U0);
+ t0 = X0[stot];
+ deltat0 = (step > 11) ? t0 - X00[stot] : deltat;
+ if ((deltat0 < 0) && (!neg_deltat)) deltat0 = -deltat0;
+
+ gmm::copy(gmm::sub_vector(X0, gmm::sub_interval(0, stot)), MS.state());
+ FRICTION.set_beta(1./deltat0);
+ // (deltat0 < 0) ? FRICTION.set_beta(-1.0) : FRICTION.set_beta(1.0);
+ FRICTION.set_WT(gmm::scaled(U00, -1.0));
+
+ test_functions(MS, FRICTION, contact_nodes, BN, BT, U0, U00, TST0, limit, noisy);
+
+ if (step == 11) {
+ gmm::fill_random(T0);
+ compute_tangent(MS.tangent_matrix(), grad_t, T0, noisy);
+ if (T0[stot] < 0)
+ gmm::scale(T0, -1.0);
+ }
+ else
+ gmm::vecload(datafilename + s + ".T",T0);
+
+
+ size_type nb_dec;
+ bool new_Jacobian = false;
+ iteration_corr iter_corr;
+ short new_point = 1;
+
+ while ((new_point == 1) && (step < nb_step)) {
+ cout << "beginning of step " << step+1
+ << ", number of variables : " << final_model.nb_dof() + 1 << endl;
+
+ FRICTION.set_WT(gmm::scaled(U0, -1.0));
+ nb_dec = 0;
+
+// cout << " |U| = " << gmm::vect_norm2(MS.state()) << "\n";
+
+ do { /* seek a new point */
+ new_point = -1;
+ cout << "t0 = " << t0 << ", h = " << h << ", deltat = " << h * T0[stot] << endl;
+
+ gmm::copy(X0, X); gmm::copy(T0, T);
+ gmm::add(gmm::scaled(T, h), X);
+
+ iter_corr = iteration_corr(residual, difference, noisy,
+ maxit_corr ? maxit_corr : 40000);
+ Newton_correction(MS, final_model, FRICTION, grad_t, F2, deltaF2, X, T, t0,
+ neg_deltat, iter_corr);
+
+ if (iter_corr.converged()) {
+ compute_displacement(MS, final_model, pl, pELAS_nonlin, pELAS_lin, U, law_num);
+ size_type nb_change = test_functions(MS, FRICTION, contact_nodes, BN, BT, U,
+ U0, TST, TST0, limit, noisy);
+
+ t = X[stot]; scalar_type angle = gmm::vect_sp(T, T0);
+ cout << "t = " << t << ", deltat = " << t - t0 << ", T0.T = " << angle;
+ if ((angle > 0.9) || ((angle > 0.7) && (nb_change < 2)) || new_Jacobian) {
+ new_point = 1;
+ new_Jacobian = false;
+ } else
+// { cout << "Do you want to accept this increment? (1, 0, -1) ";
+// int sign;
+// cin >> sign;
+// if (sign != 0) {
+// // if (sign < 0) gmm::scale(T, -1.0);
+// // h = h_init;
+// // ++nb_dec;
+// break;
+// }
+// }
+ cout << " - the point rejected";
+ cout << endl;
+ }
+
+ if (new_point <= 0) {
+ if (h > h_min) {
+ h = (h_dec * h > h_min) ? h_dec * h : h_min;
+ ++nb_dec;
+ new_point = 0;
+ } else { /* try to change the Jacobian manually */
+ cout << "classical continuation has broken down"
+ << ", starting to change the Jacobian manually" << endl;
+
+ new_Jacobian = false;
+ iteration_corr iter_test(residual, difference, noisy,
+ maxit_corr ? maxit_corr : 40000, minangle);
+ gmm::dense_matrix<size_type> ACT(3*nbc+1, 3);
+
+ compute_Jacobians(contact_nodes, CH, ACT, TST0, limit);
+
+ for (size_type level = 0; level < 3*nbc+1; ++level) {
+ if (ACT(level, 0) == size_type(-1)) break;
+
+ CH(ACT(level, 0), ACT(level, 1)) = (ACT(level, 2) == 0);
+ cout << "change for node " << ACT(level, 0) << endl;
+
+ if (level > 0)
+ new_Jacobian = systematic_test_Jacobians
+ (MS, final_model, FRICTION, contact_nodes, grad_t, F2, deltaF2, U00, U0,
+ deltat0, T0, X0, CH, ACT, level - 1, h_min, minangle_back, neg_deltat,
+ iter_test);
+ else
+ new_Jacobian = test_Jacobian
+ (MS, final_model, FRICTION, contact_nodes, grad_t, F2, deltaF2, U00, U0,
+ deltat0, T0, X0, CH, h, minangle_back, neg_deltat, iter_test);
+
+ if (new_Jacobian)
+ break;
+ else
+ CH(ACT(level, 0), ACT(level, 1)) = ACT(level, 2);
+ }
+
+ if (new_Jacobian) {
+ cout << "new Jacobian found, restarting the classical continuation" << endl;
+ h = h_init;
+ nb_dec = 0;
+ new_point = 0;
+ }
+ }
+ }
+ } while (new_point == 0);
+
+ if (new_point == 1) {
+
+ gmm::copy(U0, U00); gmm::copy(U, U0);
+ gmm::copy(X, X0); gmm::copy(T, T0);
+ gmm::copy(TST, TST0);
+ deltat0 = deltat; t0 = X[stot];
+
+ sprintf(s, "step%d", step+1);
+ gmm::vecsave(datafilename + s + ".U",U);
+ gmm::vecsave(datafilename + s + ".X", X);
+ gmm::vecsave(datafilename + s + ".T", T);
+
+ plain_vector VM(mf_vm.nb_dof());
+ compute_Von_Mises(MS, pELAS_nonlin, pELAS_lin, mf_vm, VM, law_num);
+ gmm::vecsave(datafilename + s + ".VM", VM);
+
+ if ((h < h_max) && (nb_dec == 0) && (iter_corr.get_iteration() <= thr_corr))
+ h = (h*h_inc < h_max) ? h*h_inc : h_max;
+
+ cout << "end of Step n° " << step+1 << " / " << nb_step << endl;
+ ++step;
+ }
+ } // the main loop of continuation
+
+ converged = (new_point == 1);
+ } // continuation
+
+
+ if (law_num == 5 || law_num == 3 || law_num == 1) delete pINCOMP;
+
+ return converged;
+
+}
+
+
+/**************************************************************************/
+/* main program. */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ // try {
+ friction_problem p;
+ p.PARAM.read_command_line(argc, argv);
+ p.init();
+ p.mesh.write_to_file(p.datafilename + ".mesh");
+ p.mf_u.write_to_file(p.datafilename + ".mf", true);
+ p.mf_rhs.write_to_file(p.datafilename + ".mfd", true);
+ p.mf_vm.write_to_file(p.datafilename + ".mfvm", true);
+ plain_vector U(p.mf_u.nb_dof());
+ if (!p.solve(U)) cerr << "Solve has failed\n";
+ if (p.PARAM.int_value("VTK_EXPORT")) {
+ cout << "export to " << p.datafilename + ".vtk" << "..\n";
+ getfem::vtk_export exp(p.datafilename + ".vtk",
+ p.PARAM.int_value("VTK_EXPORT")==1);
+ exp.exporting(p.mf_u);
+ exp.write_point_data(p.mf_u, U, "elastostatic_displacement");
+ cout << "export done, you can view the data file with (for example)\n"
+ "mayavi -d " << p.datafilename << ".vtk -f ExtractVectorNorm -f "
+ "WarpVector -m BandedSurfaceMap -m Outline &\n";
+ }
+ // } GMM_STANDARD_CATCH_ERROR;
+
+ return 0;
+
+}
diff --git a/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h b/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h
deleted file mode 100644
index 691ddce..0000000
--- a/contrib/contact_grd_trans/my_getfem_Coulomb_friction.h
+++ /dev/null
@@ -1,442 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/** @file getfem_Coulomb_friction.h
- @author Yves Renard <Yves.Renard at insa-lyon.fr>
- @author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
- @date July 6, 2004.
- @brief Unilateral contact and Coulomb friction condition brick.
- */
-#ifndef GETFEM_COULOMB_FRICTION_H__
-#define GETFEM_COULOMB_FRICTION_H__
-
-#include "getfem/getfem_modeling.h"
-
-namespace getfem {
-
-
-# define MDBRICK_COULOMB_FRICTION 434245
-
- /**
- * Unilateral contact and Coulomb friction condition brick.
- * (for conformal small displacement problems)
- * @ingroup bricks
- */
- template<typename MODEL_STATE = standard_model_state>
- class mdbrick_Coulomb_friction : public mdbrick_abstract<MODEL_STATE> {
-
- TYPEDEF_MODEL_STATE_TYPES;
-
- mdbrick_abstract<MODEL_STATE> &sub_problem;
- size_type num_fem;
-
- T_MATRIX BN, BT;
- typedef gmm::row_matrix<gmm::rsvector<value_type> > RT_MATRIX;
- RT_MATRIX AUG_M; // For Hansbo augmentation.
- VECTOR gap, threshold, WT, WN, friction_coef, RLN, RLT;
- value_type r, alpha, beta;
- size_type d, nbc;
- gmm::dense_matrix<size_type> CH;
-
- const mesh_fem *mf_u;
- gmm::sub_interval SUBU, SUBN, SUBT;
-
- bool Tresca_version, symmetrized, contact_only, really_stationary;
-
- template<typename VEC> static void ball_projection(const VEC &x,
- value_type radius) {
- value_type a = gmm::vect_norm2(x);
- if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
- else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
- }
-
- template<class VEC, class VECR>
- static void ball_projection_grad_r(const VEC &x, value_type radius,
- VECR &g) {
- value_type a = gmm::vect_norm2(x);
- if (radius > 0 && a >= radius)
- gmm::copy(gmm::scaled(x, value_type(1)/a), g);
- else gmm::clear(g);
- }
-
- template <class VEC, class MAT>
- static void ball_projection_grad(const VEC &x, double radius, MAT &g) {
- if (radius <= value_type(0)) { gmm::clear(g); return; }
- gmm::copy(gmm::identity_matrix(), g);
- value_type a = gmm::vect_norm2(x);
- if (a >= radius) {
- gmm::scale(g, radius/a);
- // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
- for (size_type i = 0; i < x.size(); ++i)
- for (size_type j = 0; j < x.size(); ++j)
- g(i,j) -= radius*x[i]*x[j] / (a*a*a);
- }
- }
-
- void precomp(MODEL_STATE &MS, size_type i0) {
- size_type i1 = this->mesh_fem_positions[num_fem];
- gmm::resize(RLN, gmm::mat_nrows(BN));
- gmm::resize(RLT, gmm::mat_nrows(BT));
- SUBU = gmm::sub_interval(i0 + i1, mf_u->nb_dof());
- SUBN = gmm::sub_interval(i0 + sub_problem.nb_dof(), gmm::mat_nrows(BN));
- SUBT = gmm::sub_interval(i0 + sub_problem.nb_dof() + gmm::mat_nrows(BN),
- gmm::mat_nrows(BT));
- gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r*alpha), RLN);
- if (gmm::vect_size(WN) > 0)
- gmm::mult_add(BN, gmm::scaled(WN, -r*alpha), RLN);
- gmm::mult_add(BN, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
- -r*alpha), RLN);
- if (gmm::mat_nrows(AUG_M) > 0)
- gmm::mult_add(AUG_M, gmm::scaled(gmm::sub_vector(MS.state(),SUBN),-r),
- RLN);
- if (!contact_only) {
- gmm::copy(gmm::sub_vector(MS.state(), SUBT), RLT);
- if (gmm::vect_size(WT) > 0)
- gmm::mult_add(BT, gmm::scaled(WT, -r*beta), RLT);
- if (!really_stationary)
- gmm::mult_add(BT, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
- -r*beta), RLT);
- }
- }
-
- void proper_update(void) {
- mf_u = this->mesh_fems[num_fem];
- d = mf_u->linked_mesh().dim();
- gmm::resize(BN, nbc, mf_u->nb_dof());
- gmm::resize(BT, nbc*(d-1), mf_u->nb_dof());
- gmm::resize(gap, nbc); gmm::resize(friction_coef, nbc);
- gmm::resize(threshold, nbc);
- // gmm::resize(WT, mf_u->nb_dof()); gmm::resize(WN, mf_u->nb_dof());
- this->proper_additional_dof = gmm::mat_nrows(BN)
- + (contact_only ? 0 : gmm::mat_nrows(BT));
- this->proper_mixed_variables.clear();
- this->proper_mixed_variables.add(sub_problem.nb_dof(),
- this->proper_additional_dof);
- }
-
- public :
-
- inline size_type nb_contact_nodes(void) const
- { return gmm::mat_nrows(BN); }
-
- virtual void do_compute_tangent_matrix(MODEL_STATE &MS, size_type i0,
- size_type) {
- precomp(MS, i0);
-
- RT_MATRIX BBN(gmm::mat_nrows(BN), gmm::mat_ncols(BN));
- RT_MATRIX MM(nb_contact_nodes(), nb_contact_nodes());
- gmm::copy(gmm::scaled(BN, -alpha), BBN);
- if (gmm::mat_nrows(AUG_M) > 0)
- gmm::copy(gmm::scaled(AUG_M, -value_type(1)), MM);
- size_type l = 0;
- for (size_type i=0; i < nb_contact_nodes(); ++i) {
- if (i == CH(l,0)) {
- if (CH(l,1) == 0) {
- gmm::clear(BBN[i]);
- if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
- MM(i, i) = -value_type(1)/r;
- }
- ++l;
- }
- else if (RLN[i] >= value_type(0)) {
- gmm::clear(BBN[i]);
- if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
- MM(i, i) = -value_type(1)/r;
- }
- }
- gmm::copy(BBN, gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU));
- gmm::copy(MM, gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-
-// gmm::copy(gmm::scaled(BN, -alpha),
-// gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU));
-// gmm::clear(gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-// if (gmm::mat_nrows(AUG_M) > 0)
-// gmm::copy(gmm::scaled(AUG_M, -value_type(1)),
-// gmm::sub_matrix(MS.tangent_matrix(), SUBN));
-// for (size_type i=0; i < nb_contact_nodes(); ++i) {
-// if (RLN[i] >= value_type(0)) {
-// gmm::clear(gmm::sub_matrix(MS.tangent_matrix(),
-// gmm::sub_interval(SUBN.first()+i,1),
-// SUBU));
-// if (gmm::mat_nrows(AUG_M) > 0)
-// gmm::clear(gmm::sub_matrix(MS.tangent_matrix(),
-// gmm::sub_interval(SUBN.first()+i,1), SUBN));
-// MS.tangent_matrix()(SUBN.first()+i, SUBN.first()+i)=-value_type(1)/r;
-// }
-// }
-
- if (!contact_only) {
- base_matrix pg(d-1, d-1);
- base_vector vg(d-1);
-
- RT_MATRIX BBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
- gmm::dense_matrix<value_type> BTi(d-1, gmm::mat_ncols(BT));
-
- l = 0;
- for (size_type i=0; i < nb_contact_nodes(); ++i) {
- gmm::sub_interval SUBI(i*(d-1), d-1);
- gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
- gmm::sub_interval SUBJJ(i*(d-1),(d-1));
- value_type th = Tresca_version ? threshold[i]
- : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-
- if (i == CH(l,0)) {
- std::vector<double> my_rlt(1);
- if (CH(l,2) == 0) my_rlt[0] = - 2.0;
- else if (CH(l,3) == 0) my_rlt[0] = 2.0;
- else my_rlt[0] = 0.0;
- ball_projection_grad(my_rlt, 1.0, pg);
- } else
- ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
- if (!really_stationary)
- gmm::mult(gmm::scaled(pg, -beta),
- gmm::sub_matrix(BT, SUBI,
- gmm::sub_interval(0,gmm::mat_ncols(BT))),
- BTi);
- gmm::copy(BTi, gmm::sub_matrix(BBT, SUBJJ, SUBU));
-
- if (!Tresca_version) {
- if (i == CH(l,0)) {
- std::vector<double> my_rlt(1);
- if (CH(l,2) == 0) my_rlt[0] = - 2.0;
- else if (CH(l,3) == 0) my_rlt[0] = 2.0;
- else my_rlt[0] = 0.0;
- ball_projection_grad_r(my_rlt, 1.0, vg);
- ++l;
- } else
- ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
- for (size_type k = 0; k < d-1; ++k)
- MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
- = - friction_coef[i] * vg[k] / r;
- }
- for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
- gmm::copy(gmm::scaled(pg,value_type(1)/r),
- gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
- }
- T_MATRIX BBBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
- gmm::copy(BBT, BBBT);
- gmm::copy(BBBT, gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU));
- }
-
-// if (!contact_only) {
-// base_matrix pg(d-1, d-1);
-// base_vector vg(d-1);
-
-// for (size_type i=0; i < nb_contact_nodes(); ++i) {
-// gmm::sub_interval SUBI(i*(d-1), d-1);
-// gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
-// value_type th = Tresca_version ? threshold[i]
-// : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-
-// ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
-// if (!really_stationary)
-// gmm::mult(gmm::scaled(pg, -beta),
-// gmm::sub_matrix(BT, SUBI,
-// gmm::sub_interval(0,gmm::mat_ncols(BT))),
-// gmm::sub_matrix(MS.tangent_matrix(), SUBJ, SUBU));
-
-// if (!Tresca_version) {
-// ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
-// for (size_type k = 0; k < d-1; ++k)
-// MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
-// = - friction_coef[i] * vg[k] / r;
-// }
-// for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-// gmm::copy(gmm::scaled(pg,value_type(1)/r),
-// gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
-// }
-// }
-
-
- if (symmetrized) {
- T_MATRIX tmp(mf_u->nb_dof(), mf_u->nb_dof());
-
- gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BN));
- gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
- SUBN, SUBU)), tmp);
- gmm::copy(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
- gmm::resize(tmp, mf_u->nb_dof(), mf_u->nb_dof());
- gmm::mult(gmm::transposed(gmm::scaled(BN,-r*alpha)),
- gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU), tmp);
- gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
-
- if (!contact_only) {
- gmm::mult(gmm::transposed(gmm::scaled(BT,-r*beta)),
- gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU), tmp);
- gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
- gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BT));
- gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
- SUBT, SUBU)), tmp);
- gmm::copy(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
- }
- }
- else {
- gmm::copy(gmm::scaled(gmm::transposed(BN), value_type(-1)),
- gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
- if (!contact_only)
- gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)),
- gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
- }
- }
-
- virtual void do_compute_residual(MODEL_STATE &MS, size_type i0,size_type) {
- precomp(MS, i0);
- value_type c1(1);
- size_type l = 0;
-
- for (size_type i=0; i < nb_contact_nodes(); ++i) {
- if (i == CH(l,0)) {
- if (CH(l,1) == 0) RLN[i] = value_type(0);
- if (!contact_only) {
- if (CH(l,2) == 0)
- RLT[i] = Tresca_version ?
- -threshold[i] : friction_coef[i]*(MS.state())[SUBN.first()+i];
- else if (CH(l,3) == 0)
- RLT[i] = Tresca_version ?
- threshold[i] : -friction_coef[i]*(MS.state())[SUBN.first()+i];
- }
- ++l;
- }
- else {
- RLN[i] = std::min(value_type(0), RLN[i]);
- if (!contact_only)
- ball_projection(gmm::sub_vector(RLT, gmm::sub_interval(i*(d-1),d-1)),
- Tresca_version ? threshold[i]
- : -friction_coef[i]*(MS.state())[SUBN.first()+i]);
- }
- }
-
- if (symmetrized) {
- gmm::mult_add(gmm::transposed(BN), gmm::scaled(RLN, -c1),
- gmm::sub_vector(MS.residual(), SUBU));
- if (!contact_only)
- gmm::mult_add(gmm::transposed(BT), gmm::scaled(RLT, -c1),
- gmm::sub_vector(MS.residual(), SUBU));
- } else {
- gmm::mult_add(gmm::transposed(BN),
- gmm::scaled(gmm::sub_vector(MS.state(), SUBN),-c1),
- gmm::sub_vector(MS.residual(), SUBU));
- if (!contact_only)
- gmm::mult_add(gmm::transposed(BT),
- gmm::scaled(gmm::sub_vector(MS.state(), SUBT),-c1),
- gmm::sub_vector(MS.residual(), SUBU));
- }
-
- /* residual on LN */
- gmm::add(gmm::scaled(gmm::sub_vector(MS.state(), SUBN), -c1/r),
- gmm::scaled(RLN, c1/r), gmm::sub_vector(MS.residual(), SUBN));
- // gmm::scale(gmm::sub_vector(MS.residual(), SUBN), c1 / r);
-
- /* residual on LT */
- if (!contact_only) {
- gmm::add(gmm::scaled(gmm::sub_vector(MS.state(),SUBT), -c1/r),
- gmm::scaled(RLT, c1/r), gmm::sub_vector(MS.residual(), SUBT));
- // gmm::scale(gmm::sub_vector(MS.residual(), SUBT), c1 / r);
- }
- }
-
- void init(void) {
- this->add_sub_brick(sub_problem);
- this->proper_is_linear_ = this->proper_is_coercive_ = false;
- this->proper_is_symmetric_ = symmetrized && contact_only;
- r = value_type(1);
- beta = value_type(1);
- alpha = value_type(1);
- this->force_update();
- }
-
- void set_stationary(bool b) { really_stationary = b; }
- void set_beta(value_type a) { beta = a; }
- void set_alpha(value_type a) { alpha = a; }
- void set_CH(const gmm::dense_matrix<size_type> &CH_) {
- gmm::resize(CH, gmm::mat_nrows(CH_), gmm::mat_ncols(CH_ ));
- gmm::copy(CH_, CH);
- }
-
- template<typename MAT> void set_augmented_matrix(const MAT &M) {
- gmm::resize(AUG_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
- gmm::copy(M, AUG_M);
- }
-
- void set_r(value_type r_) { r = r_; }
- value_type get_r(void) const { return r; }
- template <class VEC> void set_WT(const VEC &WT_)
- { gmm::resize(WT, gmm::vect_size(WT_)); gmm::copy(WT_, WT); }
- template <class VEC> void set_WN(const VEC &WN_)
- { gmm::resize(WN, gmm::vect_size(WN_)); gmm::copy(WN_, WN); }
-
- VECTOR &get_gap(void) { return gap; }
- const VECTOR &get_gap(void) const { return gap; }
-
- VECTOR &get_friction_coef(void) { return friction_coef; }
- const VECTOR &get_friction_coef(void) const { return friction_coef; }
-
- SUBVECTOR get_LN(MODEL_STATE &MS) {
- SUBN = gmm::sub_interval(this->first_index() + sub_problem.nb_dof(),
- gmm::mat_nrows(BN));
- return gmm::sub_vector(MS.state(), SUBN);
- }
-
- SUBVECTOR get_LT(MODEL_STATE &MS) {
- SUBT = gmm::sub_interval(this->first_index() + sub_problem.nb_dof()
- + gmm::mat_nrows(BN), gmm::mat_nrows(BT));
- return gmm::sub_vector(MS.state(), SUBT);
- }
-
- /* contact and friction */
- template <class MAT, class VEC> mdbrick_Coulomb_friction
- (mdbrick_abstract<MODEL_STATE> &problem, const MAT &BN_, const VEC &gap_,
- scalar_type FC_, const MAT &BT_, size_type num_fem_=0)
- : sub_problem(problem), num_fem(num_fem_) {
- contact_only = Tresca_version = symmetrized = really_stationary = false;
- nbc = gmm::mat_nrows(BN_);
- init();
- gmm::copy(BN_, BN); gmm::copy(BT_, BT); gmm::copy(gap_, gap);
- std::fill(friction_coef.begin(), friction_coef.end(), FC_);
- }
-
- /* contact only. */
- template <class MAT, class VEC> mdbrick_Coulomb_friction
- (mdbrick_abstract<MODEL_STATE> &problem, const MAT &BN_, const VEC &gap_,
- size_type num_fem_=0) : sub_problem(problem), num_fem(num_fem_) {
- contact_only = true;
- Tresca_version = symmetrized = really_stationary = false;
- nbc = gmm::mat_nrows(BN_);
- init();
- gmm::copy(BN_, BN); gmm::copy(gap_, gap);
- }
-
- };
-
-
-} /* end of namespace getfem. */
-
-
-#endif /* GETFEM_COULOMB_FRICTION_H__ */
diff --git a/contrib/crack_plate/Makefile.in b/contrib/crack_plate/Makefile.in
index 4463ec9..66c5363 100644
--- a/contrib/crack_plate/Makefile.in
+++ b/contrib/crack_plate/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -142,6 +142,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -160,6 +161,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -176,6 +178,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -240,6 +243,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -275,7 +279,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -356,13 +359,13 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-crack_bilaplacian$(EXEEXT): $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_DEPENDENCIES)
+crack_bilaplacian$(EXEEXT): $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_DEPENDENCIES) $(EXTRA_crack_bilaplacian_DEPENDENCIES)
@rm -f crack_bilaplacian$(EXEEXT)
$(CXXLINK) $(crack_bilaplacian_OBJECTS) $(crack_bilaplacian_LDADD) $(LIBS)
-crack_mindlin$(EXEEXT): $(crack_mindlin_OBJECTS) $(crack_mindlin_DEPENDENCIES)
+crack_mindlin$(EXEEXT): $(crack_mindlin_OBJECTS) $(crack_mindlin_DEPENDENCIES) $(EXTRA_crack_mindlin_DEPENDENCIES)
@rm -f crack_mindlin$(EXEEXT)
$(CXXLINK) $(crack_mindlin_OBJECTS) $(crack_mindlin_LDADD) $(LIBS)
-mortar_bilaplacian$(EXEEXT): $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_DEPENDENCIES)
+mortar_bilaplacian$(EXEEXT): $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_DEPENDENCIES) $(EXTRA_mortar_bilaplacian_DEPENDENCIES)
@rm -f mortar_bilaplacian$(EXEEXT)
$(CXXLINK) $(mortar_bilaplacian_OBJECTS) $(mortar_bilaplacian_LDADD) $(LIBS)
@@ -541,14 +544,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -598,10 +602,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/crack_plate/crack_bilaplacian.cc b/contrib/crack_plate/crack_bilaplacian.cc
index d705358..7e3e1ce 100644
--- a/contrib/crack_plate/crack_bilaplacian.cc
+++ b/contrib/crack_plate/crack_bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
@@ -27,6 +27,9 @@
#include "getfem/getfem_fourth_order.h"
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_superlu.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/crack_plate/crack_bilaplacian.h b/contrib/crack_plate/crack_bilaplacian.h
index c7f1552..b5b9870 100644
--- a/contrib/crack_plate/crack_bilaplacian.h
+++ b/contrib/crack_plate/crack_bilaplacian.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#include "getfem/getfem_config.h"
#include "gmm/gmm.h"
@@ -38,6 +39,9 @@
#include "getfem/getfem_mesh_fem_global_function.h"
#include "getfem/getfem_mesh_fem_sum.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/contrib/crack_plate/crack_bilaplacian.param b/contrib/crack_plate/crack_bilaplacian.param
index e1778ff..4ae865f 100644
--- a/contrib/crack_plate/crack_bilaplacian.param
+++ b/contrib/crack_plate/crack_bilaplacian.param
@@ -25,7 +25,7 @@ ANGLE_ROT = 0. ; % must not be used with conformal meshes (for FEM comparison)
%%%%% domain parameters %%%%%
N = 2;
-CRACK_SEMI_LENGTH = 0.11 ; %% only usefull if SOL_REF = 1 or 2
+CRACK_SEMI_LENGTH = 0.11 ; %% only useful if SOL_REF = 1 or 2
if ( (SOL_REF == 0) || (SOL_REF == 3) )
LX = 1. ; LY = LX; LZ = LX; % sizes of the domain.
EPSILON=0.045 ; % thickness
@@ -170,7 +170,7 @@ SEUIL = 1e-26 ; % threshold for elimination of dofs at the end of the integra
CUTOFF_FUNC = 3; % 0 for the exponential cutoff.
% 1 for a 3rd degree polynomial cutoff.
% 2 for a 5th degree polynomial cutoff.
-CUTOFF = 0.4; % usefull only for exponential cutoff (parameter of the speed of decreasing)
+CUTOFF = 0.4; % useful only for exponential cutoff (parameter of the speed of decreasing)
CUTOFF1 = 0.01; % radius
CUTOFF0 = 0.25;
diff --git a/contrib/crack_plate/crack_bilaplacian_mixed.param b/contrib/crack_plate/crack_bilaplacian_mixed.param
index 311f499..374259e 100644
--- a/contrib/crack_plate/crack_bilaplacian_mixed.param
+++ b/contrib/crack_plate/crack_bilaplacian_mixed.param
@@ -20,7 +20,7 @@ ANGLE_ROT = PI / 6 ;
%%%%% domain parameters %%%%%
N = 2;
-CRACK_SEMI_LENGTH = 0.11 ; %% only usefull if SOL_REF = 1 or 2
+CRACK_SEMI_LENGTH = 0.11 ; %% only useful if SOL_REF = 1 or 2
if SOL_REF == 0
LX = 1. ; LY = LX; LZ = LX; % sizes of the domain.
EPSILON=0.045 ; % thickness
@@ -159,7 +159,7 @@ SEUIL = 1e-26 ; % threshold for elimination of dofs at the end of the integra
CUTOFF_FUNC = 3; % 0 for the exponential cutoff.
% 1 for a 3rd degree polynomial cutoff.
% 2 for a 5th degree polynomial cutoff.
-CUTOFF = 0.4; % usefull only for exponential cutoff (parameter of the speed of decreasing)
+CUTOFF = 0.4; % useful only for exponential cutoff (parameter of the speed of decreasing)
CUTOFF1 = 0.01; % radius
CUTOFF0 = 0.25;
diff --git a/contrib/crack_plate/crack_bilaplacian_moment.cc b/contrib/crack_plate/crack_bilaplacian_moment.cc
index 02915bb..3572c52 100644
--- a/contrib/crack_plate/crack_bilaplacian_moment.cc
+++ b/contrib/crack_plate/crack_bilaplacian_moment.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
#include "getfem/getfem_regular_meshes.h"
@@ -25,7 +26,8 @@
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_superlu.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
scalar_type moment = - 1. ;
scalar_type bbeta = M_PI / 4. ;
diff --git a/contrib/crack_plate/crack_bilaplacian_problem.cc b/contrib/crack_plate/crack_bilaplacian_problem.cc
index 2f85aa9..7d2ac27 100644
--- a/contrib/crack_plate/crack_bilaplacian_problem.cc
+++ b/contrib/crack_plate/crack_bilaplacian_problem.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
#include "getfem/getfem_regular_meshes.h"
@@ -25,6 +26,9 @@
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_superlu.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
size_type is_global_dof_type_bis(getfem::pdof_description dof){
size_type global_dof = 0 ;
for (dim_type d = 0; d < 4 ; ++d){
@@ -245,8 +249,8 @@ void bilaplacian_crack_problem::init(void) {
std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION",
"Name of simplex integration method");
std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION");
- enrichment_option = PARAM.int_value("ENRICHMENT_OPTION",
- "Enrichment option");
+ enrichment_option = unsigned(PARAM.int_value("ENRICHMENT_OPTION",
+ "Enrichment option"));
enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
"radius of the enrichment area");
@@ -922,7 +926,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
const getfem::mesh::ind_cv_ct cvs = mf_u().convex_to_basic_dof(d);
for (size_type i=0; i < cvs.size(); ++i) {
- unsigned cv = cvs[i];
+ size_type cv = cvs[i];
//if (pm_cvlist.is_in(cv)) flag1 = true; else flag2 = true;
getfem::pfem pf = mf_u().fem_of_element(cv);
@@ -1082,7 +1086,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
// mf_u().point_of_dof(d) << " M2(d,d) = " << M2(d,d) << "\n";
if (M2(d,d) < PARAM.real_value("SEUIL")) {
cout << "removed : " << mf_u().point_of_basic_dof(d) << "\n";
- unsigned n = gmm::mat_nrows(H);
+ size_type n = gmm::mat_nrows(H);
gmm::resize(H, n+1, gmm::mat_ncols(H));
H(n, d) = 1;
}
@@ -1118,7 +1122,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
for (size_type d = 0; d < mf_u().nb_dof(); ++d) {
if (M2(d,d) < PARAM.real_value("SEUIL_FINAL")) {
cout << "OULALA " << d << " @ " << mf_u().point_of_basic_dof(d) << " : " << M2(d,d) << "\n";
- unsigned n = gmm::mat_nrows(H);
+ size_type n = gmm::mat_nrows(H);
gmm::resize(H1, n+1, gmm::mat_ncols(H));
H1(n, d) = 1;
}
@@ -1168,7 +1172,7 @@ bool bilaplacian_crack_problem::solve(plain_vector &U) {
GMM_ASSERT1(!mf_u().is_reduced(), "To be adapted");
for (unsigned d=0; d < mf_u().nb_dof(); d += q) {
- unsigned cv = mf_u().first_convex_of_basic_dof(d) ;
+ size_type cv = mf_u().first_convex_of_basic_dof(d) ;
getfem::pfem pf = mf_u().fem_of_element(cv);
unsigned ld = unsigned(-1);
for (unsigned dd = 0; dd < mf_u().nb_basic_dof_of_element(cv); dd += q) {
diff --git a/contrib/crack_plate/crack_bilaplacian_sif.cc b/contrib/crack_plate/crack_bilaplacian_sif.cc
index 8550032..e594acb 100644
--- a/contrib/crack_plate/crack_bilaplacian_sif.cc
+++ b/contrib/crack_plate/crack_bilaplacian_sif.cc
@@ -1,32 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
#include "getfem/getfem_regular_meshes.h"
@@ -36,6 +27,8 @@
#include "getfem/getfem_superlu.h"
#include "getfem/getfem_derivatives.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
namespace getfem {
/* build a "ring" of convexes of given center and radius */
@@ -149,7 +142,7 @@ namespace getfem {
for (unsigned d = 0; d < mf_pre_u.nb_dof(); ++d) {
// getting a getfem::pdof_description about the curent dof
const getfem::mesh::ind_cv_ct cvs = mf_pre_u.convex_to_basic_dof(d);
- unsigned cv = cvs[0], ld = unsigned(-1);
+ size_type cv = cvs[0], ld = unsigned(-1);
// getting the local index (ld)
for (unsigned dd = 0; dd < mf_pre_u.nb_basic_dof_of_element(cv); dd += 1) {
if (mf_pre_u.ind_basic_dof_of_element(cv)[dd] == d) {
@@ -454,7 +447,7 @@ void bilaplacian_crack_problem::compute_sif(const plain_vector &U, scalar_type r
cout << "initialisations ls2, ls3, mls2, mls3 : OK\n" ;
- int where = PARAM.int_value("WHERE") ;
+ int where = int(PARAM.int_value("WHERE"));
// 1 getfem::mesh_im_level_set::INTEGRATE_INSIDE (integrate over p(x)<0),
// 2 getfem::mesh_im_level_set::INTEGRATE_OUTSIDE (integrate over p(x)>0),
// 3 getfem::mesh_im_level_set::INTEGRATE_ALL,
@@ -528,8 +521,8 @@ void bilaplacian_crack_problem::compute_sif(const plain_vector &U, scalar_type r
cout << "mim2.set_integration_method(... -> OK\n";
cout << "done.\nEntering in compute_crack_stress_intensity_factors_KL(... \n" ;
- compute_crack_stress_intensity_factors_KL(ls, mim, mim2, mim3, mf_pre_u, mf_u(), U, ring_radius, D, nu, E, epsilon, KI, KII);
- cout << "computation of crack SIF via J-Integral \nK1_J:" << KI << "\nK2_J:" << KII << "\n";
+ compute_crack_stress_intensity_factors_KL(ls, mim, mim2, mim3, mf_pre_u, mf_u(), U, ring_radius, D, nu, E, epsilon, KI, KII);
+ cout << "computation of crack SIF via J-Integral \nK1_J:" << KI << "\nK2_J:" << KII << "\n";
}
void bilaplacian_crack_problem::exact_sif(scalar_type &K1, scalar_type &K2){
diff --git a/contrib/crack_plate/crack_bilaplacian_singularities.cc b/contrib/crack_plate/crack_bilaplacian_singularities.cc
index 0ddefe6..09d4d71 100644
--- a/contrib/crack_plate/crack_bilaplacian_singularities.cc
+++ b/contrib/crack_plate/crack_bilaplacian_singularities.cc
@@ -1,26 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
void bilaplacian_singular_functions::update_mls(size_type cv_) const {
if (cv_ != cv) {
cv=cv_;
diff --git a/contrib/crack_plate/crack_bilaplacian_tools.cc b/contrib/crack_plate/crack_bilaplacian_tools.cc
index 482853c..b67d9a5 100644
--- a/contrib/crack_plate/crack_bilaplacian_tools.cc
+++ b/contrib/crack_plate/crack_bilaplacian_tools.cc
@@ -1,22 +1,23 @@
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier, Jeremie Lasry.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier, Jeremie Lasry.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "crack_bilaplacian.h"
#include "getfem/getfem_regular_meshes.h"
@@ -25,6 +26,9 @@
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_superlu.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
// In this file :
// void asm_normal_derivative_dirichlet_constraints_bis
diff --git a/contrib/crack_plate/crack_mindlin.cc b/contrib/crack_plate/crack_mindlin.cc
index 8ca249a..a0bd4c2 100644
--- a/contrib/crack_plate/crack_mindlin.cc
+++ b/contrib/crack_plate/crack_mindlin.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@@ -40,6 +40,10 @@
#include "getfem/getfem_mesh_fem_global_function.h"
#include "getfem/getfem_mesh_fem_sum.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -70,7 +74,7 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
const getfem::level_set &ls;
mutable getfem::mesher_level_set mls0, mls1;
mutable size_type cv;
- scalar_type lambda, mu, epsilon; // lame coefficient and half-thickness, usefull for exact solution
+ scalar_type lambda, mu, epsilon; // lame coefficient and half-thickness, useful for exact solution
void update_mls(size_type cv_) const {
if (cv_ != cv) {
@@ -102,13 +106,13 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
case 3: {
return sqrt(r)*sin(theta/2);
} break;
- case 4: { // usefull for isotropic_linear_elasticity_2D
+ case 4: { // useful for isotropic_linear_elasticity_2D
return sqrt(r)*sin(theta/2)*cos(theta);
} break;
- case 5: { // usefull for isotropic_linear_elasticity_2D
+ case 5: { // useful for isotropic_linear_elasticity_2D
return sqrt(r)*cos(theta/2)*cos(theta);
} break;
- case 6: { // usefull for Yves's exact solution only (not for finite element computation)
+ case 6: { // useful for Yves's exact solution only (not for finite element computation)
return sqrt(r) * ( 10. * mu_ * sin(theta/2.) * ( 12. * mu_ + 6. * lambda_ - gamma * r * r) - 2. * r * r * gamma * sin(5. * theta / 2.) * (4. * lambda_ + 3. * mu_) ) ;
} break;
case 7: { // same comment as case 6
@@ -160,11 +164,11 @@ struct mindlin_singular_functions : public getfem::global_function, public getfe
g[0] = - sin(theta/2.0) / 2.0 / sqrt(r) ;
g[1] = cos(theta/2.0) / 2.0 / sqrt(r) ;
} break;
- case 4: { // usefull for isotropic_linear_elasticity_2D -> expression to check with maple !
+ case 4: { // useful for isotropic_linear_elasticity_2D -> expression to check with maple !
g[0] = ( 3./4. * sin(theta/2.0) - 1./4. * sin(5.0/2.0*theta) ) / sqrt(r) ;
g[1] = ( cos(theta/2.0) + cos(5.0/2.0*theta) ) / 4.0 / sqrt(r) ;
} break;
- case 5: { // usefull for isotropic_linear_elasticity_2D -> expression to check with maple !
+ case 5: { // useful for isotropic_linear_elasticity_2D -> expression to check with maple !
g[0] = ( 3./4.* cos(theta/2.0) - 1./4. * cos(5.0/2.0*theta) ) / sqrt(r) ;
g[1] = ( - sin(theta/2.0) - sin(5.0/2.0*theta) ) / 4.0 / sqrt(r) ;
} break;
@@ -371,7 +375,7 @@ struct crack_mindlin_problem{
4 boundaries of the plate. The exact solution
is equal to the singularities. */
size_type dx_export ; /* dx_export = 1 : exporting the "finite element solution"
- dx_export = 2 : exporting the "exact solution" (usefull in the case of sol_ref = 3) */
+ dx_export = 2 : exporting the "exact solution" (useful in the case of sol_ref = 3) */
scalar_type h_crack_length ; // half-crack-length
diff --git a/contrib/crack_plate/crack_mindlin.pl b/contrib/crack_plate/crack_mindlin.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/crack_plate/crack_mindlin.pl
+++ b/contrib/crack_plate/crack_mindlin.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/crack_plate/mortar_bilaplacian.cc b/contrib/crack_plate/mortar_bilaplacian.cc
index e7c4d58..925ccea 100644
--- a/contrib/crack_plate/mortar_bilaplacian.cc
+++ b/contrib/crack_plate/mortar_bilaplacian.cc
@@ -1,28 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "mortar_bilaplacian.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
int main(int argc, char *argv[]) {
diff --git a/contrib/crack_plate/mortar_bilaplacian.h b/contrib/crack_plate/mortar_bilaplacian.h
index af0ab61..c0bb4c4 100644
--- a/contrib/crack_plate/mortar_bilaplacian.h
+++ b/contrib/crack_plate/mortar_bilaplacian.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#include "getfem/getfem_config.h"
#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
@@ -44,6 +45,10 @@
#include "getfem/getfem_mesh_fem_global_function.h"
#include "getfem/getfem_mesh_fem_sum.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/contrib/delaminated_crack/Makefile.in b/contrib/delaminated_crack/Makefile.in
index dcf65f6..85edf78 100644
--- a/contrib/delaminated_crack/Makefile.in
+++ b/contrib/delaminated_crack/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -308,7 +311,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-delaminated_crack$(EXEEXT): $(delaminated_crack_OBJECTS) $(delaminated_crack_DEPENDENCIES)
+delaminated_crack$(EXEEXT): $(delaminated_crack_OBJECTS) $(delaminated_crack_DEPENDENCIES) $(EXTRA_delaminated_crack_DEPENDENCIES)
@rm -f delaminated_crack$(EXEEXT)
$(CXXLINK) $(delaminated_crack_OBJECTS) $(delaminated_crack_LDADD) $(LIBS)
@@ -480,14 +483,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -537,10 +541,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/delaminated_crack/delaminated_crack.cc b/contrib/delaminated_crack/delaminated_crack.cc
index 7c66b87..9557564 100644
--- a/contrib/delaminated_crack/delaminated_crack.cc
+++ b/contrib/delaminated_crack/delaminated_crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a growing delaminated crack.
@@ -39,6 +39,10 @@
#include "getfem/getfem_import.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_vector;
diff --git a/contrib/delaminated_crack/delaminated_crack.pl b/contrib/delaminated_crack/delaminated_crack.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/delaminated_crack/delaminated_crack.pl
+++ b/contrib/delaminated_crack/delaminated_crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/icare/Makefile.am b/contrib/icare/Makefile.am
index 8fa24b6..9eb019c 100644
--- a/contrib/icare/Makefile.am
+++ b/contrib/icare/Makefile.am
@@ -8,8 +8,10 @@ CLEANFILES = icare.data
icare_SOURCES = icare.cc icare.h
SUPLDFLAGS = @SUPLDFLAGS@
-INCLUDES = -I$(top_srcdir)/src -I../../src
-LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
+MUMPS_LIBS = @MUMPS_LIBS@
+# MUMPS_CFLAGS = @MUMPS_CFLAGS@
+INCLUDES = -I$(top_srcdir)/src -I../../src # $(MUMPS_CFLAGS)
+LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/icare/icare.pl
diff --git a/contrib/icare/Makefile.in b/contrib/icare/Makefile.in
index 06b6bbd..49eec38 100644
--- a/contrib/icare/Makefile.in
+++ b/contrib/icare/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -56,7 +56,8 @@ am_icare_OBJECTS = icare.$(OBJEXT)
icare_OBJECTS = $(am_icare_OBJECTS)
icare_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
-icare_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1)
+icare_DEPENDENCIES = ../../src/libgetfem.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@@ -110,6 +111,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -128,6 +130,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -144,6 +147,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -208,6 +212,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -243,7 +248,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -265,8 +269,9 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
CLEANFILES = icare.data
icare_SOURCES = icare.cc icare.h
-INCLUDES = -I$(top_srcdir)/src -I../../src
-LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
+# MUMPS_CFLAGS = @MUMPS_CFLAGS@
+INCLUDES = -I$(top_srcdir)/src -I../../src # $(MUMPS_CFLAGS)
+LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/icare/icare.pl
EXTRA_DIST = \
icare.pl \
@@ -318,7 +323,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-icare$(EXEEXT): $(icare_OBJECTS) $(icare_DEPENDENCIES)
+icare$(EXEEXT): $(icare_OBJECTS) $(icare_DEPENDENCIES) $(EXTRA_icare_DEPENDENCIES)
@rm -f icare$(EXEEXT)
$(CXXLINK) $(icare_OBJECTS) $(icare_LDADD) $(LIBS)
@@ -490,14 +495,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -547,10 +553,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/icare/icare.cc b/contrib/icare/icare.cc
index 1d46aff..29740d1 100644
--- a/contrib/icare/icare.cc
+++ b/contrib/icare/icare.cc
@@ -1,29 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-/* *********************************************************************** */
-/* */
-/* Copyright (C) 2002-2009 Michel Fournié, Julien Pommier, */
-/* Yves Renard, Nicolas Renon, Nicolas Roux. */
-/* */
-/* This program is free software; you can redistribute it and/or modify */
-/* it under the terms of the GNU Lesser General Public License as */
-/* published by the Free Software Foundation; version 2.1 of the License. */
-/* */
-/* 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 Lesser General Public License for more details. */
-/* */
-/* You should have received a copy of the GNU Lesser General Public */
-/* License along with this program; if not, write to the Free Software */
-/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, */
-/* USA. */
-/* */
-/* *********************************************************************** */
-
-/**@file icare.cc
- @brief Fluid flow (Navier-Stokes) around an obstacle.
-*/
-
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Michel Fourni, Julien Pommier,
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
#include "getfem/getfem_import.h"
@@ -56,7 +50,7 @@ typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
typedef getfem::modeling_standard_plain_vector plain_vector;
enum {
- DIRICHLET_BOUNDARY_NUM = 777777,
+ DIRICHLET_BOUNDARY_NUM = 0,
NONREFLECTIVE_BOUNDARY_NUM,
NORMAL_PART_DIRICHLET_BOUNDARY_NUM,
ON_CYLINDER_BOUNDARY_NUM,
@@ -105,23 +99,27 @@ struct navier_stokes_problem {
scalar_type t_export;
void do_export(scalar_type t);
- int option;
+ int option, time_order;
std::auto_ptr<problem_definition> pdef;
std::string datafilename;
ftool::md_param PARAM;
- plain_vector Un1, Un0, Pn1, Pn0, lambda; /* U_{n+1}, U_{n}, P_{n+1} and P_{n} */
+ plain_vector Un1, Un0, Pn1, Pn0, lambda, tmp; /* U_{n+1}, U_{n}, P_{n+1} and P_{n} */
+ plain_vector Unm1; /*U_{n-1} */
base_small_vector sol_f(const base_small_vector &P, scalar_type t);
base_small_vector Dir_cond(const base_small_vector &P, scalar_type t);
void solve(void);
//void solve_METHOD_SPLITTING(bool);
- //void solve_FULLY_CONSERVATIVE();
+ //void solve_FULLY_CONSERVATIVE();
//void solve_PREDICTION_CORRECTION();
void solve_PREDICTION_CORRECTION2();
+ //void solve_PREDICTION_CORRECTION_ORDER2();
+ // void solve_FULLY_EXPLICIT_ORDER2();
+
void init(void);
navier_stokes_problem(void) : mim(mesh), mf_u(mesh), mf_p(mesh),
mf_rhs(mesh), mf_mult(mesh) {}
@@ -176,34 +174,51 @@ struct problem_definition {
void initial_condition_u(navier_stokes_problem &p, plain_vector &U0) {
GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
- plain_vector R(p.N*p.mf_rhs.nb_dof()), F(p.mf_u.nb_dof());
+ plain_vector R(p.N*p.mf_rhs.nb_dof());
for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i) {
base_small_vector
r = initial_velocity(p, p.mf_rhs.point_of_basic_dof(i));
gmm::copy(r, gmm::sub_vector(R, gmm::sub_interval(i*p.N, p.N)));
}
- /* L2 projection from mf_rhs onto mf_u (we cannot interpolate directly
- onto mf_u since it can be non-lagrangian) */
- sparse_matrix M(p.mf_u.nb_dof(), p.mf_u.nb_dof());
- getfem::asm_mass_matrix(M, p.mim, p.mf_u);
- getfem::asm_source_term(F, p.mim, p.mf_u, p.mf_rhs, R);
- gmm::iteration iter(1E-13);
- gmm::cg(M, U0, F, gmm::identity_matrix(), iter);
+ gmm::copy(R,U0);
}
+// void initial_condition_u(navier_stokes_problem &p, plain_vector &U0) {
+// GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
+// plain_vector R(p.N*p.mf_rhs.nb_dof()), F(p.mf_u.nb_dof());
+// for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i) {
+// base_small_vector
+// r = initial_velocity(p, p.mf_rhs.point_of_basic_dof(i));
+// gmm::copy(r, gmm::sub_vector(R, gmm::sub_interval(i*p.N, p.N)));
+// }
+// /* L2 projection from mf_rhs onto mf_u (we cannot interpolate directly
+// onto mf_u since it can be non-lagrangian) */
+// sparse_matrix M(p.mf_u.nb_dof(), p.mf_u.nb_dof());
+// getfem::asm_mass_matrix(M, p.mim, p.mf_u);
+// getfem::asm_source_term(F, p.mim, p.mf_u, p.mf_rhs, R);
+// gmm::iteration iter(1E-13);
+// gmm::cg(M, U0, F, gmm::identity_matrix(), iter);
+// }
+
void initial_condition_p(navier_stokes_problem &p, plain_vector &P0) {
- plain_vector PP(p.mf_rhs.nb_dof());
- GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
- for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i)
- PP[i] = initial_pressure(p, p.mf_rhs.point_of_basic_dof(i));
-
- /* L2 projection from mf_rhs onto mf_p */
- plain_vector F(p.mf_p.nb_dof());
- sparse_matrix M(p.mf_p.nb_dof(), p.mf_p.nb_dof());
- getfem::asm_mass_matrix(M, p.mim, p.mf_p);
- getfem::asm_source_term(F, p.mim, p.mf_p, p.mf_rhs, PP);
- gmm::iteration iter(1E-13);
- gmm::cg(M, P0, F, gmm::identity_matrix(), iter);
+ GMM_ASSERT1(!p.mf_p.is_reduced(), "To be adapted");
+ for (unsigned i=0; i < p.mf_p.nb_dof(); ++i)
+ P0[i] = initial_pressure(p, p.mf_p.point_of_basic_dof(i));
}
+
+// void initial_condition_p(navier_stokes_problem &p, plain_vector &P0) {
+// plain_vector PP(p.mf_rhs.nb_dof());
+// GMM_ASSERT1(!p.mf_rhs.is_reduced(), "To be adapted");
+// for (unsigned i=0; i < p.mf_rhs.nb_dof(); ++i)
+// PP[i] = initial_pressure(p, p.mf_rhs.point_of_basic_dof(i));
+
+// /* L2 projection from mf_rhs onto mf_p */
+// plain_vector F(p.mf_p.nb_dof());
+// sparse_matrix M(p.mf_p.nb_dof(), p.mf_p.nb_dof());
+// getfem::asm_mass_matrix(M, p.mim, p.mf_p);
+// getfem::asm_source_term(F, p.mim, p.mf_p, p.mf_rhs, PP);
+// gmm::iteration iter(1E-13);
+// gmm::cg(M, P0, F, gmm::identity_matrix(), iter);
+// }
virtual ~problem_definition() {}
};
@@ -496,7 +511,7 @@ struct problem_rotating_cylinder : public problem_definition {
virtual scalar_type initial_pressure(navier_stokes_problem &,
const base_node &) {
- return 0.5;
+ return 0.0; // the mean value = 0
}
problem_rotating_cylinder(scalar_type aa) : alpha(aa) {}
@@ -537,6 +552,7 @@ void navier_stokes_problem::init(void) {
Tinitial = PARAM.real_value("Tinitial","Initial Time");
dt_export = PARAM.real_value("DT_EXPORT", "Time step for export");
noisy = PARAM.int_value("NOISY", "");
+ time_order = PARAM.int_value("TIME_ORDER", "Discretization time order");
option = PARAM.int_value("OPTION", "option");
// R = PARAM.real_value("RADIUS","Radius of the cylinder");
@@ -609,15 +625,21 @@ void navier_stokes_problem::solve() {
gmm::resize(Un1, mf_u.nb_dof());
gmm::resize(Pn0, mf_p.nb_dof());
gmm::resize(Pn1, mf_p.nb_dof());
- //switch (option) {
+
+ if (time_order==2){
+ gmm::resize(Unm1, mf_u.nb_dof());
+ }
+
+ switch (option) {
//case 0 : solve_METHOD_SPLITTING(true); break;
//case 1 : solve_METHOD_SPLITTING(false); break;
//case 2 : solve_FULLY_CONSERVATIVE(); break;
//case 3 : solve_PREDICTION_CORRECTION(); break;
- //case 4 : solve_PREDICTION_CORRECTION2(); break;
- //default: GMM_ASSERT1(false, "unknown method");
- //}
- solve_PREDICTION_CORRECTION2();
+ case 4 : solve_PREDICTION_CORRECTION2(); break;
+ //case 5 : solve_PREDICTION_CORRECTION_ORDER2(); break;
+ //case 6 : solve_FULLY_EXPLICIT_ORDER2();break;
+ default: GMM_ASSERT1(false, "unknown method");
+ }
}
/**************************************************************************/
@@ -910,7 +932,7 @@ void navier_stokes_problem::solve() {
// }
-/************************************************************/
+/******************************************************************************************/
void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
size_type nbdof_u = mf_u.nb_dof(), nbdof_p = mf_p.nb_dof();
@@ -920,6 +942,7 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
gmm::sub_interval I1(0, nbdof_u);
cout << "nbdof rhs = " << nbdof_rhs << endl;
+ cout << "h = "<< mesh.minimal_convex_radius_estimate()<< endl;
// Discretization of laplace operator for u
sparse_matrix K1(nbdof_u, nbdof_u);
@@ -931,46 +954,56 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
sparse_matrix M(nbdof_u, nbdof_u);
asm_mass_matrix(M, mim, mf_u, mpirg);
-
// Matrix p div u
sparse_matrix B(nbdof_p, nbdof_u);
asm_stokes_B(B, mim, mf_u, mf_p, mpirg);
+ // Boundary terms p v.n
+ sparse_matrix Bbc(nbdof_p, nbdof_u);
+ asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+ asm_B_boundary(Bbc, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NONREFLECTIVE_BOUNDARY_NUM));
+ asm_B_boundary(Bbc, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM));
+ asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM));
+
+ if (N==3){
+ asm_B_boundary(Bbc, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM));
+ }
+
//////////////////////////////////////////////////////////////////////////
// To take into account the BOUNDAY CONDITIONS (Lagrange multipliers)
//////////////////////////////////////////////////////////////////////////
mf_mult.set_qdim(N);
GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
- dal::bit_vector dofon_nonref
- = mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
-
- dal::bit_vector dofon_Dirichlet_Out_Cylinder
- = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
+ dal::bit_vector dofon_nonref = mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
- //(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
- //(NEUMANN_BOUNDARY_NUM);
- //dofon_NDirichlet.setminus(dofon_nonref);
- //dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
- //dofon_Neumann.setminus(dofon_Dirichlet_On_cylinder);
- //dofon_Neumann.setminus(dofon_nonref);
- //dofon_Neumann.setminus(dofon_Dirichlet_Out_Cylinder);
-
-
- // Normal part Dirichlet condition -- sur v en 2D -- sur v et w en 3D
+ dal::bit_vector dofon_Dirichlet_Out_Cylinder = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
- //cout << dofon_Dirichlet_Out_Cylinder << endl;
- //cout << dofon_nonref << endl;
-
- mf_mult.set_qdim(1);
- dal::bit_vector dofon_NDirichlet
- = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
- //dofon_NDirichlet.setminus(dofon_nonref);
- //dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
-
+
+
+
+//(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
+//dofon_NDirichlet.setminus(dofon_nonref);
+//dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
+//(NEUMANN_BOUNDARY_NUM);
+//dofon_Neumann.setminus(dofon_Dirichlet_On_cylinder);
+//dofon_Neumann.setminus(dofon_nonref);
+//dofon_Neumann.setminus(dofon_Dirichlet_Out_Cylinder);
+
+//*******************************************************************************************************
+// Normal part Dirichlet condition -- sur v en 2D -- sur v et w en 3D
+//*******************************************************************************************************
+//cout << dofon_Dirichlet_Out_Cylinder << endl;
+//cout << dofon_nonref << endl;
+//
+// mf_mult.set_qdim(1);
+ dal::bit_vector dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
+ dofon_NDirichlet.setminus(dofon_nonref);
+ dofon_NDirichlet.setminus(dofon_Dirichlet_Out_Cylinder);
+
std::vector<size_type> ind_ct_ndir;
for (dal::bv_visitor i(dofon_NDirichlet); !i.finished(); ++i) {
- if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N))
+ if (dofon_Dirichlet_Out_Cylinder.is_in(i) || dofon_nonref.is_in(i))
dofon_NDirichlet.sup(i); // Suppress i because it is on the
else // Dirichlet or non reflective boundary.
ind_ct_ndir.push_back(i);
@@ -982,56 +1015,58 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
getfem::mesh_region mpindirrg
=mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
- sparse_matrix HND1(nbdof_NDir, nbdof_u);
- {
- sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
- getfem::generic_assembly assem;
- // assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);"); - Good in 2D / Bad in 3D
- assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,2);"); // 2ieme composante V = (u,v,w) : v = 0
- assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
- assem.push_mat(A); assem.assembly(mpindirrg);
- gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND1);
- }
- cout << "Nb of Normal part Dirichlet constraints (qdim=1): " << nbdof_NDir << endl;
-
- sparse_matrix HND;
+// sparse_matrix HND1(nbdof_NDir, nbdof_u);
+// {
+// sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
+// getfem::generic_assembly assem;
+// // assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);"); - Good in 2D / Bad in 3D
+// assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,2);"); // 2ieme composante V = (u,v,w) : v = 0
+// assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+// assem.push_mat(A); assem.assembly(mpindirrg);
+// gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND1);
+// }
+// cout << "Nb of Normal part Dirichlet constraints (qdim=1): " << nbdof_NDir << endl;
+//
+// sparse_matrix HND;
if (N==2){
- gmm::resize(HND,nbdof_NDir, nbdof_u);
- gmm::copy(HND1,HND);
+ //gmm::resize(HND,nbdof_NDir, nbdof_u);
+ //gmm::copy(HND1,HND);
I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
}
- else { //(N==3){
- // Normal part Dirichlet condition Left - Right (in 3D only)
- sparse_matrix HND2(nbdof_NDir, nbdof_u);
- {
- sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
- getfem::generic_assembly assem;
- assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
- assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
- assem.push_mat(A); assem.assembly(mpindirrg);
- gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND2);
- }
- gmm::resize(HND,2*nbdof_NDir, nbdof_u);
- gmm::copy(HND1,gmm::sub_matrix(HND,gmm::sub_interval(0,nbdof_NDir),I1) );
-
- gmm::copy(HND2,gmm::sub_matrix(HND,gmm::sub_interval(nbdof_NDir,nbdof_NDir),I1) );
-
- nbdof_NDir = 2*nbdof_NDir;
- I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
- }
-
- //M gmm::dense_matrix<double> DM(nbdof_NDir,nbdof_u);
- //M gmm:: copy(HND,DM);
- //M for(unsigned i=0;i<nbdof_NDir;++i){
- //M for(unsigned j=0;j<nbdof_u;++j){
- //M if (DM(i,j)!=0.0) cout << i<<" , "<<j<<" = "<<DM(i,j)<< endl;
- //M }
- //M }
-
-
- // Dirichlet condition except on cylinder
- mf_mult.set_qdim(N);
- GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+// else { //(N==3){
+// // Normal part Dirichlet condition Left - Right (in 3D only)
+// sparse_matrix HND2(nbdof_NDir, nbdof_u);
+// {
+// sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
+// getfem::generic_assembly assem;
+// assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
+// assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+// assem.push_mat(A); assem.assembly(mpindirrg);
+// gmm::copy(gmm::sub_matrix(A, SUB_CT_NDIR, I1), HND2);
+// }
+// gmm::resize(HND,2*nbdof_NDir, nbdof_u);
+// gmm::copy(HND1,gmm::sub_matrix(HND,gmm::sub_interval(0,nbdof_NDir),I1) );
+//
+// gmm::copy(HND2,gmm::sub_matrix(HND,gmm::sub_interval(nbdof_NDir,nbdof_NDir),I1) );
+//
+// nbdof_NDir = 2*nbdof_NDir;
+// I2 = gmm::sub_interval(nbdof_u, nbdof_NDir);
+// }
+//
+//
+// //M gmm::dense_matrix<double> DM(nbdof_NDir,nbdof_u);
+// //M gmm:: copy(HND,DM);
+// //M for(unsigned i=0;i<nbdof_NDir;++i){
+// //M for(unsigned j=0;j<nbdof_u;++j){
+// //M if (DM(i,j)!=0.0) cout << i<<" , "<<j<<" = "<<DM(i,j)<< endl;
+// //M }
+// //M }
+//
+// // Dirichlet condition except on cylinder
+// mf_mult.set_qdim(N);
+// GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+ //size_type nbdof_NDir = 0;
+//*******************************************************************************************************
//dal::bit_vector dofon_Dirichlet_Out_Cylinder
// = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
@@ -1090,7 +1125,7 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
gmm::copy(gmm::sub_matrix(A, SUB_CT_DIR_CYL, I1), HDC);
}
cout << "Nb of Dirichlet constraints on cylinder : " << nbdof_Dir_On_Cylinder << endl;
- gmm :: resize(lambda, nbdof_Dir_On_Cylinder);
+ //??//gmm :: resize(lambda, nbdof_Dir_On_Cylinder);
// Non reflective condition
@@ -1126,50 +1161,50 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
// In 3D - NEUMANN_BOUNDARY_NUM
sparse_matrix HN;
- size_type nbdof_neumann;
+ size_type nbdof_neumann=0;
gmm::sub_interval I5;
dofon_nonref= mf_mult.basic_dof_on_region(NONREFLECTIVE_BOUNDARY_NUM);
dofon_Dirichlet_Out_Cylinder = mf_mult.basic_dof_on_region(DIRICHLET_BOUNDARY_NUM);
- dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
+ //dofon_NDirichlet = mf_mult.basic_dof_on_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM);
dofon_Dirichlet_On_Cylinder = mf_mult.basic_dof_on_region(ON_CYLINDER_BOUNDARY_NUM);
- if (N==3){
- mf_mult.set_qdim(1);
-
- dal::bit_vector dofon_neumann = mf_mult.basic_dof_on_region(NEUMANN_BOUNDARY_NUM);
-
- std::vector<size_type> ind_ct_neumann;
- for (dal::bv_visitor i(dofon_neumann); !i.finished(); ++i) {
- if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N) ||
- dofon_NDirichlet.is_in(i*N) || dofon_Dirichlet_On_Cylinder.is_in(i*N) )
- dofon_neumann.sup(i);
- else
- ind_ct_neumann.push_back(i);
- }
- //cout << mf_mult.point_of_basic_dof(i)<< endl;
-
- nbdof_neumann = dofon_neumann.card();
- gmm::sub_index SUB_CT_NEUMANN(ind_ct_neumann);
-
- I5 = gmm::sub_interval(nbdof_u+nbdof_NDir+nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder+nbdof_nonref, nbdof_neumann);
- getfem::mesh_region mpineumannrg = mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM);
-
- gmm::resize(HN,nbdof_neumann, nbdof_u);
- {
- sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
- getfem::generic_assembly assem;
- assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
- assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
- assem.push_mat(A); assem.assembly(mpineumannrg);
- gmm::copy(gmm::sub_matrix(A, SUB_CT_NEUMANN, I1), HN);
- }
- cout << "Nb of Neumann part in 3D (qdim=1): " << nbdof_neumann << endl;
-
- mf_mult.set_qdim(N);
-
-
- }
+ //if (N==3){
+// mf_mult.set_qdim(1);
+//
+// dal::bit_vector dofon_neumann = mf_mult.basic_dof_on_region(NEUMANN_BOUNDARY_NUM);
+//
+// std::vector<size_type> ind_ct_neumann;
+// for (dal::bv_visitor i(dofon_neumann); !i.finished(); ++i) {
+// if (dofon_Dirichlet_Out_Cylinder.is_in(i*N) || dofon_nonref.is_in(i*N) ||
+// dofon_NDirichlet.is_in(i*N) || dofon_Dirichlet_On_Cylinder.is_in(i*N) )
+// dofon_neumann.sup(i);
+// else
+// ind_ct_neumann.push_back(i);
+// }
+// //cout << mf_mult.point_of_basic_dof(i)<< endl;
+//
+// nbdof_neumann = dofon_neumann.card();
+// gmm::sub_index SUB_CT_NEUMANN(ind_ct_neumann);
+//
+// I5 = gmm::sub_interval(nbdof_u+nbdof_NDir+nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder+nbdof_nonref, nbdof_neumann);
+// getfem::mesh_region mpineumannrg = mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM);
+//
+// gmm::resize(HN,nbdof_neumann, nbdof_u);
+// {
+// sparse_matrix A(mf_mult.nb_dof(), nbdof_u);
+// getfem::generic_assembly assem;
+// assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1))(:,:,3);"); // 3ieme composante V = (u,v,w) : w = 0
+// assem.push_mi(mim); assem.push_mf(mf_u); assem.push_mf(mf_mult);
+// assem.push_mat(A); assem.assembly(mpineumannrg);
+// gmm::copy(gmm::sub_matrix(A, SUB_CT_NEUMANN, I1), HN);
+// }
+// cout << "Nb of Neumann part in 3D (qdim=1): " << nbdof_neumann << endl;
+//
+// mf_mult.set_qdim(N);
+//
+//
+// }
/////////////////////////////////////////////////////////////////////////////////////////////////
// Operators to solve NSE
@@ -1221,8 +1256,6 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
}
-
-
//Prise en compte de façon faible
plain_vector HP(nbdof_p);
{ plain_vector A(nbdof_p);
@@ -1238,14 +1271,16 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
//K2(nbdof_p,nbdof_p) = 0.0;
*/
-
-
//Prise en compte de façon forte
for (unsigned i=0;i<=nbdof_p; ++i) {
K2(nbdof_p,i) = K2(i,nbdof_p) = 1.0;} // mean value of the pressure = 0
//K2(nbdof_p, 0) = K2(0, nbdof_p) = 1.0;} // set the first pressure dof to 0
K2(nbdof_p,nbdof_p) = 0.0;
+ gmm::SuperLU_factor<double> SLUsys2, SLUsys3,SLUsys1;
+ SLUsys2.build_with(K2);
+
+
/////////////////////////////////////////////////////////////////////////////////////////////////
// dynamic problem
/////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1254,6 +1289,8 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
plain_vector Phi(nbdof_p);
/////// REPRISE DES CALCULS EVENTUELS //////
+ std::string initfile_Um1 = PARAM.string_value("INIT_FILE_Um1");
+
std::string initfile_U = PARAM.string_value("INIT_FILE_U");
std::string initfile_P = PARAM.string_value("INIT_FILE_P");
@@ -1264,6 +1301,11 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
gmm::vecload(initfile_U,Un0);
gmm::vecload(initfile_P,Pn0);
}
+
+ if (initfile_Um1.size() != 0) {
+ gmm::vecload(initfile_Um1,Unm1);
+ }
+
////// initialiser t et eviter les 2 initialisations suivantes
std::ofstream coeffTP("coeffTP.data");
@@ -1275,58 +1317,198 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
scalar_type BoxXmax = PARAM.real_value("BOXXmax", "Particular Point xMax");
scalar_type BoxYmin = PARAM.real_value("BOXYmin", "Particular Point yMin");
scalar_type BoxYmax = PARAM.real_value("BOXYmax", "Particular Point yMax");
+ scalar_type BoxZmin, BoxZmax;
+
+ if (N==3) {
+ BoxZmin = PARAM.real_value("BOXZmin", "Particular Point zMin");
+ BoxZmax = PARAM.real_value("BOXZmax", "Particular Point zMax");
+ }
+
+ base_node ptPartU(N+1), ptPartP(N+1);
- base_node ptRef(N+2);
+
GMM_ASSERT1(!mf_p.is_reduced(), "To be adapted");
- for (unsigned i=0; i< mf_p.nb_dof(); ++i){
- bgeot :: base_node BN = mf_p.point_of_basic_dof(i);
- if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin ) {
- for (unsigned j=0; j< N; j++) {ptRef[j] = BN[j];}
- ptRef[N] = i; // c'est scalaire sur p
- ptRef[N+1] = 0;
- }
- }
-
- GMM_ASSERT1(!mf_u.is_reduced(), "To be adapted");
- for (unsigned i=0; i< mf_u.nb_dof(); ++i){
- bgeot :: base_node BN = mf_u.point_of_basic_dof(i);
- if (N==2) {
- if (BN[0]==ptRef[0] && BN[1] ==ptRef[1]) {ptRef[3] = i+N-1;}
- // c'est vectoriel sur u
- //Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
- // Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
- // D'ou la modif : non pas i mais i+N-1
- }
- if (N==3) {
- if (BN[0]==ptRef[0] && BN[1] ==ptRef[1] && BN[2] == ptRef[2]) {ptRef[4] = i+N-1;}
- }
- }
- if (N==2)
- cout << "Reference Point for Cd and Cl : (" << ptRef[0]<<","<< ptRef[1]<<")"<<endl;
- if (N==3)
- cout << "Reference Point for Cd and Cl : (" << ptRef[0]<<","<< ptRef[1]<<","<< ptRef[2]<<")"<<endl;
-
- size_type sizelsystem;
+ if (N==2) {
+ for (unsigned i=0; i< mf_p.nb_dof(); ++i){
+ bgeot :: base_node BN = mf_p.point_of_basic_dof(i);
+ if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin ) {
+ cout << "Point Part in Box -- i on mf_p= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< endl;
+ ptPartP[0] = BN[0];
+ ptPartP[1] = BN[1];
+ ptPartP[2] = i;
+ break;
+ }
+ }
+
+
+ for (unsigned i=0; i< mf_u.nb_dof(); ++i){
+ bgeot :: base_node BN = mf_u.point_of_dof(i);
+ if (BN[0]==ptPartP[0] && BN[1]==ptPartP[1] ) {
+ cout << "Point Part in Box -- i on mf_u= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< endl;
+ // Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
+ // Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
+ // D'ou la modif dans ptPartU[2]
+ ptPartU[0] = BN[0];
+ ptPartU[1] = BN[1];
+ ptPartU[2] = i - N + 1;
+ break;
+
+ }
+ }
+ ptPartData << ptPartP[0] << " " << ptPartP[1] << endl;
+
+ }
+ if (N==3) {
+ for (unsigned i=0; i< mf_p.nb_dof(); ++i){
+ bgeot :: base_node BN = mf_p.point_of_basic_dof(i);
+ if (BN[0]<BoxXmax && BN[0] > BoxXmin && BN[1]< BoxYmax && BN[1] > BoxYmin && BN[2]< BoxZmax && BN[2] > BoxZmin ) {
+ cout << "Point Part in Box -- i on mf_p= " << i <<",x="<<BN[0]<<",y="<<BN[1]<< ",z="<<BN[2]<< endl;
+ ptPartP[0] = BN[0];
+ ptPartP[1] = BN[1];
+ ptPartP[2] = BN[2];
+ ptPartP[3] = i;
+ break;
+ }
+ }
+
+
+ for (unsigned i=0; i< mf_u.nb_dof(); ++i){
+ bgeot :: base_node BN = mf_u.point_of_dof(i);
+ if (BN[0]==ptPartP[0] && BN[1]==ptPartP[1]&& BN[2]==ptPartP[2] ) {
+ cout << "Point Part in Box -- i on mf_u= " << i <<",x="<<BN[0]<<",y="<<BN[1]<<",z="<<BN[2]<< endl;
+ // Attention c'est vectoriel => en sortie i <-> pt sur la dernière composante de la vitesse
+ // Vitesse =(U,V,W) alors en 2D --> sur V, en 3D --> sur W
+ // D'ou la modif dans ptPartU[3]
+ ptPartU[0] = BN[0];
+ ptPartU[1] = BN[1];
+ ptPartU[2] = BN[2];
+ ptPartU[3] = i - N + 1;
+ break;
+
+ }
+ }
+ ptPartData << ptPartP[0] << " " << ptPartP[1] << " " << ptPartP[2] << endl;
+
+ }
+
+ size_type sizelsystem = 0;
size_type sizelsystemP = nbdof_p+1;
if (N==2)
- sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder+ nbdof_nonref;
+ sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder + nbdof_nonref;
if (N==3)
- sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder+ nbdof_nonref + nbdof_neumann;
+ sizelsystem = nbdof_u + nbdof_NDir + nbdof_Dir_Out_Cylinder + nbdof_Dir_On_Cylinder + nbdof_nonref;// + nbdof_neumann;
sparse_matrix A1(sizelsystem, sizelsystem);
sparse_matrix A2(sizelsystem, sizelsystem);
- plain_vector Y(sizelsystem), YY(nbdof_u);
+ sparse_matrix A2u(sizelsystem/2, sizelsystem/2);
+ sparse_matrix A2v(sizelsystem/2, sizelsystem/2);
+ sparse_matrix A1u(sizelsystem/2, sizelsystem/2);
+ sparse_matrix A1v(sizelsystem/2, sizelsystem/2);
+
+
+ plain_vector Y(sizelsystem), YY(nbdof_u), Ytmp(nbdof_u);
do_export(0);
cout << "-----------------------------------------------------------" << endl;
cout << "Dynamic problem implementation" << endl;
cout << "-----------------------------------------------------------" << endl;
+
+gmm :: sub_slice SUB_CT_Vu(0,sizelsystem/N,N);
+gmm :: sub_slice SUB_CT_Vv(1,sizelsystem/N,N);
+gmm :: sub_interval SUB_CT_V(0,nbdof_u);
+gmm :: sub_interval SUB_CT_P(0,nbdof_p);
+
+// idees
+//gmm::copy(gmm::sub_vector(F1generic,SUB_CT_V1full),F1full);
+//gmm::copy(gmm::sub_vector(X1full,SUB_CT_V),X1);
+//gmm::copy(gmm::sub_vector(X2full,SUB_CT_V),X2);
+//gmm::copy(X1,gmm::sub_vector(USTAR,gmm::sub_slice(0,nbdof_u,2)));
+//gmm::copy(X2,gmm::sub_vector(USTAR,gmm::sub_slice(1,nbdof_u,2)));
+
for (scalar_type t = Tinitial + dt; t <= T; t += dt) {
- /*
+
+ //******* Construction of the Matrix for the 3rd system (to obtain velocity) **********//
+ if (t==Tinitial+dt){ //time_order = 1 or first iterations with time_order = 2, computed once
+ gmm::clear(A2);
+ gmm::add(M, gmm::sub_matrix(A2, I1));
+ //// Normal Dirichlet condition
+ //gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
+ //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+
+ // Dirichlet condition except on cylinder
+ gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
+ gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
+
+ // Dirichlet condition on cylinder
+ gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
+ gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
+
+ // Non reflective condition
+ gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
+ gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
+
+ // Factorization LU
+ // SLUsys3.build_with(A2); // pour le systeme couple (u,v)
+
+
+
+ gmm::clear(A2u);
+ //gmm::clear(A2v);
+
+
+ gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vu,SUB_CT_Vu),A2u);
+ //gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vv,SUB_CT_Vv),A2v);
+
+
+ //gmm::add(gmm::scaled(A2u,-1.0),A2v);
+ //cout <<"A2 "<< gmm::mat_norminf(A2v) << endl;
+
+ SLUsys3.build_with(A2u);
+
+ }
+
+ if ((time_order==2)&&(t==Tinitial+2*dt)){ // computed once
+ gmm::clear(A2);
+ gmm::add(gmm::scaled(M,1.5), gmm::sub_matrix(A2, I1));
+ //// Normal Dirichlet condition
+ //gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
+ //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+
+ // Dirichlet condition except on cylinder
+ gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
+ gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
+
+ // Dirichlet condition on cylinder
+ gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
+ gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
+
+ // Non reflective condition
+ gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
+ gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
+
+ // Factorization LU
+ //SLUsys3.build_with(A2); // pb en (u,v) coupl
+
+ gmm::clear(A2u);
+ //gmm::clear(A2v);
+
+
+ gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vu,SUB_CT_Vu),A2u);
+ //gmm::copy(gmm::sub_matrix(A2,SUB_CT_Vv,SUB_CT_Vv),A2v);
+
+ SLUsys3.build_with(A2u);
+
+
+ }
+
+
+ //******* The matrix of the 3rd system is constructed and factorized
+
+ /*
// cout<<"cylinder"<<gmm::sub_vector(Un0,SUB_CT_DIR_CYL) << endl;
//cout<<"dir"<<gmm::sub_vector(Un0,SUB_CT_DIR) << endl;
@@ -1348,73 +1530,82 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
// Assembly of the first linear system
- gmm::clear(A1);
- gmm::clear(A2);
- gmm::clear(Y);
- gmm::clear(YY);
+ if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2, computed once
+ gmm::clear(A1);
+ gmm::clear(Y);
+ // laplace operator
+ gmm::copy(K1, gmm::sub_matrix(A1, I1));
+ // Nonlinear part
+ //cout << "avant asm_NS_uuT"<< endl;
+ getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);
+ //cout << "apres asm_NS_uuT"<< endl;
+ // Dynamic part
+ gmm::add(gmm::scaled(M, 1./dt), gmm::sub_matrix(A1, I1));
+
+ gmm::mult(M, gmm::scaled(Un0, 1.0/dt), gmm::sub_vector(Y, I1));
+
+ }
+
+ if ((time_order==2)&&(t>=Tinitial+2*dt)){
+ gmm::clear(A1);
+ gmm::clear(Y);
+ gmm::clear(Ytmp);
+ // laplace operator
+ gmm::copy(K1, gmm::sub_matrix(A1, I1));
+ // Nonlinear part
+ //cout << "avant asm_NS_uuT"<< endl;
+ getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);
+ //cout << "apres asm_NS_uuT"<< endl;
+ // Dynamic part
+ gmm::add(gmm::scaled(M, 1.5/dt), gmm::sub_matrix(A1, I1));
+ gmm::add(gmm::scaled(Un0, 2.0/dt),gmm::scaled(Unm1,-0.5/dt),Ytmp);
+ gmm::mult(M, Ytmp, gmm::sub_vector(Y, I1));
+
+ }
- // laplace operator
- gmm::copy(K1, gmm::sub_matrix(A1, I1));
- // Nonlinear part
- getfem::asm_NS_uuT(gmm::sub_matrix(A1, I1), mim, mf_u, Un0, mpirg);
- // Dynamic part
- gmm::add(gmm::scaled(M, 1./dt), gmm::sub_matrix(A1, I1));
-
- gmm::add(M, gmm::sub_matrix(A2, I1));
-
- gmm::mult(M, gmm::scaled(Un0, 1./dt), gmm::sub_vector(Y, I1));
#if GETFEM_PARA_LEVEL > 1
MPI_SUM_VECTOR2(Y);
#endif
-
+
// Volumic source term -- inutile d'assambler car F = 0
//pdef->source_term(*this, t, F);
//getfem::asm_source_term(Y, mim, mf_u, mf_rhs, F,mpirg); // inutile (F=0)
- // Normal Dirichlet condition
- gmm::copy(HND, gmm::sub_matrix(A1, I2, I1));
- gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A1, I1, I2));
-
- gmm::copy(HND, gmm::sub_matrix(A2, I2, I1));
- gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A2, I1, I2));
+ // // Normal Dirichlet condition
+ //gmm::copy(HND, gmm::sub_matrix(A1, I2, I1));
+ //gmm::copy(gmm::transposed(HND), gmm::sub_matrix(A1, I1, I2));
// Dirichlet condition except on cylinder
gmm::copy(HD, gmm::sub_matrix(A1, I3, I1));
gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A1, I1, I3));
-
- gmm::copy(HD, gmm::sub_matrix(A2, I3, I1));
- gmm::copy(gmm::transposed(HD), gmm::sub_matrix(A2, I1, I3));
// Dirichlet condition on cylinder
gmm::copy(HDC, gmm::sub_matrix(A1, I3C, I1));
gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A1, I1, I3C));
-
- gmm::copy(HDC, gmm::sub_matrix(A2, I3C, I1));
- gmm::copy(gmm::transposed(HDC), gmm::sub_matrix(A2, I1, I3C));
// Non reflective condition
gmm::copy(HNR, gmm::sub_matrix(A1, I4, I1));
gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A1, I1, I4));
+
- gmm::copy(HNR, gmm::sub_matrix(A2, I4, I1));
- gmm::copy(gmm::transposed(HNR), gmm::sub_matrix(A2, I1, I4));
-
- if (N==3){
- // Neumann condition in 3D
- gmm::copy(HN, gmm::sub_matrix(A1, I5, I1));
- gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A1, I1, I5));
+ // if (N==3){
+// // Neumann condition in 3D
+// gmm::copy(HN, gmm::sub_matrix(A1, I5, I1));
+// gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A1, I1, I5));
- gmm::copy(HN, gmm::sub_matrix(A2, I5, I1));
- gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A2, I1, I5));
- }
+// gmm::copy(HN, gmm::sub_matrix(A2, I5, I1));
+// gmm::copy(gmm::transposed(HN), gmm::sub_matrix(A2, I1, I5));
+// }
// Right hand side with Dirichlet boundary conditions
gmm::resize(F, N * nbdof_rhs);
pdef->dirichlet_condition(*this, t, F); // time independent => exit loop
+
{
plain_vector VV(mf_mult.nb_dof());
+ gmm::clear(VV);
getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpidirrg); // a optimiser indept time
#if GETFEM_PARA_LEVEL > 1
MPI_SUM_VECTOR2(VV);
@@ -1423,12 +1614,14 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
}
{
plain_vector VV(mf_mult.nb_dof());
+ gmm::clear(VV);
getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpidircylrg); // a optimiser indept time
#if GETFEM_PARA_LEVEL > 1
MPI_SUM_VECTOR2(VV);
#endif
gmm::copy(gmm::sub_vector(VV, SUB_CT_DIR_CYL), gmm::sub_vector(Y, I3C));
}
+
/*{
plain_vector VV(mf_mult.nb_dof());
getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpindirrg); // a optimiser indept time
@@ -1437,8 +1630,10 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
#endif
gmm::copy(gmm::sub_vector(VV, SUB_CT_NDIR), gmm::sub_vector(Y, I2));
}*/
- {
+
+ {
plain_vector VV(mf_mult.nb_dof());
+ gmm::clear(VV);
// getfem::asm_source_term(VV, mim, mf_mult, mf_rhs, F, mpinonrefrg); // CL Périodiques
if (non_reflective_bc == 0) {
asm_basic_non_reflective_bc(VV, mim, mf_u, Un0, mf_mult, dt, mpinonrefrg);
@@ -1451,44 +1646,185 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
#endif
gmm::copy(gmm::sub_vector(VV, SUB_CT_NONREF), gmm::sub_vector(Y, I4));
}
-
+
// pressure part
+ gmm::clear(YY);
gmm::mult(gmm::transposed(B), gmm::scaled(Pn0, -1.0), YY);
+
+#if GETFEM_PARA_LEVEL > 1
+ MPI_SUM_VECTOR2(YY);
+#endif
+
+ gmm::add(YY, gmm::sub_vector(Y, I1));
+
+ gmm::clear(YY);
+ gmm::mult(gmm::transposed(Bbc), Pn0, YY);
+
+
#if GETFEM_PARA_LEVEL > 1
- MPI_SUM_VECTOR2(YY);
+ MPI_SUM_VECTOR2(YY);
#endif
gmm::add(YY, gmm::sub_vector(Y, I1));
+
+ gmm::clear(A1u);
+ // gmm::clear(A1v);
+
+
+ gmm::copy(gmm::sub_matrix(A1,SUB_CT_Vu,SUB_CT_Vu),A1u);
+ // gmm::copy(gmm::sub_matrix(A1,SUB_CT_Vv,SUB_CT_Vv),A1v);
+
+
+
//
// Solving the first linear system
//
+
{
double rcond;
plain_vector X(sizelsystem);
+
+ //plain_vector Xu(sizelsystem/2);
+ //plain_vector Xv(sizelsystem/2);
+ //plain_vector Yu(sizelsystem/2);
+ //plain_vector Yv(sizelsystem/2);
+
+
#if (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
MUMPS_distributed_matrix_solve(A1,X,Y);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
MUMPS_solve(A1,X,Y);
//#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
//MUMPS_solve(A1,X,Y);
#elif (GETFEM_PARA_LEVEL==0)
- SuperLU_solve(A1, X, Y, rcond);
- // gmm::iteration iter(1E-8);
+ // SuperLU_solve(A1, X, Y, rcond);
+
+ //gmm::copy(gmm::sub_vector(Y,SUB_CT_Vu),Yu);
+ //gmm::copy(gmm::sub_vector(Y,SUB_CT_Vv),Yv);
+
+
+ //SuperLU_solve(A1u, Xu, Yu, rcond);
+ //SuperLU_solve(A1u, Xv, Yv, rcond);
+
+ // Factorisation LU
+ SLUsys1.build_with(A1u);
+ //SLUsys1.solve(Xu,Yu);
+ //SLUsys1.solve(Xv,Yv);
+ SLUsys1.solve(gmm::sub_vector(X,SUB_CT_Vu),gmm::sub_vector(Y,SUB_CT_Vu));
+ SLUsys1.solve(gmm::sub_vector(X,SUB_CT_Vv),gmm::sub_vector(Y,SUB_CT_Vv));
+
+
+ //gmm::copy(gmm::sub_vector(Un0,gmm::sub_slice(0,nbdof_u/2,2)),gmm::sub_vector(Xu,gmm::sub_interval(0,nbdof_u/2)));
+ //gmm::copy(gmm::sub_vector(Un0,gmm::sub_slice(1,nbdof_u/2,2)),gmm::sub_vector(Xv,gmm::sub_interval(0,nbdof_u/2)));
+ //gmm::iteration iter(1E-8);
+ //gmm::bicgstab(A1u,Xu,Yu,gmm::identity_matrix(),iter);
+ //gmm::bicgstab(A1u,Xv,Yv,gmm::identity_matrix(),iter);
+
+
+
+ //gmm::copy(Xu,gmm::sub_vector(X,SUB_CT_Vu));
+ //gmm::copy(Xv,gmm::sub_vector(X,SUB_CT_Vv));
+
+
+ //gmm::add(gmm::scaled(Xfull,-1.0),X);
+ //cout << gmm::vect_norminf(X) << endl;
+
+ // gmm::iteration iter(1E-8);
// gmm::gmres(A1,X,Y,gmm::identity_matrix(),10,iter);
- //gmm::bicgstab(A1,X,Y,gmm::identity_matrix(),iter);
+ // gmm::bicgstab(A1,X,Y,gmm::identity_matrix(),iter);
// ?? gmm::bicgstab(A1,X,Y,gmm::diagonal_precond<sparse_matrix>(A1),iter);
// if (noisy) cout << "condition number: " << 1.0/rcond << endl;
#endif
gmm::copy(gmm::sub_vector(X, I1), USTAR);
+ //??// gmm::copy(gmm::sub_vector(X, I3C), lambda);
+
+ // Relation de compatibilit int_domaine div(ustar)=0 //
+ scalar_type delta_in;
+ sparse_matrix Bbc_flux_in(nbdof_p, nbdof_u);
+ asm_B_boundary(Bbc_flux_in, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+
+ gmm :: resize(lambda, nbdof_p); gmm :: clear(lambda); gmm::fill(lambda,1.0);
+
+ gmm :: resize(tmp, nbdof_Dir_Out_Cylinder+nbdof_Dir_On_Cylinder); gmm :: clear(tmp);
+
+ gmm :: mult(Bbc_flux_in,lambda,tmp);
+ gmm :: resize(lambda, nbdof_Dir_On_Cylinder+nbdof_Dir_Out_Cylinder); gmm :: clear(lambda);
+ gmm :: copy(gmm::sub_vector(USTAR,I3),gmm::sub_vector(lambda,gmm::sub_interval(0,nbdof_Dir_Out_Cylinder)));
+ gmm :: copy(gmm::sub_vector(USTAR,I3C),gmm::sub_vector(lambda,gmm::sub_interval(nbdof_Dir_Out_Cylinder,nbdof_Dir_On_Cylinder)));
+ delta_in = gmm :: vect_sp(tmp,lambda);
+
+ scalar_type delta_out;
+
+ sparse_matrix Bbc_flux_out(nbdof_p, nbdof_u);
+ asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NONREFLECTIVE_BOUNDARY_NUM));
+ asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p, mf_u.linked_mesh().get_mpi_sub_region(NORMAL_PART_DIRICHLET_BOUNDARY_NUM));
+ //asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM));
+ //asm_B_boundary(Bbc_flux_in, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(DIRICHLET_BOUNDARY_NUM));
+ gmm :: resize(lambda, nbdof_p); gmm :: clear(lambda); gmm::fill(lambda,1.0);
+
+ gmm :: resize(tmp, nbdof_NDir+nbdof_nonref); gmm :: clear(tmp);
+
+ gmm :: mult(Bbc_flux_out,lambda,tmp);
+ gmm :: resize(lambda, nbdof_NDir+nbdof_nonref); gmm :: clear(lambda);
+ gmm :: copy(gmm::sub_vector(USTAR,I2),gmm::sub_vector(lambda,gmm::sub_interval(0,nbdof_NDir)));
+ gmm :: copy(gmm::sub_vector(USTAR,I4),gmm::sub_vector(lambda,gmm::sub_interval(nbdof_NDir,nbdof_nonref)));
+ delta_out = gmm :: vect_sp(tmp,lambda);
+
+ cout<<"compatibilite" << delta_in << " "<< delta_out << " "<< delta_in-delta_out << endl;
+ gmm::scaled(gmm::sub_vector(USTAR,I2),delta_in/delta_out);
+ gmm::scaled(gmm::sub_vector(USTAR,I4),delta_in/delta_out);
+ gmm::scaled(gmm::sub_vector(USTAR,I2),delta_in/delta_out);
+
+ if (N==3){
+ asm_B_boundary(Bbc_flux_out, mim, mf_u, mf_p,mf_u.linked_mesh().get_mpi_sub_region(NEUMANN_BOUNDARY_NUM));
+ }
+
+
+ //delta = 0.0;
+ //for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+ // delta = delta+lambda[ii];
+ //}
+ //delta=delta/nbdof_nonref;
+ //for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+ // lambda[ii] = 1.0-delta;
+ //}
+ //cout << "delta" << delta << endl;
+ //gmm::add(lambda,gmm::sub_vector(X, I4));
+ //gmm::copy(gmm::sub_vector(X, I1), USTAR);
+
}
cout << "U* - Un0 = " << gmm::vect_dist2(USTAR, Un0) << endl;
+
+ if (N==3){
+ plain_vector DU(mf_rhs.nb_dof() * N * N);
+ plain_vector DIV(mf_rhs.nb_dof());
+ compute_gradient(mf_u, mf_rhs, USTAR, DU);
+ for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+ DIV[i] = DU[i*N*N] +DU[i*N*N+4] +DU[i*N*N+8];
+ }
+ if (PARAM.int_value("VTK_EXPORT")) {
+ static int cnta=0;
+ char sa[128]; sprintf(sa, "SolIcare/DivUstar%d.vtk", cnta++);
+ getfem::vtk_export tata(sa, PARAM.int_value("VTK_EXPORT")==1);
+ tata.exporting(mf_rhs);
+ tata.write_point_data(mf_rhs, DIV, "divergence");
+
+ char sb[128]; sprintf(sb, "SolIcare/Ustar%d.vtk", cnta++);
+ getfem::vtk_export tbtb(sb, PARAM.int_value("VTK_EXPORT")==1);
+ tbtb.exporting(mf_u);
+ tbtb.write_point_data(mf_u, USTAR, "Ustar");
+
+ }
+
+ }
+
//
// Solving the second linear system
//
{
- double rcond;
+ //double rcond;
plain_vector X(sizelsystemP), Z(sizelsystemP);
gmm::mult(B, USTAR, gmm::sub_vector(Z, IP));
#if GETFEM_PARA_LEVEL > 1
@@ -1497,15 +1833,25 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
#if (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
MUMPS_distributed_matrix_solve(K2,X,Z);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
MUMPS_solve(K2,X,Z);
//#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
//MUMPS_solve(K2,X,Z);
#elif (GETFEM_PARA_LEVEL==0)
- SuperLU_solve(K2,X,Z,rcond);
- // gmm::iteration iter(1E-8);
+ // SuperLU_solve(K2,X,Z,rcond);
+
+ if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2
+ SLUsys2.solve(X, Z);
+ }
+ if ((time_order==2)&&(t>=Tinitial+2*dt)){
+ // SLUsys2.solve(X, gmm::scaled(gmm::sub_vector(Z,IP),1.5));
+ SLUsys2.solve(X, gmm::scaled(Z,1.5));
+ }
+
+
+ // gmm::iteration iter(1E-8);
// gmm::gmres(K2,X,Z,gmm::identity_matrix(),10,iter);
- //gmm::bicgstab(K2,X,Z,gmm::identity_matrix(),iter);
+ // gmm::bicgstab(K2,X,Z,gmm::identity_matrix(),iter);
// ?? gmm::bicgstab(K2,X,Z,gmm::diagonal_precond<sparse_matrix>(K2),iter);
// if (noisy) cout << "condition number: " << 1.0/rcond << endl;
#endif
@@ -1521,25 +1867,63 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
cout << "Mean value of phi " << (gmm::vect_sp(Phi,toto))/nbdof_p<< endl;
*/
- gmm::mult(M, USTAR, USTARbis);
- gmm::mult(gmm::transposed(B), gmm::scaled(Phi, -1.), USTARbis, USTARbis); // -B^t*Phi + USTARbis -> USTARbis
+ if ((time_order==1)||(t==Tinitial+dt)){ //time_order = 1 or first iterations with time_order = 2
+ gmm::mult(M, USTAR, USTARbis);
+ }
+ if ((time_order==2)&&(t>=Tinitial+2*dt)){
+ gmm::mult(gmm::scaled(M,1.5), USTAR, USTARbis);
+ }
+
+ gmm::mult(gmm::transposed(B), gmm::scaled(Phi, -1.0), USTARbis, USTARbis); // -B^t*Phi + USTARbis -> USTARbis
#if GETFEM_PARA_LEVEL > 1
MPI_SUM_VECTOR2(USTARbis);
#endif
gmm::copy(USTARbis, gmm::sub_vector(Y, I1)); //gmm::copy(M, gmm::sub_matrix(A1, I1));
+
+ //
+ // Solving the third linear system
+ //
+ gmm::clear(YY);
+ gmm::mult(gmm::transposed(Bbc), Phi, YY);
+
+#if GETFEM_PARA_LEVEL > 1
+ MPI_SUM_VECTOR2(YY);
+#endif
+ gmm::add(YY, gmm::sub_vector(Y, I1));
+
{
double rcond;
plain_vector X(sizelsystem);
+ //plain_vector Xu(sizelsystem/2);
+ //plain_vector Xv(sizelsystem/2);
+ //plain_vector Yu(sizelsystem/2);
+ //plain_vector Yv(sizelsystem/2);
+
#if (GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER)
MUMPS_distributed_matrix_solve(A2,X,Y);
-#elif (GETFEM_PARA_LEVEL==1 && GMM_USES_MUMPS)
+#elif (GETFEM_PARA_LEVEL==1 && defined(GMM_USES_MUMPS))
MUMPS_solve(A2,X,Y);
- //#elif (GETFEM_PARA_LEVEL==0 && GMM_USES_MUMPS)
+ //#elif (GETFEM_PARA_LEVEL==0 && defined(GMM_USES_MUMPS))
//MUMPS_solve(A2,X,Y);
#elif (GETFEM_PARA_LEVEL==0)
- SuperLU_solve(A2, X, Y, rcond);
+ //SuperLU_solve(A2, X, Y, rcond);
+ //SLUsys3.solve(X, Y);
+
+
+ //gmm::copy(gmm::sub_vector(Y,SUB_CT_Vu),Yu);
+ //gmm::copy(gmm::sub_vector(Y,SUB_CT_Vv),Yv);
+
+ //SuperLU_solve(A2u, Xu, Yu, rcond);
+ //SuperLU_solve(A2u, Xv, Yv, rcond);
+ //SLUsys3.solve(Xu, Yu);
+ //SLUsys3.solve(Xv, Yv);
+
+ SLUsys3.solve(gmm::sub_vector(X,SUB_CT_Vu),gmm::sub_vector(Y,SUB_CT_Vu));
+ SLUsys3.solve(gmm::sub_vector(X,SUB_CT_Vv),gmm::sub_vector(Y,SUB_CT_Vv));
+
+
//gmm::iteration iter(1E-8);
//gmm::gmres(A2,X,Y,gmm::identity_matrix(),10,iter);
//gmm::bicgstab(A2,X,Y,gmm::identity_matrix(),iter);
@@ -1547,9 +1931,38 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
// if (noisy) cout << "condition number: " << 1.0/rcond << endl;
#endif
- //gmm:: clear(Un1);
+ //gmm:: clear(Un1);
gmm::copy(gmm::sub_vector(X, I1), Un1);
- gmm::copy(gmm::sub_vector(X, I3C), lambda);
+
+
+ // Relation de compatibilit int_domaine div(ustar)=0 //
+ scalar_type delta;
+ gmm :: resize(lambda, nbdof_nonref);
+ gmm:: clear(lambda);
+ gmm::copy(gmm::sub_vector(X, I4),lambda);
+ delta = 0.0;
+ for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+ delta = delta+lambda[ii];
+ }
+ delta=delta/nbdof_nonref;
+ for (int ii = 0; ii <= nbdof_nonref; ii += 2) {
+ lambda[ii] = 1.0-delta;
+ }
+ cout << "delta" << delta << endl;
+ gmm::add(lambda,gmm::sub_vector(X, I4));
+ gmm::copy(gmm::sub_vector(X, I1), Un1);
+
+
+
+
+
+//??// if ((time_order==1)||(t==Tinitial+dt)){
+//??// gmm::add(gmm::scaled(gmm::sub_vector(X, I3C),1.0/dt), lambda);
+//??// }
+//??// if ((time_order==2)&&(t>=Tinitial+2*dt)){
+//??// gmm::add(gmm::scaled(gmm::sub_vector(X, I3C),1.5/dt), lambda);
+//??// }
+
}
@@ -1576,39 +1989,61 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
pdef->validate_solution(*this, t);
cout << "Un1 - Un0 = " << gmm::vect_dist2(Un1, Un0) << endl;
+ if (time_order==2){
+ gmm::copy(Un0, Unm1);
+ }
+
gmm::copy(Un1, Un0); gmm::copy(Pn1, Pn0);
+
+ if (N==3){
+ plain_vector DU(mf_rhs.nb_dof() * N * N);
+ plain_vector DIV(mf_rhs.nb_dof());
+ compute_gradient(mf_u, mf_rhs, Un0, DU);
+ for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+ DIV[i] = DU[i*N*N] +DU[i*N*N+4] +DU[i*N*N+8];
+ }
+ if (PARAM.int_value("VTK_EXPORT")) {
+ static int cnta=0;
+ char sa[128]; sprintf(sa, "SolIcare/DivU%d.vtk", cnta++);
+ getfem::vtk_export tata(sa, PARAM.int_value("VTK_EXPORT")==1);
+ tata.exporting(mf_rhs);
+ tata.write_point_data(mf_rhs, DIV, "divergence");
+ }
+
+ }
do_export(t);
//
- // SORTIES : Coefficient de Trainé (Cd) et de Portance (Cl)
+ // SORTIES : Coefficient de Train (Cd) et de Portance (Cl)
//
- std::vector<scalar_type> Cd(1), Cl(1);
- plain_vector TmpLambda(nbdof_u);
- gmm::copy(lambda,gmm::sub_vector(TmpLambda,SUB_CT_DIR_CYL));
-
- getfem :: traineePortance2D(Cd,Cl,mim,mf_u,TmpLambda,mpidircylrg);
-
- coeffTP << t <<" " << -Cd[0] << " " << -Cl[0] << endl;
-
- // Sauvegarde sur le disque ptPart.data
- // time, coordonnées du point de Ref (x,y) en 2D et (x,y,z) en 3D (P,U,V) en 2D et (P,U,V,W) en 3D au point de Ref
- if (N==2) {
- ptPartData << t <<" "<<ptRef[0]<<" "<<ptRef[1]<<" "<< Pn1[int(ptRef[2])] << " " <<
- Un1[int(ptRef[3])] << " " << Un1[int(ptRef[3]) + 1] << " " <<endl;
- }
- if (N==3) {
- ptPartData << t <<" "<<ptRef[0]<<" "<<ptRef[1]<<" " << ptRef[2] << Pn1[int(ptRef[3])] << " "
- << Un1[int(ptRef[4])] << " " << Un1[int(ptRef[4]) + 1] << " " << Un1[int(ptRef[4]) + 2] <<endl;
- }
-
-
- coeffTP.close();
- ptPartData.close();
+
+
+
+ if (N==2) {
+ std::vector<scalar_type> Cxn(1), Cxp(1), Cyn(1), Cyp(1);
+ getfem :: mesh_region mpioncylinder = mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM);
+ //Cxn[0] = 0; Cxp[0] = 0; Cyn[0] = 0; Cyp[0] = 0;
+ getfem :: ClCd2D(Cxn,Cxp,Cyn,Cyp,mim,mf_u,mf_p,Un0,Pn1,mpioncylinder);
+ coeffTP<<t<<" "<<nu*Cxn[0]<<" "<<Cxp[0]<<" "<<nu*Cxn[0]+Cxp[0]<<" "<<nu*Cyn[0]<<" "<<Cyp[0]<<" "<<nu*Cyn[0]+Cyp[0]<<" "<<endl;
+ ptPartData << t << " " << Un1[ptPartU[2]] << " " << Un1[ptPartU[2] + 1] << " " << Pn1[ptPartP[2]] << endl;
+ }
+
+ if (N==3) {
+ std::vector<scalar_type> Cxn(1), Cxp(1), Cyn(1), Cyp(1);
+ getfem :: mesh_region mpioncylinder = mf_u.linked_mesh().get_mpi_sub_region(ON_CYLINDER_BOUNDARY_NUM);
+ getfem :: ClCd3D(Cxn,Cxp,Cyn,Cyp,mim,mf_u,mf_p,Un0,Pn1,mpioncylinder);
+ coeffTP <<t<<" "<<Cxn[0]<<" "<<Cxp[0]<<" "<<Cxn[0]+Cxp[0]<<" "<<Cyn[0]<<" "<<Cyp[0]<<" "<<Cyn[0]+Cyp[0]<<" " << endl;
+ ptPartData <<t<<" "<<Un1[ptPartU[3]]<<" "<<Un1[ptPartU[3]+1]<<" " <<Un1[ptPartU[3]+2]<<" "<<Pn1[ptPartP[3]]<< endl;
+ }
+
}
+
+
+ coeffTP.close();
+ ptPartData.close();
}
-
void navier_stokes_problem::do_export(scalar_type t) {
/*dal :: bit_vector ddd = mf_p.points_index();
cout << ddd << endl;*/
@@ -1618,38 +2053,38 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
mf_p.write_to_file("SolIcare/icare.mf_p", true);
mim.write_to_file("SolIcare/icare.mim",true);
- std::ofstream Uformat("Uformat.data");
+ std::ofstream Uformat("Uformat.data");
- for(unsigned i=0;i<mf_u.nb_dof();++i){
- base_node G = mf_u.point_of_basic_dof(i);
- if (N==2){
- Uformat << G[0] << " " << G[1] << endl;
- }
- }
- if (N==3){
- for(unsigned i=0;i<mf_u.nb_dof();++i){
- base_node G = mf_u.point_of_basic_dof(i);
- Uformat << G[0] << " " << G[1] << " " << G[2] << endl;
- }
- }
- Uformat.close();
+ for(unsigned i=0;i<mf_u.nb_dof();++i){
+ base_node G = mf_u.point_of_basic_dof(i);
+ if (N==2){
+ Uformat << G[0] << " " << G[1] << endl;
+ }
+ }
+// if (N==3){
+// for(unsigned i=0;i<mf_u.nb_dof();++i){
+// base_node G = mf_u.point_of_basic_dof(i);
+// Uformat << G[0] << " " << G[1] << " " << G[2] << endl;
+// }
+// }
+ Uformat.close();
- std::ofstream Pformat("Pformat.data");
+ std::ofstream Pformat("Pformat.data");
- for(unsigned i=0;i<mf_p.nb_dof();++i){
- base_node G = mf_p.point_of_basic_dof(i);
- if (N==2){
- Pformat << G[0] << " " << G[1] << endl;
- }
+ for(unsigned i=0;i<mf_p.nb_dof();++i){
+ base_node G = mf_p.point_of_basic_dof(i);
+ if (N==2){
+ Pformat << G[0] << " " << G[1] << endl;
+ }
}
- if (N==3){
- for(unsigned i=0;i<mf_p.nb_dof();++i){
- base_node G = mf_p.point_of_basic_dof(i);
- Pformat << G[0] << " " << G[1] << " " << G[2] << endl;
- }
- }
- Pformat.close();
+// if (N==3){
+// for(unsigned i=0;i<mf_p.nb_dof();++i){
+// base_node G = mf_p.point_of_basic_dof(i);
+// Pformat << G[0] << " " << G[1] << " " << G[2] << endl;
+// }
+// }
+ Pformat.close();
exp.reset(new getfem::dx_export(datafilename + ".dx", false));
@@ -1662,15 +2097,15 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
t_export = 0;
first_export = false;
}
- if (t >= t_export-dt/20.0) {
+ if ((t >= t_export-dt/20.0)||(t>=99)) {
t_export += dt_export;
static int cnt = 0;
char s[128]; sprintf(s, "SolIcare/icare.U%d", cnt++);
gmm::vecsave(s, Un0);
-
exp->write_point_data(mf_u, Un0);
exp->serie_add_object("velocity");
+
cout << "Saving Pressure, |p| = " << gmm::vect_norm2(Pn1) << "\n";
exp->write_point_data(mf_p, Pn1);
exp->serie_add_object("pressure");
@@ -1679,93 +2114,85 @@ void navier_stokes_problem::solve_PREDICTION_CORRECTION2() {
char sp[128]; sprintf(sp, "SolIcare/icare.P%d", cntp++);
gmm::vecsave(sp, Pn0);
- if (N == 2) {
- plain_vector DU(mf_rhs.nb_dof() * N * N);
- plain_vector Rot(mf_rhs.nb_dof());
- compute_gradient(mf_u, mf_rhs, Un0, DU);
- for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
- Rot[i] = DU[i*N*N + 3] - DU[i*N*N + 2];
- if ((Rot[i]*Rot[i])<=1.5){Rot[i]=0;}
- }
- cout << "Saving Rot, |rot| = " << gmm::vect_norm2(Rot) << "\n";
- exp->write_point_data(mf_rhs, Rot);
- exp->serie_add_object("rot");
-
- if (PARAM.int_value("VTK_EXPORT")) {
- cout << "export to " << datafilename + "U.vtk" << "..\n";
+ if (PARAM.int_value("TIME_ORDER")==2){
+ static int cntm1 = 0;
+ char sm1[128]; sprintf(sm1, "SolIcare/icare.Um%d", cntm1++);
+ gmm::vecsave(sm1, Unm1);
+ exp->write_point_data(mf_u, Unm1);
+ exp->serie_add_object("velocity");
+ }
+
+
+ //if (N == 2) {
+ //plain_vector DU(mf_rhs.nb_dof() * N * N);
+ //plain_vector Rot(mf_rhs.nb_dof());
+ //compute_gradient(mf_u, mf_rhs, Un0, DU);
+ //for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+ //Rot[i] = DU[i*N*N + 3] - DU[i*N*N + 2];
+ //if ((Rot[i]*Rot[i])<=1.5){Rot[i]=0;}
+ // }
+ // cout << "Saving Rot, |rot| = " << gmm::vect_norm2(Rot) << "\n";
+ // exp->write_point_data(mf_rhs, Rot);
+ // exp->serie_add_object("rot");
+ //}
+ if (PARAM.int_value("VTK_EXPORT")) {
+ cout << "export to " << datafilename + "U.vtk" << "..\n";
static int cnta=0;
char sa[128]; sprintf(sa, "SolIcare/icareU%d.vtk", cnta++);
- getfem::vtk_export tata( sa,
- PARAM.int_value("VTK_EXPORT")==1);
+ getfem::vtk_export tata( sa,PARAM.int_value("VTK_EXPORT")==1);
tata.exporting(mf_u);
tata.write_point_data(mf_u, Un0, "vitesse");
-
+
+ if (PARAM.int_value("TIME_ORDER")==2){
+ static int cntam1=0;
+ char sam1[128]; sprintf(sam1, "SolIcare/icareUm%d.vtk", cntam1++);
+ getfem::vtk_export tamtam( sam1,PARAM.int_value("VTK_EXPORT")==1);
+ tamtam.exporting(mf_u);
+ tamtam.write_point_data(mf_u, Unm1, "vitesse");
+ }
+
static int cnte=0;
char se[128]; sprintf(se, "SolIcare/icareP%d.vtk", cnte++);
- getfem::vtk_export tete( se,
- PARAM.int_value("VTK_EXPORT")==1);
+ getfem::vtk_export tete( se,PARAM.int_value("VTK_EXPORT")==1);
tete.exporting(mf_p);
tete.write_point_data(mf_p, Pn0, "pression");
- static int cnti=0;
- char si[128]; sprintf(si, "SolIcare/icareRot%d.vtk", cnti++);
- getfem::vtk_export titi( si,
- PARAM.int_value("VTK_EXPORT")==1);
- titi.exporting(mf_rhs);
- titi.write_point_data(mf_rhs, Rot, "rotationnel");
+ //static int cnti=0;
+ //char si[128]; sprintf(si, "SolIcare/icareRot%d.vtk", cnti++);
+ //getfem::vtk_export titi( si, PARAM.int_value("VTK_EXPORT")==1);
+ //titi.exporting(mf_rhs);
+ //titi.write_point_data(mf_rhs, Rot, "rotationnel");
}
- }
- else if (N == 3) {
- plain_vector DU(mf_rhs.nb_dof() * N * N);
- plain_vector RotX(mf_rhs.nb_dof());
- plain_vector RotY(mf_rhs.nb_dof());
- plain_vector RotZ(mf_rhs.nb_dof());
- compute_gradient(mf_u, mf_rhs, Un0, DU);
- for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
- RotX[i] = DU[i*N*N + 7] - DU[i*N*N + 5];
- RotY[i] = DU[i*N*N + 2] - DU[i*N*N + 6];
- RotZ[i] = DU[i*N*N + 3] - DU[i*N*N + 1];
- }
- if (PARAM.int_value("VTK_EXPORT")) {
- cout << "export to " << datafilename + "U.vtk" << "..\n";
- static int cntq=0;
- char sq[128]; sprintf(sq, "SolIcare/icareU%d.vtk", cntq++);
- getfem::vtk_export tata( sq,
- PARAM.int_value("VTK_EXPORT")==1);
- tata.exporting(mf_u);
- tata.write_point_data(mf_u, Un0, "vitesse");
- static int cntr=0;
- char sr[128]; sprintf(sr, "SolIcare/icareP%d.vtk", cntr++);
- getfem::vtk_export toto( sr,
- PARAM.int_value("VTK_EXPORT")==1);
- toto.exporting(mf_p);
- toto.write_point_data(mf_p, Pn0, "pression");
- static int cntt=0;
- char st[128]; sprintf(st, "SolIcare/icareRotX%d.vtk", cntt++);
- getfem::vtk_export titi( st,
- PARAM.int_value("VTK_EXPORT")==1);
- titi.exporting(mf_rhs);
- titi.write_point_data(mf_rhs, RotX, "rotationnelX");
-
- static int cntu=0;
- char su[128]; sprintf(su, "SolIcare/icareRotY%d.vtk", cntu++);
- getfem::vtk_export tete( su,
- PARAM.int_value("VTK_EXPORT")==1);
- tete.exporting(mf_rhs);
- tete.write_point_data(mf_rhs, RotY, "rotationnelY");
-
- static int cntv=0;
- char sv[128]; sprintf(sv, "SolIcare/icareRotZ%d.vtk", cntv++);
- getfem::vtk_export tyty( sv,
- PARAM.int_value("VTK_EXPORT")==1);
- tyty.exporting(mf_rhs);
- tyty.write_point_data(mf_rhs, RotZ, "rotationnelZ");
- }
- }
-
-
+
+ //else if (N == 3) {
+ // plain_vector DU(mf_rhs.nb_dof() * N * N);
+ //plain_vector RotX(mf_rhs.nb_dof());
+ //plain_vector RotY(mf_rhs.nb_dof());
+ //plain_vector RotZ(mf_rhs.nb_dof());
+ //compute_gradient(mf_u, mf_rhs, Un0, DU);
+ //for (unsigned i=0; i < mf_rhs.nb_dof(); ++i) {
+ // RotX[i] = DU[i*N*N + 7] - DU[i*N*N + 5];
+ // RotY[i] = DU[i*N*N + 2] - DU[i*N*N + 6];
+ // RotZ[i] = DU[i*N*N + 3] - DU[i*N*N + 1];
+ //
+ //static int cntt=0;
+ //char st[128]; sprintf(st, "SolIcare/icareRotX%d.vtk", cntt++);
+ //getfem::vtk_export titi( st, PARAM.int_value("VTK_EXPORT")==1);
+ //titi.exporting(mf_rhs);
+ //titi.write_point_data(mf_rhs, RotX, "rotationnelX");
+ //static int cntu=0;
+ //char su[128]; sprintf(su, "SolIcare/icareRotY%d.vtk", cntu++);
+ //getfem::vtk_export tete( su, PARAM.int_value("VTK_EXPORT")==1);
+ //tete.exporting(mf_rhs);
+ //tete.write_point_data(mf_rhs, RotY, "rotationnelY");
+ //static int cntv=0;
+ //char sv[128]; sprintf(sv, "SolIcare/icareRotZ%d.vtk", cntv++);
+ //getfem::vtk_export tyty( sv, PARAM.int_value("VTK_EXPORT")==1);
+ //tyty.exporting(mf_rhs);
+ //tyty.write_point_data(mf_rhs, RotZ, "rotationnelZ");
+ //}
+ }
}
-}
/**************************************************************************/
/* main program. */
diff --git a/contrib/icare/icare.h b/contrib/icare/icare.h
index 3e87cd1..074c9ad 100644
--- a/contrib/icare/icare.h
+++ b/contrib/icare/icare.h
@@ -1,33 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Michel Fournié, Julien Pommier,
-// Yves Renard, Nicolas Renon, Nicolas Roux.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Michel Fournié, Julien Pommier,
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef NAVIER_STOKES_H_
#define NAVIER_STOKES_H_
@@ -37,8 +37,34 @@
#include "getfem/getfem_modeling.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
namespace getfem {
+
+ /*
+ * Adams-Bashfort - For explict treatment
+ */
+
+ template<typename VEC1, typename VEC>
+ void asm_NS_uuT_Explicite(const VEC1 &V, const mesh_im &mim,
+ const mesh_fem &mf, const VEC &U0,
+ const mesh_region &rg = mesh_region::all_convexes()) {
+ generic_assembly assem;
+ assem.set("u=data(#1); "
+ "t = comp(vBase(#1).vBase(#1).vGrad(#1));"
+ "V(#1)+=u(l).u(i).t(i,k,:,j,l,j,k)"
+ );
+ assem.push_mi(mim);
+ assem.push_mf(mf);
+ assem.push_data(U0);
+ assem.push_vec(V);
+ assem.assembly(rg);
+ }
+
+
+
/*
* div(uuT) term.
*/
@@ -60,82 +86,117 @@ namespace getfem {
assem.assembly(rg);
}
- template<typename VEC, typename VECTOR>
- void traineePortance2D(VEC &Cd, VEC &Cl, const mesh_im &mim,
- const mesh_fem &mf, const VECTOR &lambda,
- const mesh_region &rg) {
-
- generic_assembly assem;
- assem.set("l=data$1(#1); V$1()+=comp(vBase(#1).Normal())(i,1,1).l(i);V$2()+=comp(vBase(#1).Normal())(i,1,2).l(i);");
-
- assem.push_mi(mim);
-
- assem.push_mf(mf);
- assem.push_data(lambda);
-
- assem.push_vec(Cd);
- assem.push_vec(Cl);
-
- assem.assembly(rg); //region = bord du cylindre
-
- }
+ /*
+ * Boundary term for the pressure
+ */
+
+ template<typename MAT>
+ void asm_B_boundary(const MAT &M, const mesh_im &mim,
+ const mesh_fem &mfu, const mesh_fem &mfp,
+ const mesh_region &rg) {
+ generic_assembly assem;
+ assem.set("M$1(#2, #1)+=-comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+ assem.push_mi(mim);
+ assem.push_mf(mfu);
+ assem.push_mf(mfp);
+ assem.push_mat(const_cast<MAT&>(M));
+ assem.assembly(rg);
+ }
+ //template<typename VEC, typename VECTOR>
+// void traineePortance2D(VEC &Cd, VEC &Cl, const mesh_im &mim,
+// const mesh_fem &mf, const VECTOR &lambda,
+// const mesh_region &rg) {
+//
+// generic_assembly assem;
+// assem.set("l=data$1(#1); V$1()+=comp(vBase(#1).Normal())(i,1,1).l(i);V$2()+=comp(vBase(#1).Normal())(i,1,2).l(i);");
+//
+// assem.push_mi(mim);
+//
+// assem.push_mf(mf);
+// assem.push_data(lambda);
+//
+// assem.push_vec(Cd);
+// assem.push_vec(Cl);
+//
+// assem.assembly(rg); //region = bord du cylindre
+//
+// }
+
+
+
+ template<typename VEC, typename VECTOR>
+ void ClCd2D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
+ const mesh_fem &mf1,const mesh_fem &mf2, const VECTOR &U0,const VECTOR &P0, const mesh_region &rg) {
+
+ generic_assembly assem;
+
+ assem.set("u=data$1(#1); p=data$2(#2);"
+ "t1=comp(vGrad(#1).Normal());"
+ "V$1()+=2*t1(i,1,1,1).u(i) + t1(i,1,2,2).u(i) + t1(i,2,1,2).u(i);"
+ "t2=comp(Base(#2).Normal());"
+ "V$2()+=-1*t2(i,1).p(i);"
+ "t3=comp(vGrad(#1).Normal());"
+ "V$3()+=2*t3(i,2,2,2).u(i) + t3(i,1,2,1).u(i) + t3(i,2,1,1).u(i);"
+ "t4=comp(Base(#2).Normal());"
+ "V$4()+=-1*t4(i,2).p(i);");
+
+
+ //assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDxV=data$3(#1); nuDyV=data$4(#1); p=data$5(#2);"
+ // "t1=comp(vBase(#1).Normal());"
+ // "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,1,2).nuDyU(i) + t1(i,1,2).nuDxV(i);"
+ // "t2=comp(Base(#2).Normal());"
+ // "V$2()+=-1*t2(i,1).p(i);"
+ // "t3=comp(vBase(#1).Normal());"
+ // "V$3()+=2*t3(i,1,2).nuDyV(i) + t3(i,1,1).nuDyU(i) + t3(i,1,1).nuDxV(i);"
+ // "t4=comp(Base(#2).Normal());"
+ // "V$4()+=-1*t4(i,2).p(i);");
+
+
+ assem.push_mi(mim);
+ assem.push_mf(mf1);
+ assem.push_mf(mf2);
+
+ assem.push_data(U0);
+ assem.push_data(P0);
+
+ assem.push_vec(Cxn);
+ assem.push_vec(Cxp);
+ assem.push_vec(Cyn);
+ assem.push_vec(Cyp);
+
+ assem.assembly(rg); //region = bord du cylindre
+
+ }
+
template<typename VEC, typename VECTOR>
- void traineePortance3D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
- const mesh_fem &mf1, const mesh_fem &mf2,
- const VECTOR &nuDxU, const VECTOR &nuDyU, const VECTOR &nuDzU,
- const VECTOR &nuDxV, const VECTOR &nuDyV, const VECTOR &nuDzV,
- const VECTOR &nuDxW, const VECTOR &nuDyW, const VECTOR &nuDzW,
- const VECTOR &PP, const mesh_region &rg) {
+ void ClCd3D(VEC &Cxn, VEC &Cxp,VEC &Cyn, VEC &Cyp, const mesh_im &mim,
+ const mesh_fem &mf1, const mesh_fem &mf2,const VECTOR &U0,
+ const VECTOR &P0, const mesh_region &rg) {
generic_assembly assem;
- assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDzU=data$3(#1); nuDxV=data$4(#1); nuDyU=data$5(#1); nuDzU=data$6(#1); nuDxW=data$7(#1); nuDyW=data$8(#1); nuDzW=data$9(#1); p=data$10(#2);"
- "t1=comp(vBase(#1).Normal());"
- "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,2,2).nuDxU(i) + t1(i,1,2).nuDxV(i) + t1(i,1,3).nuDxW(i) + t1(i,3,3).nuDxU(i);"
- "t2=comp(vBase(#2).Normal());"
- "V$2()+=t2(i,1,1).p(i);"
- "t3=comp(vBase(#1).Normal());"
- "V$3()+=2*t3(i,2,2).nuDxV(i) + t3(i,2,1).nuDxU(i) + t3(i,1,1).nuDxV(i) + t3(i,2,3).nuDxW(i) + t3(i,3,3).nuDxV(i);"
- "t4=comp(vBase(#2).Normal());"
- "V$4()+=t4(i,1,2).p(i);");
-
-
-
-
- assem.set("nuDxU=data$1(#1); nuDyU=data$2(#1); nuDxV=data$3(#1); nuDyV=data$4(#1); p=data$5(#2);"
- "t1=comp(vBase(#1).Normal());"
- "V$1()+=2*t1(i,1,1).nuDxU(i) + t1(i,1,2).nuDyU(i) + t1(i,2,2).nuDxV(i);"
- "t2=comp(vBase(#2).Normal());"
- "V$2()+=-1*t2(i,1,1).p(i);"
- "t3=comp(vBase(#1).Normal());"
- "V$3()+=2*t3(i,2,2).nuDyV(i) + t3(i,1,1).nuDyU(i) + t3(i,2,1).nuDxV(i);"
- "t4=comp(vBase(#2).Normal());"
- "V$4()+=-1*t4(i,1,2).p(i);");
-
-
+ assem.set("u=data$1(#1); p=data$2(#2);"
+ "t1=comp(vGrad(#1).Normal());"
+ "V$1()+=2*t1(i,1,1,1).u(i) + t1(i,1,2,2).u(i) + t1(i,2,1,2).u(i) + t1(i,3,1,3).u(i) + t1(i,1,3,3).u(i);"
+ "t2=comp(Base(#2).Normal());"
+ "V$2()+=-1*t2(i,1).p(i);"
+ "t3=comp(vGrad(#1).Normal());"
+ "V$3()+=2*t3(i,2,2,2).u(i) + t3(i,1,2,1).u(i) + t3(i,2,1,1).u(i) + t3(i,3,2,3).u(i) + t3(i,2,3,3).u(i);"
+ "t4=comp(Base(#2).Normal());"
+ "V$4()+=-1*t4(i,2).p(i);");
+
assem.push_mi(mim);
assem.push_mf(mf1);
assem.push_mf(mf2);
- assem.push_data(nuDxU);
- assem.push_data(nuDyU);
- assem.push_data(nuDzU);
-
- assem.push_data(nuDxV);
- assem.push_data(nuDyV);
- assem.push_data(nuDzV);
-
- assem.push_data(nuDxW);
- assem.push_data(nuDyW);
- assem.push_data(nuDzW);
+ assem.push_data(U0);
+ assem.push_data(P0);
- assem.push_data(PP);
-
assem.push_vec(Cxn);
assem.push_vec(Cxp);
assem.push_vec(Cyn);
diff --git a/contrib/icare/icare.param b/contrib/icare/icare.param
index 9423d16..b1a25bf 100644
--- a/contrib/icare/icare.param
+++ b/contrib/icare/icare.param
@@ -2,29 +2,54 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% parameters for program stokes %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-N = 3;
+N = 2;
QUAD = 0;
-NU = 1/80; % Viscosity coefficient. (NU = 1 / Re)
+NU = 1/80; % test 1/100 sinon, Viscosity coefficient. (NU = 1 / Re)
ALPHA = 0.0; % rate of rotation of the cylinder
+ % The RADIUS must be less than 1
+
+PRINT_PT_PART = 1; % 0 = no output values in the point define in BOXX
+ % 1 = output
+
+CLCD = 1; % Computation of the Lift and Drag Coefficients
-BOXXmin = 4.5;
-BOXXmax = 5.5;
-BOXYmin = -0.5;
-BOXYmax = 0.5;
+POSTPROCESS = 0;
+IstartPostprocess = 0;
+PasPostprocess = 1;
+NbPostprocess = 1;
-%INIT_FILE_U="icare.U100000000";
-%INIT_FILE_P="icare.P100000000";
+if (N==2)
+ BOXXmin = 9.9;
+ BOXXmax = 10.1;
+ BOXYmin = -0.1;
+ BOXYmax = 0.1;
+end;
+
+if (N==3)
+ BOXXmin = 4.5;
+ BOXXmax = 5.5;
+ BOXYmin = -0.5;
+ BOXYmax = 0.5;
+ BOXZmin = -0.1;
+ BOXZmax = 0.1;
+end;
+
+%INIT_FILE_Um1="SolIcare/icare.1Um1";
+%INIT_FILE_U="icare.U500";
+%INIT_FILE_P="icare.P500";
Tinitial = 0;
DT = 0.01; % Time step
-%T = 5.1; % Final time
-T=100.01;
+T = 250; % Final time
NOISY = 0;
+TIME_ORDER = 1 % 1 = Euler of order 1
+ % 2 = Euler of order 2
+
+
OPTION = 4; % 0 = Stokes avec schema de splitting 1
% 1 = Navier Stokes avec schema de splitting 1
% 2 = Navier Stokes with energy conserving midpoint scheme
@@ -35,14 +60,26 @@ PROBLEM = 3; % 1 = Reference solution for Stokes
% 2 = Reference solution for Navier Stokes
% 3 = flow around a cylinder (centered at 0)
-NON_REFLECTIVE_BC = 0; % 0 : basic condition
+NON_REFLECTIVE_BC = 0; % 0 : basic condition
+ % if (N==2) : optimal condition, all
+ % terms are considered
+ % if (N==3) : some terms are neglect
+ % => bad choice
% 1 : improved condition
+ % interpolation of the hessian is
+ % made ... so it is not optimal
+ % if (N==2) : the basic condition is
+ % better
+ % if (N==3) : all terms are considered
+
if (N == 2 && ~QUAD)
% MESHNAME = 'maillage003.mesh'; % name of the mesh file
%MESHNAME = 'gmshv2:pouet5_v2.msh';
-%MESHNAME = 'navier_stokes_cylinder1.mesh'; % name of the mesh file
- MESHNAME = 'gmshv2:triangular.msh';
+%MESHNAME = 'MESHES/navier_stokes_cylinder2.mesh'; % name of the mesh file
+%MESHNAME = 'gmshv2:triangular.msh';
+%MESHNAME = 'gmshv2:yannick.msh';
+MESHNAME = 'gmshv2:MESHES/mejdi.msh';
%MESHNAME = 'gmshv2:Rkd2.msh';
%MESHNAME = 'maillage02.mesh';
%MESHNAME = 'structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[30,30]';
@@ -59,29 +96,44 @@ end
if (N == 2 && QUAD)
% MESHNAME = 'structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[10,10]';
- MESHNAME = 'gmshv2:rectangularQ.msh';
+% MESHNAME = 'gmshv2:rectangularRitesh2D.msh';
+% MESHNAME = 'gmshv2:rectangular.msh';
+% MESHNAME = 'gmshv2:mesh100_2D.msh';
+% MESHNAME = 'gmshv2:cyl2DsmScaling.msh';
+
+MESHNAME = 'gmshv2:cyl2D_400k-ddl.msh';
+%MESHNAME = 'gmshv2:cyl2D_1,7M-ddl.msh';
+
+% MESHNAME = 'gmshv2:cyl2D.msh';
FEM_TYPE = 'FEM_QK(2,2)'; % QK method
FEM_TYPE_P = 'FEM_QK(2,1)';
% DATA_FEM_TYPE = 'FEM_QK(2,1)';
INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2,10)';
+ %INTEGRATION = 'IM_QUAD(7)';
end
if (N == 3 && ~QUAD)
%MESHNAME = 'structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NSUBDIV=[5,5,5]';
- MESHNAME = 'gmshv2:tralala_3D.msh';
+% MESHNAME = 'gmshv2:tralala_3D.msh';
+ MESHNAME = 'gmshv2:cyl3D.msh';
FEM_TYPE = 'FEM_PK(3,2)'; % PK method
FEM_TYPE_P = 'FEM_PK(3,1)';
% DATA_FEM_TYPE = 'FEM_PK(3,1)';
- INTEGRATION = 'IM_TETRAHEDRON(6)';
+ INTEGRATION = 'IM_TETRAHEDRON(8)';
end
if (N == 3 && QUAD)
- MESHNAME = 'gmshv2:rectangularRitesh3D.msh';
+% MESHNAME = 'gmshv2:rectangularRitesh3D.msh';
+ MESHNAME = 'gmshv2:cylinder3D.msh';
+% MESHNAME = 'gmshv2:cyl3D.msh';
+% MESHNAME = 'gmshv2:cyl3D-20.msh';
+% MESHNAME = 'gmshv2:cyl3D-40.msh';
+% MESHNAME = 'gmshv2:cyl3D-60.msh';
FEM_TYPE = 'FEM_QK(3,2)'; % QK method
FEM_TYPE_P = 'FEM_QK(3,1)';
% DATA_FEM_TYPE = 'FEM_QK(3,1)';
- %INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,10)';
- INTEGRATION = 'IM_HEXAHEDRON(5)';
+ INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,10)';
+ %INTEGRATION = 'IM_HEXAHEDRON(9)';
end
@@ -92,4 +144,6 @@ RESIDUAL = 1E-9; % residual for conjugate gradient.
ROOTFILENAME = 'icare'; % Root of data files.
DX_EXPORT = 1; % export solution to a .dx file ?
VTK_EXPORT = 1;
-DT_EXPORT = 250*DT;
+DT_EXPORT = 100*DT;
+DT_MUMPS_ANALYSE=50;
+BORNE=1;
diff --git a/contrib/icare/icare.pl b/contrib/icare/icare.pl
index 85b8597..055c404 100755
--- a/contrib/icare/icare.pl
+++ b/contrib/icare/icare.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/inter_element_test/Makefile.in b/contrib/inter_element_test/Makefile.in
index a3f7176..d521538 100644
--- a/contrib/inter_element_test/Makefile.in
+++ b/contrib/inter_element_test/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -305,7 +308,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-inter_element$(EXEEXT): $(inter_element_OBJECTS) $(inter_element_DEPENDENCIES)
+inter_element$(EXEEXT): $(inter_element_OBJECTS) $(inter_element_DEPENDENCIES) $(EXTRA_inter_element_DEPENDENCIES)
@rm -f inter_element$(EXEEXT)
$(CXXLINK) $(inter_element_OBJECTS) $(inter_element_LDADD) $(LIBS)
@@ -477,14 +480,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -534,10 +538,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/inter_element_test/inter_element.cc b/contrib/inter_element_test/inter_element.cc
index c9247e4..c2075a9 100644
--- a/contrib/inter_element_test/inter_element.cc
+++ b/contrib/inter_element_test/inter_element.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_modeling.h"
#include "getfem/getfem_modeling.h"
@@ -26,6 +26,9 @@
#include "getfem/getfem_export.h"
#include "gmm/gmm_superlu_interface.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
using bgeot::scalar_type; /* = double */
diff --git a/contrib/inter_element_test/inter_element.pl b/contrib/inter_element_test/inter_element.pl
index 85b8597..055c404 100755
--- a/contrib/inter_element_test/inter_element.pl
+++ b/contrib/inter_element_test/inter_element.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/mixed_dynamic_friction/Makefile.in b/contrib/mixed_dynamic_friction/Makefile.in
index bf729a0..211e34f 100644
--- a/contrib/mixed_dynamic_friction/Makefile.in
+++ b/contrib/mixed_dynamic_friction/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -112,6 +112,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -130,6 +131,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -146,6 +148,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -210,6 +213,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -245,7 +249,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -321,10 +324,10 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-mixed_dynamic_friction$(EXEEXT): $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_DEPENDENCIES)
+mixed_dynamic_friction$(EXEEXT): $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_DEPENDENCIES) $(EXTRA_mixed_dynamic_friction_DEPENDENCIES)
@rm -f mixed_dynamic_friction$(EXEEXT)
$(CXXLINK) $(mixed_dynamic_friction_OBJECTS) $(mixed_dynamic_friction_LDADD) $(LIBS)
-mixed_scalar_hyperbolic$(EXEEXT): $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_DEPENDENCIES)
+mixed_scalar_hyperbolic$(EXEEXT): $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_DEPENDENCIES) $(EXTRA_mixed_scalar_hyperbolic_DEPENDENCIES)
@rm -f mixed_scalar_hyperbolic$(EXEEXT)
$(CXXLINK) $(mixed_scalar_hyperbolic_OBJECTS) $(mixed_scalar_hyperbolic_LDADD) $(LIBS)
@@ -497,14 +500,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -554,10 +558,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
index 621ed85..3296930 100644
--- a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
+++ b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
Dynamic friction in linear elasticity with a mixed formulation in
@@ -34,6 +34,10 @@
#include "gmm/gmm.h"
#include <fstream>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -526,7 +530,7 @@ void friction_problem::solve(void) {
DYNAMIC.set_DFV(DFV);
iter.init();
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::standard_solve(MS, DYNAMIC, iter,
getfem::default_linear_solver(DYNAMIC), ls);
diff --git a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
+++ b/contrib/mixed_dynamic_friction/mixed_dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc b/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
index cb869a0..d894af7 100644
--- a/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
+++ b/contrib/mixed_dynamic_friction/mixed_scalar_hyperbolic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Dynamic friction in linear elasticity.
@@ -37,6 +37,10 @@
#include "gmm/gmm.h"
#include <fstream>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -462,7 +466,7 @@ void hyperbolic_problem::solve(void) {
DYNAMIC.set_DFV(DFV);
iter.init();
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::standard_solve(MS, DYNAMIC, iter,
getfem::default_linear_solver(DYNAMIC), ls);
diff --git a/contrib/mixed_elastostatic/Makefile.in b/contrib/mixed_elastostatic/Makefile.in
index 2fd45aa..a637ec8 100644
--- a/contrib/mixed_elastostatic/Makefile.in
+++ b/contrib/mixed_elastostatic/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -102,6 +102,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -120,6 +121,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -136,6 +138,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -200,6 +203,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -235,7 +239,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -308,7 +311,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-mixed_elastostatic$(EXEEXT): $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_DEPENDENCIES)
+mixed_elastostatic$(EXEEXT): $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_DEPENDENCIES) $(EXTRA_mixed_elastostatic_DEPENDENCIES)
@rm -f mixed_elastostatic$(EXEEXT)
$(CXXLINK) $(mixed_elastostatic_OBJECTS) $(mixed_elastostatic_LDADD) $(LIBS)
@@ -480,14 +483,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -537,10 +541,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/mixed_elastostatic/mixed_elastostatic.cc b/contrib/mixed_elastostatic/mixed_elastostatic.cc
index d5c8fa5..e743f1d 100644
--- a/contrib/mixed_elastostatic/mixed_elastostatic.cc
+++ b/contrib/mixed_elastostatic/mixed_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file mixed_elastostatic.cc
@@ -41,6 +41,10 @@
#include "getfem/getfem_interpolation.h"
#include "getfem/getfem_import.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/contrib/mixed_elastostatic/mixed_elastostatic.pl b/contrib/mixed_elastostatic/mixed_elastostatic.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/mixed_elastostatic/mixed_elastostatic.pl
+++ b/contrib/mixed_elastostatic/mixed_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/static_contact_gears/Makefile.in b/contrib/static_contact_gears/Makefile.in
index f07b4e1..4560dac 100644
--- a/contrib/static_contact_gears/Makefile.in
+++ b/contrib/static_contact_gears/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -113,6 +113,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -131,6 +132,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -147,6 +149,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -211,6 +214,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -246,7 +250,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -316,10 +319,10 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-static_contact_gears$(EXEEXT): $(static_contact_gears_OBJECTS) $(static_contact_gears_DEPENDENCIES)
+static_contact_gears$(EXEEXT): $(static_contact_gears_OBJECTS) $(static_contact_gears_DEPENDENCIES) $(EXTRA_static_contact_gears_DEPENDENCIES)
@rm -f static_contact_gears$(EXEEXT)
$(CXXLINK) $(static_contact_gears_OBJECTS) $(static_contact_gears_LDADD) $(LIBS)
-static_contact_gears_u1_u2$(EXEEXT): $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_DEPENDENCIES)
+static_contact_gears_u1_u2$(EXEEXT): $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_DEPENDENCIES) $(EXTRA_static_contact_gears_u1_u2_DEPENDENCIES)
@rm -f static_contact_gears_u1_u2$(EXEEXT)
$(CXXLINK) $(static_contact_gears_u1_u2_OBJECTS) $(static_contact_gears_u1_u2_LDADD) $(LIBS)
@@ -492,14 +495,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -549,10 +553,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/static_contact_gears/static_contact_gears.cc b/contrib/static_contact_gears/static_contact_gears.cc
index 9ecdb7f..e301216 100644
--- a/contrib/static_contact_gears/static_contact_gears.cc
+++ b/contrib/static_contact_gears/static_contact_gears.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_import.h" /* import functions (load a mesh from file) */
@@ -25,6 +25,9 @@
#include "getfem/getfem_Coulomb_friction.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::dim_type;
using bgeot::size_type; /* = unsigned long */
@@ -222,12 +225,12 @@ bool elastostatic_contact_problem::solve() {
(dataname_r, mu * (3*lambda + 2*mu) / (lambda + mu) ); // r ~= Young modulus
std::string multname_n, multname_t;
if (frictionless) {
- getfem::add_nonmatching_meshes_contact_brick
+ getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md, mim, varname_u, multname_n, dataname_r, cb_rgs1, cb_rgs2);
} else {
std::string dataname_frict_coeff="friction_coefficient";
md.add_initialized_scalar_data(dataname_frict_coeff, frict_coeff);
- getfem::add_nonmatching_meshes_contact_with_friction_brick
+ getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md, mim, mim, varname_u, varname_u, multname_n, multname_t,
dataname_r, dataname_frict_coeff, cb_rgs1, cb_rgs2);
}
@@ -254,7 +257,7 @@ bool elastostatic_contact_problem::solve() {
gmm::iteration iter(residual, 1, 40000);
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"superlu"), ls);
if (!iter.converged()) return false; // Solution has not converged
diff --git a/contrib/static_contact_gears/static_contact_gears_u1_u2.cc b/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
index e882270..99aad9c 100644
--- a/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
+++ b/contrib/static_contact_gears/static_contact_gears_u1_u2.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_import.h" /* import functions (load a mesh from file) */
@@ -25,6 +25,10 @@
#include "getfem/getfem_Coulomb_friction.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::dim_type;
using bgeot::size_type; /* = unsigned long */
@@ -233,13 +237,13 @@ bool elastostatic_contact_problem::solve() {
(dataname_r, mu * (3*lambda + 2*mu) / (lambda + mu) ); // r ~= Young modulus
std::string multname_n, multname_t;
if (frictionless) {
- getfem::add_nonmatching_meshes_contact_brick
+ getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
cb_rgs1, cb_rgs2);
} else {
std::string dataname_frict_coeff="friction_coefficient";
md.add_initialized_scalar_data(dataname_frict_coeff, frict_coeff);
- getfem::add_nonmatching_meshes_contact_with_friction_brick
+ getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
dataname_r, dataname_frict_coeff, cb_rgs1, cb_rgs2);
}
@@ -267,7 +271,7 @@ bool elastostatic_contact_problem::solve() {
gmm::iteration iter(residual, 1, 40000);
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::standard_solve(md, iter, getfem::rselect_linear_solver(md,"superlu"), ls);
if (!iter.converged()) return false; // Solution has not converged
diff --git a/contrib/static_friction/Makefile.in b/contrib/static_friction/Makefile.in
index 67840aa..1764924 100644
--- a/contrib/static_friction/Makefile.in
+++ b/contrib/static_friction/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -100,6 +100,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -118,6 +119,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +136,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +201,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +237,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -306,7 +309,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-static_friction$(EXEEXT): $(static_friction_OBJECTS) $(static_friction_DEPENDENCIES)
+static_friction$(EXEEXT): $(static_friction_OBJECTS) $(static_friction_DEPENDENCIES) $(EXTRA_static_friction_DEPENDENCIES)
@rm -f static_friction$(EXEEXT)
$(CXXLINK) $(static_friction_OBJECTS) $(static_friction_LDADD) $(LIBS)
@@ -478,14 +481,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -535,10 +539,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/static_friction/static_friction.cc b/contrib/static_friction/static_friction.cc
index 54657f2..b59c968 100644
--- a/contrib/static_friction/static_friction.cc
+++ b/contrib/static_friction/static_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Solve the Signorini problem with static Coulomb friction.
@@ -36,6 +36,10 @@
#include "gmm/gmm.h"
#include <fstream>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -841,7 +845,7 @@ void friction_problem::solve(void) {
if (Dirichlet == 3) gmm::fill(MS.state(), scalar_type(-1));
gmm::iteration iter(residual, int(noisy), 40000);
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
getfem::model_problem<MODEL_STATE> mdpb(MS,FRICTION,ls);
int l = gmm::get_warning_level();
diff --git a/contrib/static_friction/static_friction.pl b/contrib/static_friction/static_friction.pl
index fe40872..d66ab32 100755
--- a/contrib/static_friction/static_friction.pl
+++ b/contrib/static_friction/static_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/xfem_contact/Makefile.am b/contrib/xfem_contact/Makefile.am
index 9a248b3..f76cd88 100644
--- a/contrib/xfem_contact/Makefile.am
+++ b/contrib/xfem_contact/Makefile.am
@@ -1,11 +1,18 @@
-# SUBDIRS =
+if METIS
+optprogs = xfem_dirichlet
+else
+optprogs =
+endif
-check_PROGRAMS = xfem_contact xfem_dirichlet
+check_PROGRAMS = xfem_contact xfem_stokes $(optprogs)
CLEANFILES =
xfem_contact_SOURCES = xfem_contact.cc
+if METIS
xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+endif
+xfem_stokes_SOURCES = xfem_stokes.cc
SUPLDFLAGS = @SUPLDFLAGS@
INCLUDES = -I$(top_srcdir)/src -I../../src
@@ -16,7 +23,8 @@ TESTS = $(top_srcdir)/contrib/xfem_contact/xfem_contact.pl
EXTRA_DIST = \
xfem_contact.pl \
xfem_contact.param \
- xfem_dirichlet.param
+ xfem_dirichlet.param \
+ xfem_stokes.param
TESTS_ENVIRONMENT = perl
diff --git a/contrib/xfem_contact/Makefile.in b/contrib/xfem_contact/Makefile.in
index 3e7f8c7..67e111d 100644
--- a/contrib/xfem_contact/Makefile.in
+++ b/contrib/xfem_contact/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -14,8 +14,6 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
-
-# SUBDIRS =
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -35,7 +33,8 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-check_PROGRAMS = xfem_contact$(EXEEXT) xfem_dirichlet$(EXEEXT)
+check_PROGRAMS = xfem_contact$(EXEEXT) xfem_stokes$(EXEEXT) \
+ $(am__EXEEXT_1)
subdir = contrib/xfem_contact
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -52,17 +51,24 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+ at METIS_TRUE@am__EXEEXT_1 = xfem_dirichlet$(EXEEXT)
am_xfem_contact_OBJECTS = xfem_contact.$(OBJEXT)
xfem_contact_OBJECTS = $(am_xfem_contact_OBJECTS)
xfem_contact_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
xfem_contact_DEPENDENCIES = ../../src/libgetfem.la \
$(am__DEPENDENCIES_1)
-am_xfem_dirichlet_OBJECTS = xfem_dirichlet.$(OBJEXT)
+am__xfem_dirichlet_SOURCES_DIST = xfem_dirichlet.cc
+ at METIS_TRUE@am_xfem_dirichlet_OBJECTS = xfem_dirichlet.$(OBJEXT)
xfem_dirichlet_OBJECTS = $(am_xfem_dirichlet_OBJECTS)
xfem_dirichlet_LDADD = $(LDADD)
xfem_dirichlet_DEPENDENCIES = ../../src/libgetfem.la \
$(am__DEPENDENCIES_1)
+am_xfem_stokes_OBJECTS = xfem_stokes.$(OBJEXT)
+xfem_stokes_OBJECTS = $(am_xfem_stokes_OBJECTS)
+xfem_stokes_LDADD = $(LDADD)
+xfem_stokes_DEPENDENCIES = ../../src/libgetfem.la \
+ $(am__DEPENDENCIES_1)
DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@@ -76,8 +82,10 @@ CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
-SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES)
-DIST_SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES)
+SOURCES = $(xfem_contact_SOURCES) $(xfem_dirichlet_SOURCES) \
+ $(xfem_stokes_SOURCES)
+DIST_SOURCES = $(xfem_contact_SOURCES) \
+ $(am__xfem_dirichlet_SOURCES_DIST) $(xfem_stokes_SOURCES)
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
@@ -107,6 +115,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -125,6 +134,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -141,6 +151,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -205,6 +216,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -240,7 +252,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -260,16 +271,20 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ at METIS_FALSE@optprogs =
+ at METIS_TRUE@optprogs = xfem_dirichlet
CLEANFILES =
xfem_contact_SOURCES = xfem_contact.cc
-xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+ at METIS_TRUE@xfem_dirichlet_SOURCES = xfem_dirichlet.cc
+xfem_stokes_SOURCES = xfem_stokes.cc
INCLUDES = -I$(top_srcdir)/src -I../../src
LDADD = ../../src/libgetfem.la -lm $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/xfem_contact/xfem_contact.pl
EXTRA_DIST = \
xfem_contact.pl \
xfem_contact.param \
- xfem_dirichlet.param
+ xfem_dirichlet.param \
+ xfem_stokes.param
TESTS_ENVIRONMENT = perl
all: all-am
@@ -315,12 +330,15 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-xfem_contact$(EXEEXT): $(xfem_contact_OBJECTS) $(xfem_contact_DEPENDENCIES)
+xfem_contact$(EXEEXT): $(xfem_contact_OBJECTS) $(xfem_contact_DEPENDENCIES) $(EXTRA_xfem_contact_DEPENDENCIES)
@rm -f xfem_contact$(EXEEXT)
$(CXXLINK) $(xfem_contact_OBJECTS) $(xfem_contact_LDADD) $(LIBS)
-xfem_dirichlet$(EXEEXT): $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_DEPENDENCIES)
+xfem_dirichlet$(EXEEXT): $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_DEPENDENCIES) $(EXTRA_xfem_dirichlet_DEPENDENCIES)
@rm -f xfem_dirichlet$(EXEEXT)
$(CXXLINK) $(xfem_dirichlet_OBJECTS) $(xfem_dirichlet_LDADD) $(LIBS)
+xfem_stokes$(EXEEXT): $(xfem_stokes_OBJECTS) $(xfem_stokes_DEPENDENCIES) $(EXTRA_xfem_stokes_DEPENDENCIES)
+ @rm -f xfem_stokes$(EXEEXT)
+ $(CXXLINK) $(xfem_stokes_OBJECTS) $(xfem_stokes_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -330,6 +348,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_contact.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_dirichlet.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_stokes.Po at am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -491,14 +510,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -548,10 +568,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/xfem_contact/xfem_contact.cc b/contrib/xfem_contact/xfem_contact.cc
index 90cb9af..68ff901 100644
--- a/contrib/xfem_contact/xfem_contact.cc
+++ b/contrib/xfem_contact/xfem_contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Goal : scalar Signorini problem with Xfem.
@@ -36,6 +36,10 @@
#include "getfem/getfem_import.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_vector;
diff --git a/contrib/xfem_contact/xfem_contact.pl b/contrib/xfem_contact/xfem_contact.pl
old mode 100755
new mode 100644
index 5355162..6d63c0a
--- a/contrib/xfem_contact/xfem_contact.pl
+++ b/contrib/xfem_contact/xfem_contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/xfem_contact/xfem_dirichlet.cc b/contrib/xfem_contact/xfem_dirichlet.cc
index 88e63b3..7a8d8b0 100644
--- a/contrib/xfem_contact/xfem_dirichlet.cc
+++ b/contrib/xfem_contact/xfem_dirichlet.cc
@@ -1,25 +1,25 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-
-/**
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/*
* Goal : scalar Dirichlet problem with Xfem.
*
* Research program.
@@ -36,6 +36,24 @@
#include "getfem/getfem_import.h"
#include "getfem/getfem_inter_element.h"
#include "gmm/gmm.h"
+#include "getfem/bgeot_mesh_structure.h"
+#include "getfem/getfem_config.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+
+
+extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, float *, int *, int *, int *);
+extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
@@ -62,30 +80,54 @@ typedef gmm::row_matrix<sparse_vector> sparse_row_matrix;
double Radius;
int u_version;
double u_alpha = 1.5;
-double u_B = 20;
-double u_n = 7.0;
+double u_B = 20.0;
+double u_n = 8.0;
double dtheta = M_PI/36;
+double sol5_a = 0.075, sol5_b = 30.0;
double u_exact(const base_node &p) {
double R = Radius, r=gmm::vect_norm2(p), T=atan2(p[1], p[0])+dtheta;
switch (u_version) {
- case 0: {
- double sum = std::accumulate(p.begin(), p.end(), double(0));
-
- return 5.0 * sin(sum) * (r*r - Radius*Radius);
- }
- case 1: {
- double A=u_alpha, n=u_n;
- return (R*R - r*r *(1+A*(1.0 + sin(n*T))));
- }
- case 2: {
- double A=u_alpha, n=u_n, B=u_B;
- return (R*R - r*r *(1+A*(1.0 + sin(n*T)))) * cos(B*r);
- }
- case 3: {
- double A=u_alpha, n=u_n;
- return 5*(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T))));
- }
+ case 0: {
+ double sum = std::accumulate(p.begin(), p.end(), double(0));
+
+ return 5.0 * sin(sum) * (r*r - Radius*Radius);
+ }
+ case 1: {
+ double A=u_alpha, n=u_n;
+ return (R*R - r*r *(1+A*(1.0 + sin(n*T))));
+ }
+ case 2: {
+ double A=u_alpha, n=u_n, B=u_B;
+ return (R*R - r*r *(1+A*(1.0 + sin(n*T)))) * cos(B*r);
+ }
+ case 3: {
+ double A=u_alpha, n=u_n;
+ return 5*(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T))));
+ }
+ case 4:{
+ return 5.0 * (r*r*r - Radius*Radius*Radius);
+ }
+ case 5:{
+ double a = sol5_a, b = sol5_b;
+ T = atan2(p[1], p[0]);
+ return 5.0 * r*r*(r - Radius*(1 - a*sin(b*T)));
+ }
+ case 6:{
+ double sum = std::accumulate(p.begin(), p.end(), double(0));
+
+ return 5.0 * sin(sum) * (r*r*r - Radius*Radius*Radius);
+ }
+ case 7:{
+ double sum = std::accumulate(p.begin(), p.end(), double(0));
+
+ return 5.0 * sin(sum) * (r*r*r*r - Radius*Radius*Radius*Radius);
+ }
+ case 8:{
+ double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]);
+
+ return 5.0 * ( Radius*Radius* Radius-rho*rho*rho);
+ }
}
GMM_ASSERT1(false, "Invalid exact solution");
}
@@ -123,9 +165,33 @@ double g_exact(const base_node &p) {
case 3: {
double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
return -5*r*r*r*sqrt(16.0 + 32.0*A*A + 32.0*A*sin(n*T) + 32.0*A
- + 32.0*A*A*sin(n*T) - 16*gmm::sqr(A*cos(n*T))
- + gmm::sqr(A*cos(n*T)*n));
+ + 32.0*A*A*sin(n*T) - 16*gmm::sqr(A*cos(n*T))
+ + gmm::sqr(A*cos(n*T)*n));
}
+ case 4: {
+ r=gmm::vect_norm2(p);
+ return 15*r*r;
+ }
+ case 5:{
+ double a = sol5_a, b = sol5_b;
+ double T = atan2(p[1], p[0]);
+ return 5.0*r*sqrt( gmm::sqr(3*r-2*Radius*(1-a*sin(b*T)))
+ + gmm::sqr(R*cos(b*T)*b*a));
+ }
+ case 6: {
+ double sum=std::accumulate(p.begin(), p.end(), double(0)), T=atan2(p[1], p[0]);
+ return 5*cos(sum)*(cos(T)+sin(T))*(r*r*r-Radius*Radius*Radius)+15*r*r*sin(sum);
+ // return 5.0*sqrt( gmm::sqr(5*cos(sum)*(cos(T)+sin(T))*(r*r*r-Radius*Radius*Radius)+15*r*r*sin(sum))
+ // + gmm::sqr(5*cos(sum)*(cos(T)-sin(T))*(r*r*r-Radius*Radius*Radius))) ;
+ }
+ case 7: {
+ double sum=std::accumulate(p.begin(), p.end(), double(0)), T=atan2(p[1], p[0]);
+ return 5*cos(sum)*(cos(T)+sin(T))*(r*r*r*r-Radius*Radius*Radius*Radius)+20*r*r*r*sin(sum);
+ }
+ case 8: {
+ double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]);
+ return -15*rho*rho; ;
+ }
}
return 0;
}
@@ -156,6 +222,27 @@ double rhs(const base_node &p) {
double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
return -5*r*r*(-16.0-16.0*A*sin(n*T)-16.0*A+A*sin(n*T)*n*n);
}
+ case 4: {
+ r=gmm::vect_norm2(p);
+ return -45.0*r;
+ }
+ case 5:{
+ double a = sol5_a, b = sol5_b;
+ double T = atan2(p[1], p[0]);
+ return 5.0*(4.0*Radius-9.0*r-4.0*Radius*sin(b*T)*a+Radius*sin(b*T)*b*b*a);
+ }
+ case 6: {
+ double sum = std::accumulate(p.begin(), p.end(), double(0));
+ return 5.0 * (2*sin(sum)*(r*r*r-Radius*Radius*Radius)-6*r*sum*cos(sum)-9*r*sin(sum));
+ }
+ case 7: {
+ double sum = std::accumulate(p.begin(), p.end(), double(0));
+ return 5.0 * (2*sin(sum)*(r*r*r*r-Radius*Radius*Radius*Radius)-8*r*r*sum*cos(sum)-16*r*r*sin(sum));
+ }
+ case 8: {
+ double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]);
+ return 60*rho;
+ }
}
return 0;
}
@@ -163,7 +250,7 @@ double rhs(const base_node &p) {
double ls_value(const base_node &p) {
double R = Radius, r=gmm::vect_norm2(p);
switch (u_version) {
- case 0: return gmm::vect_norm2_sqr(p) - R*R;
+ case 0: case 4: case 6: case 7: return gmm::vect_norm2_sqr(p) - R*R;
case 1: case 2: {
double A=u_alpha, T=atan2(p[1],p[0])+dtheta, n=u_n;
return -(R*R - r*r*(1+A*(1.0 + sin(n*T)))) / 15.0;
@@ -172,6 +259,18 @@ double ls_value(const base_node &p) {
double A=u_alpha, T=atan2(p[1], p[0])+dtheta, n=u_n;
return -(R*R*R*R - r*r*r*r*(1+A*(1.0 + sin(n*T)))) / 4.0;
}
+ case 5:{
+ double a = sol5_a, b = sol5_b;
+ double T = atan2(p[1], p[0]);
+ return r*r*(r - Radius*(1 - a*sin(b*T))) / (Radius*sqrt(Radius+Radius*Radius*b*b*a*a));
+ }
+ case 8:{
+ double rho=gmm::sqrt(p[0]*p[0]+ p[1]*p[1]+ p[2]*p[2]);
+ return (rho*rho*rho - Radius*Radius*Radius);
+ }
+ // case 6:{
+ //return r*r*r-R*R*R;
+ //}
}
return 0;
}
@@ -283,6 +382,150 @@ void asm_stabilization_symm_term
assem.assembly(rg);
}
+
+
+/**************************************************************/
+/* assembling patch vector */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ VEC &RM = const_cast<VEC &>(RM_);
+
+ getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+ assem.push_mi(mim);
+ assem.push_mf(mf_mult);
+ assem.push_vec(RM);
+ // assem.set("RM(#1)+=comp(Base(#1))()");
+ assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_term
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_im &mimbounddown, const getfem::mesh_fem &mf_mult,
+ scalar_type ratio_size, scalar_type h ){
+ MAT &M1 = const_cast<MAT &>(RM_);
+
+ /****************************************************/
+ /* " select patch " */
+ /****************************************************/
+
+
+
+ // assemby patch vector
+ const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+ size_type nbe = mf_P0.nb_dof();
+ int ne = 0;
+ double size_of_crack = 0;
+ plain_vector Patch_Vector(nbe);
+ asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+ // cout<<"patch_vectot="<< Patch_Vector<<endl;
+ dal::bit_vector Patch_element_list, Patch_dof_ind;
+ for (size_type i = 0; i < nbe; ++i) {
+ if (Patch_Vector[i] != scalar_type(0)){
+ size_type cv = mf_P0.first_convex_of_basic_dof(i);
+ Patch_element_list.add(cv);
+ Patch_dof_ind.add(i);
+ ne++;
+ size_of_crack=size_of_crack + Patch_Vector[i];
+ }
+ }
+ // cout<<"Path_element_list="<< Patch_element_list <<endl;
+ //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+ cout<<"number of element in patch="<< ne <<endl;
+ std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+ std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+ std::vector<double> vwgtt(ne);
+ int j = 0, k = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ numelt[j] = int(ic);
+ indelt[ic] = j;
+ }
+ j = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+ vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+ vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+ xadj[j] = k;
+ bgeot::mesh_structure::ind_set s;
+ mesh.neighbours_of_convex(ic, s);
+ for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+ if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+ }
+ }
+
+ xadj[j] = k;
+ std::vector<int> adjwgt(k);
+ // cout<<"xadj="<<xadj<<endl;
+ //cout<<"adjncy="<<adjncy<<endl;
+ //cout<<"vwgt="<<vwgt<<endl;
+
+ cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+
+ int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+ // float ubvec[1] = {1.03f};
+ int options[5] = {0,0,0,0,0};
+ //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, &(ubvec[0]), options, &edgecut, &(part[0]));
+ // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ &numflag, &nparts, options, &edgecut, &(part[0]));
+
+ //cout<<"size_of_mesh="<<h<<endl;
+ //cout<<"size_of_crack="<< size_of_crack <<endl;
+ cout<<"nb_partition="<<nparts<<endl;
+ // cout<<"partition="<<part<<endl;
+ //cout<<"edgecut="<<edgecut<<endl;
+
+
+ /**************************************************************/
+ /* Assembly matrices */
+ /**************************************************************/
+
+
+ std::vector<double> size_patch(nparts);
+ size_type nb_dof_mult=mf_mult.nb_dof();
+ sparse_matrix M0(nb_dof_mult, nbe);
+ getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+
+ for (size_type i=0; i < size_type(ne); i++) {
+ size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];
+ }
+
+ //cout<<"size_patch="<<size_patch<<endl;
+
+ sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+ }
+
+ sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ int p=part[indelt[cv]];
+ gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+ gmm::mat_row(MAT_proj, r));
+ }
+
+ gmm::mult(M0, MAT_proj, M1);
+
+}
+
+
+
+
+
/*
* Elementary extrapolation matrices
*/
@@ -351,12 +594,6 @@ void compute_mass_matrix_extra_element
// cout << "M = " << M << endl;
}
-
-
-
-
-
-
/*
* Main program
*/
@@ -373,19 +610,30 @@ int main(int argc, char *argv[]) {
// Load the mesh
getfem::mesh mesh;
- std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
- getfem::import_mesh(MESH_FILE, mesh);
- unsigned N = mesh.dim();
-
+ // std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
+ //getfem::import_mesh(MESH_FILE, mesh);
+ //unsigned N = mesh.dim();
+
+ std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type");
+ bgeot::pgeometric_trans pgt =
+ bgeot::geometric_trans_descriptor(MESH_TYPE);
+ size_type N = pgt->dim();
+ std::vector<size_type> nsubdiv(N);
+ std::fill(nsubdiv.begin(),nsubdiv.end(),
+ PARAM.int_value("NX", "Nomber of space steps "));
+ getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+ PARAM.int_value("MESH_NOISED") != 0);
+ // base_small_vector tt(N); tt[1] = -0.5;
+ // mesh.translation(tt);
// center the mesh in (0, 0).
base_node Pmin(N), Pmax(N);
mesh.bounding_box(Pmin, Pmax);
Pmin += Pmax; Pmin /= -2.0;
// Pmin[N-1] = -Pmax[N-1];
mesh.translation(Pmin);
- scalar_type h = mesh.minimal_convex_radius_estimate();
+ cout<<"Creating mesh done"<<endl;
+ scalar_type h = 2. * mesh.minimal_convex_radius_estimate();
cout << "h = " << h << endl;
-
// Level set definition
unsigned lsdeg = unsigned(PARAM.int_value("LEVEL_SET_DEGREE", "level set degree"));
bool simplify_level_set =
@@ -398,8 +646,13 @@ int main(int argc, char *argv[]) {
for (unsigned i = 0; i < lsmf.nb_dof(); ++i) {
lsup.values()[i] = lsdown.values()[i] = ls.values()[i]
= ls_value(lsmf.point_of_basic_dof(i));
- lsdown.values(1)[i] = lsmf.point_of_basic_dof(i)[1];
- lsup.values(1)[i] = -lsmf.point_of_basic_dof(i)[1];
+ if(N==2){
+ lsdown.values(1)[i] = lsmf.point_of_basic_dof(i)[1];
+ lsup.values(1)[i] = -lsmf.point_of_basic_dof(i)[1];
+ }else{
+ lsdown.values(2)[i] = lsmf.point_of_basic_dof(i)[2];
+ lsup.values(2)[i] = -lsmf.point_of_basic_dof(i)[2];
+ }
}
if (simplify_level_set) {
@@ -491,20 +744,37 @@ int main(int argc, char *argv[]) {
getfem::mesh_fem mf_mult(mesh);
std::string FEMM = PARAM.string_value("FEM_MULT", "fem for multipliers");
mf_mult.set_finite_element(mesh.convex_index(),
- getfem::fem_descriptor(FEMM));
+ getfem::fem_descriptor(FEMM));
// getfem::partial_mesh_fem mf_mult(pre_mf_mult);
+ cout << "NX=" << PARAM.int_value("NX", "Nomber of space steps ") << "\n";
+ cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+ cout << "FEM_TYPE=" << FEM << "\n";
+ cout << "FEM_MULT=" << FEMM << "\n";
+
+ int stabilized_dirichlet =
+ int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
+ "Dirichlet condition or not"));
+ cout << "stabilized_dirichlet ="<< stabilized_dirichlet << "\n";
// Range_basis call
cols.clear();
- sparse_matrix BRBB(nb_dof, mf_mult.nb_dof());
- getfem::asm_mass_matrix(BRBB, mimbounddown, mf, mf_mult);
+ sparse_matrix BRBB;
+ if (stabilized_dirichlet) {
+ gmm::resize(BRBB, mf_mult.nb_dof(), mf_mult.nb_dof());
+ getfem::asm_mass_matrix(BRBB, mimbounddown, mf_mult, mf_mult);
+ // cout << BRBB << endl;
+ } else {
+ gmm::resize(BRBB, nb_dof, mf_mult.nb_dof());
+ getfem::asm_mass_matrix(BRBB, mimbounddown, mf, mf_mult);
+ }
cout << "Selecting dofs for the multiplier" << endl;
- cout << "nb_dof_mult = " << mf_mult.nb_dof() << endl;
- gmm::range_basis(BRBB, cols);
+ // cout << "nb_dof = " << mf.nb_dof() << endl;
+ //cout << "nb_dof_mult = " << mf_mult.nb_dof() << endl;
+ gmm::range_basis(BRBB, cols, 1e-12);
mf_mult.reduce_to_basic_dof(cols);
// penser à l'optimisation sur les mailles ...
-
-
+
+
// kept_dof_mult = select_dofs_from_im(pre_mf_mult, mimbounddown, N-1);
// mf_mult.adapt(kept_dof_mult, rejected_elt);
size_type nb_dof_mult = mf_mult.nb_dof();
@@ -513,27 +783,187 @@ int main(int argc, char *argv[]) {
// Mass matrix on the boundary
sparse_matrix B2(mf_rhs.nb_dof(), nb_dof);
getfem::asm_mass_matrix(B2, mimboundup, mf_rhs, mf);
-
sparse_matrix B(nb_dof_mult, nb_dof);
getfem::asm_mass_matrix(B, mimbounddown, mf_mult, mf);
- int stabilized_dirichlet =
- int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
- "Dirichlet condition or not"));
scalar_type dir_gamma0(0);
sparse_matrix MA(nb_dof_mult, nb_dof_mult), KA(nb_dof, nb_dof);
sparse_matrix BA(nb_dof_mult, nb_dof);
+ sparse_row_matrix M1(nb_dof_mult, nb_dof_mult);
if (stabilized_dirichlet > 0) {
-
+
sparse_row_matrix E1(nb_dof, nb_dof);
+
+ if (stabilized_dirichlet == 3) {
+
+ std::string datafilename;
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+ mesh.write_to_file(datafilename + ".mesh");
+ cout<<"save mesh done"<<endl;
+ scalar_type tpa = PARAM.real_value("TPA", "Type of patch assembly");
+
+ if(tpa){
+
+ scalar_type ratio_size = PARAM.real_value("RATIO_GR_MESH", "ratio size between mesh and patches");
+ // cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+
+ asm_stabilization_patch_term(M1, mesh, mimbounddown, mf_mult, ratio_size, h);
+
+ // cout<<'patch matrix='<<M1<<endl;
+ }else{
+
+
+ /****************************************************/
+ /* " select patch " */
+ /****************************************************/
+
+
+
+ // assemby patch vector
+ size_type nbe = mf_P0.nb_dof();
+ int ne = 0;
+ double size_of_crack = 0;
+ plain_vector Patch_Vector(nbe);
+ asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+ // cout<<"patch_vectot="<< Patch_Vector<<endl;
+ dal::bit_vector Patch_element_list, Patch_dof_ind;
+ for (size_type i = 0; i < nbe; ++i) {
+ if (Patch_Vector[i] != scalar_type(0)){
+ size_type cv = mf_P0.first_convex_of_basic_dof(i);
+ Patch_element_list.add(cv);
+ Patch_dof_ind.add(i);
+ ne++;
+ size_of_crack=size_of_crack + Patch_Vector[i];
+ }
+ }
+ // cout<<"Path_element_list="<< Patch_element_list <<endl;
+ //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+ cout<<"number of element in patch="<< ne <<endl;
+ std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+ std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+ std::vector<double> vwgtt(ne);
+ int j = 0, k = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ numelt[j] = int(ic);
+ indelt[ic] = j;
+ }
+ j = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+ vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+ vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+ xadj[j] = k;
+ bgeot::mesh_structure::ind_set s;
+ mesh.neighbours_of_convex(ic, s);
+ for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+ if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+ }
+ }
+
+ xadj[j] = k;
+ std::vector<int> adjwgt(k);
+ // cout<<"xadj="<<xadj<<endl;
+ //cout<<"adjncy="<<adjncy<<endl;
+ //cout<<"vwgt="<<vwgt<<endl;
+
+ scalar_type ratio_size = PARAM.real_value("RATIO_GR_MESH", "ratio size between mesh and patches");
+ cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+
+ int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+
+ // float ubvec[1] = {1.03f};
+ int options[5] = {0,0,0,0,0};
+ //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, &(ubvec[0]), options, &edgecut, &(part[0]));
+ // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ &numflag, &nparts, options, &edgecut, &(part[0]));
+
+ //cout<<"size_of_mesh="<<h<<endl;
+ //cout<<"size_of_crack="<< size_of_crack <<endl;
+ cout<<"nb_partition="<<nparts<<endl;
+ // cout<<"partition="<<part<<endl;
+ //cout<<"edgecut="<<edgecut<<endl;
+
+
+ /**************************************************************/
+ /* Assembly matrices */
+ /**************************************************************/
+
+
+ std::vector<double> size_patch(nparts);
+
+ sparse_matrix M0(nb_dof_mult, nbe);
+ getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+
+ for (size_type i=0; i < size_type(ne); i++) {
+ size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];
+ }
+
+ //cout<<"size_patch="<<size_patch<<endl;
+
+ sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+ }
+
+ sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ int p=part[indelt[cv]];
+ gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+ gmm::mat_row(MAT_proj, r));
+ }
+
+ gmm::mult(M0, MAT_proj, M1);
+
+
+ }
+
+
+
+// sparse_matrix MAT_proj(nbe, nb_dof_mult);
+
+// for (int r=0; r<nbe; r++){
+// for (int jj=0; jj<nb_dof_mult; jj++){
+// size_type cv = mf_P0.first_convex_of_basic_dof(r);
+// int p=part[indelt[cv]];
+// for (int i=0; i<ne; i++){
+// if ( part[i]== p) {
+// size_type ind_dof_patch= mf_P0.ind_basic_dof_of_element(numelt[i])[0];
+// MAT_proj(r,jj) += M0(jj,ind_dof_patch);
+// }
+// }
+// MAT_proj(r,jj) /= size_patch[p];
+// }
+// }
+// gmm::mult(M0, MAT_proj, M1);
+
+ // cout<<"M0="<<M0<<endl;
+ //cout<<"MAT_proj="<<MAT_proj<<endl;
+ // cout<<"M1="<<M1<<endl;
+
+ }//end stabilized_dirichlet == 3
+
+
+
+
if (stabilized_dirichlet == 2) {
+
+ /***************************************************************/
+ /* Computation of the extrapolation operator. */
+ /***************************************************************/
- // Computation of the extrapolation operator
scalar_type min_ratio =
PARAM.real_value("MINIMAL_ELT_RATIO",
"Threshold ratio for the fully stab Dirichlet");
-
+
cout << "Computation of the extrapolation operator" << endl;
dal::bit_vector elt_black_list, dof_black_list;
size_type nbe = mf_P0.nb_dof();
@@ -619,13 +1049,21 @@ int main(int argc, char *argv[]) {
dir_gamma0 = PARAM.real_value("DIRICHLET_GAMMA0",
"Stabilization parameter for "
"Dirichlet condition");
- getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
- asm_stabilization_mixed_term(BA, mimbounddown, mf, mf_mult, lsdown);
- asm_stabilization_symm_term(KA, mimbounddown, mf, lsdown);
- gmm::scale(MA, -dir_gamma0 * h);
- gmm::scale(BA, -dir_gamma0 * h);
- gmm::scale(KA, -dir_gamma0 * h);
-
+
+ if (stabilized_dirichlet == 3) {
+ getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
+ gmm::scale(M1, dir_gamma0 );
+ gmm::scale(MA, -dir_gamma0 );
+ gmm::add(M1, MA);
+
+ }else{
+ getfem::asm_mass_matrix(MA, mimbounddown, mf_mult);
+ asm_stabilization_mixed_term(BA, mimbounddown, mf, mf_mult, lsdown);
+ asm_stabilization_symm_term(KA, mimbounddown, mf, lsdown);
+ gmm::scale(MA, -dir_gamma0 * h);
+ gmm::scale(BA, -dir_gamma0 * h);
+ gmm::scale(KA, -dir_gamma0 * h);
+ }
if (stabilized_dirichlet == 2) {
sparse_matrix A1(nb_dof_mult, nb_dof);
gmm::copy(BA, A1);
@@ -641,7 +1079,67 @@ int main(int argc, char *argv[]) {
test_mim(mim, mf_rhs, false);
test_mim(mimbounddown, mf_rhs, true);
- // Brick system
+#if 1
+
+ /***************************************************************/
+ /* New brick system */
+ /***************************************************************/
+ getfem::model model;
+
+ model.add_fem_variable("u", mf);
+ model.add_fem_variable("Lambda", mf_mult);
+ getfem::add_Laplacian_brick(model, mim, "u");
+
+
+ if (stabilized_dirichlet > 0){
+ getfem::add_explicit_matrix(model, "Lambda", "Lambda", MA);
+ if (stabilized_dirichlet != 3) {
+ getfem::add_explicit_matrix(model, "u", "u", KA);
+ }
+ }
+
+ //Volumic source term
+ plain_vector F(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, F, rhs);
+ model.add_initialized_fem_data("VolumicData", mf_rhs, F);
+ getfem::add_source_term_brick(model, mim, "u", "VolumicData");
+
+ // Neumann condition
+ getfem::interpolation_function(mf_rhs, F, g_exact);
+ plain_vector R(nb_dof);
+ gmm::mult(gmm::transposed(B2), F, R);
+ getfem::add_explicit_rhs(model, "u", R);
+
+ // Dirichlet condition
+
+ getfem::add_constraint_with_multipliers(model, "u", "Lambda", B, plain_vector(nb_dof_mult));
+
+ //Solving the problem
+ cout<< "Stabilized_parameter="<< dir_gamma0 <<endl;
+ gmm::iteration iter(1e-9, 1, 40000);
+
+ //getfem::standard_solve(model, iter);
+
+
+ getfem::default_newton_line_search lsear;
+ getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model,"mumps"), lsear);
+
+
+ plain_vector U(nb_dof);
+ gmm::copy(model.real_variable("u"), U);
+ plain_vector LAMBDA(nb_dof_mult);
+ gmm::copy(model.real_variable("Lambda"), LAMBDA);
+
+ // cout<<"desplacement="<<U<<endl;
+
+ // cout<<"Mult="<<LAMBDA<<endl;
+
+#else
+
+ /***************************************************************/
+ /* Old brick system */
+ /***************************************************************/
+
getfem::mdbrick_generic_elliptic<> brick_laplacian(mim, mf);
getfem::mdbrick_source_term<> brick_volumic_rhs(brick_laplacian);
@@ -659,8 +1157,14 @@ int main(int argc, char *argv[]) {
getfem::mdbrick_constraint<> brick_constraint(brick_volumic_rhs);
brick_constraint.set_constraints(B, plain_vector(nb_dof_mult));
brick_constraint.set_constraints_type(getfem::AUGMENTED_CONSTRAINTS);
- if (stabilized_dirichlet > 0)
- brick_constraint.set_optional_matrices(KA, MA);
+
+ //add stabilized term
+ if (stabilized_dirichlet > 0){
+ if (stabilized_dirichlet == 3) {
+ brick_constraint.set_optional_matrices(KA, MA);
+ }else{
+ brick_constraint.set_optional_matrices(KA, MA);}
+ }
getfem::mdbrick_abstract<> *final_brick = &brick_constraint;
@@ -674,16 +1178,26 @@ int main(int argc, char *argv[]) {
plain_vector LAMBDA(nb_dof_mult);
gmm::copy(brick_constraint.get_mult(MS), LAMBDA);
+
+
+#endif
+
+
+
+
// interpolation of the solution on mf_rhs
GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
- plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs);
+ plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs),lambda_int(nb_dof_rhs);
getfem::interpolation(mf, mf_rhs, U, Uint);
+ //getfem::interpolation(mf_mult, mf_rhs, LAMBDA, lambda_int);
for (size_type i = 0; i < nb_dof_rhs; ++i) {
Vint[i] = u_exact(mf_rhs.point_of_basic_dof(i));
Eint[i] = gmm::abs(Uint[i] - Vint[i]);
}
-
- // computation of error on u.
+ /***************************************************************/
+ /* computation of error on u. */
+ /***************************************************************/
+
double errmax = 0.0, exactmax = 0.0;
for (size_type i = 0; i < nb_dof_rhs; ++i)
if (ls_value(mf_rhs.point_of_basic_dof(i)) <= 0.0) {
@@ -691,7 +1205,15 @@ int main(int argc, char *argv[]) {
exactmax = std::max(exactmax, Vint[i]);
}
else Eint[i] = 0.0;
- cout << "Linfty error: " << 100.0 * errmax / exactmax << "%" << endl;
+
+ mf_rhs.write_to_file("xfem_dirichlet.mf", true);
+ mf_mult.write_to_file("xfem_dirichlet.mfmult", true);
+ gmm::vecsave("xfem_dirichlet_exact.U", Vint);
+ gmm::vecsave("xfem_dirichlet.U", Uint);
+ gmm::vecsave("xfem_dirichlet.L", LAMBDA);
+ gmm::vecsave("xfem_dirichlet.map_error", Eint);
+
+ // cout << "Linfty error: " << 100.0 * errmax / exactmax << "%" << endl;
cout << "L2 error: " << 100.0
* getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint)
/ getfem::asm_L2_norm(mim, mf_rhs, Vint) << "%" << endl;
@@ -699,8 +1221,9 @@ int main(int argc, char *argv[]) {
* getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint)
/ getfem::asm_H1_norm(mim, mf_rhs, Vint) << "%" << endl;
- // computation of error on multipliers.
-
+ /*********************************************************************/
+ /* computation of error on multipliers. */
+ /*********************************************************************/
gmm::resize(BA, nb_dof_mult, nb_dof_rhs); gmm::clear(BA);
gmm::resize(KA, nb_dof_rhs, nb_dof_rhs); gmm::clear(KA);
gmm::resize(B, nb_dof_mult, nb_dof_mult); gmm::clear(B);
@@ -718,73 +1241,225 @@ int main(int argc, char *argv[]) {
// cout << "L2^2 max on multipliers: " << gmm::vect_sp(KA, Vint, Vint);
// cout << " LAMBDA^2: " << gmm::vect_sp(B, LAMBDA, LAMBDA);
// cout << " Double produit: " << 2*gmm::vect_sp(BA, Vint, LAMBDA)<<endl;
-
- // exporting solution in vtk format.
- {
- getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
+ if(1){
+
+ /*********************************************************************/
+ /* exporting solution in vtk format. */
+ /*********************************************************************/
+ {
+ getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
exp.exporting(mf);
exp.write_point_data(mf, U, "solution");
cout << "export done, you can view the data file with (for example)\n"
"mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
"-m Outline\n";
- }
- // exporting error in vtk format.
- {
- getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
- exp.exporting(mf_rhs);
- exp.write_point_data(mf_rhs, Eint, "error");
- cout << "export done, you can view the data file with (for example)\n"
- "mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
- "-m Outline\n";
- }
- // exporting multipliers in vtk format.
- {
- getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
- exp.exporting(mf_mult);
- exp.write_point_data(mf_mult, LAMBDA, "multipliers");
- cout << "export done, you can view the data file with (for example)\n"
- "mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
- "-m Outline\n";
- }
+ }
+ // exporting error in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
+ exp.exporting(mf_rhs);
+ exp.write_point_data(mf_rhs, Eint, "error");
+ cout << "export done, you can view the data file with (for example)\n"
+ "mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
+ "-m Outline\n";
+ }
+ // exporting multipliers in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
+ exp.exporting(mf_mult);
+ exp.write_point_data(mf_mult, LAMBDA, "multipliers");
+ cout << "export done, you can view the data file with (for example)\n"
+ "mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
+ "-m Outline\n";
+ }
+
+ lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
+
+ gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
+
+ //save solution
+
+ /*********************************************************************/
+ /* Save the solution. */
+ /*********************************************************************/
+ mf.write_to_file("xfem_dirichlet.mfsol", true);
+ gmm::vecsave("xfem_dirichlet.Usol", U);
+
+ mf_mult.write_to_file("xfem_dirichlet.mf_mult", true);
+ gmm::vecsave("xfem_dirichlet.Lsol", LAMBDA);
+ cout << "saving solution done"<<endl;
+
+ unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
+ /*********************************************************************/
+ /* Creationg Slice */
+ /*********************************************************************/
+
+ if (N==2) {
+ cout << "saving the slice solution for matlab\n";
+ getfem::stored_mesh_slice sl, sl0,sll;
+
+
+ getfem::mesh_slicer slicer(mf.linked_mesh());
+ getfem::slicer_build_stored_mesh_slice sbuild(sl);
+ getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
+ getfem::slicer_isovalues iso(mfU, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+
+ slicer.push_back_action(sbuild); // full slice in sl
+ slicer.push_back_action(iso); // extract isosurface 0
+ slicer.push_back_action(sbuild0); // store it into sl0
+ slicer.exec(nrefine, mf.convex_index());
+
+ getfem::mesh_slicer slicer2(mf.linked_mesh());
+ getfem::mesh_slice_cv_dof_data<plain_vector>
+ mfL(ls.get_mesh_fem(), ls.values());
+ getfem::slicer_isovalues iso2(mfL, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+ slicer2.push_back_action(iso2); // extract isosurface 0
+ slicer2.push_back_action(sbuildl); // store it into sll
+ slicer2.exec(nrefine, mf.convex_index());
+
+ sl.write_to_file("xfem_dirichlet.sl", true);
+ sl0.write_to_file("xfem_dirichlet.sl0", true);
+ sll.write_to_file("xfem_dirichlet.sll", true);
+ plain_vector UU(sl.nb_points()), LL(sll.nb_points());
+ sl.interpolate(mf, U, UU);
+ gmm::vecsave("xfem_dirichlet.slU", UU);
+ // gmm::scale(LAMBDA, 0.005);
+ sll.interpolate(mf_mult, LAMBDA, LL);
+ gmm::vecsave("xfem_dirichlet.slL", LL);
+ }else{
+ cout << "saving the slice solution for matlab\n";
+ // Create slice of the sphere to plot the Solution in the half sphere
+ // getfem::slicer_boundary exbond(mf.linked_mesh());//extract boundary
+ getfem::stored_mesh_slice sl, sll, sl0, slU, slsph;
+
+
+
+ getfem::mesh_slicer slicer(mf.linked_mesh());
+ getfem::slicer_build_stored_mesh_slice sbuild(sl);
+ getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
+ getfem::slicer_isovalues iso(mfU, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+
+ slicer.push_back_action(sbuild); // full slice in sl
+ slicer.push_back_action(iso); // extract isosurface 0
+ slicer.push_back_action(sbuild0); // store it into sl0
+ slicer.exec(nrefine, mf.convex_index());
+
- lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
- gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
- unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
- if (1) {
- cout << "saving the slice solution for matlab\n";
- getfem::stored_mesh_slice sl, sl0,sll;
+ getfem::mesh_slicer slicer2(ls.get_mesh_fem().linked_mesh());
+ getfem::mesh_slice_cv_dof_data<plain_vector>
+ mfL(ls.get_mesh_fem(), ls.values());
+ getfem::slicer_isovalues iso2(mfL, 0.0, 0);
+ //getfem::slicer_half_space hs(base_node(0,0,0), base_node(0,1,0),-1);
+ // getfem::slicer_intersect sect(iso2,hs);
+ getfem::slicer_build_stored_mesh_slice sbuildlu(slU);
+ slicer2.push_back_action(sbuild); // Full slice in slfulll
+ slicer2.push_back_action(iso2); // extract isosurface 0
+ // slicer2.push_back_action(hs); // cut with half space
+ // slicer2.push_back_action(exbond); // extract boundary
+ slicer2.push_back_action(sbuildlu); // store it into slU
+ slicer2.exec(nrefine, ls.get_mesh_fem().convex_index());
+
+ sl.write_to_file("xfem_dirichlet.sl", true);
+ sl0.write_to_file("xfem_dirichlet.sl0", true);
+ slU.write_to_file("xfem_dirichlet.slU", true);
+ plain_vector UU(slU.nb_points());
+
+ slU.interpolate(mf, U, UU);
+ gmm::vecsave("xfem_dirichlet.sl_U", UU);
+
+
+
+ // Create slice of the sphere to plot the multiplier at the boundary
+
+ getfem::mesh_slicer slicer3(mf.linked_mesh());
+ //getfem::mesh_slice_cv_dof_data<plain_vector>
+ // mfL(ls.get_mesh_fem(), ls.values());
+ getfem::slicer_isovalues iso3(mfL, 0.0, 0);
+ getfem::slicer_half_space hs(base_node(0,0,0), base_node(0,1,0),-1);
+ // getfem::slicer_intersect sect3(iso3,hs);
+ getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+ slicer3.push_back_action(sbuild); // Full slice in sl
+ slicer3.push_back_action(iso3); // extract isosurface 0
+ slicer3.push_back_action(hs); // cut with half space
+ slicer3.push_back_action(sbuildl); // store it into sll
+ slicer3.exec(nrefine, mf.convex_index());
+
+ sll.write_to_file("xfem_dirichlet.sll", true);
+ plain_vector LL(sll.nb_points()), UUb(sll.nb_points());
+
+ sll.interpolate(mf, U, UUb);
+ gmm::vecsave("xfem_dirichlet.slUb", UUb);
+
+ gmm::scale(LAMBDA, 0.005);
+ sll.interpolate(mf_mult, LAMBDA, LL);
+ gmm::vecsave("xfem_dirichlet.slL", LL);
+
+ getfem::slicer_boundary exbond1(mf.linked_mesh());//extract boundary
+ getfem::mesh_slicer slicer4(mf.linked_mesh());
+ //getfem::slicer_build_stored_mesh_slice sbuildfull(sl);
+ getfem::slicer_sphere sph(base_node(0,0), Radius, -1 );
+ // getfem::slicer_half_space hs1(base_node(0,0,0), base_node(0,1,0),-1);
+ //getfem::slicer_intersect sect4(sph,hs1);
+ getfem::slicer_build_stored_mesh_slice sbuildsph(slsph);
+
+ slicer4.push_back_action(sbuild); // Full slice in sl
+ slicer4.push_back_action(sph); // extract sphere
+ //slicer4.push_back_action(hs1); // cut with half space
+ slicer4.push_back_action(exbond1); // extract boundary
+ slicer4.push_back_action(sbuildsph); // store it into slsph
+
+ slicer4.exec(nrefine, mf.convex_index());
+ slsph.write_to_file("xfem_dirichlet.slsph", true);
+
+ plain_vector UUs(slsph.nb_points());
+ slsph.interpolate(mf, U, UUs);
+ gmm::vecsave("xfem_dirichlet.slUsph", UUs);
+ }
+
+ /********************************************/
+ /*exacte solution */
+ /********************************************/
+ plain_vector UE(nb_dof_rhs);
+ plain_vector UEE(nb_dof);
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ UE[i] = u_exact(mf_rhs.point_of_basic_dof(i));
+ }
+ mf.write_to_file("xfem_dirichlet.mfE", true);
+ getfem::interpolation(mf_rhs, mf, UE, UEE);
+ gmm::vecsave("xfem_dirichlet_exact.UE", UEE);
+ getfem::stored_mesh_slice sle, sl0e,slle;
+ getfem::mesh_slicer slicere(mf.linked_mesh());
+ getfem::slicer_build_stored_mesh_slice sbuilde(sle);
+ getfem::mesh_slice_cv_dof_data<plain_vector> mfUe(mf, UEE);
+ getfem::slicer_isovalues isoe(mfUe, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuild0e(sl0e);
+ slicere.push_back_action(sbuilde); // full slice in sle
+ slicere.push_back_action(isoe); // extract isosurface 0
+ slicere.push_back_action(sbuild0e); // store it into sl0e
+ slicere.exec(nrefine, mf.convex_index());
- getfem::mesh_slicer slicer(mf.linked_mesh());
- getfem::slicer_build_stored_mesh_slice sbuild(sl);
- getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf, U);
- getfem::slicer_isovalues iso(mfU, 0.0, 0);
- getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
- slicer.push_back_action(sbuild); // full slice in sl
- slicer.push_back_action(iso); // extract isosurface 0
- slicer.push_back_action(sbuild0); // store it into sl0
- slicer.exec(nrefine, mf.convex_index());
- getfem::mesh_slicer slicer2(mf.linked_mesh());
+ getfem::mesh_slicer slicer2e(mf.linked_mesh());
getfem::mesh_slice_cv_dof_data<plain_vector>
- mfL(ls.get_mesh_fem(), ls.values());
- getfem::slicer_isovalues iso2(mfL, 0.0, 0);
- getfem::slicer_build_stored_mesh_slice sbuildl(sll);
- slicer2.push_back_action(iso2); // extract isosurface 0
- slicer2.push_back_action(sbuildl); // store it into sl0
- slicer2.exec(nrefine, mf.convex_index());
+ mfLe(ls.get_mesh_fem(), ls.values());
+ getfem::slicer_isovalues iso2e(mfLe, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuildle(slle);
+ slicer2e.push_back_action(iso2e); // extract isosurface 0
+ slicer2e.push_back_action(sbuildle); // store it into sl0e
+ slicer2e.exec(nrefine, mf.convex_index());
- sl.write_to_file("xfem_dirichlet.sl", true);
- sl0.write_to_file("xfem_dirichlet.sl0", true);
- sll.write_to_file("xfem_dirichlet.sll", true);
- plain_vector UU(sl.nb_points()), LL(sll.nb_points());
- sl.interpolate(mf, U, UU);
- gmm::vecsave("xfem_dirichlet.slU", UU);
- // gmm::scale(LAMBDA, 0.005);
- sll.interpolate(mf_mult, LAMBDA, LL);
- gmm::vecsave("xfem_dirichlet.slL", LL);
+ sle.write_to_file("xfem_dirichlet.sle", true);
+ sl0e.write_to_file("xfem_dirichlet.sl0e", true);
+ slle.write_to_file("xfem_dirichlet.slle", true);
+ plain_vector UUE(sle.nb_points());
+ sle.interpolate(mf, UEE, UUE);
+ gmm::vecsave("xfem_dirichlet.slUE", UUE);
}
return 0;
diff --git a/contrib/xfem_contact/xfem_dirichlet.param b/contrib/xfem_contact/xfem_dirichlet.param
index bfd4925..d65c7c0 100644
--- a/contrib/xfem_contact/xfem_dirichlet.param
+++ b/contrib/xfem_contact/xfem_dirichlet.param
@@ -3,21 +3,27 @@
% parameters for program xfem_dirichlet %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-QUAD = 1;
+QUAD = 0;
N = 2;
-RADIUS = 0.47; % radius of the real circular domain.
+RADIUS = 0.4; % radius of the real circular domain.
LEVEL_SET_DEGREE = 2; % Degree of the piecewise polynomial
% defining the level set.
-EXACT_SOL = 3; % Which exact solution.
+EXACT_SOL = 3; % Which exact solution(8 is three dimensional solution).
+TPA=0;
SIMPLIFY_LEVEL_SET = 0;
-STABILIZED_DIRICHLET = 2; % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab.
-MINIMAL_ELT_RATIO = 0.005; % threshold ratio for the fully stab Dirichlet.
-DIRICHLET_GAMMA0 = 0.1; % Barbosa Hughes stabilization parameter
-
+STABILIZED_DIRICHLET = 3; % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab., 3 = Patch stab.
+MINIMAL_ELT_RATIO = 0.1; % threshold ratio for the fully stab Dirichlet.
+DIRICHLET_GAMMA0 = 0.0000001; % Barbosa Hughes stabilization parameter
+RATIO_GR_MESH = 2; % Ratio size between mesh and patches.
+
OK = 0;
+NX = 10; % space step.
+MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
+
if (N == 1)
- MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[3]';
+ % MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[3]';
+ MESH_TYPE = 'GT_PK(1,1)';
IM = 'IM_GAUSS1D(6)'; % Integration method.
IM_SIMPLEX = IM; % Integration method on sub-triangles.
FEM = 'FEM_PK(1,1)'; % Finite element method for the unknown.
@@ -27,9 +33,11 @@ if (N == 1)
end;
if (N == 2 && QUAD)
- MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[32,32]';
+ MESH_TYPE = 'GT_QK(2,1)';
IM = 'IM_GAUSS_PARALLELEPIPED(2,6)'; % Integration method.
+% IM='IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)'; % Integration method on sub-triangles.
+% IM_SIMPLEX ='IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4), 3)';
FEM = 'FEM_QK(2,1)'; % Finite element method for the unknown.
% FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))'; % Finite element method for the unknown.
FEM_RHS = 'FEM_QK(2,3)'; % Finite element method for the rhs
@@ -38,27 +46,41 @@ if (N == 2 && QUAD)
end;
if (N == 2 && ~QUAD)
- MESH_FILE='structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[3,3]';
-% IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
- IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)'; % Integration method.
- IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';
- FEM = 'FEM_PK(2,1)'; % Finite element method for the unknown.
- FEM_MULT = 'FEM_PK(2,0)'; % Finite element method for multipliers
+ MESH_TYPE = 'GT_PK(2,1)';
+% IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
+ IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),1)'; % Integration method.
+ IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)';
+ FEM = 'FEM_PK(2,2)'; % Finite element method for the unknown.
+ FEM_MULT = 'FEM_PK(2,1)'; % Finite element method for multipliers
% FEM = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
% FEM = 'FEM_P1_PIECEWISE_LINEAR_BUBBLE';
FEM_RHS = 'FEM_PK(2,3)'; % Finite element method for the rhs
OK = 1;
end;
+if (N == 3 && QUAD)
+ MESH_TYPE = 'GT_QK(3,1)';
+ IM = 'IM_GAUSS_PARALLELEPIPED(3,6)'; % Integration method.
+% IM='IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6), 5)';
+ IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),2)'; % Integration method on sub-triangles.
+% IM_SIMPLEX ='IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(4), 3)';
+ FEM = 'FEM_QK(3,2)'; % Finite element method for the unknown.
+% FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))'; % Finite element method for the unknown.
+ FEM_RHS = 'FEM_QK(3,3)'; % Finite element method for the rhs
+ FEM_MULT = 'FEM_QK(3,1)'; % Finite element method for multipliers
+ OK = 1;
+end;
+
if (N == 3 && ~QUAD)
- MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+ % MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+ MESH_TYPE = 'GT_PK(3,1)';
IM = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)'; % Integration method.
IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)';
FEM = 'FEM_PK(3,2)'; % Finite element method for the unknown.
- FEM_RHS = FEM; % Finite element method for the rhs
+ FEM_RHS ='FEM_PK(3,3)'; % Finite element method for the rhs
FEM_MULT = 'FEM_PK(3,1)'; % Finite element method for multipliers
- FEM_MULT_DEGREE = 1; % Degree for multipliers definition
- OK = 1;
+ FEM_MULT_DEGREE = 2; % Degree for multipliers definition
+ OK = 1;
end;
if (~OK)
@@ -67,5 +89,5 @@ end;
%%%%% saving parameters %%%%%
-ROOTFILENAME = 'xfem_dirichlet'; % Root of data files.
+ROOTFILENAME = 'xfem_dirichlet_toto'; % Root of data files.
VTK_EXPORT = 2 % export solution to a .vtk file ?
diff --git a/contrib/xfem_contact/xfem_stokes.cc b/contrib/xfem_contact/xfem_stokes.cc
new file mode 100644
index 0000000..7afe5b9
--- /dev/null
+++ b/contrib/xfem_contact/xfem_stokes.cc
@@ -0,0 +1,1067 @@
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ * Goal : scalar Dirichlet problem with Xfem.
+ *
+ * Research program.
+ */
+
+#include "getfem/getfem_assembling.h" /* import assembly methods */
+#include "getfem/getfem_export.h" /* export functions */
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_partial_mesh_fem.h"
+#include "getfem/getfem_Coulomb_friction.h"
+#include "getfem/getfem_import.h"
+#include "getfem/getfem_inter_element.h"
+#include "gmm/gmm.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_vector;
+using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::scalar_type; /* = double */
+using bgeot::short_type; /* = short */
+using bgeot::size_type; /* = unsigned long */
+using bgeot::dim_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+typedef gmm::row_matrix<sparse_vector> sparse_row_matrix;
+
+int Nxy;
+
+int DIRICHLET_BOUNDARY_NUM = 0;
+int NEUMANN_BOUNDARY_NUM = 1;
+
+scalar_type nu;
+double Radius;
+int u_version;
+
+
+/*
+ * Exact solution for the velocity u
+ */
+
+ base_small_vector u_exact(const base_node &p){
+ return base_small_vector (
+ p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0)*(2.0*p[1]-6.0*p[1]*p[1]+4.0*p[1]*p[1]*p[1]),
+ -p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)*(2.0*p[0]-6.0*p[0]*p[0]+4.0*p[0]*p[0]*p[0]) ) ;
+ }
+
+
+/*
+ * Exact solution for the pressure p
+ */
+
+ double p_exact(const base_node &p) {
+ return p[0]*p[0]*p[1]*p[1];
+ }
+
+/*
+ * Value of the normal derivative on the level-set. The fluid is outside
+ */
+
+ base_small_vector g_exact_ls(const base_node &p){
+ double R = Radius;
+ return base_small_vector( (-1.0/(2.0*R))*2.0*p[0]*(2.0*p[0]-1.0)*(2.0*p[0]-1.0)*(p[0]-1.0)*2.0*p[1]*(2.0*p[1]-1.0)*(p[1]-1.0)-(1.0/(2.0*R))*(2.0*p[1]-1.0)*p[0]*p[0]*(1.0-p[0])*(1.0-p[0])*(2.0-12.0*p[1]+12.0*p[1]*p[1]),
+ (1.0/(2.0*R))*(2*p[0]-1.0)*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)*(2.0-12.0*p[0]+12.0*p[0]*p[0])+(1.0/(2.0*R))*2.0*p[1]*(2.0*p[1]-1.0)*(2.0*p[1]-1.0)*(p[1]-1.0)*2.0*p[0]*(2.0*p[0]-1.0)*(p[0]-1.0) ) ;
+ }
+
+/*
+ * Value of the normal derivative on the box boundary.
+ */
+ base_small_vector g_exact(const base_node &p){
+
+ if (p[0] < 1e-7) {
+ return base_small_vector( 0.0, -2.0*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)
+ ) ;
+ }
+ if (p[0] > 1.0 - 1e-7) {
+ return base_small_vector( 0.0, 2.0*p[1]*p[1]*(p[1]-1.0)*(p[1]-1.0)
+ ) ;
+ }
+ if (p[1] > 1.0 - 1e-7) {
+ return base_small_vector( -2.0*p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0), 0.0
+ ) ;
+ }
+ if (p[1] < 1e-7) {
+ return base_small_vector( 2.0*p[0]*p[0]*(p[0]-1.0)*(p[0]-1.0), 0.0
+ ) ;
+ }
+ else {
+ return base_small_vector( 0.0, 0.0
+ ) ;
+ }
+ }
+
+/*
+ * Right-hand-side corresponding to the exact solution
+ */
+
+ base_small_vector rhs(const base_node &p){
+ return base_small_vector( -nu*( (4*(2*p[1]-1))*(6*p[1]*p[1]*p[0]*p[0]+p[1]*p[1]-6*p[1]*p[1]*p[0]-6*p[0]*p[0]*p[1]-p[1]+6*p[0]*p[1]-6*p[0]*p[0]*p[0]+3*p[0]*p[0]+3*p[0]*p[0]*p[0]*p[0]) ) + 2.0*p[0]*p[1]*p[1],
+ -nu*( -(4*(-1+2*p[0]))*(6*p[1]*p[1]*p[0]*p[0]+p[0]*p[0]-6*p[0]*p[0]*p[1]-6*p[1]*p[1]*p[0]+6*p[0]*p[1]-p[0]+3*p[1]*p[1]*p[1]*p[1]-6*p[1]*p[1]*p[1]+3*p[1]*p[1]) ) + 2.0*p[1]*p[0]*p[0] );
+ }
+
+/*
+ * The level-set : a circle of radius R = Radius
+ */
+
+ double ls_value(const base_node &p) {
+ double R = Radius;
+ return (p[0]-0.5)*(p[0]-0.5) + (p[1]-0.5)*(p[1]-0.5)- R*R;
+ }
+
+
+/*
+ * Test procedure
+ */
+
+void test_mim(getfem::mesh_im_level_set &mim, getfem::mesh_fem &mf_rhs,
+ bool bound) {
+ if (!u_version) {
+ unsigned N = unsigned(mim.linked_mesh().dim());
+ size_type nbdof = mf_rhs.nb_dof();
+ plain_vector V(nbdof), W(1);
+ std::fill(V.begin(), V.end(), 1.0);
+
+ getfem::generic_assembly assem("u=data(#1); V()+=comp(Base(#1))(i).u(i);");
+ assem.push_mi(mim); assem.push_mf(mf_rhs); assem.push_data(V);
+ assem.push_vec(W);
+ assem.assembly(getfem::mesh_region::all_convexes());
+ double exact(0), R2 = Radius*Radius, R3 = R2*Radius;
+ switch (N) {
+ case 1: exact = bound ? 1.0 : 2.0*Radius; break;
+ case 2: exact = bound ? Radius*M_PI : R2*M_PI; break;
+ case 3: exact = bound ? 2.0*M_PI*R2 : 4.0*M_PI*R3/3.0; break;
+ default: assert(N <= 3);
+ }
+ if (bound) cout << "Boundary length: "; else cout << "Area: ";
+ cout << W[0] << " should be " << exact << endl;
+ assert(gmm::abs(exact-W[0])/exact < 0.01);
+ }
+}
+
+/*
+ * Assembly of stabilization terms
+ */
+
+
+template<typename VECT1> class level_set_unit_normal
+ : public getfem::nonlinear_elem_term {
+ const getfem::mesh_fem &mf;
+ const VECT1 &U;
+ size_type N;
+ base_matrix gradU;
+ bgeot::base_vector coeff;
+ bgeot::multi_index sizes_;
+public:
+ level_set_unit_normal(const getfem::mesh_fem &mf_, const VECT1 &U_)
+ : mf(mf_), U(U_), N(mf_.linked_mesh().dim()), gradU(1, N)
+ { sizes_.resize(1); sizes_[0] = short_type(N); }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf.nb_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector(U, gmm::sub_index(mf.ind_dof_of_element(cv))),
+ coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, 1);
+ scalar_type norm = gmm::vect_norm2(gmm::mat_row(gradU, 0));
+ for (size_type i = 0; i < N; ++i) t[i] = - gradU(0, i) / norm;
+ // cout << "point " << ctx.xreal() << " norm = " << t << endl;
+ }
+};
+
+
+template<class MAT>
+void asm_stabilization_mixed_term
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf,
+ const getfem::mesh_fem &mf_mult, getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly assem("t=comp(vBase(#2).vGrad(#1).NonLin(#3));"
+ "M(#2, #1)+= t(:,j,:,j,i,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf);
+ assem.push_mf(mf_mult);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+}
+
+
+template<class MAT>
+void asm_stabilization_symm_term
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf,
+ getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly
+ assem("t=comp(vGrad(#1).NonLin(#2).vGrad(#1).NonLin(#2));"
+ "M(#1, #1)+= sym(t(:,k,i,i,:,k,j,j))");
+ assem.push_mi(mim);
+ assem.push_mf(mf);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+}
+
+
+
+
+
+template<class MAT>
+void asm_mass_matrix_pl(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_p, const getfem::mesh_fem &mf,
+ getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly
+ assem("t=comp(Base(#1).vBase(#2).NonLin(#3));"
+ "M(#1, #2)+= t(:,:,i,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_p);
+ assem.push_mf(mf);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+}
+
+
+
+template<class MAT>
+void asm_mass_matrix_up(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_p, const getfem::mesh_fem &mf,
+ getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly
+ assem("t=comp(Base(#1).NonLin(#3).NonLin(#3).vGrad(#2));"
+ "M(#1, #2)+= t(:,i,j,:,i,j)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_p);
+ assem.push_mf(mf);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * Elementary extrapolation matrices
+ */
+
+void compute_mass_matrix_extra_element(base_matrix &M, const getfem::mesh_im &mim, const getfem::mesh_fem &mf,
+ size_type cv1, size_type cv2) {
+
+ getfem::pfem pf1_old = 0;
+ static getfem::pfem_precomp pfp1 = 0;
+ static getfem::papprox_integration pai1_old = 0;
+ bgeot::geotrans_inv_convex gic;
+ bgeot::base_tensor t1, t2;
+ getfem::base_matrix G1, G2;
+
+ const getfem::mesh &m(mf.linked_mesh());
+
+ GMM_ASSERT1(mf.convex_index().is_in(cv1) && mim.convex_index().is_in(cv1) &&
+ mf.convex_index().is_in(cv2) && mim.convex_index().is_in(cv2),
+ "Bad element");
+
+ bgeot::pgeometric_trans pgt1 = m.trans_of_convex(cv1);
+ getfem::pintegration_method pim1 = mim.int_method_of_element(cv1);
+ getfem::papprox_integration pai1 =
+ getfem::get_approx_im_or_fail(pim1);
+ getfem::pfem pf1 = mf.fem_of_element(cv1);
+ size_type nbd1 = pf1->nb_dof(cv1);
+
+ if (pf1 != pf1_old || pai1 != pai1_old) {
+ pfp1 = fem_precomp(pf1, &pai1->integration_points(), pim1);
+ pf1_old = pf1; pai1_old = pai1;
+ }
+
+ bgeot::vectors_to_base_matrix(G1, m.points_of_convex(cv1));
+ getfem::fem_interpolation_context ctx1(pgt1, pfp1, 0, G1, cv1,size_type(-1));
+
+ getfem::pfem pf2 = mf.fem_of_element(cv2);
+ size_type nbd2 = pf1->nb_dof(cv2);
+ base_node xref2(pf2->dim());
+ bgeot::pgeometric_trans pgt2 = m.trans_of_convex(cv2);
+ gic.init(m.points_of_convex(cv2), pgt2);
+
+ gmm::resize(M, nbd1, nbd2); gmm::clear(M);
+
+ bgeot::vectors_to_base_matrix(G2, m.points_of_convex(cv2));
+
+ getfem::fem_interpolation_context ctx2(pgt2, pf2, base_node(pgt2->dim()),
+ G2, cv2, size_type(-1));
+
+ for (unsigned ii=0; ii < pai1->nb_points_on_convex(); ++ii) {
+ ctx1.set_ii(ii);
+ scalar_type coeff = pai1->integration_coefficients()[ii] * ctx1.J();
+ bool converged;
+ gic.invert(ctx1.xreal(), xref2, converged);
+ GMM_ASSERT1(converged, "geometric transformation not well inverted ... !");
+ // cout << "xref2 = " << xref2 << endl;
+ ctx2.set_xref(xref2);
+
+ pf1->real_base_value(ctx1, t1);
+ pf2->real_base_value(ctx2, t2);
+
+ for (size_type i = 0; i < nbd1; ++i)
+ for (size_type j = 0; j < nbd2; ++j)
+ M(i,j) += t1[i] * t2[j] * coeff;
+ }
+
+}
+
+
+
+/*
+ * Main program
+ */
+
+int main(int argc, char *argv[]) {
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ // Read parameters.
+ bgeot::md_param PARAM;
+ PARAM.read_command_line(argc, argv);
+ u_version = int(PARAM.int_value("EXACT_SOL", "Which exact solution"));
+ nu = double(PARAM.real_value("NU", "Viscosité"));
+
+
+ // Load the mesh
+ getfem::mesh mesh;
+
+ std::string MESH_FILE = PARAM.string_value("MESH_FILE", "Mesh file");
+ getfem::import_mesh(MESH_FILE, mesh);
+
+ /* //to make tables for results
+ Nxy = PARAM.int_value("Nxy","Number of subdivision for the mesh in x and y direction");
+ std::ostringstream oss;
+ oss << Nxy;
+ std::string NxyStr = oss.str();
+ std::string meshname1 = "structured:GT=\"GT_PK(2,1)\";SIZES=[1,1];NOISED=0;";
+ //(PARAM.string_value("MESHNAME1", "Nom du fichier de maillage"));
+ std::string meshname2
+ (PARAM.string_value("MESHNAME2", "Nom du fichier de maillage"));
+ std::string meshname = meshname1 + "NSUBDIV=[" + NxyStr + "," + NxyStr + "];" + meshname2;
+ getfem::import_mesh(meshname, mesh);
+ */
+ unsigned N = mesh.dim();
+
+ // center the mesh in (0, 0).
+ base_node Pmin(N), Pmax(N);
+ mesh.bounding_box(Pmin, Pmax);
+ Pmin += Pmax; Pmin /= -2.0;
+ // Pmin[N-1] = -Pmax[N-1];
+
+ // mesh.translation(Pmin);
+
+ scalar_type h = mesh.minimal_convex_radius_estimate();
+ cout << "h = " << h << endl;
+
+/*
+ * Level set definition
+ */
+
+ unsigned lsdeg = unsigned(PARAM.int_value("LEVEL_SET_DEGREE", "level set degree"));
+ bool simplify_level_set =
+ (PARAM.int_value("SIMPLIFY_LEVEL_SET",
+ "simplification or not of the level sets") != 0);
+ Radius = PARAM.real_value("RADIUS", "Domain radius");
+ getfem::level_set ls(mesh, dim_type(lsdeg));
+
+
+ //getfem::level_set lsup(mesh, dim_type(lsdeg), true), lsdown(mesh, dim_type(lsdeg), true);
+ const getfem::mesh_fem &lsmf = ls.get_mesh_fem();
+ for (unsigned i = 0; i < lsmf.nb_dof(); ++i) {
+ ls.values()[i] = ls_value(lsmf.point_of_dof(i));
+ }
+
+
+ if (simplify_level_set) {
+ scalar_type simplify_rate = std::min(0.03, 0.05 * sqrt(h));
+ cout << "Simplification of level sets with rate: " <<
+ simplify_rate << endl;
+ ls.simplify(simplify_rate);
+ // lsup.simplify(simplify_rate);
+ // lsdown.simplify(simplify_rate);
+ }
+
+ getfem::mesh_level_set mls(mesh); //, mlsup(mesh), mlsdown(mesh);
+ mls.add_level_set(ls);
+ mls.adapt();
+ // mlsup.add_level_set(lsup);
+ // mlsup.adapt();
+ // mlsdown.add_level_set(lsdown);
+ // mlsdown.adapt();
+
+
+ getfem::mesh mcut;
+ mls.global_cut_mesh(mcut);
+ mcut.write_to_file("cut.mesh");
+
+/* getfem::mesh mcutdown;
+ mlsdown.global_cut_mesh(mcutdown);
+ mcutdown.write_to_file("cutdown.mesh");
+ getfem::mesh mcutup;
+ mlsup.global_cut_mesh(mcutup);
+ mcutup.write_to_file("cutup.mesh");
+
+*/
+
+
+
+
+ // Integration method on the domain
+ std::string IM = PARAM.string_value("IM", "Mesh file");
+ std::string IMS = PARAM.string_value("IM_SIMPLEX", "Mesh file");
+ int intins = getfem::mesh_im_level_set::INTEGRATE_OUTSIDE;
+ getfem::mesh_im uncutmim(mesh);
+ uncutmim.set_integration_method(mesh.convex_index(),
+ getfem::int_method_descriptor(IM));
+ getfem::mesh_im_level_set mim(mls, intins,
+ getfem::int_method_descriptor(IMS));
+ mim.set_integration_method(mesh.convex_index(),
+ getfem::int_method_descriptor(IM));
+ mim.adapt();
+
+
+ // Integration methods on the boudary
+ int intbound = getfem::mesh_im_level_set::INTEGRATE_BOUNDARY;
+ getfem::mesh_im_level_set mimbound(mls, intbound,
+ getfem::int_method_descriptor(IMS));
+ mimbound.set_integration_method(mesh.convex_index(),
+ getfem::int_method_descriptor(IM));
+ mimbound.adapt();
+ // getfem::mesh_im_level_set mimboundup(mlsup, intbound,
+// getfem::int_method_descriptor(IMS));
+ // mimboundup.set_integration_method(mesh.convex_index(),
+// getfem::int_method_descriptor(IM));
+ // mimboundup.adapt();
+
+
+ // Finite element method for the unknown velocity u
+ getfem::mesh_fem pre_mf(mesh);
+ std::string FEM = PARAM.string_value("FEM", "finite element method");
+ pre_mf.set_qdim(N);
+ pre_mf.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(FEM));
+
+ getfem::partial_mesh_fem mf(pre_mf);
+
+ dal::bit_vector kept_dof = select_dofs_from_im(pre_mf, mim);
+
+ dal::bit_vector rejected_elt;
+ for (dal::bv_visitor cv(mim.convex_index()); !cv.finished(); ++cv)
+ if (mim.int_method_of_element(cv) == getfem::im_none())
+ rejected_elt.add(cv);
+ mf.adapt(kept_dof, rejected_elt);
+ size_type nb_dof = mf.nb_dof();
+ cout << "nb_dof = " << nb_dof << endl;
+
+ // Finite element method for the pressure p
+ getfem::mesh_fem pre_mf_p(mesh);
+ std::string FEM_p = PARAM.string_value("FEM_p", "fem for pressure");
+ pre_mf_p.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(FEM_p));
+ getfem::partial_mesh_fem mf_p(pre_mf_p);
+ dal::bit_vector kept_dof_p = select_dofs_from_im(pre_mf_p, mim);
+ dal::bit_vector rejected_elt_p;
+ for (dal::bv_visitor cv(mim.convex_index()); !cv.finished(); ++cv)
+ if (mim.int_method_of_element(cv) == getfem::im_none())
+ rejected_elt_p.add(cv);
+ mf_p.adapt(kept_dof_p, rejected_elt_p);
+ size_type nb_dof_p = mf_p.nb_dof();
+ cout << "nb_dof_p = " << nb_dof_p << endl;
+
+ // Finite element method for the rhs
+ getfem::mesh_fem mf_rhs(mesh);
+ std::string FEMR = PARAM.string_value("FEM_RHS", "finite element method");
+ mf_rhs.set_qdim(N);
+ mf_rhs.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(FEMR));
+ size_type nb_dof_rhs = mf_rhs.nb_dof();
+ cout << "nb_dof_rhs = " << nb_dof_rhs << endl;
+
+ // A P0 finite element
+ const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+
+ // Finite element method for the multipliers
+ getfem::mesh_fem pre_mf_mult(mesh);
+ std::string FEMM = PARAM.string_value("FEM_MULT", "fem for multipliers");
+ pre_mf_mult.set_qdim(N);
+ pre_mf_mult.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(FEMM));
+ getfem::partial_mesh_fem mf_mult(pre_mf_mult);
+
+
+
+
+
+ dal::bit_vector kept_dof_mult
+ = select_dofs_from_im(pre_mf_mult, mimbound, N-1);
+ mf_mult.adapt(kept_dof_mult, rejected_elt);
+
+
+ size_type nb_dof_mult = mf_mult.nb_dof();
+ cout << "nb_dof_mult = " << nb_dof_mult << endl;
+
+ /*
+ // Alternative : RANGE_BASIS ............. gmm
+ sparse_matrix BBB(pre_mf.nb_dof(), pre_mf.nb_dof());
+ getfem::asm_mass_matrix(BBB, mim, pre_mf, pre_mf);
+ std::set<size_type> columns;
+ gmm::range_basis(BBB,columns,1.e-12);
+ dal::bit_vector kept_dof_mult;
+ for (std::set<size_type>:: iterator it=columns.begin();it!=columns.end();++it){
+ kept_dof_mult.add(*it);
+ };
+ */
+
+
+
+
+
+
+
+
+ // Mass matrix on the boundary
+ sparse_matrix B2(mf_rhs.nb_dof(), pre_mf.nb_dof());
+ getfem::asm_mass_matrix(B2, mimbound, mf_rhs, pre_mf);
+
+ sparse_matrix B(nb_dof_mult, nb_dof);
+ getfem::asm_mass_matrix(B, mimbound, mf_mult, mf);
+
+ int stabilized_dirichlet =
+ int(PARAM.int_value("STABILIZED_DIRICHLET", "Stabilized version of "
+ "Dirichlet condition or not"));
+ scalar_type dir_gamma0(0);
+ sparse_matrix MA(nb_dof_mult, nb_dof_mult), KA(nb_dof, nb_dof);
+ sparse_matrix BA(nb_dof_mult, nb_dof);
+
+
+
+ // Stabilization of the pressure
+ sparse_matrix Mup(nb_dof_p, nb_dof);
+ sparse_matrix Mpp(nb_dof_p, nb_dof_p);
+ sparse_matrix Mpl(nb_dof_p, nb_dof_mult);
+
+
+ getfem::asm_mass_matrix(Mpp,mimbound,mf_p,mf_p);
+ asm_mass_matrix_pl(Mpl,mimbound,mf_p,mf_mult,ls);
+ asm_mass_matrix_up(Mup,mimbound,mf_p,mf,ls);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if (stabilized_dirichlet > 0) {
+
+ sparse_row_matrix E1(nb_dof, nb_dof);
+
+ if (stabilized_dirichlet == 2) {
+ // Computation of the extrapolation operator
+ scalar_type min_ratio =
+ PARAM.real_value("MINIMAL_ELT_RATIO",
+ "Threshold ratio for the fully stab Dirichlet");
+
+ cout << "Computation of the extrapolation operator" << endl;
+ dal::bit_vector elt_black_list, dof_black_list;
+ size_type nbe = mf_P0.nb_dof();
+ plain_vector ratios(nbe);
+ sparse_matrix MC1(nbe, nbe), MC2(nbe, nbe);
+ getfem::asm_mass_matrix(MC1, mim, mf_P0);
+ getfem::asm_mass_matrix(MC2, uncutmim, mf_P0);
+ for (size_type i = 0; i < nbe; ++i) {
+ size_type cv = mf_P0.first_convex_of_dof(i);
+ ratios[cv] = gmm::abs(MC1(i,i)) / gmm::abs(MC2(i,i));
+ if (ratios[cv] > 0 && ratios[cv] < min_ratio) elt_black_list.add(cv);
+ }
+
+
+ sparse_matrix EO(nb_dof, nb_dof);
+ sparse_row_matrix T1(nb_dof, nb_dof), EX(nb_dof, nb_dof);
+ asm_mass_matrix(EO, uncutmim, mf);
+
+ for (size_type i = 0; i < nb_dof; ++i) {
+ bool found = false;
+ getfem::mesh::ind_cv_ct ct = mf.convex_to_dof(i);
+ getfem::mesh::ind_cv_ct::const_iterator it;
+ for (it = ct.begin(); it != ct.end(); ++it)
+ if (!elt_black_list.is_in(*it)) found = true;
+ if (found)
+ { gmm::clear(gmm::mat_col(EO, i)); EO(i,i) = scalar_type(1); }
+ else
+ dof_black_list.add(i);
+ }
+
+ bgeot::mesh_structure::ind_set is;
+ base_matrix Mloc;
+ for (dal::bv_visitor i(elt_black_list); !i.finished(); ++i) {
+ mesh.neighbours_of_convex(i, is);
+ size_type cv2 = size_type(-1);
+ scalar_type ratio = scalar_type(0);
+ for (size_type j = 0; j < is.size(); ++j) {
+ scalar_type r = ratios[is[j]];
+ if (r > ratio) { ratio = r; cv2 = is[j]; }
+ }
+ GMM_ASSERT1(cv2 != size_type(-1), "internal error");
+ compute_mass_matrix_extra_element(Mloc, uncutmim, mf, i, cv2);
+ for (size_type ii = 0; ii < gmm::mat_nrows(Mloc); ++ii)
+ for (size_type jj = 0; jj < gmm::mat_ncols(Mloc); ++jj)
+ EX(mf.ind_dof_of_element(i)[ii], mf.ind_dof_of_element(cv2)[jj])
+ += Mloc(ii, jj);
+ }
+
+ gmm::copy(gmm::identity_matrix(), E1);
+ gmm::copy(gmm::identity_matrix(), T1);
+ for (dal::bv_visitor i(dof_black_list); !i.finished(); ++i)
+ gmm::copy(gmm::mat_row(EX, i), gmm::mat_row(T1, i));
+
+ plain_vector BE(nb_dof), BS(nb_dof);
+ for (dal::bv_visitor i(dof_black_list); !i.finished(); ++i) {
+ BE[i] = scalar_type(1);
+ // TODO: store LU decomp.
+ double rcond;
+ gmm::SuperLU_solve(EO, BS, BE, rcond);
+ gmm::mult(gmm::transposed(T1), BS, gmm::mat_row(E1, i));
+ BE[i] = scalar_type(0);
+ }
+ gmm::clean(E1, 1e-13);
+
+// gmm::clean(EO, 1e-13); cout << "E0 = " << gmm::transposed(EO) << endl; getchar();
+// cout << "T1 = " << T1 << endl; getchar();
+
+
+ cout << "Extrapolation operator computed" << endl;
+
+// sparse_row_matrix A1(nb_dof, nb_dof);
+// gmm::mult(E1, gmm::transposed(EO), A1);
+// gmm::clean(A1, 1e-13);
+// cout << "A1 = " << A1 << endl;
+
+ }
+
+ dir_gamma0 = PARAM.real_value("DIRICHLET_GAMMA0",
+ "Stabilization parameter for "
+ "Dirichlet condition");
+ getfem::asm_mass_matrix(MA, mimbound, mf_mult);
+ asm_stabilization_mixed_term(BA, mimbound, mf, mf_mult, ls);
+ asm_stabilization_symm_term(KA, mimbound, mf, ls);
+ gmm::scale(MA, -dir_gamma0 * h);
+ gmm::scale(BA, -dir_gamma0 * h);
+ gmm::scale(KA, -dir_gamma0 * h);
+
+ gmm::scale(Mup, dir_gamma0 * h);
+ gmm::scale(Mpp, -dir_gamma0 * h);
+ gmm::scale(Mpl, dir_gamma0 * h);
+
+
+ if (stabilized_dirichlet == 2) {
+ sparse_matrix A1(nb_dof_mult, nb_dof);
+ gmm::copy(BA, A1);
+ gmm::mult(gmm::transposed(E1), gmm::transposed(A1), gmm::transposed(BA));
+ sparse_matrix A2(nb_dof, nb_dof);
+ gmm::mult(gmm::transposed(E1), KA, A2);
+ gmm::mult(gmm::transposed(E1), gmm::transposed(A2), gmm::transposed(KA));
+ }
+
+ gmm::add(BA, B);
+
+ }
+
+ // Tests
+ test_mim(mim, mf_rhs, false);
+ test_mim(mimbound, mf_rhs, true);
+
+ /*
+ * Choose boundaries
+ */
+ getfem::mesh_region r;
+ getfem::outer_faces_of_mesh(mesh,r);
+
+ base_node BBmin, BBmax;
+ mesh.bounding_box(BBmin, BBmax);
+ cout << "mesh bounding box: " << BBmin << " ... " << BBmax << endl;
+
+ for (getfem::mr_visitor i(r); !i.finished(); ++i) {
+// base_node G = gmm::mean_value(mesh.points_of_face_of_convex(i.cv(),i.f()));
+
+/* if ((gmm::abs(G[0]-BBmin[0]) < 1e-7)||((gmm::abs(G[0]-BBmax[0]) < 1e-7))||((gmm::abs(G[1]-BBmin[1]) < 1e-7 && gmm::abs(G[0]-BBmin[0]) > h && gmm::abs(G[0]-BBmax[0]) > h))||((gmm::abs(G[1]-BBmax[1]) < 1e-7 && gmm::abs(G[0]-BBmax[0]) > h && gmm::abs(G[0]-BBmin[0]) > h))) {
+ mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(),i.f());
+ compteur = compteur +1;
+cout << compteur << " " << G[0] << " " << G[1] << endl;
+ }
+ else {
+ mesh.region(NEUMANN_BOUNDARY_NUM).add(i.cv(),i.f());
+ }
+*/
+ mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(),i.f());
+ }
+
+
+ // Model system
+
+ getfem::model MS;
+
+
+ // Linearized elasticity brick
+ // MS.add_initialized_fixed_size_data("lambada", plain_vector(1, 0.0)); // lambada vu comme un scalaire egal à 0
+ MS.add_initialized_fixed_size_data("nu", plain_vector(1, nu));
+ MS.add_fem_variable("u", mf);
+ getfem::add_generic_elliptic_brick(MS, mim, "u", "nu");
+
+
+// getfem::add_isotropic_linearized_elasticity_brick(MS, mim, "u", "lambada", "nu");
+
+ // Linearized incompressibility condition brick
+ MS.add_fem_variable("p", mf_p); // Adding the pressure as variable
+ add_linear_incompressibility(MS, mim, "u", "p");
+
+ /*
+ // Neumann condition on the box boundary
+ plain_vector G(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, G, g_exact);
+
+ MS.add_initialized_fem_data("NeumannData", mf_rhs, G);
+ getfem::add_source_term_brick(MS, mim, "u", "NeumannData", NEUMANN_BOUNDARY_NUM);
+*/
+
+/* // Neumann condition on the level-set lsup
+ MS.add_multiplier("LAMBDAN", mf_mult, "u");
+ plain_vector G(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, G, g_exact);
+ plain_vector G2(nb_dof);
+ gmm::mult(gmm::transposed(B2), G, G2);
+ MS.add_initialized_fem_data("Neumanndata", mf, G2);
+ //MS.add_initialized_fixed_size_data("B2data", gmm::transposed(B2));
+ //getfem::add_constraint_with_multipliers(MS, "u", "LAMBDAN", gmm::transposed(B2), G2);
+ getfem::add_source_term_brick(MS, mim, "u", "Neumanndata");
+*/
+
+
+ /*plain_vector G(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, G, g_exact_ls);
+ plain_vector G2(mf_mult.nb_dof());
+ getfem::interpolation(mf_rhs, mf_mult,G,G2);
+
+
+ MS.add_initialized_fem_data("Neumanndata", mf_mult, G2);
+ add_source_term_brick(MS,mimboundup,"u","Neumanndata", NEUMANN_BOUNDARY_NUM);
+ */
+
+ // Dirichlet on the box boundary
+
+
+// cout << B << endl;
+
+
+ // Dirichlet condition on the box boundary
+ MS.add_initialized_fem_data("Dirichletdata", mf, plain_vector(nb_dof));
+ getfem::add_Dirichlet_condition_with_multipliers(MS, mim, "u", mf, DIRICHLET_BOUNDARY_NUM, "Dirichletdata");
+
+
+ // Dirichlet condition on the level-set lsdown
+ MS.add_fem_variable("LAMBDA", mf_mult);
+ plain_vector H(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, H, u_exact);
+
+ plain_vector H3(nb_dof_mult);
+ getfem :: asm_source_term(H3,mimbound,mf_mult,mf_rhs,H);
+
+ cout << mf_mult.nb_dof() << endl;
+ getfem::add_constraint_with_multipliers(MS, "u", "LAMBDA", B, H3);
+
+// getfem::add_constraint_with_penalization(MS, "u", 1.e9, B, H3);
+
+ if (stabilized_dirichlet > 0){
+ getfem::add_explicit_matrix(MS, "LAMBDA", "LAMBDA", MA);
+ getfem::add_explicit_matrix(MS, "u", "u", KA);
+
+ getfem::add_explicit_matrix(MS, "u", "p", gmm::transposed(Mup));
+ getfem::add_explicit_matrix(MS, "p", "p", Mpp);
+ getfem::add_explicit_matrix(MS, "p", "LAMBDA", Mpl);
+ getfem::add_explicit_matrix(MS, "LAMBDA", "p", gmm::transposed(Mpl));
+ }
+
+
+ // Volumic source term
+ plain_vector F(nb_dof_rhs);
+ getfem::interpolation_function(mf_rhs, F, rhs);
+ MS.add_initialized_fem_data("VolumicData", mf_rhs, F);
+ getfem::add_source_term_brick(MS, mim, "u", "VolumicData");
+//cout << F2 << endl;
+
+
+
+ /* MS.assembly(getfem::model::BUILD_ALL);
+ MS.interval_of_variables("u");
+ MS.real_tangent_matrix();
+ */
+
+
+
+
+ // Solving the problem
+ // cout << "Total number of unknown: " << final_brick->nb_dof() << endl;
+ gmm::iteration iter(1e-9, 1, 40000);
+ getfem::standard_solve(MS, iter);
+ plain_vector U(nb_dof);
+ gmm::copy(MS.real_variable("u"), U);
+
+// plain_vector LAMBDA(nb_dof_rhs);
+// gmm::copy(MS.real_variable("LAMBDA"), LAMBDA);
+
+ // interpolation of the solution on mf_rhs
+ plain_vector Uint(nb_dof_rhs), Vint(nb_dof_rhs), Eint(nb_dof_rhs), Vex(nb_dof_rhs), Uex(nb_dof);
+
+ getfem::interpolation_function(mf_rhs, Vex, u_exact);
+ getfem::interpolation(mf_rhs, mf, Vex, Uex);
+
+ getfem::interpolation_function(mf_rhs, Vint, u_exact);
+ getfem::interpolation(mf, mf_rhs, U, Uint);
+ for (size_type i = 0; i < nb_dof_rhs; ++i) {
+ Eint[i] = gmm::abs(Uint[i] - Vint[i]);
+ }
+
+
+ // computation of error on u.
+ double errmax = 0.0, exactmax = 0.0;
+ for (size_type i = 0; i < nb_dof_rhs; ++i)
+ if (ls_value(mf_rhs.point_of_dof(i)) >= 0.0) {
+ errmax = std::max(errmax, Eint[i]);
+ exactmax = std::max(exactmax, Vint[i]);
+ }
+ else Eint[i] = 0.0;
+ cout << "Linfty error: (absolute) " << errmax << \
+ "(relative) " <<100.0 * errmax / exactmax << "%" << endl;
+
+
+ cout << "L2 error: " << getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint) <<
+ "(relative) " << 100.0
+ * getfem::asm_L2_dist(mim, mf, U, mf_rhs, Vint)
+ / getfem::asm_L2_norm(mim, mf_rhs, Vint) << "%" << endl;
+
+
+ cout << "H1 error: " << getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint) <<
+ "(relative) " << 100.0
+ * getfem::asm_H1_dist(mim, mf, U, mf_rhs, Vint)
+ / getfem::asm_H1_norm(mim, mf_rhs, Vint) << "%" << endl;
+
+/*
+ // computation of error on multipliers.
+cout << "OKKKK" << endl;
+
+ gmm::resize(BA, nb_dof_mult, nb_dof_rhs); gmm::clear(BA);
+ gmm::resize(KA, nb_dof_rhs, nb_dof_rhs); gmm::clear(KA);
+ gmm::resize(B, nb_dof_mult, nb_dof_mult); gmm::clear(B);
+
+cout << "OKIDOC" << endl;
+
+ asm_stabilization_mixed_term(BA, mimbounddown, mf_rhs, mf_mult, lsdown);
+
+cout << "OKIDOC" << endl;
+
+ getfem::asm_mass_matrix(B, mimbounddown, mf_mult, mf_mult);
+ asm_stabilization_symm_term(KA, mimbounddown, mf_rhs, lsdown);
+
+ scalar_type err_l2_mult =
+ ( gmm::vect_sp(B, LAMBDA, LAMBDA) + gmm::vect_sp(KA, Vint, Vint)
+ + 2 * gmm::vect_sp(BA, Vint, LAMBDA) ) / gmm::vect_sp(KA, Vint, Vint);
+
+
+
+ cout << "L2 error on multipliers: "
+ << gmm::sgn(err_l2_mult) * gmm::sqrt(gmm::abs(err_l2_mult)) * 100.0
+ << "%" << endl;
+ // cout << "L2^2 max on multipliers: " << gmm::vect_sp(KA, Vint, Vint);
+ // cout << " LAMBDA^2: " << gmm::vect_sp(B, LAMBDA, LAMBDA);
+ // cout << " Double produit: " << 2*gmm::vect_sp(BA, Vint, LAMBDA)<<endl;
+
+
+
+*/
+
+ // exporting solution in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet.vtk", (2==1));
+ exp.exporting(mf);
+ exp.write_point_data(mf, U, "solution");
+ //cout << "export done, you can view the data file with (for example)\n"
+ // "mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
+ // "-m Outline\n";
+ }
+ // exporting exact solution in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet_exact.vtk", (2==1));
+ exp.exporting(mf);
+ exp.write_point_data(mf, Uex, "solution");
+
+ //cout << "export done, you can view the data file with (for example)\n"
+ // "mayavi -d xfem_dirichlet.vtk -f WarpScalar -m BandedSurfaceMap "
+ // "-m Outline\n";
+ }
+ // exporting error in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet_error.vtk", (2==1));
+ exp.exporting(mf_rhs);
+ exp.write_point_data(mf_rhs, Eint, "error");
+ //cout << "export done, you can view the data file with (for example)\n"
+ // "mayavi -d xfem_dirichlet_error.vtk -f WarpScalar -m BandedSurfaceMap "
+ // "-m Outline\n";
+ }
+/* // exporting multipliers in vtk format.
+ {
+ getfem::vtk_export exp("xfem_dirichlet_mult.vtk", (2==1));
+ exp.exporting(mf_mult);
+ exp.write_point_data(mf_mult, LAMBDA, "multipliers");
+ //cout << "export done, you can view the data file with (for example)\n"
+ // "mayavi -d xfem_dirichlet_mult.vtk -f WarpScalar -m BandedSurfaceMap "
+ // "-m Outline\n";
+ }
+*/
+
+ lsmf.write_to_file("xfem_dirichlet_ls.mf", true);
+ gmm::vecsave("xfem_dirichlet_ls.U", ls.values());
+
+
+/*
+ unsigned nrefine = mf.linked_mesh().convex_index().card() < 200 ? 32 : 4;
+ if (0) {
+ //cout << "saving the slice solution for matlab\n";
+ getfem::stored_mesh_slice sl, sl0,sll;
+
+
+ getfem::mesh_slicer slicer(mf.linked_mesh());
+ getfem::slicer_build_stored_mesh_slice sbuild(sl);
+ getfem::mesh_slice_cv_dof_data<plain_vector> mfU(mf,U);
+ getfem::slicer_isovalues iso(mfU, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuild0(sl0);
+
+ slicer.push_back_action(sbuild); // full slice in sl
+ slicer.push_back_action(iso); // extract isosurface 0
+ slicer.push_back_action(sbuild0); // store it into sl0
+ slicer.exec(nrefine, mf.convex_index());
+
+ getfem::mesh_slicer slicer2(mf.linked_mesh());
+ getfem::mesh_slice_cv_dof_data<plain_vector>
+ mfL(ls.get_mesh_fem(), ls.values());
+ getfem::slicer_isovalues iso2(mfL, 0.0, 0);
+ getfem::slicer_build_stored_mesh_slice sbuildl(sll);
+ slicer2.push_back_action(iso2); // extract isosurface 0
+ slicer2.push_back_action(sbuildl); // store it into sl0
+ slicer2.exec(nrefine, mf.convex_index());
+
+ sl.write_to_file("xfem_dirichlet.sl", true);
+ sl0.write_to_file("xfem_dirichlet.sl0", true);
+ sll.write_to_file("xfem_dirichlet.sll", true);
+ plain_vector UU(sl.nb_points()), LL(sll.nb_points());
+ sl.interpolate(mf, U, UU);
+ gmm::vecsave("xfem_dirichlet.slU", UU);
+ // gmm::scale(LAMBDA, 0.005);
+ sll.interpolate(mf_mult, LAMBDA, LL);
+ gmm::vecsave("xfem_dirichlet.slL", LL);
+ }
+*/
+ return 0;
+}
diff --git a/contrib/xfem_contact/xfem_stokes.param b/contrib/xfem_contact/xfem_stokes.param
new file mode 100644
index 0000000..0ea3008
--- /dev/null
+++ b/contrib/xfem_contact/xfem_stokes.param
@@ -0,0 +1,76 @@
+% -*- matlab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program xfem_dirichlet %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+NU = 1.0; % Viscosity coefficient.
+
+QUAD = 0;
+N = 2;
+RADIUS = 0.21; % radius of the real circular domain.
+LEVEL_SET_DEGREE = 2; % Degree of the piecewise polynomial.
+ % defining the level set.
+EXACT_SOL = 4; % Which exact solution.
+SIMPLIFY_LEVEL_SET = 0;
+STABILIZED_DIRICHLET = 1; % 0 = no, 1 = Barbosa-Hughes stab, 2 = fully stab.
+MINIMAL_ELT_RATIO = 0.005; % threshold ratio for the fully stab Dirichlet.
+DIRICHLET_GAMMA0 = 0.01; % Barbosa Hughes stabilization parameter
+
+OK = 0;
+
+if (N == 1)
+ MESH_FILE='structured:GT="GT_PK(1,1)";SIZES=[1];NOISED=0;NSUBDIV=[10]';
+ IM = 'IM_GAUSS1D(6)'; % Integration method.
+ IM_SIMPLEX = IM; % Integration method on sub-triangles.
+ FEM = 'FEM_PK(1,1)'; % Finite element method for the unknown.
+ FEM_RHS = FEM; % Finite element method for the rhs
+ FEM_MULT = 'FEM_PK(1,1)'; % Finite element method for multipliers
+ OK = 1;
+end;
+
+if (N == 2 && QUAD)
+ MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[40,40]';
+ IM = 'IM_GAUSS_PARALLELEPIPED(2,6)'; % Integration method.
+ IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),2)'; % Integration method on sub-triangles.
+ FEM = 'FEM_QK(2,2)'; % Finite element method for the velocity u.
+ FEM_RHS = 'FEM_QK(2,2)'; % Finite element method for the rhs
+ FEM_p = 'FEM_QK(2,1)'; % Finite element method for the pressure p.
+% FEM = 'FEM_PRODUCT(FEM_PK_WITH_CUBIC_BUBBLE(1,1), FEM_PK_WITH_CUBIC_BUBBLE(1,1))'; % Finite element method for the unknown.
+ FEM_MULT = 'FEM_QK(2,0)'; % Finite element method for multipliers
+ OK = 1;
+end;
+
+if (N == 2 && ~QUAD)
+ MESH_FILE='structured:GT="GT_PK(2,1)";SIZES=[1,1];NOISED=0;NSUBDIV=[20,20]';
+% IM = 'IM_HCT_COMPOSITE(IM_TRIANGLE(6))';
+ IM = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)'; % Integration method.
+ IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(9),2)';
+ FEM = 'FEM_PK(2,2)'; % Finite element method for the velocity u.
+ FEM_RHS = 'FEM_PK(2,2)'; % Finite element method for the rhs
+ FEM_p = 'FEM_PK(2,1)'; % Finite element method for the pressure p.
+ FEM_MULT = 'FEM_PK(2,1)'; % Finite element method for multipliers
+ OK = 1;
+end;
+
+if (N == 3 && ~QUAD)
+ MESH_FILE='structured:GT="GT_PK(3,1)";SIZES=[1,1,1];NOISED=0;NSUBDIV=[3,3,3]';
+ IM = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)'; % Integration method.
+ IM_SIMPLEX = 'IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(6),1)';
+ FEM = 'FEM_PK(3,2)'; % Finite element method for the unknown.
+ FEM_RHS = FEM; % Finite element method for the rhs
+ FEM_MULT = 'FEM_PK(3,1)'; % Finite element method for multipliers
+ FEM_MULT_DEGREE = 1; % Degree for multipliers definition
+ OK = 1;
+end;
+
+if (~OK)
+ error ('Adapt the parameter file first');
+end;
+
+
+%%%%% saving parameters %%%%%
+ROOTFILENAME = 'xfem_dirichlet'; % Root of data files.
+VTK_EXPORT = 2 % export solution to a .vtk file ?
+
+% FEM = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+% FEM = 'FEM_P1_PIECEWISE_LINEAR_BUBBLE';
\ No newline at end of file
diff --git a/contrib/xfem_large_strain/Makefile.am b/contrib/xfem_large_strain/Makefile.am
index 5e909a3..a299d3d 100644
--- a/contrib/xfem_large_strain/Makefile.am
+++ b/contrib/xfem_large_strain/Makefile.am
@@ -1,11 +1,14 @@
# SUBDIRS =
-check_PROGRAMS = xfem_large_strain linear_incomp_xfem vertex_large_strain
+check_PROGRAMS = xfem_large_strain nonlinear_incomp_xfem vertex_large_strain linear_incomp_xfem
CLEANFILES =
xfem_large_strain_SOURCES = xfem_large_strain.cc
linear_incomp_xfem_SOURCES = linear_incomp_xfem.cc
-vertex_large_strain_SOURCES = vertex_large_strain.cc getfem_nonlinear_elastoptim.h
+nonlinear_incomp_xfem_SOURCES = nonlinear_incomp_xfem.cc
+vertex_large_strain_SOURCES = vertex_large_strain.cc \
+ getfem_nonlinear_elastoptim.h \
+ compressible_getfem_nonlinear_elastoptim.h
SUPLDFLAGS = @SUPLDFLAGS@
INCLUDES = -I$(top_srcdir)/src -I../../src $(MUMPS_CFLAGS)
LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
@@ -13,9 +16,9 @@ LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/xfem_large_strain/xfem_large_strain.pl
EXTRA_DIST = \
xfem_large_strain.pl \
- vertex_large_strain.param \
+ vertex_large_strain.param \
xfem_large_strain.param \
- linear_incomp_xfem.param \
- vertex_large_strain.param
+ nonlinear_incomp_xfem.param \
+ vertex_large_strain.param
TESTS_ENVIRONMENT = perl
diff --git a/contrib/xfem_large_strain/Makefile.in b/contrib/xfem_large_strain/Makefile.in
index 0dbd618..595e6ff 100644
--- a/contrib/xfem_large_strain/Makefile.in
+++ b/contrib/xfem_large_strain/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -36,7 +36,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = xfem_large_strain$(EXEEXT) \
- linear_incomp_xfem$(EXEEXT) vertex_large_strain$(EXEEXT)
+ nonlinear_incomp_xfem$(EXEEXT) vertex_large_strain$(EXEEXT) \
+ linear_incomp_xfem$(EXEEXT)
subdir = contrib/xfem_large_strain
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -59,6 +60,11 @@ linear_incomp_xfem_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
linear_incomp_xfem_DEPENDENCIES = ../../src/libgetfem.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_nonlinear_incomp_xfem_OBJECTS = nonlinear_incomp_xfem.$(OBJEXT)
+nonlinear_incomp_xfem_OBJECTS = $(am_nonlinear_incomp_xfem_OBJECTS)
+nonlinear_incomp_xfem_LDADD = $(LDADD)
+nonlinear_incomp_xfem_DEPENDENCIES = ../../src/libgetfem.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_vertex_large_strain_OBJECTS = vertex_large_strain.$(OBJEXT)
vertex_large_strain_OBJECTS = $(am_vertex_large_strain_OBJECTS)
vertex_large_strain_LDADD = $(LDADD)
@@ -91,9 +97,11 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
-SOURCES = $(linear_incomp_xfem_SOURCES) $(vertex_large_strain_SOURCES) \
- $(xfem_large_strain_SOURCES)
+SOURCES = $(linear_incomp_xfem_SOURCES) \
+ $(nonlinear_incomp_xfem_SOURCES) \
+ $(vertex_large_strain_SOURCES) $(xfem_large_strain_SOURCES)
DIST_SOURCES = $(linear_incomp_xfem_SOURCES) \
+ $(nonlinear_incomp_xfem_SOURCES) \
$(vertex_large_strain_SOURCES) $(xfem_large_strain_SOURCES)
ETAGS = etags
CTAGS = ctags
@@ -124,6 +132,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -142,6 +151,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -158,6 +168,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -222,6 +233,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -257,7 +269,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -280,16 +291,20 @@ top_srcdir = @top_srcdir@
CLEANFILES =
xfem_large_strain_SOURCES = xfem_large_strain.cc
linear_incomp_xfem_SOURCES = linear_incomp_xfem.cc
-vertex_large_strain_SOURCES = vertex_large_strain.cc getfem_nonlinear_elastoptim.h
+nonlinear_incomp_xfem_SOURCES = nonlinear_incomp_xfem.cc
+vertex_large_strain_SOURCES = vertex_large_strain.cc \
+ getfem_nonlinear_elastoptim.h \
+ compressible_getfem_nonlinear_elastoptim.h
+
INCLUDES = -I$(top_srcdir)/src -I../../src $(MUMPS_CFLAGS)
LDADD = ../../src/libgetfem.la -lm $(MUMPS_LIBS) $(SUPLDFLAGS)
TESTS = $(top_srcdir)/contrib/xfem_large_strain/xfem_large_strain.pl
EXTRA_DIST = \
xfem_large_strain.pl \
- vertex_large_strain.param \
+ vertex_large_strain.param \
xfem_large_strain.param \
- linear_incomp_xfem.param \
- vertex_large_strain.param
+ nonlinear_incomp_xfem.param \
+ vertex_large_strain.param
TESTS_ENVIRONMENT = perl
all: all-am
@@ -335,13 +350,16 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-linear_incomp_xfem$(EXEEXT): $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_DEPENDENCIES)
+linear_incomp_xfem$(EXEEXT): $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_DEPENDENCIES) $(EXTRA_linear_incomp_xfem_DEPENDENCIES)
@rm -f linear_incomp_xfem$(EXEEXT)
$(CXXLINK) $(linear_incomp_xfem_OBJECTS) $(linear_incomp_xfem_LDADD) $(LIBS)
-vertex_large_strain$(EXEEXT): $(vertex_large_strain_OBJECTS) $(vertex_large_strain_DEPENDENCIES)
+nonlinear_incomp_xfem$(EXEEXT): $(nonlinear_incomp_xfem_OBJECTS) $(nonlinear_incomp_xfem_DEPENDENCIES) $(EXTRA_nonlinear_incomp_xfem_DEPENDENCIES)
+ @rm -f nonlinear_incomp_xfem$(EXEEXT)
+ $(CXXLINK) $(nonlinear_incomp_xfem_OBJECTS) $(nonlinear_incomp_xfem_LDADD) $(LIBS)
+vertex_large_strain$(EXEEXT): $(vertex_large_strain_OBJECTS) $(vertex_large_strain_DEPENDENCIES) $(EXTRA_vertex_large_strain_DEPENDENCIES)
@rm -f vertex_large_strain$(EXEEXT)
$(CXXLINK) $(vertex_large_strain_OBJECTS) $(vertex_large_strain_LDADD) $(LIBS)
-xfem_large_strain$(EXEEXT): $(xfem_large_strain_OBJECTS) $(xfem_large_strain_DEPENDENCIES)
+xfem_large_strain$(EXEEXT): $(xfem_large_strain_OBJECTS) $(xfem_large_strain_DEPENDENCIES) $(EXTRA_xfem_large_strain_DEPENDENCIES)
@rm -f xfem_large_strain$(EXEEXT)
$(CXXLINK) $(xfem_large_strain_OBJECTS) $(xfem_large_strain_LDADD) $(LIBS)
@@ -352,6 +370,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linear_incomp_xfem.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonlinear_incomp_xfem.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vertex_large_strain.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xfem_large_strain.Po at am__quote@
@@ -515,14 +534,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -572,10 +592,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h b/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h
new file mode 100644
index 0000000..03b2fa2
--- /dev/null
+++ b/contrib/xfem_large_strain/compressible_getfem_nonlinear_elastoptim.h
@@ -0,0 +1,863 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+
+#include "getfem/getfem_modeling.h"
+#include "getfem/getfem_models.h"
+#include "getfem/getfem_assembling_tensors.h"
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_interpolation.h"
+#include "getfem/getfem_assembling.h"
+#include "getfem/getfem_export.h"
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_mesh_fem_level_set.h"
+#include "getfem/getfem_mesh_fem_product.h"
+#include "getfem/getfem_mesh_fem_global_function.h"
+#include "getfem/getfem_spider_fem.h"
+#include "getfem/getfem_mesh_fem_sum.h"
+#include "getfem/getfem_superlu.h"
+#include "gmm/gmm.h"
+#include "gmm/gmm_inoutput.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+namespace getfem {
+
+
+
+ // inline scalar_type mat_euclidean_sp(base_matrix &Sigma, base_matrix &Ealpha) {
+ // return gmm::vect_sp((std::vector<scalar_type> &)Sigma, (std::vector<scalar_type> &)Ealpha);
+ //
+ // }
+
+
+
+
+//=======================================================================
+//= /******************************/ =
+//= compressible /* Term 1 d(L)/d(alpha) */ =
+//= /******************************/ =
+//=======================================================================
+
+
+ template<typename VECT1, typename VECT2>
+ class elasticity_nonlinear_optim_term_compressible1
+ : public getfem::nonlinear_elem_term {
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U, U_ls;
+ const mesh_fem *mf_data;
+ const VECT2 &PARAMS;
+ const getfem::level_set &ls;
+ size_type N, cv_old, NFem;
+ const abstract_hyperelastic_law &AHL;
+ base_vector params, coeff, valP, u_ls;
+ base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur
+ base_tensor tt;
+ bgeot::multi_index sizes_;
+ mesher_level_set mls_x, mls_y;
+ public:
+ elasticity_nonlinear_optim_term_compressible1
+ (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+ const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+ const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_)
+ : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+ mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+ N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+ params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+ gradU(NFem, N), gradU_ls(NFem, N),
+ tt(N, N, N, N), sizes_(NFem, N, NFem, N) {
+ sizes_.resize(1); sizes_[0] = 1;
+ cv_old = size_type(-1);
+ mf_u.extend_vector(U_, U);
+ mf_u.extend_vector(U_ls_, U_ls);
+ if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+ gmm::copy(PARAMS, params);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector (U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+ gmm::mult(gmm::transposed(gradU), gradU, E);
+ gmm::add(gradU, E);
+ gmm::add(gmm::transposed(gradU), E);
+ gmm::scale(E, scalar_type(0.5));
+
+ for (unsigned int alpha = 0; alpha < N; ++alpha)
+ gradU(alpha, alpha)+= scalar_type(1);
+
+ //cout << "------------------------------- " << endl;
+ //cout << "Le Tenseur F :" << gradU <<endl;
+ //cout << "------------------------------- " << endl;
+
+
+ scalar_type J = gmm::lu_det(gradU);
+ // Computation of d/dalpha (grad U)
+
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+ scalar_type x = mls_x(ctx.xref());
+ // cout << "------------------------------- " << endl;
+ // cout << "la valeur (compressible) x :" << x <<endl;
+ // cout << "------------------------------- " << endl;
+ scalar_type y = mls_y(ctx.xref());
+ // cout << "------------------------------- " << endl;
+ // cout << "la valeur (compressible) y :" << y <<endl;
+ // cout << "------------------------------- " << endl;
+ scalar_type r2 = x*x+y*y;
+ //cout << "------------------------------- " << endl;
+ //cout << "la valeur (compressible) r2 :" << r2 <<endl;
+ //cout << "------------------------------- " << endl;
+ gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+
+ ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+ base_vector Runit(2);
+ Runit[0] = x / r2; Runit[1] = y / r2;
+ gmm::rank_one_update(gradU_ls, Runit, u_ls);
+
+
+ // Computation of d(E)/d(alpha)
+
+ base_matrix Ealpha(N, N);
+ gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+ /* cout << "-------------------------------------- " << endl; */
+ /* cout << "Le Tenseur gradU_ls :" << gradU_ls << endl; */
+ /* cout << "-------------------------------------- " << endl; */
+ gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+ gmm::scale(Ealpha, 0.5);
+ //cout << "-------------------------------------- " << endl;
+ //cout << "Le Tenseur d(E)/d(alpha) :" << Ealpha << endl;
+ //cout << "-------------------------------------- " << endl;
+ // The term sigma:dE/dalpha
+ AHL.sigma(E, Sigma, params, J);
+ //cout << "-------------------------------------- " << endl;
+ //cout << " la valeur du tenseur sigma :" << Sigma << endl;
+ //cout << "-------------------------------------- " << endl;
+ t[0] = mat_euclidean_sp(Sigma, Ealpha);
+ // cout << "============================================================================ " << endl;
+ // cout << "The term sigma:dE/dalpha :" << t[0] << endl;
+ // cout << "============================================================================ " << endl;
+
+ }
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+ GMM_ASSERT1(nb != 0, "Oops");
+ /*if (nb == 1) {
+ size_type cv = ctx.convex_num();
+
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+
+ } else*/
+ if (mf_data) {
+ size_type cv = ctx.convex_num();
+ size_type nbp = AHL.nb_params();
+ coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+ for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+ for (size_type k = 0; k < nbp; ++k)
+ coeff[i * nbp + k]
+ = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+ ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+ }
+ }
+
+ };
+
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+/***********************************************************************************************************************/
+
+ //===================================================================
+ //= =
+ //= Compressible Terms of the tangent matrix for optimization =
+ //= =
+ //===================================================================
+
+//==================================================================================
+//= /***********************************************************/ =
+//= /* Term 2 d^2(L)/d(alpha)d(u^h) The part [*]:Grad(v^h) */ = Compressible
+//= /***********************************************************/ =
+//==================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+ class elasticity_nonlinear_optim_term_compressible2
+ : public getfem::nonlinear_elem_term {
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U, U_ls;
+ const mesh_fem *mf_data;
+ const VECT2 &PARAMS;
+ const getfem::level_set &ls;
+ size_type N, cv_old, NFem;
+ const abstract_hyperelastic_law &AHL;
+ base_vector params, coeff, u_ls;
+ base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur
+ base_tensor GSigma;
+ bgeot::multi_index sizes_;
+ mesher_level_set mls_x, mls_y;
+ public:
+ elasticity_nonlinear_optim_term_compressible2
+ (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+ const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+ const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_)
+ : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+ mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+ N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+ params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+ gradU(NFem, N), gradU_ls(NFem, N),
+ GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+ sizes_.resize(2); sizes_[0] = short_type(N); sizes_[1] = short_type(N);
+ cv_old = size_type(-1);
+ mf_u.extend_vector(U_, U);
+ mf_u.extend_vector(U_ls_, U_ls);
+ if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+ gmm::copy(PARAMS, params);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+ // Computation of tensor E
+
+ gmm::mult(gmm::transposed(gradU), gradU, E);
+ gmm::add(gradU, E);
+ gmm::add(gmm::transposed(gradU), E);
+ gmm::scale(E, scalar_type(0.5));
+
+ // Computation of J determinant of tensor F
+
+ for (unsigned int alpha = 0; alpha < N; ++alpha)
+ gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1); // gradU contient le tenseur F
+ scalar_type J = gmm::lu_det(gradU);
+
+
+ // Computation of d(gradU)/d(alpha)
+
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+
+ scalar_type x = mls_x(ctx.xref());
+
+ scalar_type y = mls_y(ctx.xref());
+
+
+ scalar_type r2 = x*x+y*y;
+ gmm::scale(gradU_ls, 0.5*log(r2));
+
+ ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+ base_vector Runit(2);
+ Runit[0] = x / r2; Runit[1] = y / r2;
+ gmm::rank_one_update(gradU_ls, Runit, u_ls); // gradU_ls contain d(gradU)/d(alpha)
+
+ // Computation of d(E)/d(alpha)
+
+ base_matrix Ealpha(N, N), GsEalpha(N, N);
+ gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+ gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+ gmm::scale(Ealpha, 0.5);
+
+ // The term sigma.d(E)/d(alpha)
+ base_matrix eas(N,N);
+ AHL.sigma(E, Sigma, params, J);
+ gmm::mult(Ealpha, Sigma, eas);
+
+ // The term grad_sigma:d(E)/d(alpha)
+ scalar_type temp ;
+ AHL.grad_sigma(E, GSigma, params, J);
+ for (size_type i = 0; i < N; ++i)
+ for (size_type j = 0; j < N; ++j){
+ temp = 0.0;
+ for (size_type k = 0; k < N; ++k)
+ for (size_type l = 0; l < N; ++l) {
+ temp += GSigma(i,j,k,l) * Ealpha(l,k);
+ }
+ GsEalpha(i,j)=temp;
+ }
+
+ // The term F.grad_sigma:d(E)/d(alpha)
+ gmm::mult(gradU, GsEalpha, Sigma);
+ gmm::add(Sigma, eas);// on a plus besoin du contenue de GsEalpha
+
+
+ for (size_type i = 0; i < N; ++i)
+ for (size_type j = 0; j < N; ++j)
+ t(i,j) = eas(i, j);
+ }
+
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+ GMM_ASSERT1(nb != 0, "Oops");
+ if (mf_data) {
+ size_type cv = ctx.convex_num();
+ size_type nbp = AHL.nb_params();
+ coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+ for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+ for (size_type k = 0; k < nbp; ++k)
+ coeff[i * nbp + k]
+ = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+ ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+ }
+ }
+
+ };
+
+
+//==============================================================================================
+//= /***********************************************************************/ =
+//= /* Term 3 d^2(L)/d(alpha)d(u^h) The part [*]:Ln(r).Grad(v^h) */ = Compressible
+//= /***********************************************************************/ =
+//==============================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+ class elasticity_nonlinear_optim_term_compressible3
+ : public getfem::nonlinear_elem_term {
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U, U_ls;
+ const mesh_fem *mf_data;
+ const VECT2 &PARAMS;
+ const getfem::level_set &ls;
+ size_type N, cv_old, NFem;
+ const abstract_hyperelastic_law &AHL;
+ base_vector params, coeff, u_ls;
+ base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur
+ base_tensor GSigma;
+ bgeot::multi_index sizes_;
+ mesher_level_set mls_x, mls_y;
+ public:
+ elasticity_nonlinear_optim_term_compressible3
+ (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+ const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+ const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_)
+ : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+ mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+ N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+ params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+ gradU(NFem, N), gradU_ls(NFem, N),
+ GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+ sizes_.resize(2); sizes_[0] = short_type(N); sizes_[1] = short_type(N);
+ cv_old = size_type(-1);
+ mf_u.extend_vector(U_, U);
+
+ mf_u.extend_vector(U_ls_, U_ls);
+
+ if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+ gmm::copy(PARAMS, params);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+
+ scalar_type x = mls_x(ctx.xref());
+ scalar_type y = mls_y(ctx.xref());
+ scalar_type r2 = x*x+y*y;
+ // Computation of tensor E
+ gmm::mult(gmm::transposed(gradU), gradU, E);
+ gmm::add(gradU, E);
+ gmm::add(gmm::transposed(gradU), E);
+ gmm::scale(E, scalar_type(0.5));
+
+ for (unsigned int alpha = 0; alpha < N; ++alpha)
+ gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1); // GradU contient le tenseur F maintenant
+ scalar_type J = gmm::lu_det(gradU);
+
+ /*****************************/
+ /*****************************/
+
+ // Computation of F.Sigma
+ AHL.sigma(E, Sigma, params, J);
+ base_matrix eas(N,N);
+ gmm::mult(gradU, Sigma, eas);
+ // cout << "Avant multiplication log :" << eas << endl ;
+ // cout << "Valeur du rayon :" << r2 << endl ;
+ // cout << "*****************************************************************\n" ;
+ // cout << "Avant multiplication log" << eas << endl;
+ gmm::scale(eas, 0.5*log(r2));
+ // cout << "Aprés multiplication log" << eas << endl;
+ for (size_type i = 0; i < N; ++i)
+ for (size_type j = 0; j < N; ++j)
+ t(i,j) = eas(i, j);
+ }
+
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+ GMM_ASSERT1(nb != 0, "Oops");
+ if (mf_data) {
+ size_type cv = ctx.convex_num();
+ size_type nbp = AHL.nb_params();
+ coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+ for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+ for (size_type k = 0; k < nbp; ++k)
+ coeff[i * nbp + k]
+ = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+ ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+ }
+ }
+
+ };
+
+
+//============================================================================================================
+//= /*************************************************************************************/ =
+//= /* Term 4 d^2(L)/d(alpha)d(u^h) The part [*]:1/r(cos\theta, sin\theta)(v^h)_ls) */ = Compressible
+//= /*************************************************************************************/ =
+//============================================================================================================
+
+
+ template<typename VECT1, typename VECT2>
+ class elasticity_nonlinear_optim_term_compressible4
+ : public getfem::nonlinear_elem_term {
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U, U_ls;
+ const mesh_fem *mf_data;
+ const VECT2 &PARAMS;
+ const getfem::level_set &ls;
+ size_type N, cv_old, NFem;
+ const abstract_hyperelastic_law &AHL;
+ base_vector params, coeff, u_ls;
+ base_matrix E, Sigma, gradU, gradU_ls, U_ls_theta;// U_ls_theta le terme U_ls multiplier par le vecteur
+ base_tensor GSigma;
+ bgeot::multi_index sizes_;
+ mesher_level_set mls_x, mls_y;
+ public:
+ elasticity_nonlinear_optim_term_compressible4
+ (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+ const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+ const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_)
+ : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+ mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+ N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+ params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+ gradU(NFem, N), gradU_ls(NFem, N),
+ GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+ sizes_.resize(1); sizes_[0] = short_type(N);
+ cv_old = size_type(-1);
+ mf_u.extend_vector(U_, U);
+ mf_u.extend_vector(U_ls_, U_ls);
+ if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+ gmm::copy(PARAMS, params);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+ scalar_type x = mls_x(ctx.xref());
+ scalar_type y = mls_y(ctx.xref());
+ scalar_type r2 = x*x+y*y;
+ // Computation of tensor E
+ gmm::mult(gmm::transposed(gradU), gradU, E);
+ gmm::add(gradU, E);
+ gmm::add(gmm::transposed(gradU), E);
+ gmm::scale(E, scalar_type(0.5));
+
+
+ for (unsigned int alpha = 0; alpha < N; ++alpha)
+ gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1);
+ scalar_type J = gmm::lu_det(gradU);
+
+
+ // Computation of F.Sigma
+ AHL.sigma(E, Sigma, params, J);
+ base_matrix eas(N,N);
+ gmm::mult(gradU, Sigma, eas); // eas contient le tenseur F fois sigma
+ base_small_vector V(2), W(2); V[0] = x; V[1] = y;
+ gmm::mult(gmm::transposed(eas), gmm::scaled(V, 1./r2), W);
+ for (size_type i = 0; i < N; ++i) t[i] = W[i];
+ }
+
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+ GMM_ASSERT1(nb != 0, "Oops");
+ if (mf_data) {
+ size_type cv = ctx.convex_num();
+ size_type nbp = AHL.nb_params();
+ coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+ for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+ for (size_type k = 0; k < nbp; ++k)
+ coeff[i * nbp + k]
+ = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+ ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+ }
+ }
+
+ };
+
+
+//========================================================================================
+//= /*********************************************************/ =
+//= /* Term 5 d^2(L)/d^2(alpha) */ = Compressible
+//= /*********************************************************/ =
+//========================================================================================
+
+ template<typename VECT1, typename VECT2>
+ class elasticity_nonlinear_optim_term_compressible5
+ : public getfem::nonlinear_elem_term {
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U, U_ls;
+ const mesh_fem *mf_data;
+ const VECT2 &PARAMS;
+ const getfem::level_set &ls;
+ size_type N, cv_old, NFem;
+ const abstract_hyperelastic_law &AHL;
+ base_vector params, coeff, u_ls;
+ base_matrix E, Sigma, gradU, gradU_ls, gradU2_ls;
+ // gradU_ls pour contenir du/dalpha et gradU2_ls pour contenir d^2u/dalpha
+ base_tensor GSigma;
+ bgeot::multi_index sizes_;
+ mesher_level_set mls_x, mls_y;
+ public:
+ elasticity_nonlinear_optim_term_compressible5
+ (const mesh_fem &mf_u_, const VECT1 &U_, const VECT1 &U_ls_,
+ const mesh_fem *mf_data_, const VECT2 &PARAMS_,
+ const abstract_hyperelastic_law &AHL_, const getfem::level_set &ls_)
+ : mf_u(mf_u_), U(mf_u_.nb_basic_dof()), U_ls(mf_u_.nb_basic_dof()),
+ mf_data(mf_data_), PARAMS(PARAMS_), ls(ls_),
+ N(mf_u_.linked_mesh().dim()), NFem(mf_u_.get_qdim()), AHL(AHL_),
+ params(AHL_.nb_params()), u_ls(N), E(N, N), Sigma(N, N),
+ gradU(NFem, N), gradU_ls(NFem, N), gradU2_ls(NFem, N),
+ GSigma(N, N, N, N) ,sizes_(NFem, N, NFem, N) {
+ sizes_.resize(1); sizes_[0] = 1;
+ cv_old = size_type(-1);
+ mf_u.extend_vector(U_, U);
+ mf_u.extend_vector(U_ls_, U_ls);
+ if (gmm::vect_size(PARAMS) == AHL_.nb_params())
+ gmm::copy(PARAMS, params);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
+
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+
+ scalar_type x = mls_x(ctx.xref());
+ scalar_type y = mls_y(ctx.xref());
+ scalar_type r2 = x*x+y*y;
+ // Computation of E
+ gmm::mult(gmm::transposed(gradU), gradU, E);
+ gmm::add(gradU, E);
+ gmm::add(gmm::transposed(gradU), E);
+ gmm::scale(E, scalar_type(0.5));
+
+
+ for (unsigned int alpha = 0; alpha < N; ++alpha)
+ gradU(alpha, alpha)=gradU(alpha, alpha)+ scalar_type(1);
+ scalar_type J = gmm::lu_det(gradU);
+
+ // Computation of d(grad U)/d(alpha)
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU2_ls, mf_u.get_qdim());
+ gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+ gmm::scale(gradU2_ls, log(r2) * log(r2) * 0.25);
+ ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
+ base_vector Runit(2),Runitlog(2);
+ Runit[0] = x / r2; Runit[1] = y / r2;
+ Runitlog[0] = (x * log(r2))/ (0.5 * r2); Runitlog[1] = (y * log(r2)) / (0.5 * r2);
+ gmm::rank_one_update(gradU_ls, Runit, u_ls); // gradU_ls contient d(grad U)/d(alpha)
+ gmm::rank_one_update(gradU2_ls, Runitlog, u_ls); // gradU2_ls contient d^2(grad U)/(d(alpha))^2
+
+ // Computation of d(E)/d(alpha)
+
+ base_matrix Ealpha(N, N);
+ gmm::mult(gmm::transposed(gradU_ls), gradU, Sigma);
+ gmm::add(Sigma, gmm::transposed(Sigma), Ealpha);
+ gmm::scale(Ealpha, 0.5);
+
+ // Computation of d2(E)/d2(alpha)
+ base_matrix Ealpha2(N, N);
+ gmm::mult(gmm::transposed(gradU2_ls), gradU, Sigma);
+ gmm::add(Sigma, gmm::transposed(Sigma), Ealpha2);
+ gmm::scale(Ealpha2, 0.5);
+
+ gmm::mult(gmm::transposed(gradU_ls), gradU_ls, Sigma);
+ gmm::add(Sigma, Ealpha2);
+
+ // Computation of Sigma:d^2(E)/d^2(alpha)
+ AHL.sigma(E, Sigma, params, J);
+ t[0]=mat_euclidean_sp(Sigma, Ealpha2);
+
+ // Computation of grad_Sigma:d(E)/d(alpha)
+ // scalar_type temp ;
+ AHL.grad_sigma(E, GSigma, params, J);
+ for (size_type i = 0; i < N; ++i)
+ for (size_type j = 0; j < N; ++j)
+ for (size_type k = 0; k < N; ++k)
+ for (size_type l = 0; l < N; ++l)
+ t[0] += GSigma(i,j,k,l) * Ealpha(l,k) * Ealpha(i,j);
+
+
+ }
+
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
+ GMM_ASSERT1(nb != 0, "Oops");
+
+ if (mf_data) {
+ size_type cv = ctx.convex_num();
+ size_type nbp = AHL.nb_params();
+ coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
+ for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
+ for (size_type k = 0; k < nbp; ++k)
+ coeff[i * nbp + k]
+ = PARAMS[mf_data->ind_basic_dof_of_element(cv)[i]*nbp+k];
+ ctx.pf()->interpolation(ctx, coeff, params, dim_type(nbp));
+ }
+ }
+
+ };
+
+
+
+
+ /********************************************************************************************************************/
+ /********************************************************************************************************************/
+ /********************************************************************************************************************/
+ /********************************************************************************************************************/
+ /********************************************************************************************************************/
+ /********************************************************************************************************************/
+
+
+
+ //=========================================================================
+ //
+ // Nonlinear elasticity Brick Compressible
+ //
+ //=========================================================================
+
+
+ //=========================================================================
+ //
+ // Assembling the tangent of the additional term Compressible
+ //
+ //=========================================================================
+
+
+template<typename VECT0, typename VECT1, typename VECT2>
+
+ void asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_u
+ (const VECT0 &V_, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT2 &U_ls,
+ dal::bit_vector &u_enriched_dof, const VECT2 &/*alpha*/,
+ const getfem::mesh_fem *mf_data, const VECT2 &PARAMS,
+ const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+ const mesh_region &rg = mesh_region::all_convexes()) {
+ VECT0 &V = const_cast<VECT0 &>(V_);
+ GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+ "wrong qdim for the mesh_fem");
+
+ elasticity_nonlinear_optim_term_compressible2 <VECT1, VECT2>
+ nterm1(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+ elasticity_nonlinear_optim_term_compressible3 <VECT1, VECT2>
+ nterm2(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+ elasticity_nonlinear_optim_term_compressible4 <VECT1, VECT2>
+ nterm3(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+
+ gmm::clear(V);
+
+ getfem::generic_assembly assem2;
+ if (mf_data)
+ assem2.set("V(#1)+=comp(NonLin$1(#1,#2)(i,j).vGrad(#1)(:,i,j));"
+ "V(#1)+=comp(NonLin$2(#1,#2)(i).vBase(#1)(:,i))");
+ else
+ assem2.set("V(#1)+=comp(NonLin$1(#1)(i,j).vGrad(#1)(:,i,j));"
+ "V(#1)+=comp(NonLin$2(#1)(i).vBase(#1)(:,i))");
+ assem2.push_mi(mim);
+ assem2.push_mf(mf_u);
+ if (mf_data) assem2.push_mf(*mf_data);
+ assem2.push_nonlinear_term(&nterm2);
+ assem2.push_nonlinear_term(&nterm3);
+ assem2.push_vec(V);
+ assem2.assembly(rg);
+
+ for (size_type i = 0; i < mf_u.nb_dof(); ++i)
+ if (!(u_enriched_dof.is_in(i))) V[i] = 0.0;
+
+ getfem::generic_assembly assem1;
+
+ if (mf_data)
+ assem1.set("V(#1)+=comp(NonLin(#1,#2)(i,j).vGrad(#1)(:,i,j))");
+ else
+ assem1.set("V(#1)+=comp(NonLin(#1)(i,j).vGrad(#1)(:,i,j))");
+ assem1.push_mi(mim);
+ assem1.push_mf(mf_u);
+ if (mf_data) assem1.push_mf(*mf_data);
+ assem1.push_nonlinear_term(&nterm1);
+ assem1.push_vec(V);
+ assem1.assembly(rg);
+
+ }
+
+
+
+
+
+ template<typename VECT1, typename VECT2>
+ scalar_type asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_alpha
+ (const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT2 &U_ls,
+ dal::bit_vector &/*u_enriched_dof*/, const VECT2 &/*alpha*/,
+ const getfem::mesh_fem *mf_data, const VECT2 &PARAMS,
+ const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+ const mesh_region &rg = mesh_region::all_convexes()) {
+ std::vector<scalar_type> V(1);
+ GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+ "wrong qdim for the mesh_fem");
+
+ elasticity_nonlinear_optim_term_compressible5<VECT1, VECT2>
+ nterm1(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+
+ getfem::generic_assembly assem1;
+
+ if (mf_data)
+ assem1.set("V()+=comp(NonLin(#1,#2))(1)");
+ else
+ assem1.set("V()+=comp(NonLin(#1))(1)");
+ assem1.push_mi(mim);
+ assem1.push_mf(mf_u);
+ if (mf_data) assem1.push_mf(*mf_data);
+ assem1.push_nonlinear_term(&nterm1);
+ assem1.push_vec(V);
+ assem1.assembly(rg);
+ return V[0];
+ }
+
+
+ //=========================================================================
+ //=========================================================================
+ //== Assembling the right hand side of the additional term == Compressible
+ //=========================================================================
+ //=========================================================================
+
+
+ template<typename VECT1, typename VECT2, typename VECT3>
+ void asm_nonlinear_elasticity_optim_compressible_rhs
+ (const VECT1 &R1_, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U, const VECT3 &U_ls,
+ dal::bit_vector &/*u_enriched_dof*/,
+ const VECT2 &/*alpha*/, const getfem::mesh_fem *mf_data, const VECT3 &PARAMS,
+ const abstract_hyperelastic_law &AHL, const getfem::level_set &ls,
+ const mesh_region &rg = mesh_region::all_convexes()) {
+ VECT1 &R1 = const_cast<VECT1 &>(R1_);
+ GMM_ASSERT1(mf_u.get_qdim() >= mf_u.linked_mesh().dim(),
+ "wrong qdim for the mesh_fem");
+
+
+ GMM_ASSERT1(!mf_u.is_reduced(), "Do not work for reduced fems");
+
+
+
+ {
+ elasticity_nonlinear_optim_term_compressible1<VECT2, VECT3>
+ nterm(mf_u, U, U_ls, mf_data, PARAMS, AHL, ls);
+
+ getfem::generic_assembly assem;
+ if (mf_data)
+ assem.set("t=comp(NonLin(#1,#2))); V() += t(i)");
+ else
+ assem.set("t=comp(NonLin(#1)); V() += t(i)");
+ // comp() to be optimized ?
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ if (mf_data) assem.push_mf(*mf_data);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(R1);
+ assem.assembly(rg);
+
+ }
+
+
+ }
+
+
+
+} /* end of namespace getfem. */
+
diff --git a/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h b/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
index 0d2cf92..3dd7ffa 100644
--- a/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
+++ b/contrib/xfem_large_strain/getfem_nonlinear_elastoptim.h
@@ -1,23 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#include "getfem/getfem_modeling.h"
@@ -112,8 +122,9 @@ namespace getfem {
gradU(alpha, alpha)+= scalar_type(1);
scalar_type J = gmm::lu_det(gradU);
-
+
t[0] = (J - scalar_type(1)) * valP[0];
+
}
virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
GMM_ASSERT1(nb != 0, "Oops");
@@ -122,10 +133,12 @@ namespace getfem {
valP.resize(1);
size_type cv = ctx.convex_num();
coeff.resize(mf_p.nb_basic_dof_of_element(cv));
- gmm::copy(gmm::sub_vector
- (P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
+
+ gmm::copy(gmm::sub_vector (P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
+ // cout<< "La valeur du vecteur P_ls :" << P_ls << endl;
+
ctx.pf()->interpolation(ctx, coeff, valP, 1);
-
+ // cout<<"Le terme RHS dL/dBeta valeur de valP[0] apres ctx.pf()->interpolation :" << valP << endl;
if (cv != cv_old) {
mls_x = ls.mls_of_convex(cv, 1);
@@ -133,9 +146,20 @@ namespace getfem {
cv_old = cv;
}
scalar_type x = mls_x(ctx.xref());
+ // cout<<" "<<endl;
+ // cout<<"Le terme RHS dL/dBeta valeur de x :"<< x << endl;
scalar_type y = mls_y(ctx.xref());
+ // cout<<" "<<endl;
+ // cout<<"Le terme RHS dL/dBeta valeur de y :"<< y << endl;
+ // cout<<" "<<endl;
+ // cout<<"Le terme RHS dL/dBeta valeur de log(x*x+y*y) :" << log(x*x+y*y) << endl;
+ // cout<<"Le terme RHS dL/dBeta valeur de log(x*x+y*y)/2 :" << log(x*x+y*y)/ scalar_type(2) << endl;
+ // cout<<"Le terme RHS dL/dBeta valeur de valP[0] dans prepare :" << valP[0] << endl;
valP[0] *= log(x*x+y*y) / scalar_type(2);
+ //cout<<"Le terme RHS dL/dBeta valeur de valP[0] dans prepare :" << valP[0] << endl;
+
+
} else if (mf_data) {
size_type cv = ctx.convex_num();
size_type nbp = AHL.nb_params();
@@ -207,7 +231,6 @@ namespace getfem {
(U, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
ctx.pf()->interpolation_grad(ctx, coeff, gradU, mf_u.get_qdim());
-
gmm::mult(gmm::transposed(gradU), gradU, E);
gmm::add(gradU, E);
gmm::add(gmm::transposed(gradU), E);
@@ -227,9 +250,18 @@ namespace getfem {
(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
scalar_type x = mls_x(ctx.xref());
+ cout << "------------------------------- " << endl;
+ cout << "la valeur (incompressible) x :" << x <<endl;
+ cout << "------------------------------- " << endl;
scalar_type y = mls_y(ctx.xref());
+ cout << "------------------------------- " << endl;
+ cout << "la valeur (incompressible) y :" << y <<endl;
+ cout << "------------------------------- " << endl;
scalar_type r2 = x*x+y*y;
- gmm::scale(gradU_ls, log(r2) / scalar_type(2));
+ cout << "------------------------------- " << endl;
+ cout << "le rayon (incompressible) r2 :" << r2 <<endl;
+ cout << "------------------------------- " << endl;
+ gmm::scale(gradU_ls, log(r2)/scalar_type(2));
ctx.pf()->interpolation(ctx, coeff, u_ls, mf_u.get_qdim());
base_vector Runit(2);
@@ -244,7 +276,7 @@ namespace getfem {
gmm::scale(Ealpha, 0.5);
// The term sigma:dE/dalpha
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, J);
t[0] = mat_euclidean_sp(Sigma, Ealpha);
// The term pJF^{-T}:dgradu/dalpha
@@ -366,6 +398,7 @@ namespace getfem {
gmm::copy(gmm::sub_vector
(U_ls, gmm::sub_index(mf_u.ind_basic_dof_of_element(cv))), coeff);
ctx.pf()->interpolation_grad(ctx, coeff, gradU_ls, mf_u.get_qdim());
+
scalar_type x = mls_x(ctx.xref());
scalar_type y = mls_y(ctx.xref());
scalar_type r2 = x*x+y*y;
@@ -385,12 +418,12 @@ namespace getfem {
// The term sigma.d(E)/d(alpha)
base_matrix eas(N,N);
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, J);
gmm::mult(Ealpha, Sigma, eas);
// The term grad_sigma:d(E)/d(alpha)
scalar_type temp ;
- AHL.grad_sigma(E, GSigma, params);
+ AHL.grad_sigma(E, GSigma, params, J);
for (size_type i = 0; i < N; ++i)
for (size_type j = 0; j < N; ++j){
temp = 0.0;
@@ -422,23 +455,24 @@ namespace getfem {
virtual void prepare(fem_interpolation_context& ctx, size_type nb) {
GMM_ASSERT1(nb != 0, "Oops");
- if (nb == 1) {
- size_type cv = ctx.convex_num();
+
+ size_type cv = ctx.convex_num();
+ if (cv != cv_old) {
+ mls_x = ls.mls_of_convex(cv, 1);
+ mls_y = ls.mls_of_convex(cv, 0);
+ cv_old = cv;
+ }
+ if (nb == 1) {
valP.resize(1);
coeff.resize(mf_p.nb_basic_dof_of_element(cv));
gmm::copy(gmm::sub_vector
(P_ls, gmm::sub_index(mf_p.ind_basic_dof_of_element(cv))), coeff);
ctx.pf()->interpolation(ctx, coeff, valP, 1);
- if (cv != cv_old) {
- mls_x = ls.mls_of_convex(cv, 1);
- mls_y = ls.mls_of_convex(cv, 0);
- cv_old = cv;
- }
-
} else if (mf_data) {
- size_type cv = ctx.convex_num();
+
+ // size_type cv = ctx.convex_num();
size_type nbp = AHL.nb_params();
coeff.resize(mf_data->nb_basic_dof_of_element(cv)*nbp);
for (size_type i = 0; i < mf_data->nb_basic_dof_of_element(cv); ++i)
@@ -524,13 +558,14 @@ namespace getfem {
// Computation of F.Sigma
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, J);
base_matrix eas(N,N);
gmm::mult(gradU, Sigma, eas);
// Computation of p.J.F^{-T}
gmm::lu_inverse(gradU);
- gmm::add(gmm::scaled(gmm::transposed(gradU), valP[0] * J), eas);
- gmm::scale(eas, log(r2)*0.5);
+ gmm::add(gmm::scaled(gmm::transposed(gradU), valP[0] * J), eas);
+ gmm::scale(eas, 0.5*log(r2));
+
for (size_type i = 0; i < N; ++i)
for (size_type j = 0; j < N; ++j)
t(i,j) = eas(i, j);
@@ -640,7 +675,7 @@ namespace getfem {
// Computation of F.Sigma
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, J);
base_matrix eas(N,N);
gmm::mult(gradU, Sigma, eas);
// Computation of p.J.F^{-T}
@@ -785,12 +820,12 @@ namespace getfem {
gmm::add(Sigma, Ealpha2);
// Computation of Sigma:d^2(E)/d^2(alpha)
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, J);
t[0]=mat_euclidean_sp(Sigma, Ealpha2);
// Computation of grad_Sigma:d(E)/d(alpha)
scalar_type temp ;
- AHL.grad_sigma(E, GSigma, params);
+ AHL.grad_sigma(E, GSigma, params, J);
for (size_type i = 0; i < N; ++i)
for (size_type j = 0; j < N; ++j)
for (size_type k = 0; k < N; ++k)
diff --git a/contrib/xfem_large_strain/linear_incomp_xfem.cc b/contrib/xfem_large_strain/linear_incomp_xfem.cc
index c0ab06c..ec91e38 100644
--- a/contrib/xfem_large_strain/linear_incomp_xfem.cc
+++ b/contrib/xfem_large_strain/linear_incomp_xfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -40,6 +40,10 @@
#include "gmm/gmm.h"
#include "gmm/gmm_inoutput.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -342,10 +346,10 @@ void crack_problem::init(void) {
}
-base_small_vector ls_function(const base_node P, int num = 0) {
- scalar_type x = P[0], y = P[1], x0=0, y0=0, phi, ll;
+base_small_vector ls_function(const base_node P, int num = 1) {
+ scalar_type x = P[0], y = P[1], x0=0., y0=0.025, phi, ll;
base_small_vector res(2), cracktip(2), t(2), xx(2);
- cracktip[0]=0.5; cracktip[1]= 0.;
+ cracktip[0]=0.5; cracktip[1]= 0.025;
switch (num) {
case 0: {
@@ -360,8 +364,8 @@ base_small_vector ls_function(const base_node P, int num = 0) {
} break;
case 1: {
- res[0] = y;
- res[1] = -0.5 + x;
+ res[0] = y - cracktip[1];
+ res[1] = x- cracktip[0];
} break;
case 2: {
res[0] = x - 0.25;
@@ -445,8 +449,8 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
ls.reinit();
for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
- ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
- ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+ ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d))[0];
+ ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d))[1];
}
ls.touch();
diff --git a/contrib/xfem_large_strain/linear_incomp_xfem.param b/contrib/xfem_large_strain/linear_incomp_xfem.param
deleted file mode 100644
index 7a561de..0000000
--- a/contrib/xfem_large_strain/linear_incomp_xfem.param
+++ /dev/null
@@ -1,94 +0,0 @@
-%-*- mat-lab -*- (enables emacs matlab mode)
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% parameters for program crack %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-MU = 10.0; % Lam%G�%@ coefficient.
-dgr = 1; % degree of enrichment in u
-dgrp = 1; % degree of enrichment in p
-
-QUAD = 0;
-
-BIMATERIAL = 0; % 1 : To enable the bimaterial case
-
-if BIMATERIAL
- MU_UP = 10.0;
- MU_DOWN = 1.0;
-end
-
-REFINEMENT_RADIUS = 0.; % REF: 0.4; % 0 for no refinement
-REFINEMENT_PROCESS = 0; % nb of desired refinement steps
-
-REFERENCE_TEST =0 ; % 1 to compute a reference solution exported into files
-ERROR_TO_REF_SOL =1; % 1 to compute errors wrt the reference solution
-INF_SUP_COMP = 1; % Compute or not the inf_sup condition
-
-%%%%% discretisation parameters : %%%%%
-
-NX =10; % space step.
-MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
-
-
-if (~QUAD)
- MESH_TYPE = 'GT_PK(2,1)'; % linear triangles
- FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
- %FEM_TYPE = 'FEM_PK(2,2);
- %FEM_TYPE = 'FEM_PK(2,1)'; % PK element %REF: P3
- DATA_FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
- INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
- FEM_TYPE_P = 'FEM_PK(2,1)';
- MORTAR_FEM_TYPE = FEM_TYPE;
-else
- % MESH_TYPE = 'GT_LINEAR_QK(2)';
- MESH_TYPE = 'GT_QK(2, 1)';
- FEM_TYPE = 'FEM_QK(2,1)'; % Q1 fem for quadrangles
- DATA_FEM_TYPE = 'FEM_QK(2,1)';
- INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
- FEM_TYPE_P = 'FEM_QK(2,1)';
- MORTAR_FEM_TYPE = FEM_TYPE;
-end;
-
-FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,4,0.0001)'; % Discontinuous P1 for triangles
-
-MIXED_PRESSURE=1; % Mixed version or not.
-DIRICHLET_VERSION = 0; % 0 = multipliers, 1 = penalization, 2 = elimination
-
-% integration meth. for sub-simplexe of elements crossed by the level-set
-SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
-
-% integration meth. for quasi-polar integration of sub-simplexes
-% adjascent to the level-set
-% (comment it to disable quasipolar integration). Should be a
-% method defined on a square for 2D, or defined on a prism for 3D.
-% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
-SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
-
-% Enable the following 2 lines to use the precomputed solution as enrichement
-% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
-% GLOBAL_FUNCTION_U = "bimaterial_crack12.U"
-
-
-ENRICHMENT_OPTION = 2 ; % 0 = Pas d'enrichissement
- % 1 = standard XFEM on a fixed zone
- % 2 = global functions with cutoff
-
-
-
-RADIUS_ENR_AREA = 0.2; % For XFEM
-
-CUTOFF_FUNC = 3; % 0 for the exponential cutoff.
- % 1 for a 3rd degree polynomial cutoff
- % 2 for a 5th degree polynomial cutoff
-CUTOFF = 0.2;
-CUTOFF1 = 0.01;
-CUTOFF0 = 0.49;
-
-
-
-RESIDUAL = 1E-9; % residual for iterative methods if any.
-
-%%%%% saving parameters %%%%%
-ROOTFILENAME = 'linear_incomp_xfem'; % Root of data files.
-VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
-
diff --git a/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc b/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc
new file mode 100644
index 0000000..1b409fb
--- /dev/null
+++ b/contrib/xfem_large_strain/nonlinear_incomp_xfem.cc
@@ -0,0 +1,1402 @@
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ Nonlinear elastostatic crack problem
+ This is an example of use of Getfem++.
+*/
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_nonlinear_elasticity.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_mesh_fem_level_set.h"
+#include "getfem/getfem_mesh_fem_product.h"
+#include "getfem/getfem_mesh_fem_global_function.h"
+#include "getfem/getfem_spider_fem.h"
+#include "getfem/getfem_mesh_fem_sum.h"
+#include "getfem/getfem_superlu.h"
+#include "getfem_nonlinear_elastoptim.h" /*Optimization procedure to evaluate the order of singularities*/
+#include "gmm/gmm.h"
+#include "gmm/gmm_inoutput.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::base_vector;
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type; /* = unsigned long */
+using bgeot::dim_type;
+using bgeot::short_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+/**************************************************************************/
+/* */
+/* Enrichment. */
+/* */
+/**************************************************************************/
+
+scalar_type alpha_md = 0.5;
+scalar_type beta_md = 0.5;
+
+struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
+ int n;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ generic_u_singular_xy_function(int n_) : n(n_) {}
+ };
+
+
+scalar_type
+generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+
+ if (n <= 0)
+ return pow(r, alpha_md-n) * cos(scalar_type(n) * theta * 0.5);
+ else
+ return pow(r, alpha_md+n) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+ scalar_type theta = atan2(y,x);
+ base_small_vector res(2);
+ scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+ scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+ if (n <= 0) {
+ res[0] = alpha_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+ res[1] = alpha_md * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+ } else {
+ res[0] = alpha_md * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+ res[1] = alpha_md * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+ }
+
+ gmm::scale(res, pow(r, alpha_md - 2));
+ return res;
+}
+
+
+base_matrix generic_u_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+struct generic_p_singular_xy_function : public getfem::abstract_xy_function {
+ int n;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ generic_p_singular_xy_function(int n_) : n(n_) {}
+};
+
+scalar_type
+generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+
+ if (n <= 0)
+ return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
+ else
+ return pow(r, beta_md) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+ scalar_type theta = atan2(y, x);
+ base_small_vector res(2);
+ scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+ scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+ if (n <= 0) {
+ res[0] = beta_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+ res[1] = beta_md * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+ } else {
+ res[0] = beta_md * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+ res[1] = beta_md * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+ }
+
+ gmm::scale(res, pow(r, beta_md - 2));
+ return res;
+}
+
+
+base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*///////////////////////////////////////////////////////////
+// //
+// Singular functions for crack problem from Stephenson article //
+// //
+///////////*/*/*/*///////////////////////////////////////////////////////////
+
+struct steph_u_singular_xy_function : public getfem::abstract_xy_function {
+ unsigned l;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ steph_u_singular_xy_function(unsigned l_) : l(l_) {}
+ };
+
+
+scalar_type steph_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+ scalar_type res = 0;
+ switch(l){
+ case 0 : res = r*sin(theta*0.5)*sin(theta*0.5) ; break;
+ case 1 : res = sqrt(r)*sin(theta*0.5) ; break;
+ default: GMM_ASSERT2(false, "arg");
+ }
+ return res;
+}
+
+
+base_small_vector steph_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+
+ scalar_type theta = atan2(y, x);
+ base_small_vector res(2);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+
+ switch(l){
+ case 0 :
+ res[0] = sin(theta*0.5)*sin(theta*0.5);
+ res[1] = sin(theta*0.5)*cos(theta*0.5);
+ break;
+ case 1 :
+ res[0] = (-1/sqrt(r))*0.5*sin(theta*0.5) ;
+ res[1] = 0.5*sqrt(r)*sin(theta*0.5);
+ break;
+
+ default: GMM_ASSERT2(false, "arg");
+ }
+
+ return res;
+}
+
+
+base_matrix steph_u_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+
+/*
+ structure for the elastostatic problem
+*/
+struct cr_nl_elastostatic_problem {
+
+ enum { BOUNDARY_NUM0 = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2 = 2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, PART_CAL_ERROR = 5,DIRICHLET_BOUND=6, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+ getfem::mesh mesh; /* the mesh */
+ getfem::level_set ls; /* The two level sets defining the crack. */
+ getfem::mesh_level_set mls; /* the integration methods for cutted element. */
+ getfem::mesh_im_level_set mim;
+ getfem::mesh_fem mf_pre_u, mf_pre_mortar;
+ getfem::mesh_fem mf_mult, mf_mult_p;
+
+ getfem::mesh_fem_level_set mfls_u,mfls_mortar;
+ getfem::mesh_fem_global_function mf_sing_u;
+
+ getfem::mesh_fem mf_partition_of_unity;
+ getfem::mesh_fem_product mf_product;
+ getfem::mesh_fem_sum mf_u_sum/*, mf_u_sumCE*/;
+
+ getfem::mesh_fem mf_pre_p; /* mesh_fem for the pressure for mixed form */
+ getfem::mesh_fem_level_set mfls_p; /* mesh_fem for the pressure enriched with H. */
+ getfem::mesh_fem_global_function mf_sing_p;
+ getfem::mesh_fem_product mf_product_p;
+ getfem::mesh_fem_sum mf_p_sum /*, mf_p_sumCE*/;
+
+ base_small_vector cracktip;
+
+ scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step;
+
+
+
+ struct spider_param {
+ getfem::spider_fem *fem;
+ scalar_type theta0;
+ scalar_type radius;
+ unsigned Nr;
+ unsigned Ntheta;
+ int K;
+ int bimat_enrichment;
+ scalar_type epsilon;
+ };
+
+ spider_param spider;
+
+
+ getfem::mesh_fem mf_us;
+ getfem::mesh_fem& mf_u() { return mf_u_sum; }
+ getfem::mesh_fem& mf_pe() { return mf_p_sum; }
+ getfem::mesh_fem mf_rhs;
+
+
+ scalar_type residual; /* max residual for the iterative solvers */
+ bool mixed_pressure;
+ //bool sing_search;
+ unsigned dir_with_mult;
+ scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
+ size_type cutoff_func;
+
+ typedef enum { NO_ENRICHMENT=0,
+ FIXED_ZONE=1,
+ GLOBAL_WITH_MORTAR=2,
+ GLOBAL_WITH_CUTOFF=3,
+ SPIDER_FEM_ALONE=4,
+ SPIDER_FEM_ENRICHMENT=5 } enrichment_option_enum;
+ enrichment_option_enum enrichment_option;
+
+ std::string datafilename;
+
+ int reference_test;
+ std::string GLOBAL_FUNCTION_MF, GLOBAL_FUNCTION_U, GLOBAL_FUNCTION_P;
+
+ bgeot::md_param PARAM;
+
+ bool solve(plain_vector &U, plain_vector &P);
+ void init(void);
+ cr_nl_elastostatic_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls),
+ mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
+ mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),
+ mf_sing_u(mesh),
+ mf_partition_of_unity(mesh),
+ mf_product(mf_partition_of_unity, mf_sing_u),
+ mf_u_sum(mesh),
+ mf_pre_p(mesh), mfls_p(mls, mf_pre_p),
+ mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p),
+ mf_p_sum(mesh),
+ mf_us(mesh), mf_rhs(mesh) {}
+};
+
+std::string name_of_dof(getfem::pdof_description dof) {
+ char s[200];
+ sprintf(s, "UnknownDof[%p]", (void*)dof);
+ for (dim_type d = 0; d < 4; ++d) {
+ if (dof == getfem::lagrange_dof(d)) {
+ sprintf(s, "Lagrange[%d]", d); goto found;
+ }
+ if (dof == getfem::normal_derivative_dof(d)) {
+ sprintf(s, "D_n[%d]", d); goto found;
+ }
+ if (dof == getfem::global_dof(d)) {
+ sprintf(s, "GlobalDof[%d]", d);
+ }
+ if (dof == getfem::mean_value_dof(d)) {
+ sprintf(s, "MeanValue[%d]", d);
+ }
+ if (getfem::dof_xfem_index(dof) != 0) {
+ sprintf(s, "Xfem[idx:%d]", int(dof_xfem_index(dof)));
+ }
+
+ for (dim_type r = 0; r < d; ++r) {
+ if (dof == getfem::derivative_dof(d, r)) {
+ sprintf(s, "D_%c[%d]", "xyzuvw"[r], d); goto found;
+ }
+ for (dim_type t = 0; t < d; ++t) {
+ if (dof == getfem::second_derivative_dof(d, r, t)) {
+ sprintf(s, "D2%c%c[%d]", "xyzuvw"[r], "xyzuvw"[t], d);
+ goto found;
+ }
+ }
+ }
+ }
+ found:
+ return s;
+}
+
+
+
+
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ and integration methods and selects the boundaries.
+
+ (this is boilerplate code, not very interesting)
+ */
+void cr_nl_elastostatic_problem::init(void) {
+
+ std::string MESH_TYPE = PARAM.string_value("MESH_TYPE", "Mesh type");
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE", "FEM name");
+ std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P", "FEM name for the pressure");
+ std::string INTEGRATION = PARAM.string_value("INTEGRATION", "Name of integration method");
+ std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION", "Name of simplex integration method");
+ std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION", "Singular integration");
+ enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION", "Enrichment option"));
+ /* Lecture des parametres */
+ pr1 = PARAM.real_value("P1", "First Elastic coefficient");
+ pr2 = PARAM.real_value("P2", "Second Elastic coefficient");
+ pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
+ AMP_LOAD_X = PARAM.real_value("AMP_LOAD_X", "Amp load x");
+ AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
+ nb_step = PARAM.real_value("nb_step", "nb_step");
+ reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+ residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+ /* Affichage */
+
+ cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "FEM_TYPE_P =" << FEM_TYPE_P <<"\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
+ cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
+ cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
+ cout << "Reference_test " << AMP_LOAD_Y << "\n";
+
+ /* First step : build the mesh */
+
+ bgeot::pgeometric_trans pgt = bgeot::geometric_trans_descriptor(MESH_TYPE);
+ size_type N = pgt->dim();
+ std::vector<size_type> nsubdiv(N);
+
+ long int NX_aff = PARAM.int_value("NX", "Nomber of space steps ");
+ std::fill(nsubdiv.begin(),nsubdiv.end(),NX_aff);
+ cout << "Number of space step NX= " << NX_aff << "\n";
+
+ getfem::regular_unit_mesh(mesh, nsubdiv, pgt, PARAM.int_value("MESH_NOISED") != 0);
+
+ base_small_vector tt(N); tt[1] = -0.5;
+ mesh.translation(tt);
+
+ cracktip.resize(2); // Coordonnee du fond de fissure
+ cracktip[0] = 0.5;
+ cracktip[1] = 0.;
+ scalar_type refinement_radius;
+ refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
+ cout << "refinement_radius= " << refinement_radius << "\n";
+ size_type refinement_process;
+ refinement_process = PARAM.int_value("REFINEMENT_PROCESS", "Refinement process");
+ cout << "refinement_process= " << refinement_process << "\n";
+
+ if (refinement_radius > 0) {
+ for (size_type ref = 0; ref < refinement_process; ++ref){
+ dal::bit_vector conv_to_refine;
+ for(dal::bv_visitor i(mesh.convex_index()); !i.finished(); ++i){
+ for(size_type j=0; j < 3; ++j)
+ if(gmm::vect_dist2(mesh.points_of_convex(i)[j],cracktip)
+ < refinement_radius )
+ conv_to_refine.add(i);
+ }
+ mesh.Bank_refine(conv_to_refine);
+
+ refinement_radius = refinement_radius/3.;
+ cout <<"refining process step " << ref << " ... refining "
+ << conv_to_refine.size() <<" convexes..." << endl;
+ }
+ cout << "refinement process completed." << endl ;
+ }
+
+ mesh.write_to_file("le_maillage.mesh");
+ if (residual == 0.) residual = 1e-10;
+ enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
+ "radius of the enrichment area");
+
+ GLOBAL_FUNCTION_MF = PARAM.string_value("GLOBAL_FUNCTION_MF");
+ GLOBAL_FUNCTION_U = PARAM.string_value("GLOBAL_FUNCTION_U");
+ GLOBAL_FUNCTION_P = PARAM.string_value("GLOBAL_FUNCTION_P");
+ cutoff_func = PARAM.int_value("CUTOFF_FUNC", "cutoff function");
+ cutoff_radius = PARAM.real_value("CUTOFF", "Cutoff");
+ cutoff_radius1 = PARAM.real_value("CUTOFF1", "Cutoff1");
+ cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0");
+ mf_u().set_qdim(dim_type(N));
+
+ /* set the finite element on the mf_u */
+ getfem::pfem pf_u =
+ getfem::fem_descriptor(FEM_TYPE);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor(INTEGRATION);
+
+ /* set the finite element and integration method on the singular mesh */
+
+ getfem::pintegration_method simp_ppi =
+ getfem::int_method_descriptor(SIMPLEX_INTEGRATION);
+ getfem::pintegration_method sing_ppi = (SINGULAR_INTEGRATION.size() ?
+ getfem::int_method_descriptor(SINGULAR_INTEGRATION) : 0);
+
+ mim.set_integration_method(mesh.convex_index(), ppi);
+ mls.add_level_set(ls);
+
+ mim.set_simplex_im(simp_ppi, sing_ppi);
+ mf_pre_u.set_finite_element(mesh.convex_index(), pf_u);
+ mf_pre_mortar.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(PARAM.string_value("MORTAR_FEM_TYPE")));
+ mf_mult.set_finite_element(mesh.convex_index(), pf_u);
+ mf_mult.set_qdim(dim_type(N));
+ mf_partition_of_unity.set_classical_finite_element(1);
+
+ mixed_pressure = (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
+ //sing_search = (PARAM.int_value("SINGULAR_SEARCH","Singular search or not.") != 0);
+ dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION", "Version of Dirichlet"));
+
+ if (mixed_pressure) {
+ getfem::pfem pf_p =
+ getfem::fem_descriptor(FEM_TYPE_P);
+ mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
+ mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
+
+ }
+
+
+
+
+ /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
+ not used in the .param file */
+ std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+ if (data_fem_name.size() == 0) {
+ GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+ ". In that case you need to set "
+ << "DATA_FEM_TYPE in the .param file");
+ mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+ } else {
+ mf_rhs.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(data_fem_name));
+ }
+
+ /* set the finite element on mf_coef. Here we use a very simple element
+ * since the only function that need to be interpolated on the mesh_fem
+ * is f(x)=1 ... */
+
+
+ /* set boundary conditions
+ * (Neuman on the upper face, Dirichlet elsewhere) */
+
+/*******************************************************************************/
+/* Select the part of convex where the error will be calculation */
+/*******************************************************************************/
+
+
+ //for(getfem::mr_visitor it_err(mesh.convex_index()); !it_err.finished(); ++it_err){
+
+ //base_node un1_cal_err = mesh.normal_of_face_of_convex(it_err.cv(), it_err.f());
+ //un1_cal_err /= gmm::vect_norm2(un1_cal_err);
+ //if (un1_cal_err[1]> -0.5) mesh.region(PART_CAL_ERROR).add(it_err.cv());
+ //
+ // }
+
+
+
+ cout << "Selecting Neumann and Dirichlet boundaries\n";
+ getfem::mesh_region border_faces;
+ getfem::outer_faces_of_mesh(mesh, border_faces);
+ for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+ assert(it.is_face());
+ base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
+ un /= gmm::vect_norm2(un);
+
+ if (un[0] > 0.5) mesh.region(BOUNDARY_NUM1).add(it.cv(), it.f());
+ if (un[1] > 0.5) mesh.region(BOUNDARY_NUM2).add(it.cv(), it.f());
+ if (un[0] < -0.5) mesh.region(BOUNDARY_NUM3).add(it.cv(), it.f());
+ if (un[1] < -0.5) mesh.region(BOUNDARY_NUM4).add(it.cv(), it.f());
+
+ }
+}
+
+
+
+base_small_vector ls_function(const base_node P, int num = 0) {
+ scalar_type x = P[0], y = P[1];
+ base_small_vector res(2);
+ switch (num) {
+ case 0: {
+ res[0] = y;
+ res[1] = -.5 + x;
+ } break;
+ case 1: {
+ res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
+ res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.27;
+ } break;
+ case 2: {
+ res[0] = x - 0.25;
+ res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.35;
+ } break;
+ default: assert(0);
+ }
+ return res;
+}
+
+
+
+struct matrix_G {
+
+ const sparse_matrix &B;
+ const sparse_matrix &S;
+ mutable plain_vector W1, W2;
+
+ gmm::SuperLU_factor<scalar_type> SLUF;
+
+ matrix_G(const sparse_matrix &BB, const sparse_matrix &SS)
+ : B(BB), S(SS), W1(gmm::mat_nrows(SS)), W2(gmm::mat_nrows(SS)) {
+ SLUF.build_with(SS);
+ }
+
+};
+
+template <typename vector1, typename vector2>
+void mult(const matrix_G &G, const vector1 &X, vector2 &Y) {
+ gmm::mult(gmm::transposed(G.B), X, G.W1);
+ // gmm::iteration it(1E-6, 0);
+ // gmm::cg(G.S, G.W2, G.W1, gmm::identity_matrix(), it);
+ G.SLUF.solve(G.W2, G.W1);
+ gmm::mult(G.B, G.W2, Y);
+}
+
+template <typename vector1, typename vector2>
+void mult(const matrix_G &G, const vector1 &X, const vector2 &b, vector2 &Y)
+{ mult(G, X, Y); gmm::add(b, Y); }
+
+
+scalar_type smallest_eigen_value(const sparse_matrix &B,
+ const sparse_matrix &M,
+ const sparse_matrix &S) {
+ cout << "matrice B = "<< B;
+ size_type n = gmm::mat_nrows(M);
+ scalar_type lambda;
+ plain_vector V(n), W(n), V2(n);
+ gmm::fill_random(V2);
+ matrix_G G(B, S);
+
+ do {
+ gmm::copy(V2, V);
+ gmm::scale(V, 1./gmm::vect_norm2(V));
+ gmm::mult(M, V, W);
+
+ gmm::iteration it(1E-3, 0);
+ gmm::cg(G, V2, W, gmm::identity_matrix(), it);
+ lambda = gmm::vect_norm2(V2);
+
+// compute the Rayleigh quotient
+
+// mult(G, V2, W);
+// scalar_type lambda2 = gmm::vect_sp(V2, W);
+// gmm::mult(M, V2, W);
+// lambda2 /= gmm::vect_sp(V2, W);
+// cout << "lambda2 = " << sqrt(lambda2) << endl;
+
+ cout << "lambda = " << sqrt(1./lambda) << endl;
+ cout << "residu = " << gmm::vect_dist2(V2, gmm::scaled(V, lambda)) << endl;
+
+ } while (gmm::vect_dist2(V2, gmm::scaled(V, lambda)) > 1E-3);
+
+ return sqrt(1./lambda);
+}
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
+
+bool cr_nl_elastostatic_problem::solve(plain_vector &U, plain_vector &P) {
+ size_type nb_dof_rhs = mf_rhs.nb_dof();
+ // size_type nb_dof_mult = mf_mult.nb_dof();
+ size_type N = mesh.dim();
+ ls.reinit();
+ size_type law_num = PARAM.int_value("LAW");
+ size_type line_search_version = PARAM.int_value("line_search_version");
+ size_type Pseudo_Potential = PARAM.int_value("Pseudo_Potential");
+ std::cout<<"law num "<< law_num << endl;
+
+ base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
+
+ for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
+ ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
+ ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+
+ }
+ ls.touch();
+
+ mls.adapt();
+ mim.adapt();
+ mfls_u.adapt();
+ mfls_p.adapt();
+ mfls_mortar.adapt(); mfls_mortar.set_qdim(2);
+
+ // bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
+
+
+ cout << "Setting up the singular functions for the enrichment\n";
+
+ //size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+ size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
+
+ //std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
+ std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
+ std::vector<getfem::pglobal_function> vfunc(2);
+ //std::vector<getfem::pglobal_function> vfunc_p(2);
+
+ std::cout << "Using default singular functions\n";
+ for (unsigned i = 0; i < vfunc.size(); ++i){
+
+ // getfem::abstract_xy_function *s;
+// if (i < nb_enr_func_u){
+// s = new generic_u_singular_xy_function(i+1);
+// }
+// else{
+// s = new generic_u_singular_xy_function(-(i+1));
+// }
+
+ getfem::abstract_xy_function *s =
+ new steph_u_singular_xy_function(i);
+
+ if (enrichment_option != FIXED_ZONE &&
+ enrichment_option != GLOBAL_WITH_MORTAR) {
+ /* use the product of the singularity function
+ with a cutoff */
+
+ getfem::abstract_xy_function *c =
+ new getfem::cutoff_xy_function(int(cutoff_func),
+ cutoff_radius,
+ cutoff_radius1,cutoff_radius0);
+ s = new getfem::product_of_xy_functions(*s, *c);
+
+ }
+ vfunc[i]=getfem::global_function_on_level_set(ls, *s);
+ }
+
+ for (unsigned i = 0; i < vfunc_p.size() ;++i){
+
+
+ getfem::abstract_xy_function *sp;
+ if (i < nb_enr_func_p)
+ sp = new generic_p_singular_xy_function(i+1);
+ else
+ sp = new generic_p_singular_xy_function(-(i+1));
+
+ if (enrichment_option != FIXED_ZONE &&
+ enrichment_option != GLOBAL_WITH_MORTAR) {
+ /* use the product of the singularity function
+ with a cutoff */
+ getfem::abstract_xy_function *cp =
+ new getfem::cutoff_xy_function(int(cutoff_func),
+ cutoff_radius,
+ cutoff_radius1,cutoff_radius0);
+ sp = new getfem::product_of_xy_functions(*sp, *cp);
+
+ }
+ vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);
+ }
+
+ mf_sing_u.set_functions(vfunc);
+ mf_sing_p.set_functions(vfunc_p);
+
+ if (enrichment_option == SPIDER_FEM_ALONE ||
+ enrichment_option == SPIDER_FEM_ENRICHMENT) {
+ spider.fem = new getfem::spider_fem(spider.radius, mim, spider.Nr,
+ spider.Ntheta, spider.K, cracktip,
+ spider.theta0, spider.bimat_enrichment,
+ spider.epsilon);
+ mf_us.set_finite_element(mesh.convex_index(),spider.fem->get_pfem());
+
+ for (dal::bv_visitor_c i(mf_us.convex_index()); !i.finished(); ++i) {
+ if (mf_us.fem_of_element(i)->nb_dof(i) == 0) {
+ mf_us.set_finite_element(i,0);
+ }
+ }
+ spider.fem->check();
+ }
+
+ switch (enrichment_option) {
+
+ case FIXED_ZONE :
+ {
+ dal::bit_vector enriched_dofs;
+ plain_vector X(mf_partition_of_unity.nb_dof());
+ plain_vector Y(mf_partition_of_unity.nb_dof());
+ getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+ ls.values(1), X);
+ getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+ ls.values(0), Y);
+ for (size_type j = 0; j < mf_partition_of_unity.nb_dof(); ++j) {
+ if (gmm::sqr(X[j]) + gmm::sqr(Y[j]) <= gmm::sqr(enr_area_radius))
+ enriched_dofs.add(j);
+ }
+ if (enriched_dofs.card() < 3)
+ GMM_WARNING0("There is " << enriched_dofs.card() <<
+ " enriched dofs for the crack tip");
+ mf_product.set_enrichment(enriched_dofs);
+ mf_u_sum.set_mesh_fems(mf_product, mfls_u);
+ mf_product_p.set_enrichment(enriched_dofs);
+ mf_p_sum.set_mesh_fems(mf_product_p, mfls_p);
+ }
+ break;
+
+
+ case GLOBAL_WITH_MORTAR: {
+ // Selecting the element in the enriched domain
+
+ dal::bit_vector cvlist_in_area;
+ dal::bit_vector cvlist_out_area;
+ for (dal::bv_visitor cv(mesh.convex_index());
+ !cv.finished(); ++cv) {
+ bool in_area = true;
+ /* For each element, we test all of its nodes.
+ If all the nodes are inside the enrichment area,
+ then the element is completly inside the area too */
+ for (unsigned j=0; j < mesh.nb_points_of_convex(cv); ++j) {
+ if (gmm::sqr(mesh.points_of_convex(cv)[j][0] - cracktip[0]) +
+ gmm::sqr(mesh.points_of_convex(cv)[j][1] - cracktip[1]) >
+ gmm::sqr(enr_area_radius)) {
+ in_area = false; break;
+ }
+ }
+
+ /* "remove" the global function on convexes outside the enrichment
+ area */
+ if (!in_area) {
+ cvlist_out_area.add(cv);
+ mf_sing_u.set_finite_element(cv, 0);
+ mf_u().set_dof_partition(cv, 1);
+ //mf_sing_p.set_finite_element(cv, 0);
+ //mf_p().set_dof_partition(cv, 1);
+
+ } else cvlist_in_area.add(cv);
+ }
+
+ /* extract the boundary of the enrichment area, from the
+ "inside" point-of-view, and from the "outside"
+ point-of-view */
+ getfem::mesh_region r_border, r_enr_out;
+ getfem::outer_faces_of_mesh(mesh, r_border);
+
+ getfem::outer_faces_of_mesh(mesh, cvlist_in_area,
+ mesh.region(MORTAR_BOUNDARY_IN));
+ getfem::outer_faces_of_mesh(mesh, cvlist_out_area,
+ mesh.region(MORTAR_BOUNDARY_OUT));
+ for (getfem::mr_visitor v(r_border); !v.finished(); ++v) {
+ mesh.region(MORTAR_BOUNDARY_OUT).sup(v.cv(), v.f());
+ }
+ mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+ mf_p_sum.set_mesh_fems(mf_sing_p, mfls_p);
+ } break;
+
+ case GLOBAL_WITH_CUTOFF :{
+ if(cutoff_func == 0)
+ cout<<"Using exponential Cutoff..."<<endl;
+ else
+ cout<<"Using Polynomial Cutoff..."<<endl;
+ mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+ mf_p_sum.set_mesh_fems(mf_sing_p, mfls_p);
+ } break;
+
+ case SPIDER_FEM_ALONE : {
+ mf_u_sum.set_mesh_fems(mf_us);
+ } break;
+
+ case SPIDER_FEM_ENRICHMENT : {
+ mf_u_sum.set_mesh_fems(mf_us, mfls_u);
+ } break;
+
+ case NO_ENRICHMENT: {
+ cout<<"No enrichment..."<<endl;
+ mf_u_sum.set_mesh_fems(mfls_u);
+ mf_p_sum.set_mesh_fems(mfls_p);
+ } break;
+
+ }
+
+
+ U.resize(mf_u().nb_basic_dof());
+ P.resize(mf_pe().nb_basic_dof());
+
+
+
+ if (mixed_pressure)
+
+ cout << "Number of dof for P mf_pe: " << mf_pe().nb_basic_dof() << endl;
+ cout << "Number of dof for u: " << mf_u().nb_basic_dof() << endl;
+
+ unsigned Q = mf_u().get_qdim();
+ if (0) {
+ for (unsigned d=0; d < mf_u().nb_dof(); d += Q) {
+ printf("dof %4d @ %+6.2f:%+6.2f: ", d,
+ mf_u().point_of_basic_dof(d)[0], mf_u().point_of_basic_dof(d)[1]);
+
+ const getfem::mesh::ind_cv_ct cvs = mf_u().convex_to_basic_dof(d);
+ for (unsigned i=0; i < cvs.size(); ++i) {
+ size_type cv = cvs[i];
+ //if (pm_cvlist.is_in(cv)) flag1 = true; else flag2 = true;
+
+ getfem::pfem pf = mf_u().fem_of_element(cv);
+ unsigned ld = unsigned(-1);
+ for (unsigned dd = 0; dd < mf_u().nb_basic_dof_of_element(cv); dd += Q) {
+ if (mf_u().ind_basic_dof_of_element(cv)[dd] == d) {
+ ld = dd/Q; break;
+ }
+ }
+ if (ld == unsigned(-1)) {
+ cout << "DOF " << d << "NOT FOUND in " << cv << " BUG BUG\n";
+ } else {
+ printf(" %3d:%.16s", int(cv), name_of_dof(pf->dof_types().at(ld)).c_str());
+ }
+ }
+ printf("\n");
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // //
+ // find the dofs on the upper right and lower right corners //
+ // //
+ //////////////////////////////////////////////////////////////////////
+
+ cout << "Find the dofs on the upper right and lower right corners" << endl;
+ scalar_type d1 = 1.0, d2 = 1.0;
+ size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
+ base_node corner1 = base_node(1.0, -0.5);
+ base_node corner2 = base_node(1.0, 0.5);
+ GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
+
+ for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
+
+ scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
+ if (dd1 < d1) { icorner1 = i; d1 = dd1; }
+ scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
+ if (dd2 < d2) { icorner2 = i; d2 = dd2; }
+
+ }
+
+ GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
+ "Upper right or lower right corners not found d1 = "
+ << d1 << " d2 = " << d2);
+
+ /*******************************************/
+ /* */
+ /* choose the material law */
+ /* */
+ /*******************************************/
+
+ getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
+ switch (law_num) {
+ case 0:
+ case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+ case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+ default: GMM_ASSERT1(false, "no such law");
+ }
+
+ if (N == 2) {
+ cout << "2D plane strain hyper-elasticity\n";
+ pl = new getfem::plane_strain_hyperelastic_law(pl1);
+ } else pl = pl1;
+
+ pr.resize(pl->nb_params());
+ cout << "parametre du loi de comportements "<< pr << endl ;
+
+ //pl1->test_derivatives(3, 5e-9, pr);
+
+
+ getfem::model model;
+
+ // Main unknown of the problem (displacement).
+
+ model.add_fem_variable("u", mf_u());
+
+ // model.add_fem_variable("u", error_cal);
+
+ // Nonlinear elasticity brick
+ model.add_initialized_fixed_size_data("params", pr);
+ getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "params");
+
+ // Incompressibility
+ if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+ cout << "mixed pressure <|-------------------------|>" << endl;
+ model.add_fem_variable("p", mf_pe());
+ getfem::add_nonlinear_incompressibility_brick(model, mim, "u", "p", size_type(-1));
+ }
+
+ // Defining the Neumann condition right hand side.
+ plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
+
+ for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
+
+
+ model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
+
+ getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
+
+ //Dirichlet condition brick
+
+ plain_vector F_Diri(nb_dof_rhs * N);
+
+ // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+ // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+
+ // gmm::resize(F_Diri, nb_dof_mult);
+
+ model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+ if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+ add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+ else
+ add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
+
+// //////////////////////////////////////////
+// //
+// // Symetrie condition
+// //
+// //////////////////////////////////////////
+
+ model.add_initialized_fixed_size_data("Dirichletsymdata",
+ plain_vector(N, 0.0));
+ plain_vector HH(N*N); HH[0] = 1.0;
+ model.add_initialized_fixed_size_data("Hdata", HH);
+
+ getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
+
+
+
+
+
+// getfem::partial_mesh_fem symetrie_NUM3(mf_u());
+// dal::bit_vector symetrie_dofs_NUM3 = mf_u().basic_dof_on_region(BOUNDARY_NUM3);
+// cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+// cout << "Size of vector :" << symetrie_dofs_NUM3.card() << endl;
+// cout << "Basic dof on region BOUNDARY_NUM3 :" << symetrie_dofs_NUM3 << endl;
+// cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+// cout << "test :" << symetrie_dofs_NUM3[1] << endl;
+// cout << "test :" << symetrie_dofs_NUM3[2] << endl;
+// GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+
+// sparse_matrix BB((symetrie_dofs_NUM3.size()/2), mf_u().nb_dof());
+
+
+// // for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N)
+// // {}
+// for (size_type j = 0; j < symetrie_dofs_NUM3.size()+1 ; j+=N ){
+// for (size_type i = 0; i < (symetrie_dofs_NUM3.size()/2)+1 ; ++i )
+// {
+// BB(j,symetrie_dofs_NUM3[i])=1.0;
+// }}
+
+// // BB (0, icorner1) = 1.0;
+// // BB (1, icorner1+1) = 1.0;
+// // BB (2, icorner2) = 1.0;
+
+// // cout << "matrice BB :" << BB << endl;
+// // std::vector<scalar_type> LRH(3);
+// // model.add_fixed_size_variable("dir", 3);
+// // getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
+
+////////////////////////////////////////////////////
+// Recuperation de la matrice tangente
+////////////////////////////////////////////////////
+
+ gmm::csc_matrix<double> TM;
+ cout << " Recuperation de la matrice tangente... " << endl;
+ cout << " Before copy Matrix TM : " << TM << endl;
+ gmm::copy(model.real_tangent_matrix(),TM);
+ // cout << " After copy Matrix TM : " << TM(0,0) << endl;
+ cout << " Here befor : " << endl;
+ MatrixMarket_save("Matrix_Market_Tangent_matrix_nonlin_NX23", TM);
+ cout << " Here after " << endl;
+ Harwell_Boeing_save("Harwell_Boeing_Tangent_matrix_nonlin_NX23", TM);
+
+ gmm::iteration iter(residual, 1, 40000);
+
+ /* prepare the export routine for OpenDX (all time steps will be exported)
+ (can be viewed with "dx -edit nonlinear_elastostatic.net")
+ */
+ getfem::dx_export exp(datafilename + ".dx",
+ PARAM.int_value("VTK_EXPORT")==1);
+ getfem::stored_mesh_slice sl; sl.build(mesh, getfem::slicer_boundary(mesh),8);
+ exp.exporting(sl,true); exp.exporting_mesh_edges();
+ //exp.begin_series("deformationsteps");
+ exp.write_point_data(mf_u(), U, "stepinit");
+ exp.serie_add_object("deformationsteps");
+
+ GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted for reduced mesh_fems");
+
+ getfem::simplest_newton_line_search simls;
+ getfem::default_newton_line_search dlnrs;
+ getfem::systematic_newton_line_search sylnrs;
+
+// simplest_newton_line_search 1 *** default_newton_line_search 2 *** systematic_newton_line_search 3
+ cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+
+ case 1:{
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ //getfem::simplest_newton_line_search simls;
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls );
+ cout << "=============================== " << endl;
+ cout << "= Simplest_newton_line_search = " << endl;
+ cout << "=============================== " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
+ }break;
+ case 2:{
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ //getfem::default_newton_line_search dlnrs;
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs);
+ cout << "============================== " << endl;
+ cout << "= Default_newton_line_search = " << endl;
+ cout << "============================== " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
+ }break;
+
+
+ case 3: {
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ //getfem::systematic_newton_line_search sylnrs;
+ getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs);
+ cout << "================================= " << endl;
+ cout << "= Systematic_newton_line_search = " << endl;
+ cout << "================================= " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
+ }break;
+ default: GMM_ASSERT1(false, "No such line search");
+ }
+
+
+
+
+ // Solution extraction
+ gmm::copy(model.real_variable("u"), U);
+ if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+ gmm::copy(model.real_variable("p"), P);}
+
+
+ return (iter.converged());
+
+if (reference_test == 1) {
+
+ cout << "Exporting reference solution...";
+ dal::bit_vector blocked_dof = mf_u().basic_dof_on_region(5);
+ getfem::mesh_fem mf_refined(mesh, dim_type(N));
+ std::string FEM_DISC = PARAM.string_value("FEM_DISC","fem disc ");
+ mf_refined.set_finite_element(mesh.convex_index(),
+ getfem::fem_descriptor(FEM_DISC));
+
+ plain_vector W(mf_refined.nb_dof());
+ getfem::interpolation(mf_u(), mf_refined, U, W);
+
+
+ mf_refined.write_to_file(datafilename + "_refined_test.meshfem_refined", true);
+ gmm::vecsave(datafilename + "_refined_test.U_refined", W);
+
+
+ mf_refined.set_qdim(1);
+ plain_vector PP(mf_refined.nb_dof());
+ getfem::interpolation(mf_pe(), mf_refined, P, PP);
+ mf_refined.write_to_file(datafilename + "_refined_test.p_meshfem_refined", true);
+ gmm::vecsave(datafilename + "_refined_test.P_refined", PP);
+ cout << "done" << endl;
+ }
+}
+
+void export_interpolated_on_line(const getfem::mesh_fem &mf,
+ const getfem::base_vector &U,
+ const base_node &x0,
+ const base_small_vector &dir,
+ const int nb_points,
+ const std::string &filename) {
+ getfem::mesh_trans_inv mti(mf.linked_mesh());
+ scalar_type h = 1.0/(2*nb_points);
+ for (int i=-nb_points; i <= nb_points; ++i) {
+ mti.add_point(x0 + 2*(i*h)*dir);
+ }
+
+ getfem::base_vector V(mti.nb_points() * mf.get_qdim());
+ getfem::base_matrix M;
+ getfem::interpolation(mf, mti, U, V, M, 0, false);
+
+ std::ofstream f(filename.c_str()); f.precision(16);
+
+ for (size_type i=0; i < mti.nb_points(); ++i) {
+ for (unsigned q=0; q < mf.get_qdim(); ++q) {
+ f << V[i*mf.get_qdim()+q] << " ";
+ }
+ f << "\n";
+ }
+}
+
+/**************************************************************************/
+/* main program. */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ cr_nl_elastostatic_problem p;
+ p.PARAM.read_command_line(argc, argv);
+ p.init();
+ p.mesh.write_to_file(p.datafilename + ".mesh");
+ //getfem::mesh_region &rg_error_calc = p.mesh.region(1);
+ //getfem::mesh_region &rg2 = p.mesh.region(2);
+ plain_vector U, P;
+
+ if (!p.solve(U, P)) GMM_ASSERT1(false,"Solve has failed");
+
+ cout << "Saving the solution" << endl;
+ getfem::mesh mcut;
+ p.mls.global_cut_mesh(mcut);
+ unsigned Q = p.mf_u().get_qdim();
+
+ getfem::mesh_fem mf(mcut, dim_type(Q));
+ mf.set_classical_discontinuous_finite_element(2, 1E-7);
+
+ plain_vector V(mf.nb_dof());
+ getfem::interpolation(p.mf_u(), mf, U, V);
+ mf.write_to_file(p.datafilename + ".meshfem", true);
+ gmm::vecsave(p.datafilename + ".U", V);
+
+ getfem::mesh_fem mf_p(mcut);
+ mf_p.set_classical_discontinuous_finite_element(2, 1E-7);
+
+ plain_vector PP(mf_p.nb_dof());
+ getfem::interpolation(p.mf_pe(), mf_p, P, PP);
+ mf_p.write_to_file(p.datafilename + ".p_meshfem", true);
+ gmm::vecsave(p.datafilename + ".P", PP);
+
+ cout << "Interpolating solution for the drawing" << endl;
+ getfem::stored_mesh_slice sl;
+ getfem::mesh mcut_refined;
+ //getfem::mesh mcut_refined_p;
+
+ unsigned NX = unsigned(p.PARAM.int_value("NX")), nn;
+ if (NX < 6) nn = 24;
+ else if (NX < 12) nn = 6;
+ else if (NX < 30) nn = 3;
+ else nn = 3;
+
+ /* choose an adequate slice refinement based on the distance
+ to the crack tip */
+ std::vector<bgeot::short_type> nrefine(mcut.convex_index().last_true()+1);
+ for (dal::bv_visitor cv(mcut.convex_index()); !cv.finished(); ++cv) {
+ scalar_type dmin=0, d;
+ base_node Pmin,Pp;
+ for (unsigned i=0; i < mcut.nb_points_of_convex(cv); ++i) {
+ Pp = mcut.points_of_convex(cv)[i];
+ d = gmm::vect_norm2(ls_function(Pp));
+ if (d < dmin || i == 0) { dmin = d; Pmin = Pp; }
+ }
+
+ if (dmin < 1e-5)
+ nrefine[cv] = short_type(nn*8);
+ else if (dmin < .1)
+ nrefine[cv] = short_type(nn*2);
+ else nrefine[cv] = short_type(nn);
+ // if (dmin < .01)
+ // cout << "cv: "<< cv << ", dmin = " << dmin << "Pmin=" << Pmin
+ // << " " << nrefine[cv] << "\n";
+ }
+
+ {
+ getfem::mesh_slicer slicer(mcut);
+ getfem::slicer_build_mesh bmesh(mcut_refined);
+ slicer.push_back_action(bmesh);
+ slicer.exec(nrefine, getfem::mesh_region::all_convexes());
+ }
+ /*
+ sl.build(mcut,
+ getfem::slicer_build_mesh(mcut_refined), nrefine);*/
+
+ getfem::mesh_im mim_refined(mcut_refined);
+ mim_refined.set_integration_method(getfem::int_method_descriptor
+ ("IM_TRIANGLE(6)"));
+
+ // getfem::mesh_im mim_refined_p(mcut_refined_p);
+ // mim_refined.set_integration_method(getfem::int_method_descriptor
+ // ("IM_TRIANGLE(6)"));
+
+
+ getfem::mesh_fem mf_refined(mcut_refined, dim_type(Q));
+ mf_refined.set_classical_discontinuous_finite_element(2,0.001);
+ plain_vector W(mf_refined.nb_dof());
+
+
+ if (p.PARAM.int_value("VTK_EXPORT")) {
+
+ getfem::mesh_fem mf_refined_p(mcut_refined, 1);
+
+ mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
+
+ plain_vector PPW(mf_refined_p.nb_dof());
+
+
+ getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
+
+
+ cout << "export to " << p.datafilename + ".vtk" << "..\n";
+ getfem::vtk_export exp(p.datafilename + ".vtk",
+ p.PARAM.int_value("VTK_EXPORT")==1);
+
+ exp.exporting(mf_refined);
+
+ //exp.write_point_data(mf_refined_vm, DN, "error");
+ getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
+
+ exp.write_point_data(mf_refined, W, "elastostatic_displacement");
+ exp.write_point_data(mf_refined_p, PPW, "Pressure");
+
+ base_node line_x0(0.70001,0);
+ base_small_vector line_dir(0, 0.5001);
+
+
+ cout << "export done, you can view the data file with (for example)\n"
+ "mayavi -d " << p.datafilename << ".vtk -f "
+ "WarpVector -m BandedSurfaceMap -m Outline\n";
+ }
+
+ if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
+ cout << "Computing error with respect to a reference solution..." << endl;
+
+
+ std::string REFERENCE_MF = "referenceNX120_incomMR_diri_LD_015_enriold_func.meshfem";
+ std::string REFERENCE_U = "referenceNX120_incomMR_diri_LD_015_enriold_func.U";
+ std::string REFERENCE_MFP = "referenceNX120_incomMR_diri_LD_015_enriold_func.p_meshfem";
+ std::string REFERENCE_P = "referenceNX120_incomMR_diri_LD_015_enriold_func.P";
+
+ cout << "Load reference displacement from "
+ << REFERENCE_MF << " and " << REFERENCE_U << "\n";
+
+ getfem::mesh ref_m ;
+ ref_m.read_from_file(REFERENCE_MF);
+
+
+ enum { Part_cal_error = 82};
+ for(dal::bv_visitor i(ref_m.convex_index()); !i.finished(); ++i){
+ for(size_type j=0; j < 3; ++j){
+ base_node cord_err = ref_m.points_of_convex(i)[j];
+ //cout << "coordonne-erreur " << cord_err[1] << endl;
+ if (cord_err[1] > -0.39) ref_m.region(Part_cal_error).add(i);
+ }
+ }
+
+
+ getfem::mesh_fem ref_mf(ref_m);
+ ref_mf.read_from_file(REFERENCE_MF);
+
+
+ plain_vector ref_U(ref_mf.nb_dof());
+ gmm::vecload(REFERENCE_U, ref_U);
+
+
+
+ cout << "Load reference pressure from "
+ << REFERENCE_MFP << " and " << REFERENCE_P << "\n";
+ getfem::mesh_fem ref_mfp(ref_m);
+ ref_mfp.read_from_file(REFERENCE_MFP);
+ plain_vector ref_P(ref_mfp.nb_dof());
+ gmm::vecload(REFERENCE_P, ref_P);
+
+ getfem::mesh_im ref_mim(ref_m);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor("IM_TRIANGLE(6)");
+ ref_mim.set_integration_method(ref_m.convex_index(), ppi);
+
+ plain_vector interp_U(ref_mf.nb_dof());
+ getfem::interpolation(p.mf_u(), ref_mf, U, interp_U);
+
+
+ plain_vector interp_U_error(ref_mf.nb_dof());
+ gmm::add(interp_U, gmm::scaled(ref_U, -1.), interp_U_error);
+ gmm::vecsave(p.datafilename+".U_map_error", interp_U_error);
+
+ cout << "To ref L2 ERROR on U:"
+ << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U, ref_mf, ref_U, Part_cal_error) << endl;
+
+ cout << "To ref H1 ERROR on U:"
+ << getfem::asm_H1_dist(ref_mim, ref_mf, interp_U,
+ ref_mf, ref_U, Part_cal_error ) << endl;
+
+ plain_vector interp_P(ref_mfp.nb_dof());
+ getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P, Part_cal_error);
+
+ plain_vector interp_P_error(ref_mfp.nb_dof());
+ gmm::add(interp_P, gmm::scaled(ref_P, -1.), interp_P_error);
+ gmm::vecsave(p.datafilename+".P_map_error", interp_P_error);
+
+ cout << "To ref L2 ERROR on P:"
+ << getfem::asm_L2_dist(ref_mim, ref_mfp, interp_P,
+ ref_mfp, ref_P) << endl;
+
+ gmm::add(gmm::scaled(interp_U, -1.), ref_U);
+ gmm::vecsave(p.datafilename + ".diff_ref", ref_U);
+
+ }
+
+
+ return 0;
+}
+
diff --git a/contrib/xfem_large_strain/nonlinear_incomp_xfem.param b/contrib/xfem_large_strain/nonlinear_incomp_xfem.param
new file mode 100644
index 0000000..ac8d234
--- /dev/null
+++ b/contrib/xfem_large_strain/nonlinear_incomp_xfem.param
@@ -0,0 +1,163 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode) %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program crack %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+MU = 10.0; % Lame coefficient.
+QUAD = 0;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Nonlinear elasticity %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Elastic coefficients %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Just for indication %
+%Ogden mu=4.225E05 %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Mooney-Rivlin. %
+% %%%%%%%%%%%
+%W(F)=C_10(I_1-3)+C_01(I_2-3) %
+%For rubbers the Numerical Value are %
+%C_10 = 0.183 MPa. %
+%C_01 = 0.0034 MPa. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+P1 = 1.83 ; % First elastic coefficient.
+P2 = 0.034 ; % Second elastic coefficient.
+P3 = 0 ; % Third elastic coefficient.
+
+%P1 = 1 ; % First elastic coefficient.%
+%P2 = 1 ; % Second elastic coefficient.%
+%P3 = 1 ; % Third elastic coefficient.%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+LAW = 3 ; % 1 : SaintVenant-Kirchhoff + incompressibility
+ % 2 : Ciarlet_Geymonat
+ % 3 : Mooney_Rivlin + incompressibility
+
+
+BIMATERIAL = 0; % 1 : To enable the bimaterial case
+
+if BIMATERIAL
+ MU_UP = 10.0;
+ MU_DOWN = 1.0;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Line search version %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+line_search_version = 2 % 1 for simplest_newton_line_search
+ % 2 for default_newton_line_search
+ % 3 for systematic_newton_line_search
+ % 4 for Quadratic_newton_line_search
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Energy criteria %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0 % 1 Enable energy criteria
+ % else Disable energy criteria
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+REFINEMENT_RADIUS = 0 ; % REF: 0.4; % 0 for no refinement
+REFINEMENT_PROCESS = 0 ; % nb of desired refinement steps
+
+REFERENCE_TEST = 0; % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0; % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0; % Compute or not the inf_sup condition
+
+%%%%% discretisation parameters : %%%%%
+
+NB_ENR_FUNC_U = 2;
+NB_ENR_FUNC_P = 2;
+
+NX = 140; % space step.
+MESH_NOISED = 1; % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0; % Load in X direction.
+AMP_LOAD_Y = 0.11; % Load in Y direction.
+nb_step = 6;
+NOISY = 1 ;
+stnst = 0 ; % 1 Applying load progressively (don't work)
+
+if (~QUAD)
+ MESH_TYPE = 'GT_PK(2,1)'; % linear triangles
+ FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+ %FEM_TYPE = 'FEM_PK(2,2)'; % PK element %REF: P3
+ DATA_FEM_TYPE = 'FEM_PK(2,1)';
+ INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
+ FEM_TYPE_P = 'FEM_PK(2,1)';
+ MORTAR_FEM_TYPE = FEM_TYPE;
+else
+ % MESH_TYPE = 'GT_LINEAR_QK(2)';
+ MESH_TYPE = 'GT_QK(2, 1)';
+ FEM_TYPE = 'FEM_QK(2,1)'; % Q1 fem for quadrangles
+ DATA_FEM_TYPE = 'FEM_QK(2,1)';
+ INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
+ FEM_TYPE_P = 'FEM_QK(2,1)';
+ MORTAR_FEM_TYPE = FEM_TYPE;
+end;
+
+FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
+
+MIXED_PRESSURE = 1; % Mixed version or not.
+DIRICHLET_VERSION = 0; % 0 = multipliers, 1 = penalization, 2 = elimination
+
+% integration meth. for sub-simplexe of elements crossed by the level-set
+SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
+
+% integration meth. for quasi-polar integration of sub-simplexes
+% adjascent to the level-set
+% (comment it to disable quasipolar integration). Should be a
+% method defined on a square for 2D, or defined on a prism for 3D.
+% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
+SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
+
+% Enable the following 2 lines to use the precomputed solution as enrichement
+% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
+% GLOBAL_FUNCTION_U = "bimaterial_crack12.U"
+
+
+ENRICHMENT_OPTION = 1 ; % 0 = Pas d'enrichissement
+ % 1 = standard XFEM on a fixed zone
+ % 2 = global functions with mortar junction
+ % 3 = global functions with cutoff
+ % 4 = spider fem alone
+ % 5 = spider fem enrichment
+
+
+RADIUS_ENR_AREA = 0.2; % For XFEM and the mortar junction
+
+CUTOFF_FUNC = 1; % 0 for the exponential cutoff.
+ % 1 for a 3rd degree polynomial cutoff
+ % 2 for a 5th degree polynomial cutoff
+CUTOFF = 0.2;
+CUTOFF1 = 0.01;
+CUTOFF0 = 0.49;
+
+SPIDER_RADIUS = 0.4;
+SPIDER_NR = 10; % size of the cartesian mesh in r for spider fem
+SPIDER_NTHETA = 10; % size of the cartesian mesh in theta for spider fem
+SPIDER_K=1; % order of the spider fem
+SPIDER_BIMAT_ENRICHMENT = 0; % 0 for a sqrt spider enrichment
+ % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
+
+RESIDUAL = 1E-9; % residual for iterative methods if any.
+MAXITER = 5000;
+%%%%% saving parameters %%%%%
+% STD= Standard XFEM %
+% COE= Cutoff_enrichement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ROOTFILENAME = 'ref_NX140_incomp_MR_Fixed_zone_enrichement_amp0_11_lns2'; % Root of data files.
+VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
+
+
diff --git a/contrib/xfem_large_strain/vertex_large_strain.cc b/contrib/xfem_large_strain/vertex_large_strain.cc
index 2bf4907..c44d91d 100644
--- a/contrib/xfem_large_strain/vertex_large_strain.cc
+++ b/contrib/xfem_large_strain/vertex_large_strain.cc
@@ -1,30 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
*
* This program is used to check that getfem++ is working. This is also
* a good example of use of Getfem++.
- */
+ *
+ **/
#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
@@ -40,9 +41,14 @@
#include "getfem/getfem_mesh_fem_sum.h"
#include "getfem/getfem_superlu.h"
#include "getfem_nonlinear_elastoptim.h"
+#include "compressible_getfem_nonlinear_elastoptim.h"
#include "gmm/gmm.h"
#include "gmm/gmm_inoutput.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -59,6 +65,7 @@ using bgeot::base_matrix; /* small dense matrix. */
/* definition of some matrix/vector types. These ones are built
* using the predefined types in Gmm++
*/
+
typedef getfem::modeling_standard_sparse_vector sparse_vector;
typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
typedef getfem::modeling_standard_plain_vector plain_vector;
@@ -71,8 +78,8 @@ typedef getfem::modeling_standard_plain_vector plain_vector;
/**************************************************************************/
-scalar_type alpha_md = 0.5;
-scalar_type beta_md = 0.5;
+scalar_type alpha_md = 0.6;
+scalar_type beta_md = -0.5;
struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
int n;
@@ -87,7 +94,7 @@ scalar_type
generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
scalar_type r = sqrt(x*x + y*y);
if (r < 1e-10) return 0;
- scalar_type theta = atan2(x, y);
+ scalar_type theta = atan2(y, x);
if (n <= 0)
return pow(r, alpha_md) * cos(scalar_type(n) * theta * 0.5);
@@ -102,7 +109,7 @@ generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
if (r < 1e-10) {
GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
}
- scalar_type theta = atan2(x, y);
+ scalar_type theta = atan2(y, x);
base_small_vector res(2);
scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
@@ -137,7 +144,7 @@ scalar_type
generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
scalar_type r = sqrt(x*x + y*y);
if (r < 1e-10) return 0;
- scalar_type theta = atan2(x, y);
+ scalar_type theta = atan2(y, x);
if (n <= 0)
return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
@@ -152,7 +159,7 @@ generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
if (r < 1e-10) {
GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
}
- scalar_type theta = atan2(x, y);
+ scalar_type theta = atan2(y, x);
base_small_vector res(2);
scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
@@ -179,13 +186,15 @@ base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
/**************************************************************************/
-/* */
-/* Brick definition. */
+/* Incompressible cases */
+/* Brick for incompressible formulation definition. */
/* */
/**************************************************************************/
namespace getfem {
+#define COEFF_MULT_ALPHABETA 1
+
struct nonlinear_elasticity_optim_brick : public virtual_brick {
const abstract_hyperelastic_law &AHL;
@@ -194,12 +203,12 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
const model::varnamelist &vl,
const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(mims.size() == 1,
"Nonlinear elasticity brick need a single mesh_im");
GMM_ASSERT1(vl.size() == 4,
@@ -207,7 +216,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
GMM_ASSERT1(dl.size() == 1,
"Wrong number of data for nonlinear elasticity brick, "
<< dl.size() << " should be 1 (vector).");
- GMM_ASSERT1(matl.size() == 7, "Wrong number of terms for nonlinear "
+ GMM_ASSERT1(matl.size() == 11, "Wrong number of terms for nonlinear "
"elasticity brick");
const model_real_plain_vector &u = md.real_variable(vl[0]);
@@ -274,34 +283,49 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
(V, mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
params, AHL, ls,rg);
- gmm::copy(gmm::row_vector(V), matl[0]);
+ cout << "IIncomp********alpha u******* Vecteur alpha u V:" << V << endl;
+ gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+ matl[0]);
+ gmm::copy(gmm::col_vector(V), matl[7]);
- gmm::resize(V, gmm::vect_size(p));
+ gmm::resize(V, gmm::vect_size(p));
gmm::clear(V);
asm_nonlinear_elasticity_optim_tangent_matrix_alpha_p
(V, mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
params, AHL, ls,rg);
- gmm::copy(gmm::row_vector(V), matl[1]);
+ cout << "IIncomp********alpha p******* Vecteur alpha p V:" << V << endl;
+
+ gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+ matl[1]);
+ gmm::copy(gmm::col_vector(V), matl[8]);
(matl[2])(0,0)
= asm_nonlinear_elasticity_optim_tangent_matrix_alpha_alpha
(mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
- params, AHL, ls,rg);
+ params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
+ cout << "IIncomp********alpha alpha******* Vecteur alpha alpha :" <<
+ (matl[2])(0,0) << endl;
matl[5](0,0)
= asm_nonlinear_elasticity_optim_tangent_matrix_beta_alpha
(mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
- params, AHL, ls,rg);
+ params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
+
+ cout << "IIncomp********beta alpha******* Vecteur beta alpha :" <<
+ matl[5](0,0) << endl;
matl[6](0,0)
= asm_nonlinear_elasticity_optim_tangent_matrix_beta_beta
(mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
- params, AHL, ls,rg);
+ params, AHL, ls,rg) * COEFF_MULT_ALPHABETA;
+
+ cout << "IIncomp********beta beta******* Vecteur beta beta :" <<
+ matl[6](0,0) << endl;
gmm::resize(V, gmm::vect_size(u));
gmm::clear(V);
@@ -309,7 +333,9 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
(V, mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
params, AHL, ls,rg);
- gmm::copy(gmm::row_vector(V), matl[3]);
+ gmm::copy(gmm::scaled(gmm::row_vector(V), COEFF_MULT_ALPHABETA),
+ matl[3]);
+ gmm::copy(gmm::col_vector(V), matl[9]);
gmm::resize(V, gmm::vect_size(p));
@@ -318,7 +344,9 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
(V, mim, mf_u, u, U_ls, u_enriched_dof,
mf_p, p, P_ls, p_enriched_dof, alpha, beta, mf_params,
params, AHL, ls,rg);
- gmm::copy(gmm::row_vector(V), matl[4]);
+ gmm::copy(gmm::scaled(gmm::row_vector(V), COEFF_MULT_ALPHABETA),
+ matl[4]);
+ gmm::copy(gmm::col_vector(V), matl[10]);
}
@@ -329,7 +357,11 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
mf_p, p, P_ls, p_enriched_dof,
alpha, beta,
mf_params, params, AHL, ls, rg);
- gmm::scale(vecl[0], scalar_type(-1));
+ // gmm::scale(vecl[0], scalar_type(-1));
+
+ gmm::scale(vecl[0], scalar_type(-COEFF_MULT_ALPHABETA));
+ gmm::scale(vecl[3], scalar_type(-COEFF_MULT_ALPHABETA));
+
}
}
@@ -344,7 +376,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
}
};
-
+
//=========================================================================
// Add a nonlinear elasticity brick.
//=========================================================================
@@ -358,13 +390,20 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
pbrick pbr = new nonlinear_elasticity_optim_brick(AHL, ls);
model::termlist tl;
- tl.push_back(model::term_description(varname_alpha, varname_u, true));
- tl.push_back(model::term_description(varname_alpha, varname_p, true));
+ tl.push_back(model::term_description(varname_alpha, varname_u, false));
+ tl.push_back(model::term_description(varname_alpha, varname_p, false));
tl.push_back(model::term_description(varname_alpha, varname_alpha, true));
- tl.push_back(model::term_description(varname_beta, varname_u, true));
- tl.push_back(model::term_description(varname_beta, varname_p, true));
+ tl.push_back(model::term_description(varname_beta, varname_u, false));
+ tl.push_back(model::term_description(varname_beta, varname_p, false));
tl.push_back(model::term_description(varname_beta, varname_alpha, true));
tl.push_back(model::term_description(varname_beta, varname_beta, true));
+ //
+ //Non symetrie pour multiplier les lignes work in progress
+ //
+ tl.push_back(model::term_description(varname_u, varname_alpha, false));
+ tl.push_back(model::term_description(varname_p, varname_alpha, false));
+ tl.push_back(model::term_description(varname_u, varname_beta, false));
+ tl.push_back(model::term_description(varname_p, varname_beta, false));
model::varnamelist dl(1, dataname_law);
model::varnamelist vl(1, varname_u);
vl.push_back(varname_p);
@@ -373,17 +412,166 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
return md.add_brick(pbr, vl, dl, tl, model::mimlist(1,&mim), region);
}
+}
+/**************************************************************************/
+/* */
+/* Compressible cases */
+/* Brick for Compressible formulation definition. */
+/* */
+/**************************************************************************/
+namespace getfem {
+struct nonlinear_elasticity_optim_brick_compressible : public virtual_brick {
+
+ const abstract_hyperelastic_law &AHL;
+ const getfem::level_set &ls;
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ GMM_ASSERT1(mims.size() == 1,
+ "Nonlinear elasticity brick need a single mesh_im");
+ GMM_ASSERT1(vl.size() == 2,
+ "Nonlinear elasticity brick need a single variable");
+ GMM_ASSERT1(dl.size() == 1,
+ "Wrong number of data for nonlinear elasticity brick, "
+ << dl.size() << " should be 1 (vector).");
+ GMM_ASSERT1(matl.size() == 3, "Wrong number of terms for nonlinear "
+ "elasticity brick");
-}
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = *(md.pmesh_fem_of_variable(vl[0]));
+ const model_real_plain_vector &alpha = md.real_variable(vl[1]);
+
+ const mesh_fem *mf_params = md.pmesh_fem_of_variable(dl[0]);
+ const model_real_plain_vector ¶ms = md.real_variable(dl[0]);
+ const mesh_im &mim = *mims[0];
+ size_type sl = gmm::vect_size(params);
+ if (mf_params) sl = sl * mf_params->get_qdim() / mf_params->nb_dof();
+ GMM_ASSERT1(sl == AHL.nb_params(), "Wrong number of coefficients for the "
+ "nonlinear constitutive elastic law");
+ mesh_region rg(region);
+ mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+
+
+ std::vector<scalar_type> U_ls(gmm::vect_size(u));
+
+ dim_type d = mf_u.linked_mesh().dim();
+ dal::bit_vector u_enriched_dof;
+ for (dal::bv_visitor cv(mf_u.linked_mesh().convex_index());
+ !cv.finished(); ++cv) {
+ pfem pf = mf_u.fem_of_element(cv);
+ for (size_type j = 0; j< pf->nb_dof(cv); ++j)
+ if (pf->dof_types()[j] == global_dof(d)) {
+ for (size_type k = 0; k < d; ++k) {
+ size_type dof = mf_u.ind_basic_dof_of_element(cv)[j*d+k];
+ u_enriched_dof.add(dof);
+ U_ls[dof] = u[dof];
+ }
+ }
+ }
+
+ if (version & model::BUILD_MATRIX) {
+ std::vector<scalar_type> V(gmm::vect_size(u));
+ GMM_TRACE2("Nonlinear elasticity stiffness matrix assembly");
+
+ asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_u
+ (V, mim, mf_u, u, U_ls, u_enriched_dof, alpha, mf_params, params, AHL, ls,rg);
+ gmm::copy(gmm::row_vector(gmm::scaled(V, COEFF_MULT_ALPHABETA)),
+ matl[0]);
+ gmm::copy(gmm::col_vector(V), matl[2]);
+
+
+ cout << "CComp********alpha u********** Vecteur alpha u V:" << V << endl;
+
+
+ (matl[1])(0,0)
+ = asm_nonlinear_elasticity_optim_compressible_tangent_matrix_alpha_alpha
+ (mim, mf_u, u, U_ls, u_enriched_dof, alpha, mf_params, params, AHL, ls, rg)* COEFF_MULT_ALPHABETA;
+
+ cout << "CComp********alpha alpha****** Vecteur alpha alpha :" <<
+ (matl[1])(0,0) << endl;
+
+ }
+
+
+ if (version & model::BUILD_RHS) {
+ asm_nonlinear_elasticity_optim_compressible_rhs(vecl[0], mim,
+ mf_u, u, U_ls, u_enriched_dof,
+ alpha, mf_params, params, AHL, ls, rg);
+ //gmm::scale(vecl[0], scalar_type(-1));
+ cout << "CComp********_Right_hand_side******* Partie dL/dalpha :" <<
+ vecl[0] << endl;
+ gmm::scale(vecl[0], scalar_type(-COEFF_MULT_ALPHABETA));
+
+
+ }
+
+ }
+
+
+ nonlinear_elasticity_optim_brick_compressible(const abstract_hyperelastic_law &AHL_,
+ const getfem::level_set &ls_)
+ : AHL(AHL_), ls(ls_) {
+ set_flags("Nonlinear elasticity brick", false /* is linear*/,
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, false /* is complex */);
+ }
+
+ };
+
+ //=========================================================================
+ // Add a nonlinear elasticity brick compressible cases.
+ //=========================================================================
+
+ size_type add_nonlinear_elasticity_optim_compressible_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &varname_alpha, const abstract_hyperelastic_law &AHL, const std::string &dataname_law,
+ const getfem::level_set &ls, size_type region = size_type(-1)) {
+ pbrick pbr = new nonlinear_elasticity_optim_brick_compressible(AHL, ls);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_alpha, varname_u, false));
+ tl.push_back(model::term_description(varname_alpha, varname_alpha, true));
+
+ //
+ //Non symetrie pour multiplier la partie work in progress
+ //
+ tl.push_back(model::term_description(varname_u, varname_alpha, false));
+
+
+ model::varnamelist dl(1, dataname_law);
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(varname_alpha);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1,&mim), region);
+ }
+
+}
+
+
+
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
+/*****************************************************************************************************************/
/**************************************************************************/
@@ -394,7 +582,7 @@ struct nonlinear_elasticity_optim_brick : public virtual_brick {
struct crack_problem {
- enum { DIRICHLET_BOUNDARY_NUM = 0, NEUMANN1_BOUNDARY_NUM = 1, NEUMANN2_BOUNDARY_NUM=2, NEUMANN3_BOUNDARY_NUM=3, NEUMANN4_BOUNDARY_NUM=4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+ enum { DIRICHLET_BOUNDARY_NUM = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2=2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
getfem::mesh mesh; /* the mesh */
getfem::level_set ls; /* The two level sets defining the crack. */
getfem::mesh_level_set mls; /* the integration methods for cutted element. */
@@ -414,7 +602,7 @@ struct crack_problem {
getfem::mesh_fem_product mf_product_p;
getfem::mesh_fem_sum mf_p_sum;
- scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step; /* elastic coefficients,Amplitude of load, number of step loadings*/
+ scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, NB_STEP; /* elastic coefficients,Amplitude of load, number of step loadings*/
base_small_vector cracktip;
@@ -550,7 +738,7 @@ void crack_problem::init(void) {
pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
AMP_LOAD_X = PARAM.real_value("AMP_LOAD_X", "Amp load x");
AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
- nb_step = PARAM.real_value("nb_step", "nb_step");
+ NB_STEP = PARAM.real_value("NB_STEP", "NB_STEP");
reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
@@ -570,9 +758,9 @@ void crack_problem::init(void) {
base_small_vector tt(N); tt[1] = -0.5;
mesh.translation(tt);
- cracktip.resize(2); // Coordonn�e du fond de fissure
- cracktip[0] = 0.9;
- cracktip[1] = 0.;
+ cracktip.resize(2); // Coordonn%G�%@e du fond de fissure
+ cracktip[0] = 0.5;
+ cracktip[1] = 0.1;
scalar_type refinement_radius;
refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
@@ -683,10 +871,10 @@ void crack_problem::init(void) {
base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
un /= gmm::vect_norm2(un);
- if (un[0] > 0.5) mesh.region(NEUMANN1_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[1] > 0.5) mesh.region(NEUMANN2_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[0] < -0.5) mesh.region(NEUMANN3_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[1] < -0.5) mesh.region(NEUMANN4_BOUNDARY_NUM).add(i.cv(), i.f());
+ if (un[0] > 0.5) mesh.region(BOUNDARY_NUM1).add(i.cv(), i.f());
+ if (un[1] > 0.5) mesh.region(BOUNDARY_NUM2).add(i.cv(), i.f());
+ if (un[0] < -0.5) mesh.region(BOUNDARY_NUM3).add(i.cv(), i.f());
+ if (un[1] < -0.5) mesh.region(BOUNDARY_NUM4).add(i.cv(), i.f());
}
@@ -698,8 +886,8 @@ base_small_vector ls_function(const base_node P, int num = 0) {
base_small_vector res(2);
switch (num) {
case 0: {
- res[0] = y;
- res[1] = -.5 + x;
+ res[0] = y;
+ res[1] = -.5 + x;
} break;
case 1: {
res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
@@ -778,17 +966,6 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
return sqrt(1./lambda);
}
-
-
-
-
-
-
-
-
-
-
-
/*****************************************************************/
/* Model. */
@@ -805,14 +982,13 @@ namespace getfem {
typedef VEC VECTOR;
typedef typename gmm::linalg_traits<VECTOR>::value_type T;
typedef typename gmm::number_traits<T>::magnitude_type R;
-
model &md;
- gmm::abstract_newton_line_search &ls;
+ getfem::abstract_newton_line_search &ls;
VECTOR stateinit, &state;
const VECTOR &rhs;
const MATRIX &K;
bool with_pseudo_potential;
-
+ // bool with_incompressible_terms;
void compute_tangent_matrix(void)
{ md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
@@ -826,6 +1002,13 @@ namespace getfem {
void compute_pseudo_potential(void)
{ md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
+ void perturbation(void) {
+ R res = gmm::vect_norm2(state), ampl = res / R(1000);
+ if (res == R(0)) ampl = 1E-30;
+ std::vector<R> V(gmm::vect_size(state));
+ gmm::fill_random(V);
+ gmm::add(gmm::scaled(V, ampl), state);
+ }
const VECTOR &residual(void) { return rhs; }
@@ -847,12 +1030,9 @@ namespace getfem {
alpha = ls.next_try();
gmm::add(stateinit, gmm::scaled(dr, alpha), state);
- // Ici, on récupère alpha et beta de l'enrichissement
- alpha_md
- = state[md.interval_of_variable("alpha").first()];
- beta_md
- = state[md.interval_of_variable("beta").first()];
-
+ // Ici, on recupere alpha et beta de l'enrichissement
+ alpha_md = state[md.interval_of_variable("alpha").first()];
+ beta_md = state[md.interval_of_variable("beta").first()];
if (alpha < 1E-10) break;
@@ -869,37 +1049,37 @@ namespace getfem {
alpha = ls.converged_value();
gmm::add(stateinit, gmm::scaled(dr, alpha), state);
- // Ici, on récupère alpha et beta de l'enrichissement
+ // Ici, on recupere alpha et beta de l'enrichissement
+
alpha_md
= state[md.interval_of_variable("alpha").first()];
+
beta_md
= state[md.interval_of_variable("beta").first()];
-
res = ls.converged_residual();
compute_residual();
}
- cout << "alpha = " << alpha_md << endl << "beta = " << beta_md << endl;
+ cout << "alpha = " << alpha_md << endl ;
+ cout << "beta = " << beta_md << endl;
+
return alpha;
}
- my_model_pb(model &m, gmm::abstract_newton_line_search &ls_, VECTOR &st,
- const VECTOR &rhs_, const MATRIX &K_,
- bool with_pseudo_pot = false)
- : md(m), ls(ls_), state(st), rhs(rhs_), K(K_),
- with_pseudo_potential(with_pseudo_pot) {}
+ my_model_pb(model &m, getfem::abstract_newton_line_search &ls_, VECTOR &st,
+ const VECTOR &rhs_, const MATRIX &K_, bool with_pseudo_pot = false )
+ : md(m), ls(ls_), state(st), rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
};
- static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
- return default_linear_solver<model_real_sparse_matrix,
- model_real_plain_vector>(md);
- }
+ static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
+ return default_linear_solver <model_real_sparse_matrix, model_real_plain_vector>(md);
+ }
template <typename MATRIX, typename VECTOR, typename PLSOLVER>
void my_solve(model &md, gmm::iteration &iter,
PLSOLVER lsolver,
- gmm::abstract_newton_line_search &ls, const MATRIX &K,
+ getfem::abstract_newton_line_search &ls, const MATRIX &K,
const VECTOR &rhs, bool with_pseudo_potential = false) {
VECTOR state(md.nb_dof());
@@ -922,27 +1102,161 @@ namespace getfem {
void my_solve(model &md, gmm::iteration &iter,
rmodel_plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls,
- bool with_pseudo_potential) {
+ getfem::abstract_newton_line_search &ls,
+ bool with_pseudo_potential ) {
my_solve(md, iter, lsolver, ls, md.real_tangent_matrix(),
- md.real_rhs(), with_pseudo_potential);
+ md.real_rhs(), with_pseudo_potential );
}
void my_solve(model &md, gmm::iteration &iter,
- bool with_pseudo_potential = false) {
- gmm::default_newton_line_search ls;
- my_solve(md, iter, rdefault_linear_solver(md), ls,
- with_pseudo_potential);
+ bool with_pseudo_potential = false ) {
+ getfem::default_newton_line_search ls;
+ my_solve(md, iter, rdefault_linear_solver(md), ls, with_pseudo_potential );
}
-
}
+/*****************************************************************/
+/* */
+/* Compressible solver */
+/* */
+/*****************************************************************/
+
+namespace getfem {
+ template <typename MAT, typename VEC>
+ struct my_model_pb_comp {
+
+ typedef MAT MATRIX;
+ typedef VEC VECTOR;
+ typedef typename gmm::linalg_traits<VECTOR>::value_type T;
+ typedef typename gmm::number_traits<T>::magnitude_type R;
+ model &md;
+ getfem::abstract_newton_line_search &ls;
+ VECTOR stateinit, &state;
+ const VECTOR &rhs;
+ const MATRIX &K;
+ bool with_pseudo_potential;
+ // bool with_incompressible_terms;
+ void compute_tangent_matrix(void)
+ { md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
+
+ const MATRIX &tangent_matrix(void) { return K; }
+
+ inline T scale_residual(void) const { return T(1); }
+
+ void compute_residual(void)
+ { md.to_variables(state); md.assembly(model::BUILD_RHS); }
+ void compute_pseudo_potential(void)
+ { md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
+
+ void perturbation(void) {
+ R res = gmm::vect_norm2(state), ampl = res / R(1000);
+ if (res == R(0)) ampl = 1E-30;
+ std::vector<R> V(gmm::vect_size(state));
+ gmm::fill_random(V);
+ gmm::add(gmm::scaled(V, ampl), state);
+ }
+ const VECTOR &residual(void) { return rhs; }
+ R residual_norm(void) { return gmm::vect_norm2(rhs); }
+
+ R line_search(VECTOR &dr, const gmm::iteration &iter) {
+ gmm::resize(stateinit, md.nb_dof());
+ gmm::copy(state, stateinit);
+ R alpha(1), res;
+ if (with_pseudo_potential) {
+ compute_pseudo_potential();
+ res = md.pseudo_potential();
+ } else {
+ res = residual_norm();
+ }
+ ls.init_search(res, iter.get_iteration());
+ do {
+ alpha = ls.next_try();
+ gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+
+ // Ici, on r%G�%@cup%G�%@re alpha et beta de l'enrichissement
+ alpha_md
+ = state[md.interval_of_variable("alpha").first()];
+ if (alpha < 1E-10) break;
+ if (with_pseudo_potential) {
+ compute_pseudo_potential();
+ res = md.pseudo_potential();
+ } else {
+ compute_residual();
+ res = residual_norm();
+ }
+ } while (!ls.is_converged(res));
+ if (alpha != ls.converged_value() || with_pseudo_potential) {
+ alpha = ls.converged_value();
+ gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+
+ // Ici, on recupere alpha et beta de l'enrichissement
+
+ alpha_md
+ = state[md.interval_of_variable("alpha").first()];
+
+ res = ls.converged_residual();
+ compute_residual();
+ }
+ cout << "alpha = " << alpha_md << endl ;
+ return alpha;
+ }
+
+ my_model_pb_comp(model &m, getfem::abstract_newton_line_search &ls_, VECTOR &st,
+ const VECTOR &rhs_, const MATRIX &K_, bool with_pseudo_pot = false )
+ : md(m), ls(ls_), state(st), rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
+
+ };
+
+ // static rmodel_plsolver_type rdefault_linear_solver(const model &md) {
+ // return default_linear_solver <model_real_sparse_matrix, model_real_plain_vector>(md);
+ // }
+
+ template <typename MATRIX, typename VECTOR, typename PLSOLVER>
+ void my_solve_comp(model &md, gmm::iteration &iter,
+ PLSOLVER lsolver,
+ getfem::abstract_newton_line_search &ls, const MATRIX &K,
+ const VECTOR &rhs, bool with_pseudo_potential = false) {
+
+ VECTOR state(md.nb_dof());
+
+ md.from_variables(state); // copy the model variables in the state vector
+
+ if (md.is_linear()) {
+ md.assembly(model::BUILD_ALL);
+ (*lsolver)(K, state, rhs, iter);
+ }
+ else {
+ my_model_pb_comp<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K,
+ with_pseudo_potential);
+ classical_Newton(mdpb, iter, *lsolver);
+ }
+
+ md.to_variables(state); // copy the state vector into the model variables
+ }
+
+
+ void my_solve_comp(model &md, gmm::iteration &iter,
+ rmodel_plsolver_type lsolver,
+ getfem::abstract_newton_line_search &ls,
+ bool with_pseudo_potential ) {
+ my_solve_comp(md, iter, lsolver, ls, md.real_tangent_matrix(),
+ md.real_rhs(), with_pseudo_potential );
+ }
+
+
+ void my_solve_comp(model &md, gmm::iteration &iter,
+ bool with_pseudo_potential = false ) {
+ getfem::default_newton_line_search ls;
+ my_solve_comp(md, iter, rdefault_linear_solver(md), ls, with_pseudo_potential );
+ }
+
+}
@@ -955,8 +1269,12 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
size_type nb_dof_rhs = mf_rhs.nb_dof();
size_type N = mesh.dim();
ls.reinit();
- size_type law_num = PARAM.int_value("LAW");
+ size_type LAW_NUM = PARAM.int_value("LAW");
+ size_type line_search_version = PARAM.int_value("line_search_version");
+ size_type PROBLEM_VERSION = PARAM.int_value("PROBLEM_VERSION");
+
//size_type newton_version = PARAM.int_value("newton_version");
+
base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
@@ -964,7 +1282,6 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
}
ls.touch();
-
mls.adapt();
mim.adapt();
mfls_u.adapt();
@@ -976,10 +1293,8 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
cout << "Setting up the singular functions for the enrichment\n";
- size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U",
- "Number of Enriched function for u"));
- size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P",
- "Number of Enriched function for p"));
+ size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+ size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
@@ -1185,9 +1500,12 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
}
}
- ///////////////////////////////////////////////////////////////
- // find the dofs on the upper right and lower right corners //
- ///////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////
+ // //
+ // find the dofs on the upper right and lower right corners //
+ // //
+ /////////////////////////////////////////////////////////////////////////
+
cout << "Find the dofs on the upper right and lower right corners" << endl;
scalar_type d1 = 1.0, d2 = 1.0;
size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
@@ -1212,25 +1530,28 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
/***********************************************/
// Choose the material law.
- getfem::abstract_hyperelastic_law *pl = 0;
- switch (law_num) {
- case 0: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
- case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
- case 2: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
- case 3: pl = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
- default: GMM_ASSERT1(false, "no such law");
+ getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
+ switch (LAW_NUM) {
+ case 0:
+ case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+ case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
+ default: GMM_ASSERT1(false, "no such law");
}
+
+ if (N == 2) {
+ cout << "2D plane strain hyper-elasticity\n";
+ pl = new getfem::plane_strain_hyperelastic_law(pl1);
+ } else pl = pl1;
+
pr.resize(pl->nb_params());
-
-// if (mixed_pressure)
-// cout << "Number of dof for P: " << mf_pe.nb_dof() << endl;
-// cout << "Number of dof for u: " << mf_u.nb_dof() << endl;
-
+
getfem::model model;
model.add_fem_variable("u", mf_u());
model.add_fixed_size_variable("alpha", 1);
+ if (mixed_pressure) {
model.add_fixed_size_variable("beta", 1);
-
+ }
model.add_initialized_fixed_size_data("coefficients", pr);
getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "coefficients");
@@ -1240,19 +1561,24 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
getfem::add_nonlinear_incompressibility_brick(model, mim, "u" , "p", size_type(-1));
}
// Add nonlinear elasticity optimazition brick
-
- add_nonlinear_elasticity_optim_brick(model, mim, "u" , "p", "alpha", "beta",
- *pl, "coefficients", ls);
-
- // getfem::mdbrick_nonlinear_elasticity<> ELAS(*pl, mim, mf_u(), pr);
- // getfem::mdbrick_nonlinear_incomp<> INCOMP(ELAS, mf_pe());
-
-
-
-
-
-
-
+ if (mixed_pressure) {
+ add_nonlinear_elasticity_optim_brick(model, mim, "u" , "p", "alpha", "beta", *pl, "coefficients", ls);
+ cout << "IIIIIncompressible Singular Search\n";
+ }
+ else{
+ add_nonlinear_elasticity_optim_compressible_brick(model, mim, "u" , "alpha", *pl, "coefficients", ls);
+ cout << "CCCCCompressible Singular Search\n";
+ }
+
+ /**************************************************************************/
+ /* */
+ /* Two problems with different boundary conditions can be solved */
+ /* */
+ /**************************************************************************/
+
+ switch (PROBLEM_VERSION){
+ case 0 :{
+ cout << "Solving Neumann condition problem *********"<< endl ;
// Defining the Neumann condition right hand side.
plain_vector F_Neumann1(nb_dof_rhs * N);
plain_vector F_Neumann2(nb_dof_rhs * N);
@@ -1260,189 +1586,211 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
plain_vector F_Neumann4(nb_dof_rhs * N);
// Neumann condition brick.
- for(size_type i = 0; i < F_Neumann1.size(); i=i+N)
- F_Neumann1[i] = AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann1.size(); i=i+N)
- F_Neumann1[i] = AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann2.size(); i=i+N)
- F_Neumann2[i] = AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann2.size(); i=i+N)
- F_Neumann2[i] = AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann3.size(); i=i+N)
- F_Neumann3[i] = -AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann3.size(); i=i+N)
- F_Neumann3[i] = -AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann4.size(); i=i+N)
- F_Neumann4[i] = -AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann4.size(); i=i+N)
- F_Neumann4[i] = -AMP_LOAD_Y;
+ for(size_type i = 0; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_X;
+ for(size_type i = 0; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_X;
+ for(size_type i = 0; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_X;
+ for(size_type i = 0; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_X;
model.add_initialized_fem_data("NeumannData1", mf_rhs,F_Neumann1 );
getfem::add_source_term_brick
- (model, mim, "u", "NeumannData1", NEUMANN1_BOUNDARY_NUM);
+ (model, mim, "u", "NeumannData1", BOUNDARY_NUM1);
model.add_initialized_fem_data("NeumannData2", mf_rhs,F_Neumann2 );
getfem::add_source_term_brick
- (model, mim, "u", "NeumannData2", NEUMANN2_BOUNDARY_NUM);
+ (model, mim, "u", "NeumannData2", BOUNDARY_NUM2);
model.add_initialized_fem_data("NeumannData3", mf_rhs,F_Neumann3 );
getfem::add_source_term_brick
- (model, mim, "u", "NeumannData3", NEUMANN3_BOUNDARY_NUM);
+ (model, mim, "u", "NeumannData3", BOUNDARY_NUM3);
- model.add_initialized_fem_data("NeumannData4", mf_rhs,F_Neumann3 );
+ model.add_initialized_fem_data("NeumannData4", mf_rhs,F_Neumann4 );
getfem::add_source_term_brick
- (model, mim, "u", "NeumannData4", NEUMANN4_BOUNDARY_NUM);
+ (model, mim, "u", "NeumannData4", BOUNDARY_NUM4);
- GMM_ASSERT1(N==2, "To be corrected for 3D computation");
- sparse_matrix BB(3, mf_u().nb_dof());
- BB(0, icorner1) = 1.0;
- BB(1, icorner1+1) = 1.0;
- BB(2, icorner2) = 1.0;
- std::vector<scalar_type> LRH(3);
- model.add_fixed_size_variable("dir", 3);
- getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
- // + nouvelle brique
+ GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+ sparse_matrix BB(3, mf_u().nb_dof());
+ BB(0, icorner1) = 1.0;
+ BB(1, icorner1+1) = 1.0;
+ BB(2, icorner2) = 1.0;
+ std::vector<scalar_type> LRH(3);
+ model.add_fixed_size_variable("dir", 3);
+ getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
+ } break;
+ case 1 :{
+ // Defining the Neumann condition right hand side.
+ cout << "Solving Dirichlet condition problem //////////"<< endl ;
+
+ plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
+ // for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+
+ for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
+
-
- // KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(4));
- // KILL_RIGID_MOTIONS.set_constraints_type(getfem::constraints_type(dir_with_mult));
+ model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
+
+ getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
- // Dirichlet condition brick.
- // getfem::mdbrick_Dirichlet<> DIRICHLET (KILL_RIGID_MOTIONS, DIRICHLET_BOUNDARY_NUM, mf_mult);
+ //Dirichlet condition brick
+
+ plain_vector F_Diri(nb_dof_rhs * N);
+
+ // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+ // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+
+ // gmm::resize(F_Diri, nb_dof_mult);
- // DIRICHLET.set_constraints_type(getfem::constraints_type(PARAM.int_value("DIRICHLET_VERSION")));
+ model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+ if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+ add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+ else
+ add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
- // getfem::mdbrick_abstract<> *final_model = &DIRICHLET;
+ //////////////////////////////////////////
+ // //
+ // Symetrie condition //
+ // //
+ //////////////////////////////////////////
-/*************************************/
-/* Generic solve. */
-/*************************************/
+ model.add_initialized_fixed_size_data("Dirichletsymdata",
+ plain_vector(N, 0.0));
+ plain_vector HH(N*N); HH[0] = 1.0;
+ model.add_initialized_fixed_size_data("Hdata", HH);
- // getfem::standard_model_state MS(*final_model);
- // size_type maxit = PARAM.int_value("MAXITER");
- // gmm::iteration iter;
-
- //size_type stnst = PARAM.int_value("stnst");
-
- //if (stnst==1) {
-
- /**********************/
- /* Step loading */
- /**********************/
- // cout << "By step amigoo###################################<<<<<>>>>>>######" << endl;
- // cout << "Nb de Step " << nb_step <<endl;
- // for (int step = 0; step < nb_step; ++step) {
- // plain_vector DF(F);
-
- //gmm::copy(gmm::scaled(F, (step+1.)/(scalar_type)nb_step), DF);
- //NEUMANN4.source_term().set(DF);
-
- /************************************/
- /* increment imposed displacement */
- /************************************/
-
- //KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(3));
+ getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
- /********************************************************/
- /* let the default non-linear solve (Newton) do its job */
- /********************************************************/
+ }break;
+ default: GMM_ASSERT1(false, "no such problem");
+ }
- // cout << "step " << step << ", number of variables : " << final_model->nb_dof() << endl;
- // cout << "DF " << DF << endl;
- // iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")), maxit ? maxit : 40000);
-
- // gmm::abstract_newton_line_search alnrs;
- // gmm::simplest_newton_line_search silnrs;
- // gmm::default_newton_line_search dlnrs;
- // gmm::systematic_newton_line_search sylnrs;
-
- // getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
-
- // pl->reset_unvalid_flag();
- // final_model->compute_residual(MS);
- // if (pl->get_unvalid_flag())
- // GMM_WARNING1("The solution is not completely valid, the determinant "
- // "of the transformation is negative on "
- // << pl->get_unvalid_flag() << " gauss points");
-
- //}
-
- //}
- //else{
- //cout << "Resolution direct =============D=I=R=E=C=T====================> " << endl;
- /****************/
- /*Sans iteration*/
- /****************/
- // iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
-// maxit ? maxit : 40000);
-
-
-// // gmm::abstract_newton_line_search alnrs;
-// gmm::simplest_newton_line_search silnrs;
-// gmm::default_newton_line_search dlnrs;
-// gmm::systematic_newton_line_search sylnrs;
-
-// switch (newton_version){
-
-// // case 0: getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), alnrs);
-// case 1:{
-// getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), silnrs);
-// cout << "============================ " << endl;
-// cout << "=:simplest_newton_line_search= " << endl;
-// cout << "============================ " << endl;
-// }break;
-// case 2:{
-// getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
-// cout << "============================ " << endl;
-// cout << "=default_newton_line_search= " << endl;
-// cout << "============================ " << endl;
-// }break;
-
-// case 3: {
-// getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), sylnrs);
-// cout << "=============================== " << endl;
-// cout << "=systematic_newton_line_search= " << endl;
-// cout << "=============================== " << endl;
-// }break;
-// default: GMM_ASSERT1(false, "No such newton");
-// }
-// pl->reset_unvalid_flag();
-// final_model->compute_residual(MS);
-// if (pl->get_unvalid_flag())
-// GMM_WARNING1("The solution is not completely valid, the determinant "
-// "of the transformation is negative on "
-// << pl->get_unvalid_flag() << " gauss points");
-// }
+
+
+
+ // + nouvelle brique
+
+
+
+
+
gmm::iteration iter(residual, 1, 40000);
cout << "Solving..." << endl;
iter.init();
- alpha_md = 0.5; beta_md = 0.5;
+ // alpha_md = 0.5; beta_md = -0.3;
std::vector<scalar_type> alpha_v(1), beta_v(1);
- alpha_v[0] = beta_v[0] = 0.5;
+ alpha_v[0] = alpha_md; beta_v[0] = beta_md;
gmm::copy(alpha_v, model.set_real_variable("alpha"));
- gmm::copy(beta_v, model.set_real_variable("beta"));
+ if (mixed_pressure) {
+ gmm::copy(beta_v, model.set_real_variable("beta"));
+ }
gmm::fill_random(model.set_real_variable("u"));
gmm::scale(model.set_real_variable("u"), 1e-4);
+
+ if (mixed_pressure) {
gmm::fill_random(model.set_real_variable("p"));
gmm::scale(model.set_real_variable("p"), 1e-4);
+ }
+
+
+
+ // Recuperation de la matrice tangente
+ // gmm::csc_matrix<double> TM;
+ // cout << " Recuperation de la matrice tangente... " << endl;
+ // cout << " Before copy Matrix TM : " << TM << endl;
+ // gmm::copy(model.real_tangent_matrix(),TM);
+ // // cout << " After copy Matrix TM : " << TM(0,0) << endl;
+ // cout << " Here befor : " << endl;
+ // MatrixMarket_save("Matrix_Market_Tangent_matrix_", TM);
+ // cout << " Here after " << endl;
+ // Harwell_Boeing_save("Harwell_Boeing_Tangent_matrix_", TM);
+
+
+ getfem::simplest_newton_line_search simls(size_t(-1), 6.0/5.0, 0.1, 3.0/5.0);
+ getfem::default_newton_line_search dlnrs;
+ getfem::systematic_newton_line_search sylnrs;
+ getfem::quadratic_newton_line_search qdlnrs;
+
+
+// Line search version
+
+cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+
+ case 1:{
+ if (mixed_pressure) {
+ getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls, false);
+ }
+ else
+ {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls, false);}
+ }break;
+
+ case 2:{
+ if (mixed_pressure) {
+ getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs, false); }
+ else
+ {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs, false);}
+
+ }break;
- getfem::my_solve(model, iter);
+ case 3: {
+ if (mixed_pressure) {
+ getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs, false);
+ }
+ else
+ {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs, false);}
+
+ }break;
+
+ case 4: {
+ if (mixed_pressure) {
+ getfem::my_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), qdlnrs, false);
+ }
+ else
+ {getfem::my_solve_comp(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), qdlnrs, false);}
+ }break;
+
+
+
+
+ default: GMM_ASSERT1(false, "No such line search");
+ }
+
+
+
+
+
+// Solution extration
+
gmm::resize(U, mf_u().nb_dof());
gmm::copy(model.real_variable("u"), U);
-
cout << "alpha = " << alpha_md << endl;
+ if (mixed_pressure) {
cout << "beta = " << beta_md << endl;
-
+ }
+
+
+
// /*************************************/
@@ -1770,3 +2118,5 @@ int main(int argc, char *argv[]) {
return 0;
}
+
+
diff --git a/contrib/xfem_large_strain/vertex_large_strain.param b/contrib/xfem_large_strain/vertex_large_strain.param
index af18eaf..3df5b3b 100644
--- a/contrib/xfem_large_strain/vertex_large_strain.param
+++ b/contrib/xfem_large_strain/vertex_large_strain.param
@@ -1,78 +1,184 @@
-% -*- matlab -*- (enables emacs matlab mode)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% parameters for program nonlinear elastostatic problem %
+% parameters for program crack %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%% pde parameters : %%%%%
-LX = .5; % size in X.
-LY = 1.0; % size in Y.
-LZ = 2.0; % size in Z.
-P1 = 100.; % First elastic coefficient.
-P2 = 10.; % Second elastic coefficient.
-P3 = -1.4; % Third elastic coefficient.
-LAW = 2; % 0 : SaintVenant-Kirchhoff
- % 1 : SaintVenant-Kirchhoff+incompressibility
- % 2 : Ciarlet-Geymonat
- % 3 : Mooney-Rivlin (+incompressibility)
-
-FORCEX = 0; % Amplitude of the external force
-FORCEY = -0.050;
-FORCEZ = 0;
-TORSION = 2.65; %3.14;
-EXTENSION = 0.0;
+
+MU = 10.0; % Lame coefficient.
+QUAD = 0;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Nonlinear elasticity %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Elastic coefficients %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Just for indication %
+%Ogden mu=4.225E05 %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Mooney-Rivlin. %
+% %%%%%%%%%%%
+%W(F)=C_10(I_1-3)+C_01(I_2-3) %
+%For rubbers the Numerical Value are %
+% C_10 =0.183 MPa. %
+% C_01 =0.0034 MPa. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ P1 = 1.83 ; % First elastic coefficient.
+ P2 = 0.034 ; % Second elastic coefficient.
+ P3 = 0 ; % Third elastic coefficient.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Saint-Venant kirchoff %
+% %
+% W = lambda*0.5*trace(E)^2 + mu*tr(E^2) %
+% %
+% For rubbers the Numerical Value are %
+% lamda = P1 = 1000000 MPa. %
+% Mu = P2 = 0.33333 MPa. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% P1 = 1000000 ; % First elastic coefficient.%
+% P2 = 0.33333 ; % Second elastic coefficient.%
+% P3 = 0 ; % Third elastic coefficient.%
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+LAW = 2 ; % 1 : SaintVenant-Kirchhoff + incompressibility
+ % 2 : Ciarlet_Geymonat
+ % 3 : Mooney_Rivlin + incompressibility
+
+
+BIMATERIAL = 0; % 1 : To enable the bimaterial case
+
+if BIMATERIAL
+ MU_UP = 10.0;
+ MU_DOWN = 1.0;
+end
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Line search version %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+line_search_version = 2 % 1 for simplest_newton_line_search
+ % 2 for default_newton_line_search
+ % 3 for systematic_newton_line_search
+ % 4 for Quadratic_newton_line_search
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Energy criteria %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0 % 1 Enable energy criteria
+ % else Disable energy criteria
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Hyperelastic law %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+REFINEMENT_RADIUS = 0.05 ; % REF: 0.4; % 0 for no refinement
+REFINEMENT_PROCESS = 1 ; % nb of desired refinement steps
+
+REFERENCE_TEST = 0; % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0; % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0; % Compute or not the inf_sup condition
+
%%%%% discretisation parameters : %%%%%
-MESH_TYPE = 'GT_PK(2,1)'; % linear triangles
-%MESH_TYPE = 'GT_QK(3,1)'; % linear rectangles
-%MESH_TYPE = 'GT_PRISM(3,1)'; % 3D prisms
-NX = 2; % space step.
-NZ = 5;
NB_ENR_FUNC_U = 2;
NB_ENR_FUNC_P = 2;
+NX = 4 ; % space step.
+MESH_NOISED = 0; % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0; % Load in X direction.
+AMP_LOAD_Y = 0.11; % Load in Y direction.
+nb_step = 6;
+NOISY = 0;
+stnst = 0; % 1 Applying load progressively (don't work)
+
+if (~QUAD)
+ MESH_TYPE = 'GT_PK(2,1)'; % linear triangles
+ FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2,1)';
+ %FEM_TYPE = 'FEM_PK(2,2)'; % PK element %REF: P3
+ DATA_FEM_TYPE = 'FEM_PK(2,1)';
+ INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
+ FEM_TYPE_P = 'FEM_PK(2,1)';
+ MORTAR_FEM_TYPE = FEM_TYPE;
+else
+ % MESH_TYPE = 'GT_LINEAR_QK(2)';
+ MESH_TYPE = 'GT_QK(2, 1)';
+ FEM_TYPE = 'FEM_QK(2,1)'; % Q1 fem for quadrangles
+ DATA_FEM_TYPE = 'FEM_QK(2,1)';
+ INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
+ FEM_TYPE_P = 'FEM_QK(2,1)';
+ MORTAR_FEM_TYPE = FEM_TYPE;
+end;
+
+FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
+
+MIXED_PRESSURE = 0; % Mixed version or not.
+DIRICHLET_VERSION = 0; % 0 = multipliers, 1 = penalization, 2 = elimination
+
+% integration meth. for sub-simplexe of elements crossed by the level-set
+SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
+
+% integration meth. for quasi-polar integration of sub-simplexes
+% adjascent to the level-set
+% (comment it to disable quasipolar integration). Should be a
+% method defined on a square for 2D, or defined on a prism for 3D.
+% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
+SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 9)';
+
+% Enable the following 2 lines to use the precomputed solution as enrichement
+% GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
+% GLOBAL_FUNCTION_U = "bimaterial_crack12.U"
+
+
+ENRICHMENT_OPTION = 3 ; % 0 = Pas d'enrichissement
+ % 1 = standard XFEM on a fixed zone
+ % 2 = global functions with mortar junction
+ % 3 = global functions with cutoff
+ % 4 = spider fem alone
+ % 5 = spider fem enrichment
+
+
+RADIUS_ENR_AREA = 0.2; % For XFEM and the mortar junction
+
+CUTOFF_FUNC = 1; % 0 for the exponential cutoff.
+ % 1 for a 3rd degree polynomial cutoff
+ % 2 for a 5th degree polynomial cutoff
+
+CUTOFF = 0.2;
+CUTOFF1 = 0.01;
+CUTOFF0 = 0.49;
+
+SPIDER_RADIUS = 0.4;
+SPIDER_NR = 10; % size of the cartesian mesh in r for spider fem
+SPIDER_NTHETA = 10; % size of the cartesian mesh in theta for spider fem
+SPIDER_K=1; % order of the spider fem
+SPIDER_BIMAT_ENRICHMENT = 0; % 0 for a sqrt spider enrichment
+ % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
+
+RESIDUAL = 1E-9; % residual for iterative methods if any.
+MAXITER = 5000;
+%%%%% saving parameters %%%%%
+% STD= Standard XFEM %
+% COE= Cutoff_enrichement %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ROOTFILENAME = 'Singular_search_test'; % Root of data files.
+VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
+
-MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
-
-FEM_TYPE = 'FEM_PK(2,2)'; % P1 for triangles
-%FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(3, 1)';
-%FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(3, 2)';
-%FEM_TYPE = 'FEM_QK(3,1)'; % Q1 fem for quadrangles
-%FEM_TYPE = 'FEM_PRODUCT(FEM_PK(2,1),FEM_PK(1,1))'; % tensorial product of FEM for prisms
-%FEM_TYPE = 'FEM_PK_HIERARCHICAL(2,2)'; % Hierarchical PK on simplexes
-%FEM_TYPE = 'FEM_PK_HIERARCHICAL_COMPOSITE(2,1,2)'; % Hierarchical PK with s divisions
-
-FEM_TYPE_P = 'FEM_PK(2,1)'; % P1 for triangles
-%FEM_TYPE_P = 'FEM_PK_DISCONTINUOUS(3,1)'; % Discontinuous P1 for triangles
-
-% DATA_FEM_TYPE must be defined if your main FEM is not Lagrangian
-%DATA_FEM_TYPE = 'FEM_PK(2,1)';
-DATA_FEM_TYPE = 'FEM_PK(2,2)'
-
-
-%INTEGRATION = 'IM_TETRAHEDRON(6)'
-INTEGRATION = 'IM_TRIANGLE(6)'; % quadrature rule for polynomials up
- % to degree 6 on triangles
-%INTEGRATION = 'IM_EXACT_SIMPLEX(2)'; % exact integration on triangles
-%INTEGRATION = 'IM_NC(2,6)'; % newton-cotes of degree 6 on triangles
-%INTEGRATION = 'IM_NC_PARALLELEPIPED(2,6)'; % newton-cotes, degree 6,
- % quadrangles
-%INTEGRATION = 'IM_NC_PRISM(3,12)'; % newton-cotes, degree 12, prims
-%INTEGRATION = 'IM_GAUSS1D(10)'; % Gauss-Legendre integration on the
- % segment of order 10
-%INTEGRATION = 'IM_GAUSSLOBATTO1D(10)'; % Gauss-Lobatto-Legendre
- % integration on the segment
- % of order 10
-%INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(3,5)'; % Product of two
- % IM_GAUSS1D(10) (for
- % quadrangles)
-%INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS1D(5), 3)';
-%INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(7), 3)';
-
-RESIDUAL = 1E-6; % residu for iterative solvers.
-MAXITER = 500;
-DIRICHLET_VERSION=0;
-NBSTEP = 5;
-%%%%% saving parameters %%%%%
-ROOTFILENAME = 'nonlinear_elastostatic'; % Root of data files.
-VTK_EXPORT = 1 % export solution to a .vtk file ?
-NOISY=2
diff --git a/contrib/xfem_large_strain/xfem_large_strain.cc b/contrib/xfem_large_strain/xfem_large_strain.cc
index 3dbfe29..331aa89 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.cc
+++ b/contrib/xfem_large_strain/xfem_large_strain.cc
@@ -1,30 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
/**
- * Linear Elastostatic problem with a crack.
- *
- * This program is used to check that getfem++ is working. This is also
- * a good example of use of Getfem++.
- */
+ Nonlinear elastostatic crack problem
+ This is an example of use of Getfem++.
+*/
#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
@@ -39,22 +37,24 @@
#include "getfem/getfem_spider_fem.h"
#include "getfem/getfem_mesh_fem_sum.h"
#include "getfem/getfem_superlu.h"
+#include "getfem_nonlinear_elastoptim.h" /*Optimization procedure to evaluate the order of singularities*/
#include "gmm/gmm.h"
#include "gmm/gmm_inoutput.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
using bgeot::base_vector;
using bgeot::scalar_type; /* = double */
using bgeot::size_type; /* = unsigned long */
-using bgeot::dim_type;
+using bgeot::dim_type;
using bgeot::short_type;
-using bgeot::base_vector;
using bgeot::base_matrix; /* small dense matrix. */
-
-
/* definition of some matrix/vector types. These ones are built
* using the predefined types in Gmm++
*/
@@ -63,35 +63,272 @@ typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
typedef getfem::modeling_standard_plain_vector plain_vector;
/**************************************************************************/
-/* Structure for the crack problem. */
+/* */
+/* Enrichment. */
+/* */
/**************************************************************************/
-struct crack_problem {
+scalar_type alpha_md = 0.5;
+scalar_type beta_md = 0.5;
+
+struct generic_u_singular_xy_function : public getfem::abstract_xy_function {
+ int n;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ generic_u_singular_xy_function(int n_) : n(n_) {}
+ };
+
+
+scalar_type
+generic_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+
+ if (n <= 0)
+ return pow(r, alpha_md-n) * cos(scalar_type(n) * theta * 0.5);
+ else
+ return pow(r, alpha_md+n) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+ scalar_type theta = atan2(y,x);
+ base_small_vector res(2);
+ scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+ scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+ if (n <= 0) {
+ res[0] = alpha_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+ res[1] = alpha_md * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+ } else {
+ res[0] = alpha_md * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+ res[1] = alpha_md * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+ }
+
+ gmm::scale(res, pow(r, alpha_md - 2));
+ return res;
+}
+
+
+base_matrix generic_u_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+struct generic_p_singular_xy_function : public getfem::abstract_xy_function {
+ int n;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ generic_p_singular_xy_function(int n_) : n(n_) {}
+};
+
+scalar_type
+generic_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+
+ if (n <= 0)
+ return pow(r, beta_md) * cos(scalar_type(n) * theta * 0.5);
+ else
+ return pow(r, beta_md) * sin(scalar_type(n) * theta * 0.5);
+}
+
+
+base_small_vector
+generic_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+ scalar_type theta = atan2(y, x);
+ base_small_vector res(2);
+ scalar_type cos_n_2 = cos(scalar_type(n) * theta * 0.5);
+ scalar_type sin_n_2 = sin(scalar_type(n) * theta * 0.5);
+
+ if (n <= 0) {
+ res[0] = beta_md * x * cos_n_2 - scalar_type(n) * 0.5 * y * sin_n_2;
+ res[1] = beta_md * y * cos_n_2 + scalar_type(n) * 0.5 * x * sin_n_2;
+ } else {
+ res[0] = beta_md * x * sin_n_2 + scalar_type(n) * 0.5 * y * cos_n_2;
+ res[1] = beta_md * y * sin_n_2 - scalar_type(n) * 0.5 * x * cos_n_2;
+ }
+
+ gmm::scale(res, pow(r, beta_md - 2));
+ return res;
+}
+
+
+base_matrix generic_p_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*////////////////////////////////////////////////////////////////////////
+// //
+// Displacement Singular functions for crack problem from Stephenson article 1982 //
+// //
+///////////*/*/*/*////////////////////////////////////////////////////////////////////////
+
+struct steph_u_singular_xy_function : public getfem::abstract_xy_function {
+ unsigned l;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ steph_u_singular_xy_function(unsigned l_) : l(l_) {}
+ };
+
+
+scalar_type steph_u_singular_xy_function::val(scalar_type x, scalar_type y) const {
+
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+ scalar_type res = 0;
+ switch(l){
+ case 0 : res = r*sin(theta*0.5)*sin(theta*0.5) ; break;
+ case 1 : res = sqrt(r)*sin(theta*0.5) ; break;
+ default: GMM_ASSERT2(false, "arg");
+ }
+ return res;
+}
+
+
+base_small_vector steph_u_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+
+ scalar_type theta = atan2(y, x);
+ base_small_vector res(2);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+
+ switch(l){
+ case 0 :
+ res[0] = sin(theta*0.5)*sin(theta*0.5);
+ res[1] = sin(theta*0.5)*cos(theta*0.5);
+ break;
+ case 1 :
+ res[0] = (-1/sqrt(r))*0.5*sin(theta*0.5) ;
+ res[1] = 0.5*sqrt(r)*sin(theta*0.5);
+ break;
+
+ default: GMM_ASSERT2(false, "arg");
+ }
+
+ return res;
+}
+
+
+base_matrix steph_u_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+
+///////////*/*/*/*////////////////////////////////////////////////////////////////////
+// //
+// Pressure Singular functions for crack problem from Stephenson article 1982 //
+// //
+///////////*/*/*/*////////////////////////////////////////////////////////////////////
+
+struct steph_p_singular_xy_function : public getfem::abstract_xy_function {
+ unsigned l;
+ virtual scalar_type val(scalar_type x, scalar_type y) const;
+ virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+ virtual base_matrix hess(scalar_type x, scalar_type y) const;
+ steph_p_singular_xy_function(unsigned l_) : l(l_) {}
+ };
+
- enum { DIRICHLET_BOUNDARY_NUM = 0, NEUMANN1_BOUNDARY_NUM = 1, NEUMANN2_BOUNDARY_NUM=2, NEUMANN3_BOUNDARY_NUM=3, NEUMANN4_BOUNDARY_NUM=4, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
- getfem::mesh mesh; /* the mesh */
+scalar_type steph_p_singular_xy_function::val(scalar_type x, scalar_type y) const {
+
+ scalar_type r = sqrt(x*x + y*y);
+ if (r < 1e-10) return 0;
+ scalar_type theta = atan2(y, x);
+ scalar_type res = 0;
+ switch(l){
+ case 0 : res = 1/r ; break;
+ case 1 : res = sin(theta*0.5)/sqrt(r) ; break;
+ default: GMM_ASSERT2(false, "arg");
+ }
+ return res;
+}
+
+
+base_small_vector steph_p_singular_xy_function::grad(scalar_type x, scalar_type y) const {
+ scalar_type r = sqrt(x*x + y*y);
+ scalar_type theta = atan2(y, x);
+ base_small_vector res(2);
+ if (r < 1e-10) {
+ GMM_WARNING0("Warning, point close to the singularity (r=" << r << ")");
+ }
+
+ switch(l){
+ case 0 :
+ res[0] =- 1/(r*r) ;
+ res[1] = 0 ;
+ break;
+ case 1 :
+ res[0] = (-0.5*sin(theta*0.5))/(r*sqrt(r)) ;
+ res[1] = (0.5*sin(theta*0.5))/(r*sqrt(r));
+ break;
+
+ default: GMM_ASSERT2(false, "arg");
+ }
+
+ return res;
+}
+
+
+base_matrix steph_p_singular_xy_function::hess(scalar_type, scalar_type)
+ const {
+ GMM_ASSERT1(false, "To be done !");
+}
+
+
+
+
+
+/*
+ structure for the elastostatic problem
+*/
+struct cr_nl_elastostatic_problem {
+
+ enum { BOUNDARY_NUM0 = 0, BOUNDARY_NUM1 = 1, BOUNDARY_NUM2 = 2, BOUNDARY_NUM3 = 3, BOUNDARY_NUM4 = 4, PART_CAL_ERROR = 5,DIRICHLET_BOUND=6, MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+ getfem::mesh mesh; /* the mesh */
getfem::level_set ls; /* The two level sets defining the crack. */
- getfem::mesh_level_set mls; /* the integration methods. */
- getfem::mesh_im_level_set mim; /* the integration methods. */
+ getfem::mesh_level_set mls; /* the integration methods for cutted element. */
+ getfem::mesh_im_level_set mim;
getfem::mesh_fem mf_pre_u, mf_pre_mortar;
getfem::mesh_fem mf_mult, mf_mult_p;
+
getfem::mesh_fem_level_set mfls_u,mfls_mortar;
getfem::mesh_fem_global_function mf_sing_u;
getfem::mesh_fem mf_partition_of_unity;
getfem::mesh_fem_product mf_product;
- getfem::mesh_fem_sum mf_u_sum;
+ getfem::mesh_fem_sum mf_u_sum/*, mf_u_sumCE*/;
getfem::mesh_fem mf_pre_p; /* mesh_fem for the pressure for mixed form */
getfem::mesh_fem_level_set mfls_p; /* mesh_fem for the pressure enriched with H. */
getfem::mesh_fem_global_function mf_sing_p;
getfem::mesh_fem_product mf_product_p;
- getfem::mesh_fem_sum mf_p_sum;
-
- scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y,nb_step; /* elastic coefficients,Amplitude of load, number of step loadings*/
+ getfem::mesh_fem_sum mf_p_sum /*, mf_p_sumCE*/;
base_small_vector cracktip;
-
+
+ scalar_type pr1, pr2, pr3, AMP_LOAD_X, AMP_LOAD_Y, nb_step;
+
struct spider_param {
@@ -107,26 +344,18 @@ struct crack_problem {
spider_param spider;
- getfem::mesh_fem mf_us;
- //getfem::mesh_fem mf_p;
+ getfem::mesh_fem mf_us;
getfem::mesh_fem& mf_u() { return mf_u_sum; }
- //getfem::mesh_fem& mfls_p() { return mf_p_sum; }
getfem::mesh_fem& mf_pe() { return mf_p_sum; }
- // getfem::mesh_fem& mf_u() { return mf_us; }
+ getfem::mesh_fem mf_rhs;
- //scalar_type mu; /* Lame coefficients. */
- getfem::mesh_fem mf_rhs; /* mesh_fem for the right hand side (f(x),..) */
-
-
- int bimaterial; /* For bimaterial interface fracture */
- //double mu_up, mu_down; /*Lame coeff for bimaterial case*/
- scalar_type residual; /* max residual for the iterative solvers */
+ scalar_type residual; /* max residual for the iterative solvers */
bool mixed_pressure;
+ //bool sing_search;
unsigned dir_with_mult;
scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
-
size_type cutoff_func;
typedef enum { NO_ENRICHMENT=0,
@@ -138,7 +367,7 @@ struct crack_problem {
enrichment_option_enum enrichment_option;
std::string datafilename;
-
+
int reference_test;
std::string GLOBAL_FUNCTION_MF, GLOBAL_FUNCTION_U, GLOBAL_FUNCTION_P;
@@ -146,18 +375,17 @@ struct crack_problem {
bool solve(plain_vector &U, plain_vector &P);
void init(void);
- crack_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls),
- mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
- mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),
- mf_sing_u(mesh),
- mf_partition_of_unity(mesh),
- mf_product(mf_partition_of_unity, mf_sing_u),
- mf_u_sum(mesh), mf_pre_p(mesh), mfls_p(mls, mf_pre_p),
- mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p),
- mf_p_sum(mesh),
- mf_us(mesh), /*mf_pe(mesh),*/ mf_rhs(mesh)
- {}
-
+ cr_nl_elastostatic_problem(void) : ls(mesh, 1, true), mls(mesh), mim(mls),
+ mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh), mf_mult_p(mesh),
+ mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),
+ mf_sing_u(mesh),
+ mf_partition_of_unity(mesh),
+ mf_product(mf_partition_of_unity, mf_sing_u),
+ mf_u_sum(mesh),
+ mf_pre_p(mesh), mfls_p(mls, mf_pre_p),
+ mf_sing_p(mesh), mf_product_p(mf_partition_of_unity, mf_sing_p),
+ mf_p_sum(mesh),
+ mf_us(mesh), mf_rhs(mesh) {}
};
std::string name_of_dof(getfem::pdof_description dof) {
@@ -197,28 +425,25 @@ std::string name_of_dof(getfem::pdof_description dof) {
}
+
+
+
+
/* Read parameters from the .param file, build the mesh, set finite element
- * and integration methods and selects the boundaries.
- */
-void crack_problem::init(void) {
- std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
- std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
- std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P","FEM name p");
- std::string INTEGRATION = PARAM.string_value("INTEGRATION",
- "Name of integration method");
- std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION",
- "Name of simplex integration method");
- std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION");
-
- enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION",
- "Enrichment option"));
-
- /* Affichage */
+ and integration methods and selects the boundaries.
- cout << "MESH_TYPE=" << MESH_TYPE << "\n";
- cout << "FEM_TYPE=" << FEM_TYPE << "\n";
- cout << "FFEM_TYPE_P =" << FEM_TYPE_P <<"\n";
- cout << "INTEGRATION=" << INTEGRATION << "\n";
+ (this is boilerplate code, not very interesting)
+ */
+void cr_nl_elastostatic_problem::init(void) {
+
+ std::string MESH_TYPE = PARAM.string_value("MESH_TYPE", "Mesh type");
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE", "FEM name");
+ std::string FEM_TYPE_P = PARAM.string_value("FEM_TYPE_P", "FEM name for the pressure");
+ std::string INTEGRATION = PARAM.string_value("INTEGRATION", "Name of integration method");
+ std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION", "Name of simplex integration method");
+ std::string SINGULAR_INTEGRATION = PARAM.string_value("SINGULAR_INTEGRATION", "Singular integration");
+ enrichment_option = enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION", "Enrichment option"));
+ /* Lecture des parametres */
pr1 = PARAM.real_value("P1", "First Elastic coefficient");
pr2 = PARAM.real_value("P2", "Second Elastic coefficient");
pr3 = PARAM.real_value("P3", "Third Elastic coefficient");
@@ -226,28 +451,37 @@ void crack_problem::init(void) {
AMP_LOAD_Y = PARAM.real_value("AMP_LOAD_Y", "Amp load y");
nb_step = PARAM.real_value("nb_step", "nb_step");
reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+ residual = PARAM.real_value("RESIDUAL"); if (residual == 0.) residual = 1e-10;
+
+ /* Affichage */
+
+ cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "FEM_TYPE_P =" << FEM_TYPE_P <<"\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
cout << "AMP_LOAD_X = " << AMP_LOAD_X << "\n";
cout << "AMP_LOAD_Y = " << AMP_LOAD_Y << "\n";
-
+ cout << "Reference_test " << AMP_LOAD_Y << "\n";
+
/* First step : build the mesh */
-
- bgeot::pgeometric_trans pgt = bgeot::geometric_trans_descriptor(MESH_TYPE);
+
+ bgeot::pgeometric_trans pgt = bgeot::geometric_trans_descriptor(MESH_TYPE);
size_type N = pgt->dim();
std::vector<size_type> nsubdiv(N);
- std::fill(nsubdiv.begin(),nsubdiv.end(),
- PARAM.int_value("NX", "Nomber of space steps "));
-
- long int NX_aff=PARAM.int_value("NX", "Nomber of space steps ");
+
+ long int NX_aff = PARAM.int_value("NX", "Nomber of space steps ");
+ std::fill(nsubdiv.begin(),nsubdiv.end(),NX_aff);
cout << "Number of space step NX= " << NX_aff << "\n";
- getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
- PARAM.int_value("MESH_NOISED") != 0);
+
+ getfem::regular_unit_mesh(mesh, nsubdiv, pgt, PARAM.int_value("MESH_NOISED") != 0);
+
base_small_vector tt(N); tt[1] = -0.5;
- mesh.translation(tt);
+ mesh.translation(tt);
- cracktip.resize(2); // Coordonn�e du fond de fissure
- cracktip[0] = 0.9;
+ cracktip.resize(2); // Coordonnee du fond de fissure
+ cracktip[0] = 0.5;
cracktip[1] = 0.;
-
scalar_type refinement_radius;
refinement_radius = PARAM.real_value("REFINEMENT_RADIUS", "Refinement Radius");
cout << "refinement_radius= " << refinement_radius << "\n";
@@ -273,40 +507,33 @@ void crack_problem::init(void) {
cout << "refinement process completed." << endl ;
}
- mesh.write_to_file("toto.mesh");
-
-
- datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
- residual = PARAM.real_value("RESIDUAL");
- if (residual == 0.) residual = 1e-10;
+ mesh.write_to_file("le_maillage.mesh");
+ if (residual == 0.) residual = 1e-10;
enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
"radius of the enrichment area");
GLOBAL_FUNCTION_MF = PARAM.string_value("GLOBAL_FUNCTION_MF");
GLOBAL_FUNCTION_U = PARAM.string_value("GLOBAL_FUNCTION_U");
GLOBAL_FUNCTION_P = PARAM.string_value("GLOBAL_FUNCTION_P");
-
-
-
-
cutoff_func = PARAM.int_value("CUTOFF_FUNC", "cutoff function");
-
cutoff_radius = PARAM.real_value("CUTOFF", "Cutoff");
cutoff_radius1 = PARAM.real_value("CUTOFF1", "Cutoff1");
- cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0");
+ cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0");
mf_u().set_qdim(dim_type(N));
-
/* set the finite element on the mf_u */
getfem::pfem pf_u =
getfem::fem_descriptor(FEM_TYPE);
getfem::pintegration_method ppi =
getfem::int_method_descriptor(INTEGRATION);
+
+ /* set the finite element and integration method on the singular mesh */
+
getfem::pintegration_method simp_ppi =
getfem::int_method_descriptor(SIMPLEX_INTEGRATION);
getfem::pintegration_method sing_ppi = (SINGULAR_INTEGRATION.size() ?
getfem::int_method_descriptor(SINGULAR_INTEGRATION) : 0);
-
+
mim.set_integration_method(mesh.convex_index(), ppi);
mls.add_level_set(ls);
@@ -318,28 +545,27 @@ void crack_problem::init(void) {
mf_mult.set_qdim(dim_type(N));
mf_partition_of_unity.set_classical_finite_element(1);
- mixed_pressure =
- (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
- dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION",
- "Version of Dirichlet"));
+ mixed_pressure = (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
+ //sing_search = (PARAM.int_value("SINGULAR_SEARCH","Singular search or not.") != 0);
+ dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSION", "Version of Dirichlet"));
+
if (mixed_pressure) {
getfem::pfem pf_p =
getfem::fem_descriptor(FEM_TYPE_P);
+ mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
+ mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
+
+ }
+
- mf_pre_p.set_finite_element(mesh.convex_index(), pf_p);
- mf_mult_p.set_finite_element(mesh.convex_index(), pf_p);
- // mf_p.set_finite_element(mesh.convex_index(), pf_p);
-
-
- }
/* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
not used in the .param file */
std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
if (data_fem_name.size() == 0) {
- GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM. "
- << "In that case you need to set "
+ GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM"
+ ". In that case you need to set "
<< "DATA_FEM_TYPE in the .param file");
mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
} else {
@@ -347,26 +573,47 @@ void crack_problem::init(void) {
getfem::fem_descriptor(data_fem_name));
}
+ /* set the finite element on mf_coef. Here we use a very simple element
+ * since the only function that need to be interpolated on the mesh_fem
+ * is f(x)=1 ... */
+
+
/* set boundary conditions
* (Neuman on the upper face, Dirichlet elsewhere) */
+
+/*******************************************************************************/
+/* Select the part of convex where the error will be calculation */
+/*******************************************************************************/
+
+
+ //for(getfem::mr_visitor it_err(mesh.convex_index()); !it_err.finished(); ++it_err){
+
+ //base_node un1_cal_err = mesh.normal_of_face_of_convex(it_err.cv(), it_err.f());
+ //un1_cal_err /= gmm::vect_norm2(un1_cal_err);
+ //if (un1_cal_err[1]> -0.5) mesh.region(PART_CAL_ERROR).add(it_err.cv());
+ //
+ // }
+
+
+
cout << "Selecting Neumann and Dirichlet boundaries\n";
getfem::mesh_region border_faces;
getfem::outer_faces_of_mesh(mesh, border_faces);
- for (getfem::mr_visitor i(border_faces); !i.finished(); ++i) {
-
- base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
+ for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+ assert(it.is_face());
+ base_node un = mesh.normal_of_face_of_convex(it.cv(), it.f());
un /= gmm::vect_norm2(un);
-
- if (un[0] > 0.5) mesh.region(NEUMANN1_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[1] > 0.5) mesh.region(NEUMANN2_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[0] < -0.5) mesh.region(NEUMANN3_BOUNDARY_NUM).add(i.cv(), i.f());
- if (un[1] < -0.5) mesh.region(NEUMANN4_BOUNDARY_NUM).add(i.cv(), i.f());
+
+ if (un[0] > 0.5) mesh.region(BOUNDARY_NUM1).add(it.cv(), it.f());
+ if (un[1] > 0.5) mesh.region(BOUNDARY_NUM2).add(it.cv(), it.f());
+ if (un[0] < -0.5) mesh.region(BOUNDARY_NUM3).add(it.cv(), it.f());
+ if (un[1] < -0.5) mesh.region(BOUNDARY_NUM4).add(it.cv(), it.f());
+
}
-
-
}
+
base_small_vector ls_function(const base_node P, int num = 0) {
scalar_type x = P[0], y = P[1];
base_small_vector res(2);
@@ -439,6 +686,7 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
lambda = gmm::vect_norm2(V2);
// compute the Rayleigh quotient
+
// mult(G, V2, W);
// scalar_type lambda2 = gmm::vect_sp(V2, W);
// gmm::mult(M, V2, W);
@@ -452,24 +700,26 @@ scalar_type smallest_eigen_value(const sparse_matrix &B,
return sqrt(1./lambda);
}
-
-
-
-/*****************************************************************/
-/* Model. */
-/*****************************************************************/
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
-bool crack_problem::solve(plain_vector &U, plain_vector &P) {
+bool cr_nl_elastostatic_problem::solve(plain_vector &U, plain_vector &P) {
size_type nb_dof_rhs = mf_rhs.nb_dof();
+ // size_type nb_dof_mult = mf_mult.nb_dof();
size_type N = mesh.dim();
ls.reinit();
size_type law_num = PARAM.int_value("LAW");
- size_type newton_version = PARAM.int_value("newton_version");
+ size_type line_search_version = PARAM.int_value("line_search_version");
+ size_type Pseudo_Potential = PARAM.int_value("Pseudo_Potential");
+ std::cout<<"law num "<< law_num << endl;
+
base_vector pr(3); pr[0] = pr1; pr[1] = pr2; pr[2] = pr3;
for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+
}
ls.touch();
@@ -479,101 +729,71 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
mfls_p.adapt();
mfls_mortar.adapt(); mfls_mortar.set_qdim(2);
- bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
+ // bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
cout << "Setting up the singular functions for the enrichment\n";
+ // size_type nb_enr_func_u = size_type(PARAM.int_value("NB_ENR_FUNC_U", "Number of Enriched function for u"));
+ // size_type nb_enr_func_p = size_type(PARAM.int_value("NB_ENR_FUNC_P", "Number of Enriched function for p"));
+
+ //std::vector<getfem::pglobal_function> vfunc(2*nb_enr_func_u);
+ //std::vector<getfem::pglobal_function> vfunc_p(2*nb_enr_func_p);
std::vector<getfem::pglobal_function> vfunc(2);
std::vector<getfem::pglobal_function> vfunc_p(2);
- if (!load_global_fun) {
- std::cout << "Using default singular functions\n";
- for (unsigned i = 0; i < vfunc.size(); ++i){
- /* use the singularity */
-
- getfem::abstract_xy_function *s =
- new getfem::crack_singular_xy_function(i+12);
-
- if (enrichment_option != FIXED_ZONE &&
- enrichment_option != GLOBAL_WITH_MORTAR) {
- /* use the product of the singularity function
- with a cutoff */
- getfem::abstract_xy_function *c =
- new getfem::cutoff_xy_function(int(cutoff_func),
- cutoff_radius,
- cutoff_radius1,cutoff_radius0);
- s = new getfem::product_of_xy_functions(*s, *c);
-
- }
- vfunc[i]=getfem::global_function_on_level_set(ls, *s);
- }
- for (unsigned i = 0; i < vfunc_p.size() ;++i){
- /* use the singularity */
+ std::cout << "Using default singular functions\n";
+ for (unsigned i = 0; i < vfunc.size(); ++i){
+
+ // getfem::abstract_xy_function *s;
+// if (i < nb_enr_func_u){
+// s = new generic_u_singular_xy_function(i+1);
+// }
+// else{
+// s = new generic_u_singular_xy_function(-(i+1));
+// }
+
+ getfem::abstract_xy_function *s =
+ new steph_u_singular_xy_function(i);
+
+ if (enrichment_option != FIXED_ZONE &&
+ enrichment_option != GLOBAL_WITH_MORTAR) {
+ /* use the product of the singularity function
+ with a cutoff */
+
+ getfem::abstract_xy_function *c =
+ new getfem::cutoff_xy_function(int(cutoff_func),
+ cutoff_radius,
+ cutoff_radius1,cutoff_radius0);
+ s = new getfem::product_of_xy_functions(*s, *c);
- getfem::abstract_xy_function *sp =
- new getfem::crack_singular_xy_function(i+14);
- if (enrichment_option != FIXED_ZONE &&
- enrichment_option != GLOBAL_WITH_MORTAR) {
- /* use the product of the singularity function
- with a cutoff */
- getfem::abstract_xy_function *cp =
- new getfem::cutoff_xy_function(int(cutoff_func),
- cutoff_radius,
- cutoff_radius1,cutoff_radius0);
- sp = new getfem::product_of_xy_functions(*sp, *cp);
-
- }
- vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);
}
- } else {
- cout << "Load singular functions from " << GLOBAL_FUNCTION_MF << " and " << GLOBAL_FUNCTION_U <<" and " << GLOBAL_FUNCTION_P << "\n";
- getfem::mesh *m = new getfem::mesh();
- m->read_from_file(GLOBAL_FUNCTION_MF);
- getfem::mesh_fem *mf_c = new getfem::mesh_fem(*m);
- mf_c->read_from_file(GLOBAL_FUNCTION_MF);
- std::fstream f(GLOBAL_FUNCTION_U.c_str(), std::ios::in);
- std::fstream fp(GLOBAL_FUNCTION_P.c_str(), std::ios::in);
- plain_vector W(mf_c->nb_dof());
- plain_vector WP(mf_c->nb_dof());
-
-
+ vfunc[i]=getfem::global_function_on_level_set(ls, *s);
+ }
- for (unsigned i=0; i < mf_c->nb_dof(); ++i) {
- f >> W[i]; GMM_ASSERT1(f.good(), "problem while reading " << GLOBAL_FUNCTION_U);
+ for (unsigned i = 0; i < vfunc_p.size() ;++i){
+
+
+ // getfem::abstract_xy_function *sp;
+ // if (i < nb_enr_func_p)
+ // sp = new generic_p_singular_xy_function(i+1);
+ // else
+ // sp = new generic_p_singular_xy_function(-(i+1));
+ getfem::abstract_xy_function *sp =
+ new steph_p_singular_xy_function(i);
+
+ if (enrichment_option != FIXED_ZONE &&
+ enrichment_option != GLOBAL_WITH_MORTAR) {
+ /* use the product of the singularity function
+ with a cutoff */
+ getfem::abstract_xy_function *cp =
+ new getfem::cutoff_xy_function(int(cutoff_func),
+ cutoff_radius,
+ cutoff_radius1,cutoff_radius0);
+ sp = new getfem::product_of_xy_functions(*sp, *cp);
- //cout << "The precalculated dof " << i << " of coordinates " << mf_c->point_of_dof(i) << " is "<< W[i] <<endl;
- /*scalar_type x = pow(mf_c->point_of_dof(i)[0],2); scalar_type y = pow(mf_c->point_of_dof(i)[1],2);
- scalar_type r = std::sqrt(pow(x,2) + pow(y,2));
- scalar_type sgny = (y < 0 ? -1.0 : 1.0);
- scalar_type sin2 = sqrt(gmm::abs(.5-x/(2*r))) * sgny;
- scalar_type cos2 = sqrt(gmm::abs(.5+x/(2*r)));
- W[i] = std::sqrt(r) * sin2;
- */
}
- unsigned nb_func = mf_c->get_qdim();
- cout << "read " << nb_func << " global functions OK.\n";
- vfunc.resize(nb_func);
- getfem::interpolator_on_mesh_fem *global_interp =
- new getfem::interpolator_on_mesh_fem(*mf_c, W);
- for (size_type i=0; i < nb_func; ++i) {
- /* use the precalculated function for the enrichment*/
- //getfem::abstract_xy_function *s = new getfem::crack_singular_xy_function(i);
- getfem::abstract_xy_function *s = new getfem::interpolated_xy_function(*global_interp,i);
-
- if (enrichment_option != FIXED_ZONE &&
- enrichment_option != GLOBAL_WITH_MORTAR) {
-
- /* use the product of the enrichment function
- with a cutoff */
- getfem::abstract_xy_function *c =
- new getfem::cutoff_xy_function(int(cutoff_func),
- cutoff_radius,
- cutoff_radius1,cutoff_radius0);
- s = new getfem::product_of_xy_functions(*s, *c);
- }
- vfunc[i] = getfem::global_function_on_level_set(ls, *s);
- }
+ vfunc_p[i]=getfem::global_function_on_level_set(ls, *sp);
}
mf_sing_u.set_functions(vfunc);
@@ -586,6 +806,7 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
spider.theta0, spider.bimat_enrichment,
spider.epsilon);
mf_us.set_finite_element(mesh.convex_index(),spider.fem->get_pfem());
+
for (dal::bv_visitor_c i(mf_us.convex_index()); !i.finished(); ++i) {
if (mf_us.fem_of_element(i)->nb_dof(i) == 0) {
mf_us.set_finite_element(i,0);
@@ -700,7 +921,7 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
if (mixed_pressure)
- //cout << "Number of dof for P mfls: " << mfls_p().nb_basic_dof() << endl;
+
cout << "Number of dof for P mf_pe: " << mf_pe().nb_basic_dof() << endl;
cout << "Number of dof for u: " << mf_u().nb_basic_dof() << endl;
@@ -732,221 +953,266 @@ bool crack_problem::solve(plain_vector &U, plain_vector &P) {
}
}
+ //////////////////////////////////////////////////////////////////////
+ // //
+ // find the dofs on the upper right and lower right corners //
+ // //
+ //////////////////////////////////////////////////////////////////////
+
+ cout << "Find the dofs on the upper right and lower right corners" << endl;
+ scalar_type d1 = 1.0, d2 = 1.0;
+ size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
+ base_node corner1 = base_node(1.0, -0.5);
+ base_node corner2 = base_node(1.0, 0.5);
+ GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
+
+ for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
+
+ scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
+ if (dd1 < d1) { icorner1 = i; d1 = dd1; }
+ scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
+ if (dd2 < d2) { icorner2 = i; d2 = dd2; }
+
+ }
- // find the dofs on the upper right and lower right corners
-
- scalar_type d1 = 1.0, d2 = 1.0;
- size_type icorner1 = size_type(-1), icorner2 = size_type(-1);
- base_node corner1 = base_node(1.0, -0.5);
- base_node corner2 = base_node(1.0, 0.5);
- GMM_ASSERT1(!(mf_u().is_reduced()), "To be adapted for reduced fems");
- for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N) {
- scalar_type dd1 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner1);
- if (dd1 < d1) { icorner1 = i; d1 = dd1; }
- scalar_type dd2 = gmm::vect_dist2(mf_u().point_of_basic_dof(i), corner2);
- if (dd2 < d2) { icorner2 = i; d2 = dd2; }
- }
+ GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
+ "Upper right or lower right corners not found d1 = "
+ << d1 << " d2 = " << d2);
- GMM_ASSERT1(((d1 < 1E-8) && (d2 < 1E-8)),
- "Upper right or lower right corners not found d1 = "
- << d1 << " d2 = " << d2);
- // Nonlinear-elasticity brick.
+ /*******************************************/
+ /* */
+ /* choose the material law */
+ /* */
+ /*******************************************/
- // Choose the material law.
-
- getfem::abstract_hyperelastic_law *pl = 0;
+ getfem::abstract_hyperelastic_law *pl1 = 0, *pl = 0;
switch (law_num) {
- case 0: pl = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
- case 1: pl = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 0:
+ case 1: pl1 = new getfem::SaintVenant_Kirchhoff_hyperelastic_law(); break;
+ case 2: pl1 = new getfem::Ciarlet_Geymonat_hyperelastic_law(); break;
+ case 3: pl1 = new getfem::Mooney_Rivlin_hyperelastic_law(); break;
default: GMM_ASSERT1(false, "no such law");
}
+ if (N == 2) {
+ cout << "2D plane strain hyper-elasticity\n";
+ pl = new getfem::plane_strain_hyperelastic_law(pl1);
+ } else pl = pl1;
+
pr.resize(pl->nb_params());
- getfem::mdbrick_nonlinear_elasticity<> ELAS(*pl, mim, mf_u(), pr);
+ cout << "parametre du loi de comportements "<< pr << endl ;
- getfem::mdbrick_nonlinear_incomp<> INCOMP(ELAS, mf_pe());
+ //pl1->test_derivatives(3, 5e-9, pr);
- // Defining the Neumann condition right hand side.
- plain_vector F_Neumann1(nb_dof_rhs * N);
- plain_vector F_Neumann2(nb_dof_rhs * N);
- plain_vector F_Neumann3(nb_dof_rhs * N);
- plain_vector F_Neumann4(nb_dof_rhs * N);
- // Neumann condition brick.
-
- // down side
- for(size_type i = 0; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann1.size(); i=i+N) F_Neumann1[i] = AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann2.size(); i=i+N) F_Neumann2[i] = AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann3.size(); i=i+N) F_Neumann3[i] = -AMP_LOAD_Y;
- for(size_type i = 0; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_X;
- for(size_type i = 1; i < F_Neumann4.size(); i=i+N) F_Neumann4[i] = -AMP_LOAD_Y;
-
- getfem::mdbrick_source_term<> NEUMANN1(INCOMP, mf_rhs, F_Neumann1,
- NEUMANN1_BOUNDARY_NUM);
- getfem::mdbrick_source_term<> NEUMANN2(NEUMANN1, mf_rhs, F_Neumann2,
- NEUMANN2_BOUNDARY_NUM);
- //gmm::scale(F, -1.0);
-
- getfem::mdbrick_source_term<> NEUMANN3(NEUMANN2, mf_rhs, F_Neumann3,
- NEUMANN3_BOUNDARY_NUM);
- getfem::mdbrick_source_term<> NEUMANN4(NEUMANN3, mf_rhs, F_Neumann4,
- NEUMANN4_BOUNDARY_NUM);
+
+ getfem::model model;
+ // Main unknown of the problem (displacement).
- getfem::mdbrick_constraint<> KILL_RIGID_MOTIONS(NEUMANN4);
- GMM_ASSERT1(N==2, "To be corrected for 3D computation");
- sparse_matrix BB(4, mf_u().nb_dof());
- BB(0, icorner1) = 1.0;
- BB(1, icorner1+1) = 1.0;
- BB(2, icorner2) = 1.0;
- BB(3, icorner2+1) = 1.0;
- KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(4));
- KILL_RIGID_MOTIONS.set_constraints_type(getfem::constraints_type(dir_with_mult));
-
- // Dirichlet condition brick.
- getfem::mdbrick_Dirichlet<> DIRICHLET (KILL_RIGID_MOTIONS, DIRICHLET_BOUNDARY_NUM, mf_mult);
-
- DIRICHLET.set_constraints_type(getfem::constraints_type(PARAM.int_value("DIRICHLET_VERSION")));
+ model.add_fem_variable("u", mf_u());
- getfem::mdbrick_abstract<> *final_model = &DIRICHLET;
+ // model.add_fem_variable("u", error_cal);
-/*************************************/
-/* Generic solve. */
-/*************************************/
+ // Nonlinear elasticity brick
+ model.add_initialized_fixed_size_data("params", pr);
+ getfem::add_nonlinear_elasticity_brick(model, mim, "u", *pl, "params");
- getfem::standard_model_state MS(*final_model);
- size_type maxit = PARAM.int_value("MAXITER");
- gmm::iteration iter;
-
- size_type stnst = PARAM.int_value("stnst");
+ // Incompressibility
+
+ if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+ cout << "mixed pressure <|-------------------------|>" << endl;
+ model.add_fem_variable("p", mf_pe());
+ getfem::add_nonlinear_incompressibility_brick(model, mim, "u", "p", size_type(-1));
+ }
+
+ // Defining the Neumann condition right hand side.
+ plain_vector F_Neumann(nb_dof_rhs * N);
+ // Neumann condition brick.
+
+ for(size_type i = 0; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_X;
+ for(size_type i = 1; i < F_Neumann.size(); i=i+N) F_Neumann[i] = AMP_LOAD_Y;
-if (stnst==1) {
-
-/********************/
- /* Step loading */
- /********************/
- cout << "By step amigoo###################################<<<<<>>>>>>######" << endl;
- cout << "Nb de Step " << nb_step <<endl;
-for (int step = 0; step < nb_step; ++step) {
- //plain_vector DF(F);
-
- //gmm::copy(gmm::scaled(F, (step+1.)/(scalar_type)nb_step), DF);
- //NEUMANN4.source_term().set(DF);
-
- /************************************/
- /* increment imposed displacement */
- /************************************/
-
- //KILL_RIGID_MOTIONS.set_constraints(BB, plain_vector(3));
+
+ model.add_initialized_fem_data("NeumannData", mf_rhs, F_Neumann );
- /********************************************************/
- /* let the default non-linear solve (Newton) do its job */
- /********************************************************/
+ getfem::add_source_term_brick (model, mim, "u", "NeumannData", BOUNDARY_NUM2);
- cout << "step " << step << ", number of variables : " << final_model->nb_dof() << endl;
- //cout << "DF " << DF << endl;
+ //Dirichlet condition brick
- iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
- maxit ? maxit : 40000);
+ plain_vector F_Diri(nb_dof_rhs * N);
- // gmm::abstract_newton_line_search alnrs;
- // gmm::simplest_newton_line_search silnrs;
- gmm::default_newton_line_search dlnrs;
- // gmm::systematic_newton_line_search sylnrs;
+ // for(size_type i = 0; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+ // for(size_type i = 1; i < F_Diri.size(); i=i+N) F_Diri[i] = 0;
+
+ // gmm::resize(F_Diri, nb_dof_mult);
- getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
+ model.add_initialized_fem_data("Dirichletdata", mf_rhs, F_Diri);
+ if (PARAM.int_value("DIRICHLET_VERSION") == 0)
+ add_Dirichlet_condition_with_multipliers (model, mim, "u", mf_u(), BOUNDARY_NUM4, "Dirichletdata");
+ else
+ add_Dirichlet_condition_with_penalization (model, mim, "u", 1E15, BOUNDARY_NUM4, "Dirichletdata");
- pl->reset_unvalid_flag();
- final_model->compute_residual(MS);
- if (pl->get_unvalid_flag())
- GMM_WARNING1("The solution is not completely valid, the determinant "
- "of the transformation is negative on "
- << pl->get_unvalid_flag() << " gauss points");
+// //////////////////////////////////////////
+// // //
+// // Symetrie condition //
+// // //
+// //////////////////////////////////////////
- }
+ model.add_initialized_fixed_size_data("Dirichletsymdata",
+ plain_vector(N, 0.0));
+ plain_vector HH(N*N); HH[0] = 1.0;
+ model.add_initialized_fixed_size_data("Hdata", HH);
- }
- else{
- cout << "Resolution direct =============D=I=R=E=C=T====================> " << endl;
- /****************/
- /*Sans iteration*/
- /****************/
-iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
- maxit ? maxit : 40000);
-
-
- // gmm::abstract_newton_line_search alnrs;
- gmm::simplest_newton_line_search silnrs;
- gmm::default_newton_line_search dlnrs;
- gmm::systematic_newton_line_search sylnrs;
+ getfem::add_generalized_Dirichlet_condition_with_multipliers(model, mim, "u", 1, BOUNDARY_NUM3, "Dirichletsymdata", "Hdata");
+
+
+
+
+
+// getfem::partial_mesh_fem symetrie_NUM3(mf_u());
+// dal::bit_vector symetrie_dofs_NUM3 = mf_u().basic_dof_on_region(BOUNDARY_NUM3);
+// cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+// cout << "Size of vector :" << symetrie_dofs_NUM3.card() << endl;
+// cout << "Basic dof on region BOUNDARY_NUM3 :" << symetrie_dofs_NUM3 << endl;
+// cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
+// cout << "test :" << symetrie_dofs_NUM3[1] << endl;
+// cout << "test :" << symetrie_dofs_NUM3[2] << endl;
+// GMM_ASSERT1(N==2, "To be corrected for 3D computation");
+
+// sparse_matrix BB((symetrie_dofs_NUM3.size()/2), mf_u().nb_dof());
- switch (newton_version){
+
+// // for (size_type i = 0; i < mf_u().nb_basic_dof(); i+=N)
+// // {}
+// for (size_type j = 0; j < symetrie_dofs_NUM3.size()+1 ; j+=N ){
+// for (size_type i = 0; i < (symetrie_dofs_NUM3.size()/2)+1 ; ++i )
+// {
+// BB(j,symetrie_dofs_NUM3[i])=1.0;
+// }}
+
+// // BB (0, icorner1) = 1.0;
+// // BB (1, icorner1+1) = 1.0;
+// // BB (2, icorner2) = 1.0;
+
+// // cout << "matrice BB :" << BB << endl;
+// // std::vector<scalar_type> LRH(3);
+// // model.add_fixed_size_variable("dir", 3);
+// // getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
+
+
+
+ gmm::iteration iter(residual, 1, 40000);
+
+ /* prepare the export routine for OpenDX (all time steps will be exported)
+ (can be viewed with "dx -edit nonlinear_elastostatic.net")
+ */
+ getfem::dx_export exp(datafilename + ".dx",
+ PARAM.int_value("VTK_EXPORT")==1);
+ getfem::stored_mesh_slice sl; sl.build(mesh, getfem::slicer_boundary(mesh),8);
+ exp.exporting(sl,true); exp.exporting_mesh_edges();
+ //exp.begin_series("deformationsteps");
+ exp.write_point_data(mf_u(), U, "stepinit");
+ exp.serie_add_object("deformationsteps");
+
+ GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted for reduced mesh_fems");
- // case 0: getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), alnrs);
+ getfem::simplest_newton_line_search simls;
+ getfem::default_newton_line_search dlnrs;
+ getfem::systematic_newton_line_search sylnrs;
+ getfem::quadratic_newton_line_search qdlnrs;
+
+// simplest_newton_line_search 1 *** default_newton_line_search 2 *** systematic_newton_line_search 3
+ cout << "line search value" <<line_search_version<< endl;
+ switch (line_search_version){
+
case 1:{
- getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), silnrs);
- cout << "============================ " << endl;
- cout << "=:simplest_newton_line_search= " << endl;
- cout << "============================ " << endl;
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ //gmm::simplest_newton_line_search simls;
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), simls );
+ cout << "=============================== " << endl;
+ cout << "= Simplest_newton_line_search = " << endl;
+ cout << "=============================== " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
}break;
+
case 2:{
- getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), dlnrs);
- cout << "============================ " << endl;
- cout << "=default_newton_line_search= " << endl;
- cout << "============================ " << endl;
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), dlnrs);
+ cout << "================================ " << endl;
+ cout << "= Default_newton_line_search = " << endl;
+ cout << "================================ " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
}break;
case 3: {
- getfem::standard_solve(MS,*final_model, iter, getfem::default_linear_solver(*final_model), sylnrs);
- cout << "=============================== " << endl;
- cout << "=systematic_newton_line_search= " << endl;
- cout << "=============================== " << endl;
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), sylnrs);
+ cout << "=================================== " << endl;
+ cout << "= Systematic_newton_line_search = " << endl;
+ cout << "=================================== " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
}break;
- default: GMM_ASSERT1(false, "No such newton");
+
+ case 4: {
+ if (Pseudo_Potential == 1){
+ bool with_pseudo_potential = true;
+ getfem::standard_solve(model, iter,getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), qdlnrs, with_pseudo_potential);
+ cout << "/******************/" << endl;
+ cout << "/* Enery Criteria */" << endl;
+ cout << "/******************/" << endl;
+ }
+ getfem::standard_solve(model, iter, getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model), qdlnrs);
+ cout << "================================== " << endl;
+ cout << "= Quadratic_newton_line_search = " << endl;
+ cout << "================================== " << endl;
+ cout << "alpha_md valeur de l'ordre de singularite = " << alpha_md << endl;
+ }break;
+
+
+
+
+ default: GMM_ASSERT1(false, "No such line search");
}
- pl->reset_unvalid_flag();
- final_model->compute_residual(MS);
- if (pl->get_unvalid_flag())
- GMM_WARNING1("The solution is not completely valid, the determinant "
- "of the transformation is negative on "
- << pl->get_unvalid_flag() << " gauss points");
- }
-
- /*************************************/
- /* Computation of the inf-sup bound */
- /*************************************/
+
+
- if (PARAM.int_value("INF_SUP_COMP") && mixed_pressure) {
-
- cout << "Sparse matrices computation for the test of inf-sup condition"
- << endl;
-
- sparse_matrix Mis(mf_pe().nb_dof(), mf_pe().nb_dof());
- sparse_matrix Sis(mf_u().nb_dof(), mf_u().nb_dof());
- sparse_matrix Bis(mf_pe().nb_dof(),mf_u().nb_dof());
- getfem::asm_mass_matrix(Mis, mim, mf_pe());
- getfem::asm_stiffness_matrix_for_homogeneous_laplacian_componentwise(Sis, mim, mf_u());
- getfem::asm_mass_matrix(Sis, mim, mf_u());
- cout << "Inf-sup condition test" << endl;
- INCOMP.get_B(MS,Bis);
- scalar_type lambda = smallest_eigen_value(Bis, Mis, Sis);
- cout << "The inf-sup test gives " << lambda << endl;
- }
+ // Solution extraction
+ gmm::copy(model.real_variable("u"), U);
+ if (mixed_pressure && (law_num == 1 || law_num == 3)) {
+ gmm::copy(model.real_variable("p"), P);}
- // Solution extraction
-
- gmm::copy(ELAS.get_solution(MS), U);
- gmm::copy(INCOMP.get_pressure(MS), P);
- return (iter.converged());
+
+ return (iter.converged());
-
-
-
- if (reference_test == 1) {
+if (reference_test == 1) {
cout << "Exporting reference solution...";
dal::bit_vector blocked_dof = mf_u().basic_dof_on_region(5);
@@ -970,7 +1236,7 @@ iter = gmm::iteration(residual, int(PARAM.int_value("NOISY", "Noisy = ")),
gmm::vecsave(datafilename + "_refined_test.P_refined", PP);
cout << "done" << endl;
}
- }
+}
void export_interpolated_on_line(const getfem::mesh_fem &mf,
const getfem::base_vector &U,
@@ -997,8 +1263,7 @@ void export_interpolated_on_line(const getfem::mesh_fem &mf,
f << "\n";
}
}
-
-
+
/**************************************************************************/
/* main program. */
/**************************************************************************/
@@ -1008,15 +1273,14 @@ int main(int argc, char *argv[]) {
GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
- //getfem::getfem_mesh_level_set_noisy();
-
-
- crack_problem p;
+ cr_nl_elastostatic_problem p;
p.PARAM.read_command_line(argc, argv);
p.init();
p.mesh.write_to_file(p.datafilename + ".mesh");
-
+ //getfem::mesh_region &rg_error_calc = p.mesh.region(1);
+ //getfem::mesh_region &rg2 = p.mesh.region(2);
plain_vector U, P;
+
if (!p.solve(U, P)) GMM_ASSERT1(false,"Solve has failed");
cout << "Saving the solution" << endl;
@@ -1090,52 +1354,24 @@ int main(int argc, char *argv[]) {
// getfem::mesh_im mim_refined_p(mcut_refined_p);
// mim_refined.set_integration_method(getfem::int_method_descriptor
// ("IM_TRIANGLE(6)"));
- mcut.write_to_file(p.datafilename + ".meshvm");
+
getfem::mesh_fem mf_refined(mcut_refined, dim_type(Q));
mf_refined.set_classical_discontinuous_finite_element(2,0.001);
plain_vector W(mf_refined.nb_dof());
-
- //getfem::mesh_fem mf_refined_p(mcut_refined_p, dim_type(Q));
- //mf_refined_p.set_classical_discontinuous_finite_element(2,0.001);
- //plain_vector PPW(mf_refined.nb_dof());
- //getfem::interpolation(p.mf_pe(), mf_refined, P, PPW);
-
- getfem::interpolation(p.mf_u(), mf_refined, U, W);
- mf_refined.write_to_file(p.datafilename + ".meshfemuvm", true);
- gmm::vecsave(p.datafilename + ".Uvm", W);
-
-
-
- getfem::mesh_fem mf_vm(mcut_refined, 1);
- mf_vm.set_classical_discontinuous_finite_element(2, 0.001);
- plain_vector Vm(mf_vm.nb_dof());
- cout << "compute Von_mises" << endl;
- getfem::interpolation_von_mises(mf_refined, mf_vm, W, Vm);
-
- gmm::vecsave(p.datafilename + ".VM",Vm);
- mf_vm.write_to_file(p.datafilename + ".meshfemvm", true);
if (p.PARAM.int_value("VTK_EXPORT")) {
- getfem::mesh_fem mf_refined_vm(mcut_refined, 1);
- getfem::mesh_fem mf_refined_p(mcut_refined, 1);
-
- mf_refined_vm.set_classical_discontinuous_finite_element(2, 0.001);
- mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
-
- cerr << "mf_refined_vm.nb_dof=" << mf_refined_vm.nb_dof() << "\n";
+ getfem::mesh_fem mf_refined_p(mcut_refined, 1);
- plain_vector VM(mf_refined_vm.nb_dof());
+ mf_refined_p.set_classical_discontinuous_finite_element(2, 0.001);
+
plain_vector PPW(mf_refined_p.nb_dof());
- cout << "computing von mises\n";
-
- getfem::interpolation_von_mises(mf_refined, mf_refined_vm, W, VM);
+
getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
- plain_vector D(mf_refined_vm.nb_dof() * Q),
- DN(mf_refined_vm.nb_dof());
+
cout << "export to " << p.datafilename + ".vtk" << "..\n";
getfem::vtk_export exp(p.datafilename + ".vtk",
@@ -1145,17 +1381,13 @@ int main(int argc, char *argv[]) {
//exp.write_point_data(mf_refined_vm, DN, "error");
getfem::interpolation(p.mf_pe(), mf_refined_p, P, PPW);
- exp.write_point_data(mf_refined_vm, VM, "von_mises_stress");
+
exp.write_point_data(mf_refined, W, "elastostatic_displacement");
- exp.write_point_data(mf_refined_vm, PPW, "Pressure");
+ exp.write_point_data(mf_refined_p, PPW, "Pressure");
base_node line_x0(0.70001,0);
base_small_vector line_dir(0, 0.5001);
- unsigned line_nb_points = 1000;
- export_interpolated_on_line(mf_refined_vm, VM,
- line_x0, line_dir, line_nb_points,
- "von_mises_on_line.data");
-
+
cout << "export done, you can view the data file with (for example)\n"
"mayavi -d " << p.datafilename << ".vtk -f "
@@ -1164,21 +1396,39 @@ int main(int argc, char *argv[]) {
if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
cout << "Computing error with respect to a reference solution..." << endl;
-
- std::string REFERENCE_MF = "Solution_160_ref_raffine_P1BP1.meshfem";
- std::string REFERENCE_U = "Solution_160_ref_raffine_P1BP1.U";
- std::string REFERENCE_MFP = "Solution_160_ref_raffine_P1BP1.p_meshfem";
- std::string REFERENCE_P = "Solution_160_ref_raffine_P1BP1.P";
-
+
+
+ std::string REFERENCE_MF = "TestEnrichemen**tPressureStephNX40.meshfem";
+ std::string REFERENCE_U = "TestEnrichemen**tPressureStephNX40.U";
+ std::string REFERENCE_MFP = "TestEnrichemen**tPressureStephNX40.p_meshfem";
+ std::string REFERENCE_P = "TestEnrichemen**tPressureStephNX40.P";
+
cout << "Load reference displacement from "
<< REFERENCE_MF << " and " << REFERENCE_U << "\n";
- getfem::mesh ref_m;
+
+ getfem::mesh ref_m ;
ref_m.read_from_file(REFERENCE_MF);
+
+
+ enum { Part_cal_error = 82};
+ for(dal::bv_visitor i(ref_m.convex_index()); !i.finished(); ++i){
+ for(size_type j=0; j < 3; ++j){
+ base_node cord_err = ref_m.points_of_convex(i)[j];
+ //cout << "coordonne-erreur " << cord_err[1] << endl;
+ if (cord_err[1] > -0.39) ref_m.region(Part_cal_error).add(i);
+ }
+ }
+
+
getfem::mesh_fem ref_mf(ref_m);
- ref_mf.read_from_file(REFERENCE_MF);
+ ref_mf.read_from_file(REFERENCE_MF);
+
+
plain_vector ref_U(ref_mf.nb_dof());
gmm::vecload(REFERENCE_U, ref_U);
+
+
cout << "Load reference pressure from "
<< REFERENCE_MFP << " and " << REFERENCE_P << "\n";
getfem::mesh_fem ref_mfp(ref_m);
@@ -1200,15 +1450,14 @@ int main(int argc, char *argv[]) {
gmm::vecsave(p.datafilename+".U_map_error", interp_U_error);
cout << "To ref L2 ERROR on U:"
- << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U,
- ref_mf, ref_U) << endl;
+ << getfem::asm_L2_dist(ref_mim, ref_mf, interp_U, ref_mf, ref_U, Part_cal_error) << endl;
cout << "To ref H1 ERROR on U:"
<< getfem::asm_H1_dist(ref_mim, ref_mf, interp_U,
- ref_mf, ref_U) << endl;
+ ref_mf, ref_U, Part_cal_error ) << endl;
plain_vector interp_P(ref_mfp.nb_dof());
- getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P);
+ getfem::interpolation(p.mf_pe(), ref_mfp, P, interp_P, Part_cal_error);
plain_vector interp_P_error(ref_mfp.nb_dof());
gmm::add(interp_P, gmm::scaled(ref_P, -1.), interp_P_error);
@@ -1216,12 +1465,26 @@ int main(int argc, char *argv[]) {
cout << "To ref L2 ERROR on P:"
<< getfem::asm_L2_dist(ref_mim, ref_mfp, interp_P,
- ref_mfp, ref_P) << endl;
-
+ ref_mfp, ref_P, Part_cal_error) << endl;
+ cout << "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ " << endl;
+ cout << "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/ " << endl;
+ cout << " " << endl;
+
+ cout << "Norme of displacement error vector %%% asm_L2_norm %%% : "
+ << getfem::asm_L2_norm(ref_mim, ref_mf, interp_U_error, Part_cal_error)
+ << endl;
+ cout << "Norme of displacement error vector %%% asm_H1_norm %%% : "
+ << getfem::asm_H1_norm(ref_mim, ref_mf, interp_U_error, Part_cal_error)
+ << endl;
+ cout << "Norme of pressure error vector %%% asm_L2_norm %%% : "
+ << getfem::asm_L2_norm(ref_mim, ref_mfp, interp_P_error, Part_cal_error)
+ << endl;
gmm::add(gmm::scaled(interp_U, -1.), ref_U);
gmm::vecsave(p.datafilename + ".diff_ref", ref_U);
}
-
+
+
return 0;
}
+
diff --git a/contrib/xfem_large_strain/xfem_large_strain.param b/contrib/xfem_large_strain/xfem_large_strain.param
index 73b4bbe..db0206f 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.param
+++ b/contrib/xfem_large_strain/xfem_large_strain.param
@@ -1,22 +1,23 @@
-%-*- mat-lab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%-*- mat-lab -*- (enables emacs matlab mode) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% parameters for program crack %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-MU = 10.0; % Lam� coefficient.
+MU = 10.0; % Lame coefficient.
QUAD = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%Nonlinear elasticity %%
+%% Nonlinear elasticity %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Elastic coefficients %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Just for indication %
-%Ogden mu=4.225E05
-%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Ogden mu=4.225E05 %
+%Mooney-Rivlin c1=0.4375*mu c2=0.0625*mu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Mooney-Rivlin. %
@@ -27,18 +28,21 @@ QUAD = 0;
%C_01=0.0034 MPa. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-P1 = 1.83 ; % First elastic coefficient.%
-P2 = 0.034 ; % Second elastic coefficient.%
-P3 = 0 ; % Third elastic coefficient.%
+%P1 = 1.83 ; % First elastic coefficient.
+%P2 = 0.034 ; % Second elastic coefficient.
+%P3 = 0 ; % Third elastic coefficient.
+
+P1 = 1 ; % First elastic coefficient.%
+P2 = 1 ; % Second elastic coefficient.%
+P3 = 1 ; % Third elastic coefficient.%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Hyperelastic law %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-LAW = 2; % 0 : Mooney-Rivlin (+incompressibility)
- % 1 : SaintVenant-Kirchhoff
- % 2 : SaintVenant-Kirchhoff+incompressibility
- % 3 : Ciarlet-Geymonat
+LAW = 2 ; % 1 : SaintVenant-Kirchhoff + incompressibility
+ % 2 : Ciarlet_Geymonat
+ % 3 : Mooney_Rivlin + incompressibility
BIMATERIAL = 0; % 1 : To enable the bimaterial case
@@ -48,34 +52,42 @@ if BIMATERIAL
MU_DOWN = 1.0;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%Newton_versions %
+% Line search version %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-newton_version = 2 % 1 for simplest_newton_line_search
- % 2 for default_newton_line_search
- % 3 for systematic_newton_line_search
+line_search_version = 2 % 1 for simplest_newton_line_search
+ % 2 for default_newton_line_search
+ % 3 for systematic_newton_line_search
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Energy criteria %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pseudo_Potential = 0 % 1 Enable energy criteria
+ % else Disable energy criteria
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Hyperelastic law %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-REFINEMENT_RADIUS = 0 ; % REF: 0.4; % 0 for no refinement
+REFINEMENT_RADIUS = 0 ; % REF: 0.4; % 0 for no refinement
REFINEMENT_PROCESS = 0 ; % nb of desired refinement steps
-REFERENCE_TEST = 0; % 1 to compute a reference solution exported into files
-ERROR_TO_REF_SOL = 1; % 1 to compute errors wrt the reference solution
-INF_SUP_COMP = 0; % Compute or not the inf_sup condition
+REFERENCE_TEST = 1; % 1 to compute a reference solution exported into files
+ERROR_TO_REF_SOL = 0; % 1 to compute errors wrt the reference solution
+INF_SUP_COMP = 0; % Compute or not the inf_sup condition
%%%%% discretisation parameters : %%%%%
-NB_ENR_FUNC_U = 2;
-NB_ENR_FUNC_P = 2;
+NB_ENR_FUNC_U = 3;
+NB_ENR_FUNC_P = 3;
-NX = 2; % space step.
-MESH_NOISED = 0; % Set to one if you want to "shake" the mesh.
-AMP_LOAD_X = 0.01; % Load in X direction.
-AMP_LOAD_Y = 0.01; % Load in Y direction.
-nb_step = 5;
+NX = 20 ; % space step.
+MESH_NOISED = 0; % Set to one if you want to "shake" the mesh.
+AMP_LOAD_X = 0; % Load in X direction.
+AMP_LOAD_Y = 0.1; % Load in Y direction.
+nb_step = 6;
NOISY = 0;
stnst = 0; % 1 Applying load progressively (don't work)
@@ -99,8 +111,9 @@ end;
FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)'; % Discontinuous P1 for triangles
-MIXED_PRESSURE=1; % Mixed version or not.
-DIRICHLET_VERSION = 0; % 0 = multipliers, 1 = penalization, 2 = elimination
+MIXED_PRESSURE = 0; % Mixed version or not.
+SINGULAR_SEARCH = 0; % With singularity order search or not.
+DIRICHLET_VERSION = 0; % 0 = multipliers, 1 = penalization, 2 = elimination
% integration meth. for sub-simplexe of elements crossed by the level-set
SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
@@ -142,9 +155,11 @@ SPIDER_BIMAT_ENRICHMENT = 0; % 0 for a sqrt spider enrichment
% 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) spider enrichment
RESIDUAL = 1E-9; % residual for iterative methods if any.
-MAXITER = 500;
+MAXITER = 5000;
%%%%% saving parameters %%%%%
-ROOTFILENAME = 'NX10_20enrichi_P1P1B_0.5load'; % Root of data files.
+% STD= Standard XFEM
+% COE= Cutoff_enrichement
+ROOTFILENAME = 'test_dirichlet_NX20'; % Root of data files.
VTK_EXPORT = 0 % 2 export solution to a .vtk file ?
diff --git a/contrib/xfem_large_strain/xfem_large_strain.pl b/contrib/xfem_large_strain/xfem_large_strain.pl
index 5355162..6d63c0a 100644
--- a/contrib/xfem_large_strain/xfem_large_strain.pl
+++ b/contrib/xfem_large_strain/xfem_large_strain.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/contrib/xfem_stab_unilat_contact/Makefile.in b/contrib/xfem_stab_unilat_contact/Makefile.in
index fbb63a9..425a03d 100644
--- a/contrib/xfem_stab_unilat_contact/Makefile.in
+++ b/contrib/xfem_stab_unilat_contact/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -104,6 +104,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -122,6 +123,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -138,6 +140,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -202,6 +205,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -237,7 +241,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -310,7 +313,7 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-xfem_stab_unilat_contact$(EXEEXT): $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_DEPENDENCIES)
+xfem_stab_unilat_contact$(EXEEXT): $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_DEPENDENCIES) $(EXTRA_xfem_stab_unilat_contact_DEPENDENCIES)
@rm -f xfem_stab_unilat_contact$(EXEEXT)
$(CXXLINK) $(xfem_stab_unilat_contact_OBJECTS) $(xfem_stab_unilat_contact_LDADD) $(LIBS)
@@ -482,14 +485,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -539,10 +543,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
index d42e8ed..f1319c3 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Goal : stabilization of unilateral contact with Xfem.
@@ -42,6 +42,16 @@
#include "getfem/getfem_mesh_fem_sum.h"
#include "gmm/gmm_inoutput.h"
+extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+
+
+extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, float *, int *, int *, int *);
+extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
@@ -313,7 +323,7 @@ void asm_mass_matrix_tang_mixed_term
ls.set_shift(-1e-7);
assem.assembly(rg);
ls.set_shift(0.);
- cout << "RM = " << RM << endl;
+ //cout << "RM = " << RM << endl;
}
@@ -400,6 +410,148 @@ void asm_stabilization_symm_tang_term
ls.set_shift(0.);
}
+
+
+
+/**************************************************************/
+/* assembling patch vector */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ VEC &RM = const_cast<VEC &>(RM_);
+
+ getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+ assem.push_mi(mim);
+ assem.push_mf(mf_mult);
+ assem.push_vec(RM);
+ // assem.set("RM(#1)+=comp(Base(#1))()");
+ assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_term
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_im &mimbounddown, const getfem::mesh_fem &mf_mult,
+ scalar_type ratio_size, scalar_type h ){
+ MAT &M1 = const_cast<MAT &>(RM_);
+
+ /****************************************************/
+ /* " select patch " */
+ /****************************************************/
+
+
+
+ // assemby patch vector
+ const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+ size_type nbe = mf_P0.nb_dof();
+ int ne = 0;
+ double size_of_crack = 0;
+ plain_vector Patch_Vector(nbe);
+ asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+ // cout<<"patch_vectot="<< Patch_Vector<<endl;
+ dal::bit_vector Patch_element_list, Patch_dof_ind;
+ for (size_type i = 0; i < nbe; ++i) {
+ if (Patch_Vector[i] != scalar_type(0)){
+ size_type cv = mf_P0.first_convex_of_basic_dof(i);
+ Patch_element_list.add(cv);
+ Patch_dof_ind.add(i);
+ ne++;
+ size_of_crack=size_of_crack + Patch_Vector[i];
+ }
+ }
+ cout<<"Path_element_list="<< Patch_element_list <<endl;
+ //cout<<"Path_dof_ind="<< Patch_dof_ind <<endl;
+ cout<<"number of element in patch="<< ne <<endl;
+ std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+ std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+ std::vector<double> vwgtt(ne);
+ int j = 0, k = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ numelt[j] = int(ic);
+ indelt[ic] = j;
+ }
+ j = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+ vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+ vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+ xadj[j] = k;
+ bgeot::mesh_structure::ind_set s;
+ mesh.neighbours_of_convex(ic, s);
+ for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+ if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+ }
+ }
+
+ xadj[j] = k;
+ std::vector<int> adjwgt(k);
+ // cout<<"xadj="<<xadj<<endl;
+ //cout<<"adjncy="<<adjncy<<endl;
+ //cout<<"vwgt="<<vwgt<<endl;
+
+ cout<<"ratio size beween mesh and coarse mesh= "<< ratio_size <<endl;
+
+ int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+ // float ubvec[1] = {1.03f};
+ int options[5] = {0,0,0,0,0};
+ //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, &(ubvec[0]), options, &edgecut, &(part[0]));
+ // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ &numflag, &nparts, options, &edgecut, &(part[0]));
+
+ //cout<<"size_of_mesh="<<h<<endl;
+ cout<<"size_of_crack="<< size_of_crack <<endl;
+ cout<<"nb_partition="<<nparts<<endl;
+ cout<<"partition="<<part<<endl;
+ cout<<"edgecut="<<edgecut<<endl;
+
+
+ /**************************************************************/
+ /* Assembly matrices */
+ /**************************************************************/
+
+
+ std::vector<double> size_patch(nparts);
+ size_type nb_dof_mult=mf_mult.nb_dof();
+ sparse_matrix M0(nb_dof_mult, nbe);
+ getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+
+ for (size_type i=0; i < size_type(ne); i++) {
+ size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];
+ }
+
+ //cout<<"size_patch="<<size_patch<<endl;
+
+ sparse_row_matrix MAT_aux(nparts, nb_dof_mult);
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+ }
+
+ sparse_row_matrix MAT_proj(nbe, nb_dof_mult);
+
+ for (size_type r=0; r < nbe; r++) {
+ size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ int p=part[indelt[cv]];
+ gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+ gmm::mat_row(MAT_proj, r));
+ }
+
+ gmm::mult(M0, MAT_proj, M1);
+
+}
+
+
/**************************************************************************************/
/* asembling masse matrix for inf-sup condition */
/**************************************************************************************/
@@ -410,19 +562,19 @@ void asm_mass_matrix_for_inf_sup
getfem::level_set &ls, const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
MAT &RM = const_cast<MAT &>(RM_);
- level_set_unit_normal<std::vector<scalar_type> >
- nterm(ls.get_mesh_fem(), ls.values());
+// level_set_unit_normal<std::vector<scalar_type> >
+// nterm(ls.get_mesh_fem(), ls.values());
nonlin_h<std::vector<scalar_type> >
nlinh(ls.get_mesh_fem().linked_mesh());
getfem::generic_assembly assem("t=comp(NonLin(#2).Base(#1).Base(#1));"
- "M(#2,#1)+= t(i,:,:)");
+ "M(#1,#1)+= t(i,:,:)");
assem.push_mi(mim);
assem.push_mf(mf_mult);
assem.push_mf(ls.get_mesh_fem());
assem.push_mat(RM);
- assem.push_nonlinear_term(&nterm);
+ // assem.push_nonlinear_term(&nterm);
assem.push_nonlinear_term(&nlinh);
gmm::clear(RM);
@@ -466,15 +618,19 @@ struct unilateral_contact_problem {
scalar_type mu, lambda; /* Lame coeff */
- int dgr; /* Order of enrichement for u */
+ int dgr; /* Order of enrichement for u */
+ scalar_type stabilized_problem;
scalar_type friction_coeff;
+ scalar_type tresca_threshold;
+ scalar_type ratio_size;
getfem::mesh_fem mf_rhs; /* mesh_fem for the right hand side (f(x),..) */
scalar_type residual; /* max residual for the iterative solvers */
bool contact_only;
- bool stabilized_problem, strmesh;
+ bool Tresca_version;
+ bool Test_of_coer, strmesh, rangeP_P;
scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
size_type cutoff_func;
@@ -627,6 +783,8 @@ void unilateral_contact_problem::init(void) {
mesh.write_to_file("toto.mesh");
h = mesh.maximal_convex_radius_estimate();
+ // h = 2. * mesh.minimal_convex_radius_estimate();
+
cout << "h = " << h << endl;
cont_gamma0 = PARAM.real_value("CONTACT_GAMMA0",
@@ -652,6 +810,8 @@ void unilateral_contact_problem::init(void) {
friction_coeff= PARAM.real_value("FRICTION_COEFF", "Friction_coeff");
+ tresca_threshold= PARAM.real_value("TRESCA_THRESHOLD", "Tresca_threshold");
+ ratio_size= PARAM.real_value("RATIO_SIZE", "ratio size beween mesh and coarse mesh");
/* set the finite element on the mf_u */
getfem::pfem pf_u =
@@ -684,10 +844,13 @@ void unilateral_contact_problem::init(void) {
- contact_only =
- (PARAM.int_value("CONTACT_ONLY"," contact_only or not.") != 0);
- stabilized_problem =
- (PARAM.int_value("STABILIZED_PROBLEM"," stabilized_problem or not.") != 0);
+ contact_only = (PARAM.int_value("CONTACT_ONLY"," contact_only or not.") != 0);
+ Tresca_version=(PARAM.int_value("TRESCA_VERSION"," tresca version or not.") != 0);
+ cout<< "Tresca Version="<< Tresca_version<< endl;
+ stabilized_problem = PARAM.real_value("STABILIZED_PROBLEM"," stabilized_problem or not.");
+ Test_of_coer= (PARAM.int_value("STABILIZED_PROBLEM"," stabilized_problem or not.") != 0);
+ rangeP_P =
+ (PARAM.int_value("rangeP_P"," The creteria of choise in range bases is performed by comparison to p or not.") != 0);
mf_contt.set_finite_element(mesh.convex_index(), pf_mult_cont);
@@ -940,16 +1103,26 @@ bool unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
std::set<size_type> cols;
cols.clear();
- sparse_matrix BRBB(mf_pre_uu().nb_dof(), mf_cont().nb_dof());
- mf_u().set_qdim(1);
- asm_mass_matrix(BRBB, mimbound, mf_pre_uu(), mf_cont());
- //asm_mass_matrix(BRBB, mimbound, mf_cont(), mf_cont());
- // cout << "BRBB " << BRBB << endl;
- cout << "Selecting dofs for the multiplier" << endl;
- cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
- gmm::range_basis(BRBB, cols);
- mf_cont().reduce_to_basic_dof(cols);
- mf_u().set_qdim(dim_type(N));
+ if (rangeP_P){
+ sparse_matrix BRBB(mf_cont().nb_dof(), mf_cont().nb_dof());
+ asm_mass_matrix(BRBB, mimbound, mf_cont(), mf_cont());
+ cout << "Selecting dofs for the multiplier PP" << endl;
+ cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
+ gmm::range_basis(BRBB, cols);
+ mf_cont().reduce_to_basic_dof(cols);
+ }else{
+ sparse_matrix BRBB(mf_pre_uu().nb_dof(), mf_cont().nb_dof());
+ mf_pre_uu().set_qdim(1);
+ asm_mass_matrix(BRBB, mimbound, mf_pre_uu(), mf_cont());
+ cout << "Selecting dofs for the multiplier UP" << endl;
+ cout << "nb_dof_mult = " << mf_cont().nb_dof() << endl;
+ gmm::range_basis(BRBB, cols);
+ mf_cont().reduce_to_basic_dof(cols);
+ mf_pre_uu().set_qdim(dim_type(N));
+}
+
+
+
size_type nb_dof = mf_u().nb_dof();
cout << "nb_dof = " << nb_dof << endl;
@@ -995,9 +1168,10 @@ bool unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
// if (!contact_only){
getfem::CONTACT_B_MATRIX CAT(nb_dof_cont, nb_dof);
// }
- if (stabilized_problem) {
- cout<<"Cont_gamma0="<< cont_gamma0 <<endl;
- cout<< "Assembling stabilized mixed term for contact problem"<<endl;
+ cout<<"Cont_gamma0="<< cont_gamma0 <<endl;
+ if (stabilized_problem==1) {
+ cout<<"stabilized_problem="<<stabilized_problem<<endl;
+ cout<< "Assembling stabilized mixed term for contact problem"<<endl;
asm_stabilization_mixed_term(CA, mimbound, mf_u(), mf_cont(), ls, lambda, mu);
gmm::scale(CA, -cont_gamma0 * h);
if (!contact_only){
@@ -1013,7 +1187,7 @@ bool unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
// if (!contact_only){
sparse_matrix KAT(nb_dof, nb_dof);
//}
- if (stabilized_problem) {
+ if (stabilized_problem==1) {
cout<<"Assembling symetrique term for stabilized contact problem"<<endl;
asm_stabilization_symm_term(KA, mimbound, mf_u(), ls, lambda, mu);
gmm::scale(KA, -cont_gamma0 * h);
@@ -1028,15 +1202,38 @@ bool unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
getfem::CONTACT_B_MATRIX MA(nb_dof_cont, nb_dof_cont);
getfem::CONTACT_B_MATRIX MAT(nb_dof_cont, nb_dof_cont);
- if (stabilized_problem) {
+ getfem::CONTACT_B_MATRIX M1(nb_dof_cont, nb_dof_cont);
+ getfem::CONTACT_B_MATRIX M1T(nb_dof_cont, nb_dof_cont);
+ if (stabilized_problem!=0) {
cout<<"Assembling mass term for stabilized problem"<<endl;
getfem::asm_mass_matrix(MA, mimbound, mf_cont());
- gmm::scale(MA, cont_gamma0 * h);
- cout << "MA = " << MA << endl;
if (!contact_only){
cout<<"Assembling mass tangent term for stabilized problem"<<endl;
getfem::asm_mass_matrix(MAT, mimbound, mf_cont());
- gmm::scale(MAT, cont_gamma0 * h);
+
+ }
+ if (stabilized_problem==1) {
+ gmm::scale(MA, cont_gamma0 * h);
+ //cout << "MA = " << MA << endl;
+ if (!contact_only){
+ gmm::scale(MAT, cont_gamma0 * h);
+ }
+ }
+ if (stabilized_problem==2) {
+ cout<<"Patch Stabilization"<<endl;
+ //gmm::scale(MA, cont_gamma0);
+ asm_stabilization_patch_term(M1, mesh, mimbound, mf_cont(), ratio_size, 2.*h);
+ gmm::scale(M1, -cont_gamma0);
+ gmm::scale(MA, cont_gamma0);
+ gmm::add(M1, MA);
+ // cout << "MA = " << MA << endl;
+ if (!contact_only){
+ //gmm::scale(MAT, cont_gamma0);
+ asm_stabilization_patch_term(M1T, mesh, mimbound, mf_cont(), ratio_size, 2.*h);
+ gmm::scale(M1T, -cont_gamma0);
+ gmm::scale(MAT, cont_gamma0);
+ gmm::add(M1T, MAT);
+ }
}
}
@@ -1053,11 +1250,18 @@ bool unilateral_contact_problem::solve(plain_vector &U, plain_vector &LAMBDA, p
// Linearized elasticity brick.
model.add_initialized_scalar_data("lambda", lambda);
model.add_initialized_scalar_data("mu", mu);
-if (!contact_only){
- cout<<"Friction coeff="<< friction_coeff<<endl;
- model.add_initialized_scalar_data("friction_coeff", friction_coeff);
- }
- model.add_initialized_scalar_data("augmentation_parameter", R/h);
+ if (!contact_only){
+ cout<<"Friction coeff="<< friction_coeff<<endl;
+ model.add_initialized_scalar_data("Friction_coeff", friction_coeff);
+ if (Tresca_version){
+ cout<<"tresca_threshold="<<tresca_threshold <<endl;
+ model.add_initialized_scalar_data("Tresca_threshold", tresca_threshold);
+ }
+
+
+ }
+ model.add_initialized_scalar_data("augmentation_parameter", R/h);
+ //model.add_initialized_scalar_data("augmentation_parameter", R);
getfem::add_isotropic_linearized_elasticity_brick
(model, mim, "u", "lambda", "mu");
// model.add_initialized_scalar_data("augmentation_parameter", R/h);
@@ -1065,37 +1269,86 @@ if (!contact_only){
//("augmentation_parameter", mu * (3*lambda + 2*mu) / (h*(lambda + mu)) ); // r ~= Young modulus
-
- if (stabilized_problem) {
- // cout << "KA = " << KA << endl;
- cout << "gamma = " << cont_gamma0 * h << endl;
- getfem::add_explicit_matrix(model, "u", "u", KA);
- // Defining the contact condition.
- gmm::add(CA, BN);
+
+ if (stabilized_problem!=0) {
+ if (stabilized_problem==1){
+ // cout << "KA = " << KA << endl;
+ cout << "gamma = " << cont_gamma0 * h << endl;
+ getfem::add_explicit_matrix(model, "u", "u", KA);
+ // Defining the contact condition.
+ gmm::add(CA, BN);
+ if (!contact_only){
+ getfem::add_explicit_matrix(model, "u", "u", KAT);
+ gmm::add(CAT, BT);
+ }
+
+ }
+
if (contact_only){
getfem::add_Hughes_stab_basic_contact_brick(model, "u", "Lambda",
- "augmentation_parameter",
- BN, MA);
- }else {
- getfem::add_explicit_matrix(model, "u", "u", KAT);
- // Defining the contact condition.
- gmm::add(CAT, BT);
- getfem::add_Hughes_stab_friction_contact_brick
- (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
- BN, BT, MA, MAT, "friction_coeff");
- }
- } else {
- getfem::add_basic_contact_brick(model, "u", "Lambda",
- "augmentation_parameter", BN);
-
- if (!contact_only){
- getfem::add_basic_contact_with_friction_brick
- (model, "u", "Lambda", "Lambda_t",
- "augmentation_parameter", BN, BT, "friction_coeff","","",true);
+ "augmentation_parameter", BN, MA);
+ }else{
+ if (Tresca_version){
+ getfem::add_Hughes_stab_with_friction_contact_brick
+ (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+ BN, BT, MA, MAT, "Friction_coeff","","",1, Tresca_version, "Tresca_threshold");
+ }else{
+ getfem::add_Hughes_stab_with_friction_contact_brick
+ (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+ BN, BT, MA, MAT, "Friction_coeff");
+ }
+ }
+
+ }else{
+ if (contact_only){
+ getfem::add_basic_contact_brick(model, "u", "Lambda",
+ "augmentation_parameter", BN);
+ }else{
+ if (Tresca_version){
+ getfem::add_basic_contact_with_friction_brick
+ (model, "u", "Lambda", "Lambda_t",
+ "augmentation_parameter", BN, BT, "Friction_coeff","","",1,Tresca_version,"Tresca_threshold");
+ }else{
+ getfem::add_basic_contact_with_friction_brick
+ (model, "u", "Lambda", "Lambda_t",
+ "augmentation_parameter", BN, BT, "Friction_coeff");
+ }
}
+
}
+
+ // if (stabilized_problem) {
+// // cout << "KA = " << KA << endl;
+// cout << "gamma = " << cont_gamma0 * h << endl;
+// getfem::add_explicit_matrix(model, "u", "u", KA);
+// // Defining the contact condition.
+// gmm::add(CA, BN);
+// if (contact_only){
+// getfem::add_Hughes_stab_basic_contact_brick(model, "u", "Lambda",
+// "augmentation_parameter",
+// BN, MA);
+// }else {
+// getfem::add_explicit_matrix(model, "u", "u", KAT);
+// // Defining the contact condition.
+// gmm::add(CAT, BT);
+// getfem::add_Hughes_stab_with_friction_contact_brick
+// (model, "u", "Lambda", "Lambda_t", "augmentation_parameter",
+// BN, BT, MA, MAT, "friction_coeff");
+// }
+// } else {
+// getfem::add_basic_contact_brick(model, "u", "Lambda",
+// "augmentation_parameter", BN);
+
+// if (!contact_only){
+// getfem::add_basic_contact_with_friction_brick
+// (model, "u", "Lambda", "Lambda_t",
+// "augmentation_parameter", BN, BT, "friction_coeff","","",0);
+
+// }
+// }
+
// Defining the Neumann condition right hand side.
@@ -1106,7 +1359,7 @@ if (!contact_only){
for(size_type i = 0; i < F.size(); i=i+N*N) {
base_node pt = mf_rhs.point_of_basic_dof(i / (N*N));
- for(size_type j = 0; j < N; ++j){ F[i+j+j*N] =sin(2*M_PI*pt[1])*0.04;}
+ for(size_type j = 0; j < N; ++j){ F[i+j+j*N] =sin(2*M_PI*pt[1])*0.4;}
// scalar_type coeff = pt[1] > 0. ? -1 : 1;
// for(size_type j = 0; j < N; ++j){ F[i+j+j*N] = coeff*0.1; FF[i+j+j*N] = (pt[0]-0.5)*2.0;}
@@ -1152,55 +1405,137 @@ if (!contact_only){
model.add_fixed_size_variable("dir", size);
getfem::add_constraint_with_multipliers(model, "u", "dir", BB, LRH);
- //classical inf-sup condition
-
- // if (PARAM.int_value("INF_SUP_COMP")) {
-
-// cout << "Sparse matrices computation for the test of inf-sup condition"
-// << endl;
-
-// sparse_matrix Sis(nb_dof, nb_dof);
-// sparse_matrix Siss(nb_dof, nb_dof);
-// sparse_matrix Mis(nb_dof_cont, nb_dof);
-// sparse_matrix Miss(nb_dof_cont, nb_dof_cont);
-// sparse_matrix Bis(nb_dof_cont, nb_dof_cont);
-// sparse_matrix Biss(nb_dof_cont, nb_dof_cont);
-// sparse_matrix BissMis(nb_dof_cont, nb_dof);
-// sparse_matrix BBissMis(nb_dof_cont, nb_dof);
-
-
-// asm_mass_matrix_for_inf_sup(Miss, mimbound, mf_cont(), ls); // int_gamma_c 1/h psi_i psi_j
-// getfem::asm_mass_matrix(Sis, mimbound, mf_u());
-// getfem::asm_mass_matrix(Bis, mimbound, mf_cont());
-// gmm::copy(gmm::lu_inverse(Bis), Biss);
-// gmm::copy(BN, Mis);
-// gmm::mult(Biss, Mis, BissMis);
-// gmm::mult(Miss, BissMis, BBissMis);
-// gmm::mult(gmm::transposed(BissMis), BBissMis, Siss);
+ //verified coercivit condition
+
+
+
+
+
+
+ //classical inf-sup condition
+
+ // if (PARAM.int_value("INF_SUP_COMP")) {
+
+ // cout << "Sparse matrices computation for the test of inf-sup condition"
+ // << endl;
+
+ // // sparse_matrix MUU(nb_dof, nb_dof);
+ // sparse_matrix MPP(nb_dof_cont, nb_dof_cont);
+ // sparse_matrix BBB(nb_dof_cont, nb_dof);
+ // sparse_matrix MTILD(nb_dof_cont, nb_dof_cont);
+ // plain_vector VVV(nb_dof),VVV1(nb_dof),VVV0(nb_dof), dd1(nb_dof_cont), dd2(nb_dof_cont), YYY(nb_dof_cont), ZZZ(nb_dof_cont);
+ // scalar_type lllambda;
+// asm_mass_matrix_for_inf_sup(MTILD, mimbound, mf_cont(), ls); // int_gamma_c 1/h psi_i psi_j
+// asm_mass_matrix_mixed_term(BBB, mimbound, mf_u(), mf_cont(), ls);
+// // getfem::asm_mass_matrix(MUU, mimbound, mf_u());
+// getfem::asm_mass_matrix(MPP, mimbound, mf_cont());
+// gmm::fill_random(VVV);
+// // gmm::scaled(VVV,gmm::vect_norm2(VVV));//x_n/norm(x_n)
+// do{
+// gmm::mult(BBB, VVV, dd1);
+
+// gmm::lu_solve(MPP, YYY,dd1);
+
+// gmm::mult(MTILD, YYY, dd2);
+// gmm::lu_solve(gmm::transposed(MPP), ZZZ,dd2);
+
+// gmm::mult(gmm::transposed(BBB), ZZZ, VVV1);
+// lllambda = gmm::vect_sp(VVV1,VVV);//gmm::vect_norm2(VVV);
+// gmm::copy(VVV,VVV0);
+// gmm::copy(VVV1,VVV);
+// cout << "lambda = " << lllambda << endl;
+// }while (gmm::vect_dist2(VVV1, gmm::scaled(VVV0, lllambda )) > 1E-3);
+
+// //cout << "lambda = " << sqrt(1./lllambda) << endl;
+// cout << "residu = " << gmm::vect_dist2(VVV1, gmm::scaled(VVV, lllambda)) << endl;
+// // gmm::copy(gmm::lu_inverse(Bis), Biss);
+// // gmm::copy(BN, Mis);
+// // gmm::mult(Biss, Mis, BissMis);
+// // gmm::mult(Miss, BissMis, BBissMis);
+// // gmm::mult(gmm::transposed(BissMis), BBissMis, Siss);
+
+
+// // cout << "Inf-sup condition test" << endl;
+// // scalar_type lllambda = smallest_eigen_value(Siss, Siss, Sis);
+// // cout << "The inf-sup test gives " << lllambda << endl;
-// cout << "Inf-sup condition test" << endl;
-// scalar_type lllambda = smallest_eigen_value(Siss, Siss, Sis);
-// cout << "The inf-sup test gives " << lllambda << endl;
// }
// Generic solve.
- gmm::iteration iter(residual, 1, 40);
+ gmm::iteration iter(residual, 1, 2000);
cout << "Solving..." << endl;
iter.init();
+ //getfem::standard_solve(model, iter);
+ getfem::simplest_newton_line_search lse; // (size_t(-1), 6.0/5.0, 0.2, 3.0/5.0);
+ //getfem::standard_solve(model, iter,
+ // getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ // getfem::model_real_plain_vector>(model) , lse);
- gmm::simplest_newton_line_search lse; // (size_t(-1), 6.0/5.0, 0.2, 3.0/5.0);
- getfem::standard_solve(model, iter,
- getfem::default_linear_solver<getfem::model_real_sparse_matrix,
- getfem::model_real_plain_vector>(model) , lse);
-
+ getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model,"mumps"), lse);
gmm::Harwell_Boeing_save("toto.hb", model.real_tangent_matrix());
+
+ //Test of coercivity
+ if (PARAM.int_value("Test_of_coer")) {
+ cout << "Compute the smallest eigenvalue" << endl;
+ size_type nb_up;
+ gmm::sub_interval interval;
+ nb_up= gmm::nnz(model.real_variable("u"));
+ interval = model.interval_of_variable("u");
+ cout<< "nb_up=" << nb_up << endl;
+ cout <<"nbdof_in_u="<< gmm::nnz(model.real_variable("u"))<<endl;
+ cout <<"nbdof_in_p="<< gmm::nnz(model.real_variable("Lambda"))<<endl;
+ sparse_matrix KKK(gmm::nnz(model.real_variable("u")), gmm::nnz(model.real_variable("u"))),
+ KKKK(gmm::nnz(model.real_variable("u")), gmm::nnz(model.real_variable("u")));
+
+
+ gmm::copy(gmm::sub_matrix(model.real_tangent_matrix(),interval, interval) ,KKK);
+ plain_vector VVV(gmm::nnz(model.real_variable("u"))), VVV1(gmm::nnz(model.real_variable("u"))) ;
+ gmm::fill_random(VVV);
+ scalar_type lllambda(0), lllambda_aux(1), lllambda_max(0);
+ do{
+ lllambda_aux= lllambda;
+ // gmm::copy(VVV,VVV1);
+ gmm::copy(gmm::scaled(VVV, (1./gmm::vect_norm2(VVV))),VVV1);
+ // cout<<"norm="<<gmm::vect_norm2(VVV1)<<endl;
+ gmm::mult(KKK,VVV1,VVV);
+ lllambda=gmm::vect_sp(VVV,VVV1);
+ // cout<<"lllambda="<< lllambda<<endl;
+ }while (gmm::abs(lllambda-lllambda_aux ) > 1E-12);
+ lllambda_max=lllambda;
+ cout<<"lllambda_max="<< lllambda_max<<endl;
+
+
+ gmm::copy(gmm::identity_matrix(),KKKK);
+ gmm::scale(KKKK,-2.*lllambda_max);
+ gmm::add(KKKK,KKK);
+ // cout<<KKKK<<endl;
+
+
+
+ gmm::fill_random(VVV);
+ lllambda=0;
+ lllambda_aux=1;
+ do{
+ lllambda_aux= lllambda;
+ gmm::copy(gmm::scaled(VVV,(1./gmm::vect_norm2(VVV))),VVV1);
+ gmm::mult(KKK,VVV1,VVV);
+ lllambda=gmm::vect_sp(VVV,VVV1);
+ // cout<<"lllambda="<< lllambda<<endl;
+ }while (gmm::abs(lllambda-lllambda_aux ) > 1E-10);
+ cout<<"lllambda_min="<< lllambda+2.*lllambda_max <<endl;
+ }
+
+
+
+
+
gmm::resize(U, mf_u().nb_dof());
gmm::copy(model.real_variable("u"), U);
gmm::resize(LAMBDA, mf_cont().nb_dof());
@@ -1209,6 +1544,8 @@ if (!contact_only){
if (!contact_only) {
gmm::resize(LAMBDA_T, mf_cont().nb_dof());
gmm::copy(model.real_variable("Lambda_t"), LAMBDA_T);
+
+
}
return (iter.converged());
@@ -1261,7 +1598,7 @@ int main(int argc, char *argv[]) {
cout << p.mf_u().nb_basic_dof() << endl;
cout << p.mf_cont().nb_basic_dof() << endl;
-
+ cout << p.mf_cont().nb_dof() << endl;
//construction of mesh refined
// getfem::stored_mesh_slice slr;
@@ -1314,8 +1651,9 @@ int main(int argc, char *argv[]) {
plain_vector PPP(mf_cont.nb_dof());
getfem::interpolation(p.mf_cont(), mf_cont, Lambda, PPP);
-
-
+ //if (!p.contact_only) {
+
+ //}
getfem::level_set ls(mcut, 1, true);
for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
@@ -1324,8 +1662,8 @@ int main(int argc, char *argv[]) {
ls.touch();
const getfem::mesh_fem &lsmf = ls.get_mesh_fem();
- lsmf.write_to_file("xfem_stab_unilat_contact_ls.mf", true);
- gmm::vecsave("xfem_stab_unilat_contact_ls.U", ls.values());
+ lsmf.write_to_file(p.datafilename + "_ls.mf", true);
+ gmm::vecsave(p.datafilename + "_ls.U", ls.values());
@@ -1353,18 +1691,53 @@ int main(int argc, char *argv[]) {
slicer2.push_back_action(iso2); // extract isosurface 0
slicer2.push_back_action(sbuildl); // store it into sl0
slicer2.exec(nrefine, mf.convex_index());
-
- sl.write_to_file("xfem_stab_unilat_contact.sl", true);
- sl0.write_to_file("xfem_stab_unilat_contact.sl0", true);
- sll.write_to_file("xfem_stab_unilat_contact.sll", true);
+
+ if (p.reference_test) {
+ sl.write_to_file(p.datafilename + "_ref.sl", true);
+ sl0.write_to_file(p.datafilename + "_ref.sl0", true);
+ sll.write_to_file(p.datafilename + "_ref.sll", true);
plain_vector LL(sll.nb_points());
// gmm::scale(PP, 0.005);
sll.interpolate(mf_cont, PPP, LL);
- gmm::vecsave("xfem_stab_unilat_contact.slL", LL);
+ gmm::vecsave(p.datafilename + "_ref.slL", LL);
+
+ if (!p.contact_only) {
+ getfem::mesh_fem mf_tang_cont(mcut, 1);
+ mf_tang_cont.set_classical_discontinuous_finite_element(2, 1E-5);
+ plain_vector PPPT(mf_tang_cont.nb_dof());
+ getfem::interpolation(p.mf_cont(), mf_tang_cont, Lambda_t, PPPT);
+
+
+ plain_vector LLT(sll.nb_points());
+ sll.interpolate(mf_tang_cont, PPPT, LLT);
+ gmm::vecsave(p.datafilename + "_ref.slLT", LLT);
+ }
// plain_vector UU(sl.nb_points()), LL(sll.nb_points());
// sl.interpolate(mf, V, UU);
// gmm::vecsave("xfem_stab_unilat_contact.slU", UU);
-
+ }else{
+ sl.write_to_file(p.datafilename + ".sl", true);
+ sl0.write_to_file(p.datafilename + ".sl0", true);
+ sll.write_to_file(p.datafilename + ".sll", true);
+ plain_vector LL(sll.nb_points());
+ // gmm::scale(PP, 0.005);
+ sll.interpolate(mf_cont, PPP, LL);
+ gmm::vecsave(p.datafilename + ".slL", LL);
+
+ if (!p.contact_only) {
+ getfem::mesh_fem mf_tang_cont(mcut, 1);
+ mf_tang_cont.set_classical_discontinuous_finite_element(2, 1E-5);
+ plain_vector PPPT(mf_tang_cont.nb_dof());
+ getfem::interpolation(p.mf_cont(), mf_tang_cont, Lambda_t, PPPT);
+
+ plain_vector LLT(sll.nb_points());
+ sll.interpolate(mf_tang_cont, PPPT, LLT);
+ gmm::vecsave(p.datafilename + ".slLT", LLT);
+ }
+ // plain_vector UU(sl.nb_points()), LL(sll.nb_points());
+ // sl.interpolate(mf, V, UU);
+ // gmm::vecsave("xfem_stab_unilat_contact.slU", UU);
+ }
}
@@ -1450,16 +1823,52 @@ int main(int argc, char *argv[]) {
}
+
+
+ cout << "plot Von mises" << endl;
+
+
+ getfem::mesh_im mim_refined(mcut);
+ mim_refined.set_integration_method(getfem::int_method_descriptor
+ ("IM_TRIANGLE(6)"));
+
+ mcut.write_to_file(p.datafilename + ".meshvm");
+
+ getfem::mesh_fem mf_refined(mcut,dim_type(Q));
+ mf_refined.set_classical_discontinuous_finite_element(4, 0.001);
+ plain_vector W(mf_refined.nb_dof());
+
+ getfem::interpolation(p.mf_u(), mf_refined, U, W);
+
+ mf_refined.write_to_file(p.datafilename + ".meshfemuvm", true);
+ gmm::vecsave(p.datafilename + ".Uvm", W);
+
+ getfem::mesh_fem mf_vm(mcut, 1);
+ mf_vm.set_classical_discontinuous_finite_element(4, 0.001);
+ plain_vector Vm(mf_vm.nb_dof());
+
+
+ cout << "compute Von_mises" << endl;
+ getfem::interpolation_von_mises(mf_refined, mf_vm, W, Vm);
+
+ gmm::vecsave(p.datafilename + ".VM",Vm);
+ mf_vm.write_to_file(p.datafilename + ".meshfemvm", true);
+
+
+
+
+
+
//Compute error
if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
cout << "Computing error with respect to a reference solution..." << endl;
- std::string REFERENCE_MF = "xfem_stab_unilat_contact.meshfem_refined";
- std::string REFERENCE_U = "xfem_stab_unilat_contact.U_refined";
- std::string REFERENCE_MF_cont = "xfem_stab_unilat_contact.cont_meshfem_refined";
- std::string REFERENCE_cont = "xfem_stab_unilat_contact.cont_refined";
- std::string REFERENCE_MF_tang_cont = "xfem_stab_unilat_contact.tang_cont_meshfem_refined";
- std::string REFERENCE_tang_cont = "xfem_stab_unilat_contact.tang_cont_refined";
+ std::string REFERENCE_MF = p.datafilename + ".meshfem_refined";
+ std::string REFERENCE_U = p.datafilename + ".U_refined";
+ std::string REFERENCE_MF_cont = p.datafilename + ".cont_meshfem_refined";
+ std::string REFERENCE_cont = p.datafilename + ".cont_refined";
+ std::string REFERENCE_MF_tang_cont = p.datafilename + ".tang_cont_meshfem_refined";
+ std::string REFERENCE_tang_cont = p.datafilename + ".tang_cont_refined";
cout << "Load reference displacement from "
@@ -1479,26 +1888,34 @@ int main(int argc, char *argv[]) {
ref_mf_cont.read_from_file(REFERENCE_MF_cont);
plain_vector ref_cont(ref_mf_cont.nb_dof());
gmm::vecload(REFERENCE_cont, ref_cont);
+
+
- cout << "Load reference tangent pressure from "
- << REFERENCE_MF_tang_cont << " and " << REFERENCE_tang_cont << "\n";
- getfem::mesh ref_m_tang_cont;
- ref_m_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
- getfem::mesh_fem ref_mf_tang_cont(ref_m_tang_cont);
- ref_mf_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
- plain_vector ref_tang_cont(ref_mf_tang_cont.nb_dof());
- gmm::vecload(REFERENCE_tang_cont, ref_tang_cont);
-
- getfem::level_set ls(ref_m_cont, 1, true);
-
-
+
- for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
- ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
- ls.values(1)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
- }
- ls.touch();
- getfem::mesh_level_set mls(ref_m);
+ // if (!p.contact_only) {
+
+ cout << "Load reference tangent pressure from "
+ << REFERENCE_MF_tang_cont << " and " << REFERENCE_tang_cont << "\n";
+ getfem::mesh ref_m_tang_cont;
+ ref_m_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
+ getfem::mesh_fem ref_mf_tang_cont(ref_m_tang_cont);
+ ref_mf_tang_cont.read_from_file(REFERENCE_MF_tang_cont);
+
+ plain_vector ref_tang_cont(ref_mf_tang_cont.nb_dof());
+ gmm::vecload(REFERENCE_tang_cont, ref_tang_cont);
+ // }
+
+ getfem::level_set ls(ref_m_cont, 1, true);
+
+
+
+ for (size_type d = 0; d < ls.get_mesh_fem().nb_basic_dof(); ++d) {
+ ls.values(0)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[0];
+ ls.values(1)[d] =ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 0)[1];
+ }
+ ls.touch();
+ getfem::mesh_level_set mls(ref_m);
getfem::mesh_level_set mls_cont(ref_m_cont);
getfem::mesh_level_set mls_tang_cont(ref_m_tang_cont);
mls.add_level_set(ls);
@@ -1525,12 +1942,19 @@ int main(int argc, char *argv[]) {
mimboundd.set_integration_method(ref_m_cont.convex_index(),
getfem::int_method_descriptor(INTEGRATION1));
mimboundd.adapt();
-
+
+
+
getfem::mesh_im_level_set mimbounddt(mls_tang_cont, intboundd,
getfem::int_method_descriptor(SIMPLEX_INTEGRATION1));
- mimbounddt.set_integration_method(ref_m_cont.convex_index(),
- getfem::int_method_descriptor(INTEGRATION1));
- mimbounddt.adapt();
+ if (!p.contact_only) {
+
+ mimbounddt.set_integration_method( ref_m_tang_cont.convex_index(),
+ getfem::int_method_descriptor(INTEGRATION1));
+ mimbounddt.adapt();
+ }
+
+
//Interpolation of U on a reference mesh
getfem::mesh_im ref_mim(ref_m);
@@ -1569,19 +1993,20 @@ int main(int argc, char *argv[]) {
<< getfem::asm_L2_dist(mimboundd, ref_mf_cont, interp_cont,
ref_mf_cont, ref_cont) << endl;
//Interpolation of Lambda_t on a reference mesh
-
plain_vector interp_tang_cont(ref_mf_tang_cont.nb_dof());
- getfem::interpolation(p.mf_cont(), ref_mf_tang_cont, Lambda_t, interp_tang_cont);
-
- plain_vector interp_tang_cont_error(ref_mf_tang_cont.nb_dof());
- gmm::add(interp_tang_cont, gmm::scaled(ref_tang_cont, -1.), interp_tang_cont_error);
- gmm::vecsave(p.datafilename+".tang_cont_map_error", interp_tang_cont_error);
-
- cout << "To ref L2 ERROR on P tangent:"
- << getfem::asm_L2_dist(mimbounddt, ref_mf_tang_cont, interp_tang_cont,
- ref_mf_tang_cont, ref_tang_cont) << endl;
-
-
+ if (!p.contact_only) {
+
+ getfem::interpolation(p.mf_cont(), ref_mf_tang_cont, Lambda_t, interp_tang_cont);
+
+ plain_vector interp_tang_cont_error(ref_mf_tang_cont.nb_dof());
+ gmm::add(interp_tang_cont, gmm::scaled(ref_tang_cont, -1.), interp_tang_cont_error);
+ gmm::vecsave(p.datafilename+".tang_cont_map_error", interp_tang_cont_error);
+
+ cout << "To ref L2 ERROR on P tangent:"
+ << getfem::asm_L2_dist(mimbounddt, ref_mf_tang_cont, interp_tang_cont,
+ ref_mf_tang_cont, ref_tang_cont) << endl;
+
+ }
}
return 0;
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
index 3d22946..97dc7e9 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
@@ -7,13 +7,14 @@
Mu = 1.0; % Lame coefficient.
Lambda=1.0 % Lame coefficient.
dgr = 1; % degree of enrichment in u
-CONTACT_GAMMA0 = 0.000001; % Stabilization parameter for contact condition
+CONTACT_GAMMA0 = 0.001; % Stabilization parameter for contact condition
R=100; % Augmented parameter
STABILIZED_PROBLEM = 0; % stabilized_problem or not
strmesh = 1;
CONTACT_ONLY=1;
+TRESCA_VIRSION=1;
FRICTION_COEFF=0.3;
-
+rangeP_P=1;
%%if BIMATERIAL
@@ -30,7 +31,7 @@ ERROR_TO_REF_SOL =1; % 1 to compute errors wrt the reference solution
%%%%% discretisation parameters : %%%%%
-NX = 20; % space step.
+NX = 10; % space step.
MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
diff --git a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
index 5355162..6d63c0a 100644
--- a/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
+++ b/contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/cubature/CUBE4D_5.IM b/cubature/CUBE4D_5.IM
new file mode 100755
index 0000000..d521989
--- /dev/null
+++ b/cubature/CUBE4D_5.IM
@@ -0,0 +1,22 @@
+% Integration formulae of order 5 on a 4D cube with 24 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_CUBE4D(5)
+N = 4
+GEOTRANS = GT_QK(4,1)
+NBPT = 2
+2, .9472135954999579392818347337462550, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0694444444444444444444444444444443
+2, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .8535533905932737622004221810524245, .0277777777777777777777777777777777
+%2,0.894427190999915878563669467492510, 0., 0., 0., 1.11111111111111111111111111111111,
+%2, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.707106781186547524400844362104849, 0.444444444444444444444444444444444
+NBF = 8
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+IM_HEXAHEDRON(5)
+
+
diff --git a/cubature/CUBE4D_9.IM b/cubature/CUBE4D_9.IM
new file mode 100755
index 0000000..b3acc67
--- /dev/null
+++ b/cubature/CUBE4D_9.IM
@@ -0,0 +1,30 @@
+% Integration formulae of order 9 on a 4D cube with 145 points (and a negative weight on first point..)
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_CUBE4D(9)
+N = 4
+GEOTRANS = GT_QK(4,1)
+NBPT = 6
+2, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, -.1188190337123157276190528324946187
+2, .7862262698859065681937539899765865, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0499486076365920058340898066793095
+2, .9986896251736089652064035531296960, .9986896251736089652064035531296960, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0020172156696163625491233219281849
+2, .8972839260992424387132917896649810, .8972839260992424387132917896649810, .8972839260992424387132917896649810, .5000000000000000000000000000000000, .0061981539685801749952003251303653
+2, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .9590240438009825431508991023300510, .0010517384819698170066364425704555
+2, .7329438624669667186446168650628540, .7329438624669667186446168650628540, .7329438624669667186446168650628540, .9547931157691535763471652940742300, .0071195039662922548096059557419487
+%2, 0., 0., 0., 0., -1.90110453939705164190484531991390
+%2,0.572452539771813136387507979953173, 0., 0., 0., 0.799177722185472093345436906868952
+%2,0.997379250347217930412807106259392, 0.997379250347217930412807106259392, 0., 0., 0.0322754507138618007859731508509594
+%2,0.794567852198484877426583579329962,0.794567852198484877426583579329962,0.794567852198484877426583579329962,0.,0.0991704634972827999232052020858457
+%2,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.918048087601965086301798204660102,0.0168278157115170721061830811272882
+%2,0.465887724933933437289233730125708,0.465887724933933437289233730125708,0.465887724933933437289233730125708,0.909586231538307152694330588148460,0.113912063460676076953695291871180
+NBF = 8
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+IM_HEXAHEDRON(9)
+
+
diff --git a/cubature/GAUSSLOBATTO1D1.IM b/cubature/GAUSSLOBATTO1D1.IM
new file mode 100755
index 0000000..f3edfd9
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D1.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(1)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, 0., .500000000000000000000000000000000000000000000000000000000000
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D11.IM b/cubature/GAUSSLOBATTO1D11.IM
new file mode 100755
index 0000000..e8252b1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D11.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(11)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, 0., .238095238095238095238095238095238095238095238095238095238095e-1
+1, .84888051860716535063983893016267430206414817564001954204594e-1, .138413023680782974005350203145033146748813640089941234591252
+1, .265575603264642893098114059045616835297201264164077621448666, .215872690604931311708935511140681138965472074195773051123019
+1, .500000000000000000000000000000000000000000000000000000000000, .243809523809523809523809523809523809523809523809523809523809
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D13.IM b/cubature/GAUSSLOBATTO1D13.IM
new file mode 100755
index 0000000..08e09e3
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D13.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(13)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, 0., .178571428571428571428571428571428571428571428571428571428571e-1
+1, .64129925745196692331277119389668280948109665161508322540292e-1, .105352113571753019691496032887878162227673083080523884041632
+1, .204149909283428848927744634301023405027149505241333751628870, .170561346241752182382120338553874085887555487802790804737505
+1, .395350391048760565615671369827324372352227297456659450554576, .206229397329351940783526485701104894741914286259542454077970
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D15.IM b/cubature/GAUSSLOBATTO1D15.IM
new file mode 100755
index 0000000..e0e0c3a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D15.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(15)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, 0., .138888888888888888888888888888888888888888888888888888888889e-1
+1, .50121002294269921343827377790831020974259852216947788785344e-1, .827476807804027625231698600146041529195536146125796707231012e-1
+1, .161406860244631123277057286454328774644485176193046710229518, .137269356250080867640352809289686362970625610493254643268368
+1, .318441268086910920644623965645670393489678861199560924839863, .173214255486523172557565766069859143973766353125458203015303
+1, .500000000000000000000000000000000000000000000000000000000000, .185759637188208616780045351473922902494331065759637188208617
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D17.IM b/cubature/GAUSSLOBATTO1D17.IM
new file mode 100755
index 0000000..9f0cb3c
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D17.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(17)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, 0., .111111111111111111111111111111111111111111111111111111111111e-1
+1, .40233045916770593085533669588830932923228462276862064255187e-1, .666529954255350555631135853776964490548129374988987074438202e-1
+1, .130613067447247462498446912570084637491907449311536657267446, .112444671031563226059728910865523921376956456980875320569753
+1, .261037525094777752169412453634371001056613553334716765542872, .146021341839841878937791128687221946103744194843853772295688
+1, .417360521166806487686890117020913233384424828225258134433550, .163769880591948728328255263958446572353375299565261088579427
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D19.IM b/cubature/GAUSSLOBATTO1D19.IM
new file mode 100755
index 0000000..d44812a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D19.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(19)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, 0., .909090909090909090909090909090909090909090909090909090909091e-2
+1, .32999284795970432833862931950308182730041334945018887054186e-1, .548061366334974322307017247901753550247370718236383653988127e-1
+1, .107758263168427790688791091945770948246401272452968189158682, .935849408901526020540707609497174597845971188125641593034686e-1
+1, .217382336501897496764518015261124167858473927218991512154422, .124024052132014157020042433210936376671836584823856939628032
+1, .352120932206530304284044242220471245529496782825697945266050, .143439562389504044339611201665767615591826773727965914171059
+1, .500000000000000000000000000000000000000000000000000000000000, .150108797727845346892965940584988204035823083442131061178680
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D21.IM b/cubature/GAUSSLOBATTO1D21.IM
new file mode 100755
index 0000000..9932560
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D21.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(21)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, 0., .757575757575757575757575757575757575757575757575757575757576e-2
+1, .27550363888558888296209930848390643194371724024986338143054e-1, .458422587065980653341712970670396431551530707088913693106640e-1
+1, .90360339177996660825679209141548669654766671048177855288342e-1, .789873527821850575823355313501701341255531582117285798633435e-1
+1, .183561923484069661168797572778172070878078127299249503517423, .106254208880510572679151038683433135097672811382670416747947
+1, .300234529517325533867825104216516549736125983602346481756031, .125637801599600640146622206073798091666719238674901822785133
+1, .431723533572536222567969072130153051550792944358970807274209, .135702620455348088500144169249801420197325963446050235535497
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D23.IM b/cubature/GAUSSLOBATTO1D23.IM
new file mode 100755
index 0000000..f0dbe1a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D23.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(23)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, 0., .641025641025641025641025641025641025641025641025641025641026e-2
+1, .23345076678918044051547267622275424186746055651318407405314e-1, .389008433734094638967944941665667925339174087467514605229837e-1
+1, .76826217674063841567037196450623320210981670142795687155676e-1, .674909633448041745599573812946854446280863460463397092613593e-1
+1, .156905765459121286963620480216822223535411900937807786468654, .918234326017750460037471293734053616232368434841189995727658e-1
+1, .258545089454331899126531383181533189613903368940704994761138, .110383896783055043042767004189698148733631436666997602365805
+1, .375356534946880003715663149812886509255594343753512070350742, .122007895153338178229289074180078106265631100208278030113414
+1, .500000000000000000000000000000000000000000000000000000000000, .125965424666723368022069320770619471918173216874515575814277
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D25.IM b/cubature/GAUSSLOBATTO1D25.IM
new file mode 100755
index 0000000..775ef8b
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D25.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(25)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, 0., .549450549450549450549450549450549450549450549450549450549451e-2
+1, .20032477366369549322449918992287805466804240713676031817921e-1, .334186422488406423170353303730264125288210267253412169234334e-1
+1, .66099473084826374499889898545867893375063823452781932620587e-1, .582933279493558257704983353273251150023529274500366395982189e-1
+1, .135565700454336929707663799739559202171330234152839098693878, .800109258814760712064104989937973202519012748164405350843474e-1
+1, .224680298535676472341688647070459682768930840223042933088104, .974130746867080593201658891879422560743143780259323781382047e-1
+1, .328637993328643577478048298179162677583443232929846626722542, .109563126504885377435581261977083806479166057229437913068074
+1, .441834065558148066170611645131919916029245477871859615898338, .115806397234228529444814178646319595157949830258305822684010
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D27.IM b/cubature/GAUSSLOBATTO1D27.IM
new file mode 100755
index 0000000..6d278b8
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D27.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(27)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, 0., .476190476190476190476190476190476190476190476190476190476190e-2
+1, .17377036748080713602074303965199411146174932001453329963751e-1, .290149465143006245484402920126409977178433634130074518874935e-1
+1, .57458977888511850587299184258885174005642957396261013591309e-1, .508300351628590338018330853944003577404917968583029524889669e-1
+1, .118240155024092399647940762011854190911315739842354831622647, .702558499012140547302234028218364453117421773012039790937081e-1
+1, .196873397265077144438235030681633246410134483120040107157085, .863948236268004745260385497041752936783178315134026453644873e-1
+1, .289680972643163759539051530630709793507830897253784815807454, .984936179823066780462501732537032974318019754167452142348594e-1
+1, .392323022318102880887160276863541143673921049398479468262748, .105986792963410460063715038488610458311827872697180131591388
+1, .500000000000000000000000000000000000000000000000000000000000, .108524058174407824757475107125456775806426156076505726855377
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D29.IM b/cubature/GAUSSLOBATTO1D29.IM
new file mode 100755
index 0000000..9661a38
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D29.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(29)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, 0., .416666666666666666666666666666666666666666666666666666666667e-2
+1, .15215976864891033523878630816270379305504626748082634965660e-1, .254251805029599527016224597827276572469359137688934919607797e-1
+1, .50399733453263953502685869240075261625001195477427787287786e-1, .446968486629654004955260400830418574669436050188994892392643e-1
+1, .103995854069092468034455864518427147095963086009900488657794, .621276910662570491747681663286566003871990156349497701014740e-1
+1, .173805648558753455266058390179709259839220993585212831307110, .770134904035821404078224702424972577227081209918206614293875e-1
+1, .256970289056431194109054607076562651555511347850873714311672, .887459566958520626505378347641788850791573725880856067573957e-1
+1, .350084765549618395950823272638849676092269511546111167672845, .968450119126017921584567994267610151531789970092036625918375e-1
+1, .449336863239025276078483497477041118733379542799904430041225, .100979154089114935744599562705470060277210308321480651255298
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D3.IM b/cubature/GAUSSLOBATTO1D3.IM
new file mode 100755
index 0000000..625e2ef
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D3.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(3)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, 0., .166666666666666666666666666666666666666666666666666666666667
+1, .500000000000000000000000000000000000000000000000000000000000, .666666666666666666666666666666666666666666666666666666666668
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D31.IM b/cubature/GAUSSLOBATTO1D31.IM
new file mode 100755
index 0000000..24bcfe4
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D31.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(31)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, 0., .367647058823529411764705882352941176470588235294117647058824e-2
+1, .13433911684290842921510249063139284705520425438745256776754e-1, .224609702716271048237004773116062216590998542221354492455681e-1
+1, .44560002042213202188098746801136766234560274065633617839094e-1, .395991352518435595951322149764172520491821092634233867616593e-1
+1, .92151874389114846446624723381236672641798801466438220925068e-1, .552964545035140806878863526100384018197161122536382150683774e-1
+1, .154485509686157647302540321313773351596793468904792285796301, .689938731009632795281007874770125853329516328900044026984709e-1
+1, .229307300334949230438133296247968374162426676017584427339528, .801973309988107697581641829323756451329090206586914032496804e-1
+1, .313912783217261479046382659632371093720091342799859713267448, .885021267578289352184728726816462459105382395892224688500747e-1
+1, .405244013240841305847868492623443014327503788538750714711064, .936081698388096179460442414303108681335648762971252960440287e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .953309373767347166497036235141267363946645449456364031984491e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D33.IM b/cubature/GAUSSLOBATTO1D33.IM
new file mode 100755
index 0000000..e05a770
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D33.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(33)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, 0., .326797385620915032679738562091503267973856209150326797385621e-2
+1, .11947221293900728567740537829149966619093278640402952258748e-1, .199853144054570330687995882050504396471527249542297425578152e-1
+1, .39675407326233063081072687284361288218823256905479703276208e-1, .353185834428168324996114800838931665506483131317767918886260e-1
+1, .82203232390954893143176818836031371283164620417090721135754e-1, .495081358587514011972118026593360539590343414317196854573294e-1
+1, .138160335358378659346894817348964660425237397922620554841258, .621052665664835501316981794483733899803947757525133778641170e-1
+1, .205747582840669119413232053403220265499581605341891046617858, .727059807869011339915016052472133862427388585327721514391982e-1
+1, .282792481543938012328856431629662602075120777418153679028028, .809697586188012446321633533501142359803970357771417227070442e-1
+1, .366818673560859507916167333987202028967431905340870776188773, .866310547447281130053072019133417108622886794056730343091914e-1
+1, .455125453257673944488677494955719132519698049479437597765521, .895079317198515411469094034717625840976067089226702257961895e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D35.IM b/cubature/GAUSSLOBATTO1D35.IM
new file mode 100755
index 0000000..312558f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D35.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(35)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, 0., .292397660818713450292397660818713450292397660818713450292398e-2
+1, .10694116888959952423682968444888718592861331094595279277834e-1, .178966825930882385577127845175611782307832925048426251844998e-1
+1, .35549235923706878141029870601725693774915908874024696655238e-1, .316909458813148684258478452091586897789922163705181539793793e-1
+1, .73769711101676953457022014979468687381452309580567375865338e-1, .445658785496035422240043952780765889604388715847003959646753e-1
+1, .124252898723693492918181255183027979798170322167102148284960, .561576707386525220354550077318905120953864296130486462051020e-1
+1, .185545931367389751116583846885633726465694421405219326543697, .661336402243753884630233669548626818123027098398137908719772e-1
+1, .255885357159643248611045181187538315114392200174257596784414, .742069712979694425048403218342049251459662226109483406188946e-1
+1, .333247576087750694850749948077536494038518312261134940526345, .801454620220306209899554840917970096865967172080793328268205e-1
+1, .415406988295359214312422923277559788123552224617074323619774, .837782922635714336350686388701304747066352773683085083378131e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .850009596424136173223363578082616101599485725831061427899484e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D37.IM b/cubature/GAUSSLOBATTO1D37.IM
new file mode 100755
index 0000000..ee2fb9b
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D37.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(37)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, 0., .263157894736842105263157894736842105263157894736842105263158e-2
+1, .9628147553042914037276780707884542385044688436875659713374e-2, .161185615942444707458025140586470150516260701463731095265061e-1
+1, .32032750593667282141909207534686535042213083409474321044076e-1, .285909010637834130023768135866213912526030070440817145249659e-1
+1, .66561010955024929345076392691857393018544355841503967984722e-1, .403158819980598015723884230568602858330182251708810199399037e-1
+1, .112315869523972064792841236202654328313639070261734086723908, .509957498497254078418906028664432604337531744810181943084061e-1
+1, .168111798854844355076798338514420573762127129004254353040030, .603546138143373625497148525011966799361590679125845683198745e-1
+1, .232503567984056869175932019085508008496574215431238336956656, .681502411793620922448903964945159908720383313398169969136747e-1
+1, .303823408143045350306762648092087816667398335350544693329895, .741807770354584129073565068669833024655756471169243587084652e-1
+1, .380224147038506752408799321536455964029241095036311281163628, .782900513237377435790849483968216861515489682954554753349193e-1
+1, .459727031380589081012027740920222768488803564953545767490584, .803716431939228745038633632245419669510459295454961411588879e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D39.IM b/cubature/GAUSSLOBATTO1D39.IM
new file mode 100755
index 0000000..4715ee0
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D39.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(39)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, 0., .238095238095238095238095238095238095238095238095238095238095e-2
+1, .8713851697725985882759361722297061570414205881792792352983e-2, .145924200492527293047292718065854071328605755774022440101599e-1
+1, .29011851520127232851948674669282411675174562977995154850811e-1, .259215845004248125363614859264148780152071795112277146331920e-1
+1, .60352622338204767774423201847527976144709224245401779185061e-1, .366369590925370721262739305209468518286401470259684831383220e-1
+1, .101999036961143797627843705169820680454790169725111741826687, .464927339789430326505688320746072030299104839832459926795938e-1
+1, .152974486968888383686341803402666685621141996947077251470668, .552585416095616676335002433921938873811543469692278740765004e-1
+1, .212084019869084656536489064830957356332113495720758755547356, .627290605954344740075787678539996158519476607413795006408040e-1
+1, .277942108360498949402741825196324357632471256716467573532750, .687292314300206717904498087075726317588624924124032911561135e-1
+1, .349005071745617556362324066070623883989464482969806883829044, .731184312239887296336352653171967516097530304094937638975446e-1
+1, .423607242098907266996820835757165282241125503343361759567474, .757937875558406922266253407526454555250206170414328264983493e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .766925951660874742757922025337698738285250278945318581563443e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D41.IM b/cubature/GAUSSLOBATTO1D41.IM
new file mode 100755
index 0000000..0d007ee
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D41.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(41)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, 0., .216450216450216450216450216450216450216450216450216450216450e-2
+1, .7923780771176911723855188893964851697243231940241772053095e-2, .132728738412508789558139522602714567237786507838684367062010e-1
+1, .26397858000385659737893116692135245043968977329318192916398e-1, .236072326468703760618878674323959922005749894668565101574612e-1
+1, .54968854904547764735171087110456604900232958576426356366954e-1, .334328029322765380062020970785485462845766896335495627368887e-1
+1, .93025536194039431977279075971932478780665742546451550753154e-1, .425450301959192239078556180478740683571890905421950696146433e-1
+1, .139756380019398920940059051800767120703327286940249649738061, .507502874008238371862186518748000954411017664375040666139280e-1
+1, .194165280857870514386894197065036700327279847696152201721922, .578738223269695332950181838607280840711049818767407746527904e-1
+1, .255092562405048825095624382158364979164364182102424091281464, .637638483267151377654222296544149216862750861038200720792575e-1
+1, .321239644930540230969521359879910435358346448028531860291529, .682948443068707133430886811030851281405420814902094595923986e-1
+1, .391196707420357479106022453267303618362496652992903467438132, .713702461356807001681179967833944690442864754444394177616981e-1
+1, .463472729994550832619455604767946321903610381833241750515514, .729245097221208968082102197399850735484056860563144640473109e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D43.IM b/cubature/GAUSSLOBATTO1D43.IM
new file mode 100755
index 0000000..126a1f8
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D43.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(43)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, 0., .197628458498023715415019762845849802371541501976284584980237e-2
+1, .7236422060633710959268616630950450489694603930177479119567e-2, .121243003857658682586998294685485205798888635735206232771851e-1
+1, .24121022144644897932180160074285422075824037275600302787436e-1, .215879355851209173744382328060211355762285181763820359922447e-1
+1, .50270720979827494524919839826316421044100825930352632722344e-1, .306262385647771031906914237201777466689542138275629029502925e-1
+1, .85174451674357056888399690354997557700744058493336357749444e-1, .390677247377849948709671276739823565676700045378139841223174e-1
+1, .128152479413969658027418228466501604356390385523069892862706, .467486230817561709167503534533485520634160783618914272939110e-1
+1, .178368177769931895761927233198615628054344059098850639312758, .535195508621682557675918139577333145872035341048698748128486e-1
+1, .234844114431577915934942339923850094434826742536328644801788, .592487553313745656510630023621302592842459980417485732954788e-1
+1, .296481031042762585402024755892452180224023138002913023559442, .638247373508794383180742765278353838977596887811376972364145e-1
+1, .362079225527103466446561183660432397913404446695291352031596, .671584363193019099507824488503554245640746693419422570410570e-1
+1, .430361897979665800704068693508616533045727771412779130738296, .691849681929036972617513669314722196935189869646369117329220e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .698648900063736825700798532398731769866480585374617341382847e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D45.IM b/cubature/GAUSSLOBATTO1D45.IM
new file mode 100755
index 0000000..28725ee
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D45.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(45)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, 0., .181159420289855072463768115942028985507246376811594202898551e-2
+1, .6634723247419558223456630922762512314040103793349049679906e-2, .111184267323556044964802174086492620050176192239169745974084e-1
+1, .22125889535056820986511434724677584464633478522129651817468e-1, .198158406667339047346310816817358634793092440210505829253431e-1
+1, .46147162443246739002423501766896125395789943060861848397862e-1, .281549243623230995104741698390589971642242228145224933854699e-1
+1, .78267964922563979688347481288328857079461949594834714406916e-1, .359909310276469911078195303343400629900325450513271872191024e-1
+1, .117914758789753346106312359523853174339469775381550067611436, .431845149839645341082814096532915965108641116273791577943270e-1
+1, .164379947367935650082167570906496621712988355526783726167442, .496074138420417937070748854978562144413051915739330975708622e-1
+1, .216834321010352343905295227728858114780552501436759663211850, .551450434464843020552120615137983022031643064384762325675358e-1
+1, .274341813392838690875890754215188775588455890843755295097072, .596985968512456595161469441753589964535657767009518443797119e-1
+1, .335876193312244543983305410320195328149411065613650152688440, .631868210140104000636240453456865580062120086871590542472583e-1
+1, .400339373304583666381713730437504634594062204289261893121279, .655474709368019711772251129082650571537148716289912415278838e-1
+1, .466581003131385710943179095804161345101888395541186134143022, .667384219334931887983928604825387997375176384641762012523592e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D47.IM b/cubature/GAUSSLOBATTO1D47.IM
new file mode 100755
index 0000000..5a44ce5
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D47.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(47)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, 0., .166666666666666666666666666666666666666666666666666666666667e-2
+1, .6105027534253145364097964563419740923508003188290461239091e-2, .102325844664871926542712359095814255514168391823983732543676e-1
+1, .20367930873732760570077410580238398736748534857361504040258e-1, .182523693971356860161914943775548702387906683080989446345772e-1
+1, .42508614632688710838425033131576724176551365436575845115480e-1, .259681141842457373216669448567446890052560190695344219996624e-1
+1, .72161767082341711238093369914125951942966191994092954906250e-1, .332568643376563923469349966567997205463679797064449423155211e-1
+1, .108840170379641609800406023885626321260268486963982328469372, .399993874181464909008132180694180172477943323715565151820834e-1
+1, .151941475592432816619817283105311224369685632997407266147836, .460850699553102109563448113570242728560689916347627386379012e-1
+1, .200757926360003365951189501409466921016909810941654501300426, .514140151739789154137518224535670827918308109374097488886833e-1
+1, .254487942590560808690520038715598419467725766219313446622422, .558987331341604440781221162155195934534543154201289295286150e-1
+1, .312249271070386383385642693869640983656841846756140309068138, .594655897034059127047221223170935785573793405205555420601850e-1
+1, .373093467915561709910056559156362235068040400820232908112370, .620560194689751453476076562196484851797968944534480594902694e-1
+1, .436021470258446513645507687452672701552229338159203754455898, .636274887691657235085572083693789566452204678961431315096817e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .641541946493309641686994130620052825199133476657039923913294e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D49.IM b/cubature/GAUSSLOBATTO1D49.IM
new file mode 100755
index 0000000..cacd8b6
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D49.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(49)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, 0., .153846153846153846153846153846153846153846153846153846153846e-2
+1, .5636293844262172785376654814349329502683228655198220994610e-2, .944842901213173279067602383813360096837243278295331509485688e-2
+1, .18811062616141335124668664358934918984477681089652652115344e-1, .168661518429779996887613742913779549959195787571827537904211e-1
+1, .39282226591221329437434739125655822436617675722870228517317e-1, .240241995405903136579896563903310209755081435311081600999073e-1
+1, .66737838020438214512774251095114972629569806396220366176788e-1, .308175125712737013910900270521396343659377236204541224203563e-1
+1, .100761408446281280481606180714828301121830713192360841900358, .371435250611455686580420414931243688743957924621669253334512e-1
+1, .140837091818667459737297306048036992001160745798040833428648, .429064319900021810937406261795342036448947295198737044084601e-1
+1, .186357350253841556099740546419389481909497246797714207345238, .480189011769506554018486981854312016057282442710619721520082e-1
+1, .236632128985060727350878302809502843787186249283851277026243, .524034431153685264949529184456820880802892709975886555974429e-1
+1, .290899306466876607218158058833075087878819764706376763456148, .559935970599301676501054399399431205217540930926319129085785e-1
+1, .348336243570373639612979481048944909294222405586751317284494, .587349420469045035383478101482410471114901694452260627407174e-1
+1, .408072252364972549339397164057120123811863920061932007752486, .605859231442216730221433478521131956164303514431104854746501e-1
+1, .469201794109040135897256362609124332668453019391966382950466, .615184819000414381507635746454870247777410085381803960124891e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D5.IM b/cubature/GAUSSLOBATTO1D5.IM
new file mode 100755
index 0000000..fd4e449
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D5.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(5)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, 0., .833333333333333333333333333333333333333333333333333333333333e-1
+1, .276393202250021030359082633126872376455938164038847427572910, .416666666666666666666666666666666666666666666666666666666666
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D51.IM b/cubature/GAUSSLOBATTO1D51.IM
new file mode 100755
index 0000000..7ef8b0a
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D51.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(51)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, 0., .142450142450142450142450142450142450142450142450142450142450e-2
+1, .5219518135724689425562679972740281166560485166095899171246e-2, .875098743803278950968486718135962439935403676762603146489170e-2
+1, .17425798774590540367866598439434972665509634659039877372378e-1, .156314758676011921623924950323976817580554306820644071373744e-1
+1, .36408270637442110570126617963640634219784656903881221350816e-1, .222888289665308493720373711206931177818922725758967985150855e-1
+1, .61898956892738760666728475402929579036643743433243354285580e-1, .286327848400813658695436141269703119508106325294368387942301e-1
+1, .93539756552093855870954067620731043963341083339048312650436e-1, .345746711800216381403173675150636096766678043004382691295039e-1
+1, .130886425076770044580286387125797362998503429483030936381575, .400311609852692290841190352419751768913472107350526745204076e-1
+1, .173414668151595242410647562408769525902811104392579867437986, .449256826296452799860681509730313010164092849300188453714885e-1
+1, .220527469528719409968665962565937612546033718146165368320294, .491895372929763815896544656349943163869494044098204433775991e-1
+1, .271563462192958798160693674580378988878614379597627434424592, .527628739106265056091909947399509438466570357602852376199058e-1
+1, .325806209005485664781456710706416702118262424138498939256300, .555955326287185164641309796710773319448695113123507892155807e-1
+1, .382494258448540933331599209743334168109275316540198144332390, .576477501273259914068766666873650439913498374601174255117312e-1
+1, .440831833050739475780645865862341835890285154053172375713830, .588907182929780795332495397241821186005642008580209696053016e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .593069888313815135426199018528759945072976725087396907439843e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D53.IM b/cubature/GAUSSLOBATTO1D53.IM
new file mode 100755
index 0000000..9fa86a3
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D53.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(53)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, 0., .132275132275132275132275132275132275132275132275132275132275e-2
+1, .4847298690772937241453544067700950704265633170196590917347e-2, .812794197875210909949507644855484155967295191472253843720574e-2
+1, .16187857071434347828114560428263719229997063411737679482102e-1, .145271103389895723534263899117912141009164344192280618119264e-1
+1, .33837416439220737536928790695504783770783890199380353999330e-1, .207334576215033605189929243893135553677258034767923801250409e-1
+1, .57564491394348580793846830871375163299169405152113342802907e-1, .266690385236637442001627567357501032518809953980167034225613e-1
+1, .87059514971830901977742786901697749544699992123399574285196e-1, .322568290401772691951228467312392156549271450243330429605072e-1
+1, .121937902997215117423952137366904537986166617277573282691844, .374240617548538513902839695715808752117143984373053438094600e-1
+1, .161744935535213341140309377463305755520976402481877715884116, .421033975607551628697455938989599159947536634091556432665574e-1
+1, .205961655081412196760843960119143961297352923216924837444576, .462338429988560878610176973496930444473152172769404774927708e-1
+1, .254011623034210309785191658527760078518633370111423994954706, .497615552062478364379726773754575675541209407497974291198564e-1
+1, .305268431211818596032057922397945127675886216375209298110312, .526405468805279472411887758974550839267643555081391919422675e-1
+1, .359063866689198814022923745545333747322946192537992066531726, .548332868979883125442929318956030209417161177190799199163892e-1
+1, .414696622345997819558648661125617458507549600036909680734022, .563111900386195062703182120568301057054912545924890514933355e-1
+1, .471441439153243551186728174213126618386969718269283169653968, .570549898363139172666573964150201335316779707512487925978023e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D55.IM b/cubature/GAUSSLOBATTO1D55.IM
new file mode 100755
index 0000000..fde4861
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D55.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(55)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, 0., .123152709359605911330049261083743842364532019704433497536946e-2
+1, .4513505865715091860627443350214348656266829531532571420476e-2, .756908492998379839542896330342786928172421932727542056944041e-2
+1, .15077096356031853143799306056089627132362118375153218171440e-1, .135354031484124137704257127225129269401276106349213754589370e-1
+1, .31528640739508744228981575858318538795142278692178225442666e-1, .193342199898564898739162871335622054971425531015516504928898e-1
+1, .53667140011955860617885042973456560991991749245221800803941e-1, .248979045466187804613341705877387858052963659217990353324378e-1
+1, .81223631859106717378963341906587715242238150972176740253454e-1, .301592519142613675140322317588168405445030860560186840791403e-1
+1, .113863551396765629322914682931773508357687020470960529884954, .350544690002989995926334292120068043474674125337739548240897e-1
+1, .151190669321816005803012785711453444605785868153381852837216, .395241565139428008920851160875547009022029362151477473449563e-1
+1, .192751873898283525014548191287820640551973256670620433810082, .435140667205678028188130776078165301844127624770588033245342e-1
+1, .238042662814015458210591713438197018025010870016085886109059, .469757710573981562489182534937850130445343345120126115219412e-1
+1, .286513264143252806181211794515820545400373649967902242322173, .498672508185749303267845887670342417580393232955522927913043e-1
+1, .337575308579044496869992988460581312360197634829237218169588, .521534082318382687113535560956211439902889273012784338358176e-1
+1, .390608970857869490095474073837502665769111824407837236749336, .538064929167842696867934270233034418136125147248867068589393e-1
+1, .444970493302203945146106198872159572524305647565748769566770, .548064389229452100660662053782976870957940094447424669757957e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .551411083898413050562289764353687407424172485138729180863610e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D57.IM b/cubature/GAUSSLOBATTO1D57.IM
new file mode 100755
index 0000000..463d0fd
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D57.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(57)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, 0., .114942528735632183908045977011494252873563218390804597701149e-2
+1, .4213028579749853330590887045674687301197699926991654903060e-2, .706589966395269382036608433410389513497039777497499727089194e-2
+1, .14076698416865379161703523895404135634716326427958768433372e-1, .126415833702757011021341269250212399522158522858944328383225e-1
+1, .29447609524471458846405225292239463859846046279881258757234e-1, .180710470997042676573663415616798499084917367357548065477142e-1
+1, .50150390900361570223328588425272934980389794061133810691620e-1, .232953472665714637009402457230108320576652326113950852164605e-1
+1, .75950256409900945224288083908467395086812661195093270248722e-1, .282555989615401916510968552361516617867180727695131041119079e-1
+1, .106554821381226459775020239703798119983160454148661883677788, .328956681988950274720506872965661912803866043805925136674291e-1
+1, .141617300681457434183100701935051346105225066318658892988696, .371630016623591269170338210004153353917738916903357848507864e-1
+1, .180740412096220796314453258645129636111624477435108964250188, .410092564167034573998607727635799427521795519348752383237299e-1
+1, .223480869952473573807724884979671114840024757733730891021696, .443908561598826050836282172279602797856663363799773815281491e-1
+1, .269354404915879657386721389446423932579575876195213961883090, .472694875969304458905663576820179446730571133570584258804423e-1
+1, .317841249788775501122007447224107172986332681943585563244013, .496125355021499153288379824771545307176305476980836370874308e-1
+1, .368392028140213104366450265499966194601836824292832847046162, .513934526536174947351404041676880805117233514802254028829063e-1
+1, .420433978687074766087525711450576140668427320320412134669431, .525920607982273249281064904295697030948861180232393493608628e-1
+1, .473377444757256665318496082774323117922018451116582981169381, .531947793618339624737911534049655704238995606941720382775521e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D59.IM b/cubature/GAUSSLOBATTO1D59.IM
new file mode 100755
index 0000000..71c8c00
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D59.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(59)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, 0., .107526881720430107526881720430107526881720430107526881720430e-2
+1, .3941577826759455705337692175642821774041786345266341255715e-2, .661123551273233515131781493491739852809813092971118023749121e-2
+1, .13172532092131762586965225762385120356636002416317467245980e-1, .118332166151351583650228913547128293450859321049879971550576e-1
+1, .27565414895980385096797231175072194748420655259146220114212e-1, .169269702026120288149054234659366233337907773109497243990578e-1
+1, .46966524279365093427744238376268826981281664148167550960778e-1, .218409090800334564148736440416341460523266076903357701133095e-1
+1, .71170002351272194816497308801762980062733319086840696736928e-1, .265232327467243913871404300338199517069413538823886617413097e-1
+1, .99919228403768505363834333008409397196851622648463205568176e-1, .309243706452273116953742920011158028576281989972116445862646e-1
+1, .132909431845462378932929582581179425692701498368351572890328, .349976887970502852251076766865697836840420067722239858585482e-1
+1, .169790898694237238331479362701612946137098574900113220425048, .387000161707378093171419392087113833718945257680035838046676e-1
+1, .210172671395999043498351568901137282496869964482170302255560, .419921102587648653326290541131881663912333492006271003920411e-1
+1, .253626690450583797148099883464892707126418280477365480939213, .448390755226304111240714664181044381842072605436659224151060e-1
+1, .299692330859719096848667790301953798554142885012178699905694, .472107341889289787160952449082667556226074506949061086924020e-1
+1, .347881284363563689520272426186868212704483482345560886763170, .490819465068563785598709397007104863771375690668465426026522e-1
+1, .397682735376237749429453207136145794400506376080822161383004, .504328773993252566977812980514235680975135840394569136888326e-1
+1, .448568775619658861455442638345975844551246596062543428935102, .512492067977351988379528274952139859375022507267242661965872e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .515222814766036665708924807627472104823475959417722482675675e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D61.IM b/cubature/GAUSSLOBATTO1D61.IM
new file mode 100755
index 0000000..d707da2
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D61.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(61)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, 0., .100806451612903225806451612903225806451612903225806451612903e-2
+1, .3695533013619320314229342361276064438549260014752591023524e-2, .619905325068692189431017461455852863677308015161122664564700e-2
+1, .12352654758645385968772024805922512885266690539114243995420e-1, .110997764446459823119160855805397847065866592950853795220113e-1
+1, .25857580791383810958335879205785640918321138662135586588218e-1, .158875677054577328907811394589531003479596907397578386268849e-1
+1, .44075030468134047962734273812964606989921120454714917771798e-1, .205171007930313616652019208595077891479645029850817715560092e-1
+1, .66823761993662240084592615287728254819884728720905618790911e-1, .249426356681106035059800768622215270143816050928955588640022e-1
+1, .93877634111278827726589105963710940119554449152385918853484e-1, .291202486240279347753994649596021099388281730705321402021982e-1
+1, .124967753031662601141362017660847971716568516923414378001788, .330084386285772719662181658417470516898190065749711602305526e-1
+1, .159785122192224592028802121150575495712070108887407335974531, .365685698013395163201854917846043774864430079361431938949998e-1
+1, .197983706425789436931413543694054965174031783204672520790836, .397652628460531261461783644415243441246609268153685444410193e-1
+1, .239183868559217354696703713303990565175717698977965325081444, .425667489748341152637638292533084566926749502847335622835946e-1
+1, .282976141399076530198340321496804409231000126662368532136878, .449451864786789165360623947923320246109173498437553195644532e-1
+1, .328925296730559256873093889650642303651838106406754938198256, .468769377734069067829541770728968353881797946677382623975272e-1
+1, .376574670574897347791879284420564021912310606153650872746580, .483428044740013002801890738531974120229420067778694200015487e-1
+1, .425450701593176252542809061914980170854683870415604527623806, .493282182703808885853255821217039098973569283919955179470797e-1
+1, .475067637476703373846851127635786909851425415954982763499512, .498233857506383888174695423742704902299961883402013170926582e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D63.IM b/cubature/GAUSSLOBATTO1D63.IM
new file mode 100755
index 0000000..71ed402
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D63.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(63)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, 0., .946969696969696969696969696969696969696969696969696969696970e-3
+1, .3471820783170828166331956621882223166451388410789876437908e-2, .582422419613386732561108993514254374111530073791132231122504e-2
+1, .11606918341546849257186195809340660919822449034117999835380e-1, .104323045088016800479058320913063386508288859446326183240854e-1
+1, .24303274301502128312237791543219924195179604960513263843852e-1, .149405229583732387599855782274976114343192870338312668226624e-1
+1, .41441348274529379587160465121589401019191139979944330235987e-1, .193089073859069837819294378376084060925463502715997534752124e-1
+1, .62860949624718889676719685334827797326776034524980480179822e-1, .234969252305120852739865560206122974127100954535248775355173e-1
+1, .88362038497966265220464343366642565410306735074550603473359e-1, .274655297213134839758494206533284764335996426011146270826503e-1
+1, .117706499103235685996670759788456025584165262656253667022448, .311776839262326527205304795838662049372485413839456765206665e-1
+1, .150620341690918702150161376227791399071908448691413311791407, .345987347470080737799848984001631601497648509265887666640795e-1
+1, .186796254359365871368084328794642635951373037423558619700344, .376967434619869142535649592014542904571679509397230501025568e-1
+1, .225896470040444188444797644119684576263621625535116186513302, .404427860967275460898538483860978368489005345007736042463416e-1
+1, .267555919183946622013498139507369827145060241825802331148318, .428112242659065662750959818729323474463124509789127996704173e-1
+1, .311385637873303182479032669641000444584910058542365843718994, .447799448735387003305742313627804816333924283789518495908516e-1
+1, .356976399256162979197327748518477796536686148506339221162646, .463305667211207317649675601425526422922278767014430159910321e-1
+1, .403902534266261387129346502279421395209750563566905250363635, .474486121972959079121777073313019049746989888341200381484857e-1
+1, .451725905911946496841521105954187261966530067396395385116088, .481236424864927309982772471389677145513478064643933397891675e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .483493550513582794800164042348360919482440783031293825384799e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D65.IM b/cubature/GAUSSLOBATTO1D65.IM
new file mode 100755
index 0000000..ab04c94
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D65.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(65)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, 0., .891265597147950089126559714795008912655971479500891265597148e-3
+1, .3267818706241898872719379697008658939123332221068393980512e-2, .548237040915327570073747180688260857898810816047143193269134e-2
+1, .10926655560031025527387669645240364666144860235860655029450e-1, .982313908035671564397354124013105319667317131621446390749319e-2
+1, .22884675543596235796378418642566496906853795800594885615553e-1, .140752684311217517003760885539283583042530382431647788553374e-1
+1, .39035852161275538628596639395710566685325639794482640242076e-1, .182033854753912761753960607415591143831167821568040475024335e-1
+1, .59238081743863367800761807746241902934295626559250965049096e-1, .221714510301221711501363965218239498502506930859476832470857e-1
+1, .83313778598428692543829012294041305580720623236938271615932e-1, .259446459154635603879199530393733985591253758474079173539945e-1
+1, .111051346784066294558981590516769002262563521653929507363840, .294898270133726133477194188385045126758474984839586078352300e-1
+1, .142207019639890497001374713709686957513242547417513952582574, .327758450541325602152191620220031543654903452737514882610582e-1
+1, .176506996031992687811406831062165682194303731932337142646188, .357738249385364110177945443051266351590356364134185041302582e-1
+1, .213649844362538577604533904183277431205625978039359064631420, .384574215317954910525379587538314076158942351412473889253948e-1
+1, .253309150663364521281755492049505656622199067964373639328508, .408030519252111915810444986639725295136323519546187000792315e-1
+1, .295136386720203627571311047943812398485693829871777668806268, .427901029859887932950635763572018487278249959353515203023550e-1
+1, .338763972744255503211266465393354937215360538392133619235151, .444011126417920160590792216087440157377275418151948545555205e-1
+1, .383808507565441578468326159219630319924593889721511091763216, .456219234034572435112197559565733591506381605045768667614281e-1
+1, .429874137911903070814345355376581198803807020198381253947380, .464418068148053230718428381547903132118412616700170908800243e-1
+1, .476556037143514659956580426168788227431771756060691196833555, .468535577521516560008129537207587320570048325183673953062711e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D67.IM b/cubature/GAUSSLOBATTO1D67.IM
new file mode 100755
index 0000000..da5d5a1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D67.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(67)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, 0., .840336134453781512605042016806722689075630252100840336134454e-3
+1, .3081278177806724856687350275451075505712326125984047369883e-2, .516973665727018810568244365869450181145528779579159877676231e-2
+1, .10304428285039688405544395755774045411888074994426819461416e-1, .926569673814102874078195254088283984194151253377487093624533e-2
+1, .21586470781506058781214042701816330811887442452500586725310e-1, .132826976653891079738007655238330862581264958409352559586884e-1
+1, .36833033991959030932667397833309035686738124772976314999260e-1, .171893339452053510849834287132337970205695834529451291195266e-1
+1, .55917623141024772453963575627506695748818149277024899029964e-1, .209534591022939403680975966749173653685423615377626946554339e-1
+1, .78682052308900108770290171627763765931604179993573427882518e-1, .245439317186091366222348381370690408714308287808970649517132e-1
+1, .104937671457602190227540942908308061134228414958666453855834, .279310149445183583616523546214524146116224901385810239509889e-1
+1, .134466910810617380523054118905582492958565023463021452941374, .310866479076898911225957190959103107122726309880251864633871e-1
+1, .167025078067112021330383700915334398155807417698089645880550, .339846844366491727015831529132814971519220350037597377054065e-1
+1, .202342383959958362972985153053506390167008836083996260885468, .366011116370094237665660163683302755703567675152933789583005e-1
+1, .240126176968899168224233356644343461834757430322230436354570, .389142495667555765517958081287375656258894801188233961569836e-1
+1, .280063367934141498619920448961437084383941547739564838389199, .409049311679239166350412703003186393596330568796880286524887e-1
+1, .321823024217272962138223573821321852537437398947445209686044, .425566612186630201335497244196117927574529375428422479678266e-1
+1, .365059111809139604052866719920311919387902362608746804048608, .438557530795359777556558431013673986705871515403973568374979e-1
+1, .409413362617199166774126215294713657944668222014445457357706, .447914421368584543559017623657837996409186703856777680930512e-1
+1, .454518243151649794425565722947147458582269585634229763498607, .453559750184112464696983213299413901162595484399857563928911e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .455446738492448554755479201796551238438870625054586737678493e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D69.IM b/cubature/GAUSSLOBATTO1D69.IM
new file mode 100755
index 0000000..4f18217
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D69.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(69)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, 0., .793650793650793650793650793650793650793650793650793650793651e-3
+1, .2910262263438036033418083930016017978697200118873722266266e-2, .488308713551173186068197505568001358889904526372869520376468e-2
+1, .9733824358735135986892640164582302713303219788080891315464e-2, .875429566108385480037077642284003333050015473635308033164494e-2
+1, .20395442065632356939313386116936524790324072357995374042014e-1, .125549307453474245519737490250783875872235712197166623250851e-1
+1, .34810838008530419599875592761124610874360300839405945820132e-1, .162570232140524380592648535184820737764405304850221383313933e-1
+1, .52867044007191820314993176627321115392089361679794841924464e-1, .198318117525624802951900726667762083718433273400473697209981e-1
+1, .74422703298728953822420104511484276456910166162264267565490e-1, .232513653414937702601272990267223869395597034613376885362591e-1
+1, .99309097767714263389391704083877625718872826487498934943138e-1, .264889354353736331377522293809022724879669836489589776537206e-1
+1, .127331450614135488101355047487408147117068961646321803975988, .295191889104587415204374628198706377636677995231865483727515e-1
+1, .158270445424977000122764255726222916704219486323032481533208, .323184121860376358427482013606513916447380526763649098350317e-1
+1, .191883940698043839752754292146172045583056063593365128816039, .348646986284197123716085630445704664352838446313057666860635e-1
+1, .227908864129792343626431528987788870313750002643692608967694, .371381206577376983820166235668961465059230899568548703854584e-1
+1, .266063271145964972492480231988126047812637791897896516584092, .391208859770901871938560251781583361519925641612042444592820e-1
+1, .306048551316981878523298391397129546995201884414105118313356, .407974769419896962821227049754784192651310483704030218406824e-1
+1, .347551765291472805579005496065106911951921308541679211086520, .421547720652459280285283858365322723772809283247874741840979e-1
+1, .390248093915365719377571028403133535052556024564951394134733, .431821487402531978593684316966103586488499515380791027116605e-1
+1, .433803380348669484369373278891413728541394707882927734652768, .438715663932548929200277230895178469054127656824208582404844e-1
+1, .477876745274274830774021756624438303958961828133688588770673, .442176294204361829831312725415819545684929881865679138449443e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D7.IM b/cubature/GAUSSLOBATTO1D7.IM
new file mode 100755
index 0000000..409c153
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D7.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(7)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, 0., .500000000000000000000000000000000000000000000000000000000000e-1
+1, .172673164646011428100853771876570822215395958802287721242340, .272222222222222222222222222222222222222222222222222222222225
+1, .500000000000000000000000000000000000000000000000000000000000, .355555555555555555555555555555555555555555555555555555555556
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D71.IM b/cubature/GAUSSLOBATTO1D71.IM
new file mode 100755
index 0000000..49b1f26
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D71.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(71)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, 0., .750750750750750750750750750750750750750750750750750750750751e-3
+1, .2753095273369076010742070348359939567448410911312801353118e-2, .461962162142096482774166633320405376888802403593125107321741e-2
+1, .9209292506511457976729777087081985291983325629290107688716e-2, .828401173104043057169271897734258663476045961746306756436948e-2
+1, .19300132996575956947301154097457405819670689235117825159184e-1, .118851222907757293472040211516973986052094780752975656013303e-1
+1, .32950117265147502935369567669643190827705436232336628938924e-1, .153979717043490422056076317167922455465039488681966810851777e-1
+1, .50058045511696474685489482907425127451447953397224432851234e-1, .187967531019584140098309063752635545024834937048636476937495e-1
+1, .70497216476742737750762768230428896941080242440662451668978e-1, .220563471084378319907626822802762923559860667660349606216961e-1
+1, .94116290708172458169211497301771045287426582300754362233902e-1, .251526341575207784749339086468759584202910043426844423098187e-1
+1, .120740394213215812205430008669331514972976836798828705585242, .280626953869378149435557560171625979334238713050452231282928e-1
+1, .150172408133835283924832685405240126685185244066953380812414, .307649878582428043167937224515648197594485134033195182525530e-1
+1, .182194426326782976013396594854508462565244515096779315437449, .332395057673486681997113855197759367589182420064875343490071e-1
+1, .216569367910650161528799833416366292983136252138266813789868, .354679291822268218785377179041780157719796883665082742033669e-1
+1, .253042732183289583642855762248173702748307319210456832236852, .374337599313591186981700876202297681561990129953313440008841e-1
+1, .291344482683084614324358305388751588119814966697386706384052, .391224438644256910819319092274274768922805638566221271204253e-1
+1, .331191046352117640953484019401893955558401744927103383868628, .405214786612518585566203757953189981873771099833461737625402e-1
+1, .372287412959601623929832670394218532357811675549771077107922, .416205064228958719707311333886249199288574939242016733153076e-1
+1, .414329319223137300799687475331981199105575951244845549885448, .424113903731039686039882519228623735297451578748724688811220e-1
+1, .457005501447772370230567595674369092886199478197784716638774, .428882751085496931999795228396106032363111106613901909592304e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .430476299548074927429117021620832985211720189240783140477588e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D73.IM b/cubature/GAUSSLOBATTO1D73.IM
new file mode 100755
index 0000000..7fa2d8f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D73.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(73)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, 0., .711237553342816500711237553342816500711237553342816500711238e-3
+1, .2608321602273843335682434654308642805711202419883345051393e-2, .437690699718011292580664543220992641961983349871801590003985e-2
+1, .8726007400734720049957768692287090332934249739031102007354e-2, .785056067815019268453101514748901462089063154074286213765808e-2
+1, .18290574928219560458573804260516166505966955555603966537207e-1, .112673034372094373644086568864959581288239852275844270395265e-1
+1, .31234186930090166165121232872343448903711115800127072096404e-1, .146047604752108619107181334118267363523320008969872893735867e-1
+1, .47465920601384722820054806549674941760584059440318976198389e-1, .178397123430710996917821485323834374131961274977017813443325e-1
+1, .66871883987164071189210144011381067091431592345928968291050e-1, .209495098582465777635993793733058832727942239535884327065540e-1
+1, .89315944019256369138657623668503937163177948821325011648322e-1, .239123526440978065167627104612377349940458689807127537739014e-1
+1, .114640665470153583641692978533602374667893032282580839879376, .267074631860305855960212314896712047579788533974395626002549e-1
+1, .142668410484809640230488909869050993735231580747518210181001, .293152378141241349251990801137479828123147029674364892389174e-1
+1, .173202582860545391541502615529286763719552873451084549011282, .317173858319337830235362216058266898190938725415925925338490e-1
+1, .206029006314732900193884400875800446590353220388103554854687, .338970584012213865510663825239780093164935838892759172704958e-1
+1, .240917426449731721129636773862544636549708086226151683105326, .358389669649849827539368166526360655869871685824625862281790e-1
+1, .277623125658578283348343721017738168820417341855926569901285, .375294905936182194186344920682786594213547331495136353758906e-1
+1, .315888639555976428671096448459971068785799657056522694420342, .389567715781288160056716974399325093717182865143180156347069e-1
+1, .355445562856707514549454966095217202169370740546777937201686, .401107986302569930162663002391367862095252588878384692934291e-1
+1, .396016432016520100089038831098205508434369854769743658372764, .409834771189178238746970558147719230359834204672370861137515e-1
+1, .437316671421115688108552498160873648447587145766483966595122, .415686858562733071136472292986064994352905945183887508384734e-1
+1, .479056589467324023299999775496620818256871272473649654365525, .418623200380010623630035659551221625308456159346748477542835e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D75.IM b/cubature/GAUSSLOBATTO1D75.IM
new file mode 100755
index 0000000..fca7649
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D75.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(75)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, 0., .674763832658569500674763832658569500674763832658569500674764e-3
+1, .2474671939260811542137295113705395134066287839253699393802e-2, .415282100389414842533133553674543297575667173333479473350405e-2
+1, .8279758748572888468848376604720459248569327951463213965681e-2, .745020102935311147595569533790023601935687748851348322354683e-2
+1, .17358061461761768171094844587058409763652272384554288099996e-1, .106962511356081793126797089540327294765655481009771727447285e-1
+1, .29648455302341282854810553401876401967984974786668087180352e-1, .138708788501034683662380554243887296961986287335431823088522e-1
+1, .45069023909857413589394245589152558699192531268635768124764e-1, .169531381606039673492162441926212127639853422961031923164673e-1
+1, .63517109910206074247529349969909576359220813487812262076366e-1, .199225566687833597047707026407630048627224063007593890467696e-1
+1, .84869930896453696428493468270672174746547108837579277852419e-1, .227593853493817302025289049747413538164726606156940802891888e-1
+1, .108985381425265534984926200175023863387742285447656840457308, .254447500300617393753097899963225312486866366336065690391906e-1
+1, .135702974188435128515732018898313732338544426723077710815164, .279607819686537185308900745661888277758121981222774589368437e-1
+1, .164844906396823281549240427978294315385348274172430176515262, .302907383058943499093700880337783553112868356709053115151542e-1
+1, .196217242352351797408545160784277320208117412125283658686064, .324191140445195960568110228537024886636107617800441517318941e-1
+1, .229611203747460901033086994238231443702475031433065662788578, .343317454605052301413905402996946258952240239752760282072585e-1
+1, .264804558895472165051505187349916869383473762682393052448354, .360159044626196058603185211303661740979143942696485887578321e-1
+1, .301563101563286226315779355702508764512398955389329586976268, .374603833452485796339564885106846083559717221511240616917709e-1
+1, .339642209528680822206472645596221824271625464666499565108960, .386555693992635459993251919707716264426262127047399614517638e-1
+1, .378788472473218907575862490258835889879031167426649015591834, .395935088967509506425626401129432579271462773600511057427328e-1
+1, .418741378368887968483734545868272874341887355749927687547049, .402679600294562920534157470218518110753803986707646858486821e-1
+1, .459235047131336271935517137416529639891425829075643517052436, .406744344513880729574169210070273927789585328764928572467844e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .408102271505035690036751272056340626312982133666937862905988e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D77.IM b/cubature/GAUSSLOBATTO1D77.IM
new file mode 100755
index 0000000..3287fcd
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D77.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(77)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, 0., .641025641025641025641025641025641025641025641025641025641026e-3
+1, .2351035377825551547868980101655862569431121021490587875082e-2, .394550579430030688064753129730538967071597577151678986664851e-2
+1, .7866859641248322632982368489917567413608918146165105351113e-2, .707965377495988657565025801337258016667944812810978551644365e-2
+1, .16494961756005739676181357795382343700656087271315759411190e-1, .101673795316935809257051641262809808307899382273275286214425e-1
+1, .28180117528199178712896564389647326715468277464927353954348e-1, .131905953265707431312740376768836759249327315039797786194638e-1
+1, .42848330154895274463666595980207731546854786833590610054830e-1, .161303589635586977463123344950758998579924523453430828883091e-1
+1, .60406828260330081054968332055202532354691291407053742588474e-1, .189681218503542234963422781935358456174670946679024920853055e-1
+1, .80744588610946779632174610221610852688966904910687409476240e-1, .216859540973789905044370193542954416668111264246864104334783e-1
+1, .103733023699224056594460409438245380868042220723502733729898, .242666769229571625692708629514366902780879230022329137390326e-1
+1, .129226790426307791254199087282338054277477201363034268339852, .266939759857470914774749951652698352261230467959413673134030e-1
+1, .157064707457843143086567573057614297040209400600348038353923, .289525059908930417016206131374094123367832368232881274258743e-1
+1, .187070773622371243300077767573329245592555964531832725751762, .310279882378547624851133290290010165062938791710666836585661e-1
+1, .219055280352638675614802942523234645068087817168438464186374, .329073011114479513315871810868054604810008363637150161901813e-1
+1, .252816010937373196673324405450707371582160483296961781186646, .345785631380405672279939641982813028139398626108521901651821e-1
+1, .288139518922224507624830845354098223522267668366030927830731, .360312081510271476102923208703382114752802893420972207218481e-1
+1, .324802477542909561009806022173167826166599175502610163779238, .372560521176946692893122992991291496452356004983651116125272e-1
+1, .362573091642837816741192576550944601169348978124418288528204, .382453512166982531275880973755442590143451874227990878652014e-1
+1, .401212563140544614078186948095178532102996863100951644190122, .389928508043402903635499956985507337103926157571962987918124e-1
+1, .440476600777514453241327450849009005346070957463233614866164, .394938249626821720946121126148036473285527343334908855792049e-1
+1, .480116964598909049926317028960270740396467356619038601123016, .397451063807748204355745797756548264229349951716399335845339e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D79.IM b/cubature/GAUSSLOBATTO1D79.IM
new file mode 100755
index 0000000..d002752
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D79.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(79)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, 0., .609756097560975609756097560975609756097560975609756097560976e-3
+1, .2236436277357819255995320113922661750681005260622960018399e-2, .375332938142579426457515630008223393629554752298367693219890e-2
+1, .7484070437637611873046971503870244441006388081147680077264e-2, .673603554723530330878458015686946579273772564206311776003950e-2
+1, .15694565216159084967031730429579535282488221351581985153941e-1, .967664928312583995295180796355001886153343715293863720648751e-2
+1, .26817900176253939399732987826159198387431708961290634060214e-1, .125588491968005432561293633017565885251867555092998440832597e-1
+1, .40787064651048093400070908115362253048510712552267279574016e-1, .153654645489612292839923989483105431296422566529253867415263e-1
+1, .57518013915192438609832217066614927391115550854073240102780e-1, .180796517223447562552530537238077041669192649027479936596727e-1
+1, .76910113948004078890614438028834303395034786139966002270368e-1, .206850980777863203789367903535388282408169024806531173030973e-1
+1, .98846733020954109291896186970382098467806113203742902288688e-1, .231661381743258072398053185315871682141024436203884639325314e-1
+1, .123195939056524317542550188405951390092253447850209345848742, .255078524739932567287635101471641207150273260581957319081162e-1
+1, .149811291609658521102303381165514169168370930624996196319688, .276961584594571552696229330277973698993301253260051864319867e-1
+1, .178532721967707288561505573451967502920668505541506264855076, .297178958317718278723954553146968952248527965648634527771220e-1
+1, .209187495542393655987201121567238746060388622971813945874570, .315609058637748977076148623708337298289786395299507632372531e-1
+1, .241591250576435341511237624892102967642903586906037821149154, .332141046164213530218620252758263084509885206249044563766775e-1
+1, .275549106842585750520185874219273932886731673368652712476916, .346675496435474475625063482580372929024542430434576146668709e-1
+1, .310856837634458397670191064976821026038444343626653415856440, .359124998098819852331497146160352863532301803183690468837452e-1
+1, .347302097985277128937594513154519289827657968801273662582600, .369414678736948031845461928001725814938508599187136851071216e-1
+1, .384665701720234870575461807683108028756410451543451388860425, .377482655229589863952898204502061639157676618865547536274055e-1
+1, .422722939658079999731179114483697361774071788000960700963668, .383280405966587352989169325407892726243114276809848207213996e-1
+1, .461244931031872862203044976533880894441059851041339288105890, .386773062686527742684602733321455023957771112196016582182922e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .387939620192404158133747300516346311441984267150560069804317e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D81.IM b/cubature/GAUSSLOBATTO1D81.IM
new file mode 100755
index 0000000..ae843cc
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D81.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(81)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, 0., .580720092915214866434378629500580720092915214866434378629501e-3
+1, .2130014973241862403239154440835813787644494178213878053286e-2, .357485348623332367781372287977056989778815825498933580629272e-2
+1, .7128535246650194555784006861283334909392173178521725268806e-2, .641680277915691233602508120907591529518767736991316833296508e-2
+1, .14950951686121191441143395521812901330719792478110478376354e-1, .922049152233308741726234475016060068690524021342923635222162e-2
+1, .25551847277282754202423014877782890230032191433247511485110e-1, .119711592053952617902178034733779544224798761994888058113815e-1
+1, .38870392870691911584906209221833526216612228185663883537856e-1, .146532056080828509352077630837136223798150304924465777209278e-1
+1, .54830270081004241996044481482895212669203933482674646244014e-1, .172513021995584454253504455300300096158935790504141365584831e-1
+1, .73340050639674828418766379677625862508500921465488178466378e-1, .197505776008757505296596443388991266342808420396691356421340e-1
+1, .94293707103288929389996240196133534098436668931885676268099e-1, .221367200151445862405958631765407587854833553819429240042540e-1
+1, .117571216286762424687877775674816296658247895164946320590636, .243960634801903661581675555033133185054703146165089564227029e-1
+1, .143039245342599228759883512176782992749382700139216588529016, .265156674690784643109565252536619642591390066931226457576378e-1
+1, .170551914898702236871038389766852360653699237594383973693557, .284833914918951335223793176492375529113321734073247607678646e-1
+1, .199951634375680407019134993778783317835812498562421458993998, .302879648312720439303585406967718794279416711145883105145136e-1
+1, .231070004518703353820149648212890407998798182980035504483978, .319190511878982742660790191824769898212221916197320513345725e-1
+1, .263728781902576208602402687512353346042130310013826254467490, .333673079284013231910715227040492709323475291349523632786586e-1
+1, .297740899854232116046606736231242045882872992662246190563204, .346244396209694768203703137820464169359230276938331274431343e-1
+1, .332911539930270323590711140184264293773583929551131664381795, .356832455626750371811882456503049745891805137209323822660773e-1
+1, .369039247804924867330237544680827353338139453153223577505676, .365376610311358305181098396854171362329442288657952001328421e-1
+1, .405917087172924293723636992388996537878487397742960973716033, .371827920265964104007460433048151546485715759771508291106438e-1
+1, .443333825055672951681777059724035616647711785074387826137402, .376149433066355845973999979516174367243841247437328515965734e-1
+1, .481075141720198188743167716094101722738382944261647317152307, .378316395535566218846060315652187665736169681656481289776894e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D83.IM b/cubature/GAUSSLOBATTO1D83.IM
new file mode 100755
index 0000000..52accec
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D83.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(83)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, 0., .553709856035437430786267995570321151716500553709856035437431e-3
+1, .2031011621110680190392559512741142391656960744073378061596e-2, .340880659903645093182071710398386069695757086678081275701077e-2
+1, .6797728682012419172860861462002553424688243897162482032428e-2, .611970483206979935161736808753590906439741429005782490540155e-2
+1, .14258882476158002581027032623438363707269088742218870040269e-1, .879574383413396429056736013998988404807721570838658989636717e-2
+1, .24373140336313281632608513266114346659159621646596595335226e-1, .114235462795142869735079011168031625191558076312263083793359e-1
+1, .37085158573451160872183336632899866315092365958436207533726e-1, .139889081288056788114695954694571204051388612751204518545775e-1
+1, .52325479043522137813684963889143416107135619776185915708824e-1, .164778506637712590421481699578470661279081842441323601343604e-1
+1, .70010853408122301541834334636505946959122648369207887158126e-1, .188767899442060750040635738959656478885411877854076636335674e-1
+1, .90044685430522411089807348432090188682159741452396070712702e-1, .211726274419210792651271587235558989479863748011318654694840e-1
+1, .112317554850322960930066048976142785364354801913595721304040, .233528256564494667799617757658386566275912798617341935930806e-1
+1, .136707813662189288650372633984387123416009224280756405458106, .254054778516898017394303128133876051260929354486413575964850e-1
+1, .163082249961771942101817377534845869083769831872825338411290, .273193735434767179020446199872927753653911758556328695029297e-1
+1, .191296815249017688466086224404338721195305110886988039895498, .290840599140433387120145642072012149683695633248674203901569e-1
+1, .221197411044723034711488888159126525528410946124673881118302, .306898989854110637510360869004425385522575459364285488106104e-1
+1, .252620730455767241399713577441113986903760494705917203065746, .321281202991736017438291825941555514048550420394475095924870e-1
+1, .285395150062953388744398357156598864664713238410587718351984, .333908688385343362579844156371097319692639460331972473015586e-1
+1, .319341667246347227621198552852784979905407759187622471406986, .344712479409720433085095401031806254183302056739295970905483e-1
+1, .354274877821827260539138397910631370449004197599020952639581, .353633569718021368352582136329218013749993186232232080667093e-1
+1, .390003988645686467867795968806079954179633942162686028109754, .360623235551306315500769505178629849308248296454074162957819e-1
+1, .426333859654779673291965960798544879991118202377498742372342, .365643301873181549007084566917425595912755026244036288622497e-1
+1, .463066069649794077389994303412493857514440710577161634104420, .368666350882108868285682432790438585451312062271539892581568e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .369675871765875771789390507582224505514766630069733929251986e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D85.IM b/cubature/GAUSSLOBATTO1D85.IM
new file mode 100755
index 0000000..ed7e88f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D85.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(85)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, 0., .528541226215644820295983086680761099365750528541226215644820e-3
+1, .1938752606604335046167493578932337702048977365458123199234e-2, .325406131073805581052964560002151091936796397760560542290230e-2
+1, .6489411035083400924898417091765610026574951624640195471259e-2, .584274448545860725911986776200257517397905868261829574973056e-2
+1, .13613708495944829588640207496012029306254151753444943838038e-1, .839959613496088728697088770095108635249415456410948809155864e-2
+1, .23273946308461230136293433098194745050295489068991639758520e-1, .109124679285766319964744794545246164230982147293061541268449e-1
+1, .35419662057923250309681161404230553337213978612363590702842e-1, .133684002700582083047141407508858976698018035098179005775827e-1
+1, .49987505451089976888429156111125749022151388346679644876448e-1, .157546199835975296589024822626144732693529553605439121196326e-1
+1, .66901516011532147629508551269220636477015549120096605061866e-1, .180586957763399529284792612825609597283356769373870920040996e-1
+1, .86073507290187419679502483895045626480636931666703407965942e-1, .202686187426964956456875050058338980169070149400352730364361e-1
+1, .107403523097560355770242630882954245728188255780104018956813, .223728688631270810618679099502651424273240663999173282440800e-1
+1, .130780357353570756657766972608598916401467243395506293390922, .243604762676462647921192255356368928364360572428638073493328e-1
+1, .156082133336727909811009468320680532954177299840481425744770, .262210788637971863337049910181526034693152624649500167685630e-1
+1, .183176938850735564238113240202313474280649635257397387397866, .279449765379130781136963292649945786567330160913466510661933e-1
+1, .211923513833067574621014274811208964586284433470499464760845, .295231818068887946354687913769264953510704524725620278221758e-1
+1, .242171986755442531710957558754110835888623482126684600970071, .309474667133806346157276735089591438328055557047757724285698e-1
+1, .273764655948580910305133994603280968972205676289697930558884, .322104057424413142524707743253055683814265969471296647918043e-1
+1, .306536811764494607352006062472777275406252337182228312825138, .333054145454872679023658294238724360222983757296364044292226e-1
+1, .340317595283317646953383547612769205815505430839315665444694, .342267842741378236904551900034422559043516221351680869309297e-1
+1, .374930889084302549773033992698954690686487826347629184460340, .349697113470796273402538957717757371033503502637196706520095e-1
+1, .410196235435001879831163897481272113126697025047343649504726, .355303224958656979096712265105608516141572741190089806874846e-1
+1, .445929777110521717543722097092571088022364607084626977972015, .359056949596564966222120314835550887825415289023120800972788e-1
+1, .481945215937189225092677887462567354114329138931406538911954, .360938717239367190188118789204774269654872482744545843139420e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D87.IM b/cubature/GAUSSLOBATTO1D87.IM
new file mode 100755
index 0000000..1bc2230
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D87.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(87)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, 0., .505050505050505050505050505050505050505050505050505050505050e-3
+1, .1852639065455764190223453663763580301185435400182929169937e-2, .310961515787432974926375820127318877648810171429281677395492e-2
+1, .6201590379346714488154038902104145162567115445360380515052e-2, .558414449829248193413710066299480050503461330708794420073933e-2
+1, .13011292496514063775196935983592104609650554419785656267509e-1, .802954474791866068605392063406602081754682060314855922356481e-2
+1, .22247288695948450216849336671970590685593243732876885106227e-1, .104347623581986327316161011835775330877632260697982469263383e-1
+1, .33863471697232096926713470693209784926007991302622093478801e-1, .127879497090759854985328597668951137560190682506952897685396e-1
+1, .47801943367846714306057349925055704987107775447765500492788e-1, .150774128767679695976959993110117974724369167916837313700534e-1
+1, .63993252928775869825725395835390457175210749255919148797184e-1, .172917548039949113358684816293553622705039312581748128389252e-1
+1, .82356731670004411363065543782943264728088628377164042577679e-1, .194199470731552237632447597287493533590732641989278346460412e-1
+1, .102800891464849473929190557875770339463192974875552509630689, .214513885655687538529240880154259265107544557201334307731317e-1
+1, .125223879340968043831679393544553217169043565098228582459325, .233759594253490311906255844163923333457112384844821988153685e-1
+1, .149513984402646864874221564519874112121450854921711089267499, .251840718926238709268533577769428245051046814229671455528944e-1
+1, .175550194137607570404087040235198308104283161370778817473149, .268667182393854135437130865949649076423130267617822086038248e-1
+1, .203202797180182832379556883427623811773544514767132445531750, .284155157218153210197636065045344644251179751436108730133243e-1
+1, .232334029465653996780528686199510939845112947729663769074386, .298227483795771067916945672592901135801661267075820011176314e-1
+1, .262798760529552091224104320842602921456984428140690072720684, .310814054953220582226340970770093522368947186657767135047418e-1
+1, .294445216520128400157085338077508729959554064927808280838928, .321852165320173305045609651424045569886042604513420772792919e-1
+1, .327115736315665345759113052917725641358487343786950581389517, .331286823782698736420682032094344685704043079964933954018274e-1
+1, .360647556976372941605782910022285799849032506892368678946444, .339071027480413053385913127901461962909674926928323532950564e-1
+1, .394873624615965762131787389890078745661613761220956458243648, .345165995993011310138391519335070386770370978239941172380772e-1
+1, .429623426652153295605953252359258561971949741015104953032242, .349541364555074403315048872807305216513462691363339662266838e-1
+1, .464723841289188086736482114576454458645094916136012422177589, .352175335339640217687071570684412719998122987562225824461046e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .353054786058572830112038066156046969607901153679001706076314e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D89.IM b/cubature/GAUSSLOBATTO1D89.IM
new file mode 100755
index 0000000..994a10c
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D89.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(89)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, 0., .483091787439613526570048309178743961352657004830917874396135e-3
+1, .1772137147592048723585683258751486256219796009078414059292e-2, .297457437272017910788031218577733513965939565925192898913483e-2
+1, .5932490408894802889920640390165570705567443672804413980450e-2, .534231920006649280428341342793611089416546889464720497296071e-2
+1, .12447943001596602498561306500387750910433119182741698223195e-1, .768335329026155829039388130308936607472284565385753407485793e-2
+1, .21286937844302621429841468862969128897309715593356083801892e-1, .998760070080439136484642016165300425755691021533898777649254e-2
+1, .32407263196693067623143405815308738758224316737423731348758e-1, .122442098083296887217891440021187295513584393116453498360141e-1
+1, .45755899930062439594689120156188783517640147596749431178682e-1, .144424550896520150667362001566922186671363092373722348380670e-1
+1, .61269226137982310458311710275787091294923892846644258173520e-1, .165718694467928916813457728779945714870656963935785161361960e-1
+1, .78873309531678610326550083843385364085069279296301590669407e-1, .186223084271987725154747573710696175531991995596359426271837e-1
+1, .98484256535526884945721196234562396150246847748431331828162e-1, .205840021206053335200389139739259640350134595535374144570746e-1
+1, .120008610913335660957144321375699769878137864336430405149836, .224476028164542332533854847267585043542742108925156628288603e-1
+1, .143343798647944004108521350915435200171121770545193835902494, .242042299483425676999670730676884861487223218749938366655599e-1
+1, .168378616532068938026929459819304728980935763039599873261850, .258455125766098410835265926678504150179145890802105615146886e-1
+1, .194993761992253283074712573881451220989363090759950168844740, .273636293525995089110693718355153146499664040978579311961439e-1
+1, .223062401561519866716749865606971408079223164179217380201352, .287513458262062702382921970999086881022390445904353956096245e-1
+1, .252450775265802380138480110825989297251448090364159274784968, .300020489394682165354164998743990765039178017887355476018993e-1
+1, .283018834031850446122376722380670642446294623817986074297069, .311097785506338185088408185323738216544398284960539937993630e-1
+1, .314620907073032286403970731443035815155051217465660378097052, .320692558425211851752476745264673022400211487598274066068827e-1
+1, .347106396069469512394744290200390543078886295041882626222762, .328759084817583729287434872817473756520078141179069966129754e-1
+1, .380320492832679197981032635321399011478355128849903032238425, .335258924100151746024136576714821003912300893690846151336898e-1
+1, .414104917033727989605054416562223372487705177730327520632875, .340161101639171675407431075991762382586363830590580272338941e-1
+1, .448298670478694064741356563842938051788403127350474487877666, .343442256366347234235488694442734811702735848565179247913248e-1
+1, .482738804336601950819712944730684398282065328179462360972591, .345086752109679834994463019029235342351263980761995861963242e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D9.IM b/cubature/GAUSSLOBATTO1D9.IM
new file mode 100755
index 0000000..9e7f649
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D9.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(9)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, 0., .333333333333333333333333333333333333333333333333333333333333e-1
+1, .117472338035267653574498513020330924817132155731947880336209, .189237478148923490158306404106012326238162346948625830327198
+1, .357384241759677451842924502979560464040498263636787304090125, .277429188517743176508360262560654340428504319718040836339474
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D91.IM b/cubature/GAUSSLOBATTO1D91.IM
new file mode 100755
index 0000000..a738a40
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D91.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(91)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, 0., .462534690101757631822386679000925069380203515263644773358002e-3
+1, .1696769728939655449898193064058979113147692941686231949592e-2, .284814004579613276904969787788933959722288779113844221512666e-2
+1, .5680523040958664339276124068956443398270611517275247834068e-2, .511585026628736256296323122679567152040184987392116500015580e-2
+1, .11920357965141415004920015886274028407356967311186933337004e-1, .735901924619743094040248778267157455436635719545670489519940e-2
+1, .20387317246501714903152477743559299031618034064997393291782e-1, .956844605254190108414427001338055507383620620665770445170308e-2
+1, .31042682030677588381984236606523485573155786913270218674872e-1, .117341732314406645340203242277662575805019410755781455926038e-1
+1, .43837809720681058791117594863264983503192358905592071760196e-1, .138463461058774436790338982838289879331934342345625571790049e-1
+1, .58714309922328037835366887425420773274979254396278832136762e-1, .158953354913401888098186244414653161342367497068342973313697e-1
+1, .75604300535408071087346394823240292931186801120282029204392e-1, .178717953593316583099411475939818348359765799964522893060309e-1
+1, .94430714396705480613101912543060593613934938302335376481836e-1, .197667088832067336257586076723582217440375205147855088821752e-1
+1, .115107649804958993134266364754029423854603211924582555467658, .215714306321770436514247155190267657065057329026814142941225e-1
+1, .137540762009425744934813344270391320004938750696659919781565, .232777263997014167475125693709443434154662959182885045208739e-1
+1, .161627693471821438412452406637291737170680054118718598939691, .248778109299393523214602881081278937736420435843877180137207e-1
+1, .187258540795076704124066966585725110260153017141681322452120, .263643835098714713670670080197867641797551486922248888113491e-1
+1, .214316356131434762642242093446086310969405123979614399906438, .277306613145176420475212409499902425398412185383995898076844e-1
+1, .242677680757295432130537908025927953958438563483072474263968, .289704103727715975699676023441150745970196876900695087671035e-1
+1, .272213108368622852835807177769872742856328209628737769287290, .300779740209915151361730092286051071671859910887328499249488e-1
+1, .302787875520952849390571135095282993987655003166877396397740, .310482987183895435468513436537075718446673443064696469155710e-1
+1, .334262476516927449161461084304161739690048959301202007492872, .318769571083136363357987384644647672036229304435256571924040e-1
+1, .366493299934102232426005454625987412623387753218658415485594, .325601682211610430002823178134310228509294105003021060728896e-1
+1, .399333283887744948154017674237221151370745498675328191319840, .330948147272555844853125102605252459699147682072027280152169e-1
+1, .432632587038246536725681008255847904682336281381798396724198, .334784571612513733206425986460781389785265679093853557693488e-1
+1, .466239272281142725079033433812637613533109893369804594978188, .337093450533211611767721608787997709570411889297429585857465e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .337864249164326906925184418865172135454558834537257424632842e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D93.IM b/cubature/GAUSSLOBATTO1D93.IM
new file mode 100755
index 0000000..114138f
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D93.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(93)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, 0., .443262411347517730496453900709219858156028368794326241134752e-3
+1, .1626109330071267797692072373150016091366800561742908280450e-2, .272959630012405961009479858389372425873586410364006061356753e-2
+1, .5444264993182136054224912442190918077150018274740761981822e-2, .490346598945016402657017219271948547391488206177544494332458e-2
+1, .11425576554581613560070007104095043923383495161694568027564e-1, .705474530274435661850367771325717272284392764292385689623821e-2
+1, .19543423246809204947244124334471781785790146137279068055338e-1, .917501823760954073425201590173472527425514147949208103637512e-2
+1, .29762225332459352400338559594286690381964618830439084104138e-1, .112551318684680422493836155239295800950732403333716346081554e-1
+1, .42037275011876789961233097281756528387856659972859651313942e-1, .132860162954556585611528552193808956139629660259863010569099e-1
+1, .56314887840889951402168458167605467458447478538783387727340e-1, .152587988106518212647424126912057746209904343951026089276239e-1
+1, .72532627580612964865258133078257278641958388279673463454464e-1, .171648558503369184900919708965030603617275212931346605194058e-1
+1, .90619576257197065651154095149458433347381527009430248381667e-1, .189958539633640782628430487539298225760459551428038748231570e-1
+1, .110496643200078089014710348324297512252557573502229674823132, .207437872594236455622705693211860630268345858752098807296161e-1
+1, .132076910443575815618797992735766123078165725128757937730684, .224010127820358052401764957597527850306045091246694393282729e-1
+1, .155266012594454644813548785923602037587381614888049006750448, .239602840783677503303225882899489732715839746227535504882171e-1
+1, .179962549367021431085899757304374861658556892978888520748500, .254147829529723486272190054073984326908260875395145040256082e-1
+1, .206058528927257409486881345156247996361595481134201621748840, .267581493143374656127129209960036507222492460567042414744269e-1
+1, .233439840083611519447607871358310327558895347186810952589156, .279845090025744177913604329779925150998710474985794923503074e-1
+1, .261986751248571460989158039946768179130510664304968826927674, .290884994846373158289330197596056995846896164932903719828291e-1
+1, .291574433983648665043461141450612493361955039487285558319691, .300652933084220115254355592692242133584800401702743643364172e-1
+1, .322073508835546978089045865326849964674751818553522541760306, .309106192149896834036141040942375738842042880302092994269709e-1
+1, .353350611075120367320458598110245687961630200859749624162232, .316207808175189928311301691370251854104006948477846225003503e-1
+1, .385268973864377714836997239192243185696629610112453147371659, .321926727658005882664811970026114708507434548194771017260133e-1
+1, .417689026300954686261069853020323979637339482473438599424843, .326237943258629117880384094278807875687447482603815798217729e-1
+1, .450469003724624943826487252830972982282971600685253570373713, .329122603155040085475607753462479983419325383469304048838413e-1
+1, .483465567616923544454465044416054545545986087120742547936831, .330568093480008970966137318336211903031292036985036578727243e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D95.IM b/cubature/GAUSSLOBATTO1D95.IM
new file mode 100755
index 0000000..7e74abf
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D95.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(95)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, 0., .425170068027210884353741496598639455782312925170068027210884e-3
+1, .1559772044988536141210199773977409150490164680117038911430e-2, .261830014988887259563935863018485139727201813954910838374717e-2
+1, .5222437690384632145835700007457761000616745954765953793651e-2, .470402348142779723919375145510615183114495461477211400827596e-2
+1, .10960937749313992060591848547946117619560209197606326818372e-1, .676891469079090859891470759180269218726816302388615632381805e-2
+1, .18750756003373635024204975860174371618279735385099275038308e-1, .880526340839155315858465234470358141605790272792996492172219e-2
+1, .28559140168400121020356404088932574869892079538856385979010e-1, .108046421204110038526866569722095561785211755077330167485954e-1
+1, .40344927863707754672192318387458150878713119818488522338788e-1, .127586895835683523671063538157555326838948317502226507537428e-1
+1, .54058676986778786457045135493621556127236949910063505098953e-1, .146592173549215013551753638826809264969175747054954011051597e-1
+1, .69642863597605257426513795804140126017182604470282336093928e-1, .164982567528625391083075752875274411495645969658756188201038e-1
+1, .87032120357464631215331146970598491187961615068836065019521e-1, .182680954066883174214759246093200773560561797483369257793217e-1
+1, .106153509678172995431868812078757248993758707847144824492718, .199613105717952217128759102019208283647371242334497862979402e-1
+1, .126926829224110158673616911259136220282679940462584318222687, .215708006135082351065060713625550215437102879770957692810786e-1
+1, .149264948114473522931935601427497057577452017108565047384866, .230898149367786367327616174083112349281637229109600451117080e-1
+1, .173074172283893765679279128772201125810439557547535218830872, .245119823646127035778100772975780875082381128962639955273047e-1
+1, .198254637416616749703024608095569570400397526707818191617897, .258313378919823267626743142974550409864465078204245546242808e-1
+1, .224700727783385993879640200601789693261321020813356290418250, .270423477210676408622586286609668663454708086573523449464831e-1
+1, .252301519213623799799322759771019620267742049910036628943100, .281399324805679234443375248190117769520407570473986746607751e-1
+1, .280941244339629079687101646274462647985909364682983475305240, .291194885352455119748011905728358332667542480719736835590711e-1
+1, .310499778158615563055157713879855576395961236358344908128363, .299769072980525943834928892783058690420517281073192193044490e-1
+1, .340853141874449220197144967634195539263961368183778278754894, .307085924647234634798085568692838455330341607447550569836385e-1
+1, .371874022904926905770183740610334187888700220811836235359886, .313114750990163424470553374507762154874306011523088229860040e-1
+1, .403432308872989645021561828462592204651725234501777358314910, .317830265055933206782757635432555518066692429018412813384681e-1
+1, .435395633341810033507140423637509871973147751685415387120958, .321212688366941661852634921836253118408120512190053953834151e-1
+1, .467629931004550435468020473483192600957162652997563240667649, .323247833882029222779612695198074406430971512077501264269653e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .323927165503618675853585408968432511977275686781704035427405e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D97.IM b/cubature/GAUSSLOBATTO1D97.IM
new file mode 100755
index 0000000..9f831fb
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D97.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(97)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, 0., .408163265306122448979591836734693877551020408163265306122449e-3
+1, .1497412318678206881921358217558194701674587978913997349860e-2, .251367277487082886318422299890915057280669786922133174417333e-2
+1, .5013889970989598988773989337041792253079749347212573348455e-2, .451649334344980104967080915294628614341233753582643594265367e-2
+1, .10524044676640095366345039696956508628589486487249252571917e-1, .650006990610588032825099655424251926419655479744302018600803e-2
+1, .18005259945015693933062775775160758762893203501328082311869e-1, .845732774193188301159757103898438680805373274927166687082510e-2
+1, .27427335659559293115903742940004674265484849501618513860019e-1, .103804947485079967196479167792166315881683003622497783859986e-1
+1, .38752310748623626671513971937442545077317602058313291278024e-1, .122618508590847471574748553952270392106040025094605595382356e-1
+1, .51934575461583683619222842677711603962983025127776567745414e-1, .140938277255301245831251301479793549266149815887303811150183e-1
+1, .66921045911323344516141737824237158935973114976505250116796e-1, .158690513032853193754500903763001784921112453222749569689286e-1
+1, .83651375101771023606481683295151022396208737472067598861524e-1, .175803745446736248147692900469209726464018280448182015174971e-1
+1, .102058194941135765306482920895896074021495385435503873817302, .192209071054988672812292052225222158529342535475864066343762e-1
+1, .122067387102973480469793788671964231463976631150549033693528, .207840434261842463663558942116438500247618335282250363505805e-1
+1, .143598381288177070072785052052548168271866254325871398048060, .222634894672363711152290367718674245084598341754398509483202e-1
+1, .166564479560477592052185913823750859442769030784031712585308, .236532881146183614267571750553987382699615342454941334284665e-1
+1, .190873205399235414583091006568492602750311943799646031952236, .249478431966716880232269772599339848985246013614786729103630e-1
+1, .216426676042164787135531053982202752025924783095344474289128, .261419420332167317077977737047894719696584720102934782778645e-1
+1, .243121996608475627966224314729235699104669572988681730449703, .272307764334653076463357256031863292678284196453193983481533e-1
+1, .270851674410350120362588016904056941148292714904999812755077, .282099620616050705138089800424559163187805788572878068664591e-1
+1, .299504051781800759550391300211777655902213034956096508289519, .290755560937370500804734631635276753169808856958853145216894e-1
+1, .328963755680598078185463754556447943885251037241606456273320, .298240730959167270733516166702495328974062521193160116114718e-1
+1, .359112162252045243988518033879827535926947480619414245659005, .304524990598163955014613888961342696079578112286585397034995e-1
+1, .389827874483471761967173409196401593899713807507542608731809, .309583035397430895091388461375596690765152082711379378157848e-1
+1, .420987211025798548506742691744387048947646596419300489768388, .313394498422840053734287516708961911104140862429346167014762e-1
+1, .452464704213671676119178501855295653052361153467163545972086, .315944032276333166071090952855062433397999678907591436310530e-1
+1, .484133605278688143544033920971533277260372259705714356083484, .317221370896264434221455959768672740100955723332145714659200e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/GAUSSLOBATTO1D99.IM b/cubature/GAUSSLOBATTO1D99.IM
new file mode 100755
index 0000000..3b51ff1
--- /dev/null
+++ b/cubature/GAUSSLOBATTO1D99.IM
@@ -0,0 +1,34 @@
+%% Automatically generated by Maple %%
+NAME=IM_GAUSSLOBATTO1D(99)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=26
+1, 0., .392156862745098039215686274509803921568627450980392156862745e-3
+1, .1438718440505553000778287765546161339467588801705260798058e-2, .241519198925399992634537536123539989504955183055196160536530e-2
+1, .4817583156244205210783465248650660140408273051598576039058e-2, .433994642071096657562598742170917284213593278170768657069161e-2
+1, .10112733795203954834179361623596764004514441087183314227896e-1, .624689429243356295138283855610665008366026675180669349488784e-2
+1, .17303272262056345232914286622408523502130942017424694956540e-1, .812953461730908564676215112569504982620738298750638378846093e-2
+1, .26361306845552478838602914864690438977775264057745361411459e-1, .998068862226839188348858388036163204477506242318964490823927e-2
+1, .37251772927948219400608199554383702227463848873139480554308e-1, .117932174612492943418359297797194761204775855737874038395979e-1
+1, .49932529658387783709340512574335547200370302127787944783902e-1, .135601157368362000192527643905320668550867029814244088147125e-1
+1, .64354514234396966558659702363730474741074318539767952788773e-1, .152745502365992465022400795734437045110014963677896755022993e-1
+1, .80461929101112867180292180761244532519820592763970367721930e-1, .169298892520024019054491366793985687616972676486817951557901e-1
+1, .98192456877179849949575280519931176690113830577918789149014e-1, .185197291265852075597308729426518934400395687302238187291688e-1
+1, .117477501058215892062348388644163860561404497365725864512901, .200379193533530478706927229476522519852254528423221328019717e-1
+1, .138242451224404284115877756879100162134125677162901970034738, .214785865016768320595928688982810371562439429111377994789793e-1
+1, .160406971604743480130757230809093546030007609921015974706618, .228361569995172596022015255541037053750774267312325756961983e-1
+1, .183885311833304000964812294230758914239579581015037756385945, .241053787250391920478301730187441427385863016397854690678928e-1
+1, .208586638674256880707011897454547229996015224235294465421524, .252813413407355477327850991902774656947952831389594202426744e-1
+1, .234415387422475742967816923929559707793463594623338481285306, .263594952985287598105251130475744401514323151123984298742742e-1
+1, .261271631615326365584482062275156027193435269002417978231028, .273356694455988704330265624279951068279751258604703012739106e-1
+1, .289051469622739700432554628309368562728751697432827094380026, .282060871644186306051759839117850642532525580209101761040391e-1
+1, .317647426618522356642121403022075008484210704251771695938842, .289673809853680093381620882734751266132517504307773513353363e-1
+1, .346948870376954884920913838883342131970142723184144046959478, .296166056158298748594162978980489043886068727334117761634691e-1
+1, .376842439285568544503412205602937848650855659559686989094672, .301512493356009335274362744745266502196236654144761000401301e-1
+1, .407212480917913530917513550945242868886164339873049613007823, .305692437146692533026118545996596983955956967562142611244606e-1
+1, .437941499469383861600073292950993971132836467217719758014642, .308689716158432008820826382862959692917491854041606532010468e-1
+1, .468910610324937954931831239108671291576409502416561969558262, .310492734513196331363829924961362257148189573767670547862835e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .311094516690149988814967979801615857841321187785550094047928e-1
+NBF=2
+IM_NC(0,0)
+IM_NC(0,0)
diff --git a/cubature/Gauss1D1.IM b/cubature/Gauss1D1.IM
new file mode 100755
index 0000000..e2d4057
--- /dev/null
+++ b/cubature/Gauss1D1.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(1)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, .500000000000000000000000000000000000000000000000000000000000, 1.
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D11.IM b/cubature/Gauss1D11.IM
new file mode 100755
index 0000000..cef9a46
--- /dev/null
+++ b/cubature/Gauss1D11.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(11)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, .33765242898423986093849222753002695432617131143855087563725e-1, .856622461895851725201480710863664467634112507420219911993179e-1
+1, .169395306766867743169300202490047326496775717802414964592736, .180380786524069303784916756918858055830760946373372741144878
+1, .380690406958401545684749139159644032290694684929989324909302, .233956967286345523694935171994775497405827802884605267655812
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D13.IM b/cubature/Gauss1D13.IM
new file mode 100755
index 0000000..99de805
--- /dev/null
+++ b/cubature/Gauss1D13.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(13)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, .25446043828620737736905157976074368799614531164691108225616e-1, .647424830844348466353057163395410091642937011299733319885768e-1
+1, .129234407200302780068067613359605796462926176429304869940022, .139852695744638333950733885711889791243462532613299382268506
+1, .297077424311301416546696793961519268326308992950314936806478, .190915025252559472475184887744487566939182541766931367375543
+1, .500000000000000000000000000000000000000000000000000000000000, .208979591836734693877551020408163265306122448979591836734694
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D15.IM b/cubature/Gauss1D15.IM
new file mode 100755
index 0000000..c30eb33
--- /dev/null
+++ b/cubature/Gauss1D15.IM
@@ -0,0 +1,12 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(15)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=4
+1, .19855071751231884158219565715263504785882382849273980864180e-1, .506142681451881295762656771549810950576970455258424785295031e-1
+1, .101666761293186630204223031762084781581414134192017583964915, .111190517226687235272177997213120442215065435025624782362954
+1, .237233795041835507091130475405376825479017878439803571124572, .156853322938943643668981100993300656630164499501367468845132
+1, .408282678752175097530261928819908009666621093543513108841406, .181341891689180991482575224638597806097073019947165270262411
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D17.IM b/cubature/Gauss1D17.IM
new file mode 100755
index 0000000..566022e
--- /dev/null
+++ b/cubature/Gauss1D17.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(17)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, .15919880246186955082211898548163564975297599754037335224988e-1, .406371941807872059859460790552618253378308603912053753555203e-1
+1, .81984446336682102850285105965132561727946640937662001947814e-1, .903240803474287020292360156214564047571689108660202422491541e-1
+1, .193314283649704801345648980329262907607139697529717653563594, .130305348201467731159371434709316424885920102218649975969984
+1, .337873288298095535480730992678331695714021869631513455586476, .156173538520001420034315203292221832799377430630952322777001
+1, .500000000000000000000000000000000000000000000000000000000000, .165119677500629881582262534643487024439405391786344167296548
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D19.IM b/cubature/Gauss1D19.IM
new file mode 100755
index 0000000..df780b4
--- /dev/null
+++ b/cubature/Gauss1D19.IM
@@ -0,0 +1,13 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(19)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=5
+1, .13046735741414139961017993957773973285865026653808940384394e-1, .333356721543440687967844049466658964289324171600790725643390e-1
+1, .67468316655507744633951655788253475736228492517334773739020e-1, .747256745752902965728881698288486662012783198347136839179021e-1
+1, .160295215850487796882836317442563212115352644082595266167592, .109543181257991021997767467114081596229385935261338544940551
+1, .283302302935376404600367028417107918899964081171876751748649, .134633359654998177545613460784734676429879969230441897900290
+1, .425562830509184394557586999435140007691217570289654152146006, .147762112357376435086946497325669164710523358513426800677155
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D21.IM b/cubature/Gauss1D21.IM
new file mode 100755
index 0000000..0b656b4
--- /dev/null
+++ b/cubature/Gauss1D21.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(21)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, .10885670926971503598030999438571304614288795540107792287100e-1, .278342835580868332413768602212742893642578128484490741742171e-1
+1, .56468700115952350462421115348036366684162124387342807516294e-1, .627901847324523123173471496119700500988078956977017503318812e-1
+1, .134923997212975337953291873984423270975178468986934844010811, .931451054638671257130488207158279458456423740201017058907873e-1
+1, .240451935396594092037137165270695222759886442440035755489538, .116596882295995239959261852421587569715899086158479254513645
+1, .365228422023827513834234007299569237660189068780473859188037, .131402272255123331090344434945254597686382338801572278190025
+1, .500000000000000000000000000000000000000000000000000000000000, .136462543388950315357241764168171094578020984947391873798800
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D23.IM b/cubature/Gauss1D23.IM
new file mode 100755
index 0000000..1c7b121
--- /dev/null
+++ b/cubature/Gauss1D23.IM
@@ -0,0 +1,14 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(23)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=6
+1, .9219682876640374654725454925359588519922400093134244768659e-2, .235876681932559135973079807425085301585145369974235447802636e-1
+1, .47941371814762571660767066940451903731201645393351226722962e-1, .534696629976592154801273590969981121072850867351624400025028e-1
+1, .115048662902847656481553083393590962007537124990534181167790, .800391642716731131673262647716795359360058652454320889552036e-1
+1, .206341022856691276351648790529732859815450742975973759244864, .101583713361532960874532227904899188253259073637295073199278
+1, .316084250500909903123654231678141219371819929332295189344100, .116746268269177404380424949462439028129704986099877437365261
+1, .437383295744265542263779315268073435008301541847277863393539, .124573522906701392500281218021475605415230451284809415697675
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D25.IM b/cubature/Gauss1D25.IM
new file mode 100755
index 0000000..68b7e20
--- /dev/null
+++ b/cubature/Gauss1D25.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(25)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, .7908472640705925263585275596445194467504719037062545652996e-2, .202420023826579397600107961004930300209932728724944340674059e-1
+1, .41200800388511017396726081749640243804762604944158352052358e-1, .460607499188642239572108879768985604618419999311184195442782e-1
+1, .99210954633345043602896755208570054847192137604749985051308e-1, .694367551098936192318008884344357338109313591316491138226614e-1
+1, .178825330279829889678007696502242174964151300869211571305429, .890729903809728691400233459980489977564063253305082514933362e-1
+1, .275753624481776573561043573936180066099039166279121060520858, .103908023768444251156261609653026381693291304599751774609572
+1, .384770842022432602967235939451005582394228812058234418265370, .113141590131448619206045093019888309217378868807778509932485
+1, .500000000000000000000000000000000000000000000000000000000000, .116275776615436955097294757634417974078313738653398993059332
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D27.IM b/cubature/Gauss1D27.IM
new file mode 100755
index 0000000..bb83c7a
--- /dev/null
+++ b/cubature/Gauss1D27.IM
@@ -0,0 +1,15 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(27)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=7
+1, .6858095651593830579201366647973599161954296380387059177964e-2, .175597301658759315159164380690958903098528046385636382909002e-1
+1, .35782558168213241331804430311062867761480394795081190641019e-1, .400790435798801049028166385314271547918488926972973826023319e-1
+1, .86399342465117503405102628674802519480149449262459409219646e-1, .607592853439515923447074045362383129783346728450373361465086e-1
+1, .156353547594157264925990098490332931230799393626414662190367, .786015835790967672848009693119210783028340186686616874843807e-1
+1, .242375681820922954017354640724405668845557358715346981524248, .927691987389689068708582950625785181244613014686658295099871e-1
+1, .340443815536055119782164087915762266582869398233078021701675, .102599231860647801982962032830609027855169530654709725858446
+1, .445972525646328168966877674890082626194024197262881221479590, .107631926731578895097938221658130017637498779027064400109889
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D29.IM b/cubature/Gauss1D29.IM
new file mode 100755
index 0000000..0a71f3e
--- /dev/null
+++ b/cubature/Gauss1D29.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(29)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, .6003740989757285755217140706693709426513591438119255000001e-2, .153766209980586341773141967886022088608740724167170371332114e-1
+1, .31363303799647047846120526144895264378001863242347771049318e-1, .351830237440540623546337082253336692333540163771653599145555e-1
+1, .75896708294786391899675839612891574316871912631503682952136e-1, .535796102335859675059347733429346517077718578790509903459543e-1
+1, .137791134319914976291906972693030995184550352707948718224288, .697853389630771572239023972555141612604251376577556216003480e-1
+1, .214513913695730576231386631373044679380806801858625197573368, .831346029084969667766004302406044055654500900492064536609347e-1
+1, .302924326461218315051396314509477265818623611920650872484418, .930805000077811055134002809332114122531130061389642014077767e-1
+1, .399402953001282738849685848302701896093581772768681160192025, .992157426635557882280591632219196624093462799787709967423680e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .101289120962780636440310099983759657419331079004738678398352
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D3.IM b/cubature/Gauss1D3.IM
new file mode 100755
index 0000000..228f20d
--- /dev/null
+++ b/cubature/Gauss1D3.IM
@@ -0,0 +1,9 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(3)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=1
+1, .211324865405187117745425609749021272176199124364936561990699, .5
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D31.IM b/cubature/Gauss1D31.IM
new file mode 100755
index 0000000..d79629e
--- /dev/null
+++ b/cubature/Gauss1D31.IM
@@ -0,0 +1,16 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(31)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=8
+1, .5299532504175033701922913274833686286862964171177434974388e-2, .135762297058770474258902862280090517561336877833803989881559e-1
+1, .27712488463383711961005792232695827454430363704463699537223e-1, .311267619693239464314219184971888471374932541764534289453924e-1
+1, .67184398806084128059766051143803433806332307576236645948244e-1, .475792558412463924049625538011231131776317515918563290816126e-1
+1, .122297795822498483052449402576278865823093171771248495109122, .623144856277669360262381410960082100724434296111013399734514e-1
+1, .191061877798678125776664117975604490504058891117171102948102, .747979944082883660407508652737392744852455341039182334031950e-1
+1, .270991611171386306828790278508211213229984193482238254549422, .845782596975012690946560395151799811058197367080141408725981e-1
+1, .359198224610370543384769749269751946756965254614700099725582, .913017075224617944333818339846099696917781118273246412092481e-1
+1, .452493745081181279907340332287520968434823472155467271651390, .947253052275342481426983616041415525734544941979514875187562e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D33.IM b/cubature/Gauss1D33.IM
new file mode 100755
index 0000000..bfc29cb
--- /dev/null
+++ b/cubature/Gauss1D33.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(33)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, .4712262342791332162282990029667361746105074770217848608046e-2, .120741514342739659800550131437826623458486579725126391475006e-1
+1, .24662239115616119388641521052098489278307476720445646165016e-1, .277297646869936005647200826791223302564231259766144234813529e-1
+1, .59880423136507048938522152755922153688291591032786049824045e-1, .425180741585895904417676850955310369252456946092527378620328e-1
+1, .109242998051599296537384972239761974888013763629715743743342, .559419235967019855473941928131779633679217121315385250049005e-1
+1, .171164420391654617074848891678498832426097054262013378097384, .675681842342627366431599908511750986860629266172445101892847e-1
+1, .243654731456761516056876715685224062708538138794413547043634, .770228805384051440407157974009793059702415292355089671931906e-1
+1, .324384118273061842351407241452326997479730124212162488340420, .840020510782250222549853318941615775105990644825370071349659e-1
+1, .410757909252076072074661253172967221262290333654237178218524, .882813526834963231626354950565986195754622090003740590215712e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .897232351781032627291328221309428107243901599488342618338347e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D35.IM b/cubature/Gauss1D35.IM
new file mode 100755
index 0000000..952a6d7
--- /dev/null
+++ b/cubature/Gauss1D35.IM
@@ -0,0 +1,17 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(35)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=9
+1, .4217415789534526634991997646924614873710531577280153540162e-2, .108080067632416551566713551332262346938426157377949727896348e-1
+1, .22088025214301122409402053535111845013577932594346760577306e-1, .248572744474848982266674731013193208404331230644551011256253e-1
+1, .53698766751222130396969704436427242296052364323850892906267e-1, .382128651274445282645648388083182628026589531041791437164298e-1
+1, .98147520513738442158791272492704601448350539194038759124786e-1, .504710220531435827814069924624173035314005694438394508044142e-1
+1, .154156478469823396062554459355575805273864713591246120548918, .612776033557392300922595634001007776140819486667195485792206e-1
+1, .220114584463026232696064225737335431536186757114645291680006, .703214573353253256023656518759736140477512051654862799412761e-1
+1, .294124419268578676982034103083474181460505158939987244359426, .773423375631326224627090019181873860966091981336770863333095e-1
+1, .374056887154247245205513572561044384918569117170179770989864, .821382418729163614930268882329637952061694769986764766222611e-1
+1, .457612493479132349378869073532108094133341306546955039978318, .845711914815717959203282350674933051670529096851719401349378e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D37.IM b/cubature/Gauss1D37.IM
new file mode 100755
index 0000000..104662f
--- /dev/null
+++ b/cubature/Gauss1D37.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(37)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, .3796578078207798405491164873369753205341799298394606660160e-2, .973089411486323851815602073221921787645330453464332054134874e-2
+1, .19895923932584984573610579656174236692454248362930947041092e-1, .224071133828498001664190787009971059758771137339288010608783e-1
+1, .48422048192591049178669535733843756095303032971322091152484e-1, .345222713688206132903541290030065224809240158438065655866051e-1
+1, .88642671731428587510538756643643049112730756896584979315068e-1, .457450108112249997322310470619198263304558256482993923397750e-1
+1, .139516911332385310691452069588109185171429083545666612530705, .557833227736669973580119508408829987406659269199468877610763e-1
+1, .199727347669159488265180917526880360065838958633853716206706, .643769812696681138377578924284385585279197885467315172753363e-1
+1, .267714629312019527141366425947948816011857142687931701507846, .713033510868033058878730547209514862378341724122369304633874e-1
+1, .341717950018185084004941335575077541053857390433556377422136, .763830210329298333894277004488314992305041336182143117615432e-1
+1, .419820677179887312065951942129628225247563249764562310562678, .794844216969771738249782197325236008393900790975630478755874e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .805272249243918479895818126604583675199512792892584510641616e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D39.IM b/cubature/Gauss1D39.IM
new file mode 100755
index 0000000..fa326ee
--- /dev/null
+++ b/cubature/Gauss1D39.IM
@@ -0,0 +1,18 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(39)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=10
+1, .3435700407452537606938805764339860888676434549172051925908e-2, .880700356957605915593098117592640818107155277166836617087430e-2
+1, .18014036361043104366166934401361389043969836096905571968231e-1, .203007149001934706655199761374660549395453199949757681496613e-1
+1, .43882785874337047066123779398350943475407601288154112602059e-1, .313360241670545317847532675935208031758005382892181820840377e-1
+1, .80441514088890588302735469149239657335185317467181313373754e-1, .416383707883523743623790716110231030500889142915816454573766e-1
+1, .126834046769924603692847464822179204844634660215411777930227, .509650599086202175183750677401749380833458280116962781486420e-1
+1, .181973159636742487273581651886857031628305441600315768030276, .590972659807592086561886888556911435025206097744843877255830e-1
+1, .244566499024586450997817974522374500787254335398786583263826, .658443192245883134492472498740815674580552555734917634980915e-1
+1, .313146955642290219663725911487536381302126839147158644086026, .710480546591910256646491625335824665172577066960101516687970e-1
+1, .386107074429177460959751902315712687628455531158536263842682, .745864932363018733939143685009847183463399520406841582481140e-1
+1, .461736739433251333122679795300580894497601866593251249597602, .763766935653629253490421659775487967459743225561892986373505e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D41.IM b/cubature/Gauss1D41.IM
new file mode 100755
index 0000000..2c7ee17
--- /dev/null
+++ b/cubature/Gauss1D41.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(41)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, .3123914689805249869878982031029535403330772608835407209563e-2, .800861412888716666211230842923550763294521105895124102838633e-2
+1, .16386580716846852841688892546152419287653156335076575023514e-1, .184768948854262468999753341496648330944721540743649187233885e-1
+1, .39950332924799585604906433142515552920426195175889151411932e-1, .285672127134286041418179132362239787456437984131280205911233e-1
+1, .73318317708341358176374680706216164861947098410328014628504e-1, .380500568141896510085258266500915896130771762119830142722936e-1
+1, .115780018262161045692061074346885982589511647114315224565636, .467222117280169307766448705569660442417633236807964225415575e-1
+1, .166430597901293840347016665004830418701485328344298578762266, .543986495835741888317372890350528210168497978969281652914971e-1
+1, .224190582056390096470490601637843356688969887884660167497847, .609157080268642670976835885628667991781688127807687251170733e-1
+1, .287828939896280608213165555728105973951777384080182707887871, .661344693166687308905262872483878021645057700715784116087933e-1
+1, .355989341598799451699603741967699840045490868176983385622859, .699436973955365773610667119337915554463965804774598021868743e-1
+1, .427219072919552454531484508830656834941836987781031121289256, .722622019949850295319135832768762718049749810985499173762376e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .730405668248452135959925738416855941224047884709827220536614e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D43.IM b/cubature/Gauss1D43.IM
new file mode 100755
index 0000000..e3db9d2
--- /dev/null
+++ b/cubature/Gauss1D43.IM
@@ -0,0 +1,19 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(43)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=11
+1, .2852707258800353963484289419350509803472900801984232511488e-2, .731399764913610034249554902359272259510597456216186396383505e-2
+1, .14969751082285636438024506617365644597015538431098515220131e-1, .168874507924070773966511234329564506745846572372373303338209e-1
+1, .36521613906412999739653530370473401682335173313974008977714e-1, .261466675763416429701560256366056280560750467846181572502817e-1
+1, .67093711139849931731787181490310635457601622205776921936454e-1, .348982342122602440474807094651088286993875264775402636205681e-1
+1, .106091597010395918997861022295824239305910664334218420939154, .429708031085338637072218406863514330945722026745398918192088e-1
+1, .152756368406658609974655082118871614366328855011282419439133, .502070722214404824660394189152681411754055443838498128712705e-1
+1, .206179798246544203520561536180676325561192198213141080114983, .564661480402696091967003037108921595571316660604973521378168e-1
+1, .265322081006621486796834644516796826952328104434631726101950, .616261884052562121427804930774072359797224995024839862136541e-1
+1, .329032089553957887420926289786310190220413350414656328001569, .655867523935311853664824962651537229378709470940153265626250e-1
+1, .396069786655889357260576733040227132892162445451033175165674, .682707491730075856762869156157586982931838264943430840547327e-1
+1, .465130363340138889393079101940685959088851850259884262646659, .696259364278159966877051241709049789369601087287129290630986e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D45.IM b/cubature/Gauss1D45.IM
new file mode 100755
index 0000000..19ce331
--- /dev/null
+++ b/cubature/Gauss1D45.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(45)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, .2615332501223938238037142277212819713186313770564789536603e-2, .670592974357088604065474672930753248830916705286861636132717e-2
+1, .13728764390942384021987961589611312409193102323013028754372e-1, .154940029284897221553471098209422526918862644999640320879279e-1
+1, .33514456586991948825401505480788510882149089924304614653550e-1, .240188358655423342858205358160169982806081541517558066355781e-1
+1, .61623820864779166310921557032927164180535485019674682545300e-1, .321162107042629260635848075794554990195791378774034159176963e-1
+1, .97555799190580053924440796501610721029284930134845988707284e-1, .396407058883594774614462623710216134568559959692032513625311e-1
+1, .140669318434024902769187758125690575835035127434353602122610, .464578830300175737385093086848823243017300358715649469172774e-1
+1, .190195062118176921807451344175202173306409670596453852149567, .524460457322707050370430925073719274292357915969875027409252e-1
+1, .245249261076996225155103476066576784727578615407571188386406, .574983201112056824708217564669806507457052614647928033058239e-1
+1, .304849480984854584289255563559697270710974574653748259390398, .615245421533647652337892003360048274079264062732352872181265e-1
+1, .367932159514827534733065230858345198510493374902930197565460, .644528610940410749892976696998968266298577485958917462221543e-1
+1, .433371587850766944534128658879116931494797361873308921744528, .662310197023483086858212323516584629025178347371117621612565e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .668272860930530876757285552729221692915764038184416587409683e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D47.IM b/cubature/Gauss1D47.IM
new file mode 100755
index 0000000..acd8204
--- /dev/null
+++ b/cubature/Gauss1D47.IM
@@ -0,0 +1,20 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(47)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=12
+1, .2406390001489319910001295149631594062701153701998561279200e-2, .617061489999359977340283353501864578795502044568326545155346e-2
+1, .12635722014345250900804003495915469129408473479910640094203e-1, .142656943144668315906539079759391432245988989659540756642033e-1
+1, .30862723998633620738175499145639275172590170961274326682486e-1, .221387194087099030843013741056691144296564209169289522942175e-1
+1, .56792236497799482893422829008901622456333478345539979814481e-1, .296492924577183903731838792500542922706000632826067445460607e-1
+1, .89999007013048539023025063665127395961936761166072206378010e-1, .366732407055401528670168076265582590596682549242497355925449e-1
+1, .129937904210722817878085948450010787238353756492907271566809, .430950807659766379585926014918713335925402941189665026242442e-1
+1, .175953174031512215373752106544626186665170850690521609850533, .488093260520569441349403322321235772139594844268429720354183e-1
+1, .227289264305580232170812191390813814994608003706190912283193, .537221350579828173912886712233031113973143450671100108966138e-1
+1, .283103246186977430756457884043325143773789244536015595959600, .577528340268628006766722419533917799311351556882482352912704e-1
+1, .342478660151918312806603354340094879606760869587591365622885, .608352364639016956022315767381312128035147796019028893888088e-1
+1, .404440566263191845420680089621465184079797448342623321925540, .629187281734141480606876912555918443632016627906727020890417e-1
+1, .467971553568697186957478458687627480704500402289626303287824, .639690976733760784870280826123476859258556197708339412106500e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D49.IM b/cubature/Gauss1D49.IM
new file mode 100755
index 0000000..37d73f5
--- /dev/null
+++ b/cubature/Gauss1D49.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(49)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, .2221515104750951045607526553049191371218675297595914394598e-2, .569689925051314397395148205661738680166026314645485088931376e-2
+1, .11668039270241244250842306760202966127314722342796627664506e-1, .131774933075160686309509076476495724679816408516612312539404e-1
+1, .28512714385512830292994415170764734047399214695504929036274e-1, .204695783506531563278117438558229768304228916820521545276222e-1
+1, .52504001060862315574478996608597522912722575123208048469149e-1, .274523479879175959629684457702366620800549927765556779346890e-1
+1, .83278685619582999289489445653215215269517943088239606989568e-1, .340191669061784586035935928283539842773547471773182815800366e-1
+1, .120370368481321184711358567397819511806238990550832939540805, .400703501675005090066174798345556511451128664268379473266340e-1
+1, .163216815763265817757439683376188912058291635963625341470172, .455141309914818249057486103514458266904962794796671553576696e-1
+1, .211168534879388516138155079193672966302132480354240871677258, .502679745335253221011034451963429134942330472640709535712704e-1
+1, .263498634277142519738908942495403979334091130769186354546384, .542598122371318265580469785250583096700387939933610080749932e-1
+1, .319413847095306081132089134936179666288960826478312465102710, .574291295728558241696627729347779043204680958340900747957548e-1
+1, .378066558139505783977404818601274206797183421837007761789432, .597278817678923861140890632564505236950883507068632127598256e-1
+1, .438567653694644801806320090595981597233897326975108130788053, .611212214951550208444797594729257529175296237815295204537932e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .615880268633577256019514365395250712191168137590758326956760e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D5.IM b/cubature/Gauss1D5.IM
new file mode 100755
index 0000000..f04c7b0
--- /dev/null
+++ b/cubature/Gauss1D5.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(5)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, .112701665379258311482073460021760038916707829470840917341242, .277777777777777777777777777777777777777777777777777777777777
+1, .500000000000000000000000000000000000000000000000000000000000, .444444444444444444444444444444444444444444444444444444444443
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D51.IM b/cubature/Gauss1D51.IM
new file mode 100755
index 0000000..666d6fd
--- /dev/null
+++ b/cubature/Gauss1D51.IM
@@ -0,0 +1,21 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(51)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=13
+1, .2057149427191535498391520338546987021571072440220166301736e-2, .527568630867150357782559384262598895217286858984729841099277e-2
+1, .10807277021764504449709822844036847276541718126340748757292e-1, .122089255463159543948079137598942001202479630986351638456128e-1
+1, .26420466669142874932042358240981622739644831157842364990866e-1, .189811916471813819751515706244252473453852108720244429656440e-1
+1, .48681069007846462891167200384394874329437997313547313722417e-1, .254879126485739059991599503620366897629396592714859626374048e-1
+1, .77277028605750990601246469266080919213962448954335215284912e-1, .316370231647874177697268449535225478611114210063472548378178e-1
+1, .111807025589660571903516376378858066511890871872402563918416, .373420748828298729435378980514241693193735809405203438227732e-1
+1, .151786369790021367568093043135287651069623341104590424147722, .425229471567426196052238825399908482919601583883391380766492e-1
+1, .196653853491190968384010626541556472782367713867045054810678, .471069001779570742318324415336515992745828729571036399104923e-1
+1, .245779642587747141152148467637215412311846622907124593139450, .510295805472127116192070351267153961636044056771210051689654e-1
+1, .298474122438256846759461311450558448170031295150341908705430, .542359202642882953282897133639987911447191017106533222654342e-1
+1, .353997580257021552428582308961084851557640306518504810893828, .566809082731598332747203592212990726229751814625076069943000e-1
+1, .411570589821554908015471125790827625011308118099367869259826, .583302217426482910223312537701811068159824406109621082300800e-1
+1, .470384953285343396453140712400798319604882632305482208922864, .591607076396311382581855428502343423249451354144526590471604e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D53.IM b/cubature/Gauss1D53.IM
new file mode 100755
index 0000000..3cb3c9a
--- /dev/null
+++ b/cubature/Gauss1D53.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(53)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, .1910368555505716530556395809385004869655972217064406149182e-2, .489949802564718013057502754562954904911290946754577229389193e-2
+1, .10038262019249388572063322169476407716178889305024618380570e-1, .113431157980903115980171032233807444063838601440832013007928e-1
+1, .24549721092647496574045984678058553453705033257791174533092e-1, .176485268787098555112891446523558205680694447614708916400462e-1
+1, .45258839661254447849677490895155372525977832202519520443386e-1, .237247062603075313520483550570923591123628100830923631881896e-1
+1, .71896045990852754848631388646578601117856500698247086511405e-1, .294917684299167995551504168597658165826202953532060747291953e-1
+1, .104114180464745886427801327946364633540299467126068243796360, .348744118831227964921614441783336380664123466284760007566007e-1
+1, .141493263130288150352591894178830225124663973950718428674392, .398024338865288856315374795049212014880733364935014763696804e-1
+1, .183546014026752429536132681182755693948461991215331651352444, .442115792718784750971614014268745555282683750255495550451659e-1
+1, .229724217710271552549849529220008589520409775506409154812831, .480443636850142537828263232790529295801058147685146671995167e-1
+1, .279425874124986559707012922155359273776157702418450305927306, .512508189088728993356238557663319046622049474573586649349515e-1
+1, .332003048180745550134840482896357729104989990546202904637506, .537891428942665936060814922133287024094830495318823327568367e-1
+1, .386770317280231570571380446319884914410276633535898161676686, .556262441784225963360815480214243374164601900425416335482026e-1
+1, .443013707195235016533552508065011686413359733010929502617123, .567381730544825743101849740460496289602622594052360129482063e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .571104336894784945225228684509176243403607216750826651608737e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D55.IM b/cubature/Gauss1D55.IM
new file mode 100755
index 0000000..e749eaa
--- /dev/null
+++ b/cubature/Gauss1D55.IM
@@ -0,0 +1,22 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(55)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=14
+1, .1778751213022775024781804758344504124934783951787047707164e-2, .456214129654725886940807696147585312017224554914550660120882e-2
+1, .9348417314563623152720027096084861777922523373430845161987e-2, .105660562963856298757501904966327172256846753616427201142042e-1
+1, .22870359685530901372949080147392205498298062956024162292643e-1, .164507138911521899888154095852660229907654087100486310071419e-1
+1, .42183486803933963065155288335036426823751602395439245669250e-1, .221364673795021139197939388266036953074970563542834150100848e-1
+1, .67053738712802475528872716310156597829068584607886831511226e-1, .275536728378583727157414591134727956095289821128326670648088e-1
+1, .97179314541410414276057022287361170664149292595844165894656e-1, .326364619834997978966987833877523181768177155813035043632989e-1
+1, .132194560993184113985927744853732815991969490003479053385736, .373231071172843895119659435865110190108179306031667214997289e-1
+1, .171674452980567519390050911746628589215199154875035019084148, .415567086144506091951982491221662399305672067219256667584600e-1
+1, .215139764094299140345998358321784533437643657171676386089985, .452858721965164204710930156683920649114287427272424362007250e-1
+1, .262062887522440869482794076166282978686391927310672024295444, .484653289989649579252445030477203008825165616782308024663614e-1
+1, .311874241955460644889321395221956508564153011478388544827824, .510564837890303849071083192528560675232900011789602704673807e-1
+1, .363969186182410961161586821937115132587619351653238523750162, .530278829614232089552082184984054143949614813425797584154425e-1
+1, .417715358933309614359264111054417271427137292199415911752857, .543555961291470676267857596518366839376392273330219838285650e-1
+1, .472460355057982864786741736329060011074602004469583158127331, .550235065082375981411881328009088069783127647456158166393343e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D57.IM b/cubature/Gauss1D57.IM
new file mode 100755
index 0000000..75463b2
--- /dev/null
+++ b/cubature/Gauss1D57.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(57)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, .1660278869701706918404233725323057174113273374559998900922e-2, .425845193937320482713190665112490150119944489925922329545331e-2
+1, .8727247369293412564536992106811521946609025546784220487440e-2, .986604252806135299192990082019781557480328409518075681357093e-2
+1, .21357202110956137100895981509588218131220223022951464718235e-1, .153702461010468113222042626873083748735581304843547746818040e-1
+1, .39409883523470607453123281958446787295580328343853200765504e-1, .207010312593414180524150050570384607667453901942871416181689e-1
+1, .62681097539948604791103289371710726544691568440479314636390e-1, .257974134512489619562971905897712989598110553230710888811999e-1
+1, .90907256192373777505213892710607512184989219058853114431483e-1, .306015453285395692710549240119535224620322698895650786702768e-1
+1, .123768574132761433043694961393930904893704015885506695794001, .350589666275256392847907434744395865511974443373867882904207e-1
+1, .160892731198656742421907497304007036805868534992677418638095, .391191635678818919140724443298401656834395384798348541769259e-1
+1, .201859101430886089810206894405505109960906594807211180763269, .427361286830862637726724246486040356908491283067966976423569e-1
+1, .246203522437886178948686040186239923324388079807707917907468, .458688785696293816739832055385554034491145104909772856545759e-1
+1, .293423555912995668054646706984191588338280740631843040110808, .484819170472043031509500374413443795881781389609017821339655e-1
+1, .342984181066180032525902038404476275870775590454586259351620, .505456368799574830609102734537486818237836394262625995610741e-1
+1, .394323856916999462746812135548531250471674591143952425980800, .520366550388646869566642356425600344553261103377338458218338e-1
+1, .446860884933660384914508803784811509541402280352196431857112, .529380775486604707032956639260939465374156568711390199140755e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .532396908591571221232555634548387841650925158064979898764866e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D59.IM b/cubature/Gauss1D59.IM
new file mode 100755
index 0000000..95e72fc
--- /dev/null
+++ b/cubature/Gauss1D59.IM
@@ -0,0 +1,23 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(59)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=15
+1, .1553257962675229864184974540652358329558980941124604945953e-2, .398409624808330280773294173733681122524034829357528462330010e-2
+1, .8165938360126395014983709197168599029841072645144318241410e-2, .923323415554547957115106595602363454810326698408944270205290e-2
+1, .19989067515846243891564487209101168534820391298038300257169e-1, .143923539416616846748595898056460218197944472731443139569613e-1
+1, .36899976285362837060337861459762997956762731587335469544482e-1, .193995962848135247984009682231738460166004883831978991637044e-1
+1, .58719732103973659228441768734887204971655426426757883965837e-1, .242013364152970264514690702114037589076359045986863096412310e-1
+1, .85217118808615801278550940133749041780465651914829160596524e-1, .287465781088095332408608447010280643985603353608814454323822e-1
+1, .116111283947586902541011329512748434152558191383545773396753, .329871149410902475640642575579811806187214768283302519255515e-1
+1, .151074752603342101533853805986679965808823099673022671810138, .368779873688526031341219250110953670768852630185247067286903e-1
+1, .189736908505378569429761221784405350396317653585235933702474, .403779476147101076773474692302648654379464018542196494999700e-1
+1, .231687925928990050367915103344463602917910996534851447273628, .434498936005414899011937653575628512883766643717726717904837e-1
+1, .276483115230955411609695049838572999918796203069287795122762, .460612611188930643588163535438093835984566172091170537761313e-1
+1, .323647637234560943264481396455313069673184495989287186702908, .481843685873221298197343131759049325482032307150801229544970e-1
+1, .372681536916055076780097435091097446058605348348740786917857, .497967102933976335313901410517847382649346318333521386106470e-1
+1, .423065043195708226518102663628372039790724014377830769140518, .508811948742027522982144760842770223163531447435634204321297e-1
+1, .474264078722341152083487393416638713125429273166715217872420, .514263264467794201706428183527075219341877785324641112931593e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D61.IM b/cubature/Gauss1D61.IM
new file mode 100755
index 0000000..f3a63e1
--- /dev/null
+++ b/cubature/Gauss1D61.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(61)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, .1456259090261462972186722888448745874277332941465184603938e-2, .373541578962438792934843751610620351107542624202510562803061e-2
+1, .7657045167423757998767416632657644530740865242678164527136e-2, .865931039515529123157899804341057068313643138399752792839955e-2
+1, .18748037453525169105473797947070849051390257423720811613324e-1, .135045095924897109003043540459660780711783230010616525163947e-1
+1, .34621501051675917521527120135368243593301156370958981772332e-1, .182161369561927320121960052339017211635726660238338723735577e-1
+1, .55119985025864478312903995508920369228201294067404525118434e-1, .227468537636005514511579289473148386317763596550146330939371e-1
+1, .80039839926866329956547732029910821972631349462625238584320e-1, .270515412124584268558331295433100213601947312981057090368840e-1
+1, .109133425791687529796819989902657754452294813993300559967562, .310873932805142134551717718433483335793643996823257244053134e-1
+1, .142111607706573358047014567316757022054903261915205783685946, .348142916177051830838780631275628552575428536986717095539229e-1
+1, .178646638537869826907790898383749273004154658331896621745348, .381951932993883082131788374506653224628784568471043264046710e-1
+1, .218375419296425368639527538202419286025698863416556484507116, .411964958807946319519116837159808853078841332783231394338284e-1
+1, .260903108977548759779702980321757125780238314251288437580920, .437883703042389380630990348476665461146290798856021257689810e-1
+1, .305807049195883528469324269356239949007446866053227982121094, .459450569468207391076814358035750627486554126895789020804671e-1
+1, .352640965009149191691048051164147830623572407360820721531852, .476451214561597564036020987437983422706623691234795113558581e-1
+1, .400939400332214685613793501983583031112602593919222560006599, .488716676931643625467370054894983519178643943380475572547919e-1
+1, .450222343923829239837412604940529633080502320611236346969886, .496125056133361539374377572143075070087716099777815348906019e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .498602723967132257137669168671747198216267057501021757428074e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D63.IM b/cubature/Gauss1D63.IM
new file mode 100755
index 0000000..b42c9a5
--- /dev/null
+++ b/cubature/Gauss1D63.IM
@@ -0,0 +1,24 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(63)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=16
+1, .1368069075259218227509435667479636430731168135269420349440e-2, .350930500473504830020353186942659125668861036446620349033744e-2
+1, .7194244227365832299912477684549010683802142832096840894609e-2, .813719736545283530258528110319330908977148189760051551273466e-2
+1, .17618872206246784613094035940862519805552389778490640338994e-1, .126960326546310297278762948946120146437770237734749673160293e-1
+1, .32546962031130155414540432582295337235664283858581390770798e-1, .171369314565107165513438661261863534974201014558166792768214e-1
+1, .51839422116973938017346378140393865760501751602120211718192e-1, .214179490111133403284393233030627642464054287994694744361674e-1
+1, .75316193133715014933153497516128730522556603475120383449890e-1, .254990296311880880980816223447608476300923883698817413431132e-1
+1, .102758102016028796518451350514785548952260299180582273374621, .293420467392677735726418186500854433750602337287735719448686e-1
+1, .133908940629855159806286667454366426684864758246685449589430, .329111113881809234188250318534693864387682236866232700599344e-1
+1, .168477866534892399512442415668380815511488857019747349491458, .361728970544242531126996782392438958021684916509124253812050e-1
+1, .206142121379618835479627261799086570774529942272789713648410, .390969478935351532358704594141533355198933992410795952579353e-1
+1, .246550045533885304988126262811089384909858150200282268012817, .416559621134733776110995373021743057693734419714172298750297e-1
+1, .289324361934682327317940281913786760832061355683778334729170, .438260465022019055713857313759011437742248608508786111498016e-1
+1, .334065698858936175110041597134906001902112431597470081990885, .455869393478819423564342885558185312724307066376950026610275e-1
+1, .380356318873931462727698395417249239695572289019873492226452, .469221995404022828195901188340586300180500378731182250254294e-1
+1, .427764019208601753257406813200594673898077004342182223931024, .478193600396374297095410011020655502974452540810027754764978e-1
+1, .475846167156130841882593714779748918154576374134575551416103, .482700442573639002833824150317878973684303156177850343661588e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D65.IM b/cubature/Gauss1D65.IM
new file mode 100755
index 0000000..0ad6361
--- /dev/null
+++ b/cubature/Gauss1D65.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(65)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, .1287652876772391366915991209797919460885494559319039641480e-2, .330311392379368902932461760423692751552958125160120929175121e-2
+1, .6772136884678755944812150867687039205414442892174450138472e-2, .766085075646733806397288426683093337876767739037924887362976e-2
+1, .16588545155003615535811146660703877390842831710006700176634e-1, .119577740508747401752666287645931210330041805722620220536622e-1
+1, .30652813694415824822082437818223143692782757951726587051695e-1, .161501793161644766407807236247156440341263615253421879103567e-1
+1, .48841616128283208479734334240619196262397220904540942521724e-1, .202007706658347957817048952636992480834313941913305787276297e-1
+1, .70995173661747967678469259926965763336324465551639967101432e-1, .240738714093558478350734400690598248708755743384861102984785e-1
+1, .96918821862916705101899564608611412151144690932276943826438e-1, .277354233158317806424722477196295552102542035751103613388139e-1
+1, .126384751775218921070472437551025865572855956768087760693460, .311532412651587400158138628854488057108842137896566356141133e-1
+1, .159134020015128606865892026540335932665532409642852985538630, .342972864093283564029775365074793262436805464701943196898800e-1
+1, .194878827081810486346356243230951284296828534555983025455234, .371399274219770746712360879592360233550491965981276655556312e-1
+1, .233305047606826178225552867502253937273667453887788765321734, .396561823974433691819541924709987940443440146961493210580118e-1
+1, .274074991363774652137003361379616473100614132804734411286811, .418239380335193538069640072588302987101638432729130081912155e-1
+1, .316830371125963329464889688373064444351532659449929914180897, .436241438094221688036408354727232282833480356469511441953321e-1
+1, .361195451423751485298375966350839497122620835360878390542326, .450409793303192886198718527501118105936853410397457424942648e-1
+1, .406780350586004213832100620390588006081327848588417329195327, .460619933216584231066204888586815303607355016019908602799609e-1
+1, .453184467072633307164628537938731139339247110923681559358987, .466782130327980580804995631371377324760019930443154024831091e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .468842230801049982836522707731743921922366819909133406433742e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D67.IM b/cubature/Gauss1D67.IM
new file mode 100755
index 0000000..a6a8c52
--- /dev/null
+++ b/cubature/Gauss1D67.IM
@@ -0,0 +1,25 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(67)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=17
+1, .1214123104579040378313781272685384299745058657535113530028e-2, .311457027795434235930323053571889306226366421489374131946721e-2
+1, .6386091796845257475124784450157513525614925669933890382796e-2, .722508137429751770760110516437349534377021679234891345657485e-2
+1, .15645868733327859117676713472003244516095627323263332003966e-1, .112818609927474850420470443574771306245172941941152959202890e-1
+1, .28918801297446454184161987269713548496897153831441220893249e-1, .152456903192230659047211938406587955153134226948135320474266e-1
+1, .46095161140837765599550055490356269918801213598423952979268e-1, .190832968981937581608829601449882794119735030633338369228717e-1
+1, .67032680832717765368213954664350077651682349131608465670203e-1, .227628057616766362269112816976353014991192094981563343768471e-1
+1, .91557886049533167704210546706513370803425044512873048940318e-1, .262537072863390530841229874212337998293598404734848382724788e-1
+1, .119467561685063492906295515510631583197750316636901539159992, .295270679137622465969804861752630954142430911732519921387503e-1
+1, .150530443391868546033499946712111408681117984272121844788278, .325557607770382056892722150324468867918186230364065686919429e-1
+1, .184489136459735727341112122240495861094551372963278234477402, .353146879071278624995193982838426775005813602454529948934944e-1
+1, .221062249665126678631770056891862709331279310977323052261491, .377809873300159656354169871142178620294096347406707333240265e-1
+1, .259946727404836482902948659746301445706322525548047107932946, .399342221698859223694094164032189967752779359860971498499103e-1
+1, .300820361120677029684252623533824235328768935172175892676360, .417565498499228275935101140230746952903577969287733457988421e-1
+1, .343344459330268376270841617174511002614385067207753529714247, .432328698735178748921234281403737901570353454509087862491226e-1
+1, .387166654191775258065679409532826377823905139476009723502324, .443509489178469346435382286824403563721415033519020654831156e-1
+1, .431923821370408512052785587834441084251359691117731858947096, .451015221853203647869711210087469644205147500253153178474879e-1
+1, .477245089023448728625462164574034918084457924906397298987787, .454783701651299368076688019742889799623028081301297200578062e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D69.IM b/cubature/Gauss1D69.IM
new file mode 100755
index 0000000..624305f
--- /dev/null
+++ b/cubature/Gauss1D69.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(69)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, .1146715450199851369918430343952637403362681414493341703851e-2, .294171671022154248787694812005631201537715889910189082945734e-2
+1, .6032117778074250982441455407257007343495852142912822621943e-2, .682541417418074613320200146025819198699701892068745991098960e-2
+1, .14781191980385083392464758707614928737559380343811696289682e-1, .106614899557417904417189919831025391619048223599230074476353e-1
+1, .27327425896086335230637007235012677568594374376063422944032e-1, .144146300544471270243580198572424581307638633148039261104041e-1
+1, .43572869320341192767531468222117884755969493187220997535104e-1, .180550579317316902663584848237749691542678894849949252062984e-1
+1, .63390437487388834238358825429307366677830548860312526682586e-1, .215542111630851093911532296874541017114032935819964046845075e-1
+1, .86625050453887296582974693625721210476554691008846329323516e-1, .248846852006767649025998380424974792972474765972830672792066e-1
+1, .113094873856543722366288495395056259494094963514227036828300, .280204081061850642891638735825504822201742674522786547269542e-1
+1, .142592749221685608367795684387776626518978015739134744037304, .309368359830400944435070693943443261326856129020481090038397e-1
+1, .174887817667054805662103595507720368315118837035812999367506, .336111426345434519821527543740742792735465595748023230496197e-1
+1, .209727327625117745032748995905154964533964898217833783053871, .360223973862800323327309548926388780736336965137136324325737e-1
+1, .246838613379255692487851222081336311706956030681815376234464, .381517285777210267693292689421131127635400409478182676419400e-1
+1, .285931229241092872906189693499260070607640776755733078023014, .399824711211621314663310404925228781644177497150444236868249e-1
+1, .326699222784593027061510082534880884095795615311353945636560, .415002968644282941899632641080885017425872519067255599710411e-1
+1, .368823529395351971014552399772209743256847800677109358170897, .426933266960495626129719936955587838205954941418753755604314e-1
+1, .411974469417005215012848171777470035162285143835121476294556, .435522234985917671216610158027704683425283575469274657022483e-1
+1, .455814328362170368199535283251225598287941282617450929301375, .440702652151377314853694037965483207127271586372454185852863e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .442433974535521453191036938888078345912045750053027116601966e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D7.IM b/cubature/Gauss1D7.IM
new file mode 100755
index 0000000..8ffb728
--- /dev/null
+++ b/cubature/Gauss1D7.IM
@@ -0,0 +1,10 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(7)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=2
+1, .69431844202973712388026755553595247452137310185141181192139e-1, .173927422568726928686531974610999703617674347916946770246264
+1, .330009478207571867598667120448377656399712065114542823703523, .326072577431273071313468025389000296382325652083053229753735
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D71.IM b/cubature/Gauss1D71.IM
new file mode 100755
index 0000000..dce7797
--- /dev/null
+++ b/cubature/Gauss1D71.IM
@@ -0,0 +1,26 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(71)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=18
+1, .1084768757957081900585827209624880675091768801684343704730e-2, .278285983212252268062799219527391870861229594719690072203983e-2
+1, .5706760548893880963302446061446276696418739967356472105904e-2, .645797364203278720225170574889582459598060642572949567694017e-2
+1, .13986154475151025332197475784445836191976801867024129713594e-1, .100907576488677357660494644791105637097932551204307988759067e-1
+1, .25863507800246227398762942527386076855311737333163183724894e-1, .136493107492843895472085904339916789952284140711449211806863e-1
+1, .41251112742170466962066388486921800031545266093172572074004e-1, .171069053851536149606225307813572770350484556634716959828742e-1
+1, .60035099554801434008786331267082205613353578959621536116063e-1, .204378754618224477370572725716315957739685305595419370304281e-1
+1, .82076416503762346790589563750699673326610310303837427890568e-1, .236175417451329892083084148083374160365758937171794430101854e-1
+1, .107211884933896743586115517459853698348834747080199319675934, .266223569888799595460128141431098248444648055294688827571314e-1
+1, .135255414203221708954869760496945507217078476547401497947084, .294300721226624086548376999094600179713770478912799003428203e-1
+1, .165999381707239468951404327829541180417648754893681173299202, .320198986775077447781923993129281698730107352754203357775597e-1
+1, .199216170932009732460027512463202624128522922006624045012381, .343726619178682213068448196818066041708653823210692373365292e-1
+1, .234659857036877419179645459939215091169388563676588961762060, .364709425028265306769366884706371091434734763084952720812258e-1
+1, .272068027783289866396391165336279537021078805851571263671910, .382992053229353372643788668607508208639637784159959168430944e-1
+1, .311163726440155391838631805165046188916913597557356066896304, .398439144560358009543623327509319536637670787573630100995569e-1
+1, .351657502327985864748380476127414773649879088520087336649193, .410936333521698547586117367724711514324815364673110604915678e-1
+1, .393249553841567210528386885548643041620769134363615902724948, .420391094898309674667288121457979106019679569788030227520314e-1
+1, .435631948095307605674003305997423849411355137700313433197048, .426733428696693137459252715382448854993932927486456470642425e-1
+1, .478490900763145696386515510885818282722852602596995405115800, .429916378351973737450425873952632770800274578017479261453761e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D73.IM b/cubature/Gauss1D73.IM
new file mode 100755
index 0000000..8c52131
--- /dev/null
+++ b/cubature/Gauss1D73.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(73)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, .1027708761043175529598462841318358165496075256635422965586e-2, .263652863974896967586102711676519459154415295298961202585859e-2
+1, .5407018392840406657950469707863845518773541209663009761989e-2, .611939005015377826315242621817328797114547655571203264598919e-2
+1, .13253484971757127835554762167120327592307691645695865820248e-1, .956452224454198302175097397005308706514761787286659934008057e-2
+1, .24513828368952589335711951591837033001225710097711307241220e-1, .129430184952794667613797406812436490147420912873822799000121e-1
+1, .39109281293768128665928156649643255609202366418835169429294e-1, .162308199237607405336171267507293643995472795614332760813041e-1
+1, .56937518922256960526925245491556779946593382586551846150725e-1, .194048012509672722444811851642380099836945946368030825206685e-1
+1, .77873506329722016006271861912569884154682752051188907940467e-1, .224426823312185833287051520550981800973616532571807681023993e-1
+1, .101770399745048853303476832249837738257184420529739196209058, .253231488274123008019379315433581720263528814726719277305676e-1
+1, .128460583009017368726476291263093560455049073368493698823926, .280259939991374589042696198321263332133769276438841783194162e-1
+1, .157756845434520321277238393784423145977828094514961156283580, .305322582616129930654940522502482928389970045311817485660054e-1
+1, .189453695795537758425923704202471344979136799697932420388049, .328243614363756247420118831489856090983386605748624176688508e-1
+1, .223328804069209109382450820885367763263856723879508838014000, .348862257778501724425406783965096455930118393488780535811451e-1
+1, .259144561098397222926403565558680414005238782826324802022446, .367033886242440863623133157598977324917349710988241066765465e-1
+1, .296649745340836944949534204193016695738764360324720550201848, .382631037852646189429439956033112577476816577657720257996962e-1
+1, .335581285058146500250764099330029758159988712353845980988532, .395544309187646903836060936983226192580034675320911830186203e-1
+1, .375666103604317120597216124256141890734161174158527421160742, .405683122542325152549388008998961317832300224873124692747284e-1
+1, .416623034880074011515664134794087781266675801984361825497946, .412976361182186254456151505764192353866532263010198840921543e-1
+1, .458164795522615049028475834131800411218239183982423853192353, .417372868129313936261265047422593495102176551015130250299224e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .418841804965694523985086831847296958584376400342383596140357e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D75.IM b/cubature/Gauss1D75.IM
new file mode 100755
index 0000000..4fb71a2
--- /dev/null
+++ b/cubature/Gauss1D75.IM
@@ -0,0 +1,27 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(75)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=19
+1, .975034732156190093576461724209501254767314862705954919628e-3, .250144037481967283794977104594968523191963593118808573538232e-2
+1, .5130272866807214027787054447160326337809376545988896808084e-2, .580672235823433708883415060021871367861837392921203643921582e-2
+1, .12576835704923246179557229526805678704012320616963242004223e-1, .907828885480661844943806287739110113145616952053154150529166e-2
+1, .23266834533235202164728923441279391307110514638535645127984e-1, .122898698691161879476006027233531437229795811133982697502382e-1
+1, .37129333975707801587445218893474544259541061759447239639432e-1, .154197502725875273293655431566543444602059477483138655810343e-1
+1, .54072130497683891602531484013041244210050473382742319518956e-1, .184470407970123690824700811684074751736780586203086691795029e-1
+1, .73982489033818905570175144376361859779807481336184515559222e-1, .213515792523372171179392171794038543392087422841402838741619e-1
+1, .96727916197341592224217312010150837134113509335340189397246e-1, .241140309303793416871760899557101120946805013926495707818256e-1
+1, .122157048123014659631130951610306293248081214626648036349157, .267160099551661599868784953156243780384576551693726541135234e-1
+1, .150100659810407822043587079686292062180896492349704781134640, .291401995734986030111529341290700279575638510792794754048082e-1
+1, .180372792085159146409827565249869864149414802295169285551882, .313704666960665270264848357625685321604519444984543129105379e-1
+1, .212771989476096459433536249537763744894900201073100617696461, .333919689895702059675230757645096299779760780176396334148326e-1
+1, .247082641036034448379733141766173998603076724681406177491890, .351912535334494773696414837968294204196308508812306022663211e-1
+1, .283076415283811757813371918741078897997038099796580438148790, .367563462923717285726032224241682392883185975462158775044113e-1
+1, .320513779760282493371641189271732854101968525394315963105895, .380768317742231980329967705522362639981726094162772593912655e-1
+1, .359145595104917369319942964290649961615164745608194334099912, .391439223291054740376877016678681312824518724289209127867453e-1
+1, .398714773053941648398011109242696471314172457123148241376166, .399505166217639107930138419625928482751506197948407894902808e-1
+1, .438957987331066290065193809335296441715940929250349995598112, .404912468852985503116347349745290709682575848920443770707847e-1
+1, .479607426047710880043341783835107539607613178658172594153201, .407625146401928933496093849429150278008213257352483992190513e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D77.IM b/cubature/Gauss1D77.IM
new file mode 100755
index 0000000..d41ca0f
--- /dev/null
+++ b/cubature/Gauss1D77.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(77)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, .926308466783546997263848574089779083995129975167894119391e-3, .237647234581755068538810657745347099284754227009984755571625e-2
+1, .4874231572657008180112441376460897645153089479904101870586e-2, .551739446958229712133840272608864472675356968635934557048921e-2
+1, .11950645333264473077574840055240752854626293659949148611198e-1, .862811454686245952040273559167752360685795094657477350161890e-2
+1, .22112393837673861444554051404458898499114104680561932084720e-1, .116846924160890822973561722214623494455987777307397717264297e-1
+1, .35295425756630885151091517821132719077948595246148236555864e-1, .146674779919516892960779931781257128057057335512474386072933e-1
+1, .51416440353503556075854454569593174467153961012188498750874e-1, .175575557490656653805325926486164081833307438100206420704888e-1
+1, .70373531000046923043101280436978814732457777340088969736923e-1, .203366384239669219695282780411307018437862179980164754734540e-1
+1, .92046851284928447823383660795185086136092969739538071320478e-1, .229871505544583159420883196996163902994308465169762232414126e-1
+1, .116299378534468250083863797885828527263582943270494669126174, .254923326460647026070105168382906675088065419406448881383354e-1
+1, .142977782052732660433066481924084605167827359053150892401162, .278363451704581499536955698948407413534804740367918590769162e-1
+1, .171913393283994544632787032511871907559946194211514784729097, .300043680442980747874708867744097498683391135459234997338121e-1
+1, .202923272521361005653554962690446965917204227660936732314587, .319826940693411944933532022050318224278884584449898857256780e-1
+1, .235811365669781263051828182095888747329641173257287612007354, .337588154831156326815106640232242968875763540417385153969972e-1
+1, .270369743845431975668376683445213818530625423151991381061955, .353215029853043803850574657640655682337148420795140852292936e-1
+1, .306379918014219272073059017181518651993711913641586692059926, .366608767071343086905769664325241532239467121254875653456610e-1
+1, .343614220375907038732001544107185630199047195011230324867591, .377684686614180288523922234954046995470939892950109221684492e-1
+1, .381837243769082116331996836333674775967140387602971202034826, .386372762723410083642558183665586495602476257443955754684959e-1
+1, .420807330001081100038649469319300307766586881567428429766824, .392618066436855883625316504927617357612907382046244304732813e-1
+1, .460278097695622261209041458403679676557498417446629033372385, .396381112841842355050778858772539652619020743391332123501015e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .397638110697214262087090983029254969228033873829324071549423e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D79.IM b/cubature/Gauss1D79.IM
new file mode 100755
index 0000000..93007c1
--- /dev/null
+++ b/cubature/Gauss1D79.IM
@@ -0,0 +1,28 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(79)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=20
+1, .881145144720399825188648789706753832114809202477046698332e-3, .226063854926659562923586643909266636391555510633347784297206e-2
+1, .4636880650271496773472823889313922518888959324456731058462e-2, .524914226557640680737108553363982618839631066033277385367338e-2
+1, .11370025008112868668314858143548096510666033981006951785369e-1, .821052919095394435643174244118196364617114667182003516987635e-2
+1, .21041590393104172097729500273620357452558254698626484215473e-1, .111229245970834786307521620921042866035165983391456738230987e-1
+1, .33593595860661733319573916577397141782623212358653775385328e-1, .139685034900117005492445787538605386512754310271235428743440e-1
+1, .48950596515562851635873334565753448207755959471165266137370e-1, .167300976412739236963390915432054244886208933263924909835740e-1
+1, .67020248393870248089609095822690018214726723494449175270030e-1, .193910839872360088199860156452230811267296056161329726451155e-1
+1, .87693884583344168401839884666950613046379807878506100154104e-1, .219354540928366359958373430208577479055034185851856015151198e-1
+1, .110847174286740306152514227246752575989654341936554102877329, .243479038175361160307170802240731940339215136885825026413145e-1
+1, .136340872405036448359501774122534725721310663233335931226224, .266139234919684121774982398861302522776605859110053618150760e-1
+1, .164021657692910225810322742519252945014837009308074424964454, .287198845496957756833088654552129928000524179272264637254040e-1
+1, .193723055166009881023693774884652561309938109158425194432326, .306531212464644695832689982041992979512968817555871720562805e-1
+1, .225266437452435898962034347235241014883012449202174267548718, .324020067283005190372772647833763650163464821042444546239022e-1
+1, .258462099156910643545716712877588497700488802233442949605332, .339560229076169519128450541159619929920986191896429793615948e-1
+1, .293110397814197499237560127098143158512950187973540880852799, .353058236956433898477418154276434161797795519977930487186638e-1
+1, .329002954587120763496253759410402844966523189986337101768295, .364432911979020295302553417212589179287795404928993152224940e-1
+1, .365923907496373159429407827595701908287597813381876509271370, .373615845289841321000946681306623365956014672101799108646640e-1
+1, .403651209649314450142241573967425052592953989447395562557266, .380551809503131211857790379612474115062797769225355535269792e-1
+1, .441957964662372395758274357795987943115635734572892025484852, .385199090821239827941537671419051242622198770819702077445932e-1
+1, .480613791246974589033403277987688352660317682808429200415681, .387529739892124056318619814791631634818343263940532178664772e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D81.IM b/cubature/Gauss1D81.IM
new file mode 100755
index 0000000..5178a53
--- /dev/null
+++ b/cubature/Gauss1D81.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(81)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, .839205712614279240405745955811216034247824243164916784740e-3, .215307017908244384200223895232724309318110198717710711714280e-2
+1, .4416445150491845874920552713415171153621993214998476343038e-2, .499996938695297266924814831484941977511246789878688774802644e-2
+1, .10830663219458307765414646663016400812181609040672858804568e-1, .782246920390929426541342223976683872040894468473854850141510e-2
+1, .20046554134826886950279151965656708966524454585266824671363e-1, .106005316843897765378485167466883132858585271528757131008376e-1
+1, .32011506251073087158840862357616866864381440956327612721403e-1, .133179496035552227337742876293566385223452460010090296264335e-1
+1, .46657027620949413520829793384638513322846407338857572791291e-1, .159591058658496408935334734285727718505938766506108383896128e-1
+1, .63899244153779295583164712882835269858978672230233499076239e-1, .185088583517539942176306257900803343031357731605717333199834e-1
+1, .83639399799319334377863610475728100011512003510708933347912e-1, .209525975979548447146701371555244189681331887159017318734908e-1
+1, .105764427476295313631889109266614855502643960450636394811157, .232763241845071710303782934323057115654950992903072709570197e-1
+1, .130147598465036909469915627765720499802372780473715517261777, .254667271473087473905851785578443157104017233934442050426546e-1
+1, .156649248982524355207698071735432593966780769925163435606528, .275112596212893709400734050857111349868876683026793165320900e-1
+1, .185117580463901839755675454152448249460742609630264563061716, .293982104749359724955929266903671370004406193013633829690588e-1
+1, .215389529194892065172626392358509874194771538010227378082242, .311167712904831582357867085416732427150799349724716729989483e-1
+1, .247291700400296983645831964898652617524462226992409877165838, .326570982267637052180818563268981702099296183605340733287644e-1
+1, .280641361474296455741440071635980375789107120620265678319214, .340103683804383833677666198631244641283495600692970826649334e-1
+1, .315247488679759279285816543350032397187956514334061960624398, .351688303104087487408294949849407280006166900839051399062390e-1
+1, .350911861329087567038508559760537847930022065776925736962727, .361258484305115366981731991743936774426473852624362744527649e-1
+1, .387430197183288612197106871672263834850043789677878388824906, .368759410136117349696404091624243397389581402141698213691317e-1
+1, .424593322568003918212811016057708812112184527335251084517416, .374148115881107759456525363167526614728415336890153587890105e-1
+1, .462188370505418501538116903174399866259474682196671525624948, .377393735463579120136235313373083745368031804515313881148680e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .378477678236491861593899805381801279455594406976156165662746e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D83.IM b/cubature/Gauss1D83.IM
new file mode 100755
index 0000000..f9594d1
--- /dev/null
+++ b/cubature/Gauss1D83.IM
@@ -0,0 +1,29 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(83)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=21
+1, .800190504968792488565936576474861911061958238609374117572e-3, .205299930232454230530138974841798132850838669446143175581720e-2
+1, .4211355829569540103819373359565583273653367631447991211560e-2, .476811015087425120591005014634899909434239936851590788901052e-2
+1, .10328745968125903145508716728571952206762509935468535692246e-1, .746122184867874707233883905293288381004637374388282776502881e-2
+1, .19120317330897755626536421073338659414139355542984000510685e-1, .101139347845263223785278595396770925413357132727481929005140e-1
+1, .30538221322505910733413283187204014874306090774914064579098e-1, .127114797630565239433712214547154321930677051912022216330546e-1
+1, .44520137547936273708076060395746728840549824330272198060776e-1, .152396203498017341814523667616961988958848271220825461724038e-1
+1, .60989715093913628644007448260688232968590141878040700622070e-1, .176845355487960554163310905632537709528742608931248169862027e-1
+1, .79857008369091549537280002456950091088300712403215821597446e-1, .200328675903461308802980624150184672768668509321508197160266e-1
+1, .101018973372256293383647023726811669933812244354672932970950, .222717888859829389371581829926171206592977330184208625245184e-1
+1, .124360032155259755215763912042670672248717740085229537573034, .243890703964016225137246815642013619605588484671198339868705e-1
+1, .149752704721914393129215035472267232849912029099953409436216, .263731478495870351719712695220487385157829939136033657212607e-1
+1, .177058305565376083021251848140794149415456728079928067657637, .282131846790091908232134275698478446994365792881447737126319e-1
+1, .206127701257445338579644327263002140047284347585999177050872, .298991311137933271564157728767674257549267093479718465066233e-1
+1, .236802125034403856203566220604049269282130117535045035535784, .314217790225012882046591256618899445763985219609448752550324e-1
+1, .268914043964789035120462485034682007445167545763195684453585, .327728121824544894635025539258972128048911470428965383168324e-1
+1, .302288073978512471161453022702814009600410711756823255869012, .339448516882609724276817011068831536330673673292965990087136e-1
+1, .336741937767294243901421705312267165470794264750707738030902, .349314962462970798830773931907411022219636565237160468428395e-1
+1, .372087460328560458016792604490645775615616771767299522669651, .357273571325854914609052220587310775112949319387518593150717e-1
+1, .408131596717572724573622180309628529533338019188742449822794, .363280876219020524439528807462665156383918419842136149978393e-1
+1, .444677486395740065825438727498679497566327987758184596298262, .367304067267337641320141285271519693668278917252026196813829e-1
+1, .481525528417324112093452009981220286679145773875388734325178, .369321171160864399981927805748957065642352602510354540369862e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D85.IM b/cubature/Gauss1D85.IM
new file mode 100755
index 0000000..3aad7f7
--- /dev/null
+++ b/cubature/Gauss1D85.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(85)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, .763833878746143241181906340803794018974641076195428353458e-3, .195974512692206364148358259628821771683018233353069314969903e-2
+1, .4020221203377926789640829335190991806473387020523635892659e-2, .455199831870070165943430414794836190650898774021400775645739e-2
+1, .9860889509872334247235308909431804909566201740213257913756e-2, .712437821578824305427080086100209678603699654242807026080037e-2
+1, .18256693492960003294902518212878030066190543860643726832331e-1, .965995071184195019806230544603567615851177954880590177311774e-2
+1, .29164021576181069090761304801030864266761955093086121090602e-1, .121452283069194079510091621271246242276185197149359140439178e-1
+1, .42526046396930635271948564600357191627109948445788471500100e-1, .145672066307492474579702124128905968937752849418793758487486e-1
+1, .58273117390691568331160994178916291068916652878774200734851e-1, .169132460434301461724842378769010455266508053219266963234590e-1
+1, .76323141895342475500456957089103741243701726261380058132914e-1, .191711110970663287860642123314245574400362814371630661834978e-1
+1, .96582017931530682360462629561243936969556878259123701683464e-1, .213290285989910418819036026692569470524735456184399149892606e-1
+1, .118944126402522439269835768485476906096202370657021121874373, .233757473771732900053233831685514669664315479676814009250826e-1
+1, .143292882365521472574039561004547948678735416443181941801975, .253005963921950782619251994765073728749490045490276215031142e-1
+1, .169501343124250933417432618129327302943421593732893353252620, .270935401594408934316865891631327067941952763353645132182098e-1
+1, .197432870180199532137458464438022389280815096052736355351604, .287452309784552597138044584222082559639344340972824145089223e-1
+1, .226941841669957640429797476410169581672572887937622098687698, .302470576249956472598393709956813966792544399352142058684760e-1
+1, .257874411607132637965183282625743111003211459064138351838997, .315911902246980561628149088867041321283481173197344095794607e-1
+1, .290069311985365373756360302719715986962505546142714525956324, .327706210631613987456168821246039151124812668892274136974614e-1
+1, .323358693567848096677261817928266064109777484928717228880363, .337792011146825845962039523781327960714731462928648041796900e-1
+1, .357569000983543186447138552580831034107060091122869415223624, .346116720968283421411497395613175739046524947854639119113509e-1
+1, .392521877569740895492560809263162523131387856807273477778774, .352636938825425140631431777389703715918680833924820750341907e-1
+1, .428035095244643344614850031194627655658605558264328675883496, .357318671262570706487905588514551242904500096838978366196612e-1
+1, .463923504562706882288836374522219452571172361669692847237765, .360137509857109871726537758354285438767521229737073508224219e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .361078758468994939887311658568684400735353452626251744850777e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D87.IM b/cubature/Gauss1D87.IM
new file mode 100755
index 0000000..47d434e
--- /dev/null
+++ b/cubature/Gauss1D87.IM
@@ -0,0 +1,30 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(87)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=22
+1, .729899681612887531971639696674825471984983412292701000576e-3, .187270240155638875758688941588076923884895817706264929753919e-2
+1, .3841803930742095758330998193230715594051107823894961270872e-2, .435024068376242206128281171215657010423421058596076358761750e-2
+1, .9424083461043016668625497324756085597162222230171130235422e-2, .680979337778999276010253319503068943663335989371660197037714e-2
+1, .17450174788753430302800974709882512641561430705057453612324e-1, .923574086840737458602111187169992205776036919709525598976286e-2
+1, .27880245440902950398372673486505374463772532620038512328054e-1, .116157409510096053144791314693657087441109509996832594046355e-1
+1, .40662370007912112838499456652873975531007368477473497013294e-1, .139378914106405050405571458896935321610294199003095644019566e-1
+1, .55732880856978398830816044904838837620833770895287049966105e-1, .161906114060349104404234697700558005734740258943516494837042e-1
+1, .73016702497644810635848879353658054819415468985465775125997e-1, .183626739069044368214546461743508998553543939916523731433897e-1
+1, .92427730177432494756281182124029724850299712745702878215603e-1, .204432561551731094542235846415342434270396445147929293843578e-1
+1, .113869260375622050491120725384005993135951780217276445118463, .224219920409850157231215932015255535904815108278293666012225e-1
+1, .137234473169641498696517531640023194493767099895952370033488, .242890232241760187638197183456463688075256995534109255371305e-1
+1, .162406964666938817333150480718050038335872299438114562348862, .260350480458522309406159014965993755281320873705794522396011e-1
+1, .189261327048212076098787650439116626427797059991418220421764, .276513677818640262743733163215764957357674232088107945598164e-1
+1, .217663773407264615787681590308962390254627260197866942382216, .291299299387977476671053449221385840023780845516767311157420e-1
+1, .247472804305898841008600823854411380693963352247325693363116, .304633683507809840192789184371870503362862447408250626349966e-1
+1, .278539912737294258082586703176343225230760769845941025379873, .316450398666019274750694355098574653190121441220470914589802e-1
+1, .310710323992646433744117663613901071628589575752164813355081, .326690574395907174921204474228110947480054005648384639877943e-1
+1, .343823766748607093881727418213510732240368189123355681786820, .335303194531468261978524596758596753903565065363807839541643e-1
+1, .377715271535899374246348782629740689734756370359975198164955, .342245351346833304927293303521749362225777718179500204488198e-1
+1, .412215992612241607126746125309511704676312746637743342296488, .347482459307862890185420454625056283910467376905871136799950e-1
+1, .447154049145673376441347075542439123808307000570201193108800, .350988427367791062935710209721996938344133431078142289666693e-1
+1, .482355381517932320470901647684291822057498901205236461611431, .352745788946770344056691437401499424955317127544618223953707e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D89.IM b/cubature/Gauss1D89.IM
new file mode 100755
index 0000000..58e35f8
--- /dev/null
+++ b/cubature/Gauss1D89.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(89)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, .698177409031680921726161549589725953855736392762291555522e-3, .179133157764177946557151432967569628529281784188832555923854e-2
+1, .3675000776398129125691439701132327512499178348180324691506e-2, .416159464810912082286792656111692687807896553239154182629264e-2
+1, .9015642482729715880340763182829259230817375389769096006554e-2, .651555249579139216031554123484346301357058600498530233511091e-2
+1, .16695844801552697631787419553760951441660484695292293066012e-1, .883876762896879530854627333478854426032563927824087370505631e-2
+1, .26679154502185469107639701523081460774765827916432474601072e-1, .111199237752893661969753792760844966724378544741233027587434e-1
+1, .38918031640499805951266319519736340367318561374669415824586e-1, .133481069837888324028373893965537638939124553352291424653546e-1
+1, .53354164123379130767675474253471326817299379793103656918644e-1, .155126874672577335812539694468840319429605760517964222520913e-1
+1, .69918762019667887330460564716432806108292788211488949460704e-1, .176033461008045081238498991307875454050440373533595523635140e-1
+1, .88532889748956831482112369986748985003292370971864783227979e-1, .196101183646512237820935926719646691090650622958400221124955e-1
+1, .109107843703046854343818405950698591169863241580469238480356, .215234403545824855758455565405834708941596180826652203188650e-1
+1, .131545575527254823688130575702553990060197159581191459536328, .233341938591866826338842378708270506024930707443206453090160e-1
+1, .155739159614399737383990087059780882022383497190736109639526, .250337496189760148995660512374371586957493464675847125146316e-1
+1, .181573302773388320364388077048308424653984378267161779728576, .266140083656344759729520220096552018992411084700782500473667e-1
+1, .208924893715323406659516332777911434499955587008386426988207, .280674393798932383219619701874348816207400924730812002315893e-1
+1, .237663589768541966454432949769918798696445864599858706554572, .293871163594208692871807588159157112656328627304900506515044e-1
+1, .267652438040182450710199248845125744580093666381404558576377, .305667504155332612509431852681627866300621171326210752541600e-1
+1, .298748528070729042961012745725826772014850321215301780582071, .316007200369099688749818651453334409331501186379114081681124e-1
+1, .330803672874698919178297949984063505233829278431288651026204, .324840978753617154269132851795378475419248627437916364991407e-1
+1, .363665115123811219695617304192177409050894122861678969939246, .332126742249212640414573578195518688065872733753374079845391e-1
+1, .397176255108368127140106387264228034648381807150285084479383, .337829770818037681354551119368243154897362904619732309964647e-1
+1, .431177397008373485621704979288467223446617221729237470191055, .341922886893348372658460496671580485367424565273224731904402e-1
+1, .465506509918427913754792692948094135153039666534515158667295, .344386584888306614410014241490278944422620650553242725793704e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .345209124146160100553992775797023703616614461375023890385731e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D9.IM b/cubature/Gauss1D9.IM
new file mode 100755
index 0000000..c2000d0
--- /dev/null
+++ b/cubature/Gauss1D9.IM
@@ -0,0 +1,11 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(9)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=3
+1, .46910077030668003601186560850303517437174044618734568563119e-1, .118463442528094543757132020359958681321630001106207007791416
+1, .230765344947158454481842789649895597516356696547220021898884, .239314335249683234020645757417819096456147776671570769986360
+1, .500000000000000000000000000000000000000000000000000000000000, .284444444444444444444444444444444444444444444444444444444444
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D91.IM b/cubature/Gauss1D91.IM
new file mode 100755
index 0000000..cd477cd
--- /dev/null
+++ b/cubature/Gauss1D91.IM
@@ -0,0 +1,31 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(91)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=23
+1, .668478933091009435865791304555612707922196282684136954447e-3, .171515043405352414300939157402170222058647416114296574056247e-2
+1, .3518825546912817963452277666903295439448584545807987400576e-2, .398494911486231122580651946316248271314438560435382500793511e-2
+1, .8633165097916568261010210170405639890218314850785599677090e-2, .623994188549434210336728587549168758876127369520787558079991e-2
+1, .15989304073004028631125966814092245738844086823184949642340e-1, .846675700391811902311535683588021566686322201877486146889852e-2
+1, .25553818276955102188893230281542930237114308353377333609453e-1, .106549993770682505272396805354392009144218888197680351574531e-1
+1, .37283100596623024511254321150437870558828121780522076199398e-1, .127946431985650053173497561001720140514397806491340818513946e-1
+1, .51123644233029017149340024340109355272685177349324455009290e-1, .148759147761013778995258646178614685465143769131024900807733e-1
+1, .67012302566570968542055611591700780656347627831047757984850e-1, .168893139995534482603019469405726643638997402425978005096917e-1
+1, .84876581466966973483807347604596941002096873014809695984878e-1, .188256526786930356638303996142295585134775597253619967071747e-1
+1, .104634971462362872405427926289848794426015243457644445065496, .206760950548393648521100879351157392121031120546370405635691e-1
+1, .126197320192166972999831747365998565547138909998726752515344, .224321976386590633835473067813874282211433502588920301613461e-1
+1, .149465243989797151243938955286749774875212008425030676765782, .240859475508561002652344316116104683409877461838289928188537e-1
+1, .174332576899001142446761422091570316386197971340762030275394, .256297990035715106676826496857240167320907508132641309781954e-1
+1, .200685855143642423411413733199916344925766832717685026088916, .270567076929283772458188216296115376299487345205679953217357e-1
+1, .228404834869098682364518654485561581983010764807541957304580, .283601629219956179084372018016433572932135113045565907253659e-1
+1, .257363040805917668613839903145772595840166220358480648227749, .295342172977731574037753613184538685491084742461151384484017e-1
+1, .287428343358585801338926568285716290415331115446032654158972, .305735138623252405076783039520955188863908164289268042811904e-1
+1, .318463561489502144938146510742674155076305578571178764251008, .314733105321972540894759761235554656166230825158931104034124e-1
+1, .350327088649064992258280371711048035321953841222880825388166, .322295017335695347941397195541275319618978225225092462334785e-1
+1, .382873538896865115686971942213103753712955589004750987188736, .328386371338906036893787828427778838108580698869058577394796e-1
+1, .415954410266448235696601631286148936276255359081765301634008, .332979373842274436878809832113668509721818544004960546349026e-1
+1, .449418762347207880242070171495675304559064319749253130190242, .336053068003390879311870774135487980882698405828226010798833e-1
+1, .483113904991973979240221084054280118092041942001899039658947, .337593429245182294101070945821505401060741347699091275725852e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D93.IM b/cubature/Gauss1D93.IM
new file mode 100755
index 0000000..9cbd6a0
--- /dev/null
+++ b/cubature/Gauss1D93.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(93)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, .640635707893945408026142606445754186454674384254595392016e-3, .164372692126400744162498210416808992568031199676706634164481e-2
+1, .3372394506115682653905157683768195927143957944684632730345e-2, .381930814792441680705217838556582775221029541017058389054166e-2
+1, .8274498464188145617549482981915074034172890445953112809872e-2, .598142423215616048197172742497425626169645225334391685181347e-2
+1, .15326606336717751427127861219864597330848526510247931756560e-1, .811766657321652983536284370394931050794646220769492207593451e-2
+1, .24498015371145778705098538074278788673199242306310485515644e-1, .102184690738342138210173803431276932136155236041522508565449e-1
+1, .35748653493819675901407537694339509312290606528483005137104e-1, .122746058298294092689170785762528835688315761833090681996831e-1
+1, .49029335280737321566414349011282180180682756783857609870203e-1, .142770753503216932523699623129055408034376089321594336743261e-1
+1, .64281992101551841529507267722196914474036736942110195366202e-1, .162171177575923783838087315870850793465443404140123629981217e-1
+1, .81439930050048939361200525716823817909065525268278703181942e-1, .180862482920874758067299648831556243367226411132299019302162e-1
+1, .100428122916129028542218965398203493979739571900632528400024, .198762930612655018904506900709805082958247344145017102234583e-1
+1, .121163540777280683213001738215158899393290044783173283547844, .215794243242397691341508967232515697738596888929325150349047e-1
+1, .143555513295467849169060336114490594147874877122041428456672, .231881945432529556022009241213725462743480226314714394699713e-1
+1, .167506126304833635431648675713955469284742592733364537119913, .246955688736805848022852429310024615599970118952460549635153e-1
+1, .192910650021813195702268728697873156875910027454897625148956, .260949558900285724361059708548380388608674899810190476467498e-1
+1, .219657997032667902758470841290865604428238272704431280250888, .273802363907651129785625884442524029518976831742536126164179e-1
+1, .247631208068211040112855487324349454863398440387698735338658, .285457901466157701110083026541913864551647129826236231721209e-1
+1, .276707963447572148637408928825296020303291497400639450285037, .295865204711694379880772781928706462319161757465370119328879e-1
+1, .306761117957666430208348806196988364899081195992584992531038, .304978765043698226653552890667187605905466021510079373643543e-1
+1, .337659256831132048894619350410001581800185541996468837058945, .312758731104608313202821907249767683767079217292302127908845e-1
+1, .369267270392512714846508516897414512883338633101560137339300, .319171083028585153156468899279067667411681718453429862825998e-1
+1, .401446944860444096019254320814747691222568564788830167322856, .324187781194728633513019695554030094424973763009141594017730e-1
+1, .434057566722742551473088234637936379318332423280755543524872, .327786888832748701255715011630379561409999454043667989478860e-1
+1, .466956538041822162419763111262933145703861863031889795563862, .329952667944052372667853276652491297886791388132514989445770e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .330675648118277398267201771655274855976802263589656202832145e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D95.IM b/cubature/Gauss1D95.IM
new file mode 100755
index 0000000..21a4809
--- /dev/null
+++ b/cubature/Gauss1D95.IM
@@ -0,0 +1,32 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(95)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=24
+1, .614496373786940699729254218443179955531174861639480693530e-3, .157667302615291931633865577194574378914197045973018482261972e-2
+1, .3234913866824621226035624575462940821692625202664035191424e-2, .366377695063813105119198981089327502935395342176108986357423e-2
+1, .7937708138586571127708199986700584705380388291307635021175e-2, .573861728961726974479633380454581404321025204056685020873092e-2
+1, .14704203726876374769294008099669971348783044184558146985814e-1, .778965786147192436408847791723015698818813346329383384857873e-2
+1, .23506148419784569638519666987140828395729334088040631568026e-1, .980808022867776390723035982610635484790651739798400643146660e-2
+1, .34306654646722833442912809949199366140001457190524785064698e-1, .117853804196621895702596506892246151108648707544960283682447e-1
+1, .47060431642215163588962582164494105843868900086294577323758e-1, .137132548541784741000369181312529102255920776237976142064144e-1
+1, .61713989862876057047153222597451622719175733135019003626062e-1, .155836139163990444510328784231772097271426704116122176991856e-1
+1, .78205869187803234644455077740171975064556494131223799242544e-1, .173886112823852194462742929819012052986406984136416438302206e-1
+1, .96466897985278686458723478487730777013493485269792306712068e-1, .191206755329153531586086282618578089319119841826294376732097e-1
+1, .116420483742129830373072281238515473188678834575896313882436, .207725414717323746070294111805323988767364130190148889679119e-1
+1, .137982934538092672662758883253167376707453593859638818635317, .223372804283471402097242935629251974942313934311992823222517e-1
+1, .161063810183668047394074359662045470575022660486975693464480, .238083292462452374129533117394649150789990333714481967927431e-1
+1, .185566301611743188002417533465002673987545500104919114509134, .251795177769272374789038095439328030164970465129293256942858e-1
+1, .211387636958013648091095380729760613573001356929902235973802, .264450947425968335477525281323494573308632428165585888740496e-1
+1, .238419512638883483160887065431245736855406189094057946209885, .275997518499920814341017475958177195022254628037800939584806e-1
+1, .266548547624520797727535569174600745381593947870741527909066, .286386460502016078525751173423502881207635615020559845055360e-1
+1, .295656759004641635041887252092683356770038578502555967614424, .295574198491978178732374087167599553298278012785275043311600e-1
+1, .325622056853919630920091031364796041932845175015803711983938, .303522195829469400264846160139102389426304321282388772450156e-1
+1, .356318756322272211632056769341601156074220847099480110545750, .310197115799463319520988920687992591531916998325457307676940e-1
+1, .387618104802655469387567279912653861280719097979172596917628, .315570961431270128285630113751166590637068216855503956041037e-1
+1, .419388821965554140971781304608251152612812810129052441148378, .319621192923240933119531009127577044594870424913214999454137e-1
+1, .451497650395268650534973022073187739923631885349531506784710, .322330822179750411032520968288525328628459622277651543802817e-1
+1, .483809914518565318983338878423932778977018598819240953787498, .323688484063419612515124693682957767760409594733182550072812e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D97.IM b/cubature/Gauss1D97.IM
new file mode 100755
index 0000000..60cf532
--- /dev/null
+++ b/cubature/Gauss1D97.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(97)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, .589924696682310319084363647944672438159501067749017943526e-3, .151363949446145253874034908791357048641501438204287264351789e-2
+1, .3105669027916104619943070371023190579346302530674916197698e-2, .351754979504322573672533915567420543143192561678441079639851e-2
+1, .7621052042893497820350502315712644823346268927373523391392e-2, .551027551579679024875414408341666637609678317917354221947010e-2
+1, .14118899549222309930013789247612933251068726409547153340386e-1, .748107246781232551479215956010075201814052233033269490334284e-2
+1, .22573170662931383222378160165907790472652774049863104038507e-1, .942179792654472922222532669555367463387495551147460032755963e-2
+1, .32949852622094925470508769681727548769788523594904002796149e-1, .113246007937233382493854821080214436633987457426366281830658e-1
+1, .45207172085963357393490179822099964478614384441640980446578e-1, .131818094635330084804728726198710238472304835917654899575772e-1
+1, .59295777213495544981484232091497536920379981368804330191236e-1, .149859423102919126753452790370736050310360183761167877879514e-1
+1, .75158940077917149482559063878510333336697833767641875628206e-1, .167297333958110871712435754458446009247399343455751733739350e-1
+1, .92732786320072284230249606117611477752663932088623324131616e-1, .184061604815003449097336183494411475006807762241889232525638e-1
+1, .111946552827276682490928593875771964367774769085409067364483, .200084728831865106843025183715516607139323037370797554766597e-1
+1, .132722872881298651893162893570737557673582273338149082780264, .215302184906297989941727420005192479033567906221702809279029e-1
+1, .154978087787433943247624096362529036183247436905482124504226, .229652696777979267712498099860638355044121611768177900050535e-1
+1, .178622583790381167971571525708049945229832263873361233729259, .243078479439141201388255986439342654406844643094118207627463e-1
+1, .203561152945549643772067831603685732683499492340576204773244, .255525471650722953373114030246592806948062246648920107248553e-1
+1, .229693376504136966720887266385282041537949326880817076701026, .266943553541294842639714668650881030827930347241122943412755e-1
+1, .256914029273753978911511951970712468962442402832531697359701, .277286748374017943452157907413490336021257620368970709080284e-1
+1, .285113503329211737670707929096288483468291051060963995078146, .286513407650937377425822961754082681752902194015598306429925e-1
+1, .314178249368857555568132729526519736192627606633036511625066, .294586378800136330122638253712462581312480569297397286564890e-1
+1, .343991233940125618896069661746791867451583296002806375208302, .301473154765760086515530584377707952488882544598627438911345e-1
+1, .374432410693711363246422028587694362708507912713167874352986, .307146004895964681484133230701505374715950045960489668669514e-1
+1, .405379203769093206757344913070006744410160561160590455327782, .311582086600286337005384126079748521120667681106604169220473e-1
+1, .436707001365163974466007355712231904837756439466566643244516, .314763537325978497371997778914455031818627138847850206861729e-1
+1, .468289657508656606985582589560757513423606563610559806254895, .316677546482458742954184637000452600739857082824129102236561e-1
+1, .500000000000000000000000000000000000000000000000000000000000, .317316407023952988591267339397648174998147611541261095928888e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/Gauss1D99.IM b/cubature/Gauss1D99.IM
new file mode 100755
index 0000000..38a61b6
--- /dev/null
+++ b/cubature/Gauss1D99.IM
@@ -0,0 +1,33 @@
+%% Automatically generated by Maple %%
+NAME=IM_Gauss1D(99)
+N=1
+GEOTRANS=GT_PK(1,1)
+NBPT=25
+1, .566797789964474907270277512890747001878243547960737411480e-3, .145431127657757047920036217142774040333649972050717075354292e-2
+1, .2984015283954643707445899789652635921261014465838204831738e-2, .337989959787270075138943908899251590093689399315035876157278e-2
+1, .7322957975997058845495187183755297992203684527297095641096e-2, .529527419182548463178484074962051116970093598211323221129446e-2
+1, .13567807446653963143327947696873973165413296475022899127452e-1, .719041138074278720968945446366217496851591671081726724866078e-2
+1, .21694522378596028501127177921688952974282937686976728572010e-1, .905778035674469517562997171117730992233366525516848669794578e-2
+1, .31671690527561033109562526363751698923134200952398538812473e-1, .108901215850623964907960345313451706136567380839148405063860e-1
+1, .43460721672104053455132178614171452607905904151108805188636e-1, .126803367850061952200974391927213617300806319632623071782279e-1
+1, .57016010238193475681229508766623182902854844622095818776722e-1, .144214967902675990149531865566162162589234328540511922525225e-1
+1, .72285115285026957694318678032621266172583480256547018280835e-1, .161068641117890083240829136615019767242945291879986355537740e-1
+1, .89208964570332025821872944563030231119629308328257125738313e-1, .177299178075730770803673055004878985484800001221029977316033e-1
+1, .107722083549800368047347401829504399576341863721777823630570, .192843783062938376223850751181929674323858524577060773267045e-1
+1, .127752848886965730869731873658902878564906034335207710737610, .207642315450738487112059894820335089044889877245474171847496e-1
+1, .149223765646588874455226871058172135925140385757652178629538, .221637521694016377460111434151970987303806491780120189816742e-1
+1, .172051767157280319609187567998160090479294735808834086734532, .234775256519742164828165068174938412570321530926315886636662e-1
+1, .196148536407524880409809101804083553197897489662002822143934, .247004692247331574606217903757163643461435254833147524781824e-1
+1, .221420847742674972842238545187099196092050808881124869341770, .258278515347905692449526479200476398249127246977173934675106e-1
+1, .247770927546267899174270434075429403682310660864660380908630, .268553109444981232617293986278322763840116067649619999825878e-1
+1, .275096832512980605426434266110812091342467743267413167029260, .277788724031062588117837128061347487975676499919512784266778e-1
+1, .303292844051217436302885373088091364876930265663671998460482, .285949628238641918615146575329965815057876861285458794259834e-1
+1, .332249877290281321581505871354464151079390703481602119049784, .293004249066112229175612183154242331048837567220127365322458e-1
+1, .361855903110234004836177360739434907142599206434001924693247, .298925293521327287547882026562926153983330210363345023014504e-1
+1, .391996381561979121576357733691449333147122013744933363648190, .303689854208851080158750076924055008048996366177017678617728e-1
+1, .422554705000927048964185689529445249399074889972531183801635, .307279497951583318782033930419576875486337878820037571545838e-1
+1, .453412649219956929572774811180199826057164308038930692658555, .309680337103416216920437548904153442864385283456224524713816e-1
+1, .484450830836405561943835505167025402876351888520000978512602, .310883083276736311605165536803067154338412346005133165505828e-1
+NBF=2
+NC(0,0)
+NC(0,0)
diff --git a/cubature/HEXAHEDRON_11.IM b/cubature/HEXAHEDRON_11.IM
new file mode 100755
index 0000000..e725bcd
--- /dev/null
+++ b/cubature/HEXAHEDRON_11.IM
@@ -0,0 +1,28 @@
+% Integration formulae of order 11 on a 3D Hexahedron with 90 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(11)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 7
+2, .9063071670498132481961877986898720, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0253096342016000238231671413708773
+2, .8673341434985040086731923849337745, .8673341434985040086731923849337745, .5000000000000000000000000000000000, .0181499182325144622865632250992823
+2, .6566967022580273605228866152789755, .6566967022580273605228866152789755, .6566967022580273605228866152789755, .0269990056568711411641833332980551
+2, .8008376320991313508172065028926585, .8008376320991313508172065028926585, .8008376320991313508172065028926585, .0146922934945570350487414755013352
+2, .9277278805088799923375457353451730, .9277278805088799923375457353451730, .9277278805088799923375457353451730, .0055804890098536552051251442852662
+2, .9706224286053016319555750788155670, .9706224286053016319555750788155670, .6769514072983150674551564354064455, .0028267870173527355278995288336230
+2, .7253999675572547151889421728651345, .7253999675572547151889421728651345, .9825498327563551314651409115626720, .0076802492622294169003437555791307
+%2,0.812614334099626496392375597379744, 0., 0., 0.202477073612800190585337130967019
+%2,0.734668286997008017346384769867549, 0.734668286997008017346384769867549, 0., 0.145199345860115698292505800794259
+%2,0.313393404516054721045773230557951, 0.313393404516054721045773230557951, 0.313393404516054721045773230557951, 0.215992045254969129313466666384441
+%2,0.601675264198262701634413005785317, 0.601675264198262701634413005785317,0.601675264198262701634413005785317,0.117538347956456280389931804010682
+%2,0.855455761017759984675091470690346,0.855455761017759984675091470690346,0.855455761017759984675091470690346,0.0446439120788292416410011542821300
+%2,0.941244857210603263911150157631134,0.941244857210603263911150157631134,0.353902814596630134910312870812891,0.0226142961388218842231962306689844
+%2,0.450799935114509430377884345730269,0.450799935114509430377884345730269,0.965099665512710262930281823125344,0.0614419940978353352027500446330462,
+NBF = 6
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
+IM_QUAD(17)
diff --git a/cubature/HEXAHEDRON_5.IM b/cubature/HEXAHEDRON_5.IM
new file mode 100755
index 0000000..3976a62
--- /dev/null
+++ b/cubature/HEXAHEDRON_5.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 5 on a 3D Hexahedron with 14 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(5)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 2
+2, .8979112128771107316322744102380675, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .1108033240997229916897506925207755
+2, .8793934553196640731345171390561335, .8793934553196640731345171390561335, .8793934553196640731345171390561335, .0418975069252077562326869806094182
+NBF = 6
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
+IM_QUAD(5)
diff --git a/cubature/HEXAHEDRON_9.IM b/cubature/HEXAHEDRON_9.IM
new file mode 100755
index 0000000..c7df63f
--- /dev/null
+++ b/cubature/HEXAHEDRON_9.IM
@@ -0,0 +1,24 @@
+% Integration formulae of order 9 on a 3D Hexahedron with 58 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_HEXAHEDRON(9)
+N = 3
+GEOTRANS = GT_QK(3,1)
+NBPT = 5
+2, .8068407347958544969174424448702780, .5000000000000000000000000000000000, .5000000000000000000000000000000000, .0541593744687068178762288491492902 %*6
+2, .9388435616288391432433878794971660, .9388435616288391432433878794971660, .5000000000000000000000000000000000, .0114737257670222052714055736149557 %*12
+1, .7820554035100150271333094993315360, .7820554035100150271333094993315360, .7820554035100150271333094993315360, .0248574797680029375401085898232011 %*8
+1, .9350498923309879588075319044319620, .9350498923309879588075319044319620, .9350498923309879588075319044319620, .0062685994124186287334314359655827 %*8
+2, .7161339513154310822080124307584715, .7161339513154310822080124307584715, .9692652109323358726644884348015390, .0120146004391716708040599923089382 %*24
+%2, 0.613681469591708993834884889740556, 0., 0., 0.433274995749654543009830793194322
+%2, 0.877687123257678286486775758994332, 0.877687123257678286486775758994332, 0., 0.0917898061361776421712445889196463
+%2, 0.564110807020030054266618998663072, 0.564110807020030054266618998663072, 0.564110807020030054266618998663072, 0.198859838144023500320868718585609
+%2, 0.870099784661975917615063808863924, 0.870099784661975917615063808863924, 0.870099784661975917615063808863924, 0.0501487952993490298674514877246616
+%2, 0.432267902630862164416024861516943, 0.432267902630862164416024861516943, 0.938530421864671745328976869603078, 0.0961168035133733664324799384715060
+NBF = 6
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
+IM_QUAD(9)
diff --git a/cubature/Makefile.am b/cubature/Makefile.am
index fb16ef9..a554f8d 100644
--- a/cubature/Makefile.am
+++ b/cubature/Makefile.am
@@ -3,6 +3,7 @@ all : getfem_im_list.h
check : getfem_im_list.h
EXTRA_DIST = $(IM_METHODS_LOC) make_getfem_im_list getfem_im_list.h
+
getfem_im_list.h : $(IM_METHODS)
$(top_srcdir)/cubature/make_getfem_im_list $(top_srcdir)/cubature
cp ./getfem_im_list.h ../src/getfem/getfem_im_list.h
diff --git a/cubature/Makefile.in b/cubature/Makefile.in
index b4c78cd..0dd028c 100644
--- a/cubature/Makefile.in
+++ b/cubature/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -321,10 +324,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
@@ -419,6 +427,7 @@ uninstall-am:
all : getfem_im_list.h
check : getfem_im_list.h
+
getfem_im_list.h : $(IM_METHODS)
$(top_srcdir)/cubature/make_getfem_im_list $(top_srcdir)/cubature
cp ./getfem_im_list.h ../src/getfem/getfem_im_list.h
diff --git a/cubature/NC_0_0.IM b/cubature/NC_0_0.IM
new file mode 100755
index 0000000..337234d
--- /dev/null
+++ b/cubature/NC_0_0.IM
@@ -0,0 +1,7 @@
+% Integration formulae on a point, for compatibility only
+NAME= IM_NC(0,0) % Name of the method
+N=0
+GEOTRANS=GT_PK(0,0)
+NBPT=1
+0, 1.0
+NBF=0
diff --git a/cubature/QUAD_17.IM b/cubature/QUAD_17.IM
new file mode 100755
index 0000000..0f77977
--- /dev/null
+++ b/cubature/QUAD_17.IM
@@ -0,0 +1,23 @@
+% Integration formulae of order 17 on a quadrangle with 70 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(17)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 10
+2, .9946765372563002456132179188084275, .5000000000000000000000000000000000, .0051537289799977399712336527838148
+2, .6881426035789866472037743058601245, .5000000000000000000000000000000000, .0320064290449774586796976445666927
+2, .9894241396311165580350357179969500, .9894241396311165580350357179969500, .0013779348835079726300386692984834
+2, .9428973645820580644532271790325020, .9428973645820580644532271790325020, .0098019281142854701238999612650102
+2, .5858780619191740873471919457467925, .5858780619191740873471919457467925, .0190992362699658256001262135754266
+2, .7952496369030012066757582605040080, .6597525183172869728383947371516360, .0353784324874931148111524373531432
+2, .8995395659584316279050666672835730, .7989862259647286901314008779983725, .0209758198409494005205819165480076
+2, .9018719814793723558927249127471835, .5291722408882752648421765781646003, .0150985409124211365077258972729358
+2, .9682531380637473908710441740858150, .6736931580831013373929988958506685, .0143469382423031737803539574584371
+2, .9906605899027261474879552202153555, .8530001438993230595909631103115815, .0054806398704659408776877206227619
+NBF = 4
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+
diff --git a/cubature/QUAD_2.IM b/cubature/QUAD_2.IM
new file mode 100755
index 0000000..c65335d
--- /dev/null
+++ b/cubature/QUAD_2.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 2 on a quadrangle with 3 points
+NAME = IM_QUAD(2)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+0, 0.9082482904638630163662140124509818986609912467761116880721154277, 0.5, 0.3333333333333333333333333333333333333333333333333333333333333333
+0, 0.2958758547680684918168929937745090506695043766119441559639422863, .8535533905932737622004221810524245196424179688442370182941699344, 0.3333333333333333333333333333333333333333333333333333333333333333
+0, 0.2958758547680684918168929937745090506695043766119441559639422863, .1464466094067262377995778189475754803575820311557629817058300656, 0.3333333333333333333333333333333333333333333333333333333333333333
+NBF = 4
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
diff --git a/cubature/QUAD_3.IM b/cubature/QUAD_3.IM
new file mode 100755
index 0000000..7692bc4
--- /dev/null
+++ b/cubature/QUAD_3.IM
@@ -0,0 +1,11 @@
+% Integration formulae of order 3 on a quadrangle with 4 points
+NAME = IM_QUAD(3)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 1
+2, 0.5, .9082482904638630163662140124509818986609912467761116880721154277, 0.25 % full symmetric 4 points
+NBF = 4
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
diff --git a/cubature/QUAD_5.IM b/cubature/QUAD_5.IM
new file mode 100755
index 0000000..519953d
--- /dev/null
+++ b/cubature/QUAD_5.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 5 on a quadrangle with 7 points
+NAME = IM_QUAD(5)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+0, 0.5, 0.5, .2857142857142857142857142857142857142857142857142857142857142857
+1, 0.9830458915396479524572888052389923907713377624919657696231974935, 0.5, 0.0793650793650793650793650793650793650793650793650793650793650793 % full symmetric 2 points
+1, .7886751345948128822545743902509787278238008756350634380093011631, 0.8872983346207416885179265399782399610832921705291590826587573766, 0.1388888888888888888888888888888888888888888888888888888888888888 % full symmetric 4 points
+NBF = 4
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
diff --git a/cubature/QUAD_7.IM b/cubature/QUAD_7.IM
new file mode 100755
index 0000000..6ca0a83
--- /dev/null
+++ b/cubature/QUAD_7.IM
@@ -0,0 +1,15 @@
+% Integration formulae of order 7 on a quadrangle with 12 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(7)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 3
+2, .9629100498862757307832833882919995, .5000000000000000000000000000000000, .0604938271604938271604938271604937
+1, .6902772166041578281895531795431970, .6902772166041578281895531795431970, .1301482291668486142849798580116827
+1, .9029898914592993718539280906753720, .9029898914592993718539280906753720, .0593579436726575585545263148278232
+NBF = 4
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
diff --git a/cubature/QUAD_9.IM b/cubature/QUAD_9.IM
new file mode 100755
index 0000000..12ebad8
--- /dev/null
+++ b/cubature/QUAD_9.IM
@@ -0,0 +1,20 @@
+% Integration formulae of order 9 on a quadrangle with 20 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_QUAD(9)
+N = 2
+GEOTRANS = GT_QK(2,1)
+NBPT = 6
+2, .9922699059711261962165003001504935, .5000000000000000000000000000000000, .0179033561774527416961834769929511
+2, .7444431714211862081138843106633405, .5000000000000000000000000000000000, .1135225881378863060330381008714315
+2, .5, .9922699059711261962165003001504935, .0179033561774527416961834769929511
+2, .5, .7444431714211862081138843106633405, .1135225881378863060330381008714315
+2, .9697836437107607670671515381158335, .9697836437107607670671515381158335, .0106961538666945127922920850036681
+2, .9183551625119944870476731455760975, .7536883868373065026387420172469580, .0539389509089832197392431685659745
+NBF = 4
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+
+
diff --git a/cubature/SIMPLEX4D_3.IM b/cubature/SIMPLEX4D_3.IM
new file mode 100755
index 0000000..82dcd28
--- /dev/null
+++ b/cubature/SIMPLEX4D_3.IM
@@ -0,0 +1,18 @@
+% Integration formulae of order 3 on a 4D simplex with 6 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_SIMPLEX4D(3)
+N = 4
+GEOTRANS = GT_PK(4,1)
+NBPT = 2
+1, 0.2, 0.2, 0.2, 0.2,-0.0434027777777777777777777777777777
+1, 0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.142857142857142857142857142857142,0.0170138888888888888888888888888888
+NBF = 5
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+IM_TETRAHEDRON(3)
+
+
+
diff --git a/cubature/TETRA_1.IM b/cubature/TETRA_1.IM
new file mode 100755
index 0000000..d5e60ce
--- /dev/null
+++ b/cubature/TETRA_1.IM
@@ -0,0 +1,12 @@
+% Integration formulae of order 1 on a tetrahedron with 1 point
+NAME = IM_TETRAHEDRON(1)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 1
+0, 0.25, 0.25, 0.25, 0.1666666666666666666666666666666666666666666666666666666666666666
+NBF = 4
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+IM_TRIANGLE(1)
+
diff --git a/cubature/TETRA_2.IM b/cubature/TETRA_2.IM
new file mode 100755
index 0000000..d66abf3
--- /dev/null
+++ b/cubature/TETRA_2.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 2 on a tetrahedron with 4 points
+% double precision only
+NAME = IM_TETRAHEDRON(2)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 1
+1, 0.13819660112501052, 0.13819660112501052, 0.13819660112501052, 0.0416666666666666666666666666666666666666666666666666666666666666 % full symmetric 4 points
+NBF = 4
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+IM_TRIANGLE(2)
+
diff --git a/cubature/TETRA_3.IM b/cubature/TETRA_3.IM
new file mode 100755
index 0000000..d20a2c6
--- /dev/null
+++ b/cubature/TETRA_3.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 3 on a tetrahedron with 5 points
+NAME = IM_TETRAHEDRON(3)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 2
+0, 0.25, 0.25, 0.25, -0.1333333333333333333333333333333333333333333333333333333333333333
+1, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.075 % full symmetric 4 points
+NBF = 4
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+IM_TRIANGLE(3)
+
diff --git a/cubature/TETRA_5.IM b/cubature/TETRA_5.IM
new file mode 100755
index 0000000..43d9955
--- /dev/null
+++ b/cubature/TETRA_5.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 5 on a tetrahedron with 15 points
+% double precision only
+NAME = IM_TETRAHEDRON(5)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 4
+0, 0.25, 0.25, 0.25, 0.019753086419753086
+1, 0.31979362782962991, 0.31979362782962991, 0.31979362782962991, 0.011511367871045398 % full symmetric 4 points
+1, 0.091971078052723033, 0.091971078052723033, 0.091971078052723033, 0.01198951396316977 % full symmetric 4 points
+1, 0.056350832689629156, 0.056350832689629156, 0.44364916731037084, 0.008818342151675485 % full symmetric 6 points
+NBF = 4
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+IM_TRIANGLE(5)
+
diff --git a/cubature/TETRA_6.IM b/cubature/TETRA_6.IM
new file mode 100755
index 0000000..4747aa1
--- /dev/null
+++ b/cubature/TETRA_6.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 6 on a tetrahedron with 24 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TETRAHEDRON(6)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 4
+1, 0.214602871259152029288839219386284, 0.214602871259152029288839219386284, 0.214602871259152029288839219386284, 0.00665379170969458201661510459291332
+1, 0.0406739585346113531155794489564100, 0.0406739585346113531155794489564100, 0.0406739585346113531155794489564100, 0.00167953517588677382466887290765614
+1, 0.322337890142275510343994470762492, 0.322337890142275510343994470762492, 0.322337890142275510343994470762492, 0.00922619692394245368252554630895433
+1, 0.0636610018750175252992355276057269, 0.0636610018750175252992355276057269, 0.269672331458315808034097805727606, 0.00803571428571428571428571428571428
+NBF = 4
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+IM_TRIANGLE(6)
+
diff --git a/cubature/TETRA_8.IM b/cubature/TETRA_8.IM
new file mode 100755
index 0000000..6642e97
--- /dev/null
+++ b/cubature/TETRA_8.IM
@@ -0,0 +1,20 @@
+% Integration formulae of order 8 on a tetrahedron with 43 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TETRAHEDRON(8)
+N = 3
+GEOTRANS = GT_PK(3,1)
+NBPT = 7
+1, 0.25, 0.25, 0.25, -0.0205001886586399158405865177642941
+1, 0.206829931610673204083980900024961, 0.206829931610673204083980900024961, 0.206829931610673204083980900024961, 0.0142503058228669012484397415358704
+1, 0.0821035883105467230906058078714215,0.0821035883105467230906058078714215,0.0821035883105467230906058078714215, 0.00196703331313390098756280342445466
+1, 0.00578195050519799725317663886414270, 0.00578195050519799725317663886414270, 0.00578195050519799725317663886414270, 0.000169834109092887379837744566704016
+1, 0.0505327400188942244256245285579071, 0.0505327400188942244256245285579071, 0.449467259981105775574375471442092, 0.00457968382446728180074351446297276
+1, 0.229066536116811139600408854554753, 0.229066536116811139600408854554753, 0.0356395827885340437169173969506114, 0.00570448580868191850680255862783040
+1, 0.0366077495531974236787738546327104, 0.0366077495531974236787738546327104, 0.190486041934633455699433285315099, 0.00214051914116209259648335300092023
+NBF = 4
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+IM_TRIANGLE(8)
+
diff --git a/cubature/TRIANGLE_1.IM b/cubature/TRIANGLE_1.IM
new file mode 100755
index 0000000..4cf5f57
--- /dev/null
+++ b/cubature/TRIANGLE_1.IM
@@ -0,0 +1,10 @@
+% Integration formulae of order 1 on a triangle with 1 point
+NAME = IM_TRIANGLE(1)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 1
+0, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.5
+NBF = 3
+IM_GAUSS1D(1)
+IM_GAUSS1D(1)
+IM_GAUSS1D(1)
diff --git a/cubature/TRIANGLE_10.IM b/cubature/TRIANGLE_10.IM
new file mode 100755
index 0000000..994c149
--- /dev/null
+++ b/cubature/TRIANGLE_10.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 10 on a triangle with 25 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(10)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 6
+0, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0399472523706198539156235226066932
+1, 0.425086210602090572969529511638044, 0.425086210602090572969529511638044, 0.0355619011161886673196456436993290
+1, 0.0233088675100001907144663868959796, 0.0233088675100001907144663868959796, 0.00411190934523209775932331018123594
+1, 0.628307400213492556420837666078834, 0.223766973576973006225686490268204, 0.0227152961480850090035368146219665
+1, 0.611313826181397648918755002253901, 0.358740141864431464578155300723852, 0.0186799281171526384131182495009876
+1, 0.821072069985629373373544413472177, 0.143295370426867145305856630617323, 0.0154433284422819943912565385023143
+NBF = 3
+IM_GAUSS1D(10)
+IM_GAUSS1D(10)
+IM_GAUSS1D(10)
diff --git a/cubature/TRIANGLE_13.IM b/cubature/TRIANGLE_13.IM
new file mode 100755
index 0000000..dc4be66
--- /dev/null
+++ b/cubature/TRIANGLE_13.IM
@@ -0,0 +1,49 @@
+% Integration formulae of order 13 on a triangle with 37 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(13)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 37
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0262604617004010000000000000000000
+0,.4950481849397050000000000000000000, .4950481849397050000000000000000000, .0056400726046650000000000000000000
+0,.4950481849397050000000000000000000, .0099036301205910000000000000000000, .0056400726046650000000000000000000
+0,.0099036301205910000000000000000000, .4950481849397050000000000000000000, .0056400726046650000000000000000000
+0,.4687166351095740000000000000000000, .4687166351095740000000000000000000, .0157117591812270000000000000000000
+0,.4687166351095740000000000000000000, .0625667297808520000000000000000000, .0157117591812270000000000000000000
+0,.0625667297808520000000000000000000, .4687166351095740000000000000000000, .0157117591812270000000000000000000
+0,.4145213368012770000000000000000000, .4145213368012770000000000000000000, .0235362512520970000000000000000000
+0,.4145213368012770000000000000000000, .1709573263974470000000000000000000, .0235362512520970000000000000000000
+0,.1709573263974470000000000000000000, .4145213368012770000000000000000000, .0235362512520970000000000000000000
+0,.2293995720428310000000000000000000, .2293995720428310000000000000000000, .0236817932681775000000000000000000
+0,.2293995720428310000000000000000000, .5412008559143370000000000000000000, .0236817932681775000000000000000000
+0,.5412008559143370000000000000000000, .2293995720428310000000000000000000, .0236817932681775000000000000000000
+0,.1144244951963300000000000000000000, .1144244951963300000000000000000000, .0155837645228970000000000000000000
+0,.1144244951963300000000000000000000, .7711510096073400000000000000000000, .0155837645228970000000000000000000
+0,.7711510096073400000000000000000000, .1144244951963300000000000000000000, .0155837645228970000000000000000000
+0,.0248113913634590000000000000000000, .0248113913634590000000000000000000, .0039878857325370000000000000000000
+0,.0248113913634590000000000000000000, .9503772172730820000000000000000000, .0039878857325370000000000000000000
+0,.9503772172730820000000000000000000, .0248113913634590000000000000000000, .0039878857325370000000000000000000
+0,.2687949970587610000000000000000000, .6363511745616600000000000000000000, .0184242013643660000000000000000000
+0,.6363511745616600000000000000000000, .0948538283795790000000000000000000, .0184242013643660000000000000000000
+0,.0948538283795790000000000000000000, .2687949970587610000000000000000000, .0184242013643660000000000000000000
+0,.2687949970587610000000000000000000, .0948538283795790000000000000000000, .0184242013643660000000000000000000
+0,.6363511745616600000000000000000000, .2687949970587610000000000000000000, .0184242013643660000000000000000000
+0,.0948538283795790000000000000000000, .6363511745616600000000000000000000, .0184242013643660000000000000000000
+0,.2917300667342880000000000000000000, .6901691599869050000000000000000000, .0087007316519110000000000000000000
+0,.6901691599869050000000000000000000, .0181007732788070000000000000000000, .0087007316519110000000000000000000
+0,.0181007732788070000000000000000000, .2917300667342880000000000000000000, .0087007316519110000000000000000000
+0,.2917300667342880000000000000000000, .0181007732788070000000000000000000, .0087007316519110000000000000000000
+0,.6901691599869050000000000000000000, .2917300667342880000000000000000000, .0087007316519110000000000000000000
+0,.0181007732788070000000000000000000, .6901691599869050000000000000000000, .0087007316519110000000000000000000
+0,.1263573854916690000000000000000000, .8514095378342410000000000000000000, .0077608934195225000000000000000000
+0,.8514095378342410000000000000000000, .0222330766740900000000000000000000, .0077608934195225000000000000000000
+0,.0222330766740900000000000000000000, .1263573854916690000000000000000000, .0077608934195225000000000000000000
+0,.1263573854916690000000000000000000, .0222330766740900000000000000000000, .0077608934195225000000000000000000
+0,.8514095378342410000000000000000000, .1263573854916690000000000000000000, .0077608934195225000000000000000000
+0,.0222330766740900000000000000000000, .8514095378342410000000000000000000, .0077608934195225000000000000000000
+NBF = 3
+IM_GAUSS1D(13)
+IM_GAUSS1D(13)
+IM_GAUSS1D(13)
diff --git a/cubature/TRIANGLE_17.IM b/cubature/TRIANGLE_17.IM
new file mode 100755
index 0000000..9291236
--- /dev/null
+++ b/cubature/TRIANGLE_17.IM
@@ -0,0 +1,73 @@
+% Integration formulae of order 17 on a triangle with 61 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(17)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 61
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0167185996454015000000000000000000
+0,.4971705405567740000000000000000000, .4971705405567740000000000000000000, .0025467077202535000000000000000000
+0,.4971705405567740000000000000000000, .0056589188864520000000000000000000, .0025467077202535000000000000000000
+0,.0056589188864520000000000000000000, .4971705405567740000000000000000000, .0025467077202535000000000000000000
+0,.4821763226246250000000000000000000, .4821763226246250000000000000000000, .0073354322638190000000000000000000
+0,.4821763226246250000000000000000000, .0356473547507510000000000000000000, .0073354322638190000000000000000000
+0,.0356473547507510000000000000000000, .4821763226246250000000000000000000, .0073354322638190000000000000000000
+0,.4502399690207820000000000000000000, .4502399690207820000000000000000000, .0121754391768360000000000000000000
+0,.4502399690207820000000000000000000, .0995200619584370000000000000000000, .0121754391768360000000000000000000
+0,.0995200619584370000000000000000000, .4502399690207820000000000000000000, .0121754391768360000000000000000000
+0,.4002662393773970000000000000000000, .4002662393773970000000000000000000, .0155537754344845000000000000000000
+0,.4002662393773970000000000000000000, .1994675212452060000000000000000000, .0155537754344845000000000000000000
+0,.1994675212452060000000000000000000, .4002662393773970000000000000000000, .0155537754344845000000000000000000
+0,.2521412679709530000000000000000000, .2521412679709530000000000000000000, .0156285556093100000000000000000000
+0,.2521412679709530000000000000000000, .4957174640580950000000000000000000, .0156285556093100000000000000000000
+0,.4957174640580950000000000000000000, .2521412679709530000000000000000000, .0156285556093100000000000000000000
+0,.1620470046584610000000000000000000, .1620470046584610000000000000000000, .0124078271698325000000000000000000
+0,.1620470046584610000000000000000000, .6759059906830770000000000000000000, .0124078271698325000000000000000000
+0,.6759059906830770000000000000000000, .1620470046584610000000000000000000, .0124078271698325000000000000000000
+0,.0758758822607460000000000000000000, .0758758822607460000000000000000000, .0070280365352785000000000000000000
+0,.0758758822607460000000000000000000, .8482482354785080000000000000000000, .0070280365352785000000000000000000
+0,.8482482354785080000000000000000000, .0758758822607460000000000000000000, .0070280365352785000000000000000000
+0,.0156547269678220000000000000000000, .0156547269678220000000000000000000, .0015973380868895000000000000000000
+0,.0156547269678220000000000000000000, .9686905460643560000000000000000000, .0015973380868895000000000000000000
+0,.9686905460643560000000000000000000, .0156547269678220000000000000000000, .0015973380868895000000000000000000
+0,.3343198673636580000000000000000000, .6554932038094230000000000000000000, .0040598276594965000000000000000000
+0,.6554932038094230000000000000000000, .0101869288269190000000000000000000, .0040598276594965000000000000000000
+0,.0101869288269190000000000000000000, .3343198673636580000000000000000000, .0040598276594965000000000000000000
+0,.3343198673636580000000000000000000, .0101869288269190000000000000000000, .0040598276594965000000000000000000
+0,.6554932038094230000000000000000000, .3343198673636580000000000000000000, .0040598276594965000000000000000000
+0,.0101869288269190000000000000000000, .6554932038094230000000000000000000, .0040598276594965000000000000000000
+0,.2922215377969440000000000000000000, .5723375905320200000000000000000000, .0134028711415815000000000000000000
+0,.5723375905320200000000000000000000, .1354408716710360000000000000000000, .0134028711415815000000000000000000
+0,.1354408716710360000000000000000000, .2922215377969440000000000000000000, .0134028711415815000000000000000000
+0,.2922215377969440000000000000000000, .1354408716710360000000000000000000, .0134028711415815000000000000000000
+0,.5723375905320200000000000000000000, .2922215377969440000000000000000000, .0134028711415815000000000000000000
+0,.1354408716710360000000000000000000, .5723375905320200000000000000000000, .0134028711415815000000000000000000
+0,.3195748854231900000000000000000000, .6260011902862280000000000000000000, .0092299966054110000000000000000000
+0,.6260011902862280000000000000000000, .0544239242905830000000000000000000, .0092299966054110000000000000000000
+0,.0544239242905830000000000000000000, .3195748854231900000000000000000000, .0092299966054110000000000000000000
+0,.3195748854231900000000000000000000, .0544239242905830000000000000000000, .0092299966054110000000000000000000
+0,.6260011902862280000000000000000000, .3195748854231900000000000000000000, .0092299966054110000000000000000000
+0,.0544239242905830000000000000000000, .6260011902862280000000000000000000, .0092299966054110000000000000000000
+0,.1907042241922920000000000000000000, .7964272149740710000000000000000000, .0042384342671640000000000000000000
+0,.7964272149740710000000000000000000, .0128685608336370000000000000000000, .0042384342671640000000000000000000
+0,.0128685608336370000000000000000000, .1907042241922920000000000000000000, .0042384342671640000000000000000000
+0,.1907042241922920000000000000000000, .0128685608336370000000000000000000, .0042384342671640000000000000000000
+0,.7964272149740710000000000000000000, .1907042241922920000000000000000000, .0042384342671640000000000000000000
+0,.0128685608336370000000000000000000, .7964272149740710000000000000000000, .0042384342671640000000000000000000
+0,.1804832116487460000000000000000000, .7523510059377290000000000000000000, .0091463983850125000000000000000000
+0,.7523510059377290000000000000000000, .0671657824135240000000000000000000, .0091463983850125000000000000000000
+0,.0671657824135240000000000000000000, .1804832116487460000000000000000000, .0091463983850125000000000000000000
+0,.1804832116487460000000000000000000, .0671657824135240000000000000000000, .0091463983850125000000000000000000
+0,.7523510059377290000000000000000000, .1804832116487460000000000000000000, .0091463983850125000000000000000000
+0,.0671657824135240000000000000000000, .7523510059377290000000000000000000, .0091463983850125000000000000000000
+0,.0807113136795640000000000000000000, .9046255040956080000000000000000000, .0033328160020825000000000000000000
+0,.9046255040956080000000000000000000, .0146631822248280000000000000000000, .0033328160020825000000000000000000
+0,.0146631822248280000000000000000000, .0807113136795640000000000000000000, .0033328160020825000000000000000000
+0,.0807113136795640000000000000000000, .0146631822248280000000000000000000, .0033328160020825000000000000000000
+0,.9046255040956080000000000000000000, .0807113136795640000000000000000000, .0033328160020825000000000000000000
+0,.0146631822248280000000000000000000, .9046255040956080000000000000000000, .0033328160020825000000000000000000
+NBF = 3
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
+IM_GAUSS1D(17)
diff --git a/cubature/TRIANGLE_19.IM b/cubature/TRIANGLE_19.IM
new file mode 100755
index 0000000..a61ffb3
--- /dev/null
+++ b/cubature/TRIANGLE_19.IM
@@ -0,0 +1,85 @@
+% Integration formulae of order 19 on a triangle with 73 points
+% taken from "P. Solin, K. Segeth and I. Dolezel: Higher-Order
+% Finite Element Methods", Chapman & Hall/CRC Press, 2003.
+% only double precision
+NAME = IM_TRIANGLE(19)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 73
+0,.3333333333333335000000000000000000, .3333333333333335000000000000000000, .0164531656944595000000000000000000
+0,.4896099870730060000000000000000000, .4896099870730060000000000000000000, .0051653659456360000000000000000000
+0,.4896099870730060000000000000000000, .0207800258539870000000000000000000, .0051653659456360000000000000000000
+0,.0207800258539870000000000000000000, .4896099870730060000000000000000000, .0051653659456360000000000000000000
+0,.4545368926978930000000000000000000, .4545368926978930000000000000000000, .0111936236315080000000000000000000
+0,.4545368926978930000000000000000000, .0909262146042150000000000000000000, .0111936236315080000000000000000000
+0,.0909262146042150000000000000000000, .4545368926978930000000000000000000, .0111936236315080000000000000000000
+0,.4014166806494310000000000000000000, .4014166806494310000000000000000000, .0151330629347340000000000000000000
+0,.4014166806494310000000000000000000, .1971666387011380000000000000000000, .0151330629347340000000000000000000
+0,.1971666387011380000000000000000000, .4014166806494310000000000000000000, .0151330629347340000000000000000000
+0,.2555516544030980000000000000000000, .2555516544030980000000000000000000, .0152454839010990000000000000000000
+0,.2555516544030980000000000000000000, .4888966911938050000000000000000000, .0152454839010990000000000000000000
+0,.4888966911938050000000000000000000, .2555516544030980000000000000000000, .0152454839010990000000000000000000
+0,.1770779421521300000000000000000000, .1770779421521300000000000000000000, .0120796063708205000000000000000000
+0,.1770779421521300000000000000000000, .6458441156957410000000000000000000, .0120796063708205000000000000000000
+0,.6458441156957410000000000000000000, .1770779421521300000000000000000000, .0120796063708205000000000000000000
+0,.1100610532279520000000000000000000, .1100610532279520000000000000000000, .0080254017934005000000000000000000
+0,.1100610532279520000000000000000000, .7798778935440960000000000000000000, .0080254017934005000000000000000000
+0,.7798778935440960000000000000000000, .1100610532279520000000000000000000, .0080254017934005000000000000000000
+0,.0555286242518400000000000000000000, .0555286242518400000000000000000000, .0040422901308920000000000000000000
+0,.0555286242518400000000000000000000, .8889427514963210000000000000000000, .0040422901308920000000000000000000
+0,.8889427514963210000000000000000000, .0555286242518400000000000000000000, .0040422901308920000000000000000000
+0,.0126218637772290000000000000000000, .0126218637772290000000000000000000, .0010396810137425000000000000000000
+0,.0126218637772290000000000000000000, .9747562724455430000000000000000000, .0010396810137425000000000000000000
+0,.9747562724455430000000000000000000, .0126218637772290000000000000000000, .0010396810137425000000000000000000
+0,.3957547873569430000000000000000000, .6006337947946450000000000000000000, .0019424384524905000000000000000000
+0,.6006337947946450000000000000000000, .0036114178484120000000000000000000, .0019424384524905000000000000000000
+0,.0036114178484120000000000000000000, .3957547873569430000000000000000000, .0019424384524905000000000000000000
+0,.3957547873569430000000000000000000, .0036114178484120000000000000000000, .0019424384524905000000000000000000
+0,.6006337947946450000000000000000000, .3957547873569430000000000000000000, .0019424384524905000000000000000000
+0,.0036114178484120000000000000000000, .6006337947946430000000000000000000, .0019424384524905000000000000000000
+0,.3079299838804360000000000000000000, .5576032615887840000000000000000000, .0127870803060110000000000000000000
+0,.5576032615887840000000000000000000, .1344667545307800000000000000000000, .0127870803060110000000000000000000
+0,.1344667545307800000000000000000000, .3079299838804360000000000000000000, .0127870803060110000000000000000000
+0,.3079299838804360000000000000000000, .1344667545307800000000000000000000, .0127870803060110000000000000000000
+0,.5576032615887840000000000000000000, .3079299838804360000000000000000000, .0127870803060110000000000000000000
+0,.1344667545307800000000000000000000, .5576032615887840000000000000000000, .0127870803060110000000000000000000
+0,.2645669484065200000000000000000000, .7209870258173650000000000000000000, .0044404517866690000000000000000000
+0,.7209870258173650000000000000000000, .0144460257761150000000000000000000, .0044404517866690000000000000000000
+0,.0144460257761150000000000000000000, .2645669484065200000000000000000000, .0044404517866690000000000000000000
+0,.2645669484065200000000000000000000, .0144460257761150000000000000000000, .0044404517866690000000000000000000
+0,.7209870258173650000000000000000000, .2645669484065200000000000000000000, .0044404517866690000000000000000000
+0,.0144460257761150000000000000000000, .7209870258173650000000000000000000, .0044404517866690000000000000000000
+0,.3585393522059510000000000000000000, .5945270689558710000000000000000000, .0080622733808655000000000000000000
+0,.5945270689558710000000000000000000, .0469335788381780000000000000000000, .0080622733808655000000000000000000
+0,.0469335788381780000000000000000000, .3585393522059510000000000000000000, .0080622733808655000000000000000000
+0,.3585393522059510000000000000000000, .0469335788381780000000000000000000, .0080622733808655000000000000000000
+0,.5945270689558710000000000000000000, .3585393522059510000000000000000000, .0080622733808655000000000000000000
+0,.0469335788381780000000000000000000, .5945270689558710000000000000000000, .0080622733808655000000000000000000
+0,.1578074059685950000000000000000000, .8393314736808390000000000000000000, .0012459709087455000000000000000000
+0,.8393314736808390000000000000000000, .0028611203505670000000000000000000, .0012459709087455000000000000000000
+0,.0028611203505670000000000000000000, .1578074059685950000000000000000000, .0012459709087455000000000000000000
+0,.1578074059685950000000000000000000, .0028611203505670000000000000000000, .0012459709087455000000000000000000
+0,.8393314736808390000000000000000000, .1578074059685950000000000000000000, .0012459709087455000000000000000000
+0,.0028611203505670000000000000000000, .8393314736808390000000000000000000, .0012459709087455000000000000000000
+0,.0750505969759110000000000000000000, .7010879789261730000000000000000000, .0091214200594755000000000000000000
+0,.7010879789261730000000000000000000, .2238614240979160000000000000000000, .0091214200594755000000000000000000
+0,.2238614240979160000000000000000000, .0750505969759110000000000000000000, .0091214200594755000000000000000000
+0,.0750505969759110000000000000000000, .2238614240979160000000000000000000, .0091214200594755000000000000000000
+0,.7010879789261730000000000000000000, .0750505969759110000000000000000000, .0091214200594755000000000000000000
+0,.2238614240979160000000000000000000, .7010879789261730000000000000000000, .0091214200594755000000000000000000
+0,.1424216011133830000000000000000000, .8229313240698570000000000000000000, .0051292818680995000000000000000000
+0,.8229313240698570000000000000000000, .0346470748167600000000000000000000, .0051292818680995000000000000000000
+0,.0346470748167600000000000000000000, .1424216011133830000000000000000000, .0051292818680995000000000000000000
+0,.1424216011133830000000000000000000, .0346470748167600000000000000000000, .0051292818680995000000000000000000
+0,.8229313240698570000000000000000000, .1424216011133830000000000000000000, .0051292818680995000000000000000000
+0,.0346470748167600000000000000000000, .8229313240698570000000000000000000, .0051292818680995000000000000000000
+0,.0654946280829380000000000000000000, .9243442526207840000000000000000000, .0018999644276510000000000000000000
+0,.9243442526207840000000000000000000, .0101611192962780000000000000000000, .0018999644276510000000000000000000
+0,.0101611192962780000000000000000000, .0654946280829380000000000000000000, .0018999644276510000000000000000000
+0,.0654946280829380000000000000000000, .0101611192962780000000000000000000, .0018999644276510000000000000000000
+0,.9243442526207840000000000000000000, .0654946280829380000000000000000000, .0018999644276510000000000000000000
+0,.0101611192962780000000000000000000, .9243442526207840000000000000000000, .0018999644276510000000000000000000
+NBF = 3
+IM_GAUSS1D(19)
+IM_GAUSS1D(19)
+IM_GAUSS1D(19)
diff --git a/cubature/TRIANGLE_2.IM b/cubature/TRIANGLE_2.IM
new file mode 100755
index 0000000..6484c6c
--- /dev/null
+++ b/cubature/TRIANGLE_2.IM
@@ -0,0 +1,10 @@
+% Integration formulae of order 2 on a triangle with 3 points
+NAME = IM_TRIANGLE(2)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 1
+1, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666, 0.1666666666666666666666666666666666666666666666666666666666666666
+NBF = 3
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
+IM_GAUSS1D(2)
diff --git a/cubature/TRIANGLE_3.IM b/cubature/TRIANGLE_3.IM
new file mode 100755
index 0000000..5fa11f4
--- /dev/null
+++ b/cubature/TRIANGLE_3.IM
@@ -0,0 +1,11 @@
+% Integration formulae of order 3 on a triangle with 4 points
+NAME = IM_TRIANGLE(3)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 2
+0, 0.3333333333333333333333333333333333333333333333333333333333333333, 0.3333333333333333333333333333333333333333333333333333333333333333, -0.28125
+1, 0.2, 0.2, 0.2604166666666666666666666666666666666666666666666666666666666666
+NBF = 3
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
+IM_GAUSS1D(3)
diff --git a/cubature/TRIANGLE_4.IM b/cubature/TRIANGLE_4.IM
new file mode 100755
index 0000000..7897e17
--- /dev/null
+++ b/cubature/TRIANGLE_4.IM
@@ -0,0 +1,12 @@
+% Integration formulae of order 4 on a triangle with 6 points
+% only double precision
+NAME = IM_TRIANGLE(4)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 2
+1, 0.445948490915965, 0.445948490915965, 0.111690794839005 % full symmetric 3 points
+1, 0.091576213509771, 0.091576213509771, 0.054975871827661 % full symmetric 3 points
+NBF = 3
+IM_GAUSS1D(4)
+IM_GAUSS1D(4)
+IM_GAUSS1D(4)
diff --git a/cubature/TRIANGLE_5.IM b/cubature/TRIANGLE_5.IM
new file mode 100755
index 0000000..e6f1b2f
--- /dev/null
+++ b/cubature/TRIANGLE_5.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 5 on a triangle with 7 points
+% only double precision
+NAME = IM_TRIANGLE(5)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 3
+0, 0.333333333333333, 0.333333333333333, 0.1125
+1, 0.470142064105115, 0.470142064105115, 0.0661970763942530 % full symmetric 3 points
+1, 0.101286507323456, 0.101286507323456, 0.0629695902724135 % full symmetric 3 points
+NBF = 3
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
+IM_GAUSS1D(5)
diff --git a/cubature/TRIANGLE_6.IM b/cubature/TRIANGLE_6.IM
new file mode 100755
index 0000000..be3f3aa
--- /dev/null
+++ b/cubature/TRIANGLE_6.IM
@@ -0,0 +1,13 @@
+% Integration formulae of order 6 on a triangle with 12 points
+% only double precision
+NAME = IM_TRIANGLE(6)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 3
+1, 0.0630890144915022283403316028708191, 0.0630890144915022283403316028708191, 0.0254224531851034084604684045534344 % full symmetric 3 points
+1, 0.249286745170910421291638553107019, 0.249286745170910421291638553107019, 0.0583931378631896830126448056927897 % full symmetric 3 points
+1, 0.310352451033784405416607733956552, 0.0531450498448169473532496716313981, 0.0414255378091867875967767282102212 % full symmetric 6 points
+NBF = 3
+IM_GAUSS1D(6)
+IM_GAUSS1D(6)
+IM_GAUSS1D(6)
diff --git a/cubature/TRIANGLE_7.IM b/cubature/TRIANGLE_7.IM
new file mode 100755
index 0000000..9e44364
--- /dev/null
+++ b/cubature/TRIANGLE_7.IM
@@ -0,0 +1,14 @@
+% Integration formulae of order 7 on a triangle with 13 points
+% only double precision
+NAME = IM_TRIANGLE(7)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 4
+1, 0.0651301029022, 0.0651301029022, 0.02667361780440 % full symmetric 3 points
+1, 0.3128654960049, 0.0486903154253, 0.03855688044515 % full symmetric 6 points
+1, 0.2603459660790, 0.2603459660790, 0.08780762871660 % full symmetric 3 points
+0, 0.3333333333333, 0.3333333333333, -0.07478502223385
+NBF = 3
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
+IM_GAUSS1D(7)
diff --git a/cubature/TRIANGLE_8.IM b/cubature/TRIANGLE_8.IM
new file mode 100755
index 0000000..9f4754b
--- /dev/null
+++ b/cubature/TRIANGLE_8.IM
@@ -0,0 +1,16 @@
+% Integration formulae of order 8 on a triangle with 16 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(8)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 5
+0, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0721578038388935841255455552445323
+1, 0.170569307751760206622293501491464, 0.170569307751760206622293501491464, 0.0516086852673591251408957751460645
+1, 0.0505472283170309754584235505965989, 0.0505472283170309754584235505965989, 0.0162292488115990401554629641708902
+1, 0.459292588292723156028815514494169, 0.459292588292723156028815514494169, 0.0475458171336423123969480521942921
+1, 0.728492392955404281241000379176061, 0.263112829634638113421785786284643, 0.0136151570872174971324223450369544
+NBF = 3
+IM_GAUSS1D(8)
+IM_GAUSS1D(8)
+IM_GAUSS1D(8)
diff --git a/cubature/TRIANGLE_9.IM b/cubature/TRIANGLE_9.IM
new file mode 100755
index 0000000..13490a7
--- /dev/null
+++ b/cubature/TRIANGLE_9.IM
@@ -0,0 +1,17 @@
+% Integration formulae of order 9 on a triangle with 19 points
+% taken from the Encyclopaedia of Cubature Formulas
+% http://www.cs.kuleuven.ac.be/~nines/research/ecf/ecf.html
+NAME = IM_TRIANGLE(9)
+N = 2
+GEOTRANS = GT_PK(2,1)
+NBPT = 6
+1, 0.333333333333333333333333333333333, 0.333333333333333333333333333333333, 0.0485678981413994169096209912536443
+1, 0.489682519198737627783706924836192, 0.489682519198737627783706924836192, 0.0156673501135695352684274156436046
+1, 0.437089591492936637269930364435354, 0.437089591492936637269930364435354, 0.0389137705023871396583696781497019
+1, 0.188203535619032730240961280467335, 0.188203535619032730240961280467335, 0.0398238694636051265164458871320226
+1, 0.0447295133944527098651065899662763, 0.0447295133944527098651065899662763, 0.0127888378293490156308393992794999
+1, 0.741198598784498020690079873523423, 0.0368384120547362836348175987833851, 0.0216417696886446886446886446886446
+NBF = 3
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
+IM_GAUSS1D(9)
diff --git a/cubature/getfem_im_list.h b/cubature/getfem_im_list.h
index 6de018a..3c96002 100644
--- a/cubature/getfem_im_list.h
+++ b/cubature/getfem_im_list.h
@@ -1,27 +1,34 @@
// This file is generated by make_getfem_list
-/* *********************************************************************** */
-/* */
-/* Copyright (C) 2000-2003 Yves Renard. */
-/* */
-/* This file is a part of GETFEM++ */
-/* */
-/* This program is free software; you can redistribute it and/or modify */
-/* it under the terms of the GNU Lesser General Public License as */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details. */
-/* */
-/* You should have received a copy of the GNU Lesser 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. */
-/* */
-/* *********************************************************************** */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 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 Lesser General Public
+ License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
/**\file getfem_im_list.h
\brief This file is generated by make_getfem_list*/
diff --git a/cubature/make_getfem_im_list b/cubature/make_getfem_im_list
index 2438b99..2819578 100755
--- a/cubature/make_getfem_im_list
+++ b/cubature/make_getfem_im_list
@@ -104,32 +104,43 @@ while ($lss) {
$nb_int += $nbpt;
}
+$year = `date +%Y`;
+chomp $year;
+
print TMPF2 "// This file is generated by make_getfem_list\n";
print TMPF2 "
-/* *********************************************************************** */
-/* */
-/* Copyright (C) 2000-2003 Yves Renard. */
-/* */
-/* This file is a part of GETFEM++ */
-/* */
-/* This program is free software; you can redistribute it and/or modify */
-/* it under the terms of the GNU Lesser General Public License as */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details. */
-/* */
-/* You should have received a copy of the GNU Lesser 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. */
-/* */
-/* *********************************************************************** */
+/*===========================================================================
+
+ Copyright (C) 2002-$year Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
/**\\file getfem_im_list.h
- \\brief This file is generated by make_getfem_list*/
+ \\brief This file is generated by cubature/make_getfem_list */
\n\n
namespace getfem {\n\n
struct im_desc {
diff --git a/depcomp b/depcomp
index df8eea7..bd0ac08 100755
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,10 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-12-04.11; # UTC
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011 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
@@ -44,7 +44,7 @@ Environment variables:
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
- tmpdepfile Temporary file to use when outputing dependencies.
+ tmpdepfile Temporary file to use when outputting dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake at gnu.org>.
@@ -90,10 +90,18 @@ 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"
+ 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
+
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
@@ -158,10 +166,12 @@ gcc)
' < "$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.
+## 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 '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
@@ -405,6 +415,52 @@ tru64)
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/\(.*\)/ \1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/ /
+ 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.
@@ -503,7 +559,9 @@ makedepend)
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
- cat < "$tmpdepfile" > "$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 ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 4082ab4..a4f89b2 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -518,10 +521,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/doc/sphinx/Makefile.am b/doc/sphinx/Makefile.am
index c27bd06..455cfd8 100644
--- a/doc/sphinx/Makefile.am
+++ b/doc/sphinx/Makefile.am
@@ -113,15 +113,15 @@ clean:
-cd $(srcdir)/source/matlab/images/; make clean
-cd $(srcdir)/source/python/images/; make clean
-cd $(srcdir)/source/scilab/images/; make clean
- -rm $(srcdir)/source/matlab/cmdref.rst
- -rm $(srcdir)/source/scilab/cmdref.rst
- -rm $(srcdir)/source/python/cmdref.rst
+ -rm -f $(srcdir)/source/matlab/cmdref.rst
+ -rm -f $(srcdir)/source/scilab/cmdref.rst
+ -rm -f $(srcdir)/source/python/cmdref.rst
$(srcdir)/source/matlab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src matlab-doc > $(srcdir)/source/matlab/cmdref.rst || (rm -f $(srcdir)/source/matlab/cmdref.rst; /bin/false )
$(srcdir)/source/scilab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
- $(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
+ $(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc-rst > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
$(srcdir)/source/python/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src python-doc > $(srcdir)/source/python/cmdref.rst || (rm -f $(srcdir)/source/python/cmdref.rst; /bin/false )
@@ -130,20 +130,28 @@ upload:
make html
-rm -fr homepage *.tar.gz
-mv build/html homepage
- $(top_srcdir)/bin/upload_html --delete homepage
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_html --delete homepage)
-rm -fr getfem-$(DISTVERSION)-docs-html
-mv homepage getfem-$(DISTVERSION)-docs-html
tar -cf getfem-$(DISTVERSION)-docs-html.tar getfem-$(DISTVERSION)-docs-html
gzip -9 getfem-$(DISTVERSION)-docs-html.tar
- $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz)
rm -fr getfem-$(DISTVERSION)-docs-html *.tar.gz
make pdf
-mv build/latex/*.pdf .
- $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf
- $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf
- $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf)
rm -fr *.pdf
rm -fr build
+
+
+EXTRA_DIST = \
+ source/userdoc/images/Makefile \
+ source/project/images/Makefile \
+ source/matlab/images/Makefile \
+ source/python/images/Makefile \
+ source/scilab/images/Makefile
\ No newline at end of file
diff --git a/doc/sphinx/Makefile.in b/doc/sphinx/Makefile.in
index c6165dc..a31c903 100644
--- a/doc/sphinx/Makefile.in
+++ b/doc/sphinx/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -78,6 +78,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -96,6 +97,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -112,6 +114,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -178,6 +181,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -213,7 +217,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -246,6 +249,13 @@ PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees $(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) $(SOURCES) build/$(BUILDER)
+EXTRA_DIST = \
+ source/userdoc/images/Makefile \
+ source/project/images/Makefile \
+ source/matlab/images/Makefile \
+ source/python/images/Makefile \
+ source/scilab/images/Makefile
+
all: all-am
.SUFFIXES:
@@ -336,10 +346,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
@@ -520,15 +535,15 @@ clean:
-cd $(srcdir)/source/matlab/images/; make clean
-cd $(srcdir)/source/python/images/; make clean
-cd $(srcdir)/source/scilab/images/; make clean
- -rm $(srcdir)/source/matlab/cmdref.rst
- -rm $(srcdir)/source/scilab/cmdref.rst
- -rm $(srcdir)/source/python/cmdref.rst
+ -rm -f $(srcdir)/source/matlab/cmdref.rst
+ -rm -f $(srcdir)/source/scilab/cmdref.rst
+ -rm -f $(srcdir)/source/python/cmdref.rst
$(srcdir)/source/matlab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src matlab-doc > $(srcdir)/source/matlab/cmdref.rst || (rm -f $(srcdir)/source/matlab/cmdref.rst; /bin/false )
$(srcdir)/source/scilab/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
- $(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
+ $(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src scilab-doc-rst > $(srcdir)/source/scilab/cmdref.rst || (rm -f $(srcdir)/source/scilab/cmdref.rst; /bin/false )
$(srcdir)/source/python/cmdref.rst : $(top_srcdir)/interface/src/*.cc $(top_srcdir)/bin/extract_doc
$(top_srcdir)/bin/extract_doc $(top_srcdir)/interface/src python-doc > $(srcdir)/source/python/cmdref.rst || (rm -f $(srcdir)/source/python/cmdref.rst; /bin/false )
@@ -537,21 +552,21 @@ upload:
make html
-rm -fr homepage *.tar.gz
-mv build/html homepage
- $(top_srcdir)/bin/upload_html --delete homepage
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_html --delete homepage)
-rm -fr getfem-$(DISTVERSION)-docs-html
-mv homepage getfem-$(DISTVERSION)-docs-html
tar -cf getfem-$(DISTVERSION)-docs-html.tar getfem-$(DISTVERSION)-docs-html
gzip -9 getfem-$(DISTVERSION)-docs-html.tar
- $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem-$(DISTVERSION)-docs-html.tar.gz)
rm -fr getfem-$(DISTVERSION)-docs-html *.tar.gz
make pdf
-mv build/latex/*.pdf .
- $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf
- $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf
- $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf
- $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete scilab_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete python_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete matlab_interface.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_userdoc.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete getfem_project.pdf)
+ (export srcdir=$(srcdir) && $(top_srcdir)/bin/upload_documentation --delete gmm_userdoc.pdf)
rm -fr *.pdf
rm -fr build
diff --git a/doc/sphinx/source/matlab/images/Makefile b/doc/sphinx/source/matlab/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/matlab/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+ ../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+ convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+ -rm -rf *.aux
+ -rm -rf *.dvi
+ -rm -rf *.log
+ -rm -rf *.bak
+ -rm -rf $(EPSFIGS)
+ -rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/project/images/Makefile b/doc/sphinx/source/project/images/Makefile
new file mode 100644
index 0000000..3dc6d91
--- /dev/null
+++ b/doc/sphinx/source/project/images/Makefile
@@ -0,0 +1,24 @@
+FIGS=diagram.fig \
+ getfemelemelem.fig \
+ getfemtransgeo.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+ ../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+ convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+ -rm -rf *.aux
+ -rm -rf *.dvi
+ -rm -rf *.log
+ -rm -rf *.bak
+ -rm -rf $(EPSFIGS)
+ -rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/python/images/Makefile b/doc/sphinx/source/python/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/python/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+ ../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+ convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+ -rm -rf *.aux
+ -rm -rf *.dvi
+ -rm -rf *.log
+ -rm -rf *.bak
+ -rm -rf $(EPSFIGS)
+ -rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/scilab/images/Makefile b/doc/sphinx/source/scilab/images/Makefile
new file mode 100644
index 0000000..f2de9aa
--- /dev/null
+++ b/doc/sphinx/source/scilab/images/Makefile
@@ -0,0 +1,22 @@
+FIGS=hierarchy.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+ ../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+ convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+ -rm -rf *.aux
+ -rm -rf *.dvi
+ -rm -rf *.log
+ -rm -rf *.bak
+ -rm -rf $(EPSFIGS)
+ -rm -rf $(PNGFIGS)
diff --git a/doc/sphinx/source/userdoc/images/Makefile b/doc/sphinx/source/userdoc/images/Makefile
new file mode 100644
index 0000000..ed32b36
--- /dev/null
+++ b/doc/sphinx/source/userdoc/images/Makefile
@@ -0,0 +1,96 @@
+FIGS=getfemlistargyris.fig \
+ getfemlistcubeQ1.fig \
+ getfemlistcubeQ3.fig \
+ getfemlistHCT.fig \
+ getfemlistincomplete.fig \
+ getfemlistintmethodquad2.fig \
+ getfemlistintmethodquad3.fig \
+ getfemlistintmethodquad5.fig \
+ getfemlistintmethodtetrahedron1.fig \
+ getfemlistintmethodtetrahedron2.fig \
+ getfemlistintmethodtetrahedron3.fig \
+ getfemlistintmethodtetrahedron5.fig \
+ getfemlistintmethodtriangle1.fig \
+ getfemlistintmethodtriangle2comp.fig \
+ getfemlistintmethodtriangle2.fig \
+ getfemlistintmethodtriangle3.fig \
+ getfemlistintmethodtriangle4.fig \
+ getfemlistintmethodtriangle5.fig \
+ getfemlistintmethodtriangle6.fig \
+ getfemlistintmethodtriangle7.fig \
+ getfemlistmorley.fig \
+ getfemlistnedelec.fig \
+ getfemlistprismP1.fig \
+ getfemlistprismP2P1.fig \
+ getfemlistprismP3.fig \
+ getfemlistquadc1composite.fig \
+ getfemlistquadQ1.fig \
+ getfemlistquadQ3.fig \
+ getfemlistreducedHCT.fig \
+ getfemlistreducedquadc1composite.fig \
+ getfemlistRT0.fig \
+ getfemlistsegmentbubble.fig \
+ getfemlistsegmenthermite.fig \
+ getfemlistsegmenthier.fig \
+ getfemlistsegmentPk.fig \
+ getfemlistsymbols00.fig \
+ getfemlistsymbols01.fig \
+ getfemlistsymbols02.fig \
+ getfemlistsymbols03.fig \
+ getfemlistsymbols04.fig \
+ getfemlistsymbols05.fig \
+ getfemlistsymbols06.fig \
+ getfemlistsymbols07.fig \
+ getfemlistsymbols08.fig \
+ getfemlistsymbols09.fig \
+ getfemlistsymbols10.fig \
+ getfemlistsymbols11.fig \
+ getfemlistsymbols12.fig \
+ getfemlistsymbols13.fig \
+ getfemlisttetrahedronhermite.fig \
+ getfemlisttetrahedronP1bubbleface.fig \
+ getfemlisttetrahedronP1bubble.fig \
+ getfemlisttetrahedronP1.fig \
+ getfemlisttetrahedronP2bubble.fig \
+ getfemlisttetrahedronP2.fig \
+ getfemlisttetrahedronP3bubble.fig \
+ getfemlisttetrahedronP4.fig \
+ getfemlisttrianglehermite.fig \
+ getfemlisttriangleP1bubbleface.fig \
+ getfemlisttriangleP1bubble.fig \
+ getfemlisttriangleP1comp.fig \
+ getfemlisttriangleP1comphier.fig \
+ getfemlisttriangleP1.fig \
+ getfemlisttriangleP1linbubble.fig \
+ getfemlisttriangleP1nonconforming.fig \
+ getfemlisttriangleP1withP2face.fig \
+ getfemlisttriangleP2bubble.fig \
+ getfemlisttriangleP2.fig \
+ getfemlisttriangleP3.fig \
+ getfemlisttriangleP6.fig \
+ getfemuserelemf.fig \
+ getfemuserelem.fig \
+ getfemuserlinearsys.fig \
+ getfemuserlinsysDir.fig \
+ getfemuserrefine.fig
+
+EPSFIGS=$(FIGS:.fig=.eps)
+PNGFIGS=$(FIGS:.fig=.png)
+
+.SUFFIXES: .fig .eps .png
+
+.fig.eps:
+ ../../../../../bin/fig2eps $(@:.eps=.fig)
+
+.eps.png:
+ convert $(@:.png=.eps) $@
+
+png: $(PNGFIGS)
+
+clean:
+ -rm -rf *.aux
+ -rm -rf *.dvi
+ -rm -rf *.log
+ -rm -rf *.bak
+ -rm -rf $(EPSFIGS)
+ -rm -rf $(PNGFIGS)
diff --git a/install-sh b/install-sh
index 6781b98..a9244eb 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2009-04-28.21; # UTC
+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
@@ -156,6 +156,10 @@ while test $# -ne 0; do
-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;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
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
@@ -200,7 +208,11 @@ if test $# -eq 0; then
fi
if test -z "$dir_arg"; then
- trap '(exit $?); exit' 1 2 13 15
+ 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.
@@ -228,9 +240,9 @@ fi
for src
do
- # Protect names starting with `-'.
+ # Protect names problematic for `test' and other utilities.
case $src in
- -*) src=./$src;;
+ -* | [=\(\)!]) src=./$src;;
esac
if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
echo "$0: no destination specified." >&2
exit 1
fi
-
dst=$dst_arg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst;;
- esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
@@ -385,7 +392,7 @@ do
case $dstdir in
/*) prefix='/';;
- -*) prefix='./';;
+ [-=\(\)!]*) prefix='./';;
*) prefix='';;
esac
@@ -403,7 +410,7 @@ do
for d
do
- test -z "$d" && continue
+ test X"$d" = X && continue
prefix=$prefix$d
if test -d "$prefix"; then
diff --git a/interface/Makefile.in b/interface/Makefile.in
index f06dba1..1073078 100644
--- a/interface/Makefile.in
+++ b/interface/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -119,6 +119,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -137,6 +138,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -153,6 +155,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -217,6 +220,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -252,7 +256,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -526,10 +529,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/src/Makefile.am b/interface/src/Makefile.am
index fad666d..6ea22fb 100644
--- a/interface/src/Makefile.am
+++ b/interface/src/Makefile.am
@@ -21,6 +21,8 @@ PSEUDO_MFUNCTIONS = \
gf_spmat_get.cc \
gf_linsolve.cc \
gf_util.cc \
+ gf_cont_struct.cc \
+ gf_cont_struct_get.cc \
gf_cvstruct_get.cc \
gf_geotrans.cc \
gf_geotrans_get.cc \
@@ -41,6 +43,8 @@ PSEUDO_MFUNCTIONS = \
gf_model_get.cc \
gf_model_set.cc \
gf_eltm.cc \
+ gf_mesher_object.cc \
+ gf_mesher_object_get.cc \
gf_mesh.cc \
gf_mesh_set.cc \
gf_mesh_get.cc \
@@ -91,8 +95,10 @@ libgetfemint_la_SOURCES = \
getfemint_pgt.cc \
getfemint_convex_structure.cc \
gfi_array.h \
+ getfemint_cont_struct.h \
getfemint_convex_structure.h \
getfemint_mesh.h \
+ getfemint_mesher_object.h \
getfemint_misc.h \
getfemint_std.h \
gfi_rpc.h \
diff --git a/interface/src/Makefile.in b/interface/src/Makefile.in
index 276749a..66f5ea4 100644
--- a/interface/src/Makefile.in
+++ b/interface/src/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -55,16 +55,18 @@ CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libgetfemint_la_LIBADD =
am__objects_1 = gf_spmat.lo gf_spmat_set.lo gf_spmat_get.lo \
- gf_linsolve.lo gf_util.lo gf_cvstruct_get.lo gf_geotrans.lo \
+ gf_linsolve.lo gf_util.lo gf_cont_struct.lo \
+ gf_cont_struct_get.lo gf_cvstruct_get.lo gf_geotrans.lo \
gf_geotrans_get.lo gf_compute.lo gf_mesh_fem.lo \
gf_mesh_fem_set.lo gf_mesh_fem_get.lo gf_mesh_im.lo \
gf_mesh_im_set.lo gf_mesh_im_get.lo gf_mdbrick.lo \
gf_mdbrick_get.lo gf_mdbrick_set.lo gf_mdstate.lo \
gf_mdstate_get.lo gf_mdstate_set.lo gf_model.lo \
- gf_model_get.lo gf_model_set.lo gf_eltm.lo gf_mesh.lo \
- gf_mesh_set.lo gf_mesh_get.lo gf_slice.lo gf_slice_get.lo \
- gf_slice_set.lo gf_levelset.lo gf_levelset_get.lo \
- gf_levelset_set.lo gf_mesh_levelset.lo gf_mesh_levelset_get.lo \
+ gf_model_get.lo gf_model_set.lo gf_eltm.lo gf_mesher_object.lo \
+ gf_mesher_object_get.lo gf_mesh.lo gf_mesh_set.lo \
+ gf_mesh_get.lo gf_slice.lo gf_slice_get.lo gf_slice_set.lo \
+ gf_levelset.lo gf_levelset_get.lo gf_levelset_set.lo \
+ gf_mesh_levelset.lo gf_mesh_levelset_get.lo \
gf_mesh_levelset_set.lo gf_precond.lo gf_precond_get.lo \
gf_asm.lo gf_fem.lo gf_fem_get.lo gf_integ.lo gf_integ_get.lo \
gf_global_function.lo gf_global_function_get.lo \
@@ -174,6 +176,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -192,6 +195,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -208,6 +212,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -272,6 +277,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -307,7 +313,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -337,6 +342,8 @@ PSEUDO_MFUNCTIONS = \
gf_spmat_get.cc \
gf_linsolve.cc \
gf_util.cc \
+ gf_cont_struct.cc \
+ gf_cont_struct_get.cc \
gf_cvstruct_get.cc \
gf_geotrans.cc \
gf_geotrans_get.cc \
@@ -357,6 +364,8 @@ PSEUDO_MFUNCTIONS = \
gf_model_get.cc \
gf_model_set.cc \
gf_eltm.cc \
+ gf_mesher_object.cc \
+ gf_mesher_object_get.cc \
gf_mesh.cc \
gf_mesh_set.cc \
gf_mesh_get.cc \
@@ -406,8 +415,10 @@ libgetfemint_la_SOURCES = \
getfemint_pgt.cc \
getfemint_convex_structure.cc \
gfi_array.h \
+ getfemint_cont_struct.h \
getfemint_convex_structure.h \
getfemint_mesh.h \
+ getfemint_mesher_object.h \
getfemint_misc.h \
getfemint_std.h \
gfi_rpc.h \
@@ -496,7 +507,7 @@ clean-noinstLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgetfemint.la: $(libgetfemint_la_OBJECTS) $(libgetfemint_la_DEPENDENCIES)
+libgetfemint.la: $(libgetfemint_la_OBJECTS) $(libgetfemint_la_DEPENDENCIES) $(EXTRA_libgetfemint_la_DEPENDENCIES)
$(CXXLINK) $(libgetfemint_la_OBJECTS) $(libgetfemint_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@@ -541,7 +552,7 @@ clean-binPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-getfem_server$(EXEEXT): $(getfem_server_OBJECTS) $(getfem_server_DEPENDENCIES)
+getfem_server$(EXEEXT): $(getfem_server_OBJECTS) $(getfem_server_DEPENDENCIES) $(EXTRA_getfem_server_DEPENDENCIES)
@rm -f getfem_server$(EXEEXT)
$(getfem_server_LINK) $(getfem_server_OBJECTS) $(getfem_server_LDADD) $(LIBS)
@@ -572,6 +583,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfemint_workspace.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_asm.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_compute.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cont_struct.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cont_struct_get.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_cvstruct_get.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_delete.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_eltm.Plo at am__quote@
@@ -605,6 +618,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_levelset_get.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_levelset_set.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesh_set.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesher_object.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_mesher_object_get.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model_get.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gf_model_set.Plo at am__quote@
@@ -883,10 +898,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/src/getfem_interface.cc b/interface/src/getfem_interface.cc
index 517b95f..46049a9 100644
--- a/interface/src/getfem_interface.cc
+++ b/interface/src/getfem_interface.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfem_interface.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: getfem_interface.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfem_interface.h>
#include <getfemint.h>
@@ -36,8 +36,12 @@ void gf_global_function(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_global_function_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_fem(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_fem_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_cont_struct(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_cont_struct_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_cvstruct_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_mesh(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_mesher_object(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
+void gf_mesher_object_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_mesh_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_mesh_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
void gf_mesh_fem(getfemint::mexargs_in& in, getfemint::mexargs_out& out);
@@ -134,9 +138,13 @@ char* getfem_interface_main(int config_id, const char *function,
subc_tab["integ_get"] = gf_integ_get;
subc_tab["global_function"] = gf_global_function;
subc_tab["global_function_get"] = gf_global_function_get;
+ subc_tab["cont_struct"] = gf_cont_struct;
+ subc_tab["cont_struct_get"] = gf_cont_struct_get;
subc_tab["fem"] = gf_fem;
subc_tab["fem_get"] = gf_fem_get;
subc_tab["cvstruct_get"] = gf_cvstruct_get;
+ subc_tab["mesher_object"] = gf_mesher_object;
+ subc_tab["mesher_object_get"] = gf_mesher_object_get;
subc_tab["mesh"] = gf_mesh;
subc_tab["mesh_get"] = gf_mesh_get;
subc_tab["mesh_set"] = gf_mesh_set;
diff --git a/interface/src/getfem_interface.h b/interface/src/getfem_interface.h
index 896be83..3eb36c5 100644
--- a/interface/src/getfem_interface.h
+++ b/interface/src/getfem_interface.h
@@ -1,22 +1,23 @@
/* -*- c++ -*- (enables emacs c++ mode) */
/*===========================================================================
-
- Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
+
Getfem++ is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
- License for more details.
+ License and GCC Runtime Library Exception for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
+
As a special exception, you may use this file as it is a part of a free
software library without restriction. Specifically, if other files
instantiate templates or use macros or inline functions from this file,
@@ -25,8 +26,8 @@
to be covered by the GNU Lesser General Public License. This exception
does not however invalidate any other reasons why the executable file
might be covered by the GNU Lesser General Public License.
-
- ===========================================================================*/
+
+===========================================================================*/
#ifndef GETFEM_INTERFACE_H
#define GETFEM_INTERFACE_H
diff --git a/interface/src/getfemint.cc b/interface/src/getfemint.cc
index f083378..1904a7a 100644
--- a/interface/src/getfemint.cc
+++ b/interface/src/getfemint.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <map>
#include <getfemint.h>
@@ -42,6 +42,11 @@
#include <getfemint_levelset.h>
#include <getfemint_mesh_levelset.h>
#include <getfemint_global_function.h>
+#include <getfemint_mesher_object.h>
+#include <getfemint_cont_struct.h>
+#include <getfem/getfem_mat_elem_type.h>
+#include <getfem/getfem_mesh_fem_global_function.h>
+#include <getfem/getfem_mesher.h>
#include <getfemint_misc.h>
//#ifdef MAINTAINER_MODE
@@ -63,6 +68,7 @@ namespace getfemint {
*/
const char *name_of_getfemint_class_id(unsigned cid) {
static const char *cname[GETFEMINT_NB_CLASS] = {
+ "gfContStruct",
"gfCvStruct",
"gfEltm",
"gfFem",
@@ -76,6 +82,7 @@ namespace getfemint {
"gfMeshFem",
"gfMeshIm",
"gfMeshLevelSet",
+ "gfMesherObject",
"gfModel",
"gfPrecond",
"gfSlice",
@@ -396,6 +403,24 @@ namespace getfemint {
}
bool
+ mexarg_in::is_mesher_object() {
+ id_type id, cid;
+ if (is_object_id(&id, &cid) && cid == MESHER_OBJECT_CLASS_ID) {
+ getfem_object *o=workspace().object(id, name_of_getfemint_class_id(cid));
+ return (object_is_mesher_object(o));
+ } else return false;
+ }
+
+ bool
+ mexarg_in::is_cont_struct() {
+ id_type id, cid;
+ if (is_object_id(&id, &cid) && cid == CONT_STRUCT_CLASS_ID) {
+ getfem_object *o=workspace().object(id, name_of_getfemint_class_id(cid));
+ return (object_is_cont_struct(o));
+ } else return false;
+ }
+
+ bool
mexarg_in::is_gsparse() {
id_type id, cid;
if (is_object_id(&id, &cid) && cid == GSPARSE_CLASS_ID) {
@@ -650,12 +675,21 @@ namespace getfemint {
error_if_nonwritable(o,writeable);
return object_to_mesh_levelset(o);
}
-
- /* getfem::mesh_level_set *
+
+ getfem::mesh_level_set *
mexarg_in::to_mesh_levelset() {
return &to_getfemint_mesh_levelset(true)->mesh_levelset();
}
- */
+ getfem::level_set *
+ mexarg_in::to_levelset() {
+ return &to_getfemint_levelset(true)->levelset();
+ }
+
+ // getfem::level_set *
+// mexarg_in::to_const_levelset() {
+// return &to_getfemint_levelset(false)->levelset();
+// }
+
/*
check if the argument is a valid handle to a global_function,
@@ -673,6 +707,7 @@ namespace getfemint {
error_if_nonwritable(o, writeable);
return object_to_global_function(o);
}
+
getfem::abstract_xy_function *
mexarg_in::to_global_function() {
return &to_getfemint_global_function(true)->global_function();
@@ -683,6 +718,61 @@ namespace getfemint {
return &to_getfemint_global_function(false)->global_function();
}
+ /*
+ check if the argument is a valid handle to a mesher_object,
+ and returns it
+ */
+ getfemint_mesher_object *
+ mexarg_in::to_getfemint_mesher_object(bool writeable) {
+ id_type id, cid;
+ to_object_id(&id,&cid);
+ if (cid != MESHER_OBJECT_CLASS_ID) {
+ THROW_BADARG("argument " << argnum << " should be a mesher_object " <<
+ "descriptor, its class is " << name_of_getfemint_class_id(cid));
+ }
+ getfem_object *o = workspace().object(id,name_of_getfemint_class_id(cid));
+ error_if_nonwritable(o, writeable);
+ return object_to_mesher_object(o);
+ }
+
+ getfem::mesher_signed_distance *
+ mexarg_in::to_mesher_object() {
+ return &to_getfemint_mesher_object(true)->mesher_object();
+ }
+
+ const getfem::mesher_signed_distance *
+ mexarg_in::to_const_mesher_object() {
+ return &to_getfemint_mesher_object(false)->mesher_object();
+ }
+
+ /*
+ check if the argument is a valid handle to a cont_struct,
+ and return it
+ */
+ getfemint_cont_struct *
+ mexarg_in::to_getfemint_cont_struct(bool writeable) {
+ id_type id, cid;
+ to_object_id(&id,&cid);
+ if (cid != CONT_STRUCT_CLASS_ID) {
+ THROW_BADARG("argument " << argnum << " should be a cont_struct " <<
+ "descriptor, its class is " << name_of_getfemint_class_id(cid));
+ }
+ getfem_object *o = workspace().object(id,name_of_getfemint_class_id(cid));
+ error_if_nonwritable(o, writeable);
+ return object_to_cont_struct(o);
+ }
+
+ const getfem::cont_struct_getfem_model *
+ mexarg_in::to_const_cont_struct() {
+ return &to_getfemint_cont_struct(false)->cont_struct();
+ }
+
+ getfem::cont_struct_getfem_model *
+ mexarg_in::to_cont_struct() {
+ return &to_getfemint_cont_struct(true)->cont_struct();
+ }
+
+
getfemint_precond *
mexarg_in::to_precond() {
id_type id, cid;
diff --git a/interface/src/getfemint.h b/interface/src/getfemint.h
index 6f5b75e..1c1b350 100644
--- a/interface/src/getfemint.h
+++ b/interface/src/getfemint.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint.h
\brief main getfem-interface header.
@@ -35,29 +36,23 @@
#ifndef GETFEMINT_H__
#define GETFEMINT_H__
-/***************************************
- * Interface a new class:
- * - add it to enum getfemint_class_id in gfi_array.h
- * - add it to name_of_getfemint_class_id etc in getfemint.cc
- * - add it in the list at the bottom of getfem.base.py
- */
-
-
#include <getfemint_std.h>
#include <set>
#include <getfem/getfem_mesh_fem.h>
#include <gfi_array.h>
#include <getfem/dal_shared_ptr.h>
-#include <getfem/getfem_mat_elem_type.h>
-#include <getfem/getfem_mesh_fem_global_function.h>
namespace getfem {
class stored_mesh_slice;
class mesh;
class mesh_fem;
class mat_elem_type;
+ typedef boost::intrusive_ptr<const mat_elem_type> pmat_elem_type;
class level_set;
class mesh_level_set;
+ class abstract_xy_function;
+ class mesher_signed_distance;
+ class cont_struct_getfem_model;
}
namespace getfemint
@@ -104,6 +99,8 @@ namespace getfemint
class getfemint_levelset;
class getfemint_mesh_levelset;
class getfemint_global_function;
+ class getfemint_mesher_object;
+ class getfemint_cont_struct;
class gsparse;
class sub_index : public gmm::unsorted_sub_index{
@@ -404,6 +401,8 @@ namespace getfemint {
bool is_levelset();
bool is_mesh_levelset();
bool is_global_function();
+ bool is_mesher_object();
+ bool is_cont_struct();
bool is_sparse() { return (gfi_array_get_class(arg) == GFI_SPARSE || is_gsparse()); };
bool is_gsparse();
bool is_complex(); /* true for complex garrays AND complex sparse matrices (native or gsparse) */
@@ -433,12 +432,19 @@ namespace getfemint {
getfem::mesh * to_mesh();
getfemint_mesh_slice * to_getfemint_mesh_slice(bool writeable=false);
getfemint_levelset * to_getfemint_levelset(bool writeable=false);
- //getfem::level_set * to_levelset();
+ // const getfem::level_set * to_const_levelset();
+ getfem::level_set * to_levelset();
getfemint_mesh_levelset * to_getfemint_mesh_levelset(bool writeable=false);
- //getfem::mesh_level_set * to_mesh_levelset();
+ getfem::mesh_level_set * to_mesh_levelset();
const getfem::abstract_xy_function * to_const_global_function();
+ const getfem::mesher_signed_distance * to_const_mesher_object();
getfem::abstract_xy_function * to_global_function();
+ getfem::mesher_signed_distance * to_mesher_object();
+ const getfem::cont_struct_getfem_model * to_const_cont_struct();
+ getfem::cont_struct_getfem_model * to_cont_struct();
getfemint_global_function * to_getfemint_global_function(bool writeable=false);
+ getfemint_mesher_object * to_getfemint_mesher_object(bool writeable=false);
+ getfemint_cont_struct * to_getfemint_cont_struct(bool writable=false);
getfem::pintegration_method to_integration_method();
getfemint_pfem* to_getfemint_pfem();
getfem::pfem to_fem();
diff --git a/interface/src/getfemint_cont_struct.h b/interface/src/getfemint_cont_struct.h
new file mode 100644
index 0000000..07a12a1
--- /dev/null
+++ b/interface/src/getfemint_cont_struct.h
@@ -0,0 +1,86 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/**\file getfemint_cont_struct.h
+ \brief interface for the continuation in Getfem models
+*/
+
+#include <getfemint_std.h>
+#include <getfemint_object.h>
+#include <getfem/getfem_continuation.h>
+
+namespace getfemint {
+
+ class getfemint_cont_struct : public getfem_object {
+ private:
+ getfem::cont_struct_getfem_model *s;
+ getfemint_cont_struct(getfem::cont_struct_getfem_model *s_) {
+ assert(workspace == 0);
+ s = s_;
+ ikey = getfem_object::internal_key_type(s);
+ }
+
+ public:
+ ~getfemint_cont_struct() {}
+ id_type class_id() const { return CONT_STRUCT_CLASS_ID; }
+ size_type memsize() const {
+ size_type szd = sizeof(double);
+ return 2* gmm::vect_size(s->b_x()) * szd
+ + gmm::vect_size(s->get_tau_hist()) * szd
+ + sizeof(getfem::cont_struct_getfem_model);
+ }
+
+ static getfemint_cont_struct*
+ get_from(getfem::cont_struct_getfem_model *ps, int flags = 0) {
+ getfem_object *o =
+ getfemint::workspace().object(getfem_object::internal_key_type(ps));
+ getfemint_cont_struct *gs = NULL;
+ if (!o) {
+ gs = new getfemint_cont_struct(ps);
+ gs->set_flags(flags);
+ getfemint::workspace().push_object(gs);
+ } else gs = dynamic_cast<getfemint_cont_struct*>(o);
+ assert(gs);
+ return gs;
+ }
+
+ getfem::cont_struct_getfem_model &cont_struct() { return *s; }
+ };
+
+ inline bool object_is_cont_struct(getfem_object *o) {
+ return o->class_id() == CONT_STRUCT_CLASS_ID;
+ }
+
+ inline getfemint_cont_struct* object_to_cont_struct(getfem_object *o) {
+ if (object_is_cont_struct(o)) return (getfemint_cont_struct*)o;
+ else THROW_INTERNAL_ERROR;
+ }
+}
diff --git a/interface/src/getfemint_convex_structure.cc b/interface/src/getfemint_convex_structure.cc
index 2f2f3a7..9daa196 100644
--- a/interface/src/getfemint_convex_structure.cc
+++ b/interface/src/getfemint_convex_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_convex_structure.h>
diff --git a/interface/src/getfemint_convex_structure.h b/interface/src/getfemint_convex_structure.h
index 31b24a7..270dda9 100644
--- a/interface/src/getfemint_convex_structure.h
+++ b/interface/src/getfemint_convex_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier. Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_CONVEX_STRUCTURE_H__
diff --git a/interface/src/getfemint_global_function.cc b/interface/src/getfemint_global_function.cc
index 6b9aba7..9e9b215 100644
--- a/interface/src/getfemint_global_function.cc
+++ b/interface/src/getfemint_global_function.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfemint_global_function.cc 3224 2009-10-13 21:57:11Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Luis Saavedra.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: getfemint_global_function.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint_global_function.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_global_function.h b/interface/src/getfemint_global_function.h
index 673fade..65f719f 100644
--- a/interface/src/getfemint_global_function.h
+++ b/interface/src/getfemint_global_function.h
@@ -1,33 +1,34 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-// $Id: getfemint_global_function.h 3224 2009-10-13 21:57:11Z lsaavedr $
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Luis Saavedra.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+// $Id: getfemint_global_function.h 4114 2012-07-06 11:20:10Z renard $
/**\file getfemint_global_function.h
\brief getfem::abstract_xy_function wrapper class.
*/
diff --git a/interface/src/getfemint_gsparse.cc b/interface/src/getfemint_gsparse.cc
old mode 100755
new mode 100644
index 2fcfedb..326c118
--- a/interface/src/getfemint_gsparse.cc
+++ b/interface/src/getfemint_gsparse.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse.h>
diff --git a/interface/src/getfemint_gsparse.h b/interface/src/getfemint_gsparse.h
index 71b68de..28adfd3 100644
--- a/interface/src/getfemint_gsparse.h
+++ b/interface/src/getfemint_gsparse.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_GSPARSE_H__
diff --git a/interface/src/getfemint_gsparse_misc.cc b/interface/src/getfemint_gsparse_misc.cc
old mode 100755
new mode 100644
index 9568e4a..d848ecd
--- a/interface/src/getfemint_gsparse_misc.cc
+++ b/interface/src/getfemint_gsparse_misc.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse_misc.h>
#include <gmm/gmm_inoutput.h>
diff --git a/interface/src/getfemint_gsparse_misc.h b/interface/src/getfemint_gsparse_misc.h
index 2ac3ff6..dc4a699 100644
--- a/interface/src/getfemint_gsparse_misc.h
+++ b/interface/src/getfemint_gsparse_misc.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_GSPARSE_MISC_H
#define GETFEMINT_GSPARSE_MISC_H
diff --git a/interface/src/getfemint_integ.cc b/interface/src/getfemint_integ.cc
index 487cd7c..5f2c3f2 100644
--- a/interface/src/getfemint_integ.cc
+++ b/interface/src/getfemint_integ.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_integ.h>
diff --git a/interface/src/getfemint_integ.h b/interface/src/getfemint_integ.h
index 0a81501..49d2bb1 100644
--- a/interface/src/getfemint_integ.h
+++ b/interface/src/getfemint_integ.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_INTEG_H__
diff --git a/interface/src/getfemint_levelset.cc b/interface/src/getfemint_levelset.cc
index 13258e4..134d6fd 100644
--- a/interface/src/getfemint_levelset.cc
+++ b/interface/src/getfemint_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_levelset.h>
#include <getfemint_levelset.h>
#include <getfemint_workspace.h>
@@ -63,7 +63,7 @@ namespace getfemint {
ls->values(idx)[i] = p.eval(x.begin());
}
}
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
void getfemint_levelset::values_from_func(unsigned idx,
const std::string &s) {
const getfem::mesh_fem &mf = levelset().get_mesh_fem();
diff --git a/interface/src/getfemint_levelset.h b/interface/src/getfemint_levelset.h
index dac521f..b4f21ce 100644
--- a/interface/src/getfemint_levelset.h
+++ b/interface/src/getfemint_levelset.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mesh_fem.h
\brief getfem::mesh_fem wrapper class
@@ -67,7 +68,7 @@ namespace getfemint
static getfemint_levelset* get_from(getfem::level_set *ls, int flags=0);
void values_from_poly(unsigned idx, const std::string &s);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
void values_from_func(unsigned idx, const std::string &s);
#endif
};
diff --git a/interface/src/getfemint_matelem.cc b/interface/src/getfemint_matelem.cc
index 0d266d3..4d91fca 100644
--- a/interface/src/getfemint_matelem.cc
+++ b/interface/src/getfemint_matelem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_matelem.h>
diff --git a/interface/src/getfemint_matelem.h b/interface/src/getfemint_matelem.h
index a7f88d6..e5ac2b8 100644
--- a/interface/src/getfemint_matelem.h
+++ b/interface/src/getfemint_matelem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_MATELEM_H__
diff --git a/interface/src/getfemint_matelemtype.cc b/interface/src/getfemint_matelemtype.cc
index e4607c8..0c2102d 100644
--- a/interface/src/getfemint_matelemtype.cc
+++ b/interface/src/getfemint_matelemtype.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_matelemtype.h>
diff --git a/interface/src/getfemint_matelemtype.h b/interface/src/getfemint_matelemtype.h
index 6ce50e9..1cf0b87 100644
--- a/interface/src/getfemint_matelemtype.h
+++ b/interface/src/getfemint_matelemtype.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_MATELEMTYPE_H__
diff --git a/interface/src/getfemint_mdbrick.cc b/interface/src/getfemint_mdbrick.cc
old mode 100755
new mode 100644
index 74987b6..2f8dd9e
--- a/interface/src/getfemint_mdbrick.cc
+++ b/interface/src/getfemint_mdbrick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_mdbrick.h>
diff --git a/interface/src/getfemint_mdbrick.h b/interface/src/getfemint_mdbrick.h
index e72cebf..644b198 100644
--- a/interface/src/getfemint_mdbrick.h
+++ b/interface/src/getfemint_mdbrick.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mdbrick.h
\brief getfem::mdbrick_abstract (and derivatives) interface
diff --git a/interface/src/getfemint_mdstate.h b/interface/src/getfemint_mdstate.h
index ef853ee..d4a0f49 100644
--- a/interface/src/getfemint_mdstate.h
+++ b/interface/src/getfemint_mdstate.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mdstate.h
\brief getfem::model_state interface
diff --git a/interface/src/getfemint_mesh.cc b/interface/src/getfemint_mesh.cc
index d15a775..627be6e 100644
--- a/interface/src/getfemint_mesh.cc
+++ b/interface/src/getfemint_mesh.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_mesh.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh.h b/interface/src/getfemint_mesh.h
index da92b8b..eeeed69 100644
--- a/interface/src/getfemint_mesh.h
+++ b/interface/src/getfemint_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier, Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mesh.h
\brief getfem::mesh interface.
diff --git a/interface/src/getfemint_mesh_fem.cc b/interface/src/getfemint_mesh_fem.cc
index b42faef..b3e2792 100644
--- a/interface/src/getfemint_mesh_fem.cc
+++ b/interface/src/getfemint_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_mesh_fem.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh_fem.h b/interface/src/getfemint_mesh_fem.h
index 133a928..1cf5f8d 100644
--- a/interface/src/getfemint_mesh_fem.h
+++ b/interface/src/getfemint_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mesh_fem.h
\brief getfem::mesh_fem wrapper class
diff --git a/interface/src/getfemint_mesh_im.cc b/interface/src/getfemint_mesh_im.cc
index badc46c..e975bfe 100644
--- a/interface/src/getfemint_mesh_im.cc
+++ b/interface/src/getfemint_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_mesh_im.h>
#include <getfemint_mesh_im.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh_im.h b/interface/src/getfemint_mesh_im.h
index dc7ccf4..eb13001 100644
--- a/interface/src/getfemint_mesh_im.h
+++ b/interface/src/getfemint_mesh_im.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_MESH_IM_H__
diff --git a/interface/src/getfemint_mesh_levelset.cc b/interface/src/getfemint_mesh_levelset.cc
index 751f382..7de16e9 100644
--- a/interface/src/getfemint_mesh_levelset.cc
+++ b/interface/src/getfemint_mesh_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_mesh_levelset.h>
#include <getfemint_mesh_levelset.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/getfemint_mesh_levelset.h b/interface/src/getfemint_mesh_levelset.h
index 22b98a9..76fb5a3 100644
--- a/interface/src/getfemint_mesh_levelset.h
+++ b/interface/src/getfemint_mesh_levelset.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier. Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_mesh_fem.h
\brief getfem::mesh_fem wrapper class
diff --git a/interface/src/getfemint_mesh_slice.h b/interface/src/getfemint_mesh_slice.h
index 05bc93a..90a40a1 100644
--- a/interface/src/getfemint_mesh_slice.h
+++ b/interface/src/getfemint_mesh_slice.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_MESH_SLICE_H__
diff --git a/interface/src/getfemint_mesher_object.h b/interface/src/getfemint_mesher_object.h
new file mode 100644
index 0000000..7ebd947
--- /dev/null
+++ b/interface/src/getfemint_mesher_object.h
@@ -0,0 +1,83 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/**\file getfemint_models.h
+ \brief getfem::models interface
+*/
+
+#include <getfemint_std.h>
+#include <getfemint_object.h>
+#include <getfem/getfem_mesher.h>
+
+namespace getfemint {
+
+ class getfemint_mesher_object : public getfemint::getfem_object {
+ private:
+ getfem::mesher_signed_distance *msd;
+ getfemint_mesher_object(getfem::mesher_signed_distance *msd_) {
+ assert(workspace == 0);
+ msd = msd_;
+ ikey = getfem_object::internal_key_type(msd);
+ }
+
+ public:
+ ~getfemint_mesher_object() {}
+ id_type class_id() const { return MESHER_OBJECT_CLASS_ID; }
+ size_type memsize() const {
+ return sizeof(getfem::mesher_signed_distance);
+ }
+ static getfemint_mesher_object*
+ get_from(getfem::mesher_signed_distance *pmsd, int flags = 0) {
+ getfem_object *o =
+ getfemint::workspace().object(getfem_object::internal_key_type(pmsd));
+ getfemint_mesher_object *gpgf = NULL;
+ if (!o) {
+ gpgf = new getfemint_mesher_object(pmsd);
+ gpgf->set_flags(flags);
+ getfemint::workspace().push_object(gpgf);
+ } else gpgf = dynamic_cast<getfemint_mesher_object*>(o);
+ assert(gpgf);
+ return gpgf;
+ }
+
+ getfem::mesher_signed_distance &mesher_object() { return *msd; }
+
+ };
+
+ inline bool object_is_mesher_object(getfem_object *o) {
+ return o->class_id() == MESHER_OBJECT_CLASS_ID;
+ }
+
+ inline getfemint_mesher_object* object_to_mesher_object(getfem_object *o) {
+ if (object_is_mesher_object(o)) return (getfemint_mesher_object*)o;
+ else THROW_INTERNAL_ERROR;
+ }
+}
diff --git a/interface/src/getfemint_misc.cc b/interface/src/getfemint_misc.cc
index 13a52cb..2ee2a4f 100644
--- a/interface/src/getfemint_misc.cc
+++ b/interface/src/getfemint_misc.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#ifdef MAINTAINER_MODE
# include <sys/types.h>
@@ -695,15 +695,15 @@ namespace getfemint {
const getfem::abstract_hyperelastic_law &
abstract_hyperelastic_law_from_name(const std::string &lawname,
size_type N) {
-
static getfem::SaintVenant_Kirchhoff_hyperelastic_law SVK_AHL;
static getfem::Mooney_Rivlin_hyperelastic_law MR_AHL;
static getfem::Ciarlet_Geymonat_hyperelastic_law CG_AHL;
+ static getfem::generalized_Blatz_Ko_hyperelastic_law GBK_AHL;
static getfem::plane_strain_hyperelastic_law PS_SVK_AHL(&SVK_AHL);
static getfem::plane_strain_hyperelastic_law PS_MR_AHL(&MR_AHL);
static getfem::plane_strain_hyperelastic_law PS_CG_AHL(&CG_AHL);
+ static getfem::plane_strain_hyperelastic_law PS_GBK_AHL(&GBK_AHL);
-
if (cmd_strmatch(lawname, "SaintVenant Kirchhoff") ||
cmd_strmatch(lawname, "svk"))
{ if (N == 2) return PS_SVK_AHL; else return SVK_AHL; }
@@ -716,6 +716,11 @@ namespace getfemint {
cmd_strmatch(lawname, "cg"))
{ if (N == 2) return PS_CG_AHL; else return CG_AHL; }
+ if (cmd_strmatch(lawname, "generalized Blatz Ko") ||
+ cmd_strmatch(lawname, "gbk"))
+ { if (N == 2) return PS_GBK_AHL; else return GBK_AHL; }
+
+
THROW_BADARG(lawname <<
" is not the name of a known hyperelastic law. \\"
"Valid names are: SaintVenant Kirchhoff, Mooney Rivlin "
diff --git a/interface/src/getfemint_misc.h b/interface/src/getfemint_misc.h
index 164c923..f9117b2 100644
--- a/interface/src/getfemint_misc.h
+++ b/interface/src/getfemint_misc.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEM_MISC_H__
#define GETFEM_MISC_H__
diff --git a/interface/src/getfemint_models.h b/interface/src/getfemint_models.h
index 2c2389d..19bc4b9 100644
--- a/interface/src/getfemint_models.h
+++ b/interface/src/getfemint_models.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**\file getfemint_models.h
\brief getfem::models interface
diff --git a/interface/src/getfemint_object.h b/interface/src/getfemint_object.h
index 76ba4ab..4e2d8f6 100644
--- a/interface/src/getfemint_object.h
+++ b/interface/src/getfemint_object.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_OBJECT_H__
#define GETFEMINT_OBJECT_H__
diff --git a/interface/src/getfemint_pfem.cc b/interface/src/getfemint_pfem.cc
old mode 100755
new mode 100644
index c8a761d..8d80045
--- a/interface/src/getfemint_pfem.cc
+++ b/interface/src/getfemint_pfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_pfem.h>
diff --git a/interface/src/getfemint_pfem.h b/interface/src/getfemint_pfem.h
index 8b25051..e74b560 100644
--- a/interface/src/getfemint_pfem.h
+++ b/interface/src/getfemint_pfem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_PFEM_H__
diff --git a/interface/src/getfemint_pgt.cc b/interface/src/getfemint_pgt.cc
index eb6651e..1ba316b 100644
--- a/interface/src/getfemint_pgt.cc
+++ b/interface/src/getfemint_pgt.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_pgt.h>
diff --git a/interface/src/getfemint_pgt.h b/interface/src/getfemint_pgt.h
index df52c49..aaaad85 100644
--- a/interface/src/getfemint_pgt.h
+++ b/interface/src/getfemint_pgt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_PGT_H__
diff --git a/interface/src/getfemint_poly.h b/interface/src/getfemint_poly.h
index 2ad143d..3786178 100644
--- a/interface/src/getfemint_poly.h
+++ b/interface/src/getfemint_poly.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_POLY_H__
diff --git a/interface/src/getfemint_precond.h b/interface/src/getfemint_precond.h
index 5b2b510..f93b05a 100644
--- a/interface/src/getfemint_precond.h
+++ b/interface/src/getfemint_precond.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_PRECOND_H__
diff --git a/interface/src/getfemint_std.h b/interface/src/getfemint_std.h
index 3006346..9cd740c 100644
--- a/interface/src/getfemint_std.h
+++ b/interface/src/getfemint_std.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEMINT_STD_H__
#define GETFEMINT_STD_H__
@@ -37,6 +38,9 @@
namespace getfemint
{
+ using std::endl; using std::cout; using std::cerr;
+ using std::ends; using std::cin;
+
const char *name_of_getfemint_class_id(unsigned cid);
void attach_gdb();
diff --git a/interface/src/getfemint_workspace.cc b/interface/src/getfemint_workspace.cc
index d48de2e..fdd7664 100644
--- a/interface/src/getfemint_workspace.cc
+++ b/interface/src/getfemint_workspace.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: getfemint_workspace.cc 3224 2009-10-13 21:57:11Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: getfemint_workspace.cc 4114 2012-07-06 11:20:10Z renard $
#define GETFEMINT_WORKSPACE_C
#include <getfem/dal_singleton.h>
diff --git a/interface/src/getfemint_workspace.h b/interface/src/getfemint_workspace.h
index 2f9e5db..7566df9 100644
--- a/interface/src/getfemint_workspace.h
+++ b/interface/src/getfemint_workspace.h
@@ -1,33 +1,34 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-// $Id: getfemint_workspace.h 3224 2009-10-13 21:57:11Z lsaavedr $
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+// $Id: getfemint_workspace.h 4114 2012-07-06 11:20:10Z renard $
#ifndef GETFEMINT_WORKSPACE_H__
#define GETFEMINT_WORKSPACE_H__
diff --git a/interface/src/gf_asm.cc b/interface/src/gf_asm.cc
index fde0828..bd4f034 100644
--- a/interface/src/gf_asm.cc
+++ b/interface/src/gf_asm.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_assembling.h>
@@ -26,6 +26,247 @@
#include <getfem/getfem_interpolation.h>
#include <getfem/getfem_nonlinear_elasticity.h>
#include <getfem/getfem_fourth_order.h>
+#include <getfem/getfem_Coulomb_friction.h>
+
+#ifdef GETFEM_HAVE_METIS
+ extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+ extern "C" void METIS_PartGraphRecursive(int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+
+ extern "C" void METIS_mCPartGraphKway(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, float *, int *, int *, int *);
+ extern "C" void METIS_mCPartGraphRecursive(int *, int *, int *, int *, int *, int *, int *,
+ int *, int *, int *, int *, int *);
+#endif
+
+/********************************/
+/*compute level set unit normal*/
+
+template<typename VECT1> class level_set_unit_normal
+ : public getfem::nonlinear_elem_term {
+ const getfem::mesh_fem &mf;
+ std::vector<bgeot::scalar_type> U;
+ bgeot::size_type N;
+ bgeot::base_matrix gradU;
+ bgeot::base_vector coeff;
+ bgeot::multi_index sizes_;
+public:
+ level_set_unit_normal(const getfem::mesh_fem &mf_, const VECT1 &U_)
+ : mf(mf_), U(mf_.nb_basic_dof()), N(mf_.linked_mesh().dim()),
+ gradU(1, N) {
+ sizes_.resize(1); sizes_[0] = bgeot::short_type(N);
+ mf.extend_vector(U_, U);
+ }
+ const bgeot::multi_index &sizes() const { return sizes_; }
+ virtual void compute(getfem::fem_interpolation_context& ctx,
+ bgeot::base_tensor &t) {
+ bgeot::size_type cv = ctx.convex_num();
+ coeff.resize(mf.nb_basic_dof_of_element(cv));
+ gmm::copy
+ (gmm::sub_vector(U,gmm::sub_index(mf.ind_basic_dof_of_element(cv))),
+ coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, gradU, 1);
+ bgeot::scalar_type norm = gmm::vect_norm2(gmm::mat_row(gradU, 0));
+ for (bgeot::size_type i = 0; i < N; ++i) t[i] = gradU(0, i) / norm;
+ }
+};
+
+
+
+ template<class MAT>
+void asm_lsneuman_matrix
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf,
+ const getfem::mesh_fem &mf_mult, getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<bgeot::scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly assem("t=comp(Base(#2).Grad(#1).NonLin(#3));"
+ "M(#2, #1)+= t(:,:,i,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf);
+ assem.push_mf(mf_mult);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+}
+
+
+ /**
+ generic normal grad level set matrix (on the whole mesh level set or on the specified
+ convex set level set or boundary level set)
+
+ */
+
+
+template<typename MAT> void asm_nlsgrad_matrix
+(const MAT &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf1,
+ const getfem::mesh_fem &mf2, getfem::level_set &ls,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ MAT &RM = const_cast<MAT &>(RM_);
+
+ level_set_unit_normal<std::vector<bgeot::scalar_type> >
+ nterm(ls.get_mesh_fem(), ls.values());
+
+ getfem::generic_assembly
+ assem("t=comp(Grad(#1).NonLin(#3).Grad(#2).NonLin(#3));"
+ "M(#1, #2)+= sym(t(:,i,i,:,j,j))");
+ assem.push_mi(mim);
+ assem.push_mf(mf1);
+ assem.push_mf(mf2);
+ assem.push_mf(ls.get_mesh_fem());
+ assem.push_mat(RM);
+ assem.push_nonlinear_term(&nterm);
+ assem.assembly(rg);
+ }
+
+
+/**************************************************************/
+/* assembling patch vector */
+/**************************************************************/
+
+template<class VEC>
+void asm_patch_vector
+(const VEC &RM_, const getfem::mesh_im &mim, const getfem::mesh_fem &mf_mult,
+ const getfem::mesh_region &rg = getfem::mesh_region::all_convexes()) {
+ VEC &RM = const_cast<VEC &>(RM_);
+
+ getfem::generic_assembly assem("t=comp(Base(#1)); V(#1)+= t(:);");
+ assem.push_mi(mim);
+ assem.push_mf(mf_mult);
+ assem.push_vec(RM);
+ // assem.set("RM(#1)+=comp(Base(#1))()");
+ assem.assembly(rg);
+
+}
+/**************************************************************/
+/* assembling patch matrix */
+/**************************************************************/
+
+template<class MAT>
+void asm_stabilization_patch_matrix
+(const MAT &RM_, const getfem::mesh &mesh, const getfem::mesh_fem &mf_mult, const getfem::mesh_im &mimbounddown,
+ bgeot::scalar_type ratio_size, bgeot::scalar_type h ){
+ MAT &M1 = const_cast<MAT &>(RM_);
+
+ /****************************************************/
+ /* " select patch " */
+ /****************************************************/
+
+
+
+ // assemby patch vector
+ const getfem::mesh_fem &mf_P0 = getfem::classical_mesh_fem(mesh, 0);
+ bgeot::size_type nbe = mf_P0.nb_dof();
+ int ne = 0;
+ double size_of_crack = 0;
+ getfem::modeling_standard_plain_vector Patch_Vector(nbe);
+ asm_patch_vector(Patch_Vector, mimbounddown, mf_P0);
+ // cout<<"patch_vectot="<< Patch_Vector<<endl;
+ dal::bit_vector Patch_element_list, Patch_dof_ind;
+ for (bgeot::size_type i = 0; i < nbe; ++i) {
+ if (Patch_Vector[i] != bgeot::scalar_type(0)){
+ bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(i);
+ Patch_element_list.add(cv);
+ Patch_dof_ind.add(i);
+ ne++;
+ size_of_crack=size_of_crack + Patch_Vector[i];
+ }
+ }
+ // std::cout<<"Path_element_list="<< Patch_element_list << std::endl;
+ // std::cout<<"Path_dof_ind="<< Patch_dof_ind << std::endl;
+ std::cout << "number of element in patch=" << ne << std::endl;
+ std::vector<int> xadj(ne+1), adjncy, numelt(ne), part(ne);
+ std::vector<int> vwgt(ne), indelt(mesh.convex_index().last_true()+1);
+ std::vector<double> vwgtt(ne);
+ int j = 0, k = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ numelt[j] = int(ic);
+ indelt[ic] = j;
+ }
+ j = 0;
+ for (dal::bv_visitor ic(Patch_element_list); !ic.finished(); ++ic, j++) {
+ bgeot::size_type ind_dof_patch = mf_P0.ind_basic_dof_of_element(ic)[0];
+ vwgt[indelt[ic]] = int(1000000*Patch_Vector[ind_dof_patch]);
+ vwgtt[indelt[ic]] = Patch_Vector[ind_dof_patch];
+ xadj[j] = k;
+ bgeot::mesh_structure::ind_set s;
+ mesh.neighbours_of_convex(ic, s);
+ for (bgeot::mesh_structure::ind_set::iterator it = s.begin(); it != s.end(); ++it) {
+ if (Patch_element_list.is_in(*it)) { adjncy.push_back(indelt[*it]); ++k; }
+ }
+ }
+
+ xadj[j] = k;
+ std::vector<int> adjwgt(k);
+ // std::cout<<"xadj="<<xadj<<std::endl;
+ //std::cout<<"adjncy="<<adjncy<<std::endl;
+ //std::cout<<"vwgt="<<vwgt<<std::endl;
+
+ std::cout << "ratio size beween mesh and coarse mesh= " << ratio_size
+ << std::endl;
+
+ int wgtflag = 2, edgecut, nparts=int(size_of_crack/(ratio_size*h)), numflag = 0;
+ // float ubvec[1] = {1.03f};
+ int options[5] = {0,0,0,0,0};
+ #ifdef GETFEM_HAVE_METIS
+ //METIS_mCPartGraphKway(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, &(ubvec[0]), options, &edgecut, &(part[0]));
+ // METIS_mCPartGraphRecursive(&ne, &ncon, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ //METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ // &numflag, &nparts, options, &edgecut, &(part[0]));
+ METIS_PartGraphRecursive(&ne, &(xadj[0]), &(adjncy[0]), &(vwgt[0]), &(adjwgt[0]), &wgtflag,
+ &numflag, &nparts, options, &edgecut, &(part[0]));
+ #else
+ GMM_ASSERT1(false, "Metis not present ...");
+ #endif
+ //std::cout<<"size_of_mesh="<<h<<std::endl;
+ //std::cout<<"size_of_crack="<< size_of_crack <<std::endl;
+ std::cout<<"nb_partition="<<nparts<<std::endl;
+ // std::cout<<"partition="<<part<<std::endl;
+ //std::cout<<"edgecut="<<edgecut<<std::endl;
+
+
+ /**************************************************************/
+ /* Assembly matrices */
+ /**************************************************************/
+
+
+ std::vector<double> size_patch(nparts);
+ bgeot::size_type nb_dof_mult=mf_mult.nb_dof();
+ getfem::modeling_standard_sparse_matrix M0(nb_dof_mult, nbe);
+ getfem::asm_mass_matrix(M0, mimbounddown, mf_mult, mf_P0);
+
+ for (bgeot::size_type i=0; i < bgeot::size_type(ne); i++) {
+ size_patch[part[i]]= size_patch[part[i]] + vwgtt[i];
+ }
+
+ //std::cout<<"size_patch="<<size_patch<<std::endl;
+
+ gmm::row_matrix<getfem::modeling_standard_sparse_vector> MAT_aux(nparts, nb_dof_mult);
+ for (bgeot::size_type r=0; r < nbe; r++) {
+ bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ gmm::add(gmm::mat_col(M0, r), gmm::mat_row(MAT_aux, part[indelt[cv]]));
+ }
+
+ gmm::row_matrix<getfem::modeling_standard_sparse_vector> MAT_proj(nbe, nb_dof_mult);
+
+ for (bgeot::size_type r=0; r < nbe; r++) {
+ bgeot::size_type cv = mf_P0.first_convex_of_basic_dof(r);
+ int p=part[indelt[cv]];
+ gmm::copy(gmm::scaled(gmm::mat_row(MAT_aux, p), 1./size_patch[p]),
+ gmm::mat_row(MAT_proj, r));
+ }
+
+ gmm::mult(M0, MAT_proj, M1);
+
+}
+
using namespace getfemint;
namespace getfemint {
@@ -64,14 +305,16 @@ namespace gmm {
{ std::fill(it, ite, value_type(0)); }
static void do_clear(this_type &v) { std::fill(v.begin(), v.end(), 0.); }
static value_type access(const origin_type *, const const_iterator &it,
- const const_iterator &, size_type i)
+ const const_iterator &, size_type i)
{ return it[i]; }
static reference access(origin_type *, const iterator &it,
- const iterator &, size_type i)
+ const iterator &, size_type i)
{ return it[i]; }
};
}
+
+
namespace getfem {
template<> class vec_factory<darray_with_gfi_array> :
public base_vec_factory, private std::deque<asm_vec<getfemint::darray_with_gfi_array> > {
@@ -82,7 +325,7 @@ namespace getfem {
}
~vec_factory() {
for (size_type i=0; i < this->size(); ++i) {
- delete (*this)[i].vec(); // but it does not deallocate the gfi_array !! that's fine
+ delete (*this)[i].vec(); // but it does not deallocate the gfi_array !! that's fine
}
}
};
@@ -131,7 +374,7 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
if (assem.mat()[i] != 0) {
getfem::base_asm_mat *BM = assem.mat()[i];
getfem::asm_mat<gf_real_sparse_by_col> * M =
- static_cast<getfem::asm_mat<gf_real_sparse_by_col>*>(BM);
+ static_cast<getfem::asm_mat<gf_real_sparse_by_col>*>(BM);
out.pop().from_sparse(*M->mat());
}
}
@@ -139,10 +382,10 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
if (out.remaining()) {
for (size_type i=0; out.remaining() && i < assem.vec().size(); ++i) {
if (assem.vec()[i] != 0) {
- getfem::base_asm_vec *BV = assem.vec()[i];
- getfem::asm_vec<darray_with_gfi_array> *V =
- static_cast<getfem::asm_vec<darray_with_gfi_array> *>(BV);
- mexarg_out mo = out.pop(); mo.arg = V->vec()->mx;
+ getfem::base_asm_vec *BV = assem.vec()[i];
+ getfem::asm_vec<darray_with_gfi_array> *V =
+ static_cast<getfem::asm_vec<darray_with_gfi_array> *>(BV);
+ mexarg_out mo = out.pop(); mo.arg = V->vec()->mx;
}
}
}
@@ -151,10 +394,10 @@ do_generic_assembly(mexargs_in& in, mexargs_out& out, bool on_boundary)
template<typename T> static void
gf_dirichlet(getfemint::mexargs_out& out,
- const getfem::mesh_im &mim,
- const getfem::mesh_fem &mf_u,
- const getfem::mesh_fem &mf_d,
- mexarg_in in_h, mexarg_in in_r, int boundary_num, T)
+ const getfem::mesh_im &mim,
+ const getfem::mesh_fem &mf_u,
+ const getfem::mesh_fem &mf_d,
+ mexarg_in in_h, mexarg_in in_r, int boundary_num, T)
{
unsigned q_dim = mf_u.get_qdim();
@@ -180,18 +423,19 @@ void interpolate_or_extrapolate(mexargs_in &in, mexargs_out &out, int extrapolat
static const getfem::mesh_im *get_mim(mexargs_in &in) {
if (!in.front().is_mesh_im()) {
THROW_BADARG("Since release 2.0 of getfem, all assembly functions"
- " expect a mesh_im as their second argument");
+ " expect a mesh_im as their second argument");
}
return in.pop().to_const_mesh_im();
}
void assemble_source(size_type boundary_num,
- mexargs_in &in, mexargs_out &out) {
+ mexargs_in &in, mexargs_out &out) {
const getfem::mesh_im *mim = get_mim(in);
const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
- unsigned q_dim = mf_u->get_qdim();
+ unsigned q_dim = mf_u->get_qdim() / mf_d->get_qdim();
if (!in.front().is_complex()) {
+
darray g = in.pop().to_darray(q_dim, int(mf_d->nb_dof()));
darray F = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
getfem::asm_source_term(F, *mim, *mf_u, *mf_d, g, boundary_num);
@@ -201,13 +445,15 @@ void assemble_source(size_type boundary_num,
getfem::asm_source_term(F, *mim, *mf_u, *mf_d, g, boundary_num);
}
}
-
+
+
+
/*@GFDOC
General assembly function.
Many of the functions below use more than one mesh_fem: the main
- mesh_fem (mf_u) used for the main unknow, and data mesh_fem (mf_d)
+ mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
used for the data. It is always assumed that the Qdim of mf_d is
equal to 1: if mf_d is used to describe vector or tensor data, you
just have to "stack" (in fortran ordering) as many scalar fields as
@@ -223,7 +469,7 @@ void assemble_source(size_type boundary_num,
struct sub_gf_asm : virtual public dal::static_stored_object {
int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
virtual void run(getfemint::mexargs_in& in,
- getfemint::mexargs_out& out) = 0;
+ getfemint::mexargs_out& out) = 0;
};
typedef boost::intrusive_ptr<sub_gf_asm> psub_command;
@@ -232,16 +478,16 @@ typedef boost::intrusive_ptr<sub_gf_asm> psub_command;
template <typename T> static inline void dummy_func(T &) {}
#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
- struct subc : public sub_gf_asm { \
- virtual void run(getfemint::mexargs_in& in, \
- getfemint::mexargs_out& out) \
- { dummy_func(in); dummy_func(out); code } \
- }; \
- psub_command psubc = new subc; \
- psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
- psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
- subc_tab[cmd_normalize(name)] = psubc; \
- }
+ struct subc : public sub_gf_asm { \
+ virtual void run(getfemint::mexargs_in& in, \
+ getfemint::mexargs_out& out) \
+ { dummy_func(in); dummy_func(out); code } \
+ }; \
+ psub_command psubc = new subc; \
+ psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
+ psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
+ subc_tab[cmd_normalize(name)] = psubc; \
+ }
@@ -253,34 +499,83 @@ template <typename T> static inline void dummy_func(T &) {}
void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
typedef std::map<std::string, psub_command > SUBC_TAB;
static SUBC_TAB subc_tab;
-
- if (subc_tab.size() == 0) {
-
- /*@FUNC M = ('mass matrix', @tmim mim, @tmf mf1[, @tmf mf2])
+ if (subc_tab.size() == 0) {
+
+
+ /*@FUNC M = ('mass matrix', @tmim mim, @tmf mf1[, @tmf mf2[, boundary_num]])
Assembly of a mass matrix.
-
+
Return a @tsp object.
@*/
sub_command
- ("mass matrix", 2, 3, 0, 1,
+ ("mass matrix", 2, 4, 0, 1,
const getfem::mesh_im *mim = get_mim(in);
const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
const getfem::mesh_fem *mf_u2 = in.remaining() ? in.pop().to_const_mesh_fem() : mf_u1;
-
+ size_type nbound = in.remaining() ? in.pop().to_integer():size_type(-1);
gf_real_sparse_by_col M(mf_u1->nb_dof(), mf_u2->nb_dof());
- getfem::asm_mass_matrix(M, *mim, *mf_u1, *mf_u2);
+ getfem::asm_mass_matrix(M, *mim, *mf_u1, *mf_u2, nbound);
out.pop().from_sparse(M);
);
-
-
+
+ /*@FUNC M = ('lsneuman matrix', @tmim mim, @tmf mf1, @tmf mf2, @tls ls)
+ Assembly of a level set Neuman matrix.
+
+ Return a @tsp object.
+ @*/
+ sub_command
+ ("lsneuman matrix", 3, 4, 0, 1,
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
+ const getfem::mesh_fem *mf_u2 = in.pop().to_const_mesh_fem();
+ getfem::level_set *ls1= in.pop().to_levelset();
+ gf_real_sparse_by_col M(mf_u2->nb_dof(), mf_u1->nb_dof());
+ asm_lsneuman_matrix(M, *mim, *mf_u1, *mf_u2, *ls1);
+ out.pop().from_sparse(M);
+ );
+
+ /*@FUNC M = ('nlsgrad matrix', @tmim mim, @tmf mf1, @tmf mf2, @tls ls)
+ Assembly of a nlsgrad matrix.
+
+ Return a @tsp object.
+ @*/
+ sub_command
+ ("nlsgrad matrix", 3, 4, 0, 1,
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh_fem *mf_u1 = in.pop().to_const_mesh_fem();
+ const getfem::mesh_fem *mf_u2 = in.pop().to_const_mesh_fem();
+ getfem::level_set *ls1= in.pop().to_levelset();
+ gf_real_sparse_by_col M(mf_u1->nb_dof(), mf_u2->nb_dof());
+ asm_nlsgrad_matrix(M, *mim, *mf_u1, *mf_u2, *ls1);
+ out.pop().from_sparse(M);
+ );
+
+ /*@FUNC M = ('stabilization patch matrix', @tm mesh, @tmf mf, @tmim mim, @real ratio, @real h)
+ Assembly of stabilization patch matrix .
+
+ Return a @tsp object.
+ @*/
+ sub_command
+ ("stabilization patch matrix", 5, 5, 0, 1,
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh *mesh = in.pop().to_const_mesh();
+ const getfem::mesh_fem *mf_mult = in.pop().to_const_mesh_fem();
+ double ratio_size= in.pop().to_scalar();
+ double h= in.pop().to_scalar();
+ gf_real_sparse_by_col M(mf_mult->nb_dof(), mf_mult->nb_dof());
+ asm_stabilization_patch_matrix(M, *mesh,* mf_mult, *mim, ratio_size, h);
+ out.pop().from_sparse(M);
+ );
+
+
/*@FUNC L = ('laplacian', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a)
- Assembly of the matrix for the Laplacian problem.
-
- :math:`\nabla\cdot(a(x)\nabla u)` with `a` a scalar.
-
- Return a @tsp object.
- @*/
+ Assembly of the matrix for the Laplacian problem.
+
+ :math:`\nabla\cdot(a(x)\nabla u)` with `a` a scalar.
+
+ Return a @tsp object.
+ @*/
sub_command
("laplacian", 4, 4,0, 1,
const getfem::mesh_im *mim = get_mim(in);
@@ -297,7 +592,7 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
:math:`\nabla\cdot(C(x):\nabla u)`
with :math:`C` defined via `lambda_d` and `mu_d`.
-
+
Return a @tsp object.
@*/
sub_command
@@ -311,24 +606,24 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
getfem::asm_stiffness_matrix_for_linear_elasticity(M, *mim, *mf_u, *mf_d, lambda, mu);
out.pop().from_sparse(M);
);
-
-
+
+
/*@FUNC TRHS = ('nonlinear elasticity', @tmim mim, @tmf mf_u, @dvec U, @str law, @tmf mf_d, @dmat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', @tmf mf_p, @dvec P|'incompressible rhs', @tmf mf_p, @dvec P})
- Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
-
- The solution `U` is required at the current time-step. The `law`
- may be choosen among:
-
- - 'SaintVenant Kirchhoff':
- Linearized law, should be avoided). This law has the two usual
- Lame coefficients as parameters, called lambda and mu.
- - 'Mooney Rivlin':
- Only for incompressibility. This law has two parameters,
- called C1 and C2.
- - 'Ciarlet Geymonat':
- This law has 3 parameters, called lambda, mu and gamma, with
- gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
-
+ Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
+
+ The solution `U` is required at the current time-step. The `law`
+ may be choosen among:
+
+ - 'SaintVenant Kirchhoff':
+ Linearized law, should be avoided). This law has the two usual
+ Lame coefficients as parameters, called lambda and mu.
+ - 'Mooney Rivlin':
+ Only for incompressibility. This law has two parameters,
+ called C1 and C2.
+ - 'Ciarlet Geymonat':
+ This law has 3 parameters, called lambda, mu and gamma, with
+ gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
+
The parameters of the material law are described on the @tmf `mf_d`.
The matrix `params` should have `nbdof(mf_d)` columns, each row
correspounds to a parameter.
@@ -351,44 +646,44 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
/* a refaire , pas bon, le terme incompressible se passe de loi */
const getfem::abstract_hyperelastic_law &law
= abstract_hyperelastic_law_from_name(lawname,
- mf_u->linked_mesh().dim());
+ mf_u->linked_mesh().dim());
const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
darray param = in.pop().to_darray(int(law.nb_params()),
- int(mf_d->nb_dof()));
+ int(mf_d->nb_dof()));
while (in.remaining()) {
- std::string what = in.pop().to_string();
- if (cmd_strmatch(what, "tangent matrix")) {
- gf_real_sparse_by_col K(mf_u->nb_dof(), mf_u->nb_dof());
- getfem::asm_nonlinear_elasticity_tangent_matrix(K, *mim, *mf_u, U,
- mf_d, param, law);
- out.pop().from_sparse(K);
- } else if (cmd_strmatch(what, "rhs")) {
- darray B = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
- getfem::asm_nonlinear_elasticity_rhs(B, *mim, *mf_u, U, mf_d,
- param, law);
- } else if (cmd_strmatch(what, "incompressible tangent matrix")) {
- const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
- darray P = in.pop().to_darray(int(mf_p->nb_dof()));
- gf_real_sparse_by_col K(mf_u->nb_dof(), mf_u->nb_dof());
- gf_real_sparse_by_col B(mf_u->nb_dof(), mf_p->nb_dof());
- getfem::asm_nonlinear_incomp_tangent_matrix(K, B, *mim, *mf_u,
- *mf_p, U, P);
- out.pop().from_sparse(K);
- out.pop().from_sparse(B);
- } else if (cmd_strmatch(what, "incompressible rhs")) {
- const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
- darray P = in.pop().to_darray(int(mf_p->nb_dof()));
- darray RU = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
- darray RB = out.pop().create_darray_v(unsigned(mf_p->nb_dof()));
- getfem::asm_nonlinear_incomp_rhs(RU, RB, *mim, *mf_u, *mf_p, U, P);
- } else {
- THROW_BADARG("expecting 'tangent matrix' or 'rhs', or "
- "'incomp tangent matrix' or 'incomp rhs', got '"
- << what << "'");
- }
+ std::string what = in.pop().to_string();
+ if (cmd_strmatch(what, "tangent matrix")) {
+ gf_real_sparse_by_col K(mf_u->nb_dof(), mf_u->nb_dof());
+ getfem::asm_nonlinear_elasticity_tangent_matrix(K, *mim, *mf_u, U,
+ mf_d, param, law);
+ out.pop().from_sparse(K);
+ } else if (cmd_strmatch(what, "rhs")) {
+ darray B = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+ getfem::asm_nonlinear_elasticity_rhs(B, *mim, *mf_u, U, mf_d,
+ param, law);
+ } else if (cmd_strmatch(what, "incompressible tangent matrix")) {
+ const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
+ darray P = in.pop().to_darray(int(mf_p->nb_dof()));
+ gf_real_sparse_by_col K(mf_u->nb_dof(), mf_u->nb_dof());
+ gf_real_sparse_by_col B(mf_u->nb_dof(), mf_p->nb_dof());
+ getfem::asm_nonlinear_incomp_tangent_matrix(K, B, *mim, *mf_u,
+ *mf_p, U, P);
+ out.pop().from_sparse(K);
+ out.pop().from_sparse(B);
+ } else if (cmd_strmatch(what, "incompressible rhs")) {
+ const getfem::mesh_fem *mf_p = in.pop().to_const_mesh_fem();
+ darray P = in.pop().to_darray(int(mf_p->nb_dof()));
+ darray RU = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+ darray RB = out.pop().create_darray_v(unsigned(mf_p->nb_dof()));
+ getfem::asm_nonlinear_incomp_rhs(RU, RB, *mim, *mf_u, *mf_p, U, P);
+ } else {
+ THROW_BADARG("expecting 'tangent matrix' or 'rhs', or "
+ "'incomp tangent matrix' or 'incomp rhs', got '"
+ << what << "'");
+ }
}
if (in.remaining())
- THROW_BADARG("too much arguments for asm(nonlinear_elasticity)");
+ THROW_BADARG("too much arguments for asm(nonlinear_elasticity)");
);
@@ -444,9 +739,9 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
/*@FUNC A = ('bilaplacian', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a)
Assembly of the matrix for the Bilaplacian problem.
-
+
:math:`\Delta(a(x)\Delta u) = 0` with `a` scalar.
-
+
Return a @tsp object.
@*/
sub_command
@@ -460,6 +755,25 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
out.pop().from_sparse(A);
);
+ /*@FUNC A = ('bilaplacian KL', @tmim mim, @tmf mf_u, @tmf mf_d, @dvec a, @dvec nu)
+ Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+
+ :math:`\Delta(a(x)\Delta u) = 0` with `a` scalar.
+
+ Return a @tsp object.
+ @*/
+ sub_command
+ ("bilaplacian KL", 5, 5, 0, 1,
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+ const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
+ darray a = in.pop().to_darray(int(mf_d->nb_dof()));
+ darray nu = in.pop().to_darray(int(mf_d->nb_dof()));
+ gf_real_sparse_by_col A(mf_u->nb_dof(), mf_u->nb_dof());
+ getfem::asm_stiffness_matrix_for_bilaplacian_KL(A, *mim, *mf_u, *mf_d, a, nu);
+ out.pop().from_sparse(A);
+ );
+
/*@FUNC V = ('volumic source', @tmim mim, @tmf mf_u, @tmf mf_d, @dcvec fd)
Assembly of a volumic source term.
@@ -525,16 +839,16 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
mexarg_in in_r = in.pop();
double threshold = 1e-8;
if (in.remaining()) {
- threshold = in.pop().to_scalar();
- if (threshold < 0 || threshold > 1e10) THROW_BADARG("wrong threshold\n");
+ threshold = in.pop().to_scalar();
+ if (threshold < 0 || threshold > 1e10) THROW_BADARG("wrong threshold\n");
}
-
+
if (in_h.is_complex() || in_r.is_complex())
- gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, complex_type());
+ gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, complex_type());
else gf_dirichlet(out, *mim, *mf_u, *mf_d, in_h, in_r, boundary_num, scalar_type());
);
-
+
/*@FUNC Q = ('boundary qu term', at int boundary_num, @tmim mim, @tmf mf_u, @tmf mf_d, @dmat q)
Assembly of a boundary qu term.
@@ -550,55 +864,55 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
const getfem::mesh_im *mim = get_mim(in);
const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
const getfem::mesh_fem *mf_d = in.pop().to_const_mesh_fem();
-
+
unsigned q_dim = mf_u->get_qdim();
if (!in.front().is_complex()) {
- darray q = in.pop().to_darray();
- if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
- else in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
- gf_real_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
- getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
- out.pop().from_sparse(Q);
+ darray q = in.pop().to_darray();
+ if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
+ else in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
+ gf_real_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
+ getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
+ out.pop().from_sparse(Q);
} else {
- carray q = in.pop().to_carray();
- if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
- else in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
- gf_cplx_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
- getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
- out.pop().from_sparse(Q);
+ carray q = in.pop().to_carray();
+ if (q.ndim() == 2) in.last_popped().check_dimensions(q, q_dim* q_dim, int(mf_d->nb_dof()));
+ else in.last_popped().check_dimensions(q, q_dim, q_dim, int(mf_d->nb_dof()));
+ gf_cplx_sparse_by_col Q(mf_u->nb_dof(), mf_u->nb_dof());
+ getfem::asm_qu_term(Q, *mim, *mf_u, *mf_d, q, boundary_num);
+ out.pop().from_sparse(Q);
}
);
-
+
/*@FUNC @CELL{...} = ('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])
Generic assembly procedure for volumic assembly.
-
+
The expression `expr` is evaluated over the @tmf's listed in the
arguments (with optional data) and assigned to the output arguments.
For details about the syntax of assembly expressions, please refer
to the getfem user manual (or look at the file getfem_assembling.h
in the getfem++ sources).
-
+
For example, the L2 norm of a field can be computed with::
-
+
::COMPUTE('L2 norm') or with:
-
+
::ASM('volumic','u=data(#1); V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
-
+
The Laplacian stiffness matrix can be evaluated with::
-
+
::ASM('laplacian',mim, mf, A) or equivalently with:
-
+
::ASM('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(:,i,:,i,j).a(j))', mim,mf, A);@*/
sub_command
("volumic", 2, -1, 0, -1,
do_generic_assembly(in, out, false);
);
-
+
/*@FUNC @CELL{...} = ('boundary', @int bnum, @str expr [, @tmim mim, @tmf mf, data...])
Generic boundary assembly.
-
+
See the help for ::ASM('volumic').@*/
sub_command
("boundary", 3, -1, 0, -1,
@@ -637,6 +951,85 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
("extrapolation matrix", 2, 2, 0, 1,
interpolate_or_extrapolate(in, out, 2);
);
+
+
+ /*@FUNC B = ('integral contact Uzawa projection', @int bnum, @tmim mim, @tmf mf_u, @dvec U, @tmf mf_lambda, @dvec vec_lambda, @tmf mf_obstacle, @dvec obstacle, @scalar r [, {@scalar coeff | @tmf mf_coeff, @dvec coeff} [, @int option[, @scalar alpha, @dvec W]]])
+ Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact problems. Projects the term $-(\lambda - r (u_N-g))_-$ on the
+ finite element space of $\lambda$.
+
+ Return a @dcvec object.
+ @*/
+ sub_command
+ ("integral contact Uzawa projection", 9, 13, 0, 1,
+ int boundary_num = in.pop().to_integer();
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+ // unsigned q_dim = mf_u->get_qdim();
+ darray u = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_u->nb_dof()));
+ const getfem::mesh_fem *mf_lambda = in.pop().to_const_mesh_fem();
+ darray vec_lambda = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_lambda->nb_dof()));
+ const getfem::mesh_fem *mf_obs = in.pop().to_const_mesh_fem();
+ darray obs = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_obs->nb_dof()));
+ double r = in.pop().to_scalar();
+
+ darray F = out.pop().create_darray_v(unsigned(mf_lambda->nb_dof()));
+ if (in.remaining()) { // with friction
+ const getfem::mesh_fem *mf_coeff = 0;
+ darray vec_coeff;
+ mexarg_in argin = in.pop();
+ if (argin.is_mesh_fem()) {
+ mf_coeff = argin.to_const_mesh_fem();
+ vec_coeff = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_coeff->nb_dof()));
+ } else
+ vec_coeff = darray(new double(argin.to_scalar()), 1);
+ int option = in.remaining() ? in.pop().to_integer() : 1;
+ double alpha = in.remaining() ? in.pop().to_scalar() : 1;
+ darray vec_W;
+ if (in.remaining()) {
+ vec_W = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_u->nb_dof()));
+ }
+ getfem::asm_integral_contact_Uzawa_proj
+ (F, *mim, *mf_u, u, *mf_obs, obs, *mf_lambda, vec_lambda,
+ mf_coeff, vec_coeff, &vec_W, r, alpha, boundary_num, option);
+ } else // without friction
+ getfem::asm_integral_contact_Uzawa_proj
+ (F, *mim, *mf_u, u, *mf_obs, obs, *mf_lambda, vec_lambda,
+ r, boundary_num);
+ );
+
+
+ /*@FUNC B = ('level set normal source term', @int bnum, @tmim mim, @tmf mf_u, @tmf mf_lambda, @dvec vec_lambda, @tmf mf_levelset, @dvec levelset)
+ Performs an assembly of the source term represented by `vec_lambda`
+ on `mf_lambda` considered to be a component in the direction of the
+ gradient of a levelset function (normal to the levelset) of a vector
+ field defined on `mf_u` on the boundary `bnum`.
+
+ Return a @dcvec object.
+ @*/
+ sub_command
+ ("level set normal source term", 7, 7, 0, 1,
+ int boundary_num = in.pop().to_integer();
+ const getfem::mesh_im *mim = get_mim(in);
+ const getfem::mesh_fem *mf_u = in.pop().to_const_mesh_fem();
+ const getfem::mesh_fem *mf_lambda = in.pop().to_const_mesh_fem();
+ darray vec_lambda = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_lambda->nb_dof()));
+ const getfem::mesh_fem *mf_obs = in.pop().to_const_mesh_fem();
+ darray obs = in.pop().to_darray();
+ in.last_popped().check_trailing_dimension(int(mf_obs->nb_dof()));
+ darray F = out.pop().create_darray_v(unsigned(mf_u->nb_dof()));
+ getfem::asm_level_set_normal_source_term
+ (F, *mim, *mf_u, *mf_obs, obs, *mf_lambda, vec_lambda, boundary_num);
+
+ );
+
+
}
if (m_in.narg() < 1) THROW_BADARG( "Wrong number of input arguments");
@@ -647,8 +1040,8 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
SUBC_TAB::iterator it = subc_tab.find(cmd);
if (it != subc_tab.end()) {
check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
- it->second->arg_in_max, it->second->arg_out_min,
- it->second->arg_out_max);
+ it->second->arg_in_max, it->second->arg_out_min,
+ it->second->arg_out_max);
it->second->run(m_in, m_out);
}
else bad_cmd(init_cmd);
@@ -662,7 +1055,7 @@ void gf_asm(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
@*/
/*@MATLABFUNC @CELL{Q, G, H, R, F} = ('pdetool boundary conditions', mf_u, mf_d, b, e[, f_expr])
Assembly of pdetool boundary conditions.
-
+
`B` is the boundary matrix exported by pdetool, and `E` is the
edges array. `f_expr` is an optionnal expression (or vector) for
the volumic term. On return `Q, G, H, R, F` contain the assembled
diff --git a/interface/src/gf_compute.cc b/interface/src/gf_compute.cc
index 341ca50..69d33db 100644
--- a/interface/src/gf_compute.cc
+++ b/interface/src/gf_compute.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfem/getfem_derivatives.h>
@@ -144,7 +144,29 @@ gf_interpolate(getfemint::mexargs_in& in, getfemint::mexargs_out& out,
garray<T> V = out.pop().create_array(dims, T());
sl->interpolate(mf, U, V);
}
- else THROW_BADARG("expecting a mesh_fem or a mesh_slice for interpolation");
+ else {
+ size_type N = mf.get_qdim();
+ darray st = in.pop().to_darray();
+ std::vector<double> PTS(st.begin(), st.end());
+ size_type nbpoints = gmm::vect_size(PTS) / N;
+ getfem::base_node p(N);
+ getfem::mesh_trans_inv mti(mf.linked_mesh());
+ for (size_type i = 0; i < nbpoints; ++i) {
+ gmm::copy(gmm::sub_vector(PTS, gmm::sub_interval(i*N, N)), p);
+ mti.add_point(p);
+ }
+
+ size_type qmult = mf.get_qdim();
+ if (qmult != 1) dims.push_back(unsigned(qmult));
+ dims.push_back(unsigned(nbpoints));
+ dims.opt_transform_col_vect_into_row_vect();
+ garray<T> V = out.pop().create_array(dims,T());
+
+ getfem::base_matrix Maux;
+ getfem::interpolation(mf, mti, U, V, Maux, 0);
+
+ }
+ // else THROW_BADARG("expecting a mesh_fem or a mesh_slice for interpolation");
}
bool U_is_a_vector(const rcarray &U, const std::string& cmd) {
@@ -220,6 +242,36 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
else out.pop().from_scalar(getfem::asm_L2_norm(*mim, *mf, U.cplx(),bv));
);
+ /*@FUNC n = ('L2 dist', @tmim mim, @tmf mf2, @vec U2[, @mat CVids])
+ Compute the L2 distance between `U` and `U2`.
+
+ If `CVids` is given, the norm will be computed only on the listed
+ convexes.@*/
+ sub_command
+ ("L2 dist", 3, 4, 0, 1,
+ U_is_a_vector(U, "L2 dist");
+ const getfem::mesh_im *mim = in.pop().to_const_mesh_im();
+ const getfem::mesh_fem *mf_2 = in.pop().to_const_mesh_fem();
+ if (!U.is_complex()) {
+ darray st = in.pop().to_darray();
+ std::vector<double> V(st.begin(), st.end());
+ dal::bit_vector bv = in.remaining() ?
+ in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+ out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.real(),
+ *mf_2, V, bv));
+ } else {
+ GMM_ASSERT1(false, "Sorry, complex version to be done");
+// carray st = in.pop().to_carray();
+// std::vector<std::complex<double> > V(st.begin(), st.end());
+// dal::bit_vector bv = in.remaining() ?
+// in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+// out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.cplx(),
+// *mf_2, V, bv));
+ }
+ );
+
/*@FUNC n = ('H1 semi norm', @tmim mim[, @mat CVids])
Compute the L2 norm of grad(`U`).
@@ -240,6 +292,37 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
);
+ /*@FUNC n = ('H1 semi dist', @tmim mim, @tmf mf2, @vec U2[, @mat CVids])
+ Compute the semi H1 distance between `U` and `U2`.
+
+ If `CVids` is given, the norm will be computed only on the listed
+ convexes.@*/
+ sub_command
+ ("H1 semi dist", 3, 4, 0, 1,
+ U_is_a_vector(U, "H1 semi dist");
+ const getfem::mesh_im *mim = in.pop().to_const_mesh_im();
+ const getfem::mesh_fem *mf_2 = in.pop().to_const_mesh_fem();
+ if (!U.is_complex()) {
+ darray st = in.pop().to_darray();
+ std::vector<double> V(st.begin(), st.end());
+ dal::bit_vector bv = in.remaining() ?
+ in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+ out.pop().from_scalar(getfem::asm_H1_semi_dist(*mim, *mf, U.real(),
+ *mf_2, V, bv));
+ } else {
+ GMM_ASSERT1(false, "Sorry, complex version to be done");
+// carray st = in.pop().to_carray();
+// std::vector<std::complex<double> > V(st.begin(), st.end());
+// dal::bit_vector bv = in.remaining() ?
+// in.pop().to_bit_vector(&mf->convex_index()) : mf->convex_index();
+
+// out.pop().from_scalar(getfem::asm_L2_dist(*mim, *mf, U.cplx(),
+// *mf_2, V, bv));
+ }
+ );
+
+
/*@FUNC n = ('H1 norm', @tmim mim[, @mat CVids])
Compute the H1 norm of `U`.
@@ -367,8 +450,8 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
);
- /*@FUNC Ui = ('interpolate on', {@tmf mfi | @tsl sli})
- Interpolate a field on another @tmf or a @tsl.
+ /*@FUNC Ui = ('interpolate on', {@tmf mfi | @tsl sli | @vec pts})
+ Interpolate a field on another @tmf or a @tsl or a list of points.
- Interpolation on another @tmf `mfi`:
`mfi` has to be Lagrangian. If `mf` and `mfi` share the same
@@ -378,6 +461,7 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
mesh, but it is much faster. This can also be used with
SLICE:INIT('points') to obtain field values at a given set of
points.
+ - Interpolation on a set of points `pts`
See also ::ASM('interpolation matrix')
@*/
@@ -465,6 +549,8 @@ void gf_compute(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
getfem::convect(*mf, U.real(), *mf_v, V.real(), dt, nt, opt);
);
+
+
}
diff --git a/interface/src/gf_cont_struct.cc b/interface/src/gf_cont_struct.cc
new file mode 100644
index 0000000..0a1d45e
--- /dev/null
+++ b/interface/src/gf_cont_struct.cc
@@ -0,0 +1,195 @@
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <getfemint.h>
+#include <getfemint_workspace.h>
+#include <getfemint_models.h>
+#include <getfemint_cont_struct.h>
+
+
+using namespace getfemint;
+
+/*@GFDOC
+ This object serves for storing parameters and data used in numerical
+ continuation (for more details about the continuation see the Getfem++ user
+ documentation).
+@*/
+
+void gf_cont_struct(getfemint::mexargs_in& in, getfemint::mexargs_out& out) {
+ getfemint_cont_struct *pgs = NULL;
+ if (check_cmd("ContStruct", "ContStruct", in, out, 3, 35, 0, 1)) {
+
+ /*@INIT S = ('.init', @tmodel md, @str dataname_parameter[, at str dataname_init, @str dataname_final, @str dataname_current], @scalar sc_fac[, ...])
+ The variable `dataname_parameter` should parametrise the model given by
+ `md`. If the parametrisation is done via some vector datum,
+ `dataname_init` and `dataname_final` should store two given values of
+ this datum determining the parametrisation, and `dataname_current`
+ serves for actual values of this datum. `sc_fac` is a scale factor
+ involved in the norm used in the continuation.
+
+ Additional options:
+
+ - 'lsolver', @str SOLVER_NAME
+ name of the solver to be used for the incorporated linear systems
+ (the default value is 'auto', which lets getfem choose itself);
+ possible values are 'superlu', 'mumps' (if supported), 'cg/ildlt',
+ 'gmres/ilu' and 'gmres/ilut';
+ - 'max_iter', @int NIT
+ maximum number of iterations allowed in the correction (the default
+ value is 10);
+ - 'thr_iter', @int TIT
+ threshold number of iterations of the correction for enlarging the
+ step size (the default value is 8);
+ - 'max_res', @scalar RES
+ target residual value of the new point (the default value is 1e-6);
+ - 'max_diff', @scalar DIFF
+ determines a convergence criterion to the new tangent vector (the
+ default value is 1e-9);
+ - 'min_ang', @scalar ANG
+ minimal value of the cosine of the angle between tangents to the
+ solution curve at the old point and the new one (the default value
+ is 0.9);
+ - 'h_init', @scalar HIN
+ initial step size (the default value is 1e-2);
+ - 'h_max', @scalar HMAX
+ maximal step size (the default value is 1e-1);
+ - 'h_min', @scalar HMIN
+ minimal step size (the default value is 1e-5);
+ - 'h_inc', @scalar HINC
+ factor for enlarging the step size (the default value is 1.3);
+ - 'h_dec', @scalar HDEC
+ factor for diminishing the step size (the default value is 0.5);
+ - 'epsilon', @scalar EPS
+ increment to be used to compute the incorporated finite
+ differences (the default value is 1e-8);
+ - 'max_res_solve', @scalar RES_SOLVE
+ target residual value for the linear systems to be solved (the
+ default value is 1e-7);
+ - 'nb_test', @int NTEST
+ number of evaluations of the test function when passing through
+ a boundary between different smooth pieces;
+ - 'noisy' or 'very_noisy'
+ determines how detailed information has to be displayed during the
+ process (residual values etc.).@*/
+
+ getfemint_model *md = in.pop().to_getfemint_model();
+
+ bool with_parametrized_data = false;
+ std::string dataname_parameter = in.pop().to_string();
+ std::string dataname_init; std::string dataname_final;
+ std::string dataname_current;
+ if (in.front().is_string()) {
+ with_parametrized_data = true;
+ dataname_init = in.pop().to_string();
+ dataname_final = in.pop().to_string();
+ dataname_current = in.pop().to_string();
+ }
+ scalar_type scfac = in.pop().to_scalar();
+
+ std::string lsolver = "auto";
+ size_type maxit = 10; size_type thrit = 8;
+ scalar_type maxres = 1.e-6; scalar_type maxdiff = 1.e-9;
+ scalar_type minang = 0.9; scalar_type h_init = 1.e-2;
+ scalar_type h_max = 1.e-1; scalar_type h_min = 1.e-5;
+ scalar_type h_inc = 1.3; scalar_type h_dec = 0.5;
+ scalar_type epsilon = 1.e-8; scalar_type maxres_solve = 1.e-7;
+ size_type nb_test = 50;
+ int noisy = 0;
+
+ while (in.remaining() && in.front().is_string()) {
+ std::string opt = in.pop().to_string();
+ if (cmd_strmatch(opt, "lsolver")) {
+ if (in.remaining()) lsolver = in.pop().to_string();
+ else THROW_BADARG("missing name for " << opt);
+ } else if (cmd_strmatch(opt, "max_iter")) {
+ if (in.remaining()) maxit = in.pop().to_integer();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "thr_iter")) {
+ if (in.remaining()) thrit = in.pop().to_integer();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "max_res")) {
+ if (in.remaining()) maxres = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "max_diff")) {
+ if (in.remaining()) maxdiff = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "min_ang")) {
+ if (in.remaining()) minang = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "h_init")) {
+ if (in.remaining()) h_init = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "h_max")) {
+ if (in.remaining()) h_max = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "h_min")) {
+ if (in.remaining()) h_min = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "h_inc")) {
+ if (in.remaining()) h_inc = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "h_dec")) {
+ if (in.remaining()) h_dec = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "epsilon")) {
+ if (in.remaining()) epsilon = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "max_res_solve")) {
+ if (in.remaining()) maxres_solve = in.pop().to_scalar();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "nb_test")) {
+ if (in.remaining()) nb_test = in.pop().to_integer();
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "noisy")) noisy = 1;
+ else if (cmd_strmatch(opt, "very noisy") ||
+ cmd_strmatch(opt, "very_noisy")) noisy = 2;
+ else THROW_BADARG("bad option: " << opt);
+ }
+
+ if (md->model().is_complex())
+ THROW_BADARG("Sorry, the continuation has only a real version.");
+
+ getfem::cont_struct_getfem_model *ps;
+ if (with_parametrized_data) {
+ getfem::cont_struct_getfem_model *ps1 =
+ new getfem::cont_struct_getfem_model
+ (md->model(), dataname_parameter, dataname_init, dataname_final,
+ dataname_current,
+ getfem::rselect_linear_solver(md->model(), lsolver), scfac,
+ maxit, thrit, maxres, maxdiff, minang, h_init, h_max, h_min,
+ h_inc, h_dec, epsilon, maxres_solve, noisy, nb_test);
+ ps = ps1;
+ }
+ else {
+ getfem::cont_struct_getfem_model *ps1 =
+ new getfem::cont_struct_getfem_model
+ (md->model(), dataname_parameter,
+ getfem::rselect_linear_solver(md->model(), lsolver), scfac,
+ maxit, thrit, maxres, maxdiff, minang, h_init, h_max, h_min,
+ h_inc, h_dec, epsilon, maxres_solve, noisy, nb_test);
+ ps = ps1;
+ }
+
+ pgs = getfemint_cont_struct::get_from(ps);
+ workspace().set_dependance(pgs, md);
+ }
+ out.pop().from_object_id(pgs->get_id(), CONT_STRUCT_CLASS_ID);
+}
diff --git a/interface/src/gf_cont_struct_get.cc b/interface/src/gf_cont_struct_get.cc
new file mode 100644
index 0000000..76a4e09
--- /dev/null
+++ b/interface/src/gf_cont_struct_get.cc
@@ -0,0 +1,202 @@
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Tomas Ligursky, Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_cont_struct.h>
+
+using namespace getfemint;
+
+// Object for the declaration of a new sub-command.
+
+struct sub_gf_cont_struct_get : virtual public dal::static_stored_object {
+ int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+ virtual void run(getfemint::mexargs_in& in,
+ getfemint::mexargs_out& out,
+ getfem::cont_struct_getfem_model *ps) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_gf_cont_struct_get> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+ struct subc : public sub_gf_cont_struct_get { \
+ virtual void run(getfemint::mexargs_in& in, \
+ getfemint::mexargs_out& out, \
+ getfem::cont_struct_getfem_model *ps) \
+ { dummy_func(in); dummy_func(out); dummy_func(ps); code } \
+ }; \
+ psub_command psubc = new subc; \
+ psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
+ psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
+ subc_tab[cmd_normalize(name)] = psubc; \
+ }
+
+
+/*@GFDOC
+ General function for querying information about cont_struct objects and for
+ applying them to numerical continuation.
+@*/
+
+void gf_cont_struct_get(getfemint::mexargs_in& m_in,
+ getfemint::mexargs_out& m_out) {
+ typedef std::map<std::string, psub_command > SUBC_TAB;
+ static SUBC_TAB subc_tab;
+
+ if (subc_tab.size() == 0) {
+
+
+ /*@FUNC t = ('init test function', @vec tangent, @scalar tangent_parameter)
+ Initialise the border of the bordered system that serves for calculating
+ the test function. Return the value of test function for the solution
+ and the value of the parameter saved in the corresponding model object
+ and the tangent given by `tangent` and `tangent_parameter`.@*/
+ sub_command
+ ("init test function", 2, 2, 0, 1,
+
+ size_type nbdof = ps->linked_model().nb_dof();
+ std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+ const getfem::model_real_plain_vector &GAMMA =
+ ps->linked_model().real_variable(ps->parameter_name());
+ GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+ "The continuation parameter should be a real scalar!");
+ scalar_type gamma = GAMMA[0];
+ darray t_y = in.pop().to_darray();
+ std::vector<double> tt_y(nbdof); gmm::copy(t_y, tt_y);
+ scalar_type t_gamma = in.pop().to_scalar();
+
+ getfem::init_test_function(*ps, yy, gamma, tt_y, t_gamma);
+ out.pop().from_scalar(ps->tau2());
+ );
+
+
+ /*@FUNC E = ('init Moore-Penrose continuation', @scalar init_dir)
+ Initialise the Moore-Penrose continuation: Return a unit tangent
+ corresponding to the solution branch at the solution and the
+ value of the parameter saved in the corresponding model object,
+ and an initial step size for the continuation. Direction of the
+ computed tangent with respect to the parameter is determined by the
+ sign of `init_dir`.@*/
+ sub_command
+ ("init Moore-Penrose continuation", 1, 1, 0, 3,
+
+ size_type nbdof = ps->linked_model().nb_dof();
+ std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+ const getfem::model_real_plain_vector &GAMMA
+ = ps->linked_model().real_variable(ps->parameter_name());
+ GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+ "The continuation parameter should be a real scalar!");
+ scalar_type gamma = GAMMA[0];
+ std::vector<double> tt_y(nbdof);
+ scalar_type t_gamma = in.pop().to_scalar();
+ scalar_type h;
+
+ getfem::init_Moore_Penrose_continuation(*ps, yy, gamma,
+ tt_y, t_gamma, h);
+ out.pop().from_dcvector(tt_y);
+ out.pop().from_scalar(t_gamma);
+ out.pop().from_scalar(h);
+ );
+
+
+ /*@FUNC E = ('Moore-Penrose continuation', @vec tangent, @scalar tangent_parameter, @scalar h)
+ Compute one step of the Moore-Penrose continuation: Take the solution
+ and the value of the parameter saved in the corresponding model object,
+ the tangent given by `tangent` and `tangent_parameter`, and the step
+ size `h`, save a new point on the solution curve into the model object,
+ and return a new tangent and a step size for the next step. If the
+ returned step size equals zero, the continuation has failed.@*/
+ sub_command
+ ("Moore-Penrose continuation", 3, 3, 0, 3,
+
+ size_type nbdof = ps->linked_model().nb_dof();
+ std::vector<double> yy(nbdof); ps->linked_model().from_variables(yy);
+ const getfem::model_real_plain_vector &GAMMA
+ = ps->linked_model().real_variable(ps->parameter_name());
+ GMM_ASSERT1(gmm::vect_size(GAMMA) == 1,
+ "The continuation parameter should be a real scalar!");
+ scalar_type gamma = GAMMA[0];
+ darray t_y = in.pop().to_darray();
+ std::vector<double> tt_y(nbdof); gmm::copy(t_y, tt_y);
+ scalar_type t_gamma = in.pop().to_scalar();
+ scalar_type h = in.pop().to_scalar();
+
+ getfem::Moore_Penrose_continuation(*ps, yy, gamma, tt_y, t_gamma, h);
+ out.pop().from_dcvector(tt_y);
+ out.pop().from_scalar(t_gamma);
+ out.pop().from_scalar(h);
+ );
+
+
+ /*@GET t = ('test function')
+ Return the last value of the test function and eventaully all the
+ values calculated when passing through a boundary between different
+ smooth pieces.@*/
+ sub_command
+ ("test function", 0, 0, 0, 2,
+ out.pop().from_scalar(ps->tau2());
+ if (out.remaining()) out.pop().from_dcvector(ps->get_tau_hist());
+ );
+
+
+ /*@GET s = ('char')
+ Output a (unique) string representation of the @tcs.
+
+ This can be used to perform comparisons between two
+ different @tcs objects.
+ This function is to be completed.
+ @*/
+ sub_command
+ ("char", 0, 0, 0, 1,
+ GMM_ASSERT1(false, "Sorry, function to be done");
+ // std::string s = ...;
+ // out.pop().from_string(s.c_str());
+ );
+
+
+ /*@GET ('display')
+ Display a short summary for a @tcs object.@*/
+ sub_command
+ ("display", 0, 0, 0, 0,
+ infomsg() << "gfContStruct object\n";
+ );
+
+ }
+
+
+ if (m_in.narg() < 2) THROW_BADARG( "Wrong number of input arguments");
+
+ getfem::cont_struct_getfem_model *ps = m_in.pop().to_cont_struct();
+ std::string init_cmd = m_in.pop().to_string();
+ std::string cmd = cmd_normalize(init_cmd);
+
+ SUBC_TAB::iterator it = subc_tab.find(cmd);
+ if (it != subc_tab.end()) {
+ check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+ it->second->arg_in_max, it->second->arg_out_min,
+ it->second->arg_out_max);
+ it->second->run(m_in, m_out, ps);
+ }
+ else bad_cmd(init_cmd);
+
+}
diff --git a/interface/src/gf_cvstruct_get.cc b/interface/src/gf_cvstruct_get.cc
index c43ff2a..f3c21e5 100644
--- a/interface/src/gf_cvstruct_get.cc
+++ b/interface/src/gf_cvstruct_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_convex_structure.h>
diff --git a/interface/src/gf_delete.cc b/interface/src/gf_delete.cc
index fa61b98..41418ea 100644
--- a/interface/src/gf_delete.cc
+++ b/interface/src/gf_delete.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/gf_eltm.cc b/interface/src/gf_eltm.cc
index da49115..02bb41a 100644
--- a/interface/src/gf_eltm.cc
+++ b/interface/src/gf_eltm.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_matelemtype.h>
@@ -28,7 +28,7 @@ using namespace getfemint;
/*@GFDOC
This object represents a type of elementary matrix. In order to obtain a
- numerical value of theses matrices, see MESH_IM:GET('eltm').
+ numerical value of these matrices, see MESH_IM:GET('eltm').
If you have very particular assembling needs, or if you just want to check
the content of an elementary matrix, this function might be useful. But
diff --git a/interface/src/gf_fem.cc b/interface/src/gf_fem.cc
index 3ffd40a..c5da1dc 100644
--- a/interface/src/gf_fem.cc
+++ b/interface/src/gf_fem.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_fem.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_fem.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint_misc.h>
#include <getfemint_pfem.h>
#include <getfemint_mesh_fem.h>
diff --git a/interface/src/gf_fem_get.cc b/interface/src/gf_fem_get.cc
index 2274963..3562495 100644
--- a/interface/src/gf_fem_get.cc
+++ b/interface/src/gf_fem_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_pfem.h>
diff --git a/interface/src/gf_geotrans.cc b/interface/src/gf_geotrans.cc
index 7d296df..4fe0329 100644
--- a/interface/src/gf_geotrans.cc
+++ b/interface/src/gf_geotrans.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_pgt.h>
diff --git a/interface/src/gf_geotrans_get.cc b/interface/src/gf_geotrans_get.cc
index a3741f3..57fda4b 100644
--- a/interface/src/gf_geotrans_get.cc
+++ b/interface/src/gf_geotrans_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_pgt.h>
diff --git a/interface/src/gf_global_function.cc b/interface/src/gf_global_function.cc
index 7c76af2..8728998 100644
--- a/interface/src/gf_global_function.cc
+++ b/interface/src/gf_global_function.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_global_function.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Luis Saavedra.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_global_function.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_workspace.h>
#include <getfemint_global_function.h>
@@ -106,7 +106,7 @@ void gf_global_function(getfemint::mexargs_in& m_in,
);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
/*@INIT GF = ('parser', @str val[, @str grad[, @str hess]])
Create a global function from strings `val`, `grad` and `hess`.@*/
sub_command
diff --git a/interface/src/gf_global_function_get.cc b/interface/src/gf_global_function_get.cc
index bc3646c..43d9a28 100644
--- a/interface/src/gf_global_function_get.cc
+++ b/interface/src/gf_global_function_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_global_function_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Luis Saavedra.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_global_function_get.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_global_function.h>
diff --git a/interface/src/gf_integ.cc b/interface/src/gf_integ.cc
index 3f6630f..3b42966 100644
--- a/interface/src/gf_integ.cc
+++ b/interface/src/gf_integ.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_integ.h>
diff --git a/interface/src/gf_integ_get.cc b/interface/src/gf_integ_get.cc
index 47c40e9..677e37a 100644
--- a/interface/src/gf_integ_get.cc
+++ b/interface/src/gf_integ_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_integ.h>
@@ -94,7 +94,7 @@ void gf_integ_get(getfemint::mexargs_in& m_in,
Return the total number of integration points.
Count the points for the volume integration, and points for
- surface integration on each face of the reference convex.<Par>
+ surface integration on each face of the reference convex.
Only for approximate methods, this has no meaning for exact
integration methods!@*/
diff --git a/interface/src/gf_levelset.cc b/interface/src/gf_levelset.cc
index 32819f7..1cdd286 100644
--- a/interface/src/gf_levelset.cc
+++ b/interface/src/gf_levelset.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_levelset.h>
@@ -31,10 +31,10 @@ using namespace getfemint;
The level-set object is represented by a primary level-set and optionally
a secondary level-set used to represent fractures (if p(x) is the primary
level-set function and s(x) is the secondary level-set, the crack is
- defined by p(x)=0 and s(x)<=0: the role of the secondary is to determine
+ defined by :math:`p(x)=0` and :math:`s(x)\leq0` : the role of the secondary is to determine
the crack front/tip).
- .. note::
+ note:
All tools listed below need the package qhull installed on your
system. This package is widely available. It computes convex hull and
@@ -74,7 +74,7 @@ getfemint::mexargs_in& in, getfemint::mexargs_out& out) {
new getfem::level_set(mm->mesh(),dim_type(degree),with_secondary);
gls = getfemint_levelset::get_from(ls);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
if (s1.size()) gls->values_from_func(0, s1);
if (s2.size()) gls->values_from_func(1, s2);
#else
diff --git a/interface/src/gf_levelset_get.cc b/interface/src/gf_levelset_get.cc
index e0adf3d..304a5b3 100644
--- a/interface/src/gf_levelset_get.cc
+++ b/interface/src/gf_levelset_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_levelset.h>
diff --git a/interface/src/gf_levelset_set.cc b/interface/src/gf_levelset_set.cc
index d42bd1f..d9d341e 100644
--- a/interface/src/gf_levelset_set.cc
+++ b/interface/src/gf_levelset_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_levelset.h>
@@ -62,7 +62,7 @@ void gf_levelset_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
}
ls.values(0).resize(ls.get_mesh_fem().nb_dof());
if (s1.size()) {
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
gls->values_from_func(0, s1);
#else
gls->values_from_poly(0, s1);
@@ -73,7 +73,7 @@ void gf_levelset_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
if (ls.has_secondary()) {
ls.values(1).resize(ls.get_mesh_fem().nb_dof());
if (s2.size()) {
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
gls->values_from_func(1, s2);
#else
gls->values_from_poly(1, s2);
diff --git a/interface/src/gf_linsolve.cc b/interface/src/gf_linsolve.cc
index a648c2e..d7ffe33 100644
--- a/interface/src/gf_linsolve.cc
+++ b/interface/src/gf_linsolve.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse.h>
#include <getfemint_precond.h>
diff --git a/interface/src/gf_mdbrick.cc b/interface/src/gf_mdbrick.cc
index a9996b8..dcb35bf 100644
--- a/interface/src/gf_mdbrick.cc
+++ b/interface/src/gf_mdbrick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdbrick.cc
\brief mdbrick construction wrapper.
diff --git a/interface/src/gf_mdbrick_get.cc b/interface/src/gf_mdbrick_get.cc
index a280f6b..8631b3e 100644
--- a/interface/src/gf_mdbrick_get.cc
+++ b/interface/src/gf_mdbrick_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdbrick_set.cc
\brief getfemint_mdbrick getter.
@@ -165,7 +165,6 @@ void gf_mdbrick_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
if (b->is_complex() != md->is_complex())
THROW_BADARG("cannot mix complex mdbricks with real mdstate");
- //gmm::iteration iter;
getfemint::interruptible_iteration iter;
std::string lsolver = "auto";
while (in.remaining() && in.front().is_string()) {
@@ -183,7 +182,7 @@ void gf_mdbrick_get(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
else THROW_BADARG("missing solver name for " << opt);
} else THROW_BADARG("bad option: " << opt);
}
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
if (!md->is_complex()) {
getfem::standard_solve(md->real_mdstate(), b->real_mdbrick(), iter,
getfem::select_linear_solver(b->real_mdbrick(), lsolver), ls);
diff --git a/interface/src/gf_mdbrick_set.cc b/interface/src/gf_mdbrick_set.cc
index ad5606d..c8e8267 100644
--- a/interface/src/gf_mdbrick_set.cc
+++ b/interface/src/gf_mdbrick_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdbrick_set.cc
\brief getfemint_mdbrick setter.
diff --git a/interface/src/gf_mdstate.cc b/interface/src/gf_mdstate.cc
index 90cda67..538dccf 100644
--- a/interface/src/gf_mdstate.cc
+++ b/interface/src/gf_mdstate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdbrick.cc
\brief mdbrick construction wrapper.
diff --git a/interface/src/gf_mdstate_get.cc b/interface/src/gf_mdstate_get.cc
index f8f17ae..a3365d4 100644
--- a/interface/src/gf_mdstate_get.cc
+++ b/interface/src/gf_mdstate_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdstate_get.cc
\brief getfemint_mdstate getter.
diff --git a/interface/src/gf_mdstate_set.cc b/interface/src/gf_mdstate_set.cc
index 0fade2c..f16b209 100644
--- a/interface/src/gf_mdstate_set.cc
+++ b/interface/src/gf_mdstate_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Y. Renard, J. Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Y. Renard, J. Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_mdstate_set.cc
\brief getfemint_mdstate setter.
diff --git a/interface/src/gf_mesh.cc b/interface/src/gf_mesh.cc
index 7768c53..46a8a4c 100644
--- a/interface/src/gf_mesh.cc
+++ b/interface/src/gf_mesh.cc
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh.cc 4118 2012-07-10 13:39:24Z renard $
#include <getfemint.h>
#include <getfemint_workspace.h>
#include <getfemint_mesh.h>
#include <getfem/getfem_import.h>
#include <getfem/getfem_regular_meshes.h>
+#include <getfem/getfem_mesher.h>
using namespace getfemint;
static void
-cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in)
+cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in, bool linear=true)
{
getfemint::size_type dim = in.remaining();
@@ -66,7 +67,8 @@ cartesian_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in)
std::vector<int> ipt(dim);
std::vector<getfem::base_node> pts(1 << (dim+1));
- bgeot::pgeometric_trans pgt = bgeot::parallelepiped_linear_geotrans(dim);
+ bgeot::pgeometric_trans pgt = linear ? bgeot::parallelepiped_linear_geotrans(dim)
+ : bgeot::parallelepiped_geotrans(dim, 1);
/* add the convexes */
for (size_type i=0; i < grid_nconvex; i++) {
@@ -212,6 +214,7 @@ regular_simplices_mesh(getfem::mesh *pmesh, getfemint::mexargs_in &in) {
p[k] += diff[k] * gmm::random(double()) * 0.2 / K;
}
}
+ pmesh->points().resort();
}
static void
@@ -352,6 +355,15 @@ void gf_mesh(getfemint::mexargs_in& m_in,
);
+ /*@INIT M = ('cartesian Q1', @dvec X, @dvec Y[, @dvec Z,..])
+ Build quickly a regular mesh of quadrangles, cubes, etc. with
+ Q1 elements.@*/
+ sub_command
+ ("cartesian Q1", 2, 32, 0, 1,
+ cartesian_mesh(pmesh, in, false);
+ );
+
+
/*@INIT M = ('triangles grid', @dvec X, @dvec Y)
Build quickly a regular mesh of triangles.
@@ -475,6 +487,45 @@ void gf_mesh(getfemint::mexargs_in& m_in,
pmesh->copy_from(*m2);
);
+ /*@INIT M = ('generate', @tmo mo, @scalar h[, @int K = 1[, @mat vertices]])
+ Call the (very) experimental mesher of Getfem on the geometry
+ represented by `mo`. please control the conformity of the produced mesh.
+ You can add the mesher by adding a priori vertices in the array
+ `vertices` which should be of size ``n x m`` where ``n`` n is the
+ dimension of the mesh and ``m`` the number of points. `h` is
+ approximate diameter of the elements. `K` is the degree of the
+ mesh ( > 1 for curved boundaries). The mesher try to optimize the
+ quality of the elements. This operation may be time consuming.
+ Note that if the mesh generation fails, because of some random
+ procedure used, it will not give necessarily the same result due
+ to random procedures used.
+ The messages send to the console by the mesh generation can be
+ desactivated using `gf_util('trace level', 2)`. More information
+ can be obtained by `gf_util('trace level', 4)`.
+ @*/
+ sub_command
+ ("generate", 2, 4, 0, 1,
+
+ const getfem::mesher_signed_distance *pmo
+ = in.pop().to_const_mesher_object();
+ double h = in.pop().to_scalar();
+ int K = 1;
+ if (in.remaining()) K = in.pop().to_integer(1,6);
+ std::vector<getfem::base_node> fixed;
+ if (in.remaining()) {
+ darray v = in.pop().to_darray(-1, -1);
+ for (int j=0; j < int(v.getn()); j++) {
+ getfem::base_node pt(v.getm());
+ gmm::copy(v.col_to_bn(j), pt);
+ fixed.push_back(pt);
+ }
+ }
+ int prefind = 1;
+ int max_iter = 400;
+
+ getfem::build_mesh(*pmesh, *pmo, h, fixed, K, -1, max_iter, prefind);
+ );
+
}
diff --git a/interface/src/gf_mesh_fem.cc b/interface/src/gf_mesh_fem.cc
index 0e44a0e..5b18a20 100644
--- a/interface/src/gf_mesh_fem.cc
+++ b/interface/src/gf_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_workspace.h>
@@ -33,7 +33,7 @@
using namespace getfemint;
/*@GFDOC
- This object represent a finite element method defined on a whole mesh.
+ This object represents a finite element method defined on a whole mesh.
@*/
@@ -176,7 +176,8 @@ void gf_mesh_fem(getfemint::mexargs_in& m_in,
/*@INIT MF = ('global function', @tmesh m, @tls ls, @CELL{@tgf GF1,...}[, @int Qdim_m])
Create a @tmf whose base functions are global function given by the
- user.@*/
+ user in the system of coordinate defined by the iso-values of the two
+ level-set function of `ls`. @*/
sub_command
("global function", 3, 4, 0, 1,
mm = in.pop().to_getfemint_mesh();
diff --git a/interface/src/gf_mesh_fem_get.cc b/interface/src/gf_mesh_fem_get.cc
index 29f2407..0815065 100644
--- a/interface/src/gf_mesh_fem_get.cc
+++ b/interface/src/gf_mesh_fem_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_fem_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh_fem_get.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint_misc.h>
#include <getfemint_mesh_fem.h>
#include <getfemint_integ.h>
@@ -449,7 +449,7 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
Lagrangian means that each base function Phi[i] is such that
Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
- the jth base function, and delta(i,j) = 1 if i==j, else 0.<Par>
+ the jth base function, and delta(i,j) = 1 if i==j, else 0.
If `CVids` is omitted, it returns 1 if all convexes in the mesh
are Lagrangian. If `CVids` is used, it returns the convex indices
@@ -908,11 +908,11 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
Examples::
- mf.eval('x[0]*x[1]') # interpolates the function 'x*y'
- mf.eval('[x[0],x[1]]') # interpolates the vector field '[x,y]'
+ mf.eval('x*y') # interpolates the function 'x*y'
+ mf.eval('[x,y]') # interpolates the vector field '[x,y]'
import numpy as np
- mf.eval('np.sin(x[0])',globals(),locals()) # interpolates the function sin(x)
+ mf.eval('np.sin(x)',globals(),locals()) # interpolates the function sin(x)
"""
P = self.basic_dof_nodes()
nbd = P.shape[1]
@@ -923,15 +923,18 @@ void gf_mesh_fem_get(getfemint::mexargs_in& m_in,
Ind = numpy.arange(0,nbd,self.qdim()) # = sdof
P = P[:,Ind]
nbd = P.shape[1] # = nb_sdof
- x = P[:,0]
- gl['x'] = P[:,0]
- lo['x'] = P[:,0]
+ vars = ('x','y','z','u','v','w')
+ nbvars = min(P.shape[0],len(vars))
+ for i in xrange(0,nbvars):
+ gl[vars[i]] = P[i,0]
+ lo[vars[i]] = P[i,0]
r = numpy.array(eval(expression,gl,lo))
Z = numpy.zeros(r.shape + (nbd,), r.dtype)
- for i in xrange(0,nbd):
- gl['x'] = P[:,i]
- lo['x'] = P[:,i]
- Z[...,i] = eval(expression,gl,lo)
+ for j in xrange(0,nbd):
+ for i in xrange(0,nbvars):
+ gl[vars[i]] = P[i,j]
+ lo[vars[i]] = P[i,j]
+ Z[...,j] = eval(expression,gl,lo)
return Z
@*/
diff --git a/interface/src/gf_mesh_fem_set.cc b/interface/src/gf_mesh_fem_set.cc
index 8847bc7..b8adcc3 100644
--- a/interface/src/gf_mesh_fem_set.cc
+++ b/interface/src/gf_mesh_fem_set.cc
@@ -1,28 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_mesh_fem.h>
#include <getfemint_gsparse.h>
#include <getfem/getfem_partial_mesh_fem.h>
+#include <gmm/gmm_range_basis.h>
using namespace getfemint;
@@ -71,15 +72,15 @@ static void set_classical_fem(getfem::mesh_fem *mf, getfemint::mexargs_in& in,
bv = in.pop().to_bit_vector(&mf->linked_mesh().convex_index(),
-config::base_index());
if (!discontinuous) {
- mf->set_classical_finite_element(bv,K);
+ mf->set_classical_finite_element(bv, K);
} else {
- mf->set_classical_discontinuous_finite_element(bv,K,alpha);
+ mf->set_classical_discontinuous_finite_element(bv, K, alpha);
}
} else {
if (!discontinuous) {
mf->set_classical_finite_element(K);
} else {
- mf->set_classical_discontinuous_finite_element(K,alpha);
+ mf->set_classical_discontinuous_finite_element(K, alpha);
}
}
}
@@ -157,7 +158,7 @@ void gf_mesh_fem_set(getfemint::mexargs_in& m_in,
Similar to MESH_FEM:SET('classical fem') except that
FEM_PK_DISCONTINUOUS is used. Param `alpha` the node inset,
- 0 <= alpha < 1, where 0 implies usual dof nodes, greater values
+ :math:`0 \leq alpha < 1`, where 0 implies usual dof nodes, greater values
move the nodes toward the center of gravity, and 1 means that all
degrees of freedom collapse on the center of gravity.@*/
sub_command
@@ -208,12 +209,26 @@ void gf_mesh_fem_set(getfemint::mexargs_in& m_in,
mf->set_reduction(s != size_type(0));
);
+ /*@SET ('reduce meshfem', @mat RM)
+ Set reduction mesh fem
+ This function selects the degrees of freedom of the finite element
+ method by selecting a set of independent vectors of the matrix RM.
+ The numer of columns of RM should corresponds to the number of degrees
+ of fredoom of the finite element method. @*/
+ sub_command
+ ("reduce meshfem", 1, 1, 0, 0,
+ dal::shared_ptr<gsparse> RM = in.pop().to_sparse();
+ std::set<size_type> cols;
+ cols.clear();
+ gmm::range_basis(RM->real_csc(), cols, 1e-12);
+ mf->reduce_to_basic_dof(cols);
+ );
/*@SET ('dof partition', @ivec DOFP)
- Change the 'dof_partition' array.
-
- `DOFP` is a vector holding a integer value for each convex of the @tmf.
- See MESH_FEM:GET('dof partition') for a description of "dof partition".@*/
+ Change the 'dof_partition' array.
+
+ `DOFP` is a vector holding a integer value for each convex of the @tmf.
+ See MESH_FEM:GET('dof partition') for a description of "dof partition".@*/
sub_command
("dof partition", 1, 1, 0, 0,
iarray v =
diff --git a/interface/src/gf_mesh_get.cc b/interface/src/gf_mesh_get.cc
index 4ce16fe..8de3acc 100644
--- a/interface/src/gf_mesh_get.cc
+++ b/interface/src/gf_mesh_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_get.cc 3559 2010-05-17 19:33:50Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh_get.cc 4114 2012-07-06 11:20:10Z renard $
#include <map>
#include <getfemint_misc.h>
#include <getfemint_mesh.h>
@@ -350,14 +350,14 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
dal::bit_vector pids;
for (size_type j=0; j < v.getn(); j++) {
- size_type cv = v(0,j);
- short_type f = short_type(v(1,j));
+ size_type cv = v(0,j) - config::base_index();
+ short_type f = short_type(v(1,j) - config::base_index());
if (pmesh->convex_index().is_in(cv)) {
- if (short_type(-1)==f){// this works in python only, please porting it to matlab.
+ if (short_type(-1)==f){
for (unsigned i=0; i < pmesh->nb_points_of_convex(cv); ++i)
pids.add(pmesh->ind_points_of_convex(cv)[i]);
- } else if ( 0. <= f && f <= pmesh->structure_of_convex(cv)->nb_faces()){
+ } else if (f < pmesh->structure_of_convex(cv)->nb_faces()) {
for (unsigned i=0; i < pmesh->structure_of_convex(cv)->nb_points_of_face(f); ++i)
pids.add(pmesh->ind_points_of_face_of_convex(cv,f)[i]);
}
@@ -396,16 +396,16 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
("pid in regions", 1, 1, 0, 1,
check_empty_mesh(pmesh);
- dal::bit_vector rlst = in.pop().to_bit_vector();
+ dal::bit_vector rlst = in.pop().to_bit_vector(&pmesh->regions_index(), 0);
dal::bit_vector pids;
for (dal::bv_visitor r(rlst); !r.finished(); ++r) {
if (pmesh->regions_index().is_in(r)) {
for (getfem::mr_visitor i(pmesh->region(r)); !i.finished(); ++i) {
- if (short_type(-1)==i.f()){// this works in python only, please porting it to matlab.
+ if (short_type(-1)==i.f()) {
for (unsigned j=0; j < pmesh->nb_points_of_convex(i.cv()); ++j)
pids.add(pmesh->ind_points_of_convex(i.cv())[j]);
- } else{
+ } else {
for (unsigned j=0; j < pmesh->structure_of_convex(i.cv())->nb_points_of_face(i.f()); ++j)
pids.add(pmesh->ind_points_of_face_of_convex(i.cv(),i.f())[j]);
}
@@ -808,7 +808,7 @@ void gf_mesh_get(getfemint::mexargs_in& m_in,
/*@GET Q = ('quality'[, @ivec CVIDs])
- Return an estimation of the quality of each convex (0 <= Q <= 1).@*/
+ Return an estimation of the quality of each convex (:math:`0 \leq Q \leq 1`).@*/
sub_command
("quality", 0, 1, 0, 1,
dal::bit_vector bv;
diff --git a/interface/src/gf_mesh_im.cc b/interface/src/gf_mesh_im.cc
index decdd35..83a64e7 100644
--- a/interface/src/gf_mesh_im.cc
+++ b/interface/src/gf_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_workspace.h>
@@ -31,7 +31,7 @@ using namespace getfemint;
void gf_mesh_im_set_integ(getfem::mesh_im *mim, getfemint::mexargs_in& in);
/*@GFDOC
- This object represent an integration method defined on a whole mesh (an
+ This object represents an integration method defined on a whole mesh (an
potentialy on its boundaries).
@*/
@@ -132,7 +132,13 @@ void gf_mesh_im(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
The `where` argument define the domain of integration with respect to
the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
- 'BOUNDARY'.@*/
+ 'BOUNDARY'.
+
+ CAUTION: this integration method will be defined only on the element
+ cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+ it is mandatory to use the method ``MESH_IM:SET('integ')`` to define
+ the integration method on the remaining elements.
+ @*/
sub_command
("levelset", 3, 5, 0, 1,
getfemint_mesh_levelset *gmls = in.pop().to_getfemint_mesh_levelset();
diff --git a/interface/src/gf_mesh_im_get.cc b/interface/src/gf_mesh_im_get.cc
index 92474f2..56ce86f 100644
--- a/interface/src/gf_mesh_im_get.cc
+++ b/interface/src/gf_mesh_im_get.cc
@@ -1,29 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_mesh_im.h>
#include <getfemint_integ.h>
/*
- $Id: gf_mesh_im_get.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+ $Id: gf_mesh_im_get.cc 4114 2012-07-06 11:20:10Z renard $
*/
diff --git a/interface/src/gf_mesh_im_set.cc b/interface/src/gf_mesh_im_set.cc
index 660c68a..c98bb98 100644
--- a/interface/src/gf_mesh_im_set.cc
+++ b/interface/src/gf_mesh_im_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_mesh_im.h>
@@ -104,8 +104,9 @@ void gf_mesh_im_set(getfemint::mexargs_in& in, getfemint::mexargs_out& out)
integration method with an integration method handle `im` obtained
via INTEG:INIT('IM_SOMETHING'), or to let getfem choose a suitable
integration method with `im_degree` (choosen such that polynomials
- of `degree <= im_degree` are exactly integrated. If `im_degree=-1`,
- then the dummy integration method IM_NONE will be used.)@*/
+ of :math:`\text{degree} \leq \text{im\_degree}` are exactly integrated.
+ If `im_degree=-1`, then the dummy integration method IM_NONE will
+ be used.)@*/
gf_mesh_im_set_integ(mim, in);
} else if (check_cmd(cmd, "adapt", in, out, 0, 0, 0, 0)) {
/*@SET ('adapt')
diff --git a/interface/src/gf_mesh_levelset.cc b/interface/src/gf_mesh_levelset.cc
index 07647be..727b194 100644
--- a/interface/src/gf_mesh_levelset.cc
+++ b/interface/src/gf_mesh_levelset.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh_levelset.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_mesh_levelset.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/gf_mesh_levelset_get.cc b/interface/src/gf_mesh_levelset_get.cc
index ad8dc2d..7534087 100644
--- a/interface/src/gf_mesh_levelset_get.cc
+++ b/interface/src/gf_mesh_levelset_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh_levelset_get.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_mesh_levelset.h>
#include <getfemint_levelset.h>
diff --git a/interface/src/gf_mesh_levelset_set.cc b/interface/src/gf_mesh_levelset_set.cc
index 242b65c..f43856d 100644
--- a/interface/src/gf_mesh_levelset_set.cc
+++ b/interface/src/gf_mesh_levelset_set.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_mesh_levelset_set.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesh_levelset_set.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_mesh_levelset.h>
#include <getfemint_levelset.h>
diff --git a/interface/src/gf_mesh_set.cc b/interface/src/gf_mesh_set.cc
index 33d87af..9975e00 100644
--- a/interface/src/gf_mesh_set.cc
+++ b/interface/src/gf_mesh_set.cc
@@ -1,47 +1,51 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_misc.h>
#include <getfemint_mesh.h>
using namespace getfemint;
-static void check_empty_mesh(const getfem::mesh *pmesh)
-{
+static void check_empty_mesh(const getfem::mesh *pmesh) {
if (pmesh->dim() == bgeot::dim_type(-1) || pmesh->dim() == 0) {
THROW_ERROR( "mesh object has an invalid dimension");
}
}
-static void set_region(getfem::mesh &mesh, getfemint::mexargs_in& in)
-{
+static void set_region(getfem::mesh &mesh, getfemint::mexargs_in& in) {
unsigned boundary_num = in.pop().to_integer(1);
- iarray v = in.pop().to_iarray(2,-1);
+ // iarray v = in.pop().to_iarray(2,-1);
+
+ iarray v = in.pop().to_iarray();
+
+ if (v.getm() < 1 || v.getm() > 2 || v.getp() != 1 || v.getq() != 1)
+ THROW_BADARG( "Invalid format for the convex or face list");
getfem::mesh_region &rg = mesh.region(boundary_num);
/* loop over the edges of mxEdge */
for (size_type j=0; j < v.getn(); j++) {
size_type cv = size_type(v(0,j))-config::base_index();
- size_type f = size_type(v(1,j))-config::base_index();
+ size_type f = v.getm() == 2 ? (size_type(v(1,j))-config::base_index())
+ : size_type(-1);
if (!mesh.convex_index().is_in(cv)) {
THROW_BADARG( "Invalid convex number '" << cv+config::base_index() << "' at column " << j+config::base_index());
}
@@ -280,13 +284,16 @@ void gf_mesh_set(getfemint::mexargs_in& m_in,
/*@SET ('region', @int rnum, @dmat CVFIDs)
- Assigns the region number `rnum` to the convex faces stored in each
- column of the matrix `CVFIDs`.
+ Assigns the region number `rnum` to the convex faces (or convexes)
+ stored in each column of the matrix `CVFIDs`.
The first row of `CVFIDs` contains a convex #ids, and the second row
contains a face number in the convex (or @MATLAB{0}@SCILAB{0}@PYTHON{``-1``}
for the whole convex (regions are usually used to store a list of
- convex faces, but you may also use them to store a list of convexes).@*/
+ convex faces, but you may also use them to store a list of convexes).
+
+ If a vector is provided (or a one row matrix) the region will represent
+ the corresponding set of convex.@*/
sub_command
("region", 2, 2, 0, 0,
set_region(*pmesh, in);
diff --git a/interface/src/gf_mesher_object.cc b/interface/src/gf_mesher_object.cc
new file mode 100644
index 0000000..d2506a7
--- /dev/null
+++ b/interface/src/gf_mesher_object.cc
@@ -0,0 +1,280 @@
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_mesher_object.h>
+#include <getfem/getfem_mesher.h>
+
+
+
+
+
+using namespace getfemint;
+
+/*@GFDOC
+ This object represents a geometric object to be meshed by the (very)
+ experimental meshing procedure of Getfem.
+@*/
+
+
+// Object for the declaration of a new sub-command.
+
+typedef getfemint_mesher_object *pgetfemint_mesher_object;
+
+struct sub_mesher_object : virtual public dal::static_stored_object {
+ int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+ virtual void run(getfemint::mexargs_in& in,
+ getfemint::mexargs_out& out,
+ pgetfemint_mesher_object &pmo) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_mesher_object> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+ struct subc : public sub_mesher_object { \
+ virtual void run(getfemint::mexargs_in& in, \
+ getfemint::mexargs_out& out, \
+ pgetfemint_mesher_object &pmo) \
+ { dummy_func(in); dummy_func(out); code } \
+ }; \
+ psub_command psubc = new subc; \
+ psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
+ psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
+ subc_tab[cmd_normalize(name)] = psubc; \
+ }
+
+
+
+void gf_mesher_object(getfemint::mexargs_in& m_in,
+ getfemint::mexargs_out& m_out) {
+ typedef std::map<std::string, psub_command > SUBC_TAB;
+ static SUBC_TAB subc_tab;
+
+ if (subc_tab.size() == 0) {
+
+ /*@INIT MF = ('ball', @vec center, @scalar radius)
+ Represents a ball of corresponding center and radius.
+ @*/
+ sub_command
+ ("ball", 2, 2, 0, 1,
+ darray center = in.pop().to_darray();
+ double radius = in.pop().to_scalar();
+
+ getfem::base_node bncenter(gmm::vect_size(center));
+ gmm::copy(center, bncenter);
+
+ getfem::mesher_signed_distance *ball
+ = new getfem::mesher_ball(bncenter, radius);
+
+ pmo = getfemint_mesher_object::get_from(ball);
+ );
+
+ /*@INIT MF = ('half space', @vec origin, @vec normal_vector)
+ Represents an half space delimited by the plane which contains the
+ origin and normal to `normal_vector`. The selected part is the part
+ in the direction of the normal vector. This allows to cut a geometry
+ with a plane for instance to build a polygon or a polyhedron.
+ @*/
+ sub_command
+ ("half space", 2, 2, 0, 1,
+ darray origin = in.pop().to_darray();
+ darray n = in.pop().to_darray();
+
+ getfem::base_node bnorigin(gmm::vect_size(origin));
+ gmm::copy(origin, bnorigin);
+ getfem::base_node bnn(gmm::vect_size(n));
+ gmm::copy(n, bnn);
+
+ getfem::mesher_signed_distance *half
+ = new getfem::mesher_half_space(bnorigin, bnn);
+
+ pmo = getfemint_mesher_object::get_from(half);
+ );
+
+ /*@INIT MF = ('cylinder', @vec origin, @vec n, @scalar length, @scalar radius)
+ Represents a cylinder (in any dimension) of a certain radius whose axis is determined by the origin, a vector `n` and a certain length.
+ @*/
+ sub_command
+ ("cylinder", 4, 4, 0, 1,
+ darray origin = in.pop().to_darray();
+ darray n = in.pop().to_darray();
+ double length = in.pop().to_scalar();
+ double radius = in.pop().to_scalar();
+
+ getfem::base_node bnorigin(gmm::vect_size(origin));
+ gmm::copy(origin, bnorigin);
+ getfem::base_node bnn(gmm::vect_size(n));
+ gmm::copy(n, bnn);
+
+ getfem::mesher_signed_distance *cyl
+ = new getfem::mesher_cylinder(bnorigin, bnn, length, radius);
+
+ pmo = getfemint_mesher_object::get_from(cyl);
+ );
+
+ /*@INIT MF = ('cone', @vec origin, @vec n, @scalar length, @scalar half_angle)
+ Represents a cone (in any dimension) of a certain half-angle (in radians) whose axis is determined by the origin, a vector `n` and a certain length.
+ @*/
+ sub_command
+ ("cone", 4, 4, 0, 1,
+ darray origin = in.pop().to_darray();
+ darray n = in.pop().to_darray();
+ double length = in.pop().to_scalar();
+ double half_angle = in.pop().to_scalar();
+
+ getfem::base_node bnorigin(gmm::vect_size(origin));
+ gmm::copy(origin, bnorigin);
+ getfem::base_node bnn(gmm::vect_size(n));
+ gmm::copy(n, bnn);
+
+ getfem::mesher_signed_distance *cone
+ = new getfem::mesher_cone(bnorigin, bnn, length, half_angle);
+
+ pmo = getfemint_mesher_object::get_from(cone);
+ );
+
+ /*@INIT MF = ('torus', @scalar R, @scalar r)
+ Represents a torus in 3d of axis along the z axis with a great radius
+ equal to `R` and small radius equal to `r`. For the moment, the
+ possibility to change the axis is not given.
+ @*/
+ sub_command
+ ("torus", 2, 2, 0, 1,
+ double R = in.pop().to_scalar();
+ double r = in.pop().to_scalar();
+
+ getfem::mesher_signed_distance *torus
+ = new getfem::mesher_torus(R, r);
+
+ pmo = getfemint_mesher_object::get_from(torus);
+ );
+
+
+ /*@INIT MF = ('rectangle', @vec rmin, @vec rmax)
+ Represents a rectangle (or parallelepiped in 3D) parallel to the axes.
+ @*/
+ sub_command
+ ("rectangle", 2, 2, 0, 1,
+ darray rmin = in.pop().to_darray();
+ darray rmax = in.pop().to_darray();
+
+ size_type N = gmm::vect_size(rmin);
+ GMM_ASSERT1(N == gmm::vect_size(rmax),
+ "Extreme points should be the same lenght");
+
+ getfem::base_node rrmin(N); getfem::base_node rrmax(N);
+ gmm::copy(rmin, rrmin); gmm::copy(rmax, rrmax);
+
+ getfem::mesher_signed_distance *rectangle
+ = new getfem::mesher_rectangle(rrmin, rrmax);
+
+ pmo = getfemint_mesher_object::get_from(rectangle);
+ );
+
+
+ /*@INIT MF = ('intersect', @tmo object1 , @tmo object2, ...)
+ Intersection of several objects.
+ @*/
+ sub_command
+ ("intersect", 2, 100, 0, 1,
+
+ std::vector<const getfem::mesher_signed_distance *> vd;
+
+ const getfem::mesher_signed_distance *psd
+ = in.pop().to_const_mesher_object();
+
+ vd.push_back(psd);
+
+ while (in.remaining()) {
+ psd = in.pop().to_const_mesher_object();
+ vd.push_back(psd);
+ }
+
+ getfem::mesher_signed_distance *psd2
+ = new getfem::mesher_intersection(vd);
+ pmo = getfemint_mesher_object::get_from(psd2);
+ );
+
+ /*@INIT MF = ('union', @tmo object1 , @tmo object2, ...)
+ Union of several objects.
+ @*/
+ sub_command
+ ("union", 2, 100, 0, 1,
+
+ std::vector<const getfem::mesher_signed_distance *> vd;
+
+ const getfem::mesher_signed_distance *psd
+ = in.pop().to_const_mesher_object();
+
+ vd.push_back(psd);
+
+ while (in.remaining()) {
+ psd = in.pop().to_const_mesher_object();
+ vd.push_back(psd);
+ }
+
+ getfem::mesher_signed_distance *psd2 = new getfem::mesher_union(vd);
+ pmo = getfemint_mesher_object::get_from(psd2);
+ );
+
+ /*@INIT MF = ('set minus', @tmo object1 , @tmo object2)
+ Geometric object being object1 minus object2.
+ @*/
+ sub_command
+ ("set minus", 2, 100, 0, 1,
+
+ std::vector<const getfem::mesher_signed_distance *> vd;
+
+ const getfem::mesher_signed_distance *psd1
+ = in.pop().to_const_mesher_object();
+ const getfem::mesher_signed_distance *psd2
+ = in.pop().to_const_mesher_object();
+
+ getfem::mesher_signed_distance *psd
+ = new getfem::mesher_setminus(*psd1, *psd2);
+ pmo = getfemint_mesher_object::get_from(psd);
+ );
+ }
+
+
+ if (m_in.narg() < 1) THROW_BADARG("Wrong number of input arguments");
+ getfemint_mesher_object *pmo = NULL;
+
+ std::string init_cmd = m_in.pop().to_string();
+ std::string cmd = cmd_normalize(init_cmd);
+
+
+ SUBC_TAB::iterator it = subc_tab.find(cmd);
+ if (it != subc_tab.end()) {
+ check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+ it->second->arg_in_max, it->second->arg_out_min,
+ it->second->arg_out_max);
+ it->second->run(m_in, m_out, pmo);
+ }
+ else bad_cmd(init_cmd);
+
+
+ m_out.pop().from_object_id(pmo->get_id(), MESHER_OBJECT_CLASS_ID);
+}
diff --git a/interface/src/gf_mesher_object_get.cc b/interface/src/gf_mesher_object_get.cc
new file mode 100644
index 0000000..b2a53df
--- /dev/null
+++ b/interface/src/gf_mesher_object_get.cc
@@ -0,0 +1,115 @@
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_mesher_object_get.cc 3468 2010-02-24 20:12:15Z renard $
+
+#include <getfemint_misc.h>
+#include <getfemint_workspace.h>
+#include <getfemint_mesher_object.h>
+#include <getfem/getfem_mesher.h>
+
+using namespace getfemint;
+
+/*@GFDOC
+ General function for querying information about mesher_object objects.
+@*/
+
+
+// Object for the declaration of a new sub-command.
+
+struct sub_gf_mesher_object_get : virtual public dal::static_stored_object {
+ int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
+ virtual void run(getfemint::mexargs_in& in,
+ getfemint::mexargs_out& out,
+ getfem::mesher_signed_distance *paf) = 0;
+};
+
+typedef boost::intrusive_ptr<sub_gf_mesher_object_get> psub_command;
+
+// Function to avoid warning in macro with unused arguments.
+template <typename T> static inline void dummy_func(T &) {}
+
+#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
+ struct subc : public sub_gf_mesher_object_get { \
+ virtual void run(getfemint::mexargs_in& in, \
+ getfemint::mexargs_out& out, \
+ getfem::mesher_signed_distance *paf) \
+ { dummy_func(in); dummy_func(out); dummy_func(paf); code } \
+ }; \
+ psub_command psubc = new subc; \
+ psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
+ psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
+ subc_tab[cmd_normalize(name)] = psubc; \
+ }
+
+
+
+void gf_mesher_object_get(getfemint::mexargs_in& m_in,
+ getfemint::mexargs_out& m_out) {
+ typedef std::map<std::string, psub_command > SUBC_TAB;
+ static SUBC_TAB subc_tab;
+
+ if (subc_tab.size() == 0) {
+
+
+ /*@GET s = ('char')
+ Output a (unique) string representation of the @tmo.
+
+ This can be used to perform comparisons between two
+ different @tmo objects.
+ This function is to be completed.
+ @*/
+ sub_command
+ ("char", 0, 0, 0, 1,
+ GMM_ASSERT1(false, "Sorry, function to be done");
+ // std::string s = ...;
+ // out.pop().from_string(s.c_str());
+ );
+
+
+ /*@GET ('display')
+ displays a short summary for a @tmo object.@*/
+ sub_command
+ ("display", 0, 0, 0, 0,
+ infomsg() << "gfMesherObject object\n";
+ );
+
+
+ }
+
+
+
+ if (m_in.narg() < 2) THROW_BADARG( "Wrong number of input arguments");
+
+ getfem::mesher_signed_distance *paf = m_in.pop().to_mesher_object();
+ std::string init_cmd = m_in.pop().to_string();
+ std::string cmd = cmd_normalize(init_cmd);
+
+
+ SUBC_TAB::iterator it = subc_tab.find(cmd);
+ if (it != subc_tab.end()) {
+ check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
+ it->second->arg_in_max, it->second->arg_out_min,
+ it->second->arg_out_max);
+ it->second->run(m_in, m_out, paf);
+ }
+ else bad_cmd(init_cmd);
+
+}
diff --git a/interface/src/gf_model.cc b/interface/src/gf_model.cc
index 40bfa75..a2a1193 100644
--- a/interface/src/gf_model.cc
+++ b/interface/src/gf_model.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_model.cc
\brief model construction wrapper.
diff --git a/interface/src/gf_model_get.cc b/interface/src/gf_model_get.cc
index 80ab1e6..b3eaf35 100644
--- a/interface/src/gf_model_get.cc
+++ b/interface/src/gf_model_get.cc
@@ -1,29 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_model_get.cc
\brief getfemint_model getter.
*/
#include <getfemint.h>
+#include <getfemint_workspace.h>
#include <getfemint_misc.h>
#include <getfemint_models.h>
#include <getfem/getfem_model_solvers.h>
@@ -64,8 +65,8 @@ using namespace getfemint;
struct sub_gf_md_get : virtual public dal::static_stored_object {
int arg_in_min, arg_in_max, arg_out_min, arg_out_max;
virtual void run(getfemint::mexargs_in& in,
- getfemint::mexargs_out& out,
- getfemint_model *md) = 0;
+ getfemint::mexargs_out& out,
+ getfemint_model *md) = 0;
};
typedef boost::intrusive_ptr<sub_gf_md_get> psub_command;
@@ -74,21 +75,21 @@ typedef boost::intrusive_ptr<sub_gf_md_get> psub_command;
template <typename T> static inline void dummy_func(T &) {}
#define sub_command(name, arginmin, arginmax, argoutmin, argoutmax, code) { \
- struct subc : public sub_gf_md_get { \
- virtual void run(getfemint::mexargs_in& in, \
- getfemint::mexargs_out& out, \
- getfemint_model *md) \
- { dummy_func(in); dummy_func(out); dummy_func(md); code } \
- }; \
- psub_command psubc = new subc; \
- psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
- psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
- subc_tab[cmd_normalize(name)] = psubc; \
- }
+ struct subc : public sub_gf_md_get { \
+ virtual void run(getfemint::mexargs_in& in, \
+ getfemint::mexargs_out& out, \
+ getfemint_model *md) \
+ { dummy_func(in); dummy_func(out); dummy_func(md); code } \
+ }; \
+ psub_command psubc = new subc; \
+ psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
+ psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
+ subc_tab[cmd_normalize(name)] = psubc; \
+ }
void gf_model_get(getfemint::mexargs_in& m_in,
- getfemint::mexargs_out& m_out) {
+ getfemint::mexargs_out& m_out) {
typedef std::map<std::string, psub_command > SUBC_TAB;
static SUBC_TAB subc_tab;
@@ -102,6 +103,13 @@ void gf_model_get(getfemint::mexargs_in& m_in,
);
+ /*@GET T = ('nbdof')
+ Return the total number of degrees of freedom of the model.@*/
+ sub_command
+ ("nbdof", 0, 0, 0, 1,
+ out.pop().from_integer(int(md->model().nb_dof()));
+ );
+
/*@GET T = ('tangent_matrix')
Return the tangent matrix stored in the model .@*/
sub_command
@@ -118,6 +126,38 @@ void gf_model_get(getfemint::mexargs_in& m_in,
);
+ /*@GET ('brick term rhs', @int ind_brick[, @int ind_term, @int sym, @int ind_iter])
+ Gives the access to the part of the right hand side of a term
+ of a particular nonlinear brick. Does not account of the eventual
+ time dispatcher. An assembly of the rhs has to be done first.
+ `ind_brick` is the brick index. `ind_term` is the index of the
+ term inside the brick (default value : @MATLAB{1}@PYTHON{0}@SCILAB{1}).
+ `sym` is to access to the second right hand side of for symmetric
+ terms acting on two different variables (default is 0).
+ `ind_iter` is the iteration number when time dispatchers are
+ used (default is @MATLAB{1}@PYTHON{0}@SCILAB{1}).
+ @*/
+ sub_command
+ ("brick term rhs", 1, 4, 0, 1,
+
+ size_type ind_brick = in.pop().to_integer() - config::base_index();
+ size_type ind_term = 0;
+ if (in.remaining())
+ ind_term = in.pop().to_integer() - config::base_index();
+ bool sym = false;
+ if (in.remaining())
+ sym = (in.pop().to_integer() != 0);
+ size_type ind_iter = 0;
+ if (in.remaining())
+ ind_iter = in.pop().to_integer() - config::base_index();
+
+ if (md->model().is_complex())
+ out.pop().from_dcvector(md->model().complex_brick_term_rhs(ind_brick, ind_term, sym, ind_iter));
+ else
+ out.pop().from_dcvector(md->model().real_brick_term_rhs(ind_brick, ind_term, sym, ind_iter));
+ );
+
+
/*@GET z = ('memsize')
Return a rough approximation of the amount of memory (in bytes) used by
the model.@*/
@@ -150,9 +190,24 @@ void gf_model_get(getfemint::mexargs_in& m_in,
std::string name = in.pop().to_string();
size_type niter = 0;
if (in.remaining())
- niter = in.pop().to_integer(0,10) - config::base_index();
+ niter = in.pop().to_integer(0,10) - config::base_index();
RETURN_VECTOR(real_variable(name, niter),
- complex_variable(name, niter));
+ complex_variable(name, niter));
+ );
+
+
+ /*@GET mf = ('mesh fem of variable', @str name)
+ Gives access to the `mesh_fem` of a variable or data.@*/
+ sub_command
+ ("mesh fem of variable", 1, 1, 0, 1,
+ std::string name = in.pop().to_string();
+ const getfem::mesh_fem &mf = md->model().mesh_fem_of_variable(name);
+ getfem::mesh_fem *mmf = const_cast<getfem::mesh_fem *>(&mf);
+ getfem_object *o =
+ getfemint::workspace().object(getfem_object::internal_key_type(mmf));
+ getfemint_mesh_fem *gmf = getfemint_mesh_fem::get_from(mmf);
+ if (!o) workspace().set_dependance(gmf, md);
+ out.pop().from_object_id(gmf->get_id(), MESHFEM_CLASS_ID);
);
@@ -162,7 +217,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
this function has an undefined behavior@*/
sub_command
("mult varname Dirichlet", 1, 1, 0, 1,
- size_type ind_brick = in.pop().to_integer();
+ size_type ind_brick = in.pop().to_integer() - config::base_index();
out.pop().from_string
(getfem::mult_varname_Dirichlet(md->model(), ind_brick).c_str());
);
@@ -183,18 +238,18 @@ void gf_model_get(getfemint::mexargs_in& m_in,
/*@GET V = ('from variables')
Return the vector of all the degrees of freedom of the model consisting
- of the concatenation of the variables of the model (usefull
+ of the concatenation of the variables of the model (useful
to solve your problem with you own solver). @*/
sub_command
("from variables", 0, 0, 0, 1,
if (!md->is_complex()) {
- std::vector<double> V(md->model().nb_dof());
- md->model().from_variables(V);
- out.pop().from_dcvector(V);
+ std::vector<double> V(md->model().nb_dof());
+ md->model().from_variables(V);
+ out.pop().from_dcvector(V);
} else {
- std::vector<std::complex<double> > V(md->model().nb_dof());
- md->model().from_variables(V);
- out.pop().from_dcvector(V);
+ std::vector<std::complex<double> > V(md->model().nb_dof());
+ md->model().from_variables(V);
+ out.pop().from_dcvector(V);
}
);
@@ -205,7 +260,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
the pseudo_potential is returned).
The default is to build the whole
- tangent linear system (matrix and rhs). This function is usefull
+ tangent linear system (matrix and rhs). This function is useful
to solve your problem with you own solver. @*/
sub_command
("assembly", 0, 1, 0, 1,
@@ -213,25 +268,25 @@ void gf_model_get(getfemint::mexargs_in& m_in,
if (in.remaining()) option = in.pop().to_string();
getfem::model::build_version version = getfem::model::BUILD_ALL;
if (cmd_strmatch(option, "build all") ||
- cmd_strmatch(option, "build_all"))
- version = getfem::model::BUILD_ALL;
+ cmd_strmatch(option, "build_all"))
+ version = getfem::model::BUILD_ALL;
else if (cmd_strmatch(option, "build rhs") ||
- cmd_strmatch(option, "build_rhs"))
- version = getfem::model::BUILD_RHS;
+ cmd_strmatch(option, "build_rhs"))
+ version = getfem::model::BUILD_RHS;
else if (cmd_strmatch(option, "build matrix") ||
- cmd_strmatch(option, "build_matrix"))
- version = getfem::model::BUILD_MATRIX;
+ cmd_strmatch(option, "build_matrix"))
+ version = getfem::model::BUILD_MATRIX;
else if (cmd_strmatch(option, "pseudo potential") ||
- cmd_strmatch(option, "pseudo_potential"))
- version = getfem::model::BUILD_PSEUDO_POTENTIAL;
+ cmd_strmatch(option, "pseudo_potential"))
+ version = getfem::model::BUILD_PSEUDO_POTENTIAL;
else THROW_BADARG("bad option: " << option);
md->model().assembly(version);
if (version == getfem::model::BUILD_PSEUDO_POTENTIAL)
- out.pop().from_scalar(md->model().pseudo_potential());
+ out.pop().from_scalar(md->model().pseudo_potential());
);
- /*@GET ('solve'[, ...])
+ /*@GET @CELL{nbit, converged} = ('solve'[, ...])
Run the standard getfem solver.
Note that you should be able to use your own solver if you want
@@ -247,6 +302,9 @@ void gf_model_get(getfemint::mexargs_in& m_in,
set the maximum iterations numbers.
- 'max_res', @float RES
set the target residual value.
+ - 'diverged_res', @float RES
+ set the threshold value of the residual beyond which the iterative
+ method is considered to diverge (default is 1e200).
- 'lsolver', @str SOLVER_NAME
select explicitely the solver used for the linear systems (the
default value is 'auto', which lets getfem choose itself).
@@ -255,13 +313,23 @@ void gf_model_get(getfemint::mexargs_in& m_in,
- 'lsearch', @str LINE_SEARCH_NAME
select explicitely the line search method used for the linear systems (the
default value is 'default').
- Possible values are 'simplest', 'systematic'.
+ Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
- 'with pseudo potential'
for nonlinear problems, the criterion of the line search will
be a pseudo potential instead of the residual. Still experimental since
- not all bricks define a pseudo potential. @*/
+ not all bricks define a pseudo potential.
+
+ Return the number of iterations, if a iterative method is used.
+
+ Note that it is possible to disable some variables
+ (see MODEL:SET('disable variable') ) in order to
+ solve the problem only with respect to a subset of variables (the
+ disabled variables are the considered as data) for instance to
+ replace the global Newton strategy with a fixed point one.
+
+ @*/
sub_command
- ("solve", 0, 15, 0, 0,
+ ("solve", 0, 15, 0, 2,
getfemint::interruptible_iteration iter;
std::string lsolver = "auto";
std::string lsearch = "default";
@@ -270,61 +338,145 @@ void gf_model_get(getfemint::mexargs_in& m_in,
scalar_type alpha_min = 1.0/1000.0;
scalar_type alpha_max_ratio = 6.0/5.0;
while (in.remaining() && in.front().is_string()) {
- std::string opt = in.pop().to_string();
- if (cmd_strmatch(opt, "noisy")) iter.set_noisy(1);
- else if (cmd_strmatch(opt, "with pseudo potential"))
- with_pseudo_pot = true;
- else if (cmd_strmatch(opt, "very noisy") ||
- cmd_strmatch(opt, "very_noisy")) iter.set_noisy(2);
- else if (cmd_strmatch(opt, "max_iter")) {
- if (in.remaining()) iter.set_maxiter(in.pop().to_integer());
- else THROW_BADARG("missing value for " << opt);
- } else if (cmd_strmatch(opt, "max_res")) {
- if (in.remaining()) iter.set_resmax(in.pop().to_scalar());
- else THROW_BADARG("missing value for " << opt);
- } else if (cmd_strmatch(opt, "lsolver")) {
- if (in.remaining()) lsolver = in.pop().to_string();
- else THROW_BADARG("missing solver name for " << opt);
- } else if (cmd_strmatch(opt, "lsearch")) {
- if (in.remaining()) lsearch = in.pop().to_string();
- else THROW_BADARG("missing line search name for " << opt);
- } else if (cmd_strmatch(opt, "alpha mult")) {
- if (in.remaining()) alpha_mult = in.pop().to_scalar();
- else THROW_BADARG("missing line search name for " << opt);
- } else if (cmd_strmatch(opt, "alpha min")) {
- if (in.remaining()) alpha_min = in.pop().to_scalar();
- else THROW_BADARG("missing line search name for " << opt);
- } else if (cmd_strmatch(opt, "alpha max ratio")) {
- if (in.remaining()) alpha_max_ratio = in.pop().to_scalar();
- else THROW_BADARG("missing line search name for " << opt);
- } else THROW_BADARG("bad option: " << opt);
+ std::string opt = in.pop().to_string();
+ if (cmd_strmatch(opt, "noisy")) iter.set_noisy(1);
+ else if (cmd_strmatch(opt, "with pseudo potential"))
+ with_pseudo_pot = true;
+ else if (cmd_strmatch(opt, "very noisy") ||
+ cmd_strmatch(opt, "very_noisy")) iter.set_noisy(2);
+ else if (cmd_strmatch(opt, "max_iter")) {
+ if (in.remaining()) iter.set_maxiter(in.pop().to_integer());
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "max_res")) {
+ if (in.remaining()) iter.set_resmax(in.pop().to_scalar());
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "diverged_res")) {
+ if (in.remaining()) iter.set_diverged_residual(in.pop().to_scalar());
+ else THROW_BADARG("missing value for " << opt);
+ } else if (cmd_strmatch(opt, "lsolver")) {
+ if (in.remaining()) lsolver = in.pop().to_string();
+ else THROW_BADARG("missing solver name for " << opt);
+ } else if (cmd_strmatch(opt, "lsearch")) {
+ if (in.remaining()) lsearch = in.pop().to_string();
+ else THROW_BADARG("missing line search name for " << opt);
+ } else if (cmd_strmatch(opt, "alpha mult")) {
+ if (in.remaining()) alpha_mult = in.pop().to_scalar();
+ else THROW_BADARG("missing line search name for " << opt);
+ } else if (cmd_strmatch(opt, "alpha min")) {
+ if (in.remaining()) alpha_min = in.pop().to_scalar();
+ else THROW_BADARG("missing line search name for " << opt);
+ } else if (cmd_strmatch(opt, "alpha max ratio")) {
+ if (in.remaining()) alpha_max_ratio = in.pop().to_scalar();
+ else THROW_BADARG("missing line search name for " << opt);
+ } else THROW_BADARG("bad option: " << opt);
}
-
- gmm::default_newton_line_search default_ls(size_type(-1), alpha_mult);
- gmm::simplest_newton_line_search simplest_ls(size_type(-1), alpha_max_ratio, alpha_min, alpha_mult);
- gmm::systematic_newton_line_search systematic_ls(size_type(-1), alpha_min, alpha_mult);
- gmm::abstract_newton_line_search *ls = 0;
+ getfem::default_newton_line_search default_ls;
+ getfem::simplest_newton_line_search simplest_ls(size_type(-1), alpha_max_ratio, alpha_min, alpha_mult);
+ getfem::systematic_newton_line_search systematic_ls(size_type(-1), alpha_min, alpha_mult);
+ getfem::basic_newton_line_search basic_ls(size_type(-1), alpha_min, alpha_mult);
+ getfem::quadratic_newton_line_search quadratic_ls(size_type(-1));
+
+ getfem::abstract_newton_line_search *ls = 0;
if (lsearch == "default")
- ls = &default_ls;
+ ls = &default_ls;
else if (lsearch == "simplest")
- ls = &simplest_ls;
- else //lsearch == "systematic"
- ls = &systematic_ls;
+ ls = &simplest_ls;
+ else if (lsearch == "basic")
+ ls = &basic_ls;
+ else if (lsearch == "systematic")
+ ls = &systematic_ls;
+ else if (lsearch == "quadratic")
+ ls = &quadratic_ls;
+ else GMM_ASSERT1(false, "unknown line search");
if (!md->model().is_complex()) {
- getfem::standard_solve(md->model(), iter,
- getfem::rselect_linear_solver(md->model(),
- lsolver),
- *ls, with_pseudo_pot);
+ getfem::standard_solve(md->model(), iter,
+ getfem::rselect_linear_solver(md->model(),
+ lsolver),
+ *ls, with_pseudo_pot);
} else {
- getfem::standard_solve(md->model(), iter,
- getfem::cselect_linear_solver(md->model(),
- lsolver),
- *ls, with_pseudo_pot);
+ getfem::standard_solve(md->model(), iter,
+ getfem::cselect_linear_solver(md->model(),
+ lsolver),
+ *ls, with_pseudo_pot);
+ }
+ if (out.remaining()) out.pop().from_integer(int(iter.get_iteration()));
+ if (out.remaining()) out.pop().from_integer(int(iter.converged()));
+ );
+
+
+ /*@GET ('test tangent matrix'[, @scalar EPS[, @int NB[, @scalar scale]]])
+ Test the consistency of the tangent matrix in some random positions
+ and random directions (useful to test newly created bricks).
+ `EPS` is the value of the small parameter for the finite difference
+ computation of the derivative is the random direction (default is 1E-6).
+ `NN` is the number of tests (default is 100). `scale` is a parameter
+ for the random position (default is 1). Each dof od the random
+ position is chosen in the range [-scale, scale].
+ @*/
+ sub_command
+ ("test tangent matrix", 0, 3, 0, 1,
+ size_type nbdof = md->model().nb_dof();
+ scalar_type EPS = 1E-6;
+ if (in.remaining()) EPS = in.pop().to_scalar();
+ scalar_type errmax = scalar_type(0);
+ size_type NN = 100;
+ if (in.remaining()) NN = in.pop().to_integer();
+ scalar_type scale = scalar_type(1);
+ if (in.remaining()) scale = in.pop().to_scalar();
+
+ if (md->model().is_linear())
+ cout << "Problem is linear, the test is not relevant";
+ else {
+ if (md->is_complex()) {
+ std::vector<complex_type> U(nbdof);
+ std::vector<complex_type> DIR(nbdof);
+ std::vector<complex_type> D1(nbdof);
+ std::vector<complex_type> D2(nbdof);
+ for (size_type i = 0; i < NN; ++i) {
+ gmm::fill_random(U); gmm::scale(U, scale);
+ gmm::fill_random(DIR); gmm::scale(DIR, scale);
+ md->model().to_variables(U);
+ md->model().assembly(getfem::model::BUILD_ALL);
+ gmm::copy(md->model().complex_rhs(), D2);
+ gmm::mult(md->model().complex_tangent_matrix(), DIR, D1);
+ gmm::add(gmm::scaled(DIR, complex_type(EPS)), U);
+ md->model().to_variables(U);
+ md->model().assembly(getfem::model::BUILD_RHS);
+ gmm::add(gmm::scaled(md->model().complex_rhs(),
+ -complex_type(1)), D2);
+ gmm::scale(D2, complex_type(1)/complex_type(EPS));
+ scalar_type err = gmm::vect_dist2(D1, D2);
+ cout << "Error at step " << i << " : " << err << endl;
+ errmax = std::max(err, errmax);
+ }
+ } else {
+ std::vector<scalar_type> U(nbdof);
+ std::vector<scalar_type> DIR(nbdof);
+ std::vector<scalar_type> D1(nbdof);
+ std::vector<scalar_type> D2(nbdof);
+ for (size_type i = 0; i < NN; ++i) {
+ gmm::fill_random(U); gmm::scale(U, scale);
+ gmm::fill_random(DIR); gmm::scale(DIR, scale);
+ md->model().to_variables(U);
+ md->model().assembly(getfem::model::BUILD_ALL);
+ gmm::copy(md->model().real_rhs(), D2);
+ gmm::mult(md->model().real_tangent_matrix(), DIR, D1);
+ gmm::add(gmm::scaled(DIR, EPS), U);
+ md->model().to_variables(U);
+ md->model().assembly(getfem::model::BUILD_RHS);
+ gmm::add(gmm::scaled(md->model().real_rhs(),-scalar_type(1)), D2);
+ gmm::scale(D2, scalar_type(1)/EPS);
+ scalar_type err = gmm::vect_dist2(D1, D2);
+ cout << "Error at step " << i << " : " << err << endl;
+ errmax = std::max(err, errmax);
+ }
+ }
}
+ out.pop().from_scalar(errmax);
);
@@ -342,18 +494,19 @@ void gf_model_get(getfemint::mexargs_in& m_in,
if (in.remaining()) stresca = in.pop().to_string();
bool tresca = false;
if (cmd_strmatch(stresca, "Von Mises") ||
- cmd_strmatch(stresca, "Von_Mises"))
- tresca = false;
+ cmd_strmatch(stresca, "Von_Mises"))
+ tresca = false;
else if (cmd_strmatch(stresca, "Tresca"))
- tresca = true;
+ tresca = true;
else THROW_BADARG("bad option \'version\': " << stresca);
-
+
getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
getfem::compute_isotropic_linearized_Von_Mises_or_Tresca
(md->model(), varname, dataname_lambda, dataname_mu, gfi_mf->mesh_fem(), VMM, tresca);
out.pop().from_dcvector(VMM);
);
+
/*@GET V = ('compute Von Mises or Tresca', @str varname, @str lawname, @str dataname, @tmf mf_vm[, @str version])
Compute on `mf_vm` the Von-Mises stress or the Tresca stress of a field
for nonlinear elasticity in 3D. `lawname` is the constitutive law which
@@ -372,26 +525,57 @@ void gf_model_get(getfemint::mexargs_in& m_in,
if (in.remaining()) stresca = in.pop().to_string();
bool tresca = false;
if (cmd_strmatch(stresca, "Von Mises") ||
- cmd_strmatch(stresca, "Von_Mises"))
- tresca = false;
+ cmd_strmatch(stresca, "Von_Mises"))
+ tresca = false;
else if (cmd_strmatch(stresca, "Tresca"))
- tresca = true;
+ tresca = true;
else THROW_BADARG("bad option \'version\': " << stresca);
-
+
getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
getfem::compute_Von_Mises_or_Tresca
- (md->model(), varname,
- abstract_hyperelastic_law_from_name
- (lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
- dataname, gfi_mf->mesh_fem(), VMM, tresca);
+ (md->model(), varname,
+ abstract_hyperelastic_law_from_name
+ (lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
+ dataname, gfi_mf->mesh_fem(), VMM, tresca);
out.pop().from_dcvector(VMM);
);
+ /*@GET V = ('compute second Piola Kirchhoff tensor', @str varname, @str lawname, @str dataname, @tmf mf_sigma)
+ Compute on `mf_sigma` the second Piola Kirchhoff stress tensor of a field
+ for nonlinear elasticity in 3D. `lawname` is the constitutive law which
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ `dataname` is a vector of parameters for the constitutive law. Its length
+ depends on the law. It could be a short vector of constant values or a
+ vector field described on a finite element method for variable
+ coefficients.
+ @*/
+ sub_command
+ ("compute second Piola Kirchhoff tensor", 4, 4, 0, 1,
+ std::string varname = in.pop().to_string();
+ std::string lawname = in.pop().to_string();
+ std::string dataname = in.pop().to_string();
+ getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
+
+
+ size_type N = size_type(gfi_mf->mesh_fem().linked_mesh().dim());
+ size_type ratio = 1;
+ if ((gfi_mf->mesh_fem()).get_qdim() == 1) ratio = N*N;
+
+ getfem::model_real_plain_vector
+ VMM(ratio*(gfi_mf->mesh_fem()).nb_dof());
+
+ getfem::compute_sigmahathat
+ (md->model(), varname,
+ abstract_hyperelastic_law_from_name
+ (lawname, gfi_mf->mesh_fem().linked_mesh().dim()),
+ dataname, gfi_mf->mesh_fem(), VMM);
+ out.pop().from_dcvector(VMM);
+ );
/*@GET V = ('compute plasticity Von Mises or Tresca', @str datasigma, @tmf mf_vm[, @str version])
Compute on `mf_vm` the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
- `datasigma` is a vector which contains the stress constraints values supported by the mesh.
+ `datasigma` is a vector which contains the stress constraints values supported by the mesh.
`version` should be 'Von_Mises' or 'Tresca' ('Von_Mises' is the default).@*/
sub_command
("compute elastoplasticity Von Mises or Tresca", 2, 3, 0, 1,
@@ -401,12 +585,12 @@ void gf_model_get(getfemint::mexargs_in& m_in,
if (in.remaining()) stresca = in.pop().to_string();
bool tresca = false;
if (cmd_strmatch(stresca, "Von Mises") ||
- cmd_strmatch(stresca, "Von_Mises"))
- tresca = false;
+ cmd_strmatch(stresca, "Von_Mises"))
+ tresca = false;
else if (cmd_strmatch(stresca, "Tresca"))
- tresca = true;
+ tresca = true;
else THROW_BADARG("bad option \'version\': " << stresca);
-
+
getfem::model_real_plain_vector VMM((gfi_mf->mesh_fem()).nb_dof());
getfem::compute_elastoplasticity_Von_Mises_or_Tresca
(md->model(), datasigma, gfi_mf->mesh_fem(), VMM, tresca);
@@ -417,7 +601,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
/*@GET ('compute plasticity constraints', @tmim mim, @str varname, @str projname, @str datalambda, @str datamu, @str datathreshold, @str datasigma)
- Compute and save the stress constraints sigma for other hypothetical iterations.
+ Compute and save the stress constraints sigma for other hypothetical iterations.
'mim' is the integration method to use for the computation.
'varname' is the main variable of the problem.
'projname' is the type of projection to use. For the moment it could only be 'Von Mises' or 'VM'.
@@ -433,16 +617,16 @@ void gf_model_get(getfemint::mexargs_in& m_in,
std::string datathreshold = in.pop().to_string();
std::string datasigma = in.pop().to_string();
-
+
getfem::elastoplasticity_next_iter
(md->model(), gfi_mim->mesh_im(), varname,
- abstract_constraints_projection_from_name(projname),
- datalambda, datamu, datathreshold, datasigma);
+ abstract_constraints_projection_from_name(projname),
+ datalambda, datamu, datathreshold, datasigma);
);
-
+
/*@GET V = ('compute plastic part', @tmim mim, @tmf mf_pl, @str varname, @str projname, @str datalambda, @str datamu, @str datathreshold, @str datasigma)
Compute on `mf_pl` the plastic part and return it into the vector V.
`datasigma` is a vector which contains the stress constraints values supported by the mesh.@*/
@@ -460,10 +644,10 @@ void gf_model_get(getfemint::mexargs_in& m_in,
getfem::model_real_plain_vector plast((gfi_mf->mesh_fem()).nb_dof());
getfem::compute_plastic_part
(md->model(), gfi_mim->mesh_im(), gfi_mf->mesh_fem(), varname,
- abstract_constraints_projection_from_name(projname),
- datalambda, datamu, datathreshold, datasigma, plast);
+ abstract_constraints_projection_from_name(projname),
+ datalambda, datamu, datathreshold, datasigma, plast);
out.pop().from_dcvector(plast);
- );
+ );
@@ -475,7 +659,7 @@ void gf_model_get(getfemint::mexargs_in& m_in,
size_type ind_brick = in.pop().to_integer() - config::base_index();
size_type ind_term = in.pop().to_integer() - config::base_index();
RETURN_SPARSE(linear_real_matrix_term(ind_brick, ind_term),
- linear_complex_matrix_term(ind_brick, ind_term));
+ linear_complex_matrix_term(ind_brick, ind_term));
);
@@ -502,22 +686,22 @@ void gf_model_get(getfemint::mexargs_in& m_in,
infomsg() << "gfModel object with " << md->model().nb_dof()
<< " degrees of freedom\n";
);
-
+
}
-
+
if (m_in.narg() < 2) THROW_BADARG( "Wrong number of input arguments");
getfemint_model *md = m_in.pop().to_getfemint_model();
std::string init_cmd = m_in.pop().to_string();
std::string cmd = cmd_normalize(init_cmd);
-
+
SUBC_TAB::iterator it = subc_tab.find(cmd);
if (it != subc_tab.end()) {
check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
- it->second->arg_in_max, it->second->arg_out_min,
- it->second->arg_out_max);
+ it->second->arg_in_max, it->second->arg_out_min,
+ it->second->arg_out_max);
it->second->run(m_in, m_out, md);
}
else bad_cmd(init_cmd);
diff --git a/interface/src/gf_model_set.cc b/interface/src/gf_model_set.cc
index fdf7e88..57bb8fd 100644
--- a/interface/src/gf_model_set.cc
+++ b/interface/src/gf_model_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**\file gf_model_set.cc
\brief getfemint_model setter.
@@ -68,7 +68,7 @@ template <typename T> static inline void dummy_func(T &) {}
psubc->arg_in_min = arginmin; psubc->arg_in_max = arginmax; \
psubc->arg_out_min = argoutmin; psubc->arg_out_max = argoutmax; \
subc_tab[cmd_normalize(name)] = psubc; \
- }
+ }
void gf_model_set(getfemint::mexargs_in& m_in,
@@ -100,6 +100,22 @@ void gf_model_set(getfemint::mexargs_in& m_in,
workspace().set_dependance(md, gfi_mf);
);
+ /*@SET ('add filtered fem variable', @str name, @tmf mf, @int region[, @int niter])
+ Add a variable to the model linked to a @tmf. The variable is filtered
+ in the sense that only the dof on the region are considered.
+ `name` is the variable name and `niter` is the optional number of
+ version of the data stored, for time integration schemes.@*/
+ sub_command
+ ("add filtered fem variable", 3, 4, 0, 0,
+ std::string name = in.pop().to_string();
+ getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
+ size_type region = in.pop().to_integer();
+ size_type niter = 1;
+ if (in.remaining()) niter = in.pop().to_integer(1,10);
+ md->model().add_filtered_fem_variable(name, gfi_mf->mesh_fem(), region, niter);
+ workspace().set_dependance(md, gfi_mf);
+ );
+
/*@SET ('add variable', @str name, @int size[, @int niter])
Add a variable to the model of constant size. `name` is the variable
@@ -126,7 +142,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
);
- /*@SET ('add multiplier', @str name, @tmf mf, @str primalname[, @int niter])
+ /*@SET ('add multiplier', @str name, @tmf mf, @str primalname[, @tmim mim, @int region][, @int niter])
Add a particular variable linked to a fem being a multiplier with
respect to a primal variable. The dof will be filtered with the
``gmm::range_basis`` function applied on the terms of the model
@@ -135,13 +151,28 @@ void gf_model_set(getfemint::mexargs_in& m_in,
Optimized for boundary multipliers. `niter` is the optional number
of version of the data stored, for time integration schemes. @*/
sub_command
- ("add multiplier", 3, 4, 0, 0,
+ ("add multiplier", 3, 6, 0, 0,
std::string name = in.pop().to_string();
getfemint_mesh_fem *gfi_mf = in.pop().to_getfemint_mesh_fem();
std::string primalname = in.pop().to_string();
+
+ getfemint_mesh_im *gfi_mim = 0;
+ size_type region = size_type(-1);
size_type niter = 1;
+ if (in.remaining()) {
+ mexarg_in argin = in.pop();
+ if (argin.is_mesh_im()) {
+ gfi_mim = argin.to_getfemint_mesh_im();
+ region = in.pop().to_integer();
+ }
+ else niter = argin.to_integer(1,10);
+ }
if (in.remaining()) niter = in.pop().to_integer(1,10);
- md->model().add_multiplier(name, gfi_mf->mesh_fem(), primalname, niter);
+ if (gfi_mim)
+ md->model().add_multiplier(name, gfi_mf->mesh_fem(), primalname,
+ gfi_mim->mesh_im(), region, niter);
+ else
+ md->model().add_multiplier(name, gfi_mf->mesh_fem(),primalname,niter);
workspace().set_dependance(md, gfi_mf);
);
@@ -249,7 +280,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ('to variables', @vec V)
Set the value of the variables of the model with the vector `V`.
Typically, the vector `V` results of the solve of the tangent
- linear system (usefull to solve your problem with you own solver).@*/
+ linear system (useful to solve your problem with you own solver).@*/
sub_command
("to variables", 1, 1, 0, 0,
if (!md->is_complex()) {
@@ -267,7 +298,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ind = ('add Laplacian brick', @tmim mim, @str varname[, @int region])
- Add a Laplacian term to the model relatively to the variable `varname`.
+ Add a Laplacian term to the model relatively to the variable `varname`
+ (in fact with a minus : :math:`-\text{div}(\nabla u)`).
If this is a vector valued variable, the Laplacian term is added
componentwise. `region` is an optional mesh region on which the term
is added. If it is not specified, it is added on the whole mesh. Return
@@ -301,7 +333,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
The components of the matrix/tensor have to be stored with the fortran
order (columnwise) in the data vector (compatibility with blas). The
symmetry of the given matrix/tensor is not verified (but assumed). If
- this is a vector valued variable, the Laplacian term is added
+ this is a vector valued variable, the elliptic term is added
componentwise. `region` is an optional mesh region on which the term is
added. If it is not specified, it is added on the whole mesh. Return the
brick index in the model.@*/
@@ -320,7 +352,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
out.pop().from_integer(int(ind));
);
-
+
/*@SET ind = ('add source term brick', @tmim mim, @str varname, @str dataname[, @int region[, @str directdataname]])
Add a source term to the model relatively to the variable `varname`.
The source term is represented by the data `dataname` which could be
@@ -452,7 +484,100 @@ void gf_model_set(getfemint::mexargs_in& m_in,
size_type ind = config::base_index();
ind += getfem::add_Dirichlet_condition_with_penalization
(md->model(), gfi_mim->mesh_im(), varname, coeff, region,
- dataname, mf_mult);
+ dataname, mf_mult);
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind));
+ );
+
+ /*@SET ind = ('add normal Dirichlet condition with multipliers', @tmim mim, @str varname, mult_description, @int region[, @str dataname])
+ Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable described by
+ `mult_description`. If `mult_description` is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region `region` and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. `dataname` is the optional right hand side of the
+ Dirichlet condition. It could be constant or described on a fem; scalar
+ or vector valued, depending on the variable on which the Dirichlet
+ condition is prescribed (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ Returns the brick index in the model.@*/
+ sub_command
+ ("add normal Dirichlet condition with multipliers", 4, 5, 0, 1,
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname = in.pop().to_string();
+ int version = 0;
+ size_type degree = 0;
+ std::string multname;
+ getfemint_mesh_fem *gfi_mf = 0;
+ mexarg_in argin = in.pop();
+ if (argin.is_integer()) {
+ degree = argin.to_integer();
+ version = 1;
+ } else if (argin.is_string()) {
+ multname = argin.to_string();
+ version = 2;
+ } else {
+ gfi_mf = argin.to_getfemint_mesh_fem();
+ version = 3;
+ }
+ size_type region = in.pop().to_integer();
+ std::string dataname;
+ if (in.remaining()) dataname = in.pop().to_string();
+
+ size_type ind = config::base_index();
+ switch(version) {
+ case 1: ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region, dataname);
+ break;
+ case 2: ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, multname, region, dataname);
+ break;
+ case 3: ind += getfem::add_normal_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, gfi_mf->mesh_fem(), region, dataname);
+ workspace().set_dependance(md, gfi_mf);
+ break;
+ }
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind));
+ );
+
+
+ /*@SET ind = ('add normal Dirichlet condition with penalization', @tmim mim, @str varname, @scalar coeff, @int region[, @str dataname, @tmf mf_mult])
+ Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is initially `coeff` and will be added to the data of the model.
+ `dataname` is the optional right hand side of the Dirichlet condition.
+ It could be constant or described on a fem; scalar or vector valued,
+ depending on the variable on which the Dirichlet condition is prescribed
+ (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ `mf_mult` is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Returns the brick index in the model.@*/
+ sub_command
+ ("add normal Dirichlet condition with penalization", 4, 6, 0, 1,
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname = in.pop().to_string();
+ double coeff = in.pop().to_scalar();
+ size_type region = in.pop().to_integer();
+ std::string dataname;
+ if (in.remaining()) dataname = in.pop().to_string();
+ const getfem::mesh_fem *mf_mult = 0;
+ if (in.remaining()) mf_mult = in.pop().to_const_mesh_fem();
+ size_type ind = config::base_index();
+ ind += getfem::add_normal_Dirichlet_condition_with_penalization
+ (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
+ dataname, mf_mult);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -478,7 +603,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
or vector valued, depending on the variable on which the Dirichlet
condition is prescribed. `Hname` is the data
corresponding to the matrix field `H`.
- Return the brick index in the model.@*/
+ Returns the brick index in the model.@*/
sub_command
("add generalized Dirichlet condition with multipliers", 6, 6, 0, 1,
getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
@@ -555,13 +680,130 @@ void gf_model_set(getfemint::mexargs_in& m_in,
);
+ /*@SET ind = ('add pointwise constraints with multipliers', @str varname, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+ Add some pointwise constraints on the variable `varname` using
+ multiplier. The multiplier variable is automatically added to the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.@*/
+ sub_command
+ ("add pointwise constraints with multipliers", 2, 4, 0, 1,
+ std::string varname = in.pop().to_string();
+ std::string dataname_pt = in.pop().to_string();
+ const getfem::mesh_fem *mf_u
+ = &(md->model().mesh_fem_of_variable(varname));
+ GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+ std::string dataname_unitv;
+ if (mf_u->get_qdim() > 1)
+ dataname_unitv = in.pop().to_string();
+ std::string dataname_val;
+ if (in.remaining()) dataname_val = in.pop().to_string();
+
+ size_type ind = config::base_index();
+ ind += getfem::add_pointwise_constraints_with_multipliers
+ (md->model(), varname, dataname_pt, dataname_unitv, dataname_val);
+ out.pop().from_integer(int(ind));
+ );
+
+ /*@SET ind = ('add pointwise constraints with given multipliers', @str varname, @str multname, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+ Add some pointwise constraints on the variable `varname` using a given
+ multiplier `multname`.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ The multiplier variable should be a fixed size variable of size the
+ number of points.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.@*/
+ sub_command
+ ("add pointwise constraints with given multipliers", 3, 5, 0, 1,
+ std::string varname = in.pop().to_string();
+ std::string multname = in.pop().to_string();
+ std::string dataname_pt = in.pop().to_string();
+ const getfem::mesh_fem *mf_u
+ = &(md->model().mesh_fem_of_variable(varname));
+ GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+ std::string dataname_unitv;
+ if (mf_u->get_qdim() > 1)
+ dataname_unitv = in.pop().to_string();
+ std::string dataname_val;
+ if (in.remaining()) dataname_val = in.pop().to_string();
+
+ size_type ind = config::base_index();
+ ind += getfem::add_pointwise_constraints_with_given_multipliers
+ (md->model(), varname, multname, dataname_pt, dataname_unitv,
+ dataname_val);
+ out.pop().from_integer(int(ind));
+ );
+
+
+ /*@SET ind = ('add pointwise constraints with penalization', @str varname, @scalar coeff, @str dataname_pt[, @str dataname_unitv] [, @str dataname_val])
+ Add some pointwise constraints on the variable `varname` thanks to
+ a penalization. The penalization coefficient is initially
+ `penalization_coeff` and will be added to the data of the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.@*/
+ sub_command
+ ("add pointwise constraints with penalization", 3, 5, 0, 1,
+ std::string varname = in.pop().to_string();
+ double coeff = in.pop().to_scalar();
+ std::string dataname_pt = in.pop().to_string();
+ const getfem::mesh_fem *mf_u
+ = &(md->model().mesh_fem_of_variable(varname));
+ GMM_ASSERT1(mf_u, "The variable should depend on a mesh_fem");
+ std::string dataname_unitv;
+ if (mf_u->get_qdim() > 1)
+ dataname_unitv = in.pop().to_string();
+ std::string dataname_val;
+ if (in.remaining()) dataname_val = in.pop().to_string();
+
+ size_type ind = config::base_index();
+ ind += getfem::add_pointwise_constraints_with_penalization
+ (md->model(), varname, coeff, dataname_pt, dataname_unitv,
+ dataname_val);
+ out.pop().from_integer(int(ind));
+ );
+
+
/*@SET ('change penalization coeff', @int ind_brick, @scalar coeff)
Change the penalization coefficient of a Dirichlet condition with
penalization brick. If the brick is not of this kind, this
function has an undefined behavior.@*/
sub_command
("change penalization coeff", 2, 2, 0, 0,
- size_type ind_brick = in.pop().to_integer();
+ size_type ind_brick = in.pop().to_integer() - config::base_index();
double coeff = in.pop().to_scalar();
getfem::change_penalization_coeff(md->model(), ind_brick, coeff);
);
@@ -611,6 +853,37 @@ void gf_model_set(getfemint::mexargs_in& m_in,
);
+ /*@SET ind = ('add basic nonlinear brick', @tmim mim, @str varname, @str f, @str dfdu[, @str dataname, @int region])
+ Add a brick representing a scalar term :math:`f(u)` to the left-hand
+ side of the model. In the weak form, one adds :math:`+\int f(u)v`.
+ The function :math:`f` may optionally depend on :math:`\lambda`, i.e.,
+ :math:`f(u)=f(u,\lambda)`.
+ `f` and `dfdu` should contain the expressions for
+ :math:`f(u)` and :math:`\frac{df}{du}(u)`, respectively.
+ `dataname` represents the optional real scalar parameter :math:`\lambda`
+ in the model. `region` is an optional mesh region on which the term is
+ added. If it is not specified, the term is added on the whole mesh.
+ Return the brick index in the model.@*/
+ sub_command
+ ("add basic nonlinear brick", 4, 6, 0, 1,
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname = in.pop().to_string();
+ std::string f = in.pop().to_string();
+ std::string dfdu = in.pop().to_string();
+ std::string dataname;
+ if (in.remaining()) dataname = in.pop().to_string();
+ size_type region = size_type(-1);
+ if (in.remaining()) region = in.pop().to_integer();
+ size_type ind
+ = getfem::add_basic_nonlinear_brick(md->model(), gfi_mim->mesh_im(),
+ varname, f, dfdu,
+ region, dataname)
+ + config::base_index();
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind));
+ );
+
+
/*@SET ind = ('add constraint with multipliers', @str varname, @str multname, @tspmat B, @vec L)
Add an additional explicit constraint on the variable `varname` thank to
a multiplier `multname` peviously added to the model (should be a fixed
@@ -627,10 +900,10 @@ void gf_model_set(getfemint::mexargs_in& m_in,
THROW_BADARG("Complex constraint for a real model");
if (!B->is_complex() && md->is_complex())
THROW_BADARG("Real constraint for a complex model");
-
+
size_type ind
= getfem::add_constraint_with_multipliers(md->model(),varname,multname);
-
+
if (md->is_complex()) {
if (B->storage()==gsparse::CSCMAT)
getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -646,7 +919,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
else
THROW_BADARG("Constraint matrix should be a sparse matrix");
}
-
+
if (!md->is_complex()) {
darray st = in.pop().to_darray();
std::vector<double> V(st.begin(), st.end());
@@ -679,10 +952,10 @@ void gf_model_set(getfemint::mexargs_in& m_in,
THROW_BADARG("Complex constraint for a real model");
if (!B->is_complex() && md->is_complex())
THROW_BADARG("Real constraint for a complex model");
-
+
size_type ind
= getfem::add_constraint_with_penalization(md->model(), varname, coeff);
-
+
if (md->is_complex()) {
if (B->storage()==gsparse::CSCMAT)
getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -698,7 +971,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
else
THROW_BADARG("Constraint matrix should be a sparse matrix");
}
-
+
if (!md->is_complex()) {
darray st = in.pop().to_darray();
std::vector<double> V(st.begin(), st.end());
@@ -708,7 +981,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
std::vector<std::complex<double> > V(st.begin(), st.end());
getfem::set_private_data_rhs(md->model(), ind, V);
}
-
+
out.pop().from_integer(int(ind + config::base_index()));
);
@@ -731,19 +1004,19 @@ void gf_model_set(getfemint::mexargs_in& m_in,
dal::shared_ptr<gsparse> B = in.pop().to_sparse();
bool issymmetric = false;
bool iscoercive = false;
- if (in.remaining()) issymmetric = (in.pop().to_integer(0,1) != 1);
+ if (in.remaining()) issymmetric = (in.pop().to_integer(0,1) != 0);
if (!issymmetric && in.remaining())
- iscoercive = (in.pop().to_integer(0,1) != 1);
-
+ iscoercive = (in.pop().to_integer(0,1) != 0);
+
size_type ind
= getfem::add_explicit_matrix(md->model(), varname1, varname2,
issymmetric, iscoercive);
-
+
if (B->is_complex() && !md->is_complex())
THROW_BADARG("Complex constraint for a real model");
if (!B->is_complex() && md->is_complex())
THROW_BADARG("Real constraint for a complex model");
-
+
if (md->is_complex()) {
if (B->storage()==gsparse::CSCMAT)
getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -759,7 +1032,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
else
THROW_BADARG("Constraint matrix should be a sparse matrix");
}
-
+
out.pop().from_integer(int(ind + config::base_index()));
);
@@ -775,7 +1048,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
std::string varname = in.pop().to_string();
size_type ind
= getfem::add_explicit_rhs(md->model(), varname);
-
+
if (!md->is_complex()) {
darray st = in.pop().to_darray();
std::vector<double> V(st.begin(), st.end());
@@ -785,7 +1058,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
std::vector<std::complex<double> > V(st.begin(), st.end());
getfem::set_private_data_rhs(md->model(), ind, V);
}
-
+
out.pop().from_integer(int(ind + config::base_index()));
);
@@ -796,14 +1069,14 @@ void gf_model_set(getfemint::mexargs_in& m_in,
set this matrix. @*/
sub_command
("set private matrix", 2, 2, 0, 0,
- size_type ind = in.pop().to_integer();
+ size_type ind = in.pop().to_integer() - config::base_index();
dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-
+
if (B->is_complex() && !md->is_complex())
THROW_BADARG("Complex constraint for a real model");
if (!B->is_complex() && md->is_complex())
THROW_BADARG("Real constraint for a complex model");
-
+
if (md->is_complex()) {
if (B->storage()==gsparse::CSCMAT)
getfem::set_private_data_matrix(md->model(), ind, B->cplx_csc());
@@ -828,8 +1101,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
set this rhs. @*/
sub_command
("set private rhs", 2, 2, 0, 0,
- size_type ind = in.pop().to_integer();
-
+ size_type ind = in.pop().to_integer() - config::base_index();
+
if (!md->is_complex()) {
darray st = in.pop().to_darray();
std::vector<double> V(st.begin(), st.end());
@@ -895,7 +1168,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ind = ('add nonlinear elasticity brick', @tmim mim, @str varname, @str constitutive_law, @str dataname[, @int region])
Add a nonlinear elasticity term to the model relatively to the
variable `varname`. `lawname` is the constitutive law which
- could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+ or 'generalized Blatz Ko'.
IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
approximation is automatically used.
`dataname` is a vector of parameters for the constitutive law. Its length
@@ -917,7 +1191,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
add_nonlinear_elasticity_brick
(md->model(), gfi_mim->mesh_im(), varname,
abstract_hyperelastic_law_from_name(lawname, N), dataname, region);
-
+
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -933,7 +1207,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
for the time scheme needed for the Newton algorithm used.
Moreover, the finite element method on which `varname` is described
is an K ordered mesh_fem, the `datasigma` one have to be at least
- an K-1 ordered mesh_fem.
+ an K-1 ordered mesh_fem.
`datalambda` and `datamu` are the Lame coefficients of the studied
material.
`datathreshold` is the plasticity threshold of the material.
@@ -958,11 +1232,11 @@ void gf_model_set(getfemint::mexargs_in& m_in,
size_type ind = config::base_index() +
add_elastoplasticity_brick
(md->model(), gfi_mim->mesh_im(),
- abstract_constraints_projection_from_name(projname),
- varname, datalambda, datamu,
- datathreshold, datasigma,
- region);
-
+ abstract_constraints_projection_from_name(projname),
+ varname, datalambda, datamu,
+ datathreshold, datasigma,
+ region);
+
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -995,8 +1269,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ind = ('add bilaplacian brick', @tmim mim, @str varname, @str dataname [, @int region])
Add a bilaplacian brick on the variable
- `varname` and on the mesh region `region`.
- This represent a term :math:`\Delta(D \Delta u)`.
+ `varname` and on the mesh region `region`.
+ This represent a term :math:`\Delta(D \Delta u)`.
where :math:`D(x)` is a coefficient determined by `dataname` which
could be constant or described on a f.e.m. The corresponding weak form
is :math:`\int D(x)\Delta u(x) \Delta v(x) dx`.
@@ -1010,10 +1284,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
if (in.remaining()) region = in.pop().to_integer();
size_type ind = config::base_index() +
add_bilaplacian_brick(md->model(), gfi_mim->mesh_im(),
- varname, dataname, region);
+ varname, dataname, region);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
+
+
/*@SET ind = ('add Kirchhoff-Love plate brick', @tmim mim, @str varname, @str dataname_D, @str dataname_nu [, @int region])
@@ -1034,7 +1310,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
if (in.remaining()) region = in.pop().to_integer();
size_type ind = config::base_index() +
add_bilaplacian_brick_KL(md->model(), gfi_mim->mesh_im(),
- varname, dataname_D, dataname_nu, region);
+ varname, dataname_D, dataname_nu, region);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -1043,7 +1319,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
Add a normal derivative source term brick
:math:`F = \int b.\partial_n v` on the variable `varname` and the
mesh region `region`.
-
+
Update the right hand side of the linear system.
`dataname` represents `b` and `varname` represents `v`.
Return the brick index in the model.@*/
@@ -1055,7 +1331,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
size_type region = in.pop().to_integer();
size_type ind = config::base_index() +
add_normal_derivative_source_term_brick(md->model(), gfi_mim->mesh_im(),
- varname, dataname, region);
+ varname, dataname, region);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -1075,7 +1351,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
size_type region = in.pop().to_integer();
size_type ind = config::base_index() +
add_Kirchoff_Love_Neumann_term_brick(md->model(), gfi_mim->mesh_im(),
- varname, dataname_M, dataname_divM, region);
+ varname, dataname_M, dataname_divM, region);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -1083,7 +1359,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ind = ('add normal derivative Dirichlet condition with multipliers', @tmim mim, @str varname, mult_description, @int region [, @str dataname, @int R_must_be_derivated])
Add a Dirichlet condition on the normal derivative of the variable
- `varname` and on the mesh region `region` (which should be a boundary.
+ `varname` and on the mesh region `region` (which should be a boundary.
The general form is
:math:`\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v`
where :math:`r(x)` is
@@ -1128,21 +1404,21 @@ void gf_model_set(getfemint::mexargs_in& m_in,
if (in.remaining()) dataname = in.pop().to_string();
bool R_must_be_derivated = false;
if (in.remaining())
- R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
+ R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
size_type ind = config::base_index();
switch(version) {
- case 1: ind +=
- add_normal_derivative_Dirichlet_condition_with_multipliers
- (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region,
- dataname, R_must_be_derivated ); break;
- case 2: ind +=
- add_normal_derivative_Dirichlet_condition_with_multipliers
- (md->model(), gfi_mim->mesh_im(), varname, multname, region,
- dataname, R_must_be_derivated ); break;
- case 3: ind +=
- add_normal_derivative_Dirichlet_condition_with_multipliers
- (md->model(), gfi_mim->mesh_im(), varname, gfi_mf->mesh_fem(),
- region, dataname, R_must_be_derivated ); break;
+ case 1: ind +=
+ add_normal_derivative_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, dim_type(degree), region,
+ dataname, R_must_be_derivated ); break;
+ case 2: ind +=
+ add_normal_derivative_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, multname, region,
+ dataname, R_must_be_derivated ); break;
+ case 3: ind +=
+ add_normal_derivative_Dirichlet_condition_with_multipliers
+ (md->model(), gfi_mim->mesh_im(), varname, gfi_mf->mesh_fem(),
+ region, dataname, R_must_be_derivated ); break;
}
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
@@ -1151,7 +1427,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
/*@SET ind = ('add normal derivative Dirichlet condition with penalization', @tmim mim, @str varname, @scalar coeff, @int region [, @str dataname, @int R_must_be_derivated])
Add a Dirichlet condition on the normal derivative of the variable
- `varname` and on the mesh region `region` (which should be a boundary.
+ `varname` and on the mesh region `region` (which should be a boundary.
The general form is
:math:`\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v`
where :math:`r(x)` is
@@ -1175,11 +1451,11 @@ void gf_model_set(getfemint::mexargs_in& m_in,
if (in.remaining()) dataname = in.pop().to_string();
bool R_must_be_derivated = false;
if (in.remaining())
- R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
+ R_must_be_derivated = (in.pop().to_integer(0,1)) != 0;
size_type ind = config::base_index() +
add_normal_derivative_Dirichlet_condition_with_penalization
- (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
- dataname, R_must_be_derivated );
+ (md->model(), gfi_mim->mesh_im(), varname, coeff, region,
+ dataname, R_must_be_derivated );
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind));
);
@@ -1336,70 +1612,94 @@ void gf_model_set(getfemint::mexargs_in& m_in,
);
- /*@SET ('unable bricks', @ivec bricks_indices)
- Unable a disabled brick.@*/
+ /*@SET ('enable bricks', @ivec bricks_indices)
+ Enable a disabled brick. @*/
sub_command
- ("unable bricks", 1, 1, 0, 0,
+ ("enable bricks", 1, 1, 0, 0,
dal::bit_vector bv = in.pop().to_bit_vector();
for (dal::bv_visitor ii(bv); !ii.finished(); ++ii)
- md->model().unable_brick(ii);
+ md->model().enable_brick(ii);
);
+ /*@SET ('disable variable', @str varname)
+ Disable a variable for a solve. The next solve will operate only on
+ the remaining variables. This allows to solve separately different
+ parts of a model. If there is a strong coupling of the variables,
+ a fixed point strategy can the be used. @*/
+ sub_command
+ ("disable variable", 1, 1, 0, 0,
+ std::string varname = in.pop().to_string();
+ md->model().disable_variable(varname);
+ );
- /*@SET ('first iter')
- To be executed before the first iteration of a time integration scheme.@*/
+
+ /*@SET ('enable variable', @str varname)
+ Enable a disabled variable. @*/
+ sub_command
+ ("enable variable", 1, 1, 0, 0,
+ std::string varname = in.pop().to_string();
+ md->model().enable_variable(varname);
+ );
+
+
+ /*@SET ('first iter')
+ To be executed before the first iteration of a time integration
+ scheme. @*/
sub_command
("first iter", 0, 0, 0, 0,
md->model().first_iter();
);
- /*@SET ('next iter')
- To be executed at the end of each iteration of a time
- integration scheme.@*/
+ /*@SET ('next iter')
+ To be executed at the end of each iteration of a time
+ integration scheme. @*/
sub_command
("next iter", 0, 0, 0, 0,
md->model().next_iter();
);
- /*@SET ind = ('add basic contact brick', @str varname_u, @str multname_n[, @str multname_t], @str dataname_r, @tspmat BN[, @tspmat BT, @str dataname_friction_coeff][, @str dataname_gap[, @str dataname_alpha[, @int symmetrized]])
-
- Add a contact with or without friction brick to the model.
- If U is the vector
- of degrees of freedom on which the unilateral constraint is applied,
- the matrix `BN` have to be such that this constraint is defined by
- :math:`B_N U \le 0`. A friction condition can be considered by adding the three
- parameters `multname_t`, `BT` and `dataname_friction_coeff`. In this case,
- the tangential displacement is :math:`B_T U` and the matrix `BT` should have as
- many rows as `BN` multiplied by :math:`d-1` where :math:`d` is the domain dimension.
- In this case also, `dataname_friction_coeff` is a data which represents the
- coefficient of friction. It can be a scalar or a vector representing a
- value on each contact condition. The unilateral constraint is prescribed
- thank to a multiplier
- `multname_n` whose dimension should be equal to the number of rows of
- `BN`. If a friction condition is added, it is prescribed with a
- multiplier `multname_t` whose dimension should be equal to the number
- of rows of `BT`. The augmentation parameter `r` should be chosen in
- a range of
- acceptabe values (see Getfem user documentation). `dataname_gap` is an
- optional parameter representing the initial gap. It can be a single value
- or a vector of value. `dataname_alpha` is an optional homogenization
- parameter for the augmentation parameter
- (see Getfem user documentation). The parameter `symmetrized` indicates
- that the symmetry of the tangent matrix will be kept or not (except for
- the part representing the coupling between contact and friction which
- cannot be symmetrized). @*/
+ /*@SET ind = ('add basic contact brick', @str varname_u, @str multname_n[, @str multname_t], @str dataname_r, @tspmat BN[, @tspmat BT, @str dataname_friction_coeff][, @str dataname_gap[, @str dataname_alpha[, @int augmented_version]])
+
+ Add a contact with or without friction brick to the model.
+ If U is the vector
+ of degrees of freedom on which the unilateral constraint is applied,
+ the matrix `BN` have to be such that this constraint is defined by
+ :math:`B_N U \le 0`. A friction condition can be considered by adding
+ the three parameters `multname_t`, `BT` and `dataname_friction_coeff`.
+ In this case, the tangential displacement is :math:`B_T U` and
+ the matrix `BT` should have as many rows as `BN` multiplied by
+ :math:`d-1` where :math:`d` is the domain dimension.
+ In this case also, `dataname_friction_coeff` is a data which represents
+ the coefficient of friction. It can be a scalar or a vector representing a
+ value on each contact condition. The unilateral constraint is prescribed
+ thank to a multiplier
+ `multname_n` whose dimension should be equal to the number of rows of
+ `BN`. If a friction condition is added, it is prescribed with a
+ multiplier `multname_t` whose dimension should be equal to the number
+ of rows of `BT`. The augmentation parameter `r` should be chosen in
+ a range of
+ acceptabe values (see Getfem user documentation). `dataname_gap` is an
+ optional parameter representing the initial gap. It can be a single value
+ or a vector of value. `dataname_alpha` is an optional homogenization
+ parameter for the augmentation parameter
+ (see Getfem user documentation). The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction), 3 for the
+ unsymmetric method with augmented multipliers, 4 for the unsymmetric
+ method with augmented multipliers and De Saxce projection. @*/
sub_command
("add basic contact brick", 4, 10, 0, 1,
-
+
bool friction = false;
-
+
std::string varname_u = in.pop().to_string();
std::string multname_n = in.pop().to_string();
std::string dataname_r = in.pop().to_string();
std::string multname_t; std::string friction_coeff;
-
+
mexarg_in argin = in.pop();
if (argin.is_string()) {
friction = true;
@@ -1407,7 +1707,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
dataname_r = argin.to_string();
argin = in.pop();
}
-
+
dal::shared_ptr<gsparse> BN = argin.to_sparse();
if (BN->is_complex()) THROW_BADARG("Complex matrix not allowed");
dal::shared_ptr<gsparse> BT;
@@ -1416,14 +1716,14 @@ void gf_model_set(getfemint::mexargs_in& m_in,
if (BT->is_complex()) THROW_BADARG("Complex matrix not allowed");
friction_coeff = in.pop().to_string();
}
-
+
std::string dataname_gap;
dataname_gap = in.pop().to_string();
std::string dataname_alpha;
if (in.remaining()) dataname_alpha = in.pop().to_string();
- bool symmetrized = false;
- if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
-
+ int augmented_version = 1;
+ if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
+
getfem::CONTACT_B_MATRIX BBN;
getfem::CONTACT_B_MATRIX BBT;
if (BN->storage()==gsparse::CSCMAT) {
@@ -1437,7 +1737,7 @@ void gf_model_set(getfemint::mexargs_in& m_in,
gmm::copy(BN->real_wsc(), BBN);
}
else THROW_BADARG("Matrix BN should be a sparse matrix");
-
+
if (friction) {
if (BT->storage()==gsparse::CSCMAT) {
gmm::resize(BBT, gmm::mat_nrows(BT->real_csc()),
@@ -1451,18 +1751,18 @@ void gf_model_set(getfemint::mexargs_in& m_in,
}
else THROW_BADARG("Matrix BT should be a sparse matrix");
}
-
+
size_type ind;
if (friction) {
- ind = getfem::add_basic_contact_with_friction_brick
+ ind = getfem::add_basic_contact_brick
(md->model(), varname_u, multname_n, multname_t, dataname_r, BBN, BBT,
- friction_coeff, dataname_gap, dataname_alpha, symmetrized);
+ friction_coeff, dataname_gap, dataname_alpha, augmented_version);
} else {
ind = getfem::add_basic_contact_brick
(md->model(), varname_u, multname_n, dataname_r, BBN, dataname_gap,
- dataname_alpha, symmetrized);
+ dataname_alpha, augmented_version);
}
-
+
out.pop().from_integer(int(ind + config::base_index()));
);
@@ -1471,12 +1771,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
Can be used to set the BN matrix of a basic contact/friction brick. @*/
sub_command
("contact brick set BN", 2, 2, 0, 0,
- size_type ind = in.pop().to_integer();
+ size_type ind = in.pop().to_integer() - config::base_index();
dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-
+
if (B->is_complex())
THROW_BADARG("BN should be a real matrix");
-
+
if (B->storage()==gsparse::CSCMAT)
gmm::copy(B->real_csc(),
getfem::contact_brick_set_BN(md->model(), ind));
@@ -1493,12 +1793,12 @@ void gf_model_set(getfemint::mexargs_in& m_in,
friction brick. @*/
sub_command
("contact brick set BT", 2, 2, 0, 0,
- size_type ind = in.pop().to_integer();
+ size_type ind = in.pop().to_integer() - config::base_index();
dal::shared_ptr<gsparse> B = in.pop().to_sparse();
-
+
if (B->is_complex())
THROW_BADARG("BT should be a real matrix");
-
+
if (B->storage()==gsparse::CSCMAT)
gmm::copy(B->real_csc(), getfem::contact_brick_set_BT(md->model(), ind));
else if (B->storage()==gsparse::WSCMAT)
@@ -1508,42 +1808,49 @@ void gf_model_set(getfemint::mexargs_in& m_in,
);
- /*@SET ind = ('add contact with rigid obstacle brick', @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[, @int symmetrized])
-
+ // CONTACT WITH RIGID OBSTACLE
+
+
+ /*@SET ind = ('add nodal contact with rigid obstacle brick', @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[, @int augmented_version])
+
Add a contact with or without friction condition with a rigid obstacle
to the model. The condition is applied on the variable `varname_u`
on the boundary corresponding to `region`. The rigid obstacle should
be described with the string `obstacle` being a signed distance to
the obstacle. This string should be an expression where the coordinates
are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
- obstacle correspond to :math:`z \le 0`, the corresponding signed distance will
- be simply "z". `multname_n` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region`. It represent the
+ obstacle correspond to :math:`z \le 0`, the corresponding signed distance
+ will be simply "z". `multname_n` should be a fixed size variable whose size
+ is the number of degrees of freedom on boundary `region`. It represents the
contact equivalent nodal forces. In order to add a friction condition
one has to add the `multname_t` and `dataname_friction_coeff` parameters.
`multname_t` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region` multiplied by :math:`d-1`
- where :math:`d` is the domain dimension. It represent the friction equivalent
- nodal forces.
+ the number of degrees of freedom on boundary `region` multiplied by
+ :math:`d-1` where :math:`d` is the domain dimension. It represents
+ the friction equivalent nodal forces.
The augmentation parameter `r` should be chosen in a
range of acceptabe values (close to the Young modulus of the elastic
body, see Getfem user documentation). `dataname_friction_coeff` is
the friction coefficient. It could be a scalar or a vector of values
- representing the friction coefficient on each contact node. The
- parameter `symmetrized` indicates that the symmetry of the tangent
- matrix will be kept or not. Basically, this brick compute the matrix BN
+ representing the friction coefficient on each contact node.
+ The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
+ Basically, this brick compute the matrix BN
and the vectors gap and alpha and calls the basic contact brick. @*/
sub_command
- ("add contact with rigid obstacle brick", 6, 9, 0, 1,
-
+ ("add nodal contact with rigid obstacle brick", 6, 9, 0, 1,
+
bool friction = false;
-
+
getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
std::string varname_u = in.pop().to_string();
std::string multname_n = in.pop().to_string();
std::string dataname_r = in.pop().to_string();
std::string multname_t; std::string dataname_fr;
-
+
mexarg_in argin = in.pop();
if (argin.is_string()) {
friction = true;
@@ -1552,30 +1859,209 @@ void gf_model_set(getfemint::mexargs_in& m_in,
dataname_fr = in.pop().to_string();
argin = in.pop();
}
-
+
size_type region = argin.to_integer();
std::string obstacle = in.pop().to_string();
- bool symmetrized = false;
- if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
-
+ int augmented_version = 1;
+ if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
+
size_type ind;
-
+
if (friction)
- ind = getfem::add_contact_with_friction_with_rigid_obstacle_brick
+ ind = getfem::add_nodal_contact_with_rigid_obstacle_brick
(md->model(), gfi_mim->mesh_im(), varname_u, multname_n,
multname_t, dataname_r, dataname_fr, region, obstacle,
- symmetrized);
+ augmented_version);
else
- ind = getfem::add_contact_with_rigid_obstacle_brick
+ ind = getfem::add_nodal_contact_with_rigid_obstacle_brick
(md->model(), gfi_mim->mesh_im(), varname_u, multname_n,
- dataname_r, region, obstacle, symmetrized);
+ dataname_r, region, obstacle, augmented_version);
workspace().set_dependance(md, gfi_mim);
out.pop().from_integer(int(ind + config::base_index()));
);
+ /*@SET ind = ('add contact with rigid obstacle brick', @tmim mim, @str varname_u, @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_friction_coeff], @int region, @str obstacle[, @int augmented_version])
+ DEPRECATED FUNCTION. Use 'add nodal contact with rigid obstacle brick' instead.@*/
+ sub_command
+ ("add contact with rigid obstacle brick", 6, 9, 0, 1,
+ infomsg() << "WARNING : gf_mesh_fem_get('add contact with rigid obstacle "
+ << "brick', ...) is a deprecated command.\n Use gf_mesh_fem_get("
+ << "'add nodal contact with rigid obstacle brick', ...) instead." << endl;
+ SUBC_TAB::iterator it = subc_tab.find("add nodal contact with rigid obstacle brick");
+ if (it != subc_tab.end())
+ it->second->run(in, out, md);
+ );
+
+ /*@SET ind = ('add integral contact with rigid obstacle brick', @tmim mim, @str varname_u, @str multname, @str dataname_obstacle, @str dataname_r [, @str dataname_friction_coeff], @int region [, @int option [, @str dataname_alpha [, @str dataname_wt [, @str dataname_gamma [, @str dataname_vt]]]]])
+
+ Add a contact with or without friction condition with a rigid obstacle
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage is a better scalability: the number of
+ Newton iterations should be more or less independent of the mesh size.
+ The contact condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ `multname` should be a fem variable representing the contact stress.
+ An inf-sup condition beetween `multname` and `varname_u` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptabe values.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element method.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ In case of contact with friction, `dataname_alpha` and `dataname_wt`
+ are optional parameters to solve evolutionary friction problems.
+ `dataname_gamma` and `dataname_vt` represent optional data for adding
+ a parameter-dependent sliding velocity to the friction condition.
+ @*/
+ sub_command
+ ("add integral contact with rigid obstacle brick", 6, 12, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u = in.pop().to_string();
+ std::string multname = in.pop().to_string();
+ std::string dataname_obs = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+
+ size_type ind;
+ int option = 1;
+ mexarg_in argin = in.pop();
+ if (argin.is_integer()) { // without friction
+ size_type region = argin.to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+
+ ind = getfem::add_integral_contact_with_rigid_obstacle_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u, multname,
+ dataname_obs, dataname_r, region, option);
+ } else { // with friction
+ std::string dataname_coeff = argin.to_string();
+ size_type region = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_alpha = "";
+ if (in.remaining()) dataname_alpha = in.pop().to_string();
+ std::string dataname_wt = "";
+ if (in.remaining()) dataname_wt = in.pop().to_string();
+ std::string dataname_gamma = "";
+ if (in.remaining()) dataname_gamma = in.pop().to_string();
+ std::string dataname_vt = "";
+ if (in.remaining()) dataname_vt = in.pop().to_string();
+
+ ind = getfem::add_integral_contact_with_rigid_obstacle_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u, multname,
+ dataname_obs, dataname_r, dataname_coeff, region, option,
+ dataname_alpha, dataname_wt, dataname_gamma, dataname_vt);
+ }
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+
+ /*@SET ind = ('add penalized contact with rigid obstacle brick', @tmim mim, @str varname_u, @str dataname_obstacle, @str dataname_r [, @str dataname_coeff], @int region [, @int option, @str dataname_lambda, [, @str dataname_alpha [, @str dataname_wt]]])
+
+ Add a penalized contact with or without friction condition with a
+ rigid obstacle to the model.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ @*/
+ sub_command
+ ("add penalized contact with rigid obstacle brick", 5, 10, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u = in.pop().to_string();
+ std::string dataname_obs = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+
+ size_type ind;
+ int option = 1;
+ mexarg_in argin = in.pop();
+ if (argin.is_integer()) { // without friction
+ size_type region = argin.to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_n = "";
+ if (in.remaining()) dataname_n = in.pop().to_string();
+
+ ind = getfem::add_penalized_contact_with_rigid_obstacle_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u,
+ dataname_obs, dataname_r, region, option, dataname_n);
+ } else { // with friction
+ std::string dataname_coeff = argin.to_string();
+ size_type region = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_lambda = "";
+ if (in.remaining()) dataname_lambda = in.pop().to_string();
+ std::string dataname_alpha = "";
+ if (in.remaining()) dataname_alpha = in.pop().to_string();
+ std::string dataname_wt = "";
+ if (in.remaining()) dataname_wt = in.pop().to_string();
+
+ ind = getfem::add_penalized_contact_with_rigid_obstacle_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u,
+ dataname_obs, dataname_r, dataname_coeff, region, option,
+ dataname_lambda, dataname_alpha, dataname_wt);
+ }
+
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+ /*@SET ind = ('add Nitsche contact with rigid obstacle brick', @tmim mim, @str varname_u, @str dataname_obstacle, @str dataname_r, @str dataname_friction_coeff, @str dataname_lambda, @str dataname_mu, @int region)
+
+ Add a contact with friction condition with a rigid obstacle
+ to the model with Nitsche strategy (no multiplier) in an integral way.
+ This is an experimental brick, which works only for linear homogeneous
+ isotropic elasticity.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance
+ to the obstacle (interpolated on a finite element method).
+ The Nitsche parameter `dataname_r` should be chosen in a
+ range of acceptable values. `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method. `dataname_lambda` and `dataname_mu` are the Lame coefficients.
+ @*/
+ sub_command
+ ("add Nitsche contact with rigid obstacle brick", 8, 8, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u = in.pop().to_string();
+ std::string dataname_obs = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+ std::string dataname_coeff = in.pop().to_string();
+ std::string dataname_lambda = in.pop().to_string();
+ std::string dataname_mu = in.pop().to_string();
+ size_type region = in.pop().to_integer();
+
+ size_type ind=
+ getfem::add_Nitsche_contact_with_rigid_obstacle_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u, dataname_obs, dataname_r,
+ dataname_coeff, dataname_lambda, dataname_mu, region);
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+#endif
+
+
+ // CONTACT BETWEEN NON-MATCHING MESHES
+
+
+ /*@SET ind = ('add nodal contact between nonmatching meshes brick', @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2, @int augmented_version])
- /*@SET ind = ('add nonmatching meshes contact brick', @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2, @int symmetrized])
-
Add a contact with or without friction condition between two faces of
one or two elastic bodies. The condition is applied on the variable
`varname_u1` or the variables `varname_u1` and `varname_u2` depending
@@ -1599,12 +2085,15 @@ void gf_model_set(getfemint::mexargs_in& m_in,
and `rg2` are correspondingly considered as "slaves". By default
`slave1` is true and `slave2` is false, i.e. `rg1` contains the slave
surfaces, while 'rg2' the master surfaces. Preferrably only one of
- `slave1` and `slave2` is set to true. The parameter `symmetrized`
- indicates that the symmetry of the tangent matrix will be kept or not.
+ `slave1` and `slave2` is set to true. The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
Basically, this brick computes the matrices BN and BT and the vectors
gap and alpha and calls the basic contact brick. @*/
sub_command
- ("add nonmatching meshes contact brick", 6, 13, 0, 1,
+ ("add nodal contact between nonmatching meshes brick", 6, 13, 0, 1,
bool two_variables = true;
bool friction = false;
@@ -1613,7 +2102,8 @@ void gf_model_set(getfemint::mexargs_in& m_in,
getfemint_mesh_im *gfi_mim2;
std::string varname_u1;
std::string varname_u2;
- bool slave1=true; bool slave2=false; bool symmetrized=false;
+ bool slave1=true; bool slave2=false;
+ int augmented_version = 1;
gfi_mim1 = in.pop().to_getfemint_mesh_im();
mexarg_in argin = in.pop();
@@ -1643,35 +2133,249 @@ void gf_model_set(getfemint::mexargs_in& m_in,
std::vector<size_type> vrg2(1,in.pop().to_integer());
if (in.remaining()) slave1 = (in.pop().to_integer(0,1)) != 0;
if (in.remaining()) slave2 = (in.pop().to_integer(0,1)) != 0;
- if (in.remaining()) symmetrized = (in.pop().to_integer(0,1)) != 0;
+ if (in.remaining()) augmented_version = in.pop().to_integer(1,4);
size_type ind;
if (!friction)
- ind = getfem::add_nonmatching_meshes_contact_brick
+ ind = getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md->model(), gfi_mim1->mesh_im(), gfi_mim2->mesh_im(),
varname_u1, varname_u2, multname_n, dataname_r,
- vrg1, vrg2, slave1, slave2, symmetrized);
+ vrg1, vrg2, slave1, slave2, augmented_version);
else
- ind = getfem::add_nonmatching_meshes_contact_with_friction_brick
+ ind = getfem::add_nodal_contact_between_nonmatching_meshes_brick
(md->model(), gfi_mim1->mesh_im(), gfi_mim2->mesh_im(),
varname_u1, varname_u2, multname_n, multname_t,
dataname_r, dataname_fr,
- vrg1, vrg2, slave1, slave2, symmetrized);
+ vrg1, vrg2, slave1, slave2, augmented_version);
workspace().set_dependance(md, gfi_mim1);
if (two_variables)
workspace().set_dependance(md, gfi_mim2);
out.pop().from_integer(int(ind + config::base_index()));
);
+ /*@SET ind = ('add nonmatching meshes contact brick', @tmim mim1[, @tmim mim2], @str varname_u1[, @str varname_u2], @str multname_n[, @str multname_t], @str dataname_r[, @str dataname_fr], @int rg1, @int rg2[, @int slave1, @int slave2, @int augmented_version])
+ DEPRECATED FUNCTION. Use 'add nodal contact between nonmatching meshes brick' instead.@*/
+ sub_command
+ ("add nonmatching meshes contact brick", 6, 13, 0, 1,
+ infomsg() << "WARNING : gf_mesh_fem_get('add nonmatching meshes "
+ << "contact brick', ...) is a deprecated command.\n Use "
+ << "gf_mesh_fem_get('add nodal contact between nonmatching meshes "
+ << "brick', ...) instead." << endl;
+ SUBC_TAB::iterator it = subc_tab.find("add nodal contact between nonmatching meshes brick");
+ if (it != subc_tab.end())
+ it->second->run(in, out, md);
+ );
+
+ /*@SET ind = ('add integral contact between nonmatching meshes brick', @tmim mim, @str varname_u1, @str varname_u2, @str multname, @str dataname_r [, @str dataname_friction_coeff], @int region1, @int region2 [, @int option [, @str dataname_alpha [, @str dataname_wt1 , @str dataname_wt2]]])
+
+ Add a contact with or without friction condition between nonmatching
+ meshes to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ agrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of Newton iterations should be more or less independent
+ of the mesh size.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ `multname` should be a fem variable representing the contact stress
+ for the frictionless case and the contact and friction stress for the
+ case with friction. An inf-sup condition between `multname` and
+ `varname_u1` and `varname_u2` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method on the same mesh as `varname_u1`.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+ `dataname_wt2` are optional parameters to solve evolutionary friction
+ problems.
+ @*/
+ sub_command
+ ("add integral contact between nonmatching meshes brick", 7, 12, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u1 = in.pop().to_string();
+ std::string varname_u2 = in.pop().to_string();
+ std::string multname = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+
+ size_type ind;
+ int option = 1;
+ mexarg_in argin = in.pop();
+ if (argin.is_integer()) { // without friction
+ size_type region1 = argin.to_integer();
+ size_type region2 = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+
+ ind = getfem::add_integral_contact_between_nonmatching_meshes_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+ multname, dataname_r, region1, region2, option);
+ } else { // with friction
+ std::string dataname_coeff = argin.to_string();
+ size_type region1 = in.pop().to_integer();
+ size_type region2 = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_alpha = "";
+ if (in.remaining()) dataname_alpha = in.pop().to_string();
+ std::string dataname_wt1 = "";
+ if (in.remaining()) dataname_wt1 = in.pop().to_string();
+ std::string dataname_wt2 = "";
+ if (in.remaining()) dataname_wt2 = in.pop().to_string();
+
+ ind = getfem::add_integral_contact_between_nonmatching_meshes_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+ multname, dataname_r, dataname_coeff, region1, region2,
+ option, dataname_alpha, dataname_wt1, dataname_wt2);
+ }
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+
+ /*@SET ind = ('add penalized contact between nonmatching meshes brick', @tmim mim, @str varname_u1, @str varname_u2, @str dataname_r [, @str dataname_coeff], @int region1, @int region2 [, @int option [, @str dataname_lambda, [, @str dataname_alpha [, @str dataname_wt1, @str dataname_wt2]]]])
+
+ Add a penalized contact condition with or without friction between
+ nonmatching meshes to the model.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method on the same mesh as `varname_u1`.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+ `dataname_wt2` are optional parameters to solve evolutionary friction
+ problems.
+ @*/
+ sub_command
+ ("add penalized contact between nonmatching meshes brick", 6, 12, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u1 = in.pop().to_string();
+ std::string varname_u2 = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+
+ size_type ind;
+ int option = 1;
+ mexarg_in argin = in.pop();
+ if (argin.is_integer()) { // without friction
+ size_type region1 = argin.to_integer();
+ size_type region2 = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_n = "";
+ if (in.remaining()) dataname_n = in.pop().to_string();
+
+ ind = getfem::add_penalized_contact_between_nonmatching_meshes_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+ dataname_r, region1, region2, option, dataname_n);
+ } else { // with friction
+ std::string dataname_coeff = argin.to_string();
+ size_type region1 = in.pop().to_integer();
+ size_type region2 = in.pop().to_integer();
+ if (in.remaining()) option = in.pop().to_integer();
+ std::string dataname_lambda = "";
+ if (in.remaining()) dataname_lambda = in.pop().to_string();
+ std::string dataname_alpha = "";
+ if (in.remaining()) dataname_alpha = in.pop().to_string();
+ std::string dataname_wt1 = "";
+ if (in.remaining()) dataname_wt1 = in.pop().to_string();
+ std::string dataname_wt2 = "";
+ if (in.remaining()) dataname_wt2 = in.pop().to_string();
+
+ ind = getfem::add_penalized_contact_between_nonmatching_meshes_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u1, varname_u2,
+ dataname_r, dataname_coeff, region1, region2, option,
+ dataname_lambda, dataname_alpha, dataname_wt1, dataname_wt2);
+ }
+
+ workspace().set_dependance(md, gfi_mim);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+
+
+ /*@SET ind = ('add integral large sliding contact brick', @tmim mim, @str varname_u, @str multname, @str dataname_r, @str dataname_fr, @int rg)
+ (still experimental brick)
+ Add a large sliding contact with friction brick to the model.
+ This brick is able to deal with auto-contact, contact between
+ several deformable bodies and contact with rigid obstacles.
+ The condition is applied on the variable `varname_u` on the
+ boundary corresponding to `region`. `dataname_r` is the augmentation
+ parameter of the augmented Lagrangian. `dataname_friction_coeff`
+ is the friction coefficient. `mim` is an integration method on the
+ boundary. `varname_u` is the variable on which the contact condition
+ will be prescribed (should be of displacement type). `multname` is
+ a multiplier defined on the boundary which will represent the contact
+ force. If no additional boundary or rigid
+ obstacle is added, only auto-contact will be detected. Use
+ `add_boundary_to_large_sliding_contact_brick` and
+ `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+ boundaries and rigid obstacles. @*/
+ sub_command
+ ("add integral large sliding contact brick", 6, 6, 0, 1,
+
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u = in.pop().to_string();
+ std::string multname = in.pop().to_string();
+ std::string dataname_r = in.pop().to_string();
+ std::string dataname_fr = in.pop().to_string();
+ size_type region = in.pop().to_integer();
+
+ size_type ind = getfem::add_integral_large_sliding_contact_brick
+ (md->model(), gfi_mim->mesh_im(), varname_u, multname, dataname_r,
+ dataname_fr, region);
+ out.pop().from_integer(int(ind + config::base_index()));
+ );
+
+ /*@SET ind = ('add boundary to large sliding contact brick', @int indbrick, @tmim mim, @str varname_u, @str multname, @int rg)
+ Add a contact boundary to an existing large sliding contact brick.
+ `indbrick` is the brick index. @*/
+ sub_command
+ ("add boundary to large sliding contact brick", 5, 5, 0, 0,
+
+ size_type indbrick = in.pop().to_integer() - config::base_index();
+ getfemint_mesh_im *gfi_mim = in.pop().to_getfemint_mesh_im();
+ std::string varname_u = in.pop().to_string();
+ std::string multname = in.pop().to_string();
+ size_type region = in.pop().to_integer();
+
+ getfem::add_boundary_to_large_sliding_contact_brick
+ (md->model(), indbrick, gfi_mim->mesh_im(), varname_u,multname,region);
+ );
+
+
+ /*@SET ind = ('add rigid obstacle to large sliding contact brick', @int indbrick, @str obs)
+ Add a rigid obstacle to an existing large sliding contact brick.
+ `indbrick` is the brick index, `obs` is the expression of a
+ function which should be closed to a signed distance to the obstacle. @*/
+ sub_command
+ ("add rigid obstacle to large sliding contact brick", 2, 2, 0, 0,
+
+ size_type indbrick = in.pop().to_integer() - config::base_index();
+ std::string obs = in.pop().to_string();
+
+ getfem::add_rigid_obstacle_to_large_sliding_contact_brick
+ (md->model(), indbrick, obs);
+ );
+
+
}
-
+
if (m_in.narg() < 2) THROW_BADARG( "Wrong number of input arguments");
getfemint_model *md = m_in.pop().to_getfemint_model(true);
std::string init_cmd = m_in.pop().to_string();
std::string cmd = cmd_normalize(init_cmd);
-
+
SUBC_TAB::iterator it = subc_tab.find(cmd);
if (it != subc_tab.end()) {
check_cmd(cmd, it->first.c_str(), m_in, m_out, it->second->arg_in_min,
diff --git a/interface/src/gf_precond.cc b/interface/src/gf_precond.cc
index 6004f20..e57769e 100644
--- a/interface/src/gf_precond.cc
+++ b/interface/src/gf_precond.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_workspace.h>
#include <getfemint_precond.h>
diff --git a/interface/src/gf_precond_get.cc b/interface/src/gf_precond_get.cc
index 10c0c89..4ef7bbe 100644
--- a/interface/src/gf_precond_get.cc
+++ b/interface/src/gf_precond_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_precond.h>
diff --git a/interface/src/gf_slice.cc b/interface/src/gf_slice.cc
index d16fe28..20a8858 100644
--- a/interface/src/gf_slice.cc
+++ b/interface/src/gf_slice.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_slice.cc 3513 2010-03-24 06:05:09Z lsaavedr $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_slice.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint_misc.h>
#include <getfemint_workspace.h>
#include <getfemint_mesh.h>
@@ -99,7 +99,7 @@ namespace getfem {
scalar_type best_f = 1e10;
size_type cnt = 0;
for (short_type i=0; i < ml.structure_of_convex(cv)->nb_faces(); ++i) {
- scalar_type v = ml.trans_of_convex(cv)->convex_ref()->is_in_face(i,refP);
+ scalar_type v = gmm::abs(ml.trans_of_convex(cv)->convex_ref()->is_in_face(i,refP));
cnt++;
if (v < best_f || cnt == 0) { best_f = v; f = dim_type(i); }
}
@@ -345,7 +345,7 @@ build_slicers(const getfem::mesh& m, dal::ptr_collection<getfem::slicer_action>
* @CELL{'isovalues', @int orient, @tmf mf, @vec U, @scalar s} :
Cut using the isosurface of the field `U` (defined on the @tmf `mf`).
- The result is the set `{x such that `U`(x) <= `s`}` or `{x such that
+ The result is the set `{x such that :math:`U(x) \leq s`}` or `{x such that
`U`(x)=`s`}` or `{x such that `U`(x) >= `s`}` depending on the value of
`orient`.
@@ -355,8 +355,8 @@ build_slicers(const getfem::mesh& m, dal::ptr_collection<getfem::slicer_action>
considered (i.e. it is equivalent to @CELL{'boundary',{'none'}}).
* @CELL{'explode', @mat Coef} :
- Build an 'exploded' view of the mesh: each convex is shrinked (0 <
- `Coef` <= 1). In the case of 3D convexes, only their faces are kept.
+ Build an 'exploded' view of the mesh: each convex is shrinked (:math:`0 <
+ \text{Coef} \leq 1`). In the case of 3D convexes, only their faces are kept.
* @CELL{'union', SLICEOP1, SLICEOP2} :
Returns the union of slicing operations.
diff --git a/interface/src/gf_slice_get.cc b/interface/src/gf_slice_get.cc
index 8ef1b04..cf44e22 100644
--- a/interface/src/gf_slice_get.cc
+++ b/interface/src/gf_slice_get.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_slice_get.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_slice_get.cc 4114 2012-07-06 11:20:10Z renard $
#include <map>
#include <getfemint_misc.h>
#include <getfemint_mesh.h>
diff --git a/interface/src/gf_slice_set.cc b/interface/src/gf_slice_set.cc
index 79a03c4..bf2c600 100644
--- a/interface/src/gf_slice_set.cc
+++ b/interface/src/gf_slice_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <map>
#include <getfemint_misc.h>
diff --git a/interface/src/gf_spmat.cc b/interface/src/gf_spmat.cc
index 5a16939..2cd2c98 100644
--- a/interface/src/gf_spmat.cc
+++ b/interface/src/gf_spmat.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse.h>
#include <getfemint_gsparse_misc.h>
diff --git a/interface/src/gf_spmat_get.cc b/interface/src/gf_spmat_get.cc
index 76e9be7..4054735 100644
--- a/interface/src/gf_spmat_get.cc
+++ b/interface/src/gf_spmat_get.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/gf_spmat_set.cc b/interface/src/gf_spmat_set.cc
index d9aca88..c5bd496 100644
--- a/interface/src/gf_spmat_set.cc
+++ b/interface/src/gf_spmat_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint_gsparse.h>
#include <getfemint_gsparse_misc.h>
diff --git a/interface/src/gf_undelete.cc b/interface/src/gf_undelete.cc
index fe46586..05b1447 100644
--- a/interface/src/gf_undelete.cc
+++ b/interface/src/gf_undelete.cc
@@ -1,24 +1,24 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Luis Saavedra.
-//
-// This file is a part of GetFEM++
-//
-// GetFEM++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-// $Id: gf_undelete.cc 3468 2010-02-24 20:12:15Z renard $
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Luis Saavedra.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+// $Id: gf_undelete.cc 4114 2012-07-06 11:20:10Z renard $
#include <getfemint.h>
#include <getfemint_workspace.h>
diff --git a/interface/src/gf_util.cc b/interface/src/gf_util.cc
index 0b8e979..5ac11e1 100644
--- a/interface/src/gf_util.cc
+++ b/interface/src/gf_util.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_misc.h>
@@ -105,33 +105,41 @@ void gf_util(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
);
- /*@FUNC ('trace level', @int level)
+ /*@FUNC tl = ('trace level' [, @int level])
Set the verbosity of some getfem++ routines.
Typically the messages printed by the model bricks, 0 means no
- trace message (default is 3).@*/
+ trace message (default is 3). if no level is given,
+ the current trace level is returned. @*/
sub_command
- ("trace level", 1, 1, 0, 0,
- gmm::set_traces_level(in.pop().to_integer(0, 100));
+ ("trace level", 0, 1, 0, 1,
+ if (in.remaining())
+ gmm::set_traces_level(in.pop().to_integer(0, 100));
+ else
+ out.pop().from_integer(int(gmm::traces_level::level()));
);
- /*@FUNC ('warning level', @int level)
+ /*@FUNC tl = ('warning level', @int level)
Filter the less important warnings displayed by getfem.
- 0 means no warnings, default level is 3.@*/
+ 0 means no warnings, default level is 3. if no level is given,
+ the current warning level is returned. @*/
sub_command
- ("warning level", 1, 1, 0, 0,
- gmm::set_warning_level(in.pop().to_integer(0, 100));
+ ("warning level", 0, 1, 0, 1,
+ if (in.remaining())
+ gmm::set_warning_level(in.pop().to_integer(0, 100));
+ else
+ out.pop().from_integer(int(gmm::warning_level::level()));
);
}
- if (m_in.narg() < 1) THROW_BADARG( "Wrong number of input arguments");
+ if (m_in.narg() < 1) THROW_BADARG("Wrong number of input arguments");
- std::string init_cmd = m_in.pop().to_string();
- std::string cmd = cmd_normalize(init_cmd);
+ std::string init_cmd = m_in.pop().to_string();
+ std::string cmd = cmd_normalize(init_cmd);
SUBC_TAB::iterator it = subc_tab.find(cmd);
diff --git a/interface/src/gf_workspace.cc b/interface/src/gf_workspace.cc
index b9009f2..22f2af1 100644
--- a/interface/src/gf_workspace.cc
+++ b/interface/src/gf_workspace.cc
@@ -1,28 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfemint.h>
#include <getfemint_workspace.h>
#include <algorithm>
+#ifndef _MSC_VER
#include <unistd.h>
+#endif
#include <iomanip>
#include <getfem/getfem_mat_elem.h>
#include <getfemint_mdbrick.h>
@@ -223,10 +225,12 @@ void gf_workspace(getfemint::mexargs_in& m_in, getfemint::mexargs_out& m_out) {
/* Unofficial function */
+#ifndef _MSC_VER
sub_command
("chdir", 1, 1, 0, 0,
if (::chdir(in.pop().to_string().c_str())) {}
);
+#endif
/*@FUNC ('class name', i)
Return the class name of object i (if I is a mesh handle, it
diff --git a/interface/src/gfi_array.c b/interface/src/gfi_array.c
old mode 100755
new mode 100644
index 76b0358..5d68908
--- a/interface/src/gfi_array.c
+++ b/interface/src/gfi_array.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <assert.h>
#include <stdlib.h>
diff --git a/interface/src/gfi_array.h b/interface/src/gfi_array.h
index 4b7626c..b22578d 100644
--- a/interface/src/gfi_array.h
+++ b/interface/src/gfi_array.h
@@ -1,22 +1,23 @@
/* -*- c++ -*- (enables emacs c++ mode) */
/*===========================================================================
-
- Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
+
Getfem++ is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
- License for more details.
+ License and GCC Runtime Library Exception for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
+
As a special exception, you may use this file as it is a part of a free
software library without restriction. Specifically, if other files
instantiate templates or use macros or inline functions from this file,
@@ -25,8 +26,8 @@
to be covered by the GNU Lesser General Public License. This exception
does not however invalidate any other reasons why the executable file
might be covered by the GNU Lesser General Public License.
-
- ===========================================================================*/
+
+===========================================================================*/
#ifndef GFI_ARRAY
#define GFI_ARRAY
@@ -41,10 +42,11 @@
#endif
/* This is very important that the following classes respects the
- alphabetic order. The order have to be the same than in getfem.py !!!
+ alphabetic order. The order has to be the same as in getfem.py !!!
Do not forget to modify also 'name_of_getfemint_class_id' in getfemint.cc
*/
-typedef enum { CVSTRUCT_CLASS_ID,
+typedef enum { CONT_STRUCT_CLASS_ID,
+ CVSTRUCT_CLASS_ID,
ELTM_CLASS_ID,
FEM_CLASS_ID,
GEOTRANS_CLASS_ID,
@@ -57,6 +59,7 @@ typedef enum { CVSTRUCT_CLASS_ID,
MESHFEM_CLASS_ID,
MESHIM_CLASS_ID,
MESH_LEVELSET_CLASS_ID,
+ MESHER_OBJECT_CLASS_ID,
MODEL_CLASS_ID,
PRECOND_CLASS_ID,
SLICE_CLASS_ID,
diff --git a/interface/src/gfi_rpc.h b/interface/src/gfi_rpc.h
index b51e10e..86bc761 100644
--- a/interface/src/gfi_rpc.h
+++ b/interface/src/gfi_rpc.h
@@ -1,32 +1,33 @@
-/* -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
*/
#ifndef GFI_RPC_H
diff --git a/interface/src/gfi_rpc_clnt.c b/interface/src/gfi_rpc_clnt.c
old mode 100755
new mode 100644
index bd63b61..b14dfe9
--- a/interface/src/gfi_rpc_clnt.c
+++ b/interface/src/gfi_rpc_clnt.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
* Please do not edit this file.
diff --git a/interface/src/gfi_rpc_server.c b/interface/src/gfi_rpc_server.c
old mode 100755
new mode 100644
index cbb7b0e..36af03b
--- a/interface/src/gfi_rpc_server.c
+++ b/interface/src/gfi_rpc_server.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
* This is sample code generated by rpcgen.
diff --git a/interface/src/gfi_rpc_svc.c b/interface/src/gfi_rpc_svc.c
old mode 100755
new mode 100644
index 7c16d9c..a744c5f
--- a/interface/src/gfi_rpc_svc.c
+++ b/interface/src/gfi_rpc_svc.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
* Please do not edit this file.
diff --git a/interface/src/gfi_rpc_xdr.c b/interface/src/gfi_rpc_xdr.c
old mode 100755
new mode 100644
index e95b198..5f017bf
--- a/interface/src/gfi_rpc_xdr.c
+++ b/interface/src/gfi_rpc_xdr.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
* Please do not edit this file.
diff --git a/interface/src/matlab/Makefile.am b/interface/src/matlab/Makefile.am
index 67032a8..54e3eb9 100644
--- a/interface/src/matlab/Makefile.am
+++ b/interface/src/matlab/Makefile.am
@@ -87,9 +87,10 @@ clean-local: clean-m-files
toolboxdir=@TOOLBOXDIR@
install:
- $(mkinstalldirs) $(toolboxdir)/
+ $(mkinstalldirs) $(toolboxdir)/private
@INSTALL@ -m 644 -t $(toolboxdir)/ *.m
@INSTALL@ -m 644 -t $(toolboxdir)/ $(srcdir)/*.m
+ @INSTALL@ -m 644 -t $(toolboxdir)/private/ $(srcdir)/private/*.m
@list='$(MATLAB_OBJ_DIRS)'; for p in $$list; do \
$(mkinstalldirs) $(toolboxdir)/$$p; \
@INSTALL@ -m 644 -t $(toolboxdir)/$$p $$p/*.m; \
@@ -97,4 +98,4 @@ install:
@INSTALL@ -m 744 -t $(toolboxdir)/ gf_matlab at MATLAB_COM_EXT@
uninstall:
- rm -fr $(toolboxdir)
\ No newline at end of file
+ rm -fr $(toolboxdir)
diff --git a/interface/src/matlab/Makefile.in b/interface/src/matlab/Makefile.in
index 6179599..0ea8794 100644
--- a/interface/src/matlab/Makefile.in
+++ b/interface/src/matlab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -537,10 +540,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
@@ -679,9 +687,10 @@ clean-local: clean-m-files
rm -f gf_matlab at MATLAB_COM_EXT@
install:
- $(mkinstalldirs) $(toolboxdir)/
+ $(mkinstalldirs) $(toolboxdir)/private
@INSTALL@ -m 644 -t $(toolboxdir)/ *.m
@INSTALL@ -m 644 -t $(toolboxdir)/ $(srcdir)/*.m
+ @INSTALL@ -m 644 -t $(toolboxdir)/private/ $(srcdir)/private/*.m
@list='$(MATLAB_OBJ_DIRS)'; for p in $$list; do \
$(mkinstalldirs) $(toolboxdir)/$$p; \
@INSTALL@ -m 644 -t $(toolboxdir)/$$p $$p/*.m; \
diff --git a/interface/src/matlab/gf_plot.m b/interface/src/matlab/gf_plot.m
index 62562ef..7759c50 100644
--- a/interface/src/matlab/gf_plot.m
+++ b/interface/src/matlab/gf_plot.m
@@ -27,7 +27,10 @@ function [hsurf, hcontour, hquiver, hmesh, hdefmesh]=gf_plot(mf,U,varargin)
% 'cvlst',[] : list of convexes to plot (empty=>all convexes)
% 'title',[] : set the title
% 'contour',[] : list of contour values
-%%%%%%%%%%%%
+% 'disp_options', {'off'|'on'} : shows the option or not.
+%
+%
+
try
gf_workspace('push');
[hsurf, hcontour, hquiver, hmesh, hdefmesh]=gf_plot_aux(mf,U,varargin{:});
diff --git a/interface/src/matlab/gf_plot_1D.m b/interface/src/matlab/gf_plot_1D.m
index 8b45e0c..5dac517 100644
--- a/interface/src/matlab/gf_plot_1D.m
+++ b/interface/src/matlab/gf_plot_1D.m
@@ -55,7 +55,7 @@ function [hline, hdof] = gf_plot_1D_aux(mf, U, varargin)
m=gf_mesh_fem_get(mf, 'linked_mesh');
sl=gf_slice({'none'},m, REFINE);
Usl = gf_compute(mf,U,'interpolate on', sl);
- D = unique(gf_mesh_fem_get(mf, 'dof nodes'));
+ D = unique(gf_mesh_fem_get(mf, 'basic dof nodes'));
slD = gf_slice('points', m, D);
UD = gf_compute(mf,U,'interpolate on',slD);
@@ -82,4 +82,4 @@ function [hline, hdof] = gf_plot_1D_aux(mf, U, varargin)
% restore graphical context
set(cax,'NextPlot',ax_nextplot);
set(cfig,'NextPlot',fig_nextplot);
-
\ No newline at end of file
+
diff --git a/interface/src/matlab/gf_solve.m b/interface/src/matlab/gf_solve.m
index f6d5102..aca6ca1 100644
--- a/interface/src/matlab/gf_solve.m
+++ b/interface/src/matlab/gf_solve.m
@@ -301,13 +301,13 @@ function [U,P]=do_solve_stokes_cg(K,B,Fu,Fp)
function [U,P]=do_solve_stokes_cg3(K,B,Fu,Fp)
nu = size(K,2); np = size(B,2);
- disp('solve stokes usawa cholinc');
+ disp('solve stokes uzawa cholinc');
[pcB]=cholinc(K,'0');
pcBt = pcB';
- disp('solve stokes usawa first pcg');
+ disp('solve stokes uzawa first pcg');
P = zeros(np,1);
U = pcg(K,Fu - B*P,1e-6,100,pcBt,pcB);
- disp('solve stokes usawa : got U');
+ disp('solve stokes uzawa : got U');
for k=1:10000,
r = Fp - B'*U;
res = norm(r);
diff --git a/interface/src/matlab/gfm_common.c b/interface/src/matlab/gfm_common.c
index 22dcfca..47b0458 100644
--- a/interface/src/matlab/gfm_common.c
+++ b/interface/src/matlab/gfm_common.c
@@ -1,25 +1,23 @@
/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2010 Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 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 Lesser General Public
+ License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <assert.h>
#include <signal.h>
@@ -236,7 +234,6 @@ gfi_array_to_mxarray(gfi_array *t) {
static const int one = 1;
const int *dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
mwSize ndim2, *dim2;
- char msg[80];
int number = 450;
int ij;
/****************** dimensions array in mwSize */
@@ -265,7 +262,7 @@ gfi_array_to_mxarray(gfi_array *t) {
} break;
case GFI_DOUBLE: {
int i;
- double *pr, *pi;
+ double *pr = 0, *pi = 0;
if (!gfi_array_is_complex(t)) {
m = mxCreateNumericArray(ndim2, dim2, mxDOUBLE_CLASS, mxREAL);
pr=mxGetData(m);
@@ -274,7 +271,6 @@ gfi_array_to_mxarray(gfi_array *t) {
*pr++=t->storage.gfi_storage_u.data_double.data_double_val[i++];
}
} else {
- double *pr, *pi; int i;
m = mxCreateNumericArray(ndim2, dim2, mxDOUBLE_CLASS, mxCOMPLEX);
pr = mxGetData(m); pi = mxGetImagData(m);
for (i=0; i < t->storage.gfi_storage_u.data_double.data_double_len; ) {
@@ -370,7 +366,6 @@ gfi_array_list *
build_gfi_array_list(int nrhs, const mxArray *prhs[]) {
gfi_array_list *l;
int i;
- char msg[80];
gfi_array **pin;
diff --git a/interface/src/matlab/gfm_common.h b/interface/src/matlab/gfm_common.h
index 1296a1a..1651de3 100644
--- a/interface/src/matlab/gfm_common.h
+++ b/interface/src/matlab/gfm_common.h
@@ -1,34 +1,32 @@
/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- As a special exception, you may use this file as part of a free software
- library without restriction. Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License. This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 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 Lesser General Public
+ License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GFM_COMMON_H
#define GFM_COMMON_H
diff --git a/interface/src/matlab/gfm_mex.c b/interface/src/matlab/gfm_mex.c
index c60f82a..ab47bae 100644
--- a/interface/src/matlab/gfm_mex.c
+++ b/interface/src/matlab/gfm_mex.c
@@ -1,25 +1,23 @@
/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2010 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 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 Lesser General Public
+ License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <assert.h>
#include <string.h>
@@ -29,6 +27,9 @@
#include "gfm_common.h"
#include "getfem_interface.h"
+void set_superlu_callback(int (*cb)());
+int handle_getfem_callback();
+
/* main file for the giant gf_matlab mex-file */
/*
char* getfem_interface_main(int config_id, const char *function,
diff --git a/interface/src/matlab/gfm_rpc_mexint.c b/interface/src/matlab/gfm_rpc_mexint.c
index dc2f265..bb89041 100644
--- a/interface/src/matlab/gfm_rpc_mexint.c
+++ b/interface/src/matlab/gfm_rpc_mexint.c
@@ -1,25 +1,23 @@
/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2006-2006 Yves Renard, Julien Pommier.
-
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 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 Lesser General Public
+ License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
* This is sample code generated by rpcgen.
diff --git a/interface/src/matlab/private/Makefile.in b/interface/src/matlab/private/Makefile.in
index 2bfb81a..f681ed3 100644
--- a/interface/src/matlab/private/Makefile.in
+++ b/interface/src/matlab/private/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(toolboxdir)"
SCRIPTS = $(toolbox_SCRIPTS)
SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -320,9 +329,7 @@ uninstall-toolboxSCRIPTS:
@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+ dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -383,10 +390,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/src/python/Makefile.in b/interface/src/python/Makefile.in
index 61a3580..98523d9 100644
--- a/interface/src/python/Makefile.in
+++ b/interface/src/python/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -73,6 +73,13 @@ am__nobase_list = $(am__nobase_strip_setup); \
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__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
am__installdirs = "$(DESTDIR)$(gfpythondir)" \
"$(DESTDIR)$(gfpyexecdir)"
py_compile = $(top_srcdir)/py-compile
@@ -101,6 +108,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -119,6 +127,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -135,6 +144,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -199,6 +209,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -234,7 +245,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -322,11 +332,8 @@ install-gfpythonPYTHON: $(gfpython_PYTHON)
$(INSTALL_DATA) $$files "$(DESTDIR)$(gfpythondir)" || exit $$?; \
done || exit $$?; \
if test -n "$$dlist"; then \
- if test -z "$(DESTDIR)"; then \
- PYTHON=$(PYTHON) $(py_compile) --basedir "$(gfpythondir)" $$dlist; \
- else \
- PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gfpythondir)" $$dlist; \
- fi; \
+ $(am__py_compile) --destdir "$(DESTDIR)" \
+ --basedir "$(gfpythondir)" $$dlist; \
else :; fi
uninstall-gfpythonPYTHON:
@@ -334,14 +341,14 @@ uninstall-gfpythonPYTHON:
@list='$(gfpython_PYTHON)'; test -n "$(gfpythondir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
+ dir='$(DESTDIR)$(gfpythondir)'; \
filesc=`echo "$$files" | sed 's|$$|c|'`; \
fileso=`echo "$$files" | sed 's|$$|o|'`; \
- echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(gfpythondir)" && rm -f $$files || exit $$?; \
- echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$filesc ")"; \
- cd "$(DESTDIR)$(gfpythondir)" && rm -f $$filesc || exit $$?; \
- echo " ( cd '$(DESTDIR)$(gfpythondir)' && rm -f" $$fileso ")"; \
- cd "$(DESTDIR)$(gfpythondir)" && rm -f $$fileso
+ st=0; \
+ for files in "$$files" "$$filesc" "$$fileso"; do \
+ $(am__uninstall_files_from_dir) || st=$$?; \
+ done; \
+ exit $$st
install-nodist_gfpyexecPYTHON: $(nodist_gfpyexec_PYTHON)
@$(NORMAL_INSTALL)
test -z "$(gfpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(gfpyexecdir)"
@@ -360,11 +367,8 @@ install-nodist_gfpyexecPYTHON: $(nodist_gfpyexec_PYTHON)
$(INSTALL_DATA) $$files "$(DESTDIR)$(gfpyexecdir)" || exit $$?; \
done || exit $$?; \
if test -n "$$dlist"; then \
- if test -z "$(DESTDIR)"; then \
- PYTHON=$(PYTHON) $(py_compile) --basedir "$(gfpyexecdir)" $$dlist; \
- else \
- PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gfpyexecdir)" $$dlist; \
- fi; \
+ $(am__py_compile) --destdir "$(DESTDIR)" \
+ --basedir "$(gfpyexecdir)" $$dlist; \
else :; fi
uninstall-nodist_gfpyexecPYTHON:
@@ -372,14 +376,14 @@ uninstall-nodist_gfpyexecPYTHON:
@list='$(nodist_gfpyexec_PYTHON)'; test -n "$(gfpyexecdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
+ dir='$(DESTDIR)$(gfpyexecdir)'; \
filesc=`echo "$$files" | sed 's|$$|c|'`; \
fileso=`echo "$$files" | sed 's|$$|o|'`; \
- echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$files || exit $$?; \
- echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$filesc ")"; \
- cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$filesc || exit $$?; \
- echo " ( cd '$(DESTDIR)$(gfpyexecdir)' && rm -f" $$fileso ")"; \
- cd "$(DESTDIR)$(gfpyexecdir)" && rm -f $$fileso
+ st=0; \
+ for files in "$$files" "$$filesc" "$$fileso"; do \
+ $(am__uninstall_files_from_dir) || st=$$?; \
+ done; \
+ exit $$st
tags: TAGS
TAGS:
@@ -434,10 +438,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/src/python/__init__.py b/interface/src/python/__init__.py
index 7b699e8..dbfee50 100644
--- a/interface/src/python/__init__.py
+++ b/interface/src/python/__init__.py
@@ -3,24 +3,14 @@
The main package for getfem++ support for Python. Normally used by importing
the package, and perhaps a particular module inside it.
-This package is licensed under the GNU LGPL 2.1.
+This package is licensed under the GNU LGPL 3.
See the COPYING file in the getfem installation directory or
print getfem.__LICENSE__
"""
-__revision__ = "$Revision: 3664 $"
+__revision__ = "$Revision: 4154 $"
__LICENSE__ = """\
-GetFEM++ is free software; you can redistribute it and/or modify it
-under the terms of the GNU Lesser General Public License as published
-by the Free Software Foundation; either version 2.1 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 Lesser General Public
-License for more details.
-You should have received a copy of the GNU Lesser General Public License
-along with this program; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+GETFem++ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version along with the GCC Runtime Library Exception either version 3.1 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 Lesser General Public License and GCC Runtime Library Exception for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
"""
from getfem import *
diff --git a/interface/src/python/getfem.py b/interface/src/python/getfem.py
index aba969e..ccfdee6 100644
--- a/interface/src/python/getfem.py
+++ b/interface/src/python/getfem.py
@@ -9,17 +9,18 @@
#
# GetFEM++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
#
-# File autogenerated by interface/bin/extract_doc. Do not edit it.
+# File autogenerated by bin/extract_doc. Do not edit it.
"""GetFEM-interface classes.
Provides access to the pseudo-objects exported by the python-getfem
@@ -80,6 +81,136 @@ def generic_destructor(self, destructible=True):
#
+# GetFEM class ContStruct definition.
+#
+
+class ContStruct:
+ """GetFEM ContStruct object
+
+ This object serves for storing parameters and data used in numerical
+ continuation (for more details about the continuation see the Getfem++ user
+ documentation).
+
+ """
+ def __init__(self, *args):
+ """General constructor for ContStruct objects
+
+ * ``S = ContStruct(Model md, string dataname_parameter[,string dataname_init, string dataname_final, string dataname_current], scalar sc_fac[, ...])``
+ The variable `dataname_parameter` should parametrise the model given by
+ `md`. If the parametrisation is done via some vector datum,
+ `dataname_init` and `dataname_final` should store two given values of
+ this datum determining the parametrisation, and `dataname_current`
+ serves for actual values of this datum. `sc_fac` is a scale factor
+ involved in the norm used in the continuation.
+
+ Additional options:
+
+ - 'lsolver', string SOLVER_NAME
+ name of the solver to be used for the incorporated linear systems
+ (the default value is 'auto', which lets getfem choose itself);
+ possible values are 'superlu', 'mumps' (if supported), 'cg/ildlt',
+ 'gmres/ilu' and 'gmres/ilut';
+ - 'max_iter', int NIT
+ maximum number of iterations allowed in the correction (the default
+ value is 10);
+ - 'thr_iter', int TIT
+ threshold number of iterations of the correction for enlarging the
+ step size (the default value is 8);
+ - 'max_res', scalar RES
+ target residual value of the new point (the default value is 1e-6);
+ - 'max_diff', scalar DIFF
+ determines a convergence criterion to the new tangent vector (the
+ default value is 1e-9);
+ - 'min_ang', scalar ANG
+ minimal value of the cosine of the angle between tangents to the
+ solution curve at the old point and the new one (the default value
+ is 0.9);
+ - 'h_init', scalar HIN
+ initial step size (the default value is 1e-2);
+ - 'h_max', scalar HMAX
+ maximal step size (the default value is 1e-1);
+ - 'h_min', scalar HMIN
+ minimal step size (the default value is 1e-5);
+ - 'h_inc', scalar HINC
+ factor for enlarging the step size (the default value is 1.3);
+ - 'h_dec', scalar HDEC
+ factor for diminishing the step size (the default value is 0.5);
+ - 'epsilon', scalar EPS
+ increment to be used to compute the incorporated finite
+ differences (the default value is 1e-8);
+ - 'max_res_solve', scalar RES_SOLVE
+ target residual value for the linear systems to be solved (the
+ default value is 1e-7);
+ - 'nb_test', int NTEST
+ number of evaluations of the test function when passing through
+ a boundary between different smooth pieces;
+ - 'noisy' or 'very_noisy'
+ determines how detailed information has to be displayed during the
+ process (residual values etc.).
+
+ """
+ generic_constructor(self,'cont_struct',*args)
+ def __del__(self):
+ generic_destructor(self, destructible=True)
+ def get(self, *args):
+ return getfem('cont_struct_get',self.id, *args)
+ def __repr__(self):
+ getfem('cont_struct_get',self.id, 'display')
+ return ''
+ def __str__(self):
+ return self.char()
+
+ def init_test_function(self, tangent, tangent_parameter):
+ """Initialise the border of the bordered system that serves for calculating
+ the test function. Return the value of test function for the solution
+ and the value of the parameter saved in the corresponding model object
+ and the tangent given by `tangent` and `tangent_parameter`."""
+ return self.get("init_test_function", tangent, tangent_parameter)
+
+
+ def init_Moore_Penrose_continuation(self, init_dir):
+ """Initialise the Moore-Penrose continuation: Return a unit tangent
+ corresponding to the solution branch at the solution and the
+ value of the parameter saved in the corresponding model object,
+ and an initial step size for the continuation. Direction of the
+ computed tangent with respect to the parameter is determined by the
+ sign of `init_dir`."""
+ return self.get("init_Moore_Penrose_continuation", init_dir)
+
+
+ def Moore_Penrose_continuation(self, tangent, tangent_parameter, h):
+ """Compute one step of the Moore-Penrose continuation: Take the solution
+ and the value of the parameter saved in the corresponding model object,
+ the tangent given by `tangent` and `tangent_parameter`, and the step
+ size `h`, save a new point on the solution curve into the model object,
+ and return a new tangent and a step size for the next step. If the
+ returned step size equals zero, the continuation has failed."""
+ return self.get("Moore_Penrose_continuation", tangent, tangent_parameter, h)
+
+
+ def test_function(self):
+ """Return the last value of the test function and eventaully all the
+ values calculated when passing through a boundary between different
+ smooth pieces."""
+ return self.get("test_function")
+
+
+ def char(self):
+ """Output a (unique) string representation of the ContStruct.
+
+ This can be used to perform comparisons between two
+ different ContStruct objects.
+ This function is to be completed.
+ """
+ return self.get("char")
+
+
+ def display(self):
+ """Display a short summary for a ContStruct object."""
+ return self.get("display")
+
+
+#
# GetFEM class CvStruct definition.
#
@@ -150,7 +281,7 @@ class Eltm:
This object represents a type of elementary matrix. In order to obtain a
- numerical value of theses matrices, see MeshIm.eltm().
+ numerical value of these matrices, see MeshIm.eltm().
If you have very particular assembling needs, or if you just want to check
the content of an elementary matrix, this function might be useful. But
@@ -675,7 +806,7 @@ class Integ:
"""Return the total number of integration points.
Count the points for the volume integration, and points for
- surface integration on each face of the reference convex.<Par>
+ surface integration on each face of the reference convex.
Only for approximate methods, this has no meaning for exact
integration methods!"""
@@ -738,10 +869,10 @@ class LevelSet:
The level-set object is represented by a primary level-set and optionally
a secondary level-set used to represent fractures (if p(x) is the primary
level-set function and s(x) is the secondary level-set, the crack is
- defined by p(x)=0 and s(x)<=0: the role of the secondary is to determine
+ defined by :math:`p(x)=0` and :math:`s(x)\\leq0` : the role of the secondary is to determine
the crack front/tip).
- .. note::
+ note:
All tools listed below need the package qhull installed on your
system. This package is widely available. It computes convex hull and
@@ -1385,6 +1516,10 @@ class Mesh:
* ``M = Mesh('cartesian', vec X[, vec Y[, vec Z,..]])``
Build quickly a regular mesh of quadrangles, cubes, etc.
+ * ``M = Mesh('cartesian Q1', vec X, vec Y[, vec Z,..])``
+ Build quickly a regular mesh of quadrangles, cubes, etc. with
+ Q1 elements.
+
* ``M = Mesh('triangles grid', vec X, vec Y)``
Build quickly a regular mesh of triangles.
@@ -1453,6 +1588,23 @@ class Mesh:
* ``M = Mesh('clone', Mesh m2)``
Create a copy of a mesh.
+ * ``M = Mesh('generate', MesherObject mo, scalar h[, int K = 1[, mat vertices]])``
+ Call the (very) experimental mesher of Getfem on the geometry
+ represented by `mo`. please control the conformity of the produced mesh.
+ You can add the mesher by adding a priori vertices in the array
+ `vertices` which should be of size ``n x m`` where ``n`` n is the
+ dimension of the mesh and ``m`` the number of points. `h` is
+ approximate diameter of the elements. `K` is the degree of the
+ mesh ( > 1 for curved boundaries). The mesher try to optimize the
+ quality of the elements. This operation may be time consuming.
+ Note that if the mesh generation fails, because of some random
+ procedure used, it will not give necessarily the same result due
+ to random procedures used.
+ The messages send to the console by the mesh generation can be
+ desactivated using `gf_util('trace level', 2)`. More information
+ can be obtained by `gf_util('trace level', 4)`.
+
+
"""
generic_constructor(self,'mesh',*args)
def __del__(self):
@@ -1703,7 +1855,7 @@ class Mesh:
def quality(self, CVIDs=None):
- """Return an estimation of the quality of each convex (0 <= Q <= 1)."""
+ """Return an estimation of the quality of each convex (:math:`0 \\leq Q \\leq 1`)."""
return self.get("quality", CVIDs)
@@ -1884,13 +2036,16 @@ class Mesh:
def set_region(self, rnum, CVFIDs):
- """Assigns the region number `rnum` to the convex faces stored in each
- column of the matrix `CVFIDs`.
+ """Assigns the region number `rnum` to the convex faces (or convexes)
+ stored in each column of the matrix `CVFIDs`.
The first row of `CVFIDs` contains a convex #ids, and the second row
contains a face number in the convex (or ``-1``
for the whole convex (regions are usually used to store a list of
- convex faces, but you may also use them to store a list of convexes)."""
+ convex faces, but you may also use them to store a list of convexes).
+
+ If a vector is provided (or a one row matrix) the region will represent
+ the corresponding set of convex."""
return self.set("region", rnum, CVFIDs)
@@ -1954,7 +2109,7 @@ class Mesh:
class MeshFem:
"""GetFEM MeshFem object
- This object represent a finite element method defined on a whole mesh.
+ This object represents a finite element method defined on a whole mesh.
"""
def __init__(self, *args):
@@ -1989,7 +2144,8 @@ class MeshFem:
* ``MF = MeshFem('global function', Mesh m, LevelSet ls, (GlobalFunction GF1,...)[, int Qdim_m])``
Create a MeshFem whose base functions are global function given by the
- user.
+ user in the system of coordinate defined by the iso-values of the two
+ level-set function of `ls`.
* ``MF = MeshFem('partial', MeshFem mf, ivec DOFs[, ivec RCVs])``
Build a restricted MeshFem by keeping only a subset of the degrees of
@@ -2119,7 +2275,7 @@ class MeshFem:
Lagrangian means that each base function Phi[i] is such that
Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
- the jth base function, and delta(i,j) = 1 if i==j, else 0.<Par>
+ the jth base function, and delta(i,j) = 1 if i==j, else 0.
If `CVids` is omitted, it returns 1 if all convexes in the mesh
are Lagrangian. If `CVids` is used, it returns the convex indices
@@ -2329,11 +2485,11 @@ class MeshFem:
Examples::
- mf.eval('x[0]*x[1]') # interpolates the function 'x*y'
- mf.eval('[x[0],x[1]]') # interpolates the vector field '[x,y]'
+ mf.eval('x*y') # interpolates the function 'x*y'
+ mf.eval('[x,y]') # interpolates the vector field '[x,y]'
import numpy as np
- mf.eval('np.sin(x[0])',globals(),locals()) # interpolates the function sin(x)
+ mf.eval('np.sin(x)',globals(),locals()) # interpolates the function sin(x)
"""
P = self.basic_dof_nodes()
nbd = P.shape[1]
@@ -2344,15 +2500,18 @@ class MeshFem:
Ind = numpy.arange(0,nbd,self.qdim()) # = sdof
P = P[:,Ind]
nbd = P.shape[1] # = nb_sdof
- x = P[:,0]
- gl['x'] = P[:,0]
- lo['x'] = P[:,0]
+ vars = ('x','y','z','u','v','w')
+ nbvars = min(P.shape[0],len(vars))
+ for i in xrange(0,nbvars):
+ gl[vars[i]] = P[i,0]
+ lo[vars[i]] = P[i,0]
r = numpy.array(eval(expression,gl,lo))
Z = numpy.zeros(r.shape + (nbd,), r.dtype)
- for i in xrange(0,nbd):
- gl['x'] = P[:,i]
- lo['x'] = P[:,i]
- Z[...,i] = eval(expression,gl,lo)
+ for j in xrange(0,nbd):
+ for i in xrange(0,nbvars):
+ gl[vars[i]] = P[i,j]
+ lo[vars[i]] = P[i,j]
+ Z[...,j] = eval(expression,gl,lo)
return Z
@@ -2380,7 +2539,7 @@ class MeshFem:
Similar to MeshFem.classical_fem() except that
FEM_PK_DISCONTINUOUS is used. Param `alpha` the node inset,
- 0 <= alpha < 1, where 0 implies usual dof nodes, greater values
+ :math:`0 \\leq alpha < 1`, where 0 implies usual dof nodes, greater values
move the nodes toward the center of gravity, and 1 means that all
degrees of freedom collapse on the center of gravity."""
return self.set("classical_discontinuous_fem", K, alpha, *args)
@@ -2404,6 +2563,15 @@ class MeshFem:
return self.set("reduction", s)
+ def reduce_meshfem(self, RM):
+ """Set reduction mesh fem
+ This function selects the degrees of freedom of the finite element
+ method by selecting a set of independent vectors of the matrix RM.
+ The numer of columns of RM should corresponds to the number of degrees
+ of fredoom of the finite element method. """
+ return self.set("reduce_meshfem", RM)
+
+
def set_dof_partition(self, DOFP):
"""Change the 'dof_partition' array.
@@ -2428,7 +2596,7 @@ class MeshFem:
class MeshIm:
"""GetFEM MeshIm object
- This object represent an integration method defined on a whole mesh (an
+ This object represents an integration method defined on a whole mesh (an
potentialy on its boundaries).
"""
@@ -2457,6 +2625,11 @@ class MeshIm:
The `where` argument define the domain of integration with respect to
the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
'BOUNDARY'.
+
+ CAUTION: this integration method will be defined only on the element
+ cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+ it is mandatory to use the method ``MeshIm.set_integ()`` to define
+ the integration method on the remaining elements.
* ``MIM = MeshIm(Mesh m, [{Integ im|int im_degree}])``
Build a new MeshIm object.
@@ -2570,8 +2743,9 @@ class MeshIm:
integration method with an integration method handle `im` obtained
via Integ('IM_SOMETHING'), or to let getfem choose a suitable
integration method with `im_degree` (choosen such that polynomials
- of `degree <= im_degree` are exactly integrated. If `im_degree=-1`,
- then the dummy integration method IM_NONE will be used.)"""
+ of :math:`\\text{degree} \\leq \\text{im\\_degree}` are exactly integrated.
+ If `im_degree=-1`, then the dummy integration method IM_NONE will
+ be used.)"""
return self.set("integ", *args)
@@ -2689,6 +2863,88 @@ class MeshLevelSet:
#
+# GetFEM class MesherObject definition.
+#
+
+class MesherObject:
+ """GetFEM MesherObject object
+
+ This object represents a geometric object to be meshed by the (very)
+ experimental meshing procedure of Getfem.
+
+ """
+ def __init__(self, *args):
+ """General constructor for MesherObject objects
+
+ * ``MF = MesherObject('ball', vec center, scalar radius)``
+ Represents a ball of corresponding center and radius.
+
+
+ * ``MF = MesherObject('half space', vec origin, vec normal_vector)``
+ Represents an half space delimited by the plane which contains the
+ origin and normal to `normal_vector`. The selected part is the part
+ in the direction of the normal vector. This allows to cut a geometry
+ with a plane for instance to build a polygon or a polyhedron.
+
+
+ * ``MF = MesherObject('cylinder', vec origin, vec n, scalar length, scalar radius)``
+ Represents a cylinder (in any dimension) of a certain radius whose axis is determined by the origin, a vector `n` and a certain length.
+
+
+ * ``MF = MesherObject('cone', vec origin, vec n, scalar length, scalar half_angle)``
+ Represents a cone (in any dimension) of a certain half-angle (in radians) whose axis is determined by the origin, a vector `n` and a certain length.
+
+
+ * ``MF = MesherObject('torus', scalar R, scalar r)``
+ Represents a torus in 3d of axis along the z axis with a great radius
+ equal to `R` and small radius equal to `r`. For the moment, the
+ possibility to change the axis is not given.
+
+
+ * ``MF = MesherObject('rectangle', vec rmin, vec rmax)``
+ Represents a rectangle (or parallelepiped in 3D) parallel to the axes.
+
+
+ * ``MF = MesherObject('intersect', MesherObject object1 , MesherObject object2, ...)``
+ Intersection of several objects.
+
+
+ * ``MF = MesherObject('union', MesherObject object1 , MesherObject object2, ...)``
+ Union of several objects.
+
+
+ * ``MF = MesherObject('set minus', MesherObject object1 , MesherObject object2)``
+ Geometric object being object1 minus object2.
+
+
+ """
+ generic_constructor(self,'mesher_object',*args)
+ def __del__(self):
+ generic_destructor(self, destructible=False)
+ def get(self, *args):
+ return getfem('mesher_object_get',self.id, *args)
+ def __repr__(self):
+ getfem('mesher_object_get',self.id, 'display')
+ return ''
+ def __str__(self):
+ return self.char()
+
+ def char(self):
+ """Output a (unique) string representation of the MesherObject.
+
+ This can be used to perform comparisons between two
+ different MesherObject objects.
+ This function is to be completed.
+ """
+ return self.get("char")
+
+
+ def display(self):
+ """displays a short summary for a MesherObject object."""
+ return self.get("display")
+
+
+#
# GetFEM class Model definition.
#
@@ -2731,6 +2987,11 @@ class Model:
return self.get("is_complex")
+ def nbdof(self):
+ """Return the total number of degrees of freedom of the model."""
+ return self.get("nbdof")
+
+
def tangent_matrix(self):
"""Return the tangent matrix stored in the model ."""
return self.get("tangent_matrix")
@@ -2741,6 +3002,20 @@ class Model:
return self.get("rhs")
+ def brick_term_rhs(self, ind_brick, ind_term=None, sym=None, ind_iter=None):
+ """Gives the access to the part of the right hand side of a term
+ of a particular nonlinear brick. Does not account of the eventual
+ time dispatcher. An assembly of the rhs has to be done first.
+ `ind_brick` is the brick index. `ind_term` is the index of the
+ term inside the brick (default value : 0).
+ `sym` is to access to the second right hand side of for symmetric
+ terms acting on two different variables (default is 0).
+ `ind_iter` is the iteration number when time dispatchers are
+ used (default is 0).
+ """
+ return self.get("brick_term_rhs", ind_brick, ind_term, sym, ind_iter)
+
+
def memsize(self):
"""Return a rough approximation of the amount of memory (in bytes) used by
the model."""
@@ -2762,6 +3037,11 @@ class Model:
return self.get("variable", name, niter)
+ def mesh_fem_of_variable(self, name):
+ """Gives access to the `mesh_fem` of a variable or data."""
+ return self.get("mesh_fem_of_variable", name)
+
+
def mult_varname_Dirichlet(self, ind_brick):
"""Gives the name of the multiplier variable for a Dirichlet brick.
If the brick is not a Dirichlet condition with multiplier brick,
@@ -2777,7 +3057,7 @@ class Model:
def from_variables(self):
"""Return the vector of all the degrees of freedom of the model consisting
- of the concatenation of the variables of the model (usefull
+ of the concatenation of the variables of the model (useful
to solve your problem with you own solver). """
return self.get("from_variables")
@@ -2788,13 +3068,13 @@ class Model:
'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
the pseudo_potential is returned).
The default is to build the whole
- tangent linear system (matrix and rhs). This function is usefull
+ tangent linear system (matrix and rhs). This function is useful
to solve your problem with you own solver. """
return self.get("assembly", option)
def solve(self, *args):
- """Synopsis: Model.solve(self[, ...])
+ """Synopsis: (nbit, converged) = Model.solve(self[, ...])
Run the standard getfem solver.
@@ -2811,6 +3091,9 @@ class Model:
set the maximum iterations numbers.
- 'max_res', @float RES
set the target residual value.
+ - 'diverged_res', @float RES
+ set the threshold value of the residual beyond which the iterative
+ method is considered to diverge (default is 1e200).
- 'lsolver', string SOLVER_NAME
select explicitely the solver used for the linear systems (the
default value is 'auto', which lets getfem choose itself).
@@ -2819,14 +3102,36 @@ class Model:
- 'lsearch', string LINE_SEARCH_NAME
select explicitely the line search method used for the linear systems (the
default value is 'default').
- Possible values are 'simplest', 'systematic'.
+ Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
- 'with pseudo potential'
for nonlinear problems, the criterion of the line search will
be a pseudo potential instead of the residual. Still experimental since
- not all bricks define a pseudo potential."""
+ not all bricks define a pseudo potential.
+
+ Return the number of iterations, if a iterative method is used.
+
+ Note that it is possible to disable some variables
+ (see Model.disable_variable() ) in order to
+ solve the problem only with respect to a subset of variables (the
+ disabled variables are the considered as data) for instance to
+ replace the global Newton strategy with a fixed point one."""
return self.get("solve", *args)
+ def test_tangent_matrix(self, EPS=None, *args):
+ """Synopsis: Model.test_tangent_matrix(self[, scalar EPS[, int NB[, scalar scale]]])
+
+ Test the consistency of the tangent matrix in some random positions
+ and random directions (useful to test newly created bricks).
+ `EPS` is the value of the small parameter for the finite difference
+ computation of the derivative is the random direction (default is 1E-6).
+ `NN` is the number of tests (default is 100). `scale` is a parameter
+ for the random position (default is 1). Each dof od the random
+ position is chosen in the range [-scale, scale].
+ """
+ return self.get("test_tangent_matrix", EPS, *args)
+
+
def compute_isotropic_linearized_Von_Mises_or_Tresca(self, varname, dataname_lambda, dataname_mu, mf_vm, version=None):
"""Compute the Von-Mises stress or the Tresca stress of a field (only
valid for isotropic linearized elasticity in 3D). `version` should
@@ -2845,9 +3150,21 @@ class Model:
return self.get("compute_Von_Mises_or_Tresca", varname, lawname, dataname, mf_vm, version)
+ def compute_second_Piola_Kirchhoff_tensor(self, varname, lawname, dataname, mf_sigma):
+ """Compute on `mf_sigma` the second Piola Kirchhoff stress tensor of a field
+ for nonlinear elasticity in 3D. `lawname` is the constitutive law which
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ `dataname` is a vector of parameters for the constitutive law. Its length
+ depends on the law. It could be a short vector of constant values or a
+ vector field described on a finite element method for variable
+ coefficients.
+ """
+ return self.get("compute_second_Piola_Kirchhoff_tensor", varname, lawname, dataname, mf_sigma)
+
+
def compute_plasticity_Von_Mises_or_Tresca(self, datasigma, mf_vm, version=None):
"""Compute on `mf_vm` the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
- `datasigma` is a vector which contains the stress constraints values supported by the mesh.
+ `datasigma` is a vector which contains the stress constraints values supported by the mesh.
`version` should be 'Von_Mises' or 'Tresca' ('Von_Mises' is the default)."""
return self.get("compute_plasticity_Von_Mises_or_Tresca", datasigma, mf_vm, version)
@@ -2901,6 +3218,14 @@ class Model:
return self.set("add_fem_variable", name, mf, niter)
+ def add_filtered_fem_variable(self, name, mf, region, niter=None):
+ """Add a variable to the model linked to a MeshFem. The variable is filtered
+ in the sense that only the dof on the region are considered.
+ `name` is the variable name and `niter` is the optional number of
+ version of the data stored, for time integration schemes."""
+ return self.set("add_filtered_fem_variable", name, mf, region, niter)
+
+
def add_variable(self, name, size, niter=None):
"""Add a variable to the model of constant size. `name` is the variable
name and `niter` is the optional number of version of the data stored,
@@ -2914,15 +3239,17 @@ class Model:
return self.set("resize_variable", name, size)
- def add_multiplier(self, name, mf, primalname, niter=None):
- """Add a particular variable linked to a fem being a multiplier with
+ def add_multiplier(self, name, mf, primalname, mim=None, region=None, *args):
+ """Synopsis: Model.add_multiplier(self, string name, MeshFem mf, string primalname[, MeshIm mim, int region][, int niter])
+
+ Add a particular variable linked to a fem being a multiplier with
respect to a primal variable. The dof will be filtered with the
``gmm::range_basis`` function applied on the terms of the model
which link the multiplier and the primal variable. This in order to
retain only linearly independant constraints on the primal variable.
Optimized for boundary multipliers. `niter` is the optional number
of version of the data stored, for time integration schemes. """
- return self.set("add_multiplier", name, mf, primalname, niter)
+ return self.set("add_multiplier", name, mf, primalname, mim, region, *args)
def add_fem_data(self, name, mf, qdim=None, *args):
@@ -2965,12 +3292,13 @@ class Model:
def to_variables(self, V):
"""Set the value of the variables of the model with the vector `V`.
Typically, the vector `V` results of the solve of the tangent
- linear system (usefull to solve your problem with you own solver)."""
+ linear system (useful to solve your problem with you own solver)."""
return self.set("to_variables", V)
def add_Laplacian_brick(self, mim, varname, region=None):
- """Add a Laplacian term to the model relatively to the variable `varname`.
+ """Add a Laplacian term to the model relatively to the variable `varname`
+ (in fact with a minus : :math:`-\\text{div}(\\nabla u)`).
If this is a vector valued variable, the Laplacian term is added
componentwise. `region` is an optional mesh region on which the term
is added. If it is not specified, it is added on the whole mesh. Return
@@ -2993,7 +3321,7 @@ class Model:
The components of the matrix/tensor have to be stored with the fortran
order (columnwise) in the data vector (compatibility with blas). The
symmetry of the given matrix/tensor is not verified (but assumed). If
- this is a vector valued variable, the Laplacian term is added
+ this is a vector valued variable, the elliptic term is added
componentwise. `region` is an optional mesh region on which the term is
added. If it is not specified, it is added on the whole mesh. Return the
brick index in the model."""
@@ -3058,6 +3386,46 @@ class Model:
return self.set("add_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, mf_mult)
+ def add_normal_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname=None):
+ """Add a Dirichlet condition to the normal component of the vector
+ or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable described by
+ `mult_description`. If `mult_description` is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region `region` and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. `dataname` is the optional right hand side of the
+ Dirichlet condition. It could be constant or described on a fem; scalar
+ or vector valued, depending on the variable on which the Dirichlet
+ condition is prescribed (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ Returns the brick index in the model."""
+ return self.set("add_normal_Dirichlet_condition_with_multipliers", mim, varname, mult_description, region, dataname)
+
+
+ def add_normal_Dirichlet_condition_with_penalization(self, mim, varname, coeff, region, dataname=None, mf_mult=None):
+ """Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is initially `coeff` and will be added to the data of the model.
+ `dataname` is the optional right hand side of the Dirichlet condition.
+ It could be constant or described on a fem; scalar or vector valued,
+ depending on the variable on which the Dirichlet condition is prescribed
+ (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ `mf_mult` is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Returns the brick index in the model."""
+ return self.set("add_normal_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, mf_mult)
+
+
def add_generalized_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname, Hname):
"""Add a Dirichlet condition on the variable `varname` and the mesh
region `region`. This version is for vector field.
@@ -3078,7 +3446,7 @@ class Model:
or vector valued, depending on the variable on which the Dirichlet
condition is prescribed. `Hname` is the data
corresponding to the matrix field `H`.
- Return the brick index in the model."""
+ Returns the brick index in the model."""
return self.set("add_generalized_Dirichlet_condition_with_multipliers", mim, varname, mult_description, region, dataname, Hname)
@@ -3102,6 +3470,75 @@ class Model:
return self.set("add_generalized_Dirichlet_condition_with_penalization", mim, varname, coeff, region, dataname, Hname, mf_mult)
+ def add_pointwise_constraints_with_multipliers(self, varname, dataname_pt, dataname_unitv=None, *args):
+ """Synopsis: ind = Model.add_pointwise_constraints_with_multipliers(self, string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+ Add some pointwise constraints on the variable `varname` using
+ multiplier. The multiplier variable is automatically added to the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model."""
+ return self.set("add_pointwise_constraints_with_multipliers", varname, dataname_pt, dataname_unitv, *args)
+
+
+ def add_pointwise_constraints_with_given_multipliers(self, varname, multname, dataname_pt, dataname_unitv=None, *args):
+ """Synopsis: ind = Model.add_pointwise_constraints_with_given_multipliers(self, string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+ Add some pointwise constraints on the variable `varname` using a given
+ multiplier `multname`.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ The multiplier variable should be a fixed size variable of size the
+ number of points.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model."""
+ return self.set("add_pointwise_constraints_with_given_multipliers", varname, multname, dataname_pt, dataname_unitv, *args)
+
+
+ def add_pointwise_constraints_with_penalization(self, varname, coeff, dataname_pt, dataname_unitv=None, *args):
+ """Synopsis: ind = Model.add_pointwise_constraints_with_penalization(self, string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])
+
+ Add some pointwise constraints on the variable `varname` thanks to
+ a penalization. The penalization coefficient is initially
+ `penalization_coeff` and will be added to the data of the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ `dataname_unitv` which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model."""
+ return self.set("add_pointwise_constraints_with_penalization", varname, coeff, dataname_pt, dataname_unitv, *args)
+
+
def change_penalization_coeff(self, ind_brick, coeff):
"""Change the penalization coefficient of a Dirichlet condition with
penalization brick. If the brick is not of this kind, this
@@ -3127,6 +3564,20 @@ class Model:
return self.set("add_Fourier_Robin_brick", mim, varname, dataname, region)
+ def add_basic_nonlinear_brick(self, mim, varname, f, dfdu, dataname=None, region=None):
+ """Add a brick representing a scalar term :math:`f(u)` to the left-hand
+ side of the model. In the weak form, one adds :math:`+\\int f(u)v`.
+ The function :math:`f` may optionally depend on :math:`\\lambda`, i.e.,
+ :math:`f(u)=f(u,\\lambda)`.
+ `f` and `dfdu` should contain the expressions for
+ :math:`f(u)` and :math:`\\frac{df}{du}(u)`, respectively.
+ `dataname` represents the optional real scalar parameter :math:`\\lambda`
+ in the model. `region` is an optional mesh region on which the term is
+ added. If it is not specified, the term is added on the whole mesh.
+ Return the brick index in the model."""
+ return self.set("add_basic_nonlinear_brick", mim, varname, f, dfdu, dataname, region)
+
+
def add_constraint_with_multipliers(self, varname, multname, B, L):
"""Add an additional explicit constraint on the variable `varname` thank to
a multiplier `multname` peviously added to the model (should be a fixed
@@ -3214,7 +3665,8 @@ class Model:
def add_nonlinear_elasticity_brick(self, mim, varname, constitutive_law, dataname, region=None):
"""Add a nonlinear elasticity term to the model relatively to the
variable `varname`. `lawname` is the constitutive law which
- could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+ or 'generalized Blatz Ko'.
IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
approximation is automatically used.
`dataname` is a vector of parameters for the constitutive law. Its length
@@ -3237,7 +3689,7 @@ class Model:
for the time scheme needed for the Newton algorithm used.
Moreover, the finite element method on which `varname` is described
is an K ordered mesh_fem, the `datasigma` one have to be at least
- an K-1 ordered mesh_fem.
+ an K-1 ordered mesh_fem.
`datalambda` and `datamu` are the Lame coefficients of the studied
material.
`datathreshold` is the plasticity threshold of the material.
@@ -3262,8 +3714,8 @@ class Model:
def add_bilaplacian_brick(self, mim, varname, dataname, region=None):
"""Add a bilaplacian brick on the variable
- `varname` and on the mesh region `region`.
- This represent a term :math:`\\Delta(D \\Delta u)`.
+ `varname` and on the mesh region `region`.
+ This represent a term :math:`\\Delta(D \\Delta u)`.
where :math:`D(x)` is a coefficient determined by `dataname` which
could be constant or described on a f.e.m. The corresponding weak form
is :math:`\\int D(x)\\Delta u(x) \\Delta v(x) dx`.
@@ -3304,7 +3756,7 @@ class Model:
def add_normal_derivative_Dirichlet_condition_with_multipliers(self, mim, varname, mult_description, region, dataname=None, R_must_be_derivated=None):
"""Add a Dirichlet condition on the normal derivative of the variable
- varname` and on the mesh region `region` (which should be a boundary.
+ varname` and on the mesh region `region` (which should be a boundary.
he general form is
math:`\\int \\partial_n u(x)v(x) = \\int r(x)v(x) \\forall v`
here :math:`r(x)` is
@@ -3330,7 +3782,7 @@ class Model:
def add_normal_derivative_Dirichlet_condition_with_penalization(self, mim, varname, coeff, region, dataname=None, R_must_be_derivated=None):
"""Add a Dirichlet condition on the normal derivative of the variable
- varname` and on the mesh region `region` (which should be a boundary.
+ varname` and on the mesh region `region` (which should be a boundary.
he general form is
math:`\\int \\partial_n u(x)v(x) = \\int r(x)v(x) \\forall v`
here :math:`r(x)` is
@@ -3426,35 +3878,50 @@ class Model:
return self.set("disable_bricks", bricks_indices)
- def unable_bricks(self, bricks_indices):
- """Unable a disabled brick."""
- return self.set("unable_bricks", bricks_indices)
+ def enable_bricks(self, bricks_indices):
+ """Enable a disabled brick."""
+ return self.set("enable_bricks", bricks_indices)
+
+
+ def disable_variable(self, varname):
+ """Disable a variable for a solve. The next solve will operate only on
+ the remaining variables. This allows to solve separately different
+ parts of a model. If there is a strong coupling of the variables,
+ a fixed point strategy can the be used. """
+ return self.set("disable_variable", varname)
+
+
+ def enable_variable(self, varname):
+ """Enable a disabled variable."""
+ return self.set("enable_variable", varname)
def first_iter(self):
- """To be executed before the first iteration of a time integration scheme."""
+ """To be executed before the first iteration of a time integration
+ scheme. """
return self.set("first_iter")
def next_iter(self):
"""To be executed at the end of each iteration of a time
- integration scheme."""
+ integration scheme. """
return self.set("next_iter")
def add_basic_contact_brick(self, varname_u, multname_n, multname_t=None, *args):
- """Synopsis: ind = Model.add_basic_contact_brick(self, string varname_u, string multname_n[, string multname_t], string dataname_r, Spmat BN[, Spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]])
+ """Synopsis: ind = Model.add_basic_contact_brick(self, string varname_u, string multname_n[, string multname_t], string dataname_r, Spmat BN[, Spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])
Add a contact with or without friction brick to the model.
If U is the vector
of degrees of freedom on which the unilateral constraint is applied,
the matrix `BN` have to be such that this constraint is defined by
- :math:`B_N U \\le 0`. A friction condition can be considered by adding the three
- parameters `multname_t`, `BT` and `dataname_friction_coeff`. In this case,
- the tangential displacement is :math:`B_T U` and the matrix `BT` should have as
- many rows as `BN` multiplied by :math:`d-1` where :math:`d` is the domain dimension.
- In this case also, `dataname_friction_coeff` is a data which represents the
- coefficient of friction. It can be a scalar or a vector representing a
+ :math:`B_N U \\le 0`. A friction condition can be considered by adding
+ the three parameters `multname_t`, `BT` and `dataname_friction_coeff`.
+ In this case, the tangential displacement is :math:`B_T U` and
+ the matrix `BT` should have as many rows as `BN` multiplied by
+ :math:`d-1` where :math:`d` is the domain dimension.
+ In this case also, `dataname_friction_coeff` is a data which represents
+ the coefficient of friction. It can be a scalar or a vector representing a
value on each contact condition. The unilateral constraint is prescribed
thank to a multiplier
`multname_n` whose dimension should be equal to the number of rows of
@@ -3466,10 +3933,12 @@ class Model:
optional parameter representing the initial gap. It can be a single value
or a vector of value. `dataname_alpha` is an optional homogenization
parameter for the augmentation parameter
- (see Getfem user documentation). The parameter `symmetrized` indicates
- that the symmetry of the tangent matrix will be kept or not (except for
- the part representing the coupling between contact and friction which
- cannot be symmetrized). """
+ (see Getfem user documentation). The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction), 3 for the
+ unsymmetric method with augmented multipliers, 4 for the unsymmetric
+ method with augmented multipliers and De Saxce projection. """
return self.set("add_basic_contact_brick", varname_u, multname_n, multname_t, *args)
@@ -3484,8 +3953,8 @@ class Model:
return self.set("contact_brick_set_BT", indbrick, BT)
- def add_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
- """Synopsis: ind = Model.add_contact_with_rigid_obstacle_brick(self, MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[, int symmetrized])
+ def add_nodal_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
+ """Synopsis: ind = Model.add_nodal_contact_with_rigid_obstacle_brick(self, MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[, int augmented_version])
Add a contact with or without friction condition with a rigid obstacle
to the model. The condition is applied on the variable `varname_u`
@@ -3493,28 +3962,108 @@ class Model:
be described with the string `obstacle` being a signed distance to
the obstacle. This string should be an expression where the coordinates
are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
- obstacle correspond to :math:`z \\le 0`, the corresponding signed distance will
- be simply "z". `multname_n` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region`. It represent the
+ obstacle correspond to :math:`z \\le 0`, the corresponding signed distance
+ will be simply "z". `multname_n` should be a fixed size variable whose size
+ is the number of degrees of freedom on boundary `region`. It represents the
contact equivalent nodal forces. In order to add a friction condition
one has to add the `multname_t` and `dataname_friction_coeff` parameters.
`multname_t` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region` multiplied by :math:`d-1`
- where :math:`d` is the domain dimension. It represent the friction equivalent
- nodal forces.
+ the number of degrees of freedom on boundary `region` multiplied by
+ :math:`d-1` where :math:`d` is the domain dimension. It represents
+ the friction equivalent nodal forces.
The augmentation parameter `r` should be chosen in a
range of acceptabe values (close to the Young modulus of the elastic
body, see Getfem user documentation). `dataname_friction_coeff` is
the friction coefficient. It could be a scalar or a vector of values
- representing the friction coefficient on each contact node. The
- parameter `symmetrized` indicates that the symmetry of the tangent
- matrix will be kept or not. Basically, this brick compute the matrix BN
+ representing the friction coefficient on each contact node.
+ The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
+ Basically, this brick compute the matrix BN
and the vectors gap and alpha and calls the basic contact brick. """
+ return self.set("add_nodal_contact_with_rigid_obstacle_brick", mim, varname_u, multname_n, multname_t, *args)
+
+
+ def add_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname_n, multname_t=None, *args):
+ """Synopsis: ind = Model.add_contact_with_rigid_obstacle_brick(self, MeshIm mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[, int augmented_version])
+
+ DEPRECATED FUNCTION. Use 'add nodal contact with rigid obstacle brick' instead."""
return self.set("add_contact_with_rigid_obstacle_brick", mim, varname_u, multname_n, multname_t, *args)
- def add_nonmatching_meshes_contact_brick(self, mim1, mim2=None, *args):
- """Synopsis: ind = Model.add_nonmatching_meshes_contact_brick(self, MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2, int symmetrized])
+ def add_integral_contact_with_rigid_obstacle_brick(self, mim, varname_u, multname, dataname_obstacle, dataname_r, dataname_friction_coeff=None, *args):
+ """Synopsis: ind = Model.add_integral_contact_with_rigid_obstacle_brick(self, MeshIm mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])
+
+ Add a contact with or without friction condition with a rigid obstacle
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage is a better scalability: the number of
+ Newton iterations should be more or less independent of the mesh size.
+ The contact condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ `multname` should be a fem variable representing the contact stress.
+ An inf-sup condition beetween `multname` and `varname_u` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptabe values.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element method.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ In case of contact with friction, `dataname_alpha` and `dataname_wt`
+ are optional parameters to solve evolutionary friction problems.
+ `dataname_gamma` and `dataname_vt` represent optional data for adding
+ a parameter-dependent sliding velocity to the friction condition.
+ """
+ return self.set("add_integral_contact_with_rigid_obstacle_brick", mim, varname_u, multname, dataname_obstacle, dataname_r, dataname_friction_coeff, *args)
+
+
+ def add_penalized_contact_with_rigid_obstacle_brick(self, mim, varname_u, dataname_obstacle, dataname_r, dataname_coeff=None, *args):
+ """Synopsis: ind = Model.add_penalized_contact_with_rigid_obstacle_brick(self, MeshIm mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff], int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])
+
+ Add a penalized contact with or without friction condition with a
+ rigid obstacle to the model.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ """
+ return self.set("add_penalized_contact_with_rigid_obstacle_brick", mim, varname_u, dataname_obstacle, dataname_r, dataname_coeff, *args)
+
+
+ def add_Nitsche_contact_with_rigid_obstacle_brick(self, mim, varname_u, dataname_obstacle, dataname_r, dataname_friction_coeff, dataname_lambda, dataname_mu, region):
+ """Add a contact with friction condition with a rigid obstacle
+ to the model with Nitsche strategy (no multiplier) in an integral way.
+ This is an experimental brick, which works only for linear homogeneous
+ isotropic elasticity.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance
+ to the obstacle (interpolated on a finite element method).
+ The Nitsche parameter `dataname_r` should be chosen in a
+ range of acceptable values. `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method. `dataname_lambda` and `dataname_mu` are the Lame coefficients.
+ """
+ return self.set("add_Nitsche_contact_with_rigid_obstacle_brick", mim, varname_u, dataname_obstacle, dataname_r, dataname_friction_coeff, dataname_lambda, dataname_mu, region)
+
+
+ def add_nodal_contact_between_nonmatching_meshes_brick(self, mim1, mim2=None, *args):
+ """Synopsis: ind = Model.add_nodal_contact_between_nonmatching_meshes_brick(self, MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2, int augmented_version])
Add a contact with or without friction condition between two faces of
one or two elastic bodies. The condition is applied on the variable
@@ -3539,13 +4088,113 @@ class Model:
and `rg2` are correspondingly considered as "slaves". By default
`slave1` is true and `slave2` is false, i.e. `rg1` contains the slave
surfaces, while 'rg2' the master surfaces. Preferrably only one of
- `slave1` and `slave2` is set to true. The parameter `symmetrized`
- indicates that the symmetry of the tangent matrix will be kept or not.
+ `slave1` and `slave2` is set to true. The parameter `augmented_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
Basically, this brick computes the matrices BN and BT and the vectors
gap and alpha and calls the basic contact brick. """
+ return self.set("add_nodal_contact_between_nonmatching_meshes_brick", mim1, mim2, *args)
+
+
+ def add_nonmatching_meshes_contact_brick(self, mim1, mim2=None, *args):
+ """Synopsis: ind = Model.add_nonmatching_meshes_contact_brick(self, MeshIm mim1[, MeshIm mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2, int augmented_version])
+
+ DEPRECATED FUNCTION. Use 'add nodal contact between nonmatching meshes brick' instead."""
return self.set("add_nonmatching_meshes_contact_brick", mim1, mim2, *args)
+ def add_integral_contact_between_nonmatching_meshes_brick(self, mim, varname_u1, varname_u2, multname, dataname_r, dataname_friction_coeff=None, *args):
+ """Synopsis: ind = Model.add_integral_contact_between_nonmatching_meshes_brick(self, MeshIm mim, string varname_u1, string varname_u2, string multname, string dataname_r [, string dataname_friction_coeff], int region1, int region2 [, int option [, string dataname_alpha [, string dataname_wt1 , string dataname_wt2]]])
+
+ Add a contact with or without friction condition between nonmatching
+ meshes to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ agrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of Newton iterations should be more or less independent
+ of the mesh size.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ `multname` should be a fem variable representing the contact stress
+ for the frictionless case and the contact and friction stress for the
+ case with friction. An inf-sup condition between `multname` and
+ `varname_u1` and `varname_u2` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method on the same mesh as `varname_u1`.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+ `dataname_wt2` are optional parameters to solve evolutionary friction
+ problems.
+ """
+ return self.set("add_integral_contact_between_nonmatching_meshes_brick", mim, varname_u1, varname_u2, multname, dataname_r, dataname_friction_coeff, *args)
+
+
+ def add_penalized_contact_between_nonmatching_meshes_brick(self, mim, varname_u1, varname_u2, dataname_r, dataname_coeff=None, *args):
+ """Synopsis: ind = Model.add_penalized_contact_between_nonmatching_meshes_brick(self, MeshIm mim, string varname_u1, string varname_u2, string dataname_r [, string dataname_coeff], int region1, int region2 [, int option [, string dataname_lambda, [, string dataname_alpha [, string dataname_wt1, string dataname_wt2]]]])
+
+ Add a penalized contact condition with or without friction between
+ nonmatching meshes to the model.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ The optional parameter `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method on the same mesh as `varname_u1`.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ In case of contact with friction, `dataname_alpha`, `dataname_wt1` and
+ `dataname_wt2` are optional parameters to solve evolutionary friction
+ problems.
+ """
+ return self.set("add_penalized_contact_between_nonmatching_meshes_brick", mim, varname_u1, varname_u2, dataname_r, dataname_coeff, *args)
+
+
+ def add_integral_large_sliding_contact_brick(self, mim, varname_u, multname, dataname_r, dataname_fr, rg):
+ """(still experimental brick)
+ Add a large sliding contact with friction brick to the model.
+ This brick is able to deal with auto-contact, contact between
+ several deformable bodies and contact with rigid obstacles.
+ The condition is applied on the variable `varname_u` on the
+ boundary corresponding to `region`. `dataname_r` is the augmentation
+ parameter of the augmented Lagrangian. `dataname_friction_coeff`
+ is the friction coefficient. `mim` is an integration method on the
+ boundary. `varname_u` is the variable on which the contact condition
+ will be prescribed (should be of displacement type). `multname` is
+ a multiplier defined on the boundary which will represent the contact
+ force. If no additional boundary or rigid
+ obstacle is added, only auto-contact will be detected. Use
+ `add_boundary_to_large_sliding_contact_brick` and
+ `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+ boundaries and rigid obstacles. """
+ return self.set("add_integral_large_sliding_contact_brick", mim, varname_u, multname, dataname_r, dataname_fr, rg)
+
+
+ def add_boundary_to_large_sliding_contact_brick(self, indbrick, mim, varname_u, multname, rg):
+ """Add a contact boundary to an existing large sliding contact brick.
+ indbrick` is the brick index. """
+ return self.set("add_boundary_to_large_sliding_contact_brick", indbrick, mim, varname_u, multname, rg)
+
+
+ def add_rigid_obstacle_to_large_sliding_contact_brick(self, indbrick, obs):
+ """Add a rigid obstacle to an existing large sliding contact brick.
+ indbrick` is the brick index, `obs` is the expression of a
+ unction which should be closed to a signed distance to the obstacle. """
+ return self.set("add_rigid_obstacle_to_large_sliding_contact_brick", indbrick, obs)
+
+
#
# GetFEM class Precond definition.
#
@@ -3714,7 +4363,7 @@ class Slice:
* ('isovalues', int orient, MeshFem mf, vec U, scalar s) :
Cut using the isosurface of the field `U` (defined on the MeshFem `mf`).
- The result is the set `{x such that `U`(x) <= `s`}` or `{x such that
+ The result is the set `{x such that :math:`U(x) \\leq s`}` or `{x such that
`U`(x)=`s`}` or `{x such that `U`(x) >= `s`}` depending on the value of
`orient`.
@@ -3724,8 +4373,8 @@ class Slice:
considered (i.e. it is equivalent to ('boundary',{'none'})).
* ('explode', mat Coef) :
- Build an 'exploded' view of the mesh: each convex is shrinked (0 <
- `Coef` <= 1). In the case of 3D convexes, only their faces are kept.
+ Build an 'exploded' view of the mesh: each convex is shrinked (:math:`0 <
+ \\text{Coef} \\leq 1`). In the case of 3D convexes, only their faces are kept.
* ('union', SLICEOP1, SLICEOP2) :
Returns the union of slicing operations.
@@ -4244,12 +4893,38 @@ class Spmat:
#
-def asm_mass_matrix(mim, mf1, mf2=None):
- """Assembly of a mass matrix.
+def asm_mass_matrix(mim, mf1, mf2=None, *args):
+ """Synopsis: M = asm_mass_matrix(MeshIm mim, MeshFem mf1[, MeshFem mf2[, boundary_num]])
+
+ Assembly of a mass matrix.
+
+ Return a SpMat object.
+ """
+ return getfem('asm', 'mass_matrix', mim, mf1, mf2, *args)
+
+
+def asm_lsneuman_matrix(mim, mf1, mf2, ls):
+ """Assembly of a level set Neuman matrix.
+
+ Return a SpMat object.
+ """
+ return getfem('asm', 'lsneuman_matrix', mim, mf1, mf2, ls)
+
+
+def asm_nlsgrad_matrix(mim, mf1, mf2, ls):
+ """Assembly of a nlsgrad matrix.
+
+ Return a SpMat object.
+ """
+ return getfem('asm', 'nlsgrad_matrix', mim, mf1, mf2, ls)
+
+
+def asm_stabilization_patch_matrix(mesh, mf, mim, ratio, h):
+ """Assembly of stabilization patch matrix .
Return a SpMat object.
"""
- return getfem('asm', 'mass_matrix', mim, mf1, mf2)
+ return getfem('asm', 'stabilization_patch_matrix', mesh, mf, mim, ratio, h)
def asm_laplacian(mim, mf_u, mf_d, a):
@@ -4280,29 +4955,29 @@ def asm_nonlinear_elasticity(mim, mf_u, U, law, mf_d, params, *args):
The solution `U` is required at the current time-step. The `law`
may be choosen among:
-
- - 'SaintVenant Kirchhoff':
- Linearized law, should be avoided). This law has the two usual
- Lame coefficients as parameters, called lambda and mu.
- - 'Mooney Rivlin':
- Only for incompressibility. This law has two parameters,
- called C1 and C2.
- - 'Ciarlet Geymonat':
- This law has 3 parameters, called lambda, mu and gamma, with
- gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
- The parameters of the material law are described on the MeshFem `mf_d`.
- The matrix `params` should have `nbdof(mf_d)` columns, each row
- correspounds to a parameter.
+ - 'SaintVenant Kirchhoff':
+ Linearized law, should be avoided). This law has the two usual
+ Lame coefficients as parameters, called lambda and mu.
+ - 'Mooney Rivlin':
+ Only for incompressibility. This law has two parameters,
+ called C1 and C2.
+ - 'Ciarlet Geymonat':
+ This law has 3 parameters, called lambda, mu and gamma, with
+ gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
- The last argument selects what is to be built: either the tangent
- matrix, or the right hand side. If the incompressibility is
- considered, it should be followed by a MeshFem `mf_p`, for the
- pression.
+ Te parameters of the material law are described on the MeshFem `mf_d`.
+ Te matrix `params` should have `nbdof(mf_d)` columns, each row
+ crrespounds to a parameter.
- Return a SpMat object (tangent matrix), vec object (right hand
- side), tuple of SpMat objects (incompressible tangent matrix), or
- tuple of vec objects (incompressible right hand side).
+ Te last argument selects what is to be built: either the tangent
+ mtrix, or the right hand side. If the incompressibility is
+ cnsidered, it should be followed by a MeshFem `mf_p`, for the
+ pession.
+
+ Rturn a SpMat object (tangent matrix), vec object (right hand
+ sde), tuple of SpMat objects (incompressible tangent matrix), or
+ tple of vec objects (incompressible right hand side).
"""
return getfem('asm', 'nonlinear_elasticity', mim, mf_u, U, law, mf_d, params, *args)
@@ -4344,6 +5019,16 @@ def asm_bilaplacian(mim, mf_u, mf_d, a):
return getfem('asm', 'bilaplacian', mim, mf_u, mf_d, a)
+def asm_bilaplacian_KL(mim, mf_u, mf_d, a, nu):
+ """Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+
+ :math:`\\Delta(a(x)\\Delta u) = 0` with `a` scalar.
+
+ Return a SpMat object.
+ """
+ return getfem('asm', 'bilaplacian_KL', mim, mf_u, mf_d, a, nu)
+
+
def asm_volumic_source(mim, mf_u, mf_d, fd):
"""Assembly of a volumic source term.
@@ -4466,6 +5151,29 @@ def asm_extrapolation_matrix(mf, mfe):
"""
return getfem('asm', 'extrapolation_matrix', mf, mfe)
+
+def asm_integral_contact_Uzawa_projection(bnum, mim, mf_u, U, mf_lambda, vec_lambda, mf_obstacle, obstacle, r, *args):
+ """Synopsis: B = asm_integral_contact_Uzawa_projection(int bnum, MeshIm mim, MeshFem mf_u, vec U, MeshFem mf_lambda, vec vec_lambda, MeshFem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | MeshFem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])
+
+ Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact problems. Projects the term $-(\\lambda - r (u_N-g))_-$ on the
+ finite element space of $\\lambda$.
+
+ Return a vec object.
+ """
+ return getfem('asm', 'integral_contact_Uzawa_projection', bnum, mim, mf_u, U, mf_lambda, vec_lambda, mf_obstacle, obstacle, r, *args)
+
+
+def asm_level_set_normal_source_term(bnum, mim, mf_u, mf_lambda, vec_lambda, mf_levelset, levelset):
+ """Performs an assembly of the source term represented by `vec_lambda`
+ on `mf_lambda` considered to be a component in the direction of the
+ gradient of a levelset function (normal to the levelset) of a vector
+ field defined on `mf_u` on the boundary `bnum`.
+
+ Return a vec object.
+ """
+ return getfem('asm', 'level_set_normal_source_term', bnum, mim, mf_u, mf_lambda, vec_lambda, mf_levelset, levelset)
+
#
# compute module
#
@@ -4479,6 +5187,14 @@ def compute_L2_norm(MF, U, mim, CVids=None):
return getfem('compute', MF, U, 'L2_norm', mim, CVids)
+def compute_L2_dist(MF, U, mim, mf2, U2, CVids=None):
+ """Compute the L2 distance between `U` and `U2`.
+
+ If `CVids` is given, the norm will be computed only on the listed
+ convexes."""
+ return getfem('compute', MF, U, 'L2_dist', mim, mf2, U2, CVids)
+
+
def compute_H1_semi_norm(MF, U, mim, CVids=None):
"""Compute the L2 norm of grad(`U`).
@@ -4487,6 +5203,14 @@ def compute_H1_semi_norm(MF, U, mim, CVids=None):
return getfem('compute', MF, U, 'H1_semi_norm', mim, CVids)
+def compute_H1_semi_dist(MF, U, mim, mf2, U2, CVids=None):
+ """Compute the semi H1 distance between `U` and `U2`.
+
+ If `CVids` is given, the norm will be computed only on the listed
+ convexes."""
+ return getfem('compute', MF, U, 'H1_semi_dist', mim, mf2, U2, CVids)
+
+
def compute_H1_norm(MF, U, mim, CVids=None):
"""Compute the H1 norm of `U`.
@@ -4554,9 +5278,9 @@ def compute_eval_on_triangulated_surface(MF, U, Nrefine, CVLIST=None):
def compute_interpolate_on(MF, U, *args):
- """Synopsis: Ui = compute_interpolate_on(MeshFem MF, vec U, {MeshFem mfi | Slice sli})
+ """Synopsis: Ui = compute_interpolate_on(MeshFem MF, vec U, {MeshFem mfi | Slice sli | vec pts})
- Interpolate a field on another MeshFem or a Slice.
+ Interpolate a field on another MeshFem or a Slice or a list of points.
- Interpolation on another MeshFem `mfi`:
`mfi` has to be Lagrangian. If `mf` and `mfi` share the same
@@ -4566,6 +5290,7 @@ def compute_interpolate_on(MF, U, *args):
mesh, but it is much faster. This can also be used with
Slice('points') to obtain field values at a given set of
points.
+ - Interpolation on a set of points `pts`
See also gf_asm('interpolation matrix')
"""
@@ -4718,18 +5443,20 @@ def util_load_matrix(FMT, FILENAME):
return getfem('util', 'load_matrix', FMT, FILENAME)
-def util_trace_level(level):
+def util_trace_level(level=None):
"""Set the verbosity of some getfem++ routines.
Typically the messages printed by the model bricks, 0 means no
- trace message (default is 3)."""
+ trace message (default is 3). if no level is given,
+ the current trace level is returned. """
return getfem('util', 'trace_level', level)
def util_warning_level(level):
"""Filter the less important warnings displayed by getfem.
- 0 means no warnings, default level is 3."""
+ 0 means no warnings, default level is 3. if no level is given,
+ the current warning level is returned. """
return getfem('util', 'warning_level', level)
@@ -4753,7 +5480,8 @@ def util(what, *args):
def factory(id):
- t = ( CvStruct,
+ t = ( ContStruct,
+ CvStruct,
Eltm,
Fem,
GeoTrans,
@@ -4766,6 +5494,7 @@ def factory(id):
MeshFem,
MeshIm,
MeshLevelSet,
+ MesherObject,
Model,
Precond,
Slice,
diff --git a/interface/src/python/getfem_python.c b/interface/src/python/getfem_python.c
index 809eb27..6459191 100644
--- a/interface/src/python/getfem_python.c
+++ b/interface/src/python/getfem_python.c
@@ -1,25 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//========================================================================
-//
-// Copyright (C) 2004-2010 Julien Pommier.
-//
-// This file is a part of GetFEM++
-//
-// GetFEM++ is free software; you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details.
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-//
-//========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <Python.h>
#include "numpy/arrayobject.h"
#include "structmember.h"
@@ -675,7 +673,7 @@ getfem_env(PyObject *self, PyObject *args) {
word_out = PyString_FromString("GetFEM++");
}else if (strcmp(word_in,"copyright") == 0){
word_out = PyString_FromString
- ("2004-2010 Yves Renard, Julien Pommier");
+ ("2004-2012 Yves Renard, Julien Pommier");
}else if (strcmp(word_in,"authors") == 0){
word_out = PyString_FromString
("Yves Renard, Julien Pommier");
@@ -695,7 +693,7 @@ getfem_env(PyObject *self, PyObject *args) {
word_out = PyString_FromString(GETFEM_PACKAGE_VERSION);
}else if(strcmp(word_in,"version") == 0){
word_out = PyString_FromString(GETFEM_VERSION);
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
}else if(strcmp(word_in,"muParser") == 0){
word_out = PyString_FromString("1");
#endif
diff --git a/interface/src/python/setup.py.in b/interface/src/python/setup.py.in
index ebc2cf6..ec92237 100644
--- a/interface/src/python/setup.py.in
+++ b/interface/src/python/setup.py.in
@@ -15,12 +15,14 @@ npy_include_dir = numpy.get_include()
# cclibopts = "../../../src/.libs/libgetfem.a".split()
cclibopts = "".split() # getfem is explicitly added below
cclibopts += '@LIBS@'.split()
+cclibopts += '@LDFLAGS@'.split()
-libnames = [l[2:] for l in cclibopts if l.startswith("-l")]
+libnames = ['getfemint','getfem']
+libnames += [l[2:] for l in cclibopts if l.startswith("-l")]
libdirs = [l[2:] for l in cclibopts if l.startswith("-L")]
libdirs += [l for l in cclibopts if not l.startswith("-")]
-libnames += ['getfemint','getfem','stdc++','m']
+libnames += ['stdc++','m']
libdirs = ['../.libs', '../../../src/.libs'] + libdirs
for i in range(0,len(libdirs)):
if (os.path.isfile(libdirs[i])):
diff --git a/interface/src/scilab/Makefile.am b/interface/src/scilab/Makefile.am
index a9bcf58..77edc67 100644
--- a/interface/src/scilab/Makefile.am
+++ b/interface/src/scilab/Makefile.am
@@ -55,28 +55,30 @@ EXTRA_DIST=builddoc.sce \
sci_getfem.iss \
makefile_builder.sce \
demos/axrot_matrix.sci \
- demos/check_all.sce \
- demos/check_asm.sce \
- demos/check_bricks.sce \
- demos/check_fem.sce \
- demos/check_geotrans.sce \
- demos/check_integ.sce \
- demos/check_interpolated_fem.sce \
- demos/check_levelset.sce \
- demos/check_mesh_fem.sce \
- demos/check_oo.sce \
- demos/check_plot.sce \
- demos/check_slices.sce \
- demos/check_solve.sce \
- demos/check_spmat.sce \
- demos/check_workspace.sce \
+ tests/unit_tests/check_all.sce \
+ tests/unit_tests/check_asm.sce \
+ tests/unit_tests/check_bricks.sce \
+ tests/unit_tests/check_fem.sce \
+ tests/unit_tests/check_geotrans.sce \
+ tests/unit_tests/check_integ.sce \
+ tests/unit_tests/check_interpolated_fem.sce \
+ tests/unit_tests/check_levelset.sce \
+ tests/unit_tests/check_mesh_fem.sce \
+ tests/unit_tests/check_oo.sce \
+ tests/unit_tests/check_plot.sce \
+ tests/unit_tests/check_slices.sce \
+ tests/unit_tests/check_solve.sce \
+ tests/unit_tests/check_spmat.sce \
+ tests/unit_tests/check_workspace.sce \
demos/demo_bilaplacian.sce \
+ demos/demo_continuation.sce \
demos/demo_convection_rotating_cavity.sce \
demos/demo_crack.sce \
demos/demo_fictitious_domains.sce \
demos/demo_finallaplacian.sce \
demos/demo_laplacian1D.sce \
demos/demo_laplacian.sce \
+ demos/demo_mesh_generation.sce \
demos/demo_mortar.sce \
demos/demo_nonlinear_elasticity_anim.sce \
demos/demo_nonlinear_elasticity.sce \
@@ -102,8 +104,8 @@ EXTRA_DIST=builddoc.sce \
demos/demo_wave2D.sce \
demos/demo_wave_equation.sce \
demos/sci_getfem.dem.gateway.sce \
- demos/test_argyris.sce \
- demos/test_plasticity_new_brick.sce \
+ tests/unit_tests/test_argyris.sce \
+ tests/unit_tests/test_plasticity_new_brick.sce \
demos/tutorial1.sce \
demos/data/disc_P2_h0.5.mesh \
demos/data/disc_P2_h1.mesh \
@@ -222,7 +224,6 @@ EXTRA_DIST=builddoc.sce \
help/mml/step_by_step_eq4.mml \
help/mml/step_by_step_eq5.mml \
jar/scilab_en_US_help.jar \
- jar/scilab_fr_FR_help.jar \
macros/add_empty_bound.sci \
macros/asserterr.sci \
macros/assert_field.sci \
@@ -273,7 +274,7 @@ EXTRA_DIST=builddoc.sce \
sci_gateway/c/cleaner.sce \
sci_gateway/c/gfm_common.c \
sci_gateway/c/gfm_common.h \
- sci_gateway/c/gfm_scilab.c \
+ sci_gateway/c/gfm_scilab.cpp \
sci_gateway/c/libscigetfem_c.c \
sci_gateway/c/libscigetfem_c.so \
sci_gateway/c/loader.sce \
diff --git a/interface/src/scilab/Makefile.in b/interface/src/scilab/Makefile.in
index 13d4123..7235a1b 100644
--- a/interface/src/scilab/Makefile.in
+++ b/interface/src/scilab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -266,28 +269,30 @@ EXTRA_DIST = builddoc.sce \
sci_getfem.iss \
makefile_builder.sce \
demos/axrot_matrix.sci \
- demos/check_all.sce \
- demos/check_asm.sce \
- demos/check_bricks.sce \
- demos/check_fem.sce \
- demos/check_geotrans.sce \
- demos/check_integ.sce \
- demos/check_interpolated_fem.sce \
- demos/check_levelset.sce \
- demos/check_mesh_fem.sce \
- demos/check_oo.sce \
- demos/check_plot.sce \
- demos/check_slices.sce \
- demos/check_solve.sce \
- demos/check_spmat.sce \
- demos/check_workspace.sce \
+ tests/unit_tests/check_all.sce \
+ tests/unit_tests/check_asm.sce \
+ tests/unit_tests/check_bricks.sce \
+ tests/unit_tests/check_fem.sce \
+ tests/unit_tests/check_geotrans.sce \
+ tests/unit_tests/check_integ.sce \
+ tests/unit_tests/check_interpolated_fem.sce \
+ tests/unit_tests/check_levelset.sce \
+ tests/unit_tests/check_mesh_fem.sce \
+ tests/unit_tests/check_oo.sce \
+ tests/unit_tests/check_plot.sce \
+ tests/unit_tests/check_slices.sce \
+ tests/unit_tests/check_solve.sce \
+ tests/unit_tests/check_spmat.sce \
+ tests/unit_tests/check_workspace.sce \
demos/demo_bilaplacian.sce \
+ demos/demo_continuation.sce \
demos/demo_convection_rotating_cavity.sce \
demos/demo_crack.sce \
demos/demo_fictitious_domains.sce \
demos/demo_finallaplacian.sce \
demos/demo_laplacian1D.sce \
demos/demo_laplacian.sce \
+ demos/demo_mesh_generation.sce \
demos/demo_mortar.sce \
demos/demo_nonlinear_elasticity_anim.sce \
demos/demo_nonlinear_elasticity.sce \
@@ -313,8 +318,8 @@ EXTRA_DIST = builddoc.sce \
demos/demo_wave2D.sce \
demos/demo_wave_equation.sce \
demos/sci_getfem.dem.gateway.sce \
- demos/test_argyris.sce \
- demos/test_plasticity_new_brick.sce \
+ tests/unit_tests/test_argyris.sce \
+ tests/unit_tests/test_plasticity_new_brick.sce \
demos/tutorial1.sce \
demos/data/disc_P2_h0.5.mesh \
demos/data/disc_P2_h1.mesh \
@@ -433,7 +438,6 @@ EXTRA_DIST = builddoc.sce \
help/mml/step_by_step_eq4.mml \
help/mml/step_by_step_eq5.mml \
jar/scilab_en_US_help.jar \
- jar/scilab_fr_FR_help.jar \
macros/add_empty_bound.sci \
macros/asserterr.sci \
macros/assert_field.sci \
@@ -484,7 +488,7 @@ EXTRA_DIST = builddoc.sce \
sci_gateway/c/cleaner.sce \
sci_gateway/c/gfm_common.c \
sci_gateway/c/gfm_common.h \
- sci_gateway/c/gfm_scilab.c \
+ sci_gateway/c/gfm_scilab.cpp \
sci_gateway/c/libscigetfem_c.c \
sci_gateway/c/libscigetfem_c.so \
sci_gateway/c/loader.sce \
@@ -692,10 +696,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/src/scilab/builder.sce b/interface/src/scilab/builder.sce
index aa14a9a..d6a4be5 100644
--- a/interface/src/scilab/builder.sce
+++ b/interface/src/scilab/builder.sce
@@ -8,11 +8,10 @@ lines(0);
try
v = getversion('scilab');
catch
- error(gettext('Scilab 5.2 or more is required.'));
+ error(gettext('Scilab 5.3.x or more is required.'));
end;
-if v(2) < 2 then
- // new API in scilab 5.2
- error(gettext('Scilab 5.2 or more is required.'));
+if v(2) < 3 then
+ error(gettext('Scilab 5.3.x or more is required.'));
end
// ====================================================================
if ~with_module('development_tools') then
@@ -24,6 +23,11 @@ TOOLBOX_TITLE = 'SciGetFem';
// ====================================================================
toolbox_dir = get_absolute_file_path('builder.sce');
+// Under Windows, configure is not launched.
+if getos()=='Windows' then
+ copyfile(pwd() + '/sci_gateway/c/builder_gateway_c.sce.in',pwd() + '/sci_gateway/c/builder_gateway_c.sce');
+end
+
tbx_builder_macros(toolbox_dir);
tbx_builder_src(toolbox_dir);
tbx_builder_gateway(toolbox_dir);
diff --git a/interface/src/scilab/cleaner.sce b/interface/src/scilab/cleaner.sce
index 9fad440..685f06e 100644
--- a/interface/src/scilab/cleaner.sce
+++ b/interface/src/scilab/cleaner.sce
@@ -1,32 +1,34 @@
-// ====================================================================
-// generated by builder.sce
-// Copyright DIGITEO 2009
-// ====================================================================
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
+// Generated by builder.sce: Please, do not edit this file
+
try
- getversion('scilab');
+ getversion("scilab");
catch
- warning('Scilab 5.0 or more is required.');
- return;
-end;
-// ====================================================================
-root_tlbx = get_absolute_file_path('cleaner.sce');
-
-if fileinfo(root_tlbx+'/macros/cleanmacros.sce') <> [] then
- exec(root_tlbx+'/macros/cleanmacros.sce');
+ error("Scilab 5.0 or more is required.");
end
+function perform_clean()
+ root_tlbx = get_absolute_file_path('cleaner.sce');
-if fileinfo(root_tlbx+'/src/cleaner_src.sce') <> [] then
- exec(root_tlbx+'/src/cleaner_src.sce');
-end
+ if isfile(root_tlbx + '/macros/cleanmacros.sce') then
+ exec(root_tlbx+'/macros/cleanmacros.sce');
+ end
-if fileinfo(root_tlbx+'/sci_gateway/cleaner_gateway.sce') <> [] then
- exec(root_tlbx+'/sci_gateway/cleaner_gateway.sce');
- mdelete(root_tlbx+'/sci_gateway/cleaner_gateway.sce');
-end
+ if isfile(root_tlbx + '/src/cleaner_src.sce') then
+ exec(root_tlbx+'/src/cleaner_src.sce');
+ end
-if fileinfo(root_tlbx+'/loader.sce') <> [] then
- mdelete(root_tlbx+'/loader.sce');
-end
-// ====================================================================
-clear root_tlbx;
-// ====================================================================
+ if isfile(root_tlbx + "/sci_gateway/cleaner_gateway.sce") then
+ exec(root_tlbx + "/sci_gateway/cleaner_gateway.sce");
+ mdelete(root_tlbx + "/sci_gateway/cleaner_gateway.sce");
+ end
+
+ if isfile(root_tlbx + "/help/cleaner_help.sce") then
+ exec(root_tlbx + "/help/cleaner_help.sce");
+ end
+
+ if isfile(root_tlbx + "/loader.sce") then
+ mdelete(root_tlbx + "/loader.sce");
+ end
+endfunction
+perform_clean();
+clear perform_clean;
diff --git a/interface/src/scilab/demos/data/disc_P2_h1.mesh b/interface/src/scilab/demos/data/disc_P2_h1.mesh
index 35b2731..90ef1cb 100644
--- a/interface/src/scilab/demos/data/disc_P2_h1.mesh
+++ b/interface/src/scilab/demos/data/disc_P2_h1.mesh
@@ -10,1392 +10,5654 @@ BEGIN POINTS LIST
POINT 2 -20 20
POINT 3 20 20
POINT 4 0 40
- POINT 5 -7.08999439411224 1.298877587388341
- POINT 6 -5.282004223598042 0.7100950914239894
- POINT 7 -3.47031521720064 0.3033781502190239
- POINT 8 -1.689974063564663 0.07152821552843025
- POINT 9 1.689960162663852 0.07152703670926773
- POINT 10 3.470291113247503 0.3033739033986539
- POINT 11 5.281972434142698 0.7100863867937268
- POINT 12 7.089956578995546 1.298863250915369
- POINT 13 -10.33788236531681 2.879013223504487
- POINT 14 -8.728323343402396 2.005101511455367
- POINT 15 -6.155723063676203 2.801434963065342
- POINT 16 -4.091201195594828 2.459658715166061
- POINT 17 -2.066659832781266 2.187655143712953
- POINT 18 -4.444059962388502e-06 2.064287137447093
- POINT 19 2.066650046418929 2.187657831466219
- POINT 20 4.091191239691891 2.459658150301677
- POINT 21 6.155715570419536 2.801429443148412
- POINT 22 8.728292838334855 2.005086715177716
- POINT 23 10.3378510065 2.878994288669519
- POINT 24 -13.31700959313135 5.078295824654251
- POINT 25 -11.8842697780299 3.913852796799773
- POINT 26 -9.460448082417175 4.366488604800259
- POINT 27 -7.512025315084293 4.126002865730436
- POINT 28 -5.172892121816004 4.455275571417475
- POINT 29 -3.057534701397881 4.267955770521298
- POINT 30 -1.012355277947994 4.110780430542055
- POINT 31 1.012349419089582 4.110782567666035
- POINT 32 3.057529483199409 4.267957853121388
- POINT 33 5.172886691584971 4.455272913530382
- POINT 34 7.512016782430195 4.125998677146069
- POINT 35 9.460436885249777 4.366480067235193
- POINT 36 11.88424594459136 3.913835188943747
- POINT 37 13.31698679929866 5.078275482126558
- POINT 38 -14.7498830675396 6.492929647996144
- POINT 39 -12.45509720824102 6.556537137387828
- POINT 40 -10.6482491458674 5.948211070168938
- POINT 41 -8.422109451390526 6.167912606077227
- POINT 42 -6.353060403793894 6.112985632708121
- POINT 43 -4.1407681774423 6.228053553808773
- POINT 44 -2.044474263097546 6.130734213928414
- POINT 45 -1.590000917432027e-06 6.079527809516725
- POINT 46 2.044472146376001 6.130736081211611
- POINT 47 4.140767470322072 6.22805374467435
- POINT 48 6.353058937427791 6.112982734736828
- POINT 49 8.422108492096564 6.167907314850485
- POINT 50 10.64824854146091 5.948202934940974
- POINT 51 12.45509688415863 6.556538659055924
- POINT 52 14.74986960384593 6.492914945498344
- POINT 53 -16.04355519086491 8.058294224118221
- POINT 54 -13.74135223644284 8.192183278283656
- POINT 55 -11.47752803375488 8.160729976898475
- POINT 56 -9.493527168153337 7.92578225082361
- POINT 57 -7.348476128284648 8.030483731407866
- POINT 58 -5.251990097092846 8.021830105465815
- POINT 59 -3.111403417400961 8.061569553457121
- POINT 60 -1.03035566619991 8.025902010406856
- POINT 61 1.030354767138576 8.025902400729668
- POINT 62 3.111403710309801 8.061569941428463
- POINT 63 5.251991017315566 8.021829123575905
- POINT 64 7.348476568276788 8.030480163525478
- POINT 65 9.49352663676625 7.92577656119784
- POINT 66 11.47752506667806 8.160726192772536
- POINT 67 13.74135116972482 8.192181839463158
- POINT 68 16.04354708966182 8.058283340247721
- POINT 69 -17.19580986241097 9.787060992258192
- POINT 70 -14.93702314944201 9.823933424582281
- POINT 71 -12.67351421081692 9.907845730886832
- POINT 72 -10.48194789872941 9.921029402134767
- POINT 73 -8.415247672061369 9.840575684874789
- POINT 74 -6.293821461179366 9.890161035967978
- POINT 75 -4.18979493172746 9.895564239362063
- POINT 76 -2.081243704999238 9.916613908721169
- POINT 77 5.730172508017217e-08 9.910960593168005
- POINT 78 2.081244132593595 9.916613808527552
- POINT 79 4.189795976700378 9.895563750716825
- POINT 80 6.293822706796825 9.890159478467984
- POINT 81 8.415248200245212 9.840572417227369
- POINT 82 10.48194698614503 9.921026346494969
- POINT 83 12.67351249301398 9.90784290415405
- POINT 84 14.93702196401547 9.823930709655935
- POINT 85 17.19580506925672 9.787052921897237
- POINT 86 -18.1760415240729 11.65545001122227
- POINT 87 -15.97553246064111 11.5448525408589
- POINT 88 -13.78571642443011 11.61751913076442
- POINT 89 -11.59628723826348 11.69602393958708
- POINT 90 -9.442169657304916 11.7276271718398
- POINT 91 -7.349624558628578 11.71151253389753
- POINT 92 -5.24282073613147 11.73166174921223
- POINT 93 -3.137905182843987 11.749161104766
- POINT 94 -1.042556134226208 11.76547185321201
- POINT 95 1.042556695466196 11.76547172930404
- POINT 96 3.13790593838561 11.74916068398455
- POINT 97 5.242821722657395 11.73166093775092
- POINT 98 7.349625501825332 11.7115109952139
- POINT 99 9.442169874348188 11.72762525690472
- POINT 100 11.59628683371615 11.69602200942614
- POINT 101 13.78571564810794 11.61751684765504
- POINT 102 15.97553159279355 11.54484971825705
- POINT 103 18.17603883633879 11.65544415682245
- POINT 104 -18.9605397782243 13.63620150237337
- POINT 105 -16.8378114819632 13.34701391345798
- POINT 106 -14.74755920142683 13.39190264700377
- POINT 107 -12.63015409928628 13.45515225576576
- POINT 108 -10.4974158537763 13.51638952902862
- POINT 109 -8.377087236386718 13.55137598391785
- POINT 110 -6.285880485474346 13.5571522438029
- POINT 111 -4.197964629953373 13.554499339371
- POINT 112 -2.088214950681028 13.58585648886253
- POINT 113 2.731150748891409e-07 13.59731244193799
- POINT 114 2.088215540160786 13.58585624443037
- POINT 115 4.197965288358211 13.55449885456938
- POINT 116 6.285881219549023 13.55715142631005
- POINT 117 8.377087797482492 13.5513749885778
- POINT 118 10.49741609890272 13.51638838986579
- POINT 119 12.63015411255437 13.45515089704564
- POINT 120 14.74755900190871 13.3919008647022
- POINT 121 16.83781104922592 13.34701152878708
- POINT 122 18.96053842326367 13.63619746535554
- POINT 123 -19.5357573624754 15.71582163367355
- POINT 124 -17.53374306722162 15.20882267305824
- POINT 125 -15.57069741754931 15.24451363995668
- POINT 126 -13.55098734811856 15.27194090964616
- POINT 127 -11.4874826074671 15.31182390849893
- POINT 128 -9.398270307101383 15.3521915525082
- POINT 129 -7.307964300837752 15.3807112166889
- POINT 130 -5.231490199222396 15.39200882295255
- POINT 131 -3.169152633696715 15.35291249391119
- POINT 132 -1.041499472772248 15.40847695692984
- POINT 133 1.041499922227459 15.40847686112553
- POINT 134 3.169153095957357 15.35291225824823
- POINT 135 5.231490717147384 15.39200836588829
- POINT 136 7.307964797170775 15.38071066913708
- POINT 137 9.398270745362067 15.35219096658757
- POINT 138 11.48748296447435 15.31182320391143
- POINT 139 13.55098760797554 15.27193995853761
- POINT 140 15.57069756108526 15.24451232768288
- POINT 141 17.5337430129703 15.20882089303506
- POINT 142 19.53575681130713 15.71581912036011
- POINT 143 -18.2269232082509 17.13021291903821
- POINT 144 -16.40696619670878 17.17145148168169
- POINT 145 -14.46503683750223 17.15281425943443
- POINT 146 -12.45424174106675 17.15199836204197
- POINT 147 -10.39981013664358 17.16515504075176
- POINT 148 -8.328026293006795 17.18988295252257
- POINT 149 -6.256758829896484 17.21190086556036
- POINT 150 -4.196112455235621 17.22388615617422
- POINT 151 -2.171217513306863 17.11254059462183
- POINT 152 1.665915350806957e-07 17.22074676082319
- POINT 153 2.171217828945217 17.1125405142267
- POINT 154 4.19611284158213 17.22388591748381
- POINT 155 6.256759233014987 17.21190057227975
- POINT 156 8.32802671761999 17.18988265372117
- POINT 157 10.39981059340922 17.16515474428726
- POINT 158 12.45424219159261 17.15199799003971
- POINT 159 14.46503723679426 17.15281363556374
- POINT 160 16.40696659288819 17.17145057879611
- POINT 161 18.22692352993353 17.13021164782587
- POINT 162 -19.89780896458842 17.98079262859248
- POINT 163 -17.84230000449807 19.0216744028301
- POINT 164 -15.67627065513821 19.02313060013363
- POINT 165 -13.55906626932976 19.0036025225671
- POINT 166 -11.45548002657009 18.98870888881037
- POINT 167 -9.365348057261556 18.99918972787285
- POINT 168 -7.287998267664897 19.0218085635537
- POINT 169 -5.225476971032742 19.04419029905378
- POINT 170 -3.181207515747626 19.06061320124515
- POINT 171 -1.234450813224698 18.81027364364246
- POINT 172 1.234451001429794 18.8102736784703
- POINT 173 3.181207777678578 19.06061305006857
- POINT 174 5.225477302694968 19.04419014960234
- POINT 175 7.287998656796332 19.02180842950959
- POINT 176 9.365348511226138 18.99918964629332
- POINT 177 11.45548052731511 18.98870888549819
- POINT 178 13.55906673221513 19.00360248933783
- POINT 179 15.6762709640833 19.02313030096059
- POINT 180 17.84230024444024 19.02167396477342
- POINT 181 19.89780885181004 17.98079151724459
- POINT 182 -18.34809671121251 20.89054860233434
- POINT 183 -16.5148528869666 20.87800710044906
- POINT 184 -14.52694695679922 20.85426661015416
- POINT 185 -12.45599638977427 20.8108810324845
- POINT 186 -10.37011211347385 20.80605366101868
- POINT 187 -8.288100923056527 20.82387931457176
- POINT 188 -6.210897946834899 20.84807602452601
- POINT 189 -4.130583790032196 20.86687448767059
- POINT 190 -2.030932593701857 20.87063865748742
- POINT 191 9.744431586633517e-08 21.64935021861394
- POINT 192 2.030932751362846 20.87063857502341
- POINT 193 4.130584013659444 20.86687431844705
- POINT 194 6.210898346296974 20.84807594605767
- POINT 195 8.288101445193462 20.82387932992417
- POINT 196 10.37011274159265 20.80605382218947
- POINT 197 12.45599711658471 20.8108813744629
- POINT 198 14.52694762208812 20.85426702370534
- POINT 199 16.51485331119099 20.87800725634424
- POINT 200 18.348097009919 20.89054895986076
- POINT 201 -19.88382274553589 22.15257822717576
- POINT 202 -17.85872906553023 22.79187608979278
- POINT 203 -15.75836820209814 22.71857538973881
- POINT 204 -13.57945048306569 22.62787433244293
- POINT 205 -11.43502337227142 22.60571660119635
- POINT 206 -9.32896785495339 22.62172230713452
- POINT 207 -7.252191943285577 22.65010775210676
- POINT 208 -5.19352107545026 22.67271964550248
- POINT 209 -3.145718127729072 22.67904520073677
- POINT 210 -1.19802941618547 22.93488185752093
- POINT 211 1.198029575535804 22.93488182516196
- POINT 212 3.145718298303114 22.67904507452085
- POINT 213 5.193521324838902 22.67271937177574
- POINT 214 7.252192530636423 22.65010772431655
- POINT 215 9.328968618053137 22.62172251326393
- POINT 216 11.43502432491394 22.60571702295378
- POINT 217 13.57945157268804 22.62787513308746
- POINT 218 15.75836910518877 22.71857642015902
- POINT 219 17.85872913941462 22.7918771500154
- POINT 220 19.88382260621709 22.15257951409296
- POINT 221 -19.56496589012501 24.14874796995999
- POINT 222 -17.12378015908613 24.49263729810405
- POINT 223 -14.75261366404331 24.36653106466741
- POINT 224 -12.51545015644557 24.36405857012063
- POINT 225 -10.36487612468117 24.40059700241373
- POINT 226 -8.270782662155399 24.44922254990688
- POINT 227 -6.207288303035652 24.48752518657241
- POINT 228 -4.152672439085122 24.50430982838724
- POINT 229 -2.144764510838116 24.6392641397031
- POINT 230 6.736184551131563e-08 24.56637229685156
- POINT 231 2.144764639428793 24.6392640566236
- POINT 232 4.152672593221236 24.5043096033403
- POINT 233 6.207288592802848 24.48752465778632
- POINT 234 8.270783499471428 24.44922265688236
- POINT 235 10.36487726829784 24.4005974184117
- POINT 236 12.51545141239867 24.36405943508291
- POINT 237 14.75261493047371 24.36653271363972
- POINT 238 17.12378075459493 24.4926401834798
- POINT 239 19.56496529523762 24.14875077537231
- POINT 240 -19.08648829040304 25.9754468234863
- POINT 241 -17.2845615037453 26.31014844212238
- POINT 242 -15.41261905344529 26.10941999036963
- POINT 243 -13.37179093546351 26.11632995430249
- POINT 244 -11.29591265365937 26.16877399507631
- POINT 245 -9.236109783161917 26.24563353410026
- POINT 246 -7.197506282144635 26.30683884552605
- POINT 247 -5.148124747507762 26.32635712487787
- POINT 248 -3.122954853611116 26.40463970225008
- POINT 249 -1.028840474391874 26.37582534616704
- POINT 250 1.028840597301122 26.37582532979795
- POINT 251 3.122954923639289 26.40463955141999
- POINT 252 5.148124848876652 26.32635667877105
- POINT 253 7.197506356103443 26.30683804371632
- POINT 254 9.236111124219747 26.24563372506302
- POINT 255 11.29591412227338 26.16877501716782
- POINT 256 13.3717921011747 26.11633170886203
- POINT 257 15.41261961645513 26.1094231779272
- POINT 258 17.28456075910474 26.31015378144565
- POINT 259 19.08648669351269 25.97545192419629
- POINT 260 -18.31673994912508 28.03100477126815
- POINT 261 -16.29279631468638 28.07734896422777
- POINT 262 -14.29108105178232 27.93826211324394
- POINT 263 -12.23205698562959 27.95454691920996
- POINT 264 -10.1921242779246 28.04641052160824
- POINT 265 -8.184908522052318 28.14581978804722
- POINT 266 -6.142892720399755 28.15468429908139
- POINT 267 -4.115765842832939 28.20978375998045
- POINT 268 -2.044953225702631 28.19763670818671
- POINT 269 1.215817429928157e-07 28.20528019734085
- POINT 270 2.044953387448034 28.19763672758267
- POINT 271 4.115765884875199 28.20978350344839
- POINT 272 6.142892053295159 28.15468405294527
- POINT 273 8.184908802060571 28.1458177672969
- POINT 274 10.1921266003412 28.04641156253142
- POINT 275 12.23205881411247 27.95454935528251
- POINT 276 14.2910815778731 27.93826589300298
- POINT 277 16.29279479603289 28.07735539177588
- POINT 278 18.31673641698378 28.0310128272082
- POINT 279 -17.36678064292307 29.91942186322351
- POINT 280 -15.30701199611502 29.80163024565981
- POINT 281 -13.1975126296105 29.73273604910611
- POINT 282 -11.14232609374812 29.83834011557202
- POINT 283 -9.18383040196667 30.00598319236085
- POINT 284 -7.135586668146636 29.99761305864382
- POINT 285 -5.123286168201119 30.04271988926355
- POINT 286 -3.053121112865554 30.02630175178171
- POINT 287 -1.015876570824747 30.05156154994286
- POINT 288 1.015877381461083 30.05156170293002
- POINT 289 3.053121697974701 30.02630185030043
- POINT 290 5.123284228587577 30.0427213293883
- POINT 291 7.135586245905698 29.99761060242232
- POINT 292 9.183831168146963 30.00598031130402
- POINT 293 11.14232972160493 29.83834373724195
- POINT 294 13.19751369866922 29.73274161644041
- POINT 295 15.30700948964564 29.80163858123015
- POINT 296 17.36677404971316 29.91943340651388
- POINT 297 -16.21450019303935 31.70854318392894
- POINT 298 -14.18134842576247 31.46072633556853
- POINT 299 -12.05433474215738 31.57807989769072
- POINT 300 -10.18803390533311 31.90895778516169
- POINT 301 -8.127827538982091 31.83562093362241
- POINT 302 -6.132870312528693 31.91947084481104
- POINT 303 -4.060514707104238 31.84886116654844
- POINT 304 -2.023054298900899 31.90620457141977
- POINT 305 1.779731685490338e-06 31.92616315841029
- POINT 306 2.023057639192921 31.90620515692421
- POINT 307 4.060510421402324 31.84886697474238
- POINT 308 6.132869669181516 31.91946778705557
- POINT 309 8.127827628663475 31.83561745950141
- POINT 310 10.18803390203203 31.90895591912609
- POINT 311 12.05433729770214 31.5780897141657
- POINT 312 14.18134461110469 31.46073802168817
- POINT 313 16.21448882325949 31.70855892928177
- POINT 314 -14.85855987098478 33.38742688347396
- POINT 315 -12.97622115412793 33.15231979037343
- POINT 316 -11.24542238667929 33.84152597332419
- POINT 317 -9.096796145803623 33.67355592311518
- POINT 318 -7.169110863793735 33.81460869617811
- POINT 319 -5.025802643706024 33.69074033624606
- POINT 320 -3.036012504986613 33.74897677262599
- POINT 321 -1.006001725651425 33.81394161048243
- POINT 322 1.006017505359627 33.81394238106373
- POINT 323 3.03600454008222 33.7489957057666
- POINT 324 5.025801824829388 33.69073476359576
- POINT 325 7.169110502599582 33.81460511144136
- POINT 326 9.09679356939724 33.67355436459209
- POINT 327 11.24541326548703 33.84153193558982
- POINT 328 12.97621626240949 33.15233833055714
- POINT 329 14.85854134665239 33.38744744340443
- POINT 330 -13.24234864752243 34.98800194480442
- POINT 331 -10.03539086910046 35.3828070140792
- POINT 332 -8.191323309688949 35.8082238544771
- POINT 333 -5.969442595277822 35.42728838548917
- POINT 334 -3.964572821971675 35.68073227615353
- POINT 335 -2.062446042804255 35.66361537576937
- POINT 336 3.401394552337428e-05 35.7433135846511
- POINT 337 2.062435708551036 35.66367717807774
- POINT 338 3.96457676799794 35.68072163899399
- POINT 339 5.969444351238414 35.42728363799607
- POINT 340 8.19131937738778 35.80822453891639
- POINT 341 10.03538306356879 35.38281277249126
- POINT 342 13.2423188856883 34.98802824022632
- POINT 343 -11.71964489363993 36.20647782730662
- POINT 344 -9.885418518050601 37.38615830834937
- POINT 345 -6.769213566269587 37.09871131951007
- POINT 346 -4.834310082657146 37.45809613171494
- POINT 347 -2.966207997229898 37.80957975457357
- POINT 348 -1.228951401026502 37.50853541118494
- POINT 349 1.228967413584314 37.50873516084056
- POINT 350 2.966244431714553 37.80956888117363
- POINT 351 4.834322604660215 37.45809313826081
- POINT 352 6.769215951806145 37.09871058669637
- POINT 353 9.885380262406448 37.38618005968161
- POINT 354 11.71961051109886 36.20650269083999
- POINT 355 -8.160801736293346 38.25928024378061
- POINT 356 -6.108721403629119 39.04425169999729
- POINT 357 -4.094025391529261 39.57648988183318
- POINT 358 -2.032918826278168 39.89641276827972
- POINT 359 -0.000114943787747096 38.55954134616952
- POINT 360 2.032857647557499 39.89641901912924
- POINT 361 4.093978133093873 39.57649976491602
- POINT 362 6.108678764431183 39.04426537708952
- POINT 363 8.16076002653128 38.25929888548312
- POINT 364 19.74927974328947 16.84311090331085
- POINT 365 19.06236619087178 17.55550158253523
- POINT 366 18.88134017062033 16.42301538409299
- POINT 367 18.87005454812514 18.50123274100901
- POINT 368 18.92115012222012 19.51083698238671
- POINT 369 19.97443587516672 18.98910375220634
- POINT 370 18.03461188718688 18.07594280629964
- POINT 371 -1.016516885032958 39.22797705722462
- POINT 372 -1.017777998289471 39.97408640454459
- POINT 373 -5.747189387354801e-05 39.27977067308476
- POINT 374 1.016371351884876 39.22798018264938
- POINT 375 1.017747548306818 39.9740879692846
- POINT 376 2.499551039636026 38.85299395015144
- POINT 377 3.530111282404213 38.69303432304483
- POINT 378 3.067591411714378 39.76334698055007
- POINT 379 -10.9924492306217 14.41410671876377
- POINT 380 -10.44287645728424 15.33200773050357
- POINT 381 -9.947843080438842 14.43429054076841
- POINT 382 -12.05881835337669 14.38348808213234
- POINT 383 -11.56378497653129 13.48577089239719
- POINT 384 -19.1159597283742 21.52156341475505
- POINT 385 -19.17404835560626 20.44527430116717
- POINT 386 -19.97093456597552 21.07785567562136
- POINT 387 18.53474991213871 15.46232000669758
- POINT 388 18.24714071811698 14.4225091791953
- POINT 389 19.27621315646036 14.66824556999596
- POINT 390 17.88033327145191 16.16951627043046
- POINT 391 -1.878316948172965 1.129591679620692
- POINT 392 -2.768487524990953 1.245516646965989
- POINT 393 -2.582747461702293 0.167465745146943
- POINT 394 7.648469065631529 32.82511128547139
- POINT 395 8.132952035998411 33.74407973801672
- POINT 396 8.612310599030359 32.75458591204675
- POINT 397 10.87749678733383 35.79465773166562
- POINT 398 10.81858671612841 36.82136097977488
- POINT 399 9.960381662987619 36.38449641608644
- POINT 400 -11.96631262099795 7.358633557143151
- POINT 401 -11.55167317705421 6.252374103778383
- POINT 402 -11.06288858981114 7.054470523533706
- POINT 403 -12.16968349313546 5.2351949670938
- POINT 404 -11.26625946194865 4.931031933484356
- POINT 405 -12.0755211222859 9.034287853892653
- POINT 406 -11.57773105477317 9.914437566510799
- POINT 407 -10.97973796624214 9.040879689516622
- POINT 408 -10.17110926624146 33.75754094821968
- POINT 409 -10.64040662788987 34.61216649370169
- POINT 410 -9.566093507452038 34.52818146859719
- POINT 411 -5.471515743143133 38.25117391585611
- POINT 412 -5.108309760920813 39.33662769024022
- POINT 413 -4.464167737093204 38.51729300677406
- POINT 414 -17.075786992357 11.60015127604059
- POINT 415 -16.58567116152604 10.66595676655855
- POINT 416 -17.71058118590639 10.70832033698396
- POINT 417 -11.04685154601989 12.60620673430785
- POINT 418 -12.11322066877488 12.57558809767642
- POINT 419 -12.1349007245402 10.80193483523696
- POINT 420 -11.03911756849645 10.80852667086092
- POINT 421 -9.437251545081509 13.53388275647323
- POINT 422 -8.887678771744049 14.45178376821303
- POINT 423 -12.51923497779283 15.29188240907255
- POINT 424 -13.09057072370242 14.36354658270596
- POINT 425 -18.87005448454325 18.50123351571129
- POINT 426 -18.03461160637449 18.07594366093415
- POINT 427 -19.06236608641966 17.55550277381534
- POINT 428 -18.92115000224904 19.51083720141505
- POINT 429 -19.97443590274372 18.98910431002001
- POINT 430 -18.09519835785529 19.95611150258222
- POINT 431 0.5990148364900598 22.29211602188795
- POINT 432 -0.599014659370577 22.29211603806743
- POINT 433 7.967516690854382e-08 22.93488184134145
- POINT 434 -1.01546624812877 21.25999443805068
- POINT 435 4.872215793316759e-08 20.82467510930697
- POINT 436 -1.015466296850928 20.43531932874371
- POINT 437 -1.614481004943663 21.90276025750417
- POINT 438 6.782362015092881 16.29630562070841
- POINT 439 6.26972775715908 15.38635951751268
- POINT 440 5.744124975081186 16.30195446908402
- POINT 441 -5.74412451455944 16.30195484425646
- POINT 442 -5.226435642566052 17.21789351086729
- POINT 443 -4.713801327229008 16.30794748956339
- POINT 444 -4.200321416459555 15.37246065843187
- POINT 445 -3.682632544466168 16.2883993250427
- POINT 446 -5.718863643637123 1.755765027244666
- POINT 447 -6.622858728894221 2.050156275226842
- POINT 448 -6.1930002735872 0.9829879862466689
- POINT 449 -1.033332138420614 2.125971140580023
- POINT 450 -0.5061798610039783 3.087533783994574
- POINT 451 -1.53950755536463 3.149217787127504
- POINT 452 0.8449778593019447 1.06790708707818
- POINT 453 -2.222029981194251e-06 1.032143568723546
- POINT 454 0.8457366719362006 0.01788976042541284
- POINT 455 -0.8449892538123129 1.067907676487761
- POINT 456 -0.8457434623547605 0.01789005539397318
- POINT 457 7.14550668849857 38.67998224759658
- POINT 458 7.464987989168712 37.67900473608974
- POINT 459 6.438947358118664 38.07148798189294
- POINT 460 5.471500684545699 38.25117925767516
- POINT 461 5.801769278233181 37.27840186247859
- POINT 462 4.399449686329078 36.5694073886274
- POINT 463 3.900283518187385 37.63383100971722
- POINT 464 3.465410599856247 36.74514526008381
- POINT 465 4.464150368877045 38.51729645158841
- POINT 466 5.108265028519643 39.33663957465164
- POINT 467 6.569277426918998 34.62094437471872
- POINT 468 5.497623088033901 34.55900920079591
- POINT 469 6.097456163714485 33.75266993751856
- POINT 470 4.967010559618177 35.55400263849503
- POINT 471 4.495189296413664 34.68572820129488
- POINT 472 5.401883477949315 36.44268838812844
- POINT 473 6.369330151522279 36.26299711234622
- POINT 474 9.113351220478284 35.59551865570383
- POINT 475 9.038349819897114 36.597202299299
- POINT 476 7.080381864313097 35.61775408845623
- POINT 477 7.480267664596962 36.45346756280638
- POINT 478 7.680214939993681 34.81141482517887
- POINT 479 8.64405647339251 34.74088945175424
- POINT 480 9.566088316483015 34.52818356854168
- POINT 481 8.17603970195953 37.03376171219976
- POINT 482 9.033624999701651 37.84358769694784
- POINT 483 18.72983203648753 27.01380028490616
- POINT 484 17.80064858804426 27.17058330432692
- POINT 485 18.18552372630872 26.14280285282097
- POINT 486 14.85185059716412 27.02384453546509
- POINT 487 13.8314368395239 27.02729880093251
- POINT 488 14.39220585881491 26.11287744339462
- POINT 489 -2.499563411754033 38.85299626142665
- POINT 490 -3.530116694379579 38.69303481820337
- POINT 491 -3.067645385176077 39.76333856162318
- POINT 492 -3.900259039943522 37.63383794314426
- POINT 493 3.013506238274488 35.67219940853586
- POINT 494 2.514340070132794 36.73662302962569
- POINT 495 6.650990085890549 32.86703644924846
- POINT 496 5.579335747005452 32.80510127532567
- POINT 497 7.130348648922496 31.87754262327849
- POINT 498 7.631706937284587 30.91661403096186
- POINT 499 8.159708707026331 30.00179545686317
- POINT 500 8.655829398405219 30.92079888540271
- POINT 501 6.634227957543607 30.95853919473894
- POINT 502 6.129435237246637 30.02016596590531
- POINT 503 5.628076948884546 30.98109455822193
- POINT 504 11.94551072074933 21.70829919870834
- POINT 505 11.41305492908868 20.80846759832619
- POINT 506 10.9025685332533 21.70588542257163
- POINT 507 13.00753192439992 19.90724193190037
- POINT 508 13.49147236933642 20.83257419908412
- POINT 509 14.04300717715163 19.92893475652158
- POINT 510 -1.632691703463277 19.84045615056494
- POINT 511 -0.617225406612349 19.40513682182123
- POINT 512 7.881862384261 8.935526290376423
- POINT 513 6.821149637536807 8.96031982099673
- POINT 514 7.354535453521018 9.865365947847677
- POINT 515 1.878305104541391 1.129592434087743
- POINT 516 2.768470579833216 1.245515867432436
- POINT 517 2.582728607973412 0.1674632640394325
- POINT 518 1.033322801179483 2.125972484456656
- POINT 519 -12.88605340068618 5.81741648102104
- POINT 520 -14.05126013257847 5.767569248488341
- POINT 521 -13.60249013789031 6.524733392691986
- POINT 522 -12.61408342909388 4.479532986874619
- POINT 523 -13.09822472234193 7.374360207835742
- POINT 524 -12.60944013509886 8.176456627591065
- POINT 525 -13.20743322362988 9.050014504585244
- POINT 526 -14.24561765199122 7.3425564631399
- POINT 527 -14.89245371365388 8.125238751200939
- POINT 528 -15.41659981616689 7.259181873308678
- POINT 529 -12.11082177040361 33.4969228818488
- POINT 530 -12.51527794814265 32.36519984403208
- POINT 531 -11.64987856441833 32.70980293550745
- POINT 532 -10.81862285529724 36.82133760142749
- POINT 533 -10.87751788137019 35.79464242069291
- POINT 534 -9.960404693575528 36.38448266121428
- POINT 535 -11.48253364015961 35.0240019003154
- POINT 536 -10.7167281460062 32.87524187924294
- POINT 537 -11.12118432374524 31.74351884142621
- POINT 538 -9.642415025568365 32.79125685413843
- POINT 539 -18.53475021484851 15.4623221533659
- POINT 540 -19.27621404631537 14.6682488620726
- POINT 541 -18.24714142272296 14.42251208771581
- POINT 542 -18.88134028536315 16.42301727635588
- POINT 543 -17.88033313773626 16.16951779604823
- POINT 544 -19.74928002630716 16.84311272522837
- POINT 545 -15.49028917015346 8.94111382435025
- POINT 546 -16.06641650592649 9.805497208420237
- POINT 547 -16.64214543071471 8.907705737630335
- POINT 548 -15.45627780504156 10.68439298272059
- POINT 549 -14.33918769294243 9.008058351432968
- POINT 550 -13.80526868012947 9.865889577734556
- POINT 551 -14.1492732747727 14.33192177832496
- POINT 552 -15.15912830948807 14.31820814348022
- POINT 553 -14.56084238283394 15.25822727480142
- POINT 554 -13.68885665035655 13.42352745138476
- POINT 555 -17.50692650301805 12.50123196234012
- POINT 556 -17.89917563009375 13.49160770791567
- POINT 557 -18.59468367857226 12.63537262535845
- POINT 558 -16.40667197130215 12.44593322715844
- POINT 559 -17.18577727459241 14.27791829325811
- POINT 560 -15.79268534169501 13.36945828023087
- POINT 561 -15.36154583103397 12.46837759393134
- POINT 562 -16.20425444975626 14.29576377670733
- POINT 563 -16.55222024238547 15.22666815650746
- POINT 564 14.61766884814922 19.01336639514921
- POINT 565 15.10160929308571 19.93869866233297
- POINT 566 -8.954387420107352 8.883178967849199
- POINT 567 -8.421001648218994 7.978132991115737
- POINT 568 -7.881861900173009 8.935529708141328
- POINT 569 -10.48552760095411 8.043256113861043
- POINT 570 -10.07088815701037 6.936996660496273
- POINT 571 -9.987737533441372 8.923405826479188
- POINT 572 -9.448597785395389 9.880802543504778
- POINT 573 -8.909628446845817 12.63950157787882
- POINT 574 -9.96979275554061 12.62200835043421
- POINT 575 -10.5192284477842 11.71182555571344
- POINT 576 -9.962058778017163 10.82432828698728
- POINT 577 -8.928708664683143 10.78410142835729
- POINT 578 -8.826724490159041 19.9115345212223
- POINT 579 -7.788049595360713 19.92284393906273
- POINT 580 -8.326673162463226 19.01049914571327
- POINT 581 6.796923008359899 14.46893104772356
- POINT 582 5.758685968348203 14.47457989609917
- POINT 583 7.331484508515757 13.55426320744392
- POINT 584 7.842526297326634 14.46604282885744
- POINT 585 3.183665335263674 17.16821321585526
- POINT 586 3.688660309630354 18.14224948377619
- POINT 587 2.676212803311897 18.08657678214764
- POINT 588 5.226436037298559 17.21789324488178
- POINT 589 4.713801779364758 16.30794714168605
- POINT 590 1.702834415187505 17.9614070963485
- POINT 591 2.207829389554186 18.93544336426943
- POINT 592 9.410254775410465e-08 18.81027366105638
- POINT 593 0.6172255007148968 19.40513683923515
- POINT 594 -9.714117030543257 27.14602202785425
- POINT 595 -10.74401846579198 27.10759225834228
- POINT 596 -10.26601121841064 26.20720376458829
- POINT 597 -15.19792430940091 31.58463475974873
- POINT 598 -14.51995414837362 32.42407660952124
- POINT 599 -15.55919105425835 32.56628720680114
- POINT 600 -13.5787847899452 32.30652306297098
- POINT 601 -13.91739051255635 33.26987333692369
- POINT 602 -13.68943052768649 30.59673119233732
- POINT 603 -13.11784158395992 31.51940311662963
- POINT 604 -12.62592368588394 30.65540797339841
- POINT 605 -18.10341288837137 21.84121234606356
- POINT 606 -18.87127590553306 22.47222715848427
- POINT 607 -17.12463310060343 18.09656294225589
- POINT 608 -17.31694470247984 17.15083220035995
- POINT 609 -16.9703546319652 16.19013707736997
- POINT 610 -15.98883180712904 16.20798256081918
- POINT 611 10.38199647148354 22.61371976810885
- POINT 612 9.849540679822894 21.7138881677267
- POINT 613 8.8085350316233 21.72280092159405
- POINT 614 9.329107093393057 20.81496657605682
- POINT 615 8.9287090372967 10.78409883706605
- POINT 616 9.962058430246611 10.82432580169985
- POINT 617 9.448597593195121 9.88079938186117
- POINT 618 9.969792986625455 12.62200682338526
- POINT 619 8.90962883591534 12.63950012274126
- POINT 620 9.437251948192607 13.5338816892218
- POINT 621 10.67234141492057 4.14015762808947
- POINT 622 9.899143945874886 3.622737177952356
- POINT 623 11.12308967028839 3.378421352424517
- POINT 624 10.05434271335534 5.157341501088084
- POINT 625 11.26624724302613 4.931019061942361
- POINT 626 11.04685146630943 12.60620519964597
- POINT 627 12.11322047313526 12.57558645323589
- POINT 628 11.56378510572855 13.48576964345572
- POINT 629 10.51922835403217 11.71182363316543
- POINT 630 11.03911690993059 10.80852417796056
- POINT 631 8.353117771266421 15.36645081786232
- POINT 632 8.887679271422279 14.45178297758268
- POINT 633 9.947843422132394 14.43428967822668
- POINT 634 -7.354534566620368 9.865368360421384
- POINT 635 -6.821148794732007 8.960322383687922
- POINT 636 -5.241808196453412 9.89286263766502
- POINT 637 -5.768321098655418 10.8109113925901
- POINT 638 -4.716307833929465 10.81361299428714
- POINT 639 -8.846687175134175 18.09453634019771
- POINT 640 -7.808012280335847 18.10584575803814
- POINT 641 -7.292392561451639 17.20089190904147
- POINT 642 -6.77237854878069 18.11685471455703
- POINT 643 -3.663850057285723 10.82236267206403
- POINT 644 -2.609574443921612 10.83288750674358
- POINT 645 -3.135519318363349 9.906089074041617
- POINT 646 -4.190362959487728 11.74041142698911
- POINT 647 1.022235278187542 6.105131945364167
- POINT 648 1.537413456757289 7.078319240970639
- POINT 649 0.5151765885688294 7.052715105123196
- POINT 650 2.577937928342901 7.096153011320037
- POINT 651 2.070879238724189 8.043736171079065
- POINT 652 3.092619808349037 6.17939491294298
- POINT 653 3.626085590315936 7.144811843051406
- POINT 654 11.48251188829295 35.02401731321491
- POINT 655 10.64039816452791 34.61217235404054
- POINT 656 10.17110341744214 33.75754315009095
- POINT 657 14.6689103389384 22.67322577662324
- POINT 658 14.05319959738808 21.7410710783964
- POINT 659 15.14265836363845 21.78642172193218
- POINT 660 13.01772434463638 21.71937825377518
- POINT 661 12.50723794880099 22.61679607802062
- POINT 662 18.09519862717962 19.95611146231709
- POINT 663 19.1740485049595 20.44527447993038
- POINT 664 19.11595980806804 21.52156423697686
- POINT 665 19.97093453194041 21.0778563218991
- POINT 666 16.26820018552503 25.3010316807035
- POINT 667 17.20417075684983 25.40139698246272
- POINT 668 16.34859018777993 26.20978847968642
- POINT 669 18.10513372405381 25.23404605383805
- POINT 670 18.34437302491627 24.32069547942606
- POINT 671 19.34729683337535 25.06775162939346
- POINT 672 15.85270720624401 27.09338928485154
- POINT 673 16.78867777756881 27.19375458661076
- POINT 674 15.291938186953 28.00781064238943
- POINT 675 17.30476560650833 28.05418410949204
- POINT 676 16.82978442287303 28.99839439914488
- POINT 677 17.8667222480114 28.98778277049785
- POINT 678 11.90568276733603 25.26641722612537
- POINT 679 12.94362175678668 25.24019557197247
- POINT 680 12.33385311172404 26.14255336301493
- POINT 681 13.04745149254336 23.49596728408519
- POINT 682 11.97523786865631 23.48488822901835
- POINT 683 13.26157019599279 27.94640762414275
- POINT 684 12.80192545764358 27.03544053207227
- POINT 685 11.76398646819293 27.06166218622517
- POINT 686 12.71478625639084 28.84364548586147
- POINT 687 13.74429763827116 28.8355037547217
- POINT 688 11.6871942678587 28.89644654626223
- POINT 689 12.16992171013707 29.78554267684118
- POINT 690 -2.645241319283594 23.65915467021994
- POINT 691 -2.171873771957271 22.80696352912885
- POINT 692 -1.671396963511793 23.78707299861202
- POINT 693 -3.638150958880634 21.77295984420368
- POINT 694 -4.169619601589666 22.67588242311962
- POINT 695 -4.662052432741228 21.76979706658653
- POINT 696 -2.588325360715464 21.77484192911209
- POINT 697 -3.080758191867026 20.868756572579
- POINT 698 -3.465390409600786 36.74515601536355
- POINT 699 -4.39944145231441 36.56941420393424
- POINT 700 -6.438967484949353 38.07148150975368
- POINT 701 -5.801761824463367 37.27840372561251
- POINT 702 -7.465007651281466 37.67899578164534
- POINT 703 -7.145548671869747 38.67996608706892
- POINT 704 1.645701561067675 36.58620616945915
- POINT 705 2.097605922649433 37.6591520210071
- POINT 706 1.630912530570906 38.7025770899849
- POINT 707 0.6144262348982835 38.03413825350503
- POINT 708 0.6145007137649187 36.62602437274583
- POINT 709 1.03123486124828 35.70349538136442
- POINT 710 3.50029065404008 34.71485867238029
- POINT 711 4.030903182455804 33.71986523468118
- POINT 712 2.549220124316628 34.70633644192217
- POINT 713 5.09669004529192 31.88416738089897
- POINT 714 4.59189732499495 30.94579415206534
- POINT 715 4.543156123115856 32.76980086916907
- POINT 716 3.548257480742272 32.79893134025448
- POINT 717 3.041784030297622 31.8775360658333
- POINT 718 2.529531089637571 32.8276004313454
- POINT 719 6.639239149600429 29.07614732768379
- POINT 720 5.633088140941368 29.09870269116678
- POINT 721 -5.741117900464612 18.12804558230707
- POINT 722 -4.710794713134181 18.134038227614
- POINT 723 -6.25673761934882 19.03299943130374
- POINT 724 9.094364861792316 3.185783391206454
- POINT 725 8.120154810382525 3.065542696161892
- POINT 726 8.486226833839986 4.246239372190631
- POINT 727 9.543080762382589 2.423606448705923
- POINT 728 4.181697363812684 8.041699532502184
- POINT 729 4.69637924381882 7.124941434125128
- POINT 730 4.720893497007972 8.958696437146365
- POINT 731 3.650599843505089 8.978566846072644
- POINT 732 5.772906862056196 8.955994301021946
- POINT 733 5.241809341748601 9.892861614592405
- POINT 734 6.300233792796178 8.026154643550692
- POINT 735 6.622836074707541 2.05014634703189
- POINT 736 5.718844002281117 1.755757914971069
- POINT 737 6.192965581434661 0.9829766219365916
- POINT 738 5.664301131002254 3.628351178339397
- POINT 739 6.833866176424866 3.46371406014724
- POINT 740 6.342451737007583 4.290635795338225
- POINT 741 7.442004204377196 2.403258079163064
- POINT 742 7.917003402974732 1.633697762640239
- POINT 743 8.94127268867317 5.267193691042839
- POINT 744 7.96706263726338 5.146952995998276
- POINT 745 9.535178516778736 6.058055124895729
- POINT 746 -13.10928490082518 34.07016086758892
- POINT 747 -12.24388551710086 34.4147639590643
- POINT 748 -12.49585729120814 35.61581090418589
- POINT 749 -14.07322716081642 34.21070994911054
- POINT 750 -14.36136978693606 10.72072627767335
- POINT 751 -14.88062444253561 11.58118583581166
- POINT 752 -14.26663781292847 12.50471088888409
- POINT 753 -13.22961531762352 10.76268243082563
- POINT 754 -13.2079352618582 12.53633569326509
- POINT 755 -12.6910018313468 11.65677153517575
- POINT 756 15.07065410043878 18.08797196826217
- POINT 757 14.01205198450469 18.07820806245078
- POINT 758 -6.796922393156049 14.4689317302459
- POINT 759 -6.269727250030074 15.38636001982073
- POINT 760 -5.758685342348371 14.47458053337772
- POINT 761 -7.817995296922273 16.28529708460574
- POINT 762 -8.353117303969567 15.36645138459855
- POINT 763 -8.863148300054089 16.27103725251539
- POINT 764 -7.842525768612235 14.46604360030338
- POINT 765 -7.331483860930532 13.55426411386037
- POINT 766 -6.782361565367118 16.29630604112463
- POINT 767 -3.683558631825044 14.45370591664109
- POINT 768 -4.714727414587884 14.47325408116177
- POINT 769 -5.24192255771386 13.55582579158695
- POINT 770 -4.720392683042421 12.64308054429161
- POINT 771 -5.764350610802907 12.64440699650756
- POINT 772 -3.667934906398679 12.6518302220685
- POINT 773 -8.395897107966746 11.71956985286866
- POINT 774 -7.863355897507648 12.63144425890769
- POINT 775 -6.817752522051462 12.63433238885021
- POINT 776 -6.296222647380024 11.72158714155488
- POINT 777 -6.821723009903972 10.80083678493275
- POINT 778 -7.882436115344974 10.77604410938616
- POINT 779 4.716308849678887 10.81361234423387
- POINT 780 5.76832221472711 10.81091020810945
- POINT 781 4.190363830521503 11.74041081086773
- POINT 782 3.663850957542993 10.82236221735069
- POINT 783 1.564857731194123 14.49716655277795
- POINT 784 1.04410790663793 13.59158434318418
- POINT 785 0.5207500976712671 14.50289465153176
- POINT 786 1.565386117813491 12.67566398686721
- POINT 787 0.5212784842906355 12.68139208562102
- POINT 788 2.613060739273198 12.66750846420746
- POINT 789 2.090231316925903 11.7573162066443
- POINT 790 2.247276054134772e-07 15.40847690902769
- POINT 791 -0.5207495998285867 14.50289469943392
- POINT 792 -11.21209063177709 28.0004787204091
- POINT 793 -11.76398481964448 27.06166045714313
- POINT 794 -13.26156901870596 27.94640451622695
- POINT 795 -12.71478480762005 28.84364148415803
- POINT 796 -13.74429684069641 28.83549908117502
- POINT 797 -12.16991936167931 29.78553808233906
- POINT 798 -11.59833041795275 30.70821000663137
- POINT 799 -10.66722518583636 28.94237531859013
- POINT 800 -10.16307824785739 29.92216165396643
- POINT 801 -9.687977339945633 29.02619685698455
- POINT 802 -11.68719153968886 28.89644351739098
- POINT 803 -10.66517999954061 30.87364895036685
- POINT 804 -9.685932153649887 30.95747048876127
- POINT 805 -16.82978847880473 28.99838541372564
- POINT 806 -17.30476813190573 28.05417686774796
- POINT 807 -17.86672715494531 28.98777290369169
- POINT 808 -12.80192396054655 27.03543843675622
- POINT 809 -12.33385179456144 26.1425519746894
- POINT 810 -13.83143599362291 27.02729603377322
- POINT 811 -18.71184747782762 23.47031202987638
- POINT 812 -19.74963048996175 23.15469430712368
- POINT 813 -19.34729785953139 25.06774765708812
- POINT 814 -18.34437302460557 24.32069263403202
- POINT 815 -18.10513422474459 25.23404206079518
- POINT 816 -17.49125461230818 23.64225669394841
- POINT 817 7.817995757395382 16.28529666142913
- POINT 818 7.292392975317489 17.20089161300046
- POINT 819 7.80801268720816 18.10584554161538
- POINT 820 6.772378944905659 18.11685450089467
- POINT 821 8.863148731491028 16.27103681015437
- POINT 822 1.015466424403581 21.25999439681868
- POINT 823 1.614481163449325 21.90276020009269
- POINT 824 1.015466375681423 20.43531928751171
- POINT 825 1.63269187639632 19.84045612674685
- POINT 826 2.606070264520712 19.96562581254599
- POINT 827 4.710795072138549 18.13403803354307
- POINT 828 4.203342540186773 19.05240159983545
- POINT 829 5.741118267854977 18.12804536094104
- POINT 830 6.25673797974565 19.03299928955596
- POINT 831 8.29058057434478 22.63591511879024
- POINT 832 7.770146987914942 21.73699352712036
- POINT 833 7.761488015053925 23.54966519059946
- POINT 834 8.799876058762283 23.53547258507314
- POINT 835 7.882436851035273 10.77604170622064
- POINT 836 6.821724104311079 10.80083523684094
- POINT 837 8.395897688086761 11.71956812605931
- POINT 838 6.296223612241364 11.72158596648241
- POINT 839 7.863356649653912 12.63144299189585
- POINT 840 6.817753360687178 12.63433121076197
- POINT 841 5.764351471103209 12.64440618203048
- POINT 842 15.41658924936081 7.259168960497591
- POINT 843 14.24561038678537 7.342548392480751
- POINT 844 14.89244912969332 8.12523258985544
- POINT 845 12.07551877984602 9.034284548463294
- POINT 846 13.2074318313694 9.050012371808604
- POINT 847 12.60943811820144 8.176454016117848
- POINT 848 12.13489966336506 10.8019324567901
- POINT 849 11.57772973957951 9.91443462532451
- POINT 850 10.97973602641154 9.040876269633753
- POINT 851 11.96631097541835 7.35863242591423
- POINT 852 11.55167271280977 6.252370796998449
- POINT 853 11.06288680406948 7.054464563856754
- POINT 854 12.169671414375 5.235186923999835
- POINT 855 12.88604184172865 5.817407070591241
- POINT 856 12.61406020569684 4.479514007912766
- POINT 857 13.09822402694172 7.374360249259541
- POINT 858 13.60248324400228 6.524726802277135
- POINT 859 14.05124229732068 5.767551513356759
- POINT 860 17.07578521456617 11.60014693753975
- POINT 861 17.71057756929273 10.70831332876806
- POINT 862 16.58566833102513 10.66595132007714
- POINT 863 16.40667132100974 12.44593062352206
- POINT 864 15.79268502556732 13.36945619674464
- POINT 865 15.36154529735113 12.46837529147962
- POINT 866 17.18577703109811 14.27791621091107
- POINT 867 17.8991747362448 13.49160449707131
- POINT 868 17.50692494278236 12.50122784280477
- POINT 869 18.59468174703889 12.63536765117651
- POINT 870 -5.772905779136106 8.955995570716897
- POINT 871 -6.300233112688748 8.02615691843684
- POINT 872 -4.720892514410153 8.958697172413938
- POINT 873 -2.562097267089574 3.227805457117126
- POINT 874 -2.034944989672938 4.189368100531676
- POINT 875 -0.5151786281004135 7.052714909961791
- POINT 876 -4.495306666907339e-07 8.025902205568261
- POINT 877 -0.5151778044490922 8.96843130178743
- POINT 878 -1.555799685599574 8.971257959564014
- POINT 879 -1.040621823848756 9.913787250944587
- POINT 880 0.5151774122201507 8.968431496948837
- POINT 881 2.806199940197374e-07 11.76547179125803
- POINT 882 -0.5212779305555666 12.681392147575
- POINT 883 -2.090230658535098 11.75731647898901
- POINT 884 -1.561899919612723 10.84104288096659
- POINT 885 -0.5212780384622415 10.83821622319001
- POINT 886 0.5212783763839607 10.83821616123602
- POINT 887 -8.95781830977193 7.046847428450418
- POINT 888 -9.535179298628961 6.058061838123082
- POINT 889 -7.885292789837587 7.099198168742546
- POINT 890 -6.342458718450149 4.290639218573956
- POINT 891 -5.664307592746104 3.628355267241409
- POINT 892 -6.833874189380248 3.463718914397889
- POINT 893 -4.115213411606943 4.361615670969387
- POINT 894 -4.656830149629152 5.341664562613124
- POINT 895 -3.599151439420091 5.248004662165036
- POINT 896 -7.4420232035393 2.403268237260354
- POINT 897 -7.917037371317474 1.633712477540171
- POINT 898 -8.120174329243344 3.065552188592901
- POINT 899 0.5061739145443324 5.095155188591381
- POINT 900 -2.929429205988932e-06 4.110781499104045
- POINT 901 -0.5061784339744557 5.09515412002939
- POINT 902 1.528410782732792 5.120759324438823
- POINT 903 0.5061724875148098 3.087534852556564
- POINT 904 1.539499732754256 3.149220199566127
- POINT 905 11.64987528159459 32.70981082487776
- POINT 906 12.51527678005581 32.36521402236142
- POINT 907 12.11081476394826 33.49693513307348
- POINT 908 12.62592549818568 30.65541566530306
- POINT 909 11.59833350965353 30.70821672570382
- POINT 910 14.07320338353421 34.21073365839178
- POINT 911 13.10926757404889 34.07018328539174
- POINT 912 13.91737880453094 33.26989288698078
- POINT 913 12.24386607558766 34.41478008790807
- POINT 914 12.49582536742833 35.61583656588377
- POINT 915 14.16603325158087 23.49720392336359
- POINT 916 15.25549201783124 23.54255456689937
- POINT 917 15.93819784253432 24.42958644855976
- POINT 918 15.08261727346442 25.23797794578346
- POINT 919 16.44107492989185 23.60560830181941
- POINT 920 13.63403317143619 24.36529607436132
- POINT 921 14.0622035158242 25.24143221125088
- POINT 922 16.13661120818988 21.79829183825163
- POINT 923 15.52090046663956 20.86613714002479
- POINT 924 16.09556213763715 19.95056877865242
- POINT 925 17.17857677781561 19.94984061055883
- POINT 926 16.75928560426177 19.02240213286701
- POINT 927 17.431475160555 20.8842781081025
- POINT 928 18.71184721732612 23.47031396269385
- POINT 929 18.87127587281586 22.47222833205418
- POINT 930 19.74963016806416 23.15469636218577
- POINT 931 17.49125494700478 23.6422586667476
- POINT 932 18.10341307466681 21.84121305493807
- POINT 933 16.8085491223017 22.75522678508721
- POINT 934 17.18679122530281 21.83494220317982
- POINT 935 14.51994297887854 32.4240927325463
- POINT 936 13.57878043675709 32.30653817612266
- POINT 937 13.11784095440342 31.51941386792693
- POINT 938 13.68942915488696 30.59673981906429
- POINT 939 11.44016434034826 24.38232842674731
- POINT 940 10.89995079660589 23.50315722068274
- POINT 941 10.83039569528561 25.28468621778976
- POINT 942 9.846922943175489 23.51115996583782
- POINT 943 9.317830383884633 24.42491003764703
- POINT 944 9.800494196258793 25.32311557173736
- POINT 945 8.753447311845587 25.34742819097269
- POINT 946 10.26601262324656 26.20720437111542
- POINT 947 -9.188516399988456 28.09611515482773
- POINT 948 -8.684369462009494 29.07590149020404
- POINT 949 -8.710509152607116 27.19572666107374
- POINT 950 -4.967007708624748 35.55401033082136
- POINT 951 -5.401876338967484 36.44269225860205
- POINT 952 -6.369328080773704 36.26299985249962
- POINT 953 -8.644059727746285 34.74088988879614
- POINT 954 -9.113357089394702 35.59551543427815
- POINT 955 -7.680217086741342 34.8114162753276
- POINT 956 -8.132953504798678 33.74408230964664
- POINT 957 -9.038370913869775 36.59719108141323
- POINT 958 -7.080382952483385 35.61775611998313
- POINT 959 -6.569276729535778 34.62094854083364
- POINT 960 -7.480268437979268 36.45346758699358
- POINT 961 -8.176062522991147 37.03375204912885
- POINT 962 -9.033664824607252 37.8435674405669
- POINT 963 -3.013509432387965 35.67217382596145
- POINT 964 -2.514327020017076 36.73659756517147
- POINT 965 -1.031206014429366 35.70346448021024
- POINT 966 -1.53422388422784 34.73877849312591
- POINT 967 -0.5029838558529507 34.77862759756677
- POINT 968 2.021011022720923 33.78146904341516
- POINT 969 1.514537572276274 32.86007376899397
- POINT 970 1.534226606955332 34.73880977957074
- POINT 971 0.5030257596525753 34.77862798285742
- POINT 972 7.889854101383875e-06 33.81394199577308
- POINT 973 1.536896992374578 27.28673102869031
- POINT 974 2.075897760470205 26.39023244060897
- POINT 975 2.583954155543661 27.30113813950133
- POINT 976 3.556816059688512 30.9375844125214
- POINT 977 4.088202963281139 30.03451158984436
- POINT 978 2.538089668583811 30.96625350361232
- POINT 979 0.5030096425456565 32.87005276973701
- POINT 980 -0.5029999729598695 32.87005238444636
- POINT 981 1.011529709462303 31.91618415766725
- POINT 982 11.21209270722683 28.00048045890696
- POINT 983 10.74402036130729 27.10759328984962
- POINT 984 9.714118862280475 27.14602264379722
- POINT 985 10.66722816097306 28.94237764988668
- POINT 986 9.687978884244082 29.02619593691772
- POINT 987 10.16308044487594 29.92216202427299
- POINT 988 7.660247523983134 29.07171418485961
- POINT 989 8.684369985103768 29.07589903930046
- POINT 990 7.163900427677865 28.15025091012108
- POINT 991 9.188517701200887 28.09611466491416
- POINT 992 8.710509963140158 27.19572574617996
- POINT 993 -4.203342243390184 19.05240175014947
- POINT 994 -3.688659985491623 18.14224967870969
- POINT 995 -3.655895652889911 19.96374384445787
- POINT 996 -4.678030380532469 19.95553239336218
- POINT 997 -2.207829164486162 18.93544342244381
- POINT 998 -2.606070054724741 19.96562592936628
- POINT 999 -5.170740868433548 20.8574752560983
- POINT 1000 -5.702209511142579 21.76039783501424
- POINT 1001 -5.71818745893382 19.94613316178989
- POINT 1002 -6.731544945060238 21.74909188831638
- POINT 1003 -6.222856509367919 22.66141369880462
- POINT 1004 -7.249499434945713 20.83597766954888
- POINT 1005 -7.770146433171051 21.73699353333926
- POINT 1006 -6.749448107249898 19.93494229403985
- POINT 1007 5.802524977371679 7.067405929156367
- POINT 1008 6.85076775285229 7.071731449131153
- POINT 1009 7.387583714762178 6.140445024793657
- POINT 1010 7.885292530186677 7.099193739187982
- POINT 1011 5.762972814506381 5.284127824133605
- POINT 1012 5.246913203874932 6.170518239705588
- POINT 1013 4.656827080953521 5.341663329102365
- POINT 1014 6.932537859928994 5.119490705941448
- POINT 1015 5.123453405055713 2.630543796725044
- POINT 1016 4.686581836917295 1.584872268547702
- POINT 1017 3.780741176469697 1.381516026850165
- POINT 1018 4.380854250247183 0.4856945617800922
- POINT 1019 3.07892064305541 2.323657990883948
- POINT 1020 4.632038965638431 3.457465531916029
- POINT 1021 8.957817564431407 7.046841938024162
- POINT 1022 8.421001602521519 7.978128362361659
- POINT 1023 8.954387418505732 8.883174489212605
- POINT 1024 10.48552585172216 8.043251376985188
- POINT 1025 10.07088758911358 6.936989748069407
- POINT 1026 9.98773681145564 8.923401453846404
- POINT 1027 14.14927330494213 14.3319204116199
- POINT 1028 13.09057086026495 14.36354542779163
- POINT 1029 13.68885655723154 13.42352588087392
- POINT 1030 14.5608425845304 15.25822614311025
- POINT 1031 15.01786739893976 16.19866298162331
- POINT 1032 14.0080124223849 16.21237679705068
- POINT 1033 15.15912828149698 14.31820659619254
- POINT 1034 16.20425430515559 14.29576192823498
- POINT 1035 16.55222028702778 15.22666661035897
- POINT 1036 15.43600191484122 17.16213210717993
- POINT 1037 16.04161877848574 18.09729043987835
- POINT 1038 17.12463341866421 18.09656227178477
- POINT 1039 17.31694506141086 17.15083111331099
- POINT 1040 15.98883207698672 16.2079814532395
- POINT 1041 16.97035480292924 16.19013573591558
- POINT 1042 -9.329106518265187 20.81496648779522
- POINT 1043 -9.8677300853677 19.90262169444576
- POINT 1044 -16.0416184259235 18.09729104090766
- POINT 1045 -16.75928532981814 19.02240250148187
- POINT 1046 -10.94364637205534 16.23848947462534
- POINT 1047 -9.899040221872481 16.25867329662998
- POINT 1048 -9.363918214825187 17.17751899663717
- POINT 1049 -9.882579096952568 18.0821723843123
- POINT 1050 1.561900414029895 10.8410427689158
- POINT 1051 2.609575035489602 10.83288724625605
- POINT 1052 1.04062209494766 9.913787200847779
- POINT 1053 3.135520054646986 9.906088779622188
- POINT 1054 2.596323921451698 8.989091874978008
- POINT 1055 1.555799449866085 8.97125810462861
- POINT 1056 5.241923253953617 13.55582514043971
- POINT 1057 4.714728002752798 14.47325361022883
- POINT 1058 3.143090414259499 13.57017754949987
- POINT 1059 3.667935613371911 12.65182976927697
- POINT 1060 4.720393505507803 12.64307989616015
- POINT 1061 2.105326509092408 15.38069455968688
- POINT 1062 2.670185462451287 16.23272638623747
- POINT 1063 1.606358875586338 16.26050868767612
- POINT 1064 2.628684318059071 14.4693842513393
- POINT 1065 3.683559192157784 14.45370555640881
- POINT 1066 4.200321906552371 15.37246031206826
- POINT 1067 3.682632968769743 16.28839908786602
- POINT 1068 -1.606358493039556 16.26050877577584
- POINT 1069 -2.670185073501789 16.23272654426651
- POINT 1070 -2.105326053234482 15.38069472542052
- POINT 1071 -3.183664984271242 17.16821337539803
- POINT 1072 -2.676212514527244 18.08657689793349
- POINT 1073 -1.70283416326578 17.96140711913215
- POINT 1074 0.6172255840106643 18.01551021964674
- POINT 1075 -0.6172253233165815 18.01551020223283
- POINT 1076 -1.085608673357664 17.16664367772251
- POINT 1077 -0.5207496530903567 16.31461185887652
- POINT 1078 0.5207500444094971 16.31461181097436
- POINT 1079 1.085608997768376 17.16664363752495
- POINT 1080 -16.26819960626571 25.30102864423684
- POINT 1081 -15.0826163587443 25.23797552751852
- POINT 1082 -15.93819691156472 24.42958418138574
- POINT 1083 -15.85270768406584 27.0933844772987
- POINT 1084 -14.85185005261381 27.02384105180678
- POINT 1085 -15.29193868323435 28.00780553873586
- POINT 1086 -14.3922049944544 26.11287497233606
- POINT 1087 -14.06220229975341 25.24143050948495
- POINT 1088 -15.7999041554007 28.93948960494379
- POINT 1089 -16.33689631951905 29.86052605444166
- POINT 1090 -14.74418021093874 30.63117829061417
- POINT 1091 -15.76075609457718 30.75508671479437
- POINT 1092 -16.81445339648837 30.82931935765637
- POINT 1093 -14.25226231286276 29.76718314738296
- POINT 1094 -14.79904652394867 28.86994617945188
- POINT 1095 8.846687614423065 18.09453615000725
- POINT 1096 8.326673584011235 19.01049903790145
- POINT 1097 8.8267249782098 19.91153448810875
- POINT 1098 9.867730626409395 19.90262173424139
- POINT 1099 7.788050050994897 19.92284387971688
- POINT 1100 4.650398721048944 25.41533314105567
- POINT 1101 4.13553988625797 26.36549811509552
- POINT 1102 3.637813758430262 25.45447457738014
- POINT 1103 3.148718616325014 24.57178682998195
- POINT 1104 2.633859781534041 25.52195180402179
- POINT 1105 1.586802618364957 25.50754469321078
- POINT 1106 3.649195445762174 23.59167733893057
- POINT 1107 4.169619811571008 22.67588222314829
- POINT 1108 4.673096959030069 23.58851448755802
- POINT 1109 2.58832552483298 21.77484182477213
- POINT 1110 2.171873936919459 22.8069634498414
- POINT 1111 2.645241468865954 23.65915456557222
- POINT 1112 1.671397107482298 23.78707294089278
- POINT 1113 4.678030658177207 19.95553223402469
- POINT 1114 3.655895895669011 19.96374368425781
- POINT 1115 3.638151155981279 21.77295969648394
- POINT 1116 4.662052669249173 21.76979684511139
- POINT 1117 3.080758382511145 20.86875644673523
- POINT 1118 6.731545438466698 21.74909183518711
- POINT 1119 7.249499895745219 20.83597763799092
- POINT 1120 6.749448501546653 19.93494218778363
- POINT 1121 5.718187824495971 19.94613304783
- POINT 1122 5.702209835567938 21.7603976589167
- POINT 1123 6.222856927737663 22.66141354804614
- POINT 1124 5.17074117997821 20.85747513225235
- POINT 1125 14.88062362045075 11.58118328295605
- POINT 1126 14.26663732500833 12.50470885617862
- POINT 1127 13.20793488033116 12.53633387235034
- POINT 1128 12.69100124091205 11.65676942854059
- POINT 1129 13.22961407056096 10.76267987590455
- POINT 1130 -4.181696757246904 8.041699829461468
- POINT 1131 -3.650599174564211 8.978566896409593
- POINT 1132 -3.626085797421631 7.144811553632946
- POINT 1133 -4.696379137267573 7.124941829637294
- POINT 1134 -2.5963235612001 8.989091731089145
- POINT 1135 -2.070879541800435 8.043735781931989
- POINT 1136 -3.574367948496355 3.363807242843679
- POINT 1137 -3.078930514188047 2.323656929439507
- POINT 1138 -5.123462129635516 2.630546839115701
- POINT 1139 -4.686602709596436 1.584876903295025
- POINT 1140 -4.632046658705416 3.457467143291768
- POINT 1141 -3.780758206397734 1.381518432692542
- POINT 1142 -4.380882064820396 0.4857008521467929
- POINT 1143 -1.537414964648728 7.078318112167635
- POINT 1144 -1.022237926549232 6.10513101172257
- POINT 1145 -2.551004482247714 5.199344992224856
- POINT 1146 -3.092621220269923 6.179393883868594
- POINT 1147 -2.577938840249254 7.096151883692768
- POINT 1148 -1.52841477052277 5.120757322235234
- POINT 1149 -1.565385542453618 12.67566417103727
- POINT 1150 -1.044107338782977 13.59158446540026
- POINT 1151 -1.564857211726638 14.49716672289619
- POINT 1152 -2.628683792188871 14.46938449138686
- POINT 1153 -2.613060066762507 12.66750879681426
- POINT 1154 -3.143089790317201 13.57017791411676
- POINT 1155 -8.941278766903849 5.267200605438743
- POINT 1156 -8.486236698750734 4.246245735265347
- POINT 1157 -7.96706738323741 5.146957735903831
- POINT 1158 -9.094385712909785 3.185795058127813
- POINT 1159 -9.899165223866994 3.622750914152373
- POINT 1160 -9.543111594457244 2.423623277029117
- POINT 1161 -10.05434861414229 5.157349837484599
- POINT 1162 -10.67235893022354 4.140170700800017
- POINT 1163 -11.12311705597741 3.378439779022869
- POINT 1164 -7.38758492759221 6.140449119392674
- POINT 1165 -6.932542859439094 5.119494249219278
- POINT 1166 -5.762976262804949 5.284130602062798
- POINT 1167 -6.850768266039271 7.071734682057993
- POINT 1168 -5.80252525044337 7.067407869086968
- POINT 1169 -5.246914290618097 6.170519593258447
- POINT 1170 10.71672358375953 32.87524392735796
- POINT 1171 9.642413735714634 32.79125514185909
- POINT 1172 11.12118559986708 31.74352281664589
- POINT 1173 9.15793076534775 31.87228668931375
- POINT 1174 9.685932535089496 30.95746811521505
- POINT 1175 10.66518181181848 30.87364982818402
- POINT 1176 15.19791671718209 31.58464847548497
- POINT 1177 15.55917637400988 32.56630552600364
- POINT 1178 15.79990214283926 28.93949698650302
- POINT 1179 16.3368917696794 29.86053599387202
- POINT 1180 15.76074915645257 30.75509875525596
- POINT 1181 16.81444462265249 30.82933310971594
- POINT 1182 14.74417705037517 30.63118830145916
- POINT 1183 14.25226159415743 29.76719009883528
- POINT 1184 14.79904553375937 28.86995223711657
- POINT 1185 -7.660247595099477 29.07171642334552
- POINT 1186 -8.159708535056653 30.00179812550234
- POINT 1187 -6.639239694273195 29.0761486788626
- POINT 1188 -7.163900621226036 28.1502520435643
- POINT 1189 -5.497622619491922 34.55901436086761
- POINT 1190 -4.49518773283885 34.6857363061998
- POINT 1191 -5.579336478117359 32.80510559052856
- POINT 1192 -6.09745675374988 33.75267451621208
- POINT 1193 -6.650990588161214 32.86703977049458
- POINT 1194 -5.700404689242956 23.58012241603744
- POINT 1195 -6.729740123160614 23.56881646933958
- POINT 1196 -7.239035482595526 24.46837386823964
- POINT 1197 -7.761487302720488 23.54966515100682
- POINT 1198 -7.691207402098477 27.22632931678663
- POINT 1199 -6.670199501272196 27.23076157230372
- POINT 1200 -6.172815514826199 26.31659798520196
- POINT 1201 -5.645508733953759 27.24052071197963
- POINT 1202 -8.216808032653276 26.27623618981316
- POINT 1203 -6.702397292590144 25.39718201604923
- POINT 1204 -5.677706525271708 25.40694115572514
- POINT 1205 -7.734144472150017 25.37803069771646
- POINT 1206 -8.753446222658658 25.34742804200357
- POINT 1207 -1.645698721915378 36.58607539347716
- POINT 1208 -2.0975796991282 37.65905758287926
- POINT 1209 -1.630935113652335 38.70247408973233
- POINT 1210 -0.6145331724071246 38.03403837867723
- POINT 1211 -0.6144586935404894 36.62592449791802
- POINT 1212 8.00627890595873e-06 37.50863528601275
- POINT 1213 0.5990148214488246 23.75062706100676
- POINT 1214 -0.5990146744118122 23.75062707718625
- POINT 1215 -1.072382221738135 24.60281821827733
- POINT 1216 1.072382353395319 24.60281817673758
- POINT 1217 0.5144203323314835 25.47109881332476
- POINT 1218 3.58444379142495 29.11804267687441
- POINT 1219 3.080359636161616 28.20371011551553
- POINT 1220 2.549037542711368 29.11196928894155
- POINT 1221 3.619360404257244 27.30721152743419
- POINT 1222 5.129328969085179 28.18223377819683
- POINT 1223 4.619525056731388 29.12625241641835
- POINT 1224 4.631945366875925 27.26807009110972
- POINT 1225 5.645508451085906 27.24052036585816
- POINT 1226 2.034499539717892 30.03893177661523
- POINT 1227 1.530415384454558 29.12459921525634
- POINT 1228 1.519467510327002 30.97888342992712
- POINT 1229 0.5079395805963843 30.98886243067015
- POINT 1230 3.57436036144565 3.363808001711532
- POINT 1231 4.115208087392189 4.361615383325885
- POINT 1232 2.034939451144496 4.189370210393712
- POINT 1233 2.551000814787705 5.199346967166499
- POINT 1234 2.562089764809169 3.227807842293803
- POINT 1235 3.599148476760741 5.248005798897869
- POINT 1236 -8.808534389004958 21.72280081085314
- POINT 1237 -8.290579899119484 22.63591502962064
- POINT 1238 -9.849539984213617 21.7138879840766
- POINT 1239 -8.799875258554394 23.5354724285207
- POINT 1240 -14.05319871993245 21.74107047129854
- POINT 1241 -13.49147167328674 20.83257382131933
- POINT 1242 -13.01772343641998 21.71937768246372
- POINT 1243 -15.07065374632022 18.08797242978403
- POINT 1244 -15.4360015171055 17.16213287055806
- POINT 1245 -14.0080120928104 16.21237758454029
- POINT 1246 -15.01786712752577 16.19866394969555
- POINT 1247 -17.17857644573234 19.94984075163958
- POINT 1248 -17.43147479908956 20.8842778513917
- POINT 1249 -16.09556177105241 19.95056885029135
- POINT 1250 -15.52089992188291 20.86613685530161
- POINT 1251 -15.10160880596872 19.93869860514389
- POINT 1252 -17.18679097624842 21.83494159512092
- POINT 1253 -18.18552489707417 26.14279763280435
- POINT 1254 -17.20417083141572 25.40139287011322
- POINT 1255 -16.3485902785953 26.20978421624601
- POINT 1256 -16.78867890921584 27.19374870317508
- POINT 1257 -17.80065072643519 27.17057660669527
- POINT 1258 -18.72983447894121 27.01379366339507
- POINT 1259 11.95573882194991 19.89979512998055
- POINT 1260 10.91279663445388 19.89738135384383
- POINT 1261 10.41041451927062 18.99394926589576
- POINT 1262 12.50727362976512 18.99615568741801
- POINT 1263 5.677706720839749 25.40694066827868
- POINT 1264 5.179980593012042 24.49591713056331
- POINT 1265 5.700404958820875 23.58012201478103
- POINT 1266 6.729740561719636 23.56881619105143
- POINT 1267 7.239036046137137 24.46837365733434
- POINT 1268 7.691207579082008 27.22632790550661
- POINT 1269 6.670199204699301 27.23076104833079
- POINT 1270 6.172815602490047 26.31659736124369
- POINT 1271 8.216808740161595 26.27623588438967
- POINT 1272 6.702397474453146 25.39718135075132
- POINT 1273 7.734144927787435 25.37803035029934
- POINT 1274 14.36136880606171 10.72072377865549
- POINT 1275 15.45627677840451 10.68439021395649
- POINT 1276 15.49028452683864 8.941107024951828
- POINT 1277 14.33918656687014 9.008056274559546
- POINT 1278 13.80526722851472 9.865886806904992
- POINT 1279 16.06641351663609 9.805491815776586
- POINT 1280 16.64213914845493 8.907696187396814
- POINT 1281 -7.631707103564363 30.91661699613311
- POINT 1282 -8.655828970474381 30.92080206299163
- POINT 1283 -7.130348925755392 31.87754588921673
- POINT 1284 -6.634228490337664 30.95854195172743
- POINT 1285 -9.157930722157598 31.87228935939205
- POINT 1286 -8.612311842392856 32.75458842836879
- POINT 1287 -7.648469201387913 32.82511481490026
- POINT 1288 -2.549229273895434 34.70629607419768
- POINT 1289 -2.021007115319019 33.78145919155421
- POINT 1290 -3.500292663479144 34.71485452438976
- POINT 1291 -4.030907574346319 33.71985855443602
- POINT 1292 -5.179980371060386 24.49591750747982
- POINT 1293 -4.650398593296442 25.41533347663255
- POINT 1294 -3.649195283407097 23.591677514562
- POINT 1295 -3.148718474961619 24.57178698404517
- POINT 1296 -4.673096757267691 23.58851473694486
- POINT 1297 0.5144203594414323 27.2905527635694
- POINT 1298 1.022476754514889 28.20145846246176
- POINT 1299 0.507938751521413 29.12842095013544
- POINT 1300 -9.846921989817281 23.51115965477413
- POINT 1301 -9.317829393418286 24.42490977616031
- POINT 1302 -9.800492953921545 25.323115268257
- POINT 1303 -10.83039438917027 25.28468549874502
- POINT 1304 -10.92764508160684 18.07693196478106
- POINT 1305 -10.41041404191582 18.99394930834161
- POINT 1306 -10.91279607002197 19.89738127491452
- POINT 1307 -11.95573820817218 19.89979496064743
- POINT 1308 -11.41305425162406 20.80846734675159
- POINT 1309 -15.14265757944868 21.78642099994649
- POINT 1310 -14.66890934258192 22.67322486109087
- POINT 1311 -16.13661054453237 21.79829124509394
- POINT 1312 -15.25549093307073 23.54255322720311
- POINT 1313 -14.1660320735545 23.49720269855517
- POINT 1314 -16.80854863381419 22.75522573976579
- POINT 1315 -16.44107418059214 23.60560634392143
- POINT 1316 10.44287685491821 15.3320070852495
- POINT 1317 10.99244953168854 14.41410579688861
- POINT 1318 12.05881853851436 14.38348705047854
- POINT 1319 12.51923528622494 15.29188158122452
- POINT 1320 9.882579552317679 18.08217219529029
- POINT 1321 9.363918655514606 17.17751869900422
- POINT 1322 10.92764556036217 18.07693181489272
- POINT 1323 9.899040669385645 16.25867285543741
- POINT 1324 10.94364677894179 16.23848897409934
- POINT 1325 -0.5144201764050657 27.29055277175395
- POINT 1326 6.145462372320054e-08 26.3758253379825
- POINT 1327 -0.5144202035150144 25.4710988215093
- POINT 1328 -1.586802492614995 25.50754474293507
- POINT 1329 4.053181679175566e-07 30.05156162643644
- POINT 1330 -0.5079373955465308 30.98886235417658
- POINT 1331 -0.5079382246215022 29.12842087364186
- POINT 1332 -12.94362054595454 25.24019426221156
- POINT 1333 -13.63403191024444 24.36529481739402
- POINT 1334 -13.04745031975563 23.49596645128178
- POINT 1335 -11.90568140505247 25.26641628259847
- POINT 1336 -11.44016314056337 24.38232778626718
- POINT 1337 -10.38199561361241 22.61371945416543
- POINT 1338 -10.90256774287263 21.70588513110751
- POINT 1339 -10.8999497484763 23.50315680180504
- POINT 1340 -11.94550988102284 21.70829881684042
- POINT 1341 -11.9752367643585 23.48488758565849
- POINT 1342 -12.50723692766855 22.61679546681964
- POINT 1343 -11.95486088381842 18.07035362542616
- POINT 1344 -11.42702593885517 17.15857670139686
- POINT 1345 -11.97086217426693 16.23191113527045
- POINT 1346 -13.00261454459266 16.21196963584406
- POINT 1347 -13.45963928928449 17.15240631073819
- POINT 1348 -14.04300661306449 19.92893456636063
- POINT 1349 -14.61766846223399 19.01336656135037
- POINT 1350 -14.012051553416 18.07820839100076
- POINT 1351 -13.00753132955202 19.9072417775258
- POINT 1352 -12.50727314794993 18.99615570568874
- POINT 1353 -13.00665400519826 18.07780044230454
- POINT 1354 11.42702639250091 17.15857636716348
- POINT 1355 11.95486135945386 18.07035343776895
- POINT 1356 13.45963971419343 17.15240581280172
- POINT 1357 13.00665446190387 18.07780023968877
- POINT 1358 11.97086257803348 16.23191059697557
- POINT 1359 13.00261489978407 16.21196897428866
- POINT 1360 -4.63194529517035 27.26807044242916
- POINT 1361 -5.129329281616346 28.18223402953092
- POINT 1362 -2.075897664001495 26.39023252420856
- POINT 1363 -2.633859682224616 25.52195192097659
- POINT 1364 -3.619360348222028 27.30721173111527
- POINT 1365 -4.135539800559439 26.36549841356398
- POINT 1366 -3.637813646348119 25.45447476531866
- POINT 1367 -1.530414898263689 29.12459912906478
- POINT 1368 -1.022476552060444 28.20145845276378
- POINT 1369 -2.583954039656873 27.30113820521839
- POINT 1370 -3.080359534267785 28.20371023408358
- POINT 1371 -1.536896850047253 27.28673102717688
- POINT 1372 -4.543158675405131 32.76980075139725
- POINT 1373 -5.096692509816465 31.88416600567974
- POINT 1374 -3.548263606045425 32.79891896958721
- POINT 1375 -2.549037169284093 29.11196922998421
- POINT 1376 -2.034498841845151 30.03893165086228
- POINT 1377 -3.584443477849247 29.11804275588108
- POINT 1378 -1.519465434862823 30.97888306068132
- POINT 1379 -1.011526259584607 31.91618386491503
- POINT 1380 -3.041784503002568 31.8775328689841
- POINT 1381 -2.529533401943756 32.82759067202288
- POINT 1382 -2.538087705883227 30.96625316160074
- POINT 1383 -3.556817909984896 30.93758145916507
- POINT 1384 -1.514528012276162 32.8600730909511
- POINT 1385 -4.088203640533337 30.03451082052263
- POINT 1386 -4.591900437652678 30.94579052790599
- POINT 1387 -6.129436418173878 30.02016647395368
- POINT 1388 -5.628078240364906 30.9810953670373
- POINT 1389 -4.619526005517029 29.126251824622
- POINT 1390 -5.633089444300436 29.09870209417247
+ POINT 5 -5.494590158705203 0.769568933904214
+ POINT 6 -4.555054354703293 0.5256199116454576
+ POINT 7 -3.62510614201392 0.3312784996295808
+ POINT 8 -2.686413338358856 0.1812416288131739
+ POINT 9 -1.753728402849995 0.077037451999329
+ POINT 10 -0.851420720971519 0.01813114404021269
+ POINT 11 0.8514160122311216 0.01813095400480157
+ POINT 12 1.753719324465416 0.07703666291032139
+ POINT 13 2.686401050802698 0.181239963250821
+ POINT 14 3.625091324513498 0.3312757686489166
+ POINT 15 4.555037637659274 0.5256160015391538
+ POINT 16 5.494572548479121 0.7695639022537971
+ POINT 17 -8.14748720023632 1.73477478041978
+ POINT 18 -7.204326158760607 1.342623855477397
+ POINT 19 -6.323306730319925 1.025917887963812
+ POINT 20 -5.012043637681486 1.487026562234344
+ POINT 21 -4.001504680231534 1.348769869720156
+ POINT 22 -3.020446348008669 1.193123454693629
+ POINT 23 -2.033096162687354 1.074468404199018
+ POINT 24 -1.029250259109854 0.9952937048620419
+ POINT 25 -4.743693576426955e-06 0.9550846747893821
+ POINT 26 1.029241591782402 0.9952938914888843
+ POINT 27 2.033087778001799 1.074468514560464
+ POINT 28 3.020437785114206 1.193122951441658
+ POINT 29 4.001495610537607 1.348768371554737
+ POINT 30 5.012033480242295 1.487023534523747
+ POINT 31 6.323291483458299 1.025912806798219
+ POINT 32 7.20431240676467 1.342618545311957
+ POINT 33 8.147472348609107 1.734768155628285
+ POINT 34 -9.874839229995656 2.607830779866931
+ POINT 35 -8.967401898964656 2.123039878590955
+ POINT 36 -7.43893966884391 2.316523461127632
+ POINT 37 -6.505937339794322 2.123067897852342
+ POINT 38 -5.617471023440036 2.128732087831175
+ POINT 39 -4.504938941140685 2.292372023343256
+ POINT 40 -3.474895393652287 2.188889537474249
+ POINT 41 -2.477789827740728 2.069417744488129
+ POINT 42 -1.486533939627704 1.978390111577929
+ POINT 43 -0.4945351927920381 1.920788208193323
+ POINT 44 0.494530028654747 1.920788180673721
+ POINT 45 1.48652903784696 1.978390363793194
+ POINT 46 2.477785286357576 2.069417875067633
+ POINT 47 3.474891314117997 2.188889007881329
+ POINT 48 4.504935616060729 2.292369967247126
+ POINT 49 5.617468616717059 2.128722558769742
+ POINT 50 6.505934206344425 2.123064219351945
+ POINT 51 7.438934955645484 2.316522386860346
+ POINT 52 8.967386714216421 2.123032261658711
+ POINT 53 9.874824441340188 2.607822383246229
+ POINT 54 -11.51772618471706 3.649404184131703
+ POINT 55 -10.65697220336667 3.075788247109521
+ POINT 56 -9.073837487095867 3.098945367911463
+ POINT 57 -8.146481814508759 2.93463496665957
+ POINT 58 -7.049600453276345 3.146247627644996
+ POINT 59 -6.068284496299216 3.100104651100007
+ POINT 60 -5.072988891537222 3.091827459666651
+ POINT 61 -3.993877927928949 3.131132225510109
+ POINT 62 -2.967955349130637 3.051608081751008
+ POINT 63 -1.969358890547338 2.964205195218535
+ POINT 64 -0.9811566490131486 2.90071553814206
+ POINT 65 -1.32163243384692e-06 2.877135624667564
+ POINT 66 0.9811540073798326 2.900715668778548
+ POINT 67 1.969356448130425 2.964205359405151
+ POINT 68 2.967953292680015 3.051607771536507
+ POINT 69 3.993876536191101 3.131130560601491
+ POINT 70 5.07298836313739 3.09182201424316
+ POINT 71 6.06828189330052 3.10009883043144
+ POINT 72 7.049596028910742 3.146246238867447
+ POINT 73 8.146475803362755 2.934633378296194
+ POINT 74 9.073829870567886 3.098941319319342
+ POINT 75 10.65695825761416 3.075779465645408
+ POINT 76 11.51771371828971 3.649395402508161
+ POINT 77 -12.25874124373426 4.197365310835768
+ POINT 78 -10.64940593588828 4.039054822049597
+ POINT 79 -9.738991551137142 3.788828249782045
+ POINT 80 -8.645496432574655 3.944646023442154
+ POINT 81 -7.660083249538626 3.927642758322452
+ POINT 82 -6.59386271210862 4.037468940686985
+ POINT 83 -5.568600019856155 4.018665115993096
+ POINT 84 -4.542276038525629 3.999836078704063
+ POINT 85 -3.491369657240189 3.994992924822852
+ POINT 86 -2.474009349355216 3.935011777572696
+ POINT 87 -1.477288819485819 3.874958764735967
+ POINT 88 -0.4912058119350093 3.84024391890156
+ POINT 89 0.4912045861343114 3.840244004832297
+ POINT 90 1.477287661196852 3.874958892229309
+ POINT 91 2.474008420090503 3.935011605232642
+ POINT 92 3.491369140152303 3.994991746916046
+ POINT 93 4.542275958327673 3.999832734657181
+ POINT 94 5.568598961382722 4.018661009084565
+ POINT 95 6.593859756639968 4.037466906689763
+ POINT 96 7.660079741658018 3.927642484330992
+ POINT 97 8.64549214777098 3.944645135772696
+ POINT 98 9.738984400934594 3.788824210856252
+ POINT 99 10.64939834126311 4.039049114973768
+ POINT 100 12.25873013918693 4.197356696596919
+ POINT 101 -13.06808399305144 4.859815696281542
+ POINT 102 -12.14172415206427 5.120456490850303
+ POINT 103 -11.26850058845588 4.78253504757261
+ POINT 104 -10.17404214944296 4.845047406793981
+ POINT 105 -9.208059651222554 4.766866668801151
+ POINT 106 -8.164339019401956 4.857476344060355
+ POINT 107 -7.149967162775942 4.875867152053067
+ POINT 108 -6.093958019589567 4.926093683238227
+ POINT 109 -5.058077545048842 4.913790131101954
+ POINT 110 -4.028039828119854 4.894648028971938
+ POINT 111 -2.995365612046738 4.876648223313875
+ POINT 112 -1.984673486096534 4.833837916766388
+ POINT 113 -0.9889438049108867 4.797769562520688
+ POINT 114 -2.362747113168751e-07 4.784386125986646
+ POINT 115 0.9889433725237518 4.797769655939185
+ POINT 116 1.984673180431574 4.833837841092998
+ POINT 117 2.995365534870316 4.876647488912344
+ POINT 118 4.028039920473764 4.894645987409467
+ POINT 119 5.05807704187145 4.913787423329794
+ POINT 120 6.09395626231969 4.926092028666856
+ POINT 121 7.149964792987238 4.875866809291987
+ POINT 122 8.164336682555421 4.857476643496101
+ POINT 123 9.208056699547432 4.766865857979807
+ POINT 124 10.17403815454237 4.845044126893953
+ POINT 125 11.26849448251217 4.782529900161253
+ POINT 126 12.14171794981946 5.120450644819872
+ POINT 127 13.06807455950774 4.859807553827244
+ POINT 128 -13.79621135610305 5.520201927590952
+ POINT 129 -12.80117439670994 5.856589459482491
+ POINT 130 -11.67938537881067 5.871675730352508
+ POINT 131 -10.7214199084595 5.705740655756915
+ POINT 132 -9.682832193302595 5.735754340027762
+ POINT 133 -8.688206795148123 5.723107658281122
+ POINT 134 -7.655630079002389 5.775975918064022
+ POINT 135 -6.627659763072258 5.792669306732381
+ POINT 136 -5.582314228446745 5.814411012773447
+ POINT 137 -4.548885425945512 5.805126115268295
+ POINT 138 -3.522722077771634 5.788884500830754
+ POINT 139 -2.501187311366817 5.770380462326169
+ POINT 140 -1.494394371192296 5.742942846788264
+ POINT 141 -0.4971264884626344 5.724801584483487
+ POINT 142 0.4971264114179549 5.724801616093884
+ POINT 143 1.494394375253193 5.742942820679326
+ POINT 144 2.501187449167741 5.770380046330405
+ POINT 145 3.522722282985142 5.788883304381674
+ POINT 146 4.548885254065114 5.80512440450948
+ POINT 147 5.582313237121974 5.814409778421799
+ POINT 148 6.627658274246912 5.792668907910858
+ POINT 149 7.655628672903336 5.775976131426517
+ POINT 150 8.688205683983837 5.723107897941759
+ POINT 151 9.682831053695072 5.735753339275631
+ POINT 152 10.72141774219851 5.705737949417665
+ POINT 153 11.67938249802985 5.871671763668828
+ POINT 154 12.80116985277255 5.856584114327579
+ POINT 155 13.79620361018442 5.52019455095268
+ POINT 156 -15.07551414433484 6.857364294633759
+ POINT 157 -14.47383155813855 6.197529205731446
+ POINT 158 -13.45485475009742 6.553837837714978
+ POINT 159 -12.31042185688016 6.683440243020864
+ POINT 160 -11.21350161895065 6.69819718995942
+ POINT 161 -10.20833342071787 6.628047644175917
+ POINT 162 -9.180105769142591 6.64834742192738
+ POINT 163 -8.167115514052471 6.65576641169878
+ POINT 164 -7.135706515094646 6.685162961807312
+ POINT 165 -6.105345078296335 6.696209760357505
+ POINT 166 -5.069576645378604 6.705314119570696
+ POINT 167 -4.041800732917723 6.698207423904568
+ POINT 168 -3.020761532842517 6.685782557740071
+ POINT 169 -2.005808074374162 6.671737301319939
+ POINT 170 -1.000288933333046 6.656398725132026
+ POINT 171 4.397573777348285e-08 6.650034053590167
+ POINT 172 1.000289057350326 6.656398701633271
+ POINT 173 2.005808282761941 6.671737074424545
+ POINT 174 3.020761779503171 6.685781881995771
+ POINT 175 4.041800760087482 6.698206389869481
+ POINT 176 5.069576162857779 6.705313264812579
+ POINT 177 6.10534421344702 6.69620937563182
+ POINT 178 7.135705654446768 6.685162970448084
+ POINT 179 8.167114943754402 6.655766632853415
+ POINT 180 9.180105544149159 6.648347310133159
+ POINT 181 10.20833306114628 6.628046599517105
+ POINT 182 11.21350079915651 6.698194920239427
+ POINT 183 12.31041989729133 6.683437342390677
+ POINT 184 13.45485102688512 6.553833543240082
+ POINT 185 14.47382501191121 6.197522339217816
+ POINT 186 15.07550853647004 6.85735785101832
+ POINT 187 -15.74070185460795 7.661835423193954
+ POINT 188 -14.74687538651157 7.702960989661571
+ POINT 189 -13.93188920478376 7.345232089754496
+ POINT 190 -12.86506131544698 7.471088086950771
+ POINT 191 -11.77211701495691 7.547677194388092
+ POINT 192 -10.70587046671523 7.565284924165475
+ POINT 193 -9.687660424643854 7.54461386330666
+ POINT 194 -8.662563218479574 7.560951116274378
+ POINT 195 -7.642034647994548 7.571360794157137
+ POINT 196 -6.613518858753616 7.588082984279957
+ POINT 197 -5.586073186048593 7.595112879441636
+ POINT 198 -4.558140690092682 7.598809924577656
+ POINT 199 -3.535939593111036 7.59366155618144
+ POINT 200 -2.519295513626756 7.585207729094968
+ POINT 201 -1.507828110570193 7.576464832977407
+ POINT 202 -0.5019148548267611 7.569504441473947
+ POINT 203 0.5019150140751154 7.569504419051911
+ POINT 204 1.507828313373964 7.576464701318211
+ POINT 205 2.51929574421762 7.58520735259712
+ POINT 206 3.535939709005314 7.593660949468794
+ POINT 207 4.558140510818687 7.598809363042038
+ POINT 208 5.58607274341326 7.595112562629756
+ POINT 209 6.613518369190103 7.588082887213245
+ POINT 210 7.642034309561478 7.571360854887308
+ POINT 211 8.662563167404116 7.560951138691602
+ POINT 212 9.687660573872202 7.54461354186692
+ POINT 213 10.70587058429081 7.565283863779716
+ POINT 214 11.77211666522259 7.547675581264719
+ POINT 215 12.8650605916635 7.471085619230291
+ POINT 216 13.93188849368163 7.345227696048455
+ POINT 217 14.74687398655421 7.702958601368711
+ POINT 218 15.74069772046266 7.661830148963676
+ POINT 219 -16.34008243157374 8.467363435476578
+ POINT 220 -15.28567534644808 8.552905620836993
+ POINT 221 -14.22089501094071 8.468579625245626
+ POINT 222 -13.29774920244363 8.333212052076258
+ POINT 223 -12.27300453476784 8.396001904827241
+ POINT 224 -11.224449672806 8.44025834990769
+ POINT 225 -10.1842020715159 8.457472361197105
+ POINT 226 -9.163914101356678 8.456332255719779
+ POINT 227 -8.14059852678059 8.468750713098206
+ POINT 228 -7.118690004259524 8.477698841262107
+ POINT 229 -6.093911741800466 8.487745637900247
+ POINT 230 -5.070537359203934 8.492297494254309
+ POINT 231 -4.048497389531928 8.493845716618845
+ POINT 232 -3.030710235690668 8.490541970764172
+ POINT 233 -2.017113078017005 8.485534154569866
+ POINT 234 -1.007152862458606 8.481122761690685
+ POINT 235 8.070285670638833e-08 8.479054147646179
+ POINT 236 1.007153037203349 8.481122683637645
+ POINT 237 2.017113267583667 8.485533940823723
+ POINT 238 3.030710370157321 8.490541618084078
+ POINT 239 4.048497363984429 8.493845358028667
+ POINT 240 5.070537168629906 8.49229725406053
+ POINT 241 6.093911495339211 8.487745514844656
+ POINT 242 7.11868981343622 8.477698810261961
+ POINT 243 8.140598491031323 8.468750699179775
+ POINT 244 9.163914246108916 8.456332131143173
+ POINT 245 10.18420232498191 8.457471896486332
+ POINT 246 11.22444978036375 8.440257512134613
+ POINT 247 12.27300442131762 8.396000443618357
+ POINT 248 13.29774885774807 8.333209357606099
+ POINT 249 14.22089386884885 8.468576880391957
+ POINT 250 15.28567398016187 8.552903295969026
+ POINT 251 16.34007933974851 8.46735905480778
+ POINT 252 -16.89879506132182 9.30277019619324
+ POINT 253 -15.84083890009481 9.368103783320413
+ POINT 254 -14.75936630448394 9.376434710940254
+ POINT 255 -13.72667446491556 9.338668036765469
+ POINT 256 -12.7458829592818 9.286293637722791
+ POINT 257 -11.72514144039831 9.317880286978371
+ POINT 258 -10.69307226518711 9.344364735918155
+ POINT 259 -9.663652464211705 9.358107425253532
+ POINT 260 -8.642457994516798 9.362656816289235
+ POINT 261 -7.620361904257799 9.371754129812164
+ POINT 262 -6.599324604837983 9.378698501517102
+ POINT 263 -5.577936443480438 9.385133261260403
+ POINT 264 -4.558210845970175 9.388247898190615
+ POINT 265 -3.540361900824579 9.389121481751587
+ POINT 266 -2.52566238019628 9.387374370414491
+ POINT 267 -1.513887157671833 9.384925984750414
+ POINT 268 -0.504297186178584 9.383298051709803
+ POINT 269 0.5042973320602566 9.383298015668299
+ POINT 270 1.51388730668141 9.384925862954564
+ POINT 271 2.525662501619651 9.387374163645836
+ POINT 272 3.540361939509808 9.389121254735599
+ POINT 273 4.558210789027288 9.388247723190803
+ POINT 274 5.577936342341931 9.385133146588913
+ POINT 275 6.599324518449944 9.378698438465905
+ POINT 276 7.62036189183867 9.371754085979447
+ POINT 277 8.642458092973191 9.362656736309578
+ POINT 278 9.663652671231812 9.358107201585797
+ POINT 279 10.6930724783395 9.344364317591429
+ POINT 280 11.72514158518201 9.31787949717938
+ POINT 281 12.74588295478644 9.286292109076781
+ POINT 282 13.72667400654556 9.338666111495892
+ POINT 283 14.75936532452434 9.376432764986804
+ POINT 284 15.84083766707554 9.368101537096484
+ POINT 285 16.8987927411374 9.302766530916411
+ POINT 286 -17.41541814741128 10.16622093237684
+ POINT 287 -16.36597467943507 10.20674001010058
+ POINT 288 -15.30570510771474 10.23673169382489
+ POINT 289 -14.25334124093768 10.24705991000825
+ POINT 290 -13.22518371810642 10.23169262743967
+ POINT 291 -12.21928286812764 10.21375315134102
+ POINT 292 -11.19741423399891 10.23174369517853
+ POINT 293 -10.17050417537597 10.2482576748095
+ POINT 294 -9.145044199699443 10.25842856407609
+ POINT 295 -8.123750354518931 10.26388718261748
+ POINT 296 -7.10298550942124 10.2706284602633
+ POINT 297 -6.083575083515306 10.2759394046698
+ POINT 298 -5.065015567249327 10.28034882788564
+ POINT 299 -4.048200146803218 10.28265723277545
+ POINT 300 -3.033238075903394 10.28342728339184
+ POINT 301 -2.02054894726801 10.28280355683485
+ POINT 302 -1.009738819288446 10.28194446006377
+ POINT 303 5.919699467074602e-08 10.28162989140187
+ POINT 304 1.009738935910972 10.2819443965436
+ POINT 305 2.020549047902884 10.28280343604998
+ POINT 306 3.033238133655776 10.28342713958931
+ POINT 307 4.048200151873941 10.2826571076832
+ POINT 308 5.065015543299326 10.28034873191634
+ POINT 309 6.083575061485952 10.27593933706552
+ POINT 310 7.102985523625926 10.27062840654225
+ POINT 311 8.123750433256964 10.26388711645833
+ POINT 312 9.14504435731642 10.25842843597803
+ POINT 313 10.17050438210141 10.24825745265531
+ POINT 314 11.19741445812459 10.23174327923734
+ POINT 315 12.21928304966143 10.21375232985006
+ POINT 316 13.22518366386299 10.23169143671009
+ POINT 317 14.25334082737309 10.24705856617686
+ POINT 318 15.30570438725816 10.2367300912412
+ POINT 319 16.36597364727631 10.20673788845324
+ POINT 320 17.41541641117195 10.16621785753401
+ POINT 321 -17.88625803484845 11.05115797933476
+ POINT 322 -16.85120422054986 11.06936232054822
+ POINT 323 -15.81832377296524 11.10623835603135
+ POINT 324 -14.77936586062894 11.12671433185663
+ POINT 325 -13.74209116444094 11.13500853711859
+ POINT 326 -12.71605470869173 11.13080637203836
+ POINT 327 -11.69940028612606 11.12659743667363
+ POINT 328 -10.67625961071982 11.13773567839252
+ POINT 329 -9.651329983156939 11.14840741093704
+ POINT 330 -8.627923790323184 11.15586543586765
+ POINT 331 -7.607383209356573 11.16085887302131
+ POINT 332 -6.588183874293925 11.16597912139563
+ POINT 333 -5.570592864708988 11.17006260278196
+ POINT 334 -4.55434815440509 11.17325037576849
+ POINT 335 -3.539757168979546 11.17505634294026
+ POINT 336 -2.526758778403693 11.17584237662288
+ POINT 337 -1.515331628371982 11.17586700307951
+ POINT 338 -0.5049906539082446 11.17574820189833
+ POINT 339 0.5049907444555864 11.17574817768458
+ POINT 340 1.5153317094028 11.17586693621212
+ POINT 341 2.526758836407911 11.17584228689916
+ POINT 342 3.539757198178682 11.17505625511356
+ POINT 343 4.554348166128215 11.17325029975345
+ POINT 344 5.570592875755479 11.17006254133163
+ POINT 345 6.588183905050538 11.16597906858908
+ POINT 346 7.6073832793965 11.16085881572795
+ POINT 347 8.62792391457109 11.15586535027681
+ POINT 348 9.651330158548348 11.14840727911036
+ POINT 349 10.67625983071012 11.13773544977034
+ POINT 350 11.69940052274761 11.12659700092283
+ POINT 351 12.71605485286965 11.13080569362486
+ POINT 352 13.74209110304109 11.13500768317192
+ POINT 353 14.7793655795263 11.12671327386668
+ POINT 354 15.81832324916032 11.10623695423282
+ POINT 355 16.85120337097398 11.06936033777372
+ POINT 356 17.88625674904034 11.05115540936097
+ POINT 357 -18.30877322305379 11.9508495437846
+ POINT 358 -17.29354589755249 11.94920666314173
+ POINT 359 -16.29455300391288 11.99583596159888
+ POINT 360 -15.27946629704285 12.01498717612042
+ POINT 361 -14.25474205301729 12.02594878618006
+ POINT 362 -13.22681809875847 12.03063506970706
+ POINT 363 -12.20220308495755 12.03009391767082
+ POINT 364 -11.18106431040382 12.03032682581759
+ POINT 365 -10.15753313450907 12.03745704775757
+ POINT 366 -9.134027318052762 12.04457505277963
+ POINT 367 -8.11232875700758 12.05009863957686
+ POINT 368 -7.093073740706956 12.05428798841279
+ POINT 369 -6.075537130934441 12.0582085939917
+ POINT 370 -5.05970021646697 12.06132294542906
+ POINT 371 -4.045326070247903 12.06366127251691
+ POINT 372 -3.032406410591747 12.06506238376489
+ POINT 373 -2.020741740391878 12.06579002116175
+ POINT 374 -1.010099115438543 12.06604601638048
+ POINT 375 3.404314703400746e-08 12.06609631184198
+ POINT 376 1.010099179329847 12.06604598427999
+ POINT 377 2.02074179197248 12.06578996792154
+ POINT 378 3.032406446294575 12.06506232425981
+ POINT 379 4.045326095644757 12.06366121500955
+ POINT 380 5.059700241198946 12.06132289396818
+ POINT 381 6.075537167668678 12.05820854699794
+ POINT 382 7.093073802862654 12.05428793944949
+ POINT 383 8.112328856771683 12.05009857666489
+ POINT 384 9.134027460561303 12.04457496575233
+ POINT 385 10.15753332314846 12.03745691162176
+ POINT 386 11.18106453668301 12.03032658694119
+ POINT 387 12.20220329614919 12.03009354250335
+ POINT 388 13.22681822001311 12.03063456472911
+ POINT 389 14.25474204169832 12.02594812574046
+ POINT 390 15.27946612080948 12.01498628420012
+ POINT 391 16.29455261172639 11.99583469575495
+ POINT 392 17.29354519100736 11.94920477604054
+ POINT 393 18.30877230037898 11.95084744504889
+ POINT 394 -18.68349051939805 12.86367167154098
+ POINT 395 -17.69955044194535 12.83783554399056
+ POINT 396 -16.74680072099509 12.90757935532751
+ POINT 397 -15.76140667037218 12.9221400730053
+ POINT 398 -14.75567094155959 12.92630257350449
+ POINT 399 -13.73682065989795 12.92743559025777
+ POINT 400 -12.71214391446095 12.92742694362712
+ POINT 401 -11.68737838806575 12.92678450620815
+ POINT 402 -10.66414648577376 12.92775785019992
+ POINT 403 -9.640754341022918 12.93234383939904
+ POINT 404 -8.618552582613498 12.93719911566106
+ POINT 405 -7.598448596921033 12.94129728244754
+ POINT 406 -6.580657830892998 12.94461961735053
+ POINT 407 -5.564721623493883 12.94754856845896
+ POINT 408 -4.550449594156615 12.94982267896038
+ POINT 409 -3.537564068386769 12.95146460765515
+ POINT 410 -2.525883376596742 12.95246017188719
+ POINT 411 -1.515118380882561 12.95300971020892
+ POINT 412 -0.5049676356087293 12.95322346487957
+ POINT 413 0.5049676844956841 12.95322345397402
+ POINT 414 1.515118423968893 12.95300968152577
+ POINT 415 2.525883411194239 12.95246013386642
+ POINT 416 3.537564097060069 12.95146456643065
+ POINT 417 4.550449622545449 12.94982263848316
+ POINT 418 5.56472165978088 12.9475485292704
+ POINT 419 6.580657884493699 12.94461957666239
+ POINT 420 7.598448677339204 12.9412972341219
+ POINT 421 8.618552696870632 12.93719905370227
+ POINT 422 9.640754495709061 12.93234375105686
+ POINT 423 10.66414668192525 12.927757709954
+ POINT 424 11.6873786049825 12.9267842939533
+ POINT 425 12.7121441131643 12.92742665289655
+ POINT 426 13.73682080368874 12.92743519895239
+ POINT 427 14.75567099253752 12.92630202967495
+ POINT 428 15.76140658474425 12.92213928078801
+ POINT 429 16.74680044196923 12.90757816273018
+ POINT 430 17.69954984610879 12.8378336756992
+ POINT 431 18.6834899076131 12.8636700698384
+ POINT 432 -19.02238328735229 13.82351766220752
+ POINT 433 -18.13955550450578 13.72808332961303
+ POINT 434 -17.24747413019177 13.83334150399983
+ POINT 435 -16.27671854460964 13.8444824687452
+ POINT 436 -15.27456079944098 13.83853174040222
+ POINT 437 -14.25616310884793 13.83020331307981
+ POINT 438 -13.22989658164751 13.82408308329856
+ POINT 439 -12.20135161049109 13.82071634572721
+ POINT 440 -11.17413867021331 13.81944883534201
+ POINT 441 -10.14926702413137 13.8202526514499
+ POINT 442 -9.126057836010542 13.82327629540207
+ POINT 443 -8.104996732868651 13.82665424545745
+ POINT 444 -7.086340525468896 13.82965017200467
+ POINT 445 -6.069982091125469 13.83211598100588
+ POINT 446 -5.055493375580907 13.83414727908586
+ POINT 447 -4.042551432867163 13.8356365177082
+ POINT 448 -3.030821469833524 13.83664074843842
+ POINT 449 -2.020032225634883 13.83720573920392
+ POINT 450 -1.009850751894021 13.83750425714042
+ POINT 451 1.810922449496655e-08 13.83759275454394
+ POINT 452 1.009850786298219 13.83750424406298
+ POINT 453 2.020032256013255 13.83720571680718
+ POINT 454 3.030821497136831 13.83664072069242
+ POINT 455 4.042551460337563 13.83563648775698
+ POINT 456 5.055493408535647 13.83414724818297
+ POINT 457 6.069982136283464 13.83211594828056
+ POINT 458 7.086340590263971 13.82965013439014
+ POINT 459 8.10499682427386 13.82665419928439
+ POINT 460 9.126057961450252 13.82327623361172
+ POINT 461 10.14926718918715 13.82025256130822
+ POINT 462 11.17413887129433 13.81944870576308
+ POINT 463 12.20135183449013 13.82071617071633
+ POINT 464 13.2298968126255 13.82408284872117
+ POINT 465 14.25616332583766 13.83020298488662
+ POINT 466 15.27456097333428 13.83853124901386
+ POINT 467 16.27671863417596 13.84448169655714
+ POINT 468 17.24747406497697 13.8333402848443
+ POINT 469 18.13955510497579 13.72808140596411
+ POINT 470 19.02238297028846 13.82351668571184
+ POINT 471 -19.27564676568709 14.66619818849089
+ POINT 472 -18.09766041208614 14.63187219093411
+ POINT 473 -16.95614347083327 14.72460549592841
+ POINT 474 -15.86921119998628 14.73780837074977
+ POINT 475 -14.81075412562909 14.72985007775523
+ POINT 476 -13.76486885106658 14.71947853532306
+ POINT 477 -12.72555276796724 14.71230313005461
+ POINT 478 -11.69126114605113 14.70886227379599
+ POINT 479 -10.66153612521807 14.70791746350395
+ POINT 480 -9.635755859587105 14.70873065251559
+ POINT 481 -8.613020109485847 14.71088365791704
+ POINT 482 -7.593121578733488 14.71326619553437
+ POINT 483 -6.575848554049146 14.71535684285003
+ POINT 484 -5.560852653819958 14.71698338764731
+ POINT 485 -4.547650629124863 14.71814844465915
+ POINT 486 -3.535804015609155 14.71887158153257
+ POINT 487 -2.524929077240439 14.71927025322356
+ POINT 488 -1.51473317861481 14.71940316393901
+ POINT 489 -0.5048698269273962 14.71947361417091
+ POINT 490 0.5048698535429671 14.71947360989954
+ POINT 491 1.514733203827875 14.71940315211682
+ POINT 492 2.524929101236818 14.7192702358374
+ POINT 493 3.535804040216305 14.718871560705
+ POINT 494 4.547650657766261 14.71814842161689
+ POINT 495 5.560852691237506 14.71698336234047
+ POINT 496 6.575848605965658 14.71535681381056
+ POINT 497 7.593121651312162 14.71326616047178
+ POINT 498 8.613020209763325 14.71088361248173
+ POINT 499 9.635755994552092 14.70873058948735
+ POINT 500 10.66153629879202 14.70791737591909
+ POINT 501 11.6912613588511 14.70886215652677
+ POINT 502 12.72555302053373 14.71230297372473
+ POINT 503 13.76486914422805 14.71947831783373
+ POINT 504 14.81075446037261 14.72984974915426
+ POINT 505 15.86921157538354 14.73780783221082
+ POINT 506 16.95614383875429 14.72460459306813
+ POINT 507 18.09766051890814 14.63187085031223
+ POINT 508 19.27564662677329 14.66619768647507
+ POINT 509 -19.50127447943532 15.56149871265921
+ POINT 510 -18.49586950943177 15.47325546362292
+ POINT 511 -17.47213216627488 15.54874531288023
+ POINT 512 -16.40580641559685 15.60593665709938
+ POINT 513 -15.34601737544395 15.61677435076866
+ POINT 514 -14.2947172695349 15.61000643038673
+ POINT 515 -13.24977965914606 15.60136804308813
+ POINT 516 -12.21061092357855 15.59603464741921
+ POINT 517 -11.1766690651603 15.59374881308825
+ POINT 518 -10.14751831522785 15.59340802755161
+ POINT 519 -9.122560414444946 15.59426088206107
+ POINT 520 -8.101062346441838 15.595824538575
+ POINT 521 -7.082603470679119 15.59741857217645
+ POINT 522 -6.066776863361147 15.59867868119486
+ POINT 523 -5.053111971733885 15.59945020989904
+ POINT 524 -4.041063833280758 15.59972861882586
+ POINT 525 -3.030084669706362 15.599680671072
+ POINT 526 -2.019763038193452 15.59951607389083
+ POINT 527 -1.009857003554932 15.59925577449675
+ POINT 528 1.024755921091858e-08 15.599193476494
+ POINT 529 1.009857023845601 15.59925576915614
+ POINT 530 2.019763058357887 15.59951606388146
+ POINT 531 3.030084690801801 15.59968065751039
+ POINT 532 4.041063857507812 15.59972860263055
+ POINT 533 5.053112002382292 15.59945019127528
+ POINT 534 6.066776904670986 15.59867865945828
+ POINT 535 7.082603527619012 15.59741854590029
+ POINT 536 8.101062424891389 15.59582450492322
+ POINT 537 9.122560520746296 15.59426083642217
+ POINT 538 10.14751845483047 15.59340796487829
+ POINT 539 11.17666924233262 15.59374872859052
+ POINT 540 12.21061114276325 15.59603453344294
+ POINT 541 13.24977992549936 15.60136788386504
+ POINT 542 14.29471758842084 15.61000619229367
+ POINT 543 15.34601774658832 15.61677396966515
+ POINT 544 16.40580680537335 15.60593604543914
+ POINT 545 17.47213241791181 15.54874447015032
+ POINT 546 18.4958693388047 15.47325456203676
+ POINT 547 19.50127443887344 15.56149853444409
+ POINT 548 -19.69120777770086 16.49909493767488
+ POINT 549 -18.82453814407551 16.39668162048823
+ POINT 550 -17.91856863118067 16.45118061991079
+ POINT 551 -16.92410838554749 16.48124398607248
+ POINT 552 -15.88164018773895 16.50096422915104
+ POINT 553 -14.82887068531301 16.49821045669536
+ POINT 554 -13.77807911254733 16.48886297653494
+ POINT 555 -12.7333784111039 16.48193539493605
+ POINT 556 -11.69485118291488 16.47821714148055
+ POINT 557 -10.66193355150254 16.47685701531462
+ POINT 558 -9.634017284309458 16.47687882871921
+ POINT 559 -8.610421523166179 16.47761153274202
+ POINT 560 -7.59043875501705 16.47862741976457
+ POINT 561 -6.573526910504127 16.47948404375377
+ POINT 562 -5.55916420169899 16.47991242318579
+ POINT 563 -4.546789160014427 16.4797742368711
+ POINT 564 -3.535766395032657 16.47908711802946
+ POINT 565 -2.525390013898583 16.4782315399178
+ POINT 566 -1.515222446789751 16.47755978237018
+ POINT 567 -0.505160915759866 16.47693907152057
+ POINT 568 0.5051609320854129 16.4769390697559
+ POINT 569 1.515222463409069 16.47755977720512
+ POINT 570 2.525390031591372 16.47823153173884
+ POINT 571 3.535766415254718 16.47908710738646
+ POINT 572 4.546789185065328 16.47977422398127
+ POINT 573 5.559164234676066 16.47991240775378
+ POINT 574 6.573526955235264 16.47948402492305
+ POINT 575 7.590438816148497 16.47862739571796
+ POINT 576 8.610421605901228 16.47761150046795
+ POINT 577 9.634017393679581 16.47687878455547
+ POINT 578 10.66193369197147 16.47685695525197
+ POINT 579 11.6948513586376 16.47821705943312
+ POINT 580 12.73337862581002 16.48193527915152
+ POINT 581 13.77807936895742 16.48886280392126
+ POINT 582 14.82887098061904 16.49821018706623
+ POINT 583 15.88164049446434 16.50096381647671
+ POINT 584 16.92410861282034 16.48124342897973
+ POINT 585 17.91856863399398 16.45118006156937
+ POINT 586 18.82453798513463 16.39668072056363
+ POINT 587 19.69120781864528 16.4990951679711
+ POINT 588 -19.82328465846074 17.34719293018973
+ POINT 589 -18.68356651268673 17.31043580953861
+ POINT 590 -17.56673240514328 17.36123106358058
+ POINT 591 -16.47414590791442 17.37598986974012
+ POINT 592 -15.39064716739153 17.37819173206542
+ POINT 593 -14.32006602394481 17.37102412556857
+ POINT 594 -13.2634493215721 17.36491520744474
+ POINT 595 -12.21741851257929 17.36094404730209
+ POINT 596 -11.17940525689727 17.35901220028596
+ POINT 597 -10.14779283686373 17.35850451428117
+ POINT 598 -9.121467989502685 17.35873940174785
+ POINT 599 -8.09954906046551 17.35924582268215
+ POINT 600 -7.081277449497645 17.35971278396684
+ POINT 601 -6.066028455702323 17.35983944191427
+ POINT 602 -5.053197717776997 17.35940141983762
+ POINT 603 -4.042124698542789 17.35824695931711
+ POINT 604 -3.032009115389205 17.3564023422576
+ POINT 605 -2.021821824817601 17.35459015065573
+ POINT 606 -1.011040264187739 17.35340280443575
+ POINT 607 6.814640345076395e-09 17.35243938843107
+ POINT 608 1.011040278028748 17.35340280223508
+ POINT 609 2.021821839659843 17.35459014619961
+ POINT 610 3.032009132287029 17.35640233585637
+ POINT 611 4.042124719169761 17.35824695109229
+ POINT 612 5.053197744437713 17.35940140968951
+ POINT 613 6.066028491348846 17.35983942938084
+ POINT 614 7.081277497793296 17.35971276796347
+ POINT 615 8.099549125655424 17.35924580133723
+ POINT 616 9.121468076013995 17.3587393726077
+ POINT 617 10.14779294895601 17.35850447445268
+ POINT 618 11.17940539853177 17.3590121455207
+ POINT 619 12.21741868699975 17.36094396965026
+ POINT 620 13.26344953055692 17.36491509096027
+ POINT 621 14.32006626614396 17.37102394370543
+ POINT 622 15.39064742969177 17.37819145776436
+ POINT 623 16.47414614962407 17.37598951033426
+ POINT 624 17.56673257253595 17.36123068035427
+ POINT 625 18.68356665984462 17.31043516903573
+ POINT 626 19.82328469438627 17.3471931986458
+ POINT 627 -19.92361530225037 18.25370297831815
+ POINT 628 -19.07203628626812 18.19876552320404
+ POINT 629 -18.09128424245282 18.22378292531755
+ POINT 630 -17.02794564635327 18.24352791034031
+ POINT 631 -15.94398258752478 18.24421394845224
+ POINT 632 -14.86112859360125 18.24245684590457
+ POINT 633 -13.79465161119509 18.24206223663435
+ POINT 634 -12.74159853322912 18.24073858102732
+ POINT 635 -11.698529613906 18.23959715961889
+ POINT 636 -10.66316644369302 18.23915626546558
+ POINT 637 -9.633977641977911 18.2392237253931
+ POINT 638 -8.609886644138397 18.23947670834334
+ POINT 639 -7.590062391072585 18.23966317253559
+ POINT 640 -6.573799873479021 18.2395756905061
+ POINT 641 -5.560467629070432 18.23897213290731
+ POINT 642 -4.549395686991836 18.2375962202419
+ POINT 643 -3.53974763298982 18.23518325778423
+ POINT 644 -2.530321009293305 18.23165172954483
+ POINT 645 -1.519299961772805 18.22830303022641
+ POINT 646 -0.5061568241133134 18.22651105869159
+ POINT 647 0.5061568361746052 18.22651105818931
+ POINT 648 1.519299974627625 18.2283030281956
+ POINT 649 2.530321023719614 18.23165172623696
+ POINT 650 3.539747650302188 18.23518325320082
+ POINT 651 4.549395708977971 18.23759621436859
+ POINT 652 5.560467658068336 18.23897212554887
+ POINT 653 6.573799912439206 18.23957568110988
+ POINT 654 7.590062443504756 18.23966316006795
+ POINT 655 8.609886713904036 18.23947669135741
+ POINT 656 9.633977733038876 18.23922370211182
+ POINT 657 10.66316655986387 18.23915623336316
+ POINT 658 11.69852975826159 18.23959711417069
+ POINT 659 12.74159870680618 18.24073851295247
+ POINT 660 13.79465181041776 18.24206212883075
+ POINT 661 14.86112880502805 18.24245668253721
+ POINT 662 15.94398277539668 18.24421374106404
+ POINT 663 17.02794575643996 18.24352769585881
+ POINT 664 18.09128426867969 18.22378260511285
+ POINT 665 19.07203607838779 18.19876510589028
+ POINT 666 19.92361533574309 18.25370336043873
+ POINT 667 -19.9802449810712 19.11128711446231
+ POINT 668 -18.80619197016033 19.09425379941037
+ POINT 669 -17.66225403113433 19.09510203515607
+ POINT 670 -16.52583190669753 19.09866237624121
+ POINT 671 -15.41432354959155 19.0986301021614
+ POINT 672 -14.33063667844831 19.1105065301146
+ POINT 673 -13.26794614671815 19.11638402180332
+ POINT 674 -12.21904679432654 19.11829199267038
+ POINT 675 -11.17975304147024 19.11894075428319
+ POINT 676 -10.14765766280284 19.11928688527702
+ POINT 677 -9.121321606407902 19.1195239082655
+ POINT 678 -8.099811768765214 19.11961774535636
+ POINT 679 -7.082440474765014 19.11946501955149
+ POINT 680 -6.068617555176951 19.11889174400767
+ POINT 681 -5.057733760576324 19.11759686938207
+ POINT 682 -4.048951495282913 19.11510440717879
+ POINT 683 -3.040860967573059 19.11069978972926
+ POINT 684 -2.031062116367802 19.10382972217813
+ POINT 685 -1.01638199358576 19.09746934675944
+ POINT 686 5.469910147222479e-09 19.09799582548251
+ POINT 687 1.016382005544462 19.09746934612121
+ POINT 688 2.031062129425211 19.10382972109414
+ POINT 689 3.040860982727736 19.11069978795467
+ POINT 690 4.048951514001514 19.1151044047146
+ POINT 691 5.057733784810108 19.11759686619456
+ POINT 692 6.06861758741177 19.11889173991558
+ POINT 693 7.082440518000469 19.11946501414825
+ POINT 694 8.099811826393989 19.11961773801307
+ POINT 695 9.121321682045322 19.11952389818466
+ POINT 696 10.14765776004377 19.11928687136565
+ POINT 697 11.1797531633058 19.11894073468605
+ POINT 698 12.21904694182174 19.11829196363125
+ POINT 699 13.26794631623689 19.11638397571452
+ POINT 700 14.33063685706478 19.11050645765263
+ POINT 701 15.41432371433398 19.09863001492938
+ POINT 702 16.52583203632977 19.09866230844884
+ POINT 703 17.6622541458637 19.09510191838969
+ POINT 704 18.80619204599507 19.09425361367645
+ POINT 705 19.9802449892912 19.11128730390016
+ POINT 706 -19.18788556876717 20.00005139493198
+ POINT 707 -18.23752403849579 19.99984302247159
+ POINT 708 -17.29064226017514 19.99925376166535
+ POINT 709 -16.47440002277868 20.00254940092639
+ POINT 710 -15.69589026095225 19.99922347246529
+ POINT 711 -14.75829776969549 19.99999149402495
+ POINT 712 -13.75224907606844 20.00002238976034
+ POINT 713 -12.72358628344629 20.00001314522074
+ POINT 714 -11.69063170189132 20.00000296247429
+ POINT 715 -10.65968425579931 19.99999907815186
+ POINT 716 -9.632679418332129 19.99999847573628
+ POINT 717 -8.610092788959356 19.9999987802438
+ POINT 718 -7.592007815489902 19.99999919201484
+ POINT 719 -6.578584325048967 19.99999952078446
+ POINT 720 -5.570430449173512 19.99999973968279
+ POINT 721 -4.569141973011657 19.99999986982209
+ POINT 722 -3.578262228261103 19.99999994088966
+ POINT 723 -2.605187956284842 19.99999997690123
+ POINT 724 -1.66466516281073 19.99999999380757
+ POINT 725 -0.7826655107941599 20.0000000016338
+ POINT 726 0.7826655154907771 20.00000000163381
+ POINT 727 1.664665170888243 19.99999999380764
+ POINT 728 2.605187967544461 19.99999997690146
+ POINT 729 3.578262243238 19.99999994089031
+ POINT 730 4.569141992985899 19.9999998698238
+ POINT 731 5.570430476094784 19.99999973968696
+ POINT 732 6.578584361468833 19.999999520794
+ POINT 733 7.592007864442903 19.99999919203552
+ POINT 734 8.610092853801689 19.99999878028637
+ POINT 735 9.632679502529101 19.99999847581969
+ POINT 736 10.6596843624034 19.99999907830713
+ POINT 737 11.69063183223476 20.00000296274612
+ POINT 738 12.72358643409481 20.00001314569264
+ POINT 739 13.75224923254777 20.00002239071156
+ POINT 740 14.75829790050601 19.99999149614534
+ POINT 741 15.69589033419841 19.99922348070548
+ POINT 742 16.47440003681302 20.0025493901109
+ POINT 743 17.29064231060998 19.99925377353345
+ POINT 744 18.23752405131307 19.99984302941273
+ POINT 745 19.18788543351031 20.00005138833587
+ POINT 746 -19.98023779283576 20.88887437456774
+ POINT 747 -18.80580843557483 20.90547874653299
+ POINT 748 -17.66161201461446 20.90415650737443
+ POINT 749 -16.52591330812703 20.90273438014319
+ POINT 750 -15.41490978144221 20.90067949213849
+ POINT 751 -14.33087263381866 20.8894508385836
+ POINT 752 -13.26804240623713 20.88362475434566
+ POINT 753 -12.21908307283113 20.88171102490173
+ POINT 754 -11.1797653194024 20.88105596204579
+ POINT 755 -10.14766089752007 20.88070896143329
+ POINT 756 -9.121321787680523 20.8804729634606
+ POINT 757 -8.099811171529218 20.88038023214702
+ POINT 758 -7.082439863957721 20.88053378104001
+ POINT 759 -6.068617118328885 20.88110759648338
+ POINT 760 -5.057733492537352 20.88240279408681
+ POINT 761 -4.048951345696993 20.88489543523155
+ POINT 762 -3.040860889905527 20.88930014517067
+ POINT 763 -2.031062079165233 20.89617025723036
+ POINT 764 -1.016381979500983 20.90253065295888
+ POINT 765 5.469943456515303e-09 20.90200417751546
+ POINT 766 1.016381991459812 20.90253065359715
+ POINT 767 2.03106209222298 20.89617025831457
+ POINT 768 3.040860905061069 20.88930014694594
+ POINT 769 4.048951364417659 20.88489543769765
+ POINT 770 5.057733516775839 20.8824027972792
+ POINT 771 6.06861715057387 20.88110760058708
+ POINT 772 7.082439907213993 20.88053378646916
+ POINT 773 8.099811229198181 20.8803802395451
+ POINT 774 9.121321863390992 20.88047297365156
+ POINT 775 10.14766099488602 20.88070897555551
+ POINT 776 11.17976544143952 20.88105598202432
+ POINT 777 12.21908322063199 20.88171105459812
+ POINT 778 13.26804257619063 20.88362480166985
+ POINT 779 14.33087281298531 20.88945091392941
+ POINT 780 15.41490994607966 20.90067958866326
+ POINT 781 16.52591344201236 20.90273444864004
+ POINT 782 17.66161214257477 20.90415664260873
+ POINT 783 18.80580852434392 20.90547893935344
+ POINT 784 19.98023780197282 20.88887416458981
+ POINT 785 -19.92358828250518 21.74660526428339
+ POINT 786 -19.07217434439901 21.80073889981208
+ POINT 787 -18.09112945874565 21.77562907330344
+ POINT 788 -17.02812405581322 21.75701137151901
+ POINT 789 -15.94366066593676 21.75622850710521
+ POINT 790 -14.86126409690214 21.75722234436677
+ POINT 791 -13.79471434661022 21.75787709872358
+ POINT 792 -12.74162038561464 21.75924454538805
+ POINT 793 -11.69853414597164 21.7603937981996
+ POINT 794 -10.66316512661045 21.76083746123114
+ POINT 795 -9.633974994254842 21.76077236820268
+ POINT 796 -8.609884257109169 21.76052103489894
+ POINT 797 -7.590060667734138 21.76033556874065
+ POINT 798 -6.573798770236956 21.76042363684251
+ POINT 799 -5.560466980079595 21.76102752854904
+ POINT 800 -4.549395330869891 21.76240362299502
+ POINT 801 -3.53974744971968 21.76481667916055
+ POINT 802 -2.5303209212877 21.76834825283947
+ POINT 803 -1.519299924135361 21.77169697292803
+ POINT 804 -0.5061568134041036 21.7734889506532
+ POINT 805 0.5061568254655004 21.77348895115548
+ POINT 806 1.519299936990494 21.77169697495886
+ POINT 807 2.530320935714927 21.76834825614754
+ POINT 808 3.539747467034398 21.76481668374473
+ POINT 809 4.549395352861634 21.76240362887052
+ POINT 810 5.560467009090089 21.76102753591302
+ POINT 811 6.573798809223865 21.76042364625162
+ POINT 812 7.590060720219843 21.76033558123638
+ POINT 813 8.609884326976061 21.76052105194263
+ POINT 814 9.633975085497147 21.76077239159665
+ POINT 815 10.66316524309085 21.76083749354136
+ POINT 816 11.69853429083621 21.7603938440048
+ POINT 817 12.74162056001178 21.75924461407503
+ POINT 818 13.79471454718983 21.75787720786278
+ POINT 819 14.86126431068448 21.75722251199929
+ POINT 820 15.94366086082416 21.756228717586
+ POINT 821 17.02812417119083 21.75701159238045
+ POINT 822 18.09112949141926 21.77562941392504
+ POINT 823 19.07217412140869 21.80073933755012
+ POINT 824 19.92358831980405 21.74660483881377
+ POINT 825 -19.823263456196 22.65296550038718
+ POINT 826 -18.68347167777789 22.6889724670474
+ POINT 827 -17.5669100312704 22.63883478838346
+ POINT 828 -16.47409263224828 22.6242054542872
+ POINT 829 -15.3904367336017 22.62202395225419
+ POINT 830 -14.32006894483515 22.62885094013076
+ POINT 831 -13.26345062953686 22.63505078113978
+ POINT 832 -12.21741436155782 22.63904422561734
+ POINT 833 -11.17939965412427 22.64098178723362
+ POINT 834 -10.14778782482358 22.64149205572087
+ POINT 835 -9.121464141616515 22.64125877788618
+ POINT 836 -8.099546383139796 22.64075324216461
+ POINT 837 -7.081275727631735 22.64028674537108
+ POINT 838 -6.066027421514116 22.64016033445862
+ POINT 839 -5.053197134698077 22.64059848599732
+ POINT 840 -4.042124389521369 22.64175301143073
+ POINT 841 -3.032008961880832 22.64359765889142
+ POINT 842 -2.021821754586955 22.64540986356159
+ POINT 843 -1.011040237264479 22.64659721372332
+ POINT 844 6.814665224480487e-09 22.6475606308115
+ POINT 845 1.011040251105664 22.64659721592393
+ POINT 846 2.021821769429846 22.64540986801763
+ POINT 847 3.032008978780493 22.6435976652927
+ POINT 848 4.042124410152931 22.64175301965603
+ POINT 849 5.053197161369463 22.64059849614706
+ POINT 850 6.066027457183961 22.64016034699624
+ POINT 851 7.081275775975558 22.6402867613839
+ POINT 852 8.099546448423908 22.64075326352899
+ POINT 853 9.121464228302864 22.64125880706316
+ POINT 854 10.14778793722731 22.64149209561295
+ POINT 855 11.17939979629603 22.64098184209338
+ POINT 856 12.21741453689023 22.6390443033786
+ POINT 857 13.26345084008729 22.63505089777322
+ POINT 858 14.32006918987354 22.62885112279828
+ POINT 859 15.39043700219516 22.62202422695843
+ POINT 860 16.47409288234377 22.62420581860266
+ POINT 861 17.56691020844972 22.63883518337205
+ POINT 862 18.68347184009588 22.68897314250563
+ POINT 863 19.82326349779923 22.652965189523
+ POINT 864 -19.69117813060965 23.501071811403
+ POINT 865 -18.8246775584696 23.60270488921595
+ POINT 866 -17.91872317447207 23.54877686754418
+ POINT 867 -16.92421077812897 23.51878118738913
+ POINT 868 -15.88162933414794 23.49913833184728
+ POINT 869 -14.82876942700178 23.5019021870122
+ POINT 870 -13.77806312245109 23.51109818218014
+ POINT 871 -12.7333690497193 23.51805365247506
+ POINT 872 -11.69484326979592 23.5217794620292
+ POINT 873 -10.661927166753 23.52314139532949
+ POINT 874 -9.634012473512842 23.52312044026287
+ POINT 875 -8.610418120559023 23.52238820743955
+ POINT 876 -7.590436502923668 23.52137251796749
+ POINT 877 -6.573525514872875 23.52051596810155
+ POINT 878 -5.559163390593181 23.52008761426355
+ POINT 879 -4.54678871790041 23.52022580633416
+ POINT 880 -3.535766169521851 23.52091292302367
+ POINT 881 -2.525389907129223 23.5217684966976
+ POINT 882 -1.515222401501546 23.52244024975234
+ POINT 883 -0.505160903546754 23.52306095823609
+ POINT 884 0.5051609198722887 23.52306096000069
+ POINT 885 1.515222418121158 23.52244025491717
+ POINT 886 2.525389924823131 23.52176850487623
+ POINT 887 3.535766189747005 23.52091293366626
+ POINT 888 4.546788742958842 23.52022581922355
+ POINT 889 5.559163423587246 23.52008762969507
+ POINT 890 6.573525559639977 23.52051598693144
+ POINT 891 7.590436564126859 23.52137254201168
+ POINT 892 8.610418203429177 23.52238823970576
+ POINT 893 9.634012583123939 23.5231204844028
+ POINT 894 10.66192730763136 23.52314145532485
+ POINT 895 11.69484344618557 23.52177954389795
+ POINT 896 12.73336926547453 23.51805376783202
+ POINT 897 13.77806338049386 23.51109835404176
+ POINT 898 14.82876972514016 23.50190245509659
+ POINT 899 15.88162964366185 23.49913874577929
+ POINT 900 16.92421100623148 23.5187817528495
+ POINT 901 17.9187231720003 23.54877744101314
+ POINT 902 18.82467738720799 23.60270583207815
+ POINT 903 19.69117818073977 23.50107152945477
+ POINT 904 -19.50128258193048 24.4384656875654
+ POINT 905 -18.49603377721733 24.52645328847083
+ POINT 906 -17.47222047478762 24.45122954140129
+ POINT 907 -16.40586225838657 24.39407159976292
+ POINT 908 -15.34601775579845 24.38327897298187
+ POINT 909 -14.29467265709022 24.390055636783
+ POINT 910 -13.24976676348197 24.39862650284665
+ POINT 911 -12.21060209619167 24.40396573526314
+ POINT 912 -11.17666203331493 24.40625240812431
+ POINT 913 -10.14751294202745 24.40659288968487
+ POINT 914 -9.122556531432314 24.40573982553234
+ POINT 915 -8.101059706484772 24.40417598818402
+ POINT 916 -7.082601789515715 24.40258179050725
+ POINT 917 -6.066775861079858 24.401321559102
+ POINT 918 -5.053111412995462 24.40054994850132
+ POINT 919 -4.041063542992159 24.40027148711376
+ POINT 920 -3.030084530115851 24.40031940219774
+ POINT 921 -2.019762977092939 24.40048397969316
+ POINT 922 -1.009856981565384 24.40074426873068
+ POINT 923 1.024744895883334e-08 24.40080656348254
+ POINT 924 1.009857001855979 24.40074427407103
+ POINT 925 2.019762997257817 24.40048398970201
+ POINT 926 3.030084551212998 24.40031941575852
+ POINT 927 4.041063567223794 24.40027150330772
+ POINT 928 5.053111443654583 24.40054996712262
+ POINT 929 6.066775902412783 24.40132158083352
+ POINT 930 7.082601846501917 24.40258181677218
+ POINT 931 8.101059785020986 24.40417602181029
+ POINT 932 9.122556637884827 24.40573987111417
+ POINT 933 10.14751308187546 24.40659295223369
+ POINT 934 11.17666221085666 24.40625249235723
+ POINT 935 12.21060231588698 24.40396584869259
+ POINT 936 13.24976703047505 24.39862666102139
+ POINT 937 14.29467297678669 24.39005587293844
+ POINT 938 15.34601812724821 24.38327935339093
+ POINT 939 16.40586264749961 24.39407221667886
+ POINT 940 17.47222072302032 24.45123039885839
+ POINT 941 18.49603359613996 24.52645421647772
+ POINT 942 19.50128254843763 24.438465834723
+ POINT 943 -19.27566297736843 25.33374322431333
+ POINT 944 -18.09775178956348 25.36799483110871
+ POINT 945 -16.95620348221256 25.27537035025225
+ POINT 946 -15.86925210584145 25.2621959819831
+ POINT 947 -14.81076315314948 25.27017923896646
+ POINT 948 -13.76485149074431 25.28055642554051
+ POINT 949 -12.72554494747265 25.2877018915422
+ POINT 950 -11.69125466472678 25.29114191583416
+ POINT 951 -10.66153084238642 25.29208544028669
+ POINT 952 -9.635751893753024 25.29127123899427
+ POINT 953 -8.613017330938026 25.28911759029576
+ POINT 954 -7.593119760102007 25.28673460993404
+ POINT 955 -6.575847443318799 25.28464366208886
+ POINT 956 -5.56085202263591 25.28301692601594
+ POINT 957 -4.547650297377339 25.28185175153692
+ POINT 958 -3.535803856092467 25.28112854408795
+ POINT 959 -2.524929008354851 25.28072983104776
+ POINT 960 -1.514733152989468 25.28059689769103
+ POINT 961 -0.5048698207562641 25.28052643741724
+ POINT 962 0.5048698473713688 25.28052644168841
+ POINT 963 1.51473317820234 25.28059690951267
+ POINT 964 2.524929032351727 25.28072984843296
+ POINT 965 3.535803880701605 25.28112856491395
+ POINT 966 4.54765032602379 25.28185177457648
+ POINT 967 5.560852060064414 25.28301695131759
+ POINT 968 6.575847495256659 25.28464369111745
+ POINT 969 7.593119832718212 25.28673464497304
+ POINT 970 8.613017431274047 25.28911763568033
+ POINT 971 9.635752028795475 25.29127130191628
+ POINT 972 10.66153101603581 25.29208552765603
+ POINT 973 11.6912548775394 25.29114203268002
+ POINT 974 12.72554519985952 25.28770204706892
+ POINT 975 13.76485178333624 25.28055664153414
+ POINT 976 14.81076348639632 25.27017956625211
+ POINT 977 15.86925247881834 25.26219652228766
+ POINT 978 16.95620384751598 25.27537126258778
+ POINT 979 18.09775189289379 25.36799618984021
+ POINT 980 19.27566284513804 25.33374370218195
+ POINT 981 -19.02239954985974 26.17643225215792
+ POINT 982 -18.13957375669325 26.27182967555013
+ POINT 983 -17.24752991244937 26.16660408857279
+ POINT 984 -16.27676195998304 26.15550609242113
+ POINT 985 -15.27459027941854 26.16147153179269
+ POINT 986 -14.25617297779009 26.16981316221108
+ POINT 987 -13.2298905244963 26.17593671197166
+ POINT 988 -12.20134707994185 26.17929019701242
+ POINT 989 -11.17413433418612 26.18055581832264
+ POINT 990 -10.14926347567323 26.17975046130899
+ POINT 991 -9.126055233191323 26.1767257214049
+ POINT 992 -8.104994973232515 26.17334704655403
+ POINT 993 -7.086339423772932 26.17035063568784
+ POINT 994 -6.069981455507479 26.16788451762503
+ POINT 995 -5.055493041319419 26.16585302924196
+ POINT 996 -4.042551276201685 26.16436367569299
+ POINT 997 -3.030821407389114 26.16335937686056
+ POINT 998 -2.020032206493706 26.16279434727297
+ POINT 999 -1.009850748200918 26.16249580956691
+ POINT 1000 1.810878547461869e-08 26.16240730616165
+ POINT 1001 1.009850782604362 26.16249582264381
+ POINT 1002 2.020032236871754 26.1627943696687
+ POINT 1003 3.030821434692971 26.163359404605
+ POINT 1004 4.04255130367432 26.16436370564181
+ POINT 1005 5.055493074279512 26.16585306014084
+ POINT 1006 6.069981500676009 26.16788455034281
+ POINT 1007 7.086339488585687 26.17035067328725
+ POINT 1008 8.104995064661678 26.17334709269614
+ POINT 1009 9.126055358650662 26.17672578313303
+ POINT 1010 10.14926364070988 26.17975055132968
+ POINT 1011 11.17413453512518 26.18055594767594
+ POINT 1012 12.20134730349981 26.17929037161421
+ POINT 1013 13.22989075441856 26.17593694579172
+ POINT 1014 14.25617319248297 26.1698134895775
+ POINT 1015 15.27459044923737 26.16147202351487
+ POINT 1016 16.27676204411003 26.15550686826468
+ POINT 1017 17.24752984252422 26.16660531696369
+ POINT 1018 18.13957335417382 26.27183161770785
+ POINT 1019 19.02239923981158 26.17643320705552
+ POINT 1020 -18.68351052659932 27.13627594775126
+ POINT 1021 -17.69958032840385 27.16211878258065
+ POINT 1022 -16.74683156791625 27.09239213947461
+ POINT 1023 -15.76142860035137 27.07785332363176
+ POINT 1024 -14.75568523901815 27.07369952580982
+ POINT 1025 -13.73682530497883 27.07257389333525
+ POINT 1026 -12.71214081282853 27.07258462878146
+ POINT 1027 -11.68737540619582 27.07322119480453
+ POINT 1028 -10.66414374485063 27.07224624332165
+ POINT 1029 -9.640752201106791 27.06765889268107
+ POINT 1030 -8.618551085348614 27.06280265021007
+ POINT 1031 -7.598447638413528 27.0587038340893
+ POINT 1032 -6.580657275128921 27.05538108021106
+ POINT 1033 -5.564721338620957 27.05245186732603
+ POINT 1034 -4.55044947250108 27.05017759593697
+ POINT 1035 -3.537564033075582 27.04853556963036
+ POINT 1036 -2.525883378397752 27.04753994742007
+ POINT 1037 -1.515118391171542 27.04699037668727
+ POINT 1038 -0.5049676403738673 27.04677660797433
+ POINT 1039 0.5049676892594587 27.04677661887949
+ POINT 1040 1.515118434256783 27.04699040536934
+ POINT 1041 2.525883412994776 27.04753998543922
+ POINT 1042 3.537564061749419 27.04853561085263
+ POINT 1043 4.550449500892171 27.05017763641098
+ POINT 1044 5.564721374913006 27.05245190650947
+ POINT 1045 6.580657328738541 27.0553811208901
+ POINT 1046 7.598447718844161 27.05870388239782
+ POINT 1047 8.618551199616206 27.0628027121368
+ POINT 1048 9.640752355782366 27.06765898096566
+ POINT 1049 10.66414394092225 27.07224638347101
+ POINT 1050 11.6873756228595 27.07322140691138
+ POINT 1051 12.71214101090778 27.07258491927569
+ POINT 1052 13.7368254473805 27.07257428445428
+ POINT 1053 14.75568528734847 27.07370007007758
+ POINT 1054 15.76142851055736 27.07785411803665
+ POINT 1055 16.74683128376763 27.09239333698052
+ POINT 1056 17.6995797272013 27.16212066124442
+ POINT 1057 18.68350991969133 27.13627753669932
+ POINT 1058 -18.3087899994487 28.0491122961534
+ POINT 1059 -17.29356305303868 28.05076474633064
+ POINT 1060 -16.29456855134103 28.00414807613013
+ POINT 1061 -15.27947676947299 27.98500923824287
+ POINT 1062 -14.25474850756761 27.97405313016844
+ POINT 1063 -13.22681991964508 27.96937104967781
+ POINT 1064 -12.20220140205727 27.96991345424442
+ POINT 1065 -11.18106269960114 27.96967783441059
+ POINT 1066 -10.1575317295533 27.96254624095482
+ POINT 1067 -9.134026282902123 27.9554271272794
+ POINT 1068 -8.11232808124951 27.94990275991905
+ POINT 1069 -7.093073357937705 27.94571290375888
+ POINT 1070 -6.075536956332379 27.94179197610055
+ POINT 1071 -5.059700169738454 27.9386774220445
+ POINT 1072 -4.045326088931555 27.93633896816423
+ POINT 1073 -3.03240645241726 27.93493777823327
+ POINT 1074 -2.020741779449279 27.93421009321045
+ POINT 1075 -1.010099138076054 27.93395407311486
+ POINT 1076 3.404211895013942e-08 27.93390377024507
+ POINT 1077 1.010099201965424 27.93395410521433
+ POINT 1078 2.020741831028424 27.93421014644879
+ POINT 1079 3.032406488119535 27.93493783773603
+ POINT 1080 4.045326114328983 27.93633902566877
+ POINT 1081 5.059700194472554 27.93867747350166
+ POINT 1082 6.075536993070713 27.94179202308874
+ POINT 1083 7.09307342009923 27.94571295271277
+ POINT 1084 8.112328181018478 27.94990282281439
+ POINT 1085 9.134026425405688 27.95542721427844
+ POINT 1086 10.15753191815605 27.96254637704741
+ POINT 1087 11.18106292576653 27.96967807323303
+ POINT 1088 12.2022016129779 27.96991382936287
+ POINT 1089 13.22682004031123 27.9693715547119
+ POINT 1090 14.25474849512003 27.97405379109089
+ POINT 1091 15.27947659137026 27.98501013174536
+ POINT 1092 16.29456815670813 28.00414934511754
+ POINT 1093 17.29356234408891 28.05076663883557
+ POINT 1094 18.30878908050798 28.04911438640772
+ POINT 1095 -17.88627195115217 28.94881420577205
+ POINT 1096 -16.85121623860757 28.93061933343462
+ POINT 1097 -15.81833314037684 28.89375235827191
+ POINT 1098 -14.77937167335351 28.87328385036637
+ POINT 1099 -13.74209446540223 28.86499338776666
+ POINT 1100 -12.71605582999688 28.86919825138711
+ POINT 1101 -11.69940001494518 28.87340789918018
+ POINT 1102 -10.67625922348492 28.86226791658786
+ POINT 1103 -9.65132961605895 28.851595071435
+ POINT 1104 -8.627923539340028 28.8441361901345
+ POINT 1105 -7.607383097319782 28.83914218931285
+ POINT 1106 -6.588183876610444 28.834021579554
+ POINT 1107 -5.570592938796751 28.82993786493235
+ POINT 1108 -4.554348259497055 28.82674994031302
+ POINT 1109 -3.539757274765657 28.82494387416716
+ POINT 1110 -2.526758864903647 28.82415777580468
+ POINT 1111 -1.515331685041841 28.82413311065559
+ POINT 1112 -0.5049906739901562 28.82425189305842
+ POINT 1113 0.5049907645346323 28.82425191727151
+ POINT 1114 1.515331766070061 28.82413317752096
+ POINT 1115 2.526758922906133 28.82415786552549
+ POINT 1116 3.539757303964481 28.82494396199095
+ POINT 1117 4.554348271221096 28.82675001632507
+ POINT 1118 5.5705929498453 28.82993792637928
+ POINT 1119 6.588183907369825 28.83402163235582
+ POINT 1120 7.607383167361471 28.83914224659848
+ POINT 1121 8.627923663583609 28.84413627571221
+ POINT 1122 9.651329791428106 28.85159520324159
+ POINT 1123 10.67625944341114 28.86226814518679
+ POINT 1124 11.69940025142002 28.87340833491707
+ POINT 1125 12.71605597388189 28.86919892986707
+ POINT 1126 13.74209440347107 28.86499424204478
+ POINT 1127 14.77937139138959 28.87328490937882
+ POINT 1128 15.81833261547568 28.89375376208559
+ POINT 1129 16.85121538818617 28.93062131895283
+ POINT 1130 17.88627066804774 28.94881677035237
+ POINT 1131 -17.41542967730917 29.83375864838565
+ POINT 1132 -16.36598381746591 29.79324716653365
+ POINT 1133 -15.30571123700743 29.76326236085124
+ POINT 1134 -14.25334486558897 29.75293926663301
+ POINT 1135 -13.22518619984562 29.7683098214614
+ POINT 1136 -12.21928477595643 29.78625116079143
+ POINT 1137 -11.19741514236947 29.76826012438021
+ POINT 1138 -10.17050471136325 29.75174492628818
+ POINT 1139 -9.145044524339205 29.74157318849883
+ POINT 1140 -8.1237506134133 29.73611400010283
+ POINT 1141 -7.102985757155311 29.72937235399485
+ POINT 1142 -6.083575327030116 29.72406116587013
+ POINT 1143 -5.065015794708289 29.71965157618854
+ POINT 1144 -4.048200344643696 29.7173430556003
+ POINT 1145 -3.033238232867113 29.71657292251867
+ POINT 1146 -2.020549058249011 29.71719659405831
+ POINT 1147 -1.009738878373672 29.71805565528834
+ POINT 1148 5.919503985596375e-08 29.71837020929849
+ POINT 1149 1.009738994992378 29.71805571880686
+ POINT 1150 2.020549158880593 29.71719671483972
+ POINT 1151 3.033238290617864 29.71657306631699
+ POINT 1152 4.048200349715117 29.71734318068954
+ POINT 1153 5.065015770760248 29.7196516721558
+ POINT 1154 6.083575305003133 29.72406123347293
+ POINT 1155 7.102985771361372 29.72937240771407
+ POINT 1156 8.123750692148713 29.73611406625849
+ POINT 1157 9.145044681942796 29.74157331659041
+ POINT 1158 10.17050491805136 29.75174514843446
+ POINT 1159 11.19741536641047 29.76826054031946
+ POINT 1160 12.2192849573198 29.78625198231071
+ POINT 1161 13.22518614531627 29.76831101236639
+ POINT 1162 14.25334445158184 29.75294061103708
+ POINT 1163 15.30571051603222 29.76326396462168
+ POINT 1164 16.36598278510637 29.79324928955189
+ POINT 1165 17.41542794295087 29.83376171990615
+ POINT 1166 -16.89880493119268 30.69721421200391
+ POINT 1167 -15.84084671744584 30.63188582080215
+ POINT 1168 -14.75937079783184 30.62356117741139
+ POINT 1169 -13.72667803874304 30.6613328279952
+ POINT 1170 -12.74588714172752 30.71371027983801
+ POINT 1171 -11.72514438910883 30.68212290710705
+ POINT 1172 -10.69307402425253 30.65563776551792
+ POINT 1173 -9.663653547397562 30.64189426397848
+ POINT 1174 -8.642458727492786 30.63734439158867
+ POINT 1175 -7.620362459906692 30.62824675701598
+ POINT 1176 -6.599325061244341 30.62130216573695
+ POINT 1177 -5.577936826951563 30.6148672434393
+ POINT 1178 -4.558211164728247 30.61175248302345
+ POINT 1179 -3.540362154667188 30.61087880095583
+ POINT 1180 -2.525662571249494 30.61262583895858
+ POINT 1181 -1.513887280056144 30.61507416610434
+ POINT 1182 -0.5042972278699956 30.61670205839328
+ POINT 1183 0.5042973737465498 30.61670209443389
+ POINT 1184 1.513887429060817 30.61507428789713
+ POINT 1185 2.525662692669032 30.61262604572162
+ POINT 1186 3.54036219335181 30.61087902796626
+ POINT 1187 4.558211107788653 30.61175265802142
+ POINT 1188 5.577936725817437 30.61486735811178
+ POINT 1189 6.599324974859706 30.62130222879121
+ POINT 1190 7.620362447487361 30.62824680085264
+ POINT 1191 8.642458825941324 30.63734447157217
+ POINT 1192 9.663653754394943 30.64189448764897
+ POINT 1193 10.69307423735651 30.65563818384975
+ POINT 1194 11.72514453379872 30.68212369692436
+ POINT 1195 12.74588713706405 30.71371180853617
+ POINT 1196 13.72667758015037 30.66133475353996
+ POINT 1197 14.75936981763983 30.62356312399664
+ POINT 1198 15.84084548444188 30.63188806768807
+ POINT 1199 16.89880261226452 30.69721787530422
+ POINT 1200 -16.34009128149359 31.53262402545307
+ POINT 1201 -15.28568336821521 31.44708435232277
+ POINT 1202 -14.2209000727431 31.53141889752363
+ POINT 1203 -13.2977569951397 31.66679256172576
+ POINT 1204 -12.27301009857187 31.6040005347632
+ POINT 1205 -11.22445310392184 31.55974332082998
+ POINT 1206 -10.18420406298538 31.54252893027452
+ POINT 1207 -9.163915367393241 31.5436687933713
+ POINT 1208 -8.140599406135669 31.53125016600776
+ POINT 1209 -7.118690682844557 31.52230190448825
+ POINT 1210 -6.093912293860901 31.51225498074955
+ POINT 1211 -5.07053781765046 31.50770300997673
+ POINT 1212 -4.04849776527412 31.50615467955022
+ POINT 1213 -3.030710538587649 31.50945833368958
+ POINT 1214 -2.017113296966526 31.51446605862232
+ POINT 1215 -1.007152972521004 31.5188773687048
+ POINT 1216 8.069955546863294e-08 31.52094595365134
+ POINT 1217 1.007153147259242 31.51887744675579
+ POINT 1218 2.017113486527146 31.51446627236329
+ POINT 1219 3.030710673050414 31.50945868636081
+ POINT 1220 4.048497739728965 31.5061550381337
+ POINT 1221 5.070537627085144 31.50770325017226
+ POINT 1222 6.093912047408612 31.51225510381275
+ POINT 1223 7.118690492026126 31.52230193550043
+ POINT 1224 8.140599370382356 31.53125017994062
+ POINT 1225 9.163915512128149 31.54366891796288
+ POINT 1226 10.18420431641738 31.5425293949968
+ POINT 1227 11.22445321142737 31.55974415861684
+ POINT 1228 12.27300998503818 31.60400199599792
+ POINT 1229 13.29775665030186 31.66679525624402
+ POINT 1230 14.22089893057988 31.53142164267454
+ POINT 1231 15.28568200198485 31.44708667752904
+ POINT 1232 16.34008819047632 31.53262840498486
+ POINT 1233 -15.74070991046201 32.33815429935463
+ POINT 1234 -14.74688528329741 32.29702825850423
+ POINT 1235 -13.93190385661229 32.65477363083443
+ POINT 1236 -12.86506936822592 32.52891304941449
+ POINT 1237 -11.77212159391218 32.45232300476276
+ POINT 1238 -10.70587315849742 32.4347153350411
+ POINT 1239 -9.687662057866612 32.45538673008075
+ POINT 1240 -8.662564266803992 32.43904962117873
+ POINT 1241 -7.6420354397583 32.42864000943801
+ POINT 1242 -6.613519518949163 32.41191777411576
+ POINT 1243 -5.586073763699214 32.40488779735104
+ POINT 1244 -4.558141198059786 32.40119064612167
+ POINT 1245 -3.535940044697491 32.40633890872039
+ POINT 1246 -2.519295876494282 32.41479259504359
+ POINT 1247 -1.507828324987365 32.42353533511525
+ POINT 1248 -0.5019149230875003 32.43049565557803
+ POINT 1249 0.5019150823275319 32.43049567799903
+ POINT 1250 1.507828527783088 32.42353546677084
+ POINT 1251 2.519296107078045 32.41479297153293
+ POINT 1252 3.535940160588894 32.40633951541907
+ POINT 1253 4.558141018794441 32.40119120765029
+ POINT 1254 5.58607332108212 32.40488811417254
+ POINT 1255 6.613519029401044 32.41191787120312
+ POINT 1256 7.642035101328529 32.4286399487375
+ POINT 1257 8.662564215711519 32.43904959879422
+ POINT 1258 9.687662207059672 32.45538705154674
+ POINT 1259 10.70587327603016 32.43471639543523
+ POINT 1260 11.77212124413756 32.45232461789568
+ POINT 1261 12.86506864437663 32.5289155171651
+ POINT 1262 13.9319031453721 32.65477802453022
+ POINT 1263 14.74688388336436 32.29703064706029
+ POINT 1264 15.74070577682765 32.33815957294095
+ POINT 1265 -15.07552072766293 33.14262814282181
+ POINT 1266 -14.47383699079426 33.80246509548604
+ POINT 1267 -13.45485613851754 33.44616152809291
+ POINT 1268 -12.31042376721847 33.31655850201416
+ POINT 1269 -11.2135033566313 33.30180198841559
+ POINT 1270 -10.20833474124087 33.37195219581763
+ POINT 1271 -9.180106558323141 33.35165297473918
+ POINT 1272 -8.167116093012913 33.3442344487901
+ POINT 1273 -7.135707070230799 33.31483801144155
+ POINT 1274 -6.105345665605076 33.30379118897195
+ POINT 1275 -5.06957725725357 33.29468673625933
+ POINT 1276 -4.041801375578952 33.30179332186751
+ POINT 1277 -3.020762110140957 33.31421796476505
+ POINT 1278 -2.005808444215231 33.32826293060971
+ POINT 1279 -1.000289102538041 33.34360137140605
+ POINT 1280 4.397051474314129e-08 33.34996601347633
+ POINT 1281 1.000289226544982 33.34360139490249
+ POINT 1282 2.005808652593252 33.32826315749907
+ POINT 1283 3.020762356793561 33.31421864049496
+ POINT 1284 4.04180140274841 33.30179435588055
+ POINT 1285 5.069576774752012 33.29468759101248
+ POINT 1286 6.105344800786285 33.30379157372327
+ POINT 1287 7.135706209600581 33.31483800284786
+ POINT 1288 8.167115522703435 33.3442342276991
+ POINT 1289 9.180106333286005 33.35165308658632
+ POINT 1290 10.20833438162417 33.37195324049043
+ POINT 1291 11.21350253681438 33.30180425811116
+ POINT 1292 12.31042180764285 33.31656140263814
+ POINT 1293 13.4548524153751 33.44616582254692
+ POINT 1294 14.47383044482127 33.80247196173818
+ POINT 1295 15.07551512015369 33.14263458603429
+ POINT 1296 -13.79621587368983 34.47979377169069
+ POINT 1297 -12.80117612552641 34.14340935306568
+ POINT 1298 -11.67938708456585 34.12832297638581
+ POINT 1299 -10.72142132443546 34.29425844362311
+ POINT 1300 -9.682832980733666 34.26424534470635
+ POINT 1301 -8.688207103612132 34.27689307018375
+ POINT 1302 -7.65563025945943 34.22402537362621
+ POINT 1303 -6.627660152089107 34.20733211365729
+ POINT 1304 -5.582314868145199 34.18559033550888
+ POINT 1305 -4.548886327711884 34.19487513879358
+ POINT 1306 -3.522722983675548 34.21111636664738
+ POINT 1307 -2.501187911497048 34.22961986771382
+ POINT 1308 -1.494394684397123 34.25705724567609
+ POINT 1309 -0.4971265849464807 34.27519845138761
+ POINT 1310 0.4971265078887681 34.27519841977612
+ POINT 1311 1.494394688445157 34.25705727178087
+ POINT 1312 2.501188049285862 34.22962028369921
+ POINT 1313 3.522723188878942 34.21111756307139
+ POINT 1314 4.548886155833521 34.19487684951891
+ POINT 1315 5.582313876849914 34.18559156986573
+ POINT 1316 6.627658663296168 34.20733251253952
+ POINT 1317 7.655628853358176 34.22402516036131
+ POINT 1318 8.68820599240011 34.27689283063138
+ POINT 1319 9.682831841060921 34.26424634549341
+ POINT 1320 10.72141915815556 34.29426114991747
+ POINT 1321 11.67938420379727 34.12832694300539
+ POINT 1322 12.80117158164824 34.14341469815486
+ POINT 1323 13.79620812794538 34.47980114816573
+ POINT 1324 -13.06808813704192 35.14018072687722
+ POINT 1325 -12.14172620096994 34.87954210817981
+ POINT 1326 -11.26850255798744 35.2174633859475
+ POINT 1327 -10.17404344203454 35.15495143560162
+ POINT 1328 -9.208060341626505 35.23313312650344
+ POINT 1329 -8.164338718552617 35.1425249690552
+ POINT 1330 -7.149966973739355 35.12413503072115
+ POINT 1331 -6.093958485983832 35.07390856861841
+ POINT 1332 -5.058078832983085 35.0862120839201
+ POINT 1333 -4.028041239492521 35.10535340409478
+ POINT 1334 -2.995366542760057 35.12335223032324
+ POINT 1335 -1.984673994347679 35.16616214935111
+ POINT 1336 -0.9889440302704526 35.202230425387
+ POINT 1337 -2.362829220701329e-07 35.21561385455021
+ POINT 1338 0.9889435978667032 35.20223033196604
+ POINT 1339 1.984673688665513 35.16616222501731
+ POINT 1340 2.995366465565271 35.12335296470669
+ POINT 1341 4.028041331825868 35.10535544561446
+ POINT 1342 5.05807832979828 35.08621479165007
+ POINT 1343 6.093956728733247 35.07391022323044
+ POINT 1344 7.149964603949941 35.12413537360996
+ POINT 1345 8.16433638165371 35.14252466978046
+ POINT 1346 9.208057389898194 35.23313393742545
+ POINT 1347 10.17403944712447 35.15495471543825
+ POINT 1348 11.26849645211291 35.21746853325359
+ POINT 1349 12.14171999880287 34.87954795411678
+ POINT 1350 13.0680787036588 35.14018886919808
+ POINT 1351 -12.25874524554923 35.80263158479386
+ POINT 1352 -10.64940816662681 35.9609434482652
+ POINT 1353 -9.738993523076187 36.21117036120386
+ POINT 1354 -8.645496887251596 36.05535363229623
+ POINT 1355 -7.660082219217359 36.07236004253533
+ POINT 1356 -6.59386247522779 35.96253496561209
+ POINT 1357 -5.568601871711349 35.98133911135642
+ POINT 1358 -4.542278169739824 36.00016620825533
+ POINT 1359 -3.491371001354527 36.00500762088945
+ POINT 1360 -2.474010083407105 36.06498819452312
+ POINT 1361 -1.477289195045545 36.12504113606641
+ POINT 1362 -0.4912059285544867 36.15975599214231
+ POINT 1363 0.4912047027322386 36.15975590621064
+ POINT 1364 1.477288036732875 36.12504100856928
+ POINT 1365 2.474009154113311 36.06498836685221
+ POINT 1366 3.491370484225889 36.005008798768
+ POINT 1367 4.542278089478654 36.00016955223765
+ POINT 1368 5.568600813180165 35.98134321823733
+ POINT 1369 6.593859519726857 35.96253699972355
+ POINT 1370 7.660078711252875 36.07236031674334
+ POINT 1371 8.64549260236045 36.05535452011431
+ POINT 1372 9.738986372954258 36.21117440008044
+ POINT 1373 10.64940057210636 35.96094915519707
+ POINT 1374 12.25873414120749 35.80264019887823
+ POINT 1375 -11.51773025350177 36.35059294972418
+ POINT 1376 -10.65697659081121 36.92420899016856
+ POINT 1377 -9.073839610332337 36.90105300548846
+ POINT 1378 -8.146483166419303 37.06536476868484
+ POINT 1379 -7.049598100139526 36.85375720886346
+ POINT 1380 -6.068285778904927 36.89990321056391
+ POINT 1381 -5.072991493907814 36.90817616854977
+ POINT 1382 -3.99387954502805 36.86886824762014
+ POINT 1383 -2.967956221366422 36.948391661155
+ POINT 1384 -1.969359381657599 37.03579454421214
+ POINT 1385 -0.9811568690244843 37.09928427270614
+ POINT 1386 -1.321646322029191e-06 37.12286421524274
+ POINT 1387 0.9811542273605319 37.09928414206929
+ POINT 1388 1.969356939200988 37.03579438002285
+ POINT 1389 2.967954164856175 36.94839197135881
+ POINT 1390 3.993878153189894 36.86886991249742
+ POINT 1391 5.072990965328807 36.90818161389328
+ POINT 1392 6.068283175739424 36.89990903124271
+ POINT 1393 7.049593675630685 36.85375859784719
+ POINT 1394 8.146477155142176 37.06536635726837
+ POINT 1395 9.073831993817508 36.90105705402716
+ POINT 1396 10.65696264541113 36.92421777141614
+ POINT 1397 11.51771778734179 36.35060173116444
+ POINT 1398 -9.874844025420192 37.39216649740979
+ POINT 1399 -8.96740748095799 37.87695732138048
+ POINT 1400 -7.438938982686154 37.68347468260948
+ POINT 1401 -6.50593626267252 37.87694008295671
+ POINT 1402 -5.61747021210558 37.87127533952164
+ POINT 1403 -4.50493919684402 37.70762847888211
+ POINT 1404 -3.474895680182776 37.81110994000395
+ POINT 1405 -2.47779011320007 37.9305818016129
+ POINT 1406 -1.486534122834006 38.0216095618874
+ POINT 1407 -0.4945352453330601 38.07921156797903
+ POINT 1408 0.4945300811634933 38.07921159550066
+ POINT 1409 1.486529221010789 38.02160930967654
+ POINT 1410 2.477785571750189 37.9305816710405
+ POINT 1411 3.474891600531238 37.81111046960394
+ POINT 1412 4.504935871545127 37.70763053498042
+ POINT 1413 5.617467804911568 37.87128486851104
+ POINT 1414 6.505933128734337 37.87694376153858
+ POINT 1415 7.438934268999978 37.68347575716164
+ POINT 1416 8.967392296606542 37.87696493811983
+ POINT 1417 9.874829237160435 37.39217489381149
+ POINT 1418 -8.147493943469181 38.26522221165496
+ POINT 1419 -7.204335412055579 38.65737257146897
+ POINT 1420 -6.323312496190199 38.97408019050001
+ POINT 1421 -5.01203726983948 38.51297624845616
+ POINT 1422 -4.001501092985738 38.651230540567
+ POINT 1423 -3.020444675311309 38.806876475282
+ POINT 1424 -2.033095442850132 38.92553139969691
+ POINT 1425 -1.029249995848707 39.00470609623093
+ POINT 1426 -4.74370389105111e-06 39.04491520100409
+ POINT 1427 1.029241328499785 39.00470590960975
+ POINT 1428 2.033087058128695 38.92553128934863
+ POINT 1429 3.020436112344315 38.80687697855863
+ POINT 1430 4.001492023142893 38.65123203877156
+ POINT 1431 5.01202711215084 38.51297927624825
+ POINT 1432 6.323297249481397 38.97408527161986
+ POINT 1433 7.204321660158831 38.6573778816041
+ POINT 1434 8.147479092148298 38.26522883631657
+ POINT 1435 -5.49459488339432 39.2304297161394
+ POINT 1436 -4.555054134591538 39.47438013983862
+ POINT 1437 -3.625104797446435 39.66872174818514
+ POINT 1438 -2.68641217378018 39.8187585290443
+ POINT 1439 -1.753727660812683 39.92296262335634
+ POINT 1440 -0.8514203504713909 39.98186887129251
+ POINT 1441 0.8514156417348741 39.98186906132761
+ POINT 1442 1.753718582443226 39.92296341244428
+ POINT 1443 2.686399886263002 39.81876019460063
+ POINT 1444 3.625089980059974 39.66872447914377
+ POINT 1445 4.555037417817725 39.47438404988157
+ POINT 1446 5.494577273669186 39.23043474765144
+ POINT 1447 -10.17836236469941 9.351236080585844
+ POINT 1448 -10.43178822028154 9.796311205363828
+ POINT 1449 -9.917078319793836 9.803182550031517
+ POINT 1450 -0.4257127323325477 0.4866079094147974
+ POINT 1451 -2.371846788213477e-06 0.477542337394691
+ POINT 1452 -0.4258068646365975 0.004533301166143754
+ POINT 1453 -7.678410559861725 1.532677211575885
+ POINT 1454 -7.321632913802258 1.829573658302515
+ POINT 1455 -7.793213434540115 2.025649120773706
+ POINT 1456 -0.4257125470876409 39.5133920361483
+ POINT 1457 -2.371851945525555e-06 39.52245760050205
+ POINT 1458 -0.4258066792652949 39.99546670279175
+ POINT 1459 19.49788122060637 21.77367208818195
+ POINT 1460 19.87859224467908 22.20035688754039
+ POINT 1461 19.44771880960396 22.22685226353656
+ POINT 1462 19.95652174895268 21.31804389755909
+ POINT 1463 19.52620596169076 21.34480675106996
+ POINT 1464 -18.50178077972164 27.59500547042333
+ POINT 1465 -18.00418516392628 27.60561553936703
+ POINT 1466 -18.19154542750159 27.14919736516595
+ POINT 1467 2.318125029883721 20.44808511760801
+ POINT 1468 2.823024436302765 20.4446500619237
+ POINT 1469 2.535961498642024 20.89273520263026
+ POINT 1470 -18.1915204806717 12.85075360776577
+ POINT 1471 -18.00416183249957 12.39434254388758
+ POINT 1472 -18.50176221811813 12.40494933886966
+ POINT 1473 -10.43863716835151 8.90091854855763
+ POINT 1474 -9.923927267863803 8.907789893225319
+ POINT 1475 -10.95968604283294 7.131741057062447
+ POINT 1476 -11.49280931695378 7.122937192173756
+ POINT 1477 -11.23899374083607 7.556481059276784
+ POINT 1478 -10.96516006976062 8.002771637036583
+ POINT 1479 -11.49828334388146 7.993967772147892
+ POINT 1480 -10.70432587216095 8.448865355552398
+ POINT 1481 -10.95876096899656 8.892311542912923
+ POINT 1482 -10.44503626911557 8.01137864268129
+ POINT 1483 14.20285675279642 6.771375017633135
+ POINT 1484 14.50369851507584 7.101292773533388
+ POINT 1485 14.77834984324904 6.524081630761735
+ POINT 1486 12.23551226998423 9.30208580312808
+ POINT 1487 11.99907300324982 8.856939970398869
+ POINT 1488 12.50944368805203 8.841146276347569
+ POINT 1489 11.97221231742172 9.765815913514722
+ POINT 1490 12.48258300222394 9.750022219463421
+ POINT 1491 -0.4905789853227912 2.888925581404812
+ POINT 1492 -0.7361812304740789 3.37047972852181
+ POINT 1493 -0.2456035667837216 3.358689771784562
+ POINT 1494 -4.783548996192389 1.006323236939901
+ POINT 1495 -5.026302453506227 0.6418935979999102
+ POINT 1496 -5.253316898193344 1.128297748069279
+ POINT 1497 -4.278279517467413 0.9371948906828067
+ POINT 1498 -4.50677415895651 1.41789821597725
+ POINT 1499 -3.813305411122727 0.8400241846748683
+ POINT 1500 -4.09123434595309 0.4229266387245523
+ POINT 1501 1.893402820285961 39.42424735089645
+ POINT 1502 2.359743472195849 39.37214574197463
+ POINT 1503 2.220670538841968 39.87633322383852
+ POINT 1504 0.2472626687298011 38.56206339825238
+ POINT 1505 -2.582084783431249e-06 38.07921158173984
+ POINT 1506 -0.2472699945184756 38.56206338449157
+ POINT 1507 10.65318160875874 36.4425834633066
+ POINT 1508 11.08355917972408 36.15577544318076
+ POINT 1509 11.09104919162302 36.64297534268243
+ POINT 1510 4.506759567646867 38.5821056575099
+ POINT 1511 4.758481491847984 38.11030490561433
+ POINT 1512 4.25321394734401 38.179431286876
+ POINT 1513 4.783532264984283 38.9936816630649
+ POINT 1514 5.253302192910013 38.87170701194984
+ POINT 1515 5.026287577931008 39.35811027344018
+ POINT 1516 4.278264720480308 39.06280804432657
+ POINT 1517 2.271388089598089 31.06354615904246
+ POINT 1518 1.765500457793982 31.06477028013021
+ POINT 1519 2.019775060864925 30.61385016680937
+ POINT 1520 2.52391207978878 31.51196247936205
+ POINT 1521 2.778186682859723 31.06104236604121
+ POINT 1522 19.58406521140076 19.55566934611801
+ POINT 1523 19.59394271675515 20.00002569416793
+ POINT 1524 19.99506063684425 19.5555338953416
+ POINT 1525 19.58406161774156 20.44446277646284
+ POINT 1526 19.99505884072375 20.44454692352635
+ POINT 1527 17.47612722659238 20.45170520807109
+ POINT 1528 17.94956809694392 20.45199983601073
+ POINT 1529 17.76408318096152 19.99954840147309
+ POINT 1530 17.09376279229357 20.90344554562439
+ POINT 1531 16.90827787631117 20.45099411108675
+ POINT 1532 17.65639440029453 29.39423957186695
+ POINT 1533 17.13332166556852 29.38219151942949
+ POINT 1534 17.36874302811696 28.9397190446526
+ POINT 1535 13.61482989783698 32.16078664038712
+ POINT 1536 14.07640103797599 32.09309983360238
+ POINT 1537 13.75932779044087 31.59910844945928
+ POINT 1538 16.10341413477412 30.21256867861998
+ POINT 1539 16.63239269868544 30.24523358242805
+ POINT 1540 16.3698240483532 30.66455297149614
+ POINT 1541 16.89070536402862 29.81350550472902
+ POINT 1542 16.60859908664627 29.36193530425236
+ POINT 1543 17.1625462541375 30.26873928275396
+ POINT 1544 16.0904668374591 31.08225823633646
+ POINT 1545 16.6246937806281 31.11843321269683
+ POINT 1546 15.81288509623059 31.48985754125695
+ POINT 1547 16.04545280411266 31.9391559472781
+ POINT 1548 15.51319388940625 31.89262312523499
+ POINT 1549 15.56326374321337 31.03948737260855
+ POINT 1550 13.77222000363087 24.39434126697991
+ POINT 1551 13.50730940690564 24.83959165127776
+ POINT 1552 14.02976238006146 24.83530625723629
+ POINT 1553 12.98553330932471 9.758991772893435
+ POINT 1554 12.72223335676221 10.22272188328008
+ POINT 1555 16.25410351335674 12.9148587217591
+ POINT 1556 16.01906260946011 13.38331048867258
+ POINT 1557 16.5117595380726 13.37602992964366
+ POINT 1558 16.89069502922413 10.18647787299363
+ POINT 1559 16.60858850912514 10.63804911311348
+ POINT 1560 17.13330989107297 10.61778909765387
+ POINT 1561 16.09214844821832 10.65648742134303
+ POINT 1562 16.33476331006715 11.08779864600327
+ POINT 1563 -17.80117652624369 28.04993852124202
+ POINT 1564 -17.49657169072127 27.60644176445565
+ POINT 1565 -19.58406168080147 20.44446288474986
+ POINT 1566 -19.59394278438359 20.00002569746599
+ POINT 1567 -19.99505883837563 20.44454702859078
+ POINT 1568 -18.996847002171 20.45276507073249
+ POINT 1569 -19.3930231142053 20.89717656055036
+ POINT 1570 -19.58406527491918 19.55566925469715
+ POINT 1571 -19.99506063472496 19.55553380055498
+ POINT 1572 -18.99703876946375 19.54715259717118
+ POINT 1573 -19.39321847561576 19.10277045693634
+ POINT 1574 -1.233845495929245 37.56044691729677
+ POINT 1575 -0.9905346840835332 38.05041056493322
+ POINT 1576 -0.7378460571787722 37.58924792034259
+ POINT 1577 -1.759814782842069 38.47357048079215
+ POINT 1578 -1.982162118017038 37.97609568175015
+ POINT 1579 -2.255442778025101 38.42805660065491
+ POINT 1580 -1.503048773376636 33.33593215100788
+ POINT 1581 -1.756818384601298 32.87589913286249
+ POINT 1582 -1.254058713762703 32.88356835326066
+ POINT 1583 13.51221711522611 31.16406500489199
+ POINT 1584 13.97378825536513 31.09637819810725
+ POINT 1585 1.775181014606737 21.33393361663671
+ POINT 1586 1.267840964225153 21.33711381427801
+ POINT 1587 1.523722041841396 20.89935045595586
+ POINT 1588 1.265170094048079 22.20914709544139
+ POINT 1589 1.77056085321017 22.20855342148825
+ POINT 1590 1.516431010267755 22.64600354197079
+ POINT 1591 1.012728381227997 21.77259296305717
+ POINT 1592 0.7612694084626562 21.33800980237632
+ POINT 1593 0.758598538285582 22.21004308353971
+ POINT 1594 1.847863631555612 20.4480851260611
+ POINT 1595 1.340523581174028 20.45126532370239
+ POINT 1596 2.134926569216352 19.99999998535455
+ POINT 1597 2.280691513968954 21.33225925723105
+ POINT 1598 2.785590920387998 21.32882420154674
+ POINT 1599 2.02481043635271 21.7700226155532
+ POINT 1600 2.78116495724771 22.20597296072012
+ POINT 1601 2.276071352572386 22.20687906208259
+ POINT 1602 2.52691537410517 22.64450376665516
+ POINT 1603 -9.899143737765993 12.4849004435783
+ POINT 1604 -9.387390829537839 12.48845944608934
+ POINT 1605 -9.645780226280916 12.0410160502686
+ POINT 1606 -11.94630637827111 14.2647893097616
+ POINT 1607 -12.46345218922917 14.26650973789091
+ POINT 1608 -12.20840695700918 14.7105827019253
+ POINT 1609 -13.22907293656634 11.13290745457848
+ POINT 1610 -13.48445463159971 11.58282180341283
+ POINT 1611 -12.9714364037251 11.58072072087271
+ POINT 1612 -12.45912889682464 11.58045014485459
+ POINT 1613 -11.9508016855418 11.57834567717223
+ POINT 1614 -12.20772749740889 11.128701904356
+ POINT 1615 -12.71451059185801 12.03036449368894
+ POINT 1616 -13.62553305310023 6.037019882652965
+ POINT 1617 -14.1390779208095 5.854807348663457
+ POINT 1618 -13.96434315411798 6.375683521723212
+ POINT 1619 -13.39847526011537 7.408160088352634
+ POINT 1620 -13.61481920361369 7.839222070915377
+ POINT 1621 -13.0814052589453 7.902150069513514
+ POINT 1622 -13.69337197744059 6.949534963734737
+ POINT 1623 -13.1599580327722 7.012462962332874
+ POINT 1624 -14.5037016745593 7.101298192194127
+ POINT 1625 -14.20286038146115 6.771380647742971
+ POINT 1626 -14.7783559058492 6.524088291719242
+ POINT 1627 -13.23627871209868 9.312480837244131
+ POINT 1628 -13.51221183367959 8.835940044420862
+ POINT 1629 -13.02181608086271 8.809752844899524
+ POINT 1630 -16.36981698070831 9.335436989756825
+ POINT 1631 -16.09046066583428 8.917733609398496
+ POINT 1632 -16.62468707069794 8.881556790786455
+ POINT 1633 -15.56325712327145 8.960504702078703
+ POINT 1634 -15.81287888901091 8.510134528156787
+ POINT 1635 -15.51318860052802 8.107370522015474
+ POINT 1636 -16.04544791423854 8.060837516432803
+ POINT 1637 -12.46766878840969 10.67227976168969
+ POINT 1638 -11.95934157712685 10.67017529400733
+ POINT 1639 -10.71091751983426 6.663122417067669
+ POINT 1640 -10.45710194371655 7.096666284170696
+ POINT 1641 -10.46487666458869 6.166894149966415
+ POINT 1642 -10.96746076370507 6.201968922858168
+ POINT 1643 -10.44773102895123 5.275394031275448
+ POINT 1644 -10.20212605088105 5.720747497892338
+ POINT 1645 -9.928437171372778 5.290400873410871
+ POINT 1646 -9.945582807010235 6.18190099210184
+ POINT 1647 -13.2986928764065 5.688395693536721
+ POINT 1648 -13.12801457340368 6.205213648598734
+ POINT 1649 -11.74872710378692 8.418130127367466
+ POINT 1650 -12.02256077486237 7.971839549607667
+ POINT 1651 -12.50944374702482 8.841147771275015
+ POINT 1652 -12.78537686860573 8.36460697845175
+ POINT 1653 -12.56903292510741 7.933544995889006
+ POINT 1654 -12.31858916520195 7.509382640669432
+ POINT 1655 13.43619694655841 5.185526953886848
+ POINT 1656 12.93462220614015 5.358195834077412
+ POINT 1657 13.29868673147849 5.68838933264013
+ POINT 1658 12.6048962546636 4.990129099323558
+ POINT 1659 12.47144390129601 5.488517379573725
+ POINT 1660 12.66773340441992 4.523290710179079
+ POINT 1661 12.20022404450319 4.658903670708396
+ POINT 1662 10.71091693015139 6.663120759878266
+ POINT 1663 10.46487540167239 6.166892274467385
+ POINT 1664 10.96745927067751 6.201966434828546
+ POINT 1665 11.47479568277288 8.879068504656995
+ POINT 1666 11.74872710084068 8.418128977876485
+ POINT 1667 10.41171824790274 4.44204662093386
+ POINT 1668 9.95651127773848 4.316934168875102
+ POINT 1669 10.19419137109885 3.91393666291501
+ POINT 1670 10.72126631852727 4.813787013527604
+ POINT 1671 10.99495611235534 5.244133924789459
+ POINT 1672 10.44772794837044 5.275391038155809
+ POINT 1673 10.95894641188764 4.410789507567511
+ POINT 1674 11.39310410040094 4.215962651334707
+ POINT 1675 11.08355602977641 3.844222258740964
+ POINT 1676 11.76361231084955 4.489943298379086
+ POINT 1677 11.89137865119184 3.919107181901866
+ POINT 1678 11.70510621616581 4.951490272490563
+ POINT 1679 10.26855741345323 2.837344939506088
+ POINT 1680 10.19797132927438 3.43230183825083
+ POINT 1681 9.806904421137391 3.198323297051241
+ POINT 1682 10.65317829943864 3.557414290309588
+ POINT 1683 11.09104496327604 3.357021849792107
+ POINT 1684 15.24378585350844 7.682394375166194
+ POINT 1685 14.91119126151212 7.280158226193516
+ POINT 1686 15.41335252508149 7.2552534786716
+ POINT 1687 14.33938124011792 7.524093148708583
+ POINT 1688 14.48388392770153 8.085767740880334
+ POINT 1689 14.07639118126524 7.906902288220206
+ POINT 1690 13.61481867571485 7.839218526827278
+ POINT 1691 13.75932136329846 8.400893118999029
+ POINT 1692 13.02181590626726 8.80975073334144
+ POINT 1693 12.78537663953285 8.364604900612228
+ POINT 1694 13.47592883520427 9.785178774102992
+ POINT 1695 13.99000741695932 9.792862338836377
+ POINT 1696 13.73926224561804 10.23937500144348
+ POINT 1697 13.236278480666 9.312479110286336
+ POINT 1698 13.51221143214682 8.835937734550996
+ POINT 1699 13.97378393769721 8.903621495943923
+ POINT 1700 11.4612780216533 9.774811388208361
+ POINT 1701 11.70834875389301 10.2227478045437
+ POINT 1702 1.893403551233607 0.5757525887353929
+ POINT 1703 2.220671493500129 0.1236668831597823
+ POINT 1704 2.359744414402249 0.6278542389056427
+ POINT 1705 -9.020619693030262 2.610992623251209
+ POINT 1706 -9.424238324783893 2.359599448271815
+ POINT 1707 -9.474338358545761 2.853388073889197
+ POINT 1708 -9.406414519116504 3.443886808846754
+ POINT 1709 -9.192243991855898 3.8667371366121
+ POINT 1710 -8.859666959835261 3.521795695676809
+ POINT 1711 -9.806915390566399 3.198329514824488
+ POINT 1712 -10.19798187725191 3.432308248445783
+ POINT 1713 -10.26857176218753 2.83735353592188
+ POINT 1714 -0.2472699682428073 1.437936441491353
+ POINT 1715 -2.582068645534674e-06 1.920788194433522
+ POINT 1716 0.2472626424805853 1.437936427731552
+ POINT 1717 -0.247268257212236 2.398961916430443
+ POINT 1718 0.2472643535111566 2.398961902670643
+ POINT 1719 -0.7378459209025934 2.410751873167692
+ POINT 1720 -3.510975514120101 1.270946662206892
+ POINT 1721 -3.322776245011294 0.762200977161605
+ POINT 1722 -2.853429843183762 0.6871825417534015
+ POINT 1723 -3.156651266211425 0.2506822223484442
+ POINT 1724 -2.526771255348011 1.133795929446323
+ POINT 1725 -2.359754750523105 0.6278550165060958
+ POINT 1726 -2.749118087874698 1.631270599590879
+ POINT 1727 -2.255442995214041 1.571943074343573
+ POINT 1728 1.53116419331424 38.96511859947919
+ POINT 1729 1.391479955471506 39.46383466102701
+ POINT 1730 0.7618857048316392 38.5419587525552
+ POINT 1731 0.5146182923979471 39.02481055530693
+ POINT 1732 1.257885274755287 38.51315760964314
+ POINT 1733 1.759808139569742 38.47357029951259
+ POINT 1734 0.9905296510871409 38.0504104525886
+ POINT 1735 -0.4905790953354032 37.11107424397444
+ POINT 1736 -0.2472682834896911 37.60103789161089
+ POINT 1737 0.2472643797585856 37.6010379053717
+ POINT 1738 1.263131334613411 23.08451873542055
+ POINT 1739 1.768522093775502 23.0839250614674
+ POINT 1740 10.17836399587573 30.64876633574936
+ POINT 1741 10.43178957770394 30.2036916661421
+ POINT 1742 9.917079336223154 30.19681981804171
+ POINT 1743 2.526761585236505 38.86620413395363
+ POINT 1744 2.853417999303659 39.31281858657962
+ POINT 1745 4.533434559259351 36.88852576319535
+ POINT 1746 4.788963418436968 37.30790607443685
+ POINT 1747 4.24940701236751 37.28825022373893
+ POINT 1748 -0.7511020128127708 32.88704851349204
+ POINT 1749 -1.004871624037433 32.42701549534664
+ POINT 1750 0.7570181843694639 30.16737890662038
+ POINT 1751 0.2521487164707948 30.16753615186619
+ POINT 1752 0.5048695270937089 29.71821296405268
+ POINT 1753 1.009092401403684 30.61588819116551
+ POINT 1754 1.261813212026598 30.16656500335199
+ POINT 1755 5.068073916803044 30.6133100080666
+ POINT 1756 4.814374367436898 31.05972795409684
+ POINT 1757 5.32423717645129 31.06128530414202
+ POINT 1758 16.9971372534731 13.37045922378724
+ POINT 1759 16.76209634957647 13.83891099070072
+ POINT 1760 18.58096903763212 13.77579904583797
+ POINT 1761 18.85904395297749 13.34143701271937
+ POINT 1762 18.41152250629444 13.29587573790125
+ POINT 1763 18.68665357284071 14.64903426839365
+ POINT 1764 18.29676492885642 15.05256270617449
+ POINT 1765 18.88575798278899 15.06972612425592
+ POINT 1766 17.78489646840998 15.09030766023127
+ POINT 1767 17.98400087835825 15.51099951609354
+ POINT 1768 18.5600217445983 14.22769376801203
+ POINT 1769 18.11860781194196 14.17997612813817
+ POINT 1770 19.15364966814478 14.24346421008305
+ POINT 1771 17.67256729194256 14.23260556757826
+ POINT 1772 17.69351458497638 13.7807108454042
+ POINT 1773 18.99703873975269 19.54715250100616
+ POINT 1774 19.39321851764313 19.1027704587883
+ POINT 1775 18.52185804865407 19.54704832154459
+ POINT 1776 18.71270474241169 19.9999472088743
+ POINT 1777 17.69535052595289 15.99996226585984
+ POINT 1778 18.20721898639934 15.96221731180307
+ POINT 1779 14.56172135096343 23.94597916401752
+ POINT 1780 15.08739392619418 23.94259090424376
+ POINT 1781 14.82034555201745 24.38666761316468
+ POINT 1782 19.39302316315837 20.89717655197163
+ POINT 1783 18.9389913228763 21.35310913845178
+ POINT 1784 18.99684697892711 20.45276516384465
+ POINT 1785 18.5216662878285 20.45266098438309
+ POINT 1786 18.23371033345935 20.90481779098108
+ POINT 1787 18.44846900788159 21.34055417663924
+ POINT 1788 18.58165180641398 21.78818437573758
+ POINT 1789 17.87637081699702 21.33989302826688
+ POINT 1790 14.33939351436823 32.47590433579525
+ POINT 1791 14.48389140697212 31.91422614486741
+ POINT 1792 15.01628294267461 31.87205866229466
+ POINT 1793 14.75329046628237 31.48925416010179
+ POINT 1794 15.24379483009601 32.31759511000062
+ POINT 1795 13.51391520548446 23.95486250753157
+ POINT 1796 13.2557163229842 23.51457606093689
+ POINT 1797 12.99156814797479 23.95834021442671
+ POINT 1798 14.03636817864028 23.9505771134901
+ POINT 1799 14.30341655281701 23.50650040456918
+ POINT 1800 14.0490662851837 23.06997473842002
+ POINT 1801 14.57441945750685 23.06537678894744
+ POINT 1802 14.06279368008757 21.3236640608961
+ POINT 1803 13.53137856169023 21.32075100476631
+ POINT 1804 13.79945769458797 20.88653785779963
+ POINT 1805 16.48589251600749 21.75662015498322
+ POINT 1806 16.7770188066016 21.32987302051025
+ POINT 1807 16.23478715141826 21.32948158311302
+ POINT 1808 17.3448681568828 21.33058411749459
+ POINT 1809 17.55962683130505 21.76632050315274
+ POINT 1810 16.93904168525997 24.42265130776862
+ POINT 1811 17.21421228526815 24.86330083072308
+ POINT 1812 16.6810332475078 24.83472173963332
+ POINT 1813 17.1982158646259 23.98500607585395
+ POINT 1814 16.66503682686555 23.95642698476418
+ POINT 1815 19.16297996782281 24.02058583340057
+ POINT 1816 19.25792778397388 23.55188868076646
+ POINT 1817 19.6018346474257 23.97090400112769
+ POINT 1818 18.66035549167398 24.06458002427793
+ POINT 1819 18.99865807228879 24.48246002560036
+ POINT 1820 14.55271823159151 24.83011771959528
+ POINT 1821 15.07839080682226 24.82672945982152
+ POINT 1822 14.28780763486628 25.27536810389313
+ POINT 1823 13.48363738345204 10.68334955994101
+ POINT 1824 13.99771596520709 10.69103312467439
+ POINT 1825 17.49654751855807 12.39351922586987
+ POINT 1826 17.22317514403901 12.87270591921469
+ POINT 1827 17.0201728164883 12.42839146938536
+ POINT 1828 17.91955247554229 13.28295754083165
+ POINT 1829 18.19151987686094 12.8507518727688
+ POINT 1830 17.47351195554288 13.33558698027175
+ POINT 1831 18.00416107324389 12.39434056037404
+ POINT 1832 18.50176146164216 12.40494748537886
+ POINT 1833 17.80115874569317 11.95002611054472
+ POINT 1834 16.79404890136688 11.97251973589774
+ POINT 1835 16.52067652684781 12.45170642924257
+ POINT 1836 16.02797959823532 12.45898698827148
+ POINT 1837 15.78700936626793 12.00541048997754
+ POINT 1838 15.52043635277687 12.46856278249407
+ POINT 1839 16.05643793044336 11.55103582499389
+ POINT 1840 15.5488946849849 11.56061161921647
+ POINT 1841 16.57287799135018 11.53259751676433
+ POINT 1842 17.07237428099067 11.50928255690713
+ POINT 1843 15.83583901726724 10.22173398984722
+ POINT 1844 15.57327102716685 9.802415814168842
+ POINT 1845 16.10340565717593 9.787419712774863
+ POINT 1846 15.56201381820924 10.67148352273701
+ POINT 1847 16.63238319420686 9.754752209684828
+ POINT 1848 17.16253549533622 9.731242758971581
+ POINT 1849 16.36981520410647 9.335434034006447
+ POINT 1850 16.62468438429443 8.881552759389605
+ POINT 1851 16.09045850341202 8.917730295952133
+ POINT 1852 -18.71270480363148 19.99994720870178
+ POINT 1853 -18.52166623703531 20.45266088450229
+ POINT 1854 -18.52185800432806 19.54704841094098
+ POINT 1855 -19.52620606861738 21.34480663718991
+ POINT 1856 -19.49788131345209 21.77367208204773
+ POINT 1857 -19.95652172785348 21.31804421550326
+ POINT 1858 -18.93899138998692 21.35310882317254
+ POINT 1859 -15.41336472355292 32.74473177212385
+ POINT 1860 -14.91120300548017 32.71982820066302
+ POINT 1861 -15.24379759687971 32.31759127892943
+ POINT 1862 -15.51319663933861 31.8926193258387
+ POINT 1863 -15.01628432575631 31.8720563054135
+ POINT 1864 -15.8128873248544 31.48985418888792
+ POINT 1865 -16.04545639284706 31.93915110915433
+ POINT 1866 -13.73926553271729 29.7606245440472
+ POINT 1867 -13.9977196654956 29.30896632719983
+ POINT 1868 -13.48364033262393 29.31665160461403
+ POINT 1869 -16.63239437432929 30.24523068926878
+ POINT 1870 -16.89070674738754 29.81350290745965
+ POINT 1871 -17.16254826435143 30.26873590905672
+ POINT 1872 -17.58991750209542 28.49978947605134
+ POINT 1873 -18.10312108953776 28.50158849460802
+ POINT 1874 -14.02976207391727 24.83530603116176
+ POINT 1875 -13.50730912711314 24.83959146419358
+ POINT 1876 -13.7722197102861 24.39434106981482
+ POINT 1877 -9.910917163711101 29.30166999886159
+ POINT 1878 -10.16379441977193 28.85693149401143
+ POINT 1879 -10.42338196742408 29.30700642143803
+ POINT 1880 -8.865707288319939 20.4402358718522
+ POINT 1881 -8.354951980244287 20.44018950619541
+ POINT 1882 -8.61056647960487 20.88042659780381
+ POINT 1883 -8.86570719768363 19.55976134425465
+ POINT 1884 -8.354952278862285 19.55980826280008
+ POINT 1885 -8.610566687586559 19.11957082681093
+ POINT 1886 -9.121386103645744 19.99999862799004
+ POINT 1887 -9.377000603006326 20.44023571959844
+ POINT 1888 -9.377000512370016 19.55976119200088
+ POINT 1889 -8.865603022394847 21.32049699917977
+ POINT 1890 -8.354847714319193 21.32045063352298
+ POINT 1891 -8.099972462421654 21.76042830181979
+ POINT 1892 -7.844935919631678 21.32035790044383
+ POINT 1893 -8.354715320124482 22.20063713853177
+ POINT 1894 -7.844803525436967 22.20054440545263
+ POINT 1895 -8.865674199362843 22.20088990639256
+ POINT 1896 -8.610505262378155 22.6410060100254
+ POINT 1897 -8.354985291815844 16.91842867771209
+ POINT 1898 -8.610508524984098 17.358992612215
+ POINT 1899 -8.865944756334432 16.91817546724494
+ POINT 1900 -5.563175305433118 20.88175519528509
+ POINT 1901 -5.819523783751198 20.44055366808308
+ POINT 1902 -5.314081970855431 20.4412012668848
+ POINT 1903 -6.323600721688926 20.44055355863392
+ POINT 1904 -6.07450738711124 19.99999963023362
+ POINT 1905 -7.845909792127558 19.5598084686856
+ POINT 1906 -7.337224145127458 19.55973210578316
+ POINT 1907 -7.591126121765114 19.11954138245392
+ POINT 1908 -7.085296070269434 19.99999935639965
+ POINT 1909 -6.83051239990699 19.55973227016798
+ POINT 1910 -8.101050302224628 19.99999898612932
+ POINT 1911 -7.84590949350956 20.44018971208093
+ POINT 1912 -4.813437732774505 20.44120133195445
+ POINT 1913 -5.069786211092584 19.99999980475244
+ POINT 1914 -4.81343786679399 19.55879836960208
+ POINT 1915 -5.314082104874918 19.55879830453243
+ POINT 1916 -4.309046734147286 19.55755213850044
+ POINT 1917 -4.553342627929618 19.11635063828043
+ POINT 1918 -4.309046659354325 20.44244765252682
+ POINT 1919 -4.553342419117173 20.88364911465918
+ POINT 1920 -6.321208714327986 18.67923371725688
+ POINT 1921 -5.814542592123692 18.67893193845749
+ POINT 1922 -6.067133751274726 18.23927391170671
+ POINT 1923 -5.563175657876638 19.11824430669487
+ POINT 1924 -5.309100694823378 18.67828450114469
+ POINT 1925 -6.575529014970982 19.11917838177958
+ POINT 1926 -6.828120174122017 18.6795203550288
+ POINT 1927 -5.819524002175232 19.55944574184523
+ POINT 1928 -6.323600940112959 19.55944563239606
+ POINT 1929 -0.5146273697762991 39.02481064861751
+ POINT 1930 -0.7618926205908836 38.54195883210498
+ POINT 1931 -1.257892059341357 38.51315782905916
+ POINT 1932 -1.53117271934942 38.96511874796391
+ POINT 1933 -0.940335173160049 39.49328748376172
+ POINT 1934 -1.391488828330695 39.46383435979364
+ POINT 1935 -1.302906939267033 39.95751571405174
+ POINT 1936 -1.893411551831407 39.42424701152662
+ POINT 1937 -1.723324288351572 36.58041784013928
+ POINT 1938 -1.475258125341042 37.06753940845914
+ POINT 1939 -1.229223032035015 36.61216270438628
+ POINT 1940 -2.223574747428835 37.48318817291252
+ POINT 1941 -2.46865780151201 36.99209310268357
+ POINT 1942 -2.722873167283246 37.43948673138395
+ POINT 1943 -1.727946752245803 37.52870205304977
+ POINT 1944 9.124384730034761 25.2901944687983
+ POINT 1945 9.380903693723068 25.73399854252466
+ POINT 1946 8.869536394962354 25.73292170940668
+ POINT 1947 8.867787034579436 24.84742875339725
+ POINT 1948 8.611808211452907 24.40495794646223
+ POINT 1949 8.357038608147516 24.84664682874531
+ POINT 1950 9.37915433334015 24.84850558651523
+ POINT 1951 9.635034859880143 24.40616641167393
+ POINT 1952 9.891632555335468 24.84893212707499
+ POINT 1953 8.10306863199613 25.28792614032669
+ POINT 1954 7.847089808869599 24.84545533339167
+ POINT 1955 7.337860839610064 24.84465823087261
+ POINT 1956 7.591830815761451 24.40337891929124
+ POINT 1957 7.084483663987436 25.28568916804524
+ POINT 1958 6.829224670879288 24.84361275394481
+ POINT 1959 11.17838537690847 23.52246049961141
+ POINT 1960 11.4371216212408 23.08138069299567
+ POINT 1961 10.9206635519637 23.08206164870911
+ POINT 1962 15.02252590981234 31.03532490076284
+ POINT 1963 14.49013437410986 31.07749238333559
+ POINT 1964 14.2430236988951 30.6424489387683
+ POINT 1965 15.30010765104086 30.62772559584235
+ POINT 1966 2.526915485973436 17.35549624102799
+ POINT 1967 2.276071431689728 17.79312093621829
+ POINT 1968 2.781165078003321 17.79402703104667
+ POINT 1969 6.346618006894577 8.933221976655281
+ POINT 1970 6.606300654387716 8.482722162553308
+ POINT 1971 6.859007165943082 8.928198624363933
+ POINT 1972 5.835923918840571 8.936439330716784
+ POINT 1973 6.088630430395938 9.381915792527408
+ POINT 1974 3.813293467525553 0.8400220701018267
+ POINT 1975 4.278266624098441 0.9371921865469454
+ POINT 1976 4.091218596162663 0.4229233416757498
+ POINT 1977 0.7378420180172898 2.410751924726134
+ POINT 1978 1.233841522613396 2.439553016285871
+ POINT 1979 0.9905295332508535 1.949589272233458
+ POINT 1980 0.4905763428736994 2.888925646723056
+ POINT 1981 8.615527392862056 13.82496521644805
+ POINT 1982 8.869539085606789 14.26707992304672
+ POINT 1983 8.359008517018593 14.26876890588306
+ POINT 1984 7.109843205144307 9.375226262222675
+ POINT 1985 7.369525852637445 8.924726448120705
+ POINT 1986 3.536686478737197 13.8361386042247
+ POINT 1987 3.790057778698816 13.39355052709382
+ POINT 1988 3.284192797098449 13.39405264356153
+ POINT 1989 3.789177750276934 14.27725402423099
+ POINT 1990 3.283312768676568 14.27775614069871
+ POINT 1991 3.540719142764858 10.28304212363626
+ POINT 1992 3.793978675026311 10.72885668139838
+ POINT 1993 3.286497665917229 10.72924169735144
+ POINT 1994 6.845584714338232 10.71830373756566
+ POINT 1995 7.355184401511213 10.7157436111351
+ POINT 1996 7.09778359222352 11.16341894215851
+ POINT 1997 7.361673707732298 9.821191246260845
+ POINT 1998 6.851155021037934 9.824663422504075
+ POINT 1999 4.296500541441507 13.39272956312007
+ POINT 2000 4.044006859802759 12.95064360245691
+ POINT 2001 4.802971515540548 13.39198494333306
+ POINT 2002 4.549022434436605 13.83489186796998
+ POINT 2003 4.297887859095104 12.50674192674635
+ POINT 2004 3.791445096352413 12.5075628907201
+ POINT 2005 4.805074931872197 12.50557276622567
+ POINT 2006 4.552513168421852 12.06249205448886
+ POINT 2007 4.301274159001078 10.72795370371833
+ POINT 2008 4.809681854713771 10.7267995158349
+ POINT 2009 4.556607847586633 10.28150291979977
+ POINT 2010 4.047052682153449 11.17415327743351
+ POINT 2011 4.299837130886486 11.6184557573815
+ POINT 2012 3.79254164691172 11.61935873506155
+ POINT 2013 4.80702420366358 11.61728659686082
+ POINT 2014 0.7573648401832791 10.72884628711409
+ POINT 2015 0.2524954018262905 10.72868903454322
+ POINT 2016 0.5048694975539831 10.28178714397273
+ POINT 2017 2.779998485031843 10.72963471324423
+ POINT 2018 3.033258017293297 11.17544927100636
+ POINT 2019 1.22366534318951 19.99999999772072
+ POINT 2020 0.8995237534752946 20.45126532761548
+ POINT 2021 1.847863650156727 19.55191485745089
+ POINT 2022 2.318125048484836 19.5519148489978
+ POINT 2023 -18.93911412821423 18.64650966130721
+ POINT 2024 -18.58166026436047 18.21127422426079
+ POINT 2025 -18.44873810630657 18.65901836236396
+ POINT 2026 -19.52614063366966 18.65502631883318
+ POINT 2027 -18.87780139947743 17.75460066637132
+ POINT 2028 -18.38742537756978 17.76710936742808
+ POINT 2029 -19.25342558557374 17.32881436986417
+ POINT 2030 -19.44766047236443 17.77297922669689
+ POINT 2031 -11.69163369768068 12.03021037174421
+ POINT 2032 -11.44023229826493 11.57846213124561
+ POINT 2033 -11.43422134923478 12.47855566601287
+ POINT 2034 -11.94479073651165 12.47843921193948
+ POINT 2035 -10.92866196056182 11.58403125210506
+ POINT 2036 -10.41689637261445 11.58759636307505
+ POINT 2037 -10.66929872245644 12.03389193678758
+ POINT 2038 -11.18782994842294 11.13216655753308
+ POINT 2039 -9.904431558833004 11.59293222934731
+ POINT 2040 -9.39267865060485 11.59649123185834
+ POINT 2041 -9.139626886740061 11.15213642340234
+ POINT 2042 -8.880975554187973 11.60022024432364
+ POINT 2043 -10.16379479693838 11.14307154466478
+ POINT 2044 -9.910917079266454 10.69833254287327
+ POINT 2045 -10.4233818930479 10.69299667660101
+ POINT 2046 -8.370126273665381 11.60298203772225
+ POINT 2047 -8.62317803753017 12.04733684617825
+ POINT 2048 -6.319914164590672 17.79970756621019
+ POINT 2049 -5.813248042386378 17.79940578741079
+ POINT 2050 -5.812970532530068 16.03929555219032
+ POINT 2051 -6.066345556101558 16.47969823346978
+ POINT 2052 -6.320151886932637 16.03908136247431
+ POINT 2053 -5.812596328700657 16.91987593255003
+ POINT 2054 -6.319777683103225 16.91966174283402
+ POINT 2055 -5.306138086716437 16.03968131654242
+ POINT 2056 -5.559944417547516 15.59906444554695
+ POINT 2057 -4.799950565874155 16.03961222338507
+ POINT 2058 -5.052976680856709 16.47984333002844
+ POINT 2059 -6.574690167020133 15.59804862668566
+ POINT 2060 -6.828065190591623 16.03845130796511
+ POINT 2061 -15.25853880596588 12.9242213232549
+ POINT 2062 -15.52043648370752 12.46856362456286
+ POINT 2063 -15.01756861930122 12.47064487481246
+ POINT 2064 -14.50591702520376 13.37825294329215
+ POINT 2065 -13.99649188437294 13.37881945166879
+ POINT 2066 -14.24624580072877 12.92686908188113
+ POINT 2067 -14.50520649728844 12.47612567984228
+ POINT 2068 -14.76710417503007 12.02046798115024
+ POINT 2069 -13.99841660872912 11.58047866164933
+ POINT 2070 -13.74078007588788 12.02829192794356
+ POINT 2071 -13.99578135645762 12.47669218821891
+ POINT 2072 -13.48181937932821 12.47903532998241
+ POINT 2073 -17.13331118398057 10.61779162646253
+ POINT 2074 -17.656383083496 10.60573919584698
+ POINT 2075 -17.36873112769916 11.06026014994149
+ POINT 2076 -16.02797983714253 12.45898801730209
+ POINT 2077 -16.52067686245398 12.45170765846319
+ POINT 2078 -16.25410369568363 12.9148597141664
+ POINT 2079 -15.78700965047787 12.00541156885965
+ POINT 2080 -17.58990196620047 11.50018232123824
+ POINT 2081 -17.80115956030314 11.95002810346316
+ POINT 2082 -18.10310561939233 11.49837858894322
+ POINT 2083 -17.07237505905118 11.50928449184498
+ POINT 2084 -17.49654816974892 12.39352110356614
+ POINT 2085 -16.79404945073268 11.9725213123703
+ POINT 2086 -16.57287861223137 11.53259914107355
+ POINT 2087 -17.02017330927379 12.42839300923462
+ POINT 2088 -17.22317558147022 12.87270744965903
+ POINT 2089 -10.15245041339834 12.93005084479948
+ POINT 2090 -10.41083981014142 12.48260744897875
+ POINT 2091 -10.92260539808879 12.47904233800876
+ POINT 2092 -11.17576243691975 12.92727117820404
+ POINT 2093 -12.45674776247602 13.37407164467716
+ POINT 2094 -12.19976115126335 12.92710572491763
+ POINT 2095 -11.94436499927842 13.37375042596768
+ POINT 2096 -12.45717349970925 12.47876043064897
+ POINT 2097 -12.96948100660971 12.47903100666709
+ POINT 2098 -13.22448228717945 12.92743126694244
+ POINT 2099 -12.7156240960693 13.82239971451288
+ POINT 2100 -12.97772467480737 14.26819310667658
+ POINT 2101 -13.74302984524772 13.82714319818918
+ POINT 2102 -13.48335862077273 13.37575933677816
+ POINT 2103 -12.97102024805423 13.37575501346284
+ POINT 2104 -12.66774364330618 4.523299107507239
+ POINT 2105 -12.60490407255786 4.990136093565923
+ POINT 2106 -12.20023269789926 4.658910900843035
+ POINT 2107 -12.93462919488069 5.358202577882016
+ POINT 2108 -12.47144927438711 5.488522975166397
+ POINT 2109 -13.43620550685972 5.185534732811357
+ POINT 2110 -14.33938229564766 7.524096539708034
+ POINT 2111 -14.9111947654232 7.280162642147666
+ POINT 2112 -15.24378862055976 7.682398206427763
+ POINT 2113 -15.41335736818264 7.255259352596772
+ POINT 2114 -15.01627536647982 8.127933305249282
+ POINT 2115 -15.30010260228938 9.372269247130333
+ POINT 2116 -15.02252082546601 8.964670165888624
+ POINT 2117 -14.24302038469975 9.357551373852861
+ POINT 2118 -14.50635377271081 9.811747310474253
+ POINT 2119 -13.99000785292662 9.792863973386861
+ POINT 2120 -16.10340678976494 9.787421896710498
+ POINT 2121 -16.63238487037844 9.754755103146911
+ POINT 2122 -16.89069641342317 10.18648047123871
+ POINT 2123 -17.16253750713551 9.731246135309691
+ POINT 2124 -16.60858944999246 10.6380511653244
+ POINT 2125 -11.70834855106328 10.22274842325977
+ POINT 2126 -11.44840726006248 10.67917056592608
+ POINT 2127 -10.94524324959301 9.788054215548343
+ POINT 2128 -10.68395920468744 10.24000068499402
+ POINT 2129 -10.93683692235937 10.68473968678553
+ POINT 2130 -11.47479555660216 8.87906931844303
+ POINT 2131 -11.20910685279271 9.331122511448264
+ POINT 2132 -11.46127783719861 9.774811991078451
+ POINT 2133 -11.97221215426297 9.765816719159695
+ POINT 2134 -12.23551219984005 9.302086962350581
+ POINT 2135 -12.48258291370472 9.750023394531905
+ POINT 2136 -11.99907298758307 8.856941095902805
+ POINT 2137 -13.48363744127368 10.68335058227913
+ POINT 2138 -12.97061921339908 10.68124949973901
+ POINT 2139 -12.72223329311703 10.22272288939034
+ POINT 2140 -13.73926247952205 10.23937626872396
+ POINT 2141 -13.99771620268931 10.69103422356342
+ POINT 2142 -13.47592909151099 9.785180332102566
+ POINT 2143 -12.98553333869411 9.758993132581228
+ POINT 2144 -10.99496024845769 5.244137851664762
+ POINT 2145 -10.72127136894942 4.813791227183295
+ POINT 2146 -11.76362091609507 4.48995017920419
+ POINT 2147 -11.70511237026007 4.951495769211457
+ POINT 2148 -11.39311338658647 4.215969615852156
+ POINT 2149 -11.89139041445578 3.919115893213245
+ POINT 2150 -12.24027988776031 5.8641325949175
+ POINT 2151 -11.91055476543747 5.496066110601405
+ POINT 2152 -11.20040264363509 5.788708193054712
+ POINT 2153 -11.44644349888066 6.284936460155964
+ POINT 2154 -11.47394298363328 5.327105388962559
+ POINT 2155 -12.58774158616357 7.077264164985817
+ POINT 2156 -12.04126943591853 7.115558718704478
+ POINT 2157 -11.99490361784541 6.277557986686686
+ POINT 2158 -12.55579812679505 6.270014851251677
+ POINT 2159 -12.88263830348879 6.618639040367921
+ POINT 2160 -11.7619617379154 6.690818716490142
+ POINT 2161 12.04126828125696 7.115556461827698
+ POINT 2162 11.49280873218955 7.122935250752073
+ POINT 2163 11.76196034822392 6.690816131315052
+ POINT 2164 11.49828322279317 7.993966546699665
+ POINT 2165 12.0225605432701 7.971838012441538
+ POINT 2166 12.88263546208822 6.61863544281538
+ POINT 2167 13.12801043982883 6.205208828783831
+ POINT 2168 12.55579487503194 6.270010728359129
+ POINT 2169 13.69336976028337 6.949530619644269
+ POINT 2170 13.96433801939816 6.375677941228949
+ POINT 2171 13.62552731853477 6.037014047096381
+ POINT 2172 14.13907079774611 5.854800214333848
+ POINT 2173 11.99490119766059 6.277554553029752
+ POINT 2174 11.44644164859318 6.284933341954128
+ POINT 2175 11.20040012011418 5.788704856543246
+ POINT 2176 11.91055022392465 5.49606120424435
+ POINT 2177 12.2402761754012 5.864127938998204
+ POINT 2178 11.47393849027101 5.327100831915041
+ POINT 2179 9.945582057420673 6.181899969396367
+ POINT 2180 10.20212439794679 5.720745644346648
+ POINT 2181 9.928434604118719 5.290398733084792
+ POINT 2182 8.556931258789588 2.528832819977453
+ POINT 2183 8.146974075985931 2.334700766962239
+ POINT 2184 8.559631278214885 1.92425070776564
+ POINT 2185 15.01627398335804 8.127930948668869
+ POINT 2186 15.51318585031227 8.107366722466351
+ POINT 2187 15.56325582361871 8.960502416532755
+ POINT 2188 15.81287665995519 8.510131175388402
+ POINT 2189 16.04544432483895 8.060832677422217
+ POINT 2190 14.75328392450536 8.510740088180491
+ POINT 2191 13.08140472470578 7.902147488418196
+ POINT 2192 13.39847454267256 7.408156657639373
+ POINT 2193 13.15995580927431 7.012459581235187
+ POINT 2194 12.58774024447741 7.077261480810485
+ POINT 2195 12.31858862844304 7.509380600247505
+ POINT 2196 12.56903250649056 7.933543031424325
+ POINT 2197 10.94524346823205 9.788053798414385
+ POINT 2198 11.20910703176076 9.331121907385405
+ POINT 2199 10.95876112935163 8.892310914863021
+ POINT 2200 10.43863740166071 8.90091810703888
+ POINT 2201 10.70432605267283 8.448864704310473
+ POINT 2202 10.17836257478566 9.351235759588613
+ POINT 2203 9.923927498106863 8.907789549036064
+ POINT 2204 10.43178843022046 9.796310885123368
+ POINT 2205 9.917078526666614 9.803182327120552
+ POINT 2206 10.683959420113 10.24000036594633
+ POINT 2207 0.4257056342687726 0.4866078143970918
+ POINT 2208 0.4258045314381747 0.00453325099778762
+ POINT 2209 -8.556941856736707 2.528837422625263
+ POINT 2210 -8.610159650802313 3.016790167285516
+ POINT 2211 -8.395989123541707 3.439640495050862
+ POINT 2212 -8.14698450737254 2.334704873539675
+ POINT 2213 -7.792710741676334 2.625579213893601
+ POINT 2214 -8.55964628277413 1.924257823018384
+ POINT 2215 -9.473525601179848 4.277847459291598
+ POINT 2216 -8.926778041898604 4.355756346121653
+ POINT 2217 -9.691050900332758 4.805957037797565
+ POINT 2218 -9.956516850290052 4.316937828288013
+ POINT 2219 -8.686199335312255 4.812171506430753
+ POINT 2220 -8.404917725988305 4.401061183751255
+ POINT 2221 -9.445445922262575 5.251310504414456
+ POINT 2222 -10.19419874351271 3.913941535915821
+ POINT 2223 -10.41172404266562 4.442051114421789
+ POINT 2224 -10.95895326217208 4.410794934811104
+ POINT 2225 -11.08356606030267 3.84422950309065
+ POINT 2226 -10.65318906962747 3.557421534579559
+ POINT 2227 -11.09105814178689 3.357030647526714
+ POINT 2228 -9.694219594930232 6.638197533051649
+ POINT 2229 -9.431468981222594 6.192050880977571
+ POINT 2230 -0.7570180027335149 9.832621255886785
+ POINT 2231 -0.5048693800457256 10.28178717573282
+ POINT 2232 -0.2521485634907947 9.832463971555836
+ POINT 2233 -6.855131749277465 1.732845876664869
+ POINT 2234 -6.972438504319116 2.219795679489987
+ POINT 2235 -6.414622035057123 1.574492892908077
+ POINT 2236 -6.765669841096464 1.179115021389632
+ POINT 2237 -1.004871482698477 7.572984637225677
+ POINT 2238 -1.257490486514399 8.028793797334046
+ POINT 2239 -0.7545338586426834 8.025313601582315
+ POINT 2240 -1.762470594293599 8.030999493773637
+ POINT 2241 -1.512132970237805 8.483328458130275
+ POINT 2242 -1.229222734249484 3.387837151439014
+ POINT 2243 -0.9842473157104142 3.857601341818763
+ POINT 2244 -2.760974422104667 6.228081510033119
+ POINT 2245 -2.253497692870489 6.221058881823054
+ POINT 2246 -2.513284803608339 6.678759929530004
+ POINT 2247 -2.22068215594449 0.1236680774559861
+ POINT 2248 -1.893412282768675 0.5757529280991733
+ POINT 2249 -0.7618927259509458 1.458040956527683
+ POINT 2250 -0.514627501401715 0.975189189825712
+ POINT 2251 -0.9403354900406863 0.5067124244511273
+ POINT 2252 -1.391489330979924 0.5361655784306855
+ POINT 2253 -1.302907496264832 0.04248432242006185
+ POINT 2254 -1.531173210898604 1.03488105453053
+ POINT 2255 -1.759815051157529 1.526429257888473
+ POINT 2256 -1.982161883684216 2.023903928033029
+ POINT 2257 -0.9905345662098708 1.949589159885626
+ POINT 2258 -1.233845294320426 2.439552824859994
+ POINT 2259 -1.257892099368779 1.486841908219986
+ POINT 2260 -4.253221810686109 1.820570946531706
+ POINT 2261 -4.758491289411085 1.8896992927888
+ POINT 2262 0.9403284851173297 39.49328748546868
+ POINT 2263 1.302900066834092 39.9575161643721
+ POINT 2264 0.4257054490154915 39.51339213116585
+ POINT 2265 0.4258043460689575 39.99546675296004
+ POINT 2266 0.7378421542620126 37.58924786878497
+ POINT 2267 1.23384172418566 37.56044672587291
+ POINT 2268 0.4905764528571049 37.11107417865601
+ POINT 2269 -0.2485634106147014 34.74540615296891
+ POINT 2270 -0.4944721332766874 35.20892213996861
+ POINT 2271 -0.7430353076084667 34.7387144383873
+ POINT 2272 0.248563135802923 34.74540613716317
+ POINT 2273 -3.852885629984648e-08 34.27519843558186
+ POINT 2274 -0.984247561800016 36.14239856410436
+ POINT 2275 -0.7361813987894855 36.62952013242423
+ POINT 2276 -0.2456036251004044 36.64131010369253
+ POINT 2277 -0.7400749794124697 35.68099320876465
+ POINT 2278 -1.233116612657999 35.66363578072671
+ POINT 2279 -0.2456030824187044 35.68768492334626
+ POINT 2280 -0.5050495520169673 27.93392892167996
+ POINT 2281 -0.2524953199740186 28.37907783165175
+ POINT 2282 -0.7575449060331049 28.37910298308664
+ POINT 2283 0.5049254003565739 26.16245156440273
+ POINT 2284 0.2524838536841221 26.60459196252057
+ POINT 2285 0.7574092359319105 26.60463622076165
+ POINT 2286 1.262484608430572 26.60474311400658
+ POINT 2287 1.010043061758121 27.04688351212442
+ POINT 2288 1.767930132642603 27.49060027590907
+ POINT 2289 2.02050092362578 27.04726519540428
+ POINT 2290 2.2733126220116 27.490875065944
+ POINT 2291 4.294356946623791 24.8410616389421
+ POINT 2292 4.547087505439189 24.40041073521517
+ POINT 2293 4.800380884839186 24.84120087084955
+ POINT 2294 4.293926155091318 23.96024866126563
+ POINT 2295 4.799950093306713 23.96038789317308
+ POINT 2296 3.788414878485399 23.96059221848699
+ POINT 2297 4.041277466352923 23.5205693764449
+ POINT 2298 1.514809999556898 24.40061413188652
+ POINT 2299 1.767492707689488 23.96146212230959
+ POINT 2300 1.262539709988568 23.9615922644941
+ POINT 2301 7.321627964579404 38.17042681938287
+ POINT 2302 7.793206680574138 37.97435229673911
+ POINT 2303 7.678404262385088 38.46732542318286
+ POINT 2304 6.972433698867157 37.78020975935011
+ POINT 2305 6.855127394446583 38.26716082157134
+ POINT 2306 6.414615189107867 38.42551451657923
+ POINT 2307 6.765662894204413 38.82088748771397
+ POINT 2308 5.835924386613025 31.06356123096226
+ POINT 2309 6.346618511134158 31.06677866630198
+ POINT 2310 6.088630850338571 30.61808479345149
+ POINT 2311 5.582224837246878 31.5099791769925
+ POINT 2312 10.95894851210964 35.58920884422533
+ POINT 2313 11.39310711972735 35.78403513220901
+ POINT 2314 10.72126794961869 35.18621162434592
+ POINT 2315 10.41172000961541 35.55795193531766
+ POINT 2316 10.44772930264001 34.72460793267786
+ POINT 2317 10.99495780513424 34.75586484158553
+ POINT 2318 9.020612145212025 37.38901099607349
+ POINT 2319 9.424228545153195 37.64040579751443
+ POINT 2320 9.474330615488972 37.14661597391932
+ POINT 2321 8.40491449200708 35.59893959494738
+ POINT 2322 8.926774996129321 35.64424422876988
+ POINT 2323 8.686196885775953 35.18782930360295
+ POINT 2324 8.152785656806662 36.06385741842882
+ POINT 2325 7.912207546453292 35.6074424932619
+ POINT 2326 9.956512910039363 35.68306455775935
+ POINT 2327 9.473521881426226 35.72215416875295
+ POINT 2328 9.691048418511331 35.19404432643185
+ POINT 2329 10.19419347253031 36.08606177763876
+ POINT 2330 9.192239487657353 36.13326446009738
+ POINT 2331 9.406409183385882 36.55611572705381
+ POINT 2332 8.859662298088979 36.47820578707073
+ POINT 2333 10.19797450918269 36.5676960857483
+ POINT 2334 9.806907805057346 36.80167464694597
+ POINT 2335 10.26856200452538 37.16265232046304
+ POINT 2336 6.871912061838399 35.54333618666676
+ POINT 2337 7.405021657601408 35.59824784517664
+ POINT 2338 7.126969115489866 36.01744865823345
+ POINT 2339 7.657150492801826 35.13333002169522
+ POINT 2340 6.621960666341595 35.0990227984202
+ POINT 2341 6.888811633623055 34.66573394307474
+ POINT 2342 6.360807696014708 34.64062136788498
+ POINT 2343 6.343908124230053 35.518223611477
+ POINT 2344 7.402796728654058 34.67408026698564
+ POINT 2345 7.141643758327172 34.21567883645042
+ POINT 2346 7.909982617505943 34.68327491507089
+ POINT 2347 3.322763046202144 39.2378007288512
+ POINT 2348 3.15663647718721 39.74932014657087
+ POINT 2349 3.813291001601433 39.15997825895766
+ POINT 2350 4.091217816567636 39.57707682242515
+ POINT 2351 3.510964067743604 38.72905450866509
+ POINT 2352 2.255436314939442 38.42805648019456
+ POINT 2353 1.982157396380489 37.97609549035852
+ POINT 2354 2.749110842047252 38.36872932479956
+ POINT 2355 6.081230166453511 35.97194010898045
+ POINT 2356 5.818441994459794 36.44062612474002
+ POINT 2357 6.331071347733141 36.43122301548313
+ POINT 2358 5.320795889254486 36.4447624160653
+ POINT 2359 5.570637070534115 36.904045322568
+ POINT 2360 5.831278770956706 35.52762672073389
+ POINT 2361 5.970382527196483 38.42268507006546
+ POINT 2362 6.061700466822952 37.87411431502481
+ POINT 2363 5.314747458531205 38.19213207237964
+ POINT 2364 5.061201838228348 37.78945770174573
+ POINT 2365 5.345229385120188 37.38973324120216
+ POINT 2366 5.842875490325496 37.38559694987687
+ POINT 2367 6.287108152236881 37.38842639639064
+ POINT 2368 5.556022539290377 38.55085980808124
+ POINT 2369 5.910327271106762 39.10675356293056
+ POINT 2370 4.527223806949365e-08 28.82425190516497
+ POINT 2371 0.2524954118648361 29.271311063285
+ POINT 2372 -0.2524953073975582 29.27131105117846
+ POINT 2373 0.7573648797635052 29.27115381803919
+ POINT 2374 0.2524953992883756 28.37907784375829
+ POINT 2375 2.273105925774813 30.16491138028067
+ POINT 2376 1.767218293970705 30.16613550136842
+ POINT 2377 1.515144076936485 29.71762621682329
+ POINT 2378 2.526574159573979 27.93457399209241
+ POINT 2379 2.779582705512834 28.37954785163075
+ POINT 2380 2.273750376967278 28.37918400598714
+ POINT 2381 3.286081896042008 28.37994089986349
+ POINT 2382 3.033258113435307 28.82455091375822
+ POINT 2383 3.538866301224259 27.9356384317024
+ POINT 2384 3.792541709146731 28.38064149382986
+ POINT 2385 2.779144950557156 27.49123891158762
+ POINT 2386 -0.2509574395584928 32.89023083452718
+ POINT 2387 -0.5001445292837633 33.34678369244119
+ POINT 2388 -0.248563270487983 33.81258223243197
+ POINT 2389 -0.7487078437422611 33.80939991139683
+ POINT 2390 0.2485632759296414 33.81258221662623
+ POINT 2391 0.7557252605028959 31.06778977059484
+ POINT 2392 0.5035766139793988 31.51991170020357
+ POINT 2393 0.2521487272230526 31.06882402404262
+ POINT 2394 1.512133316893194 31.51667185955954
+ POINT 2395 1.257490837521165 31.97120645676332
+ POINT 2396 1.762471007155117 31.96900086956706
+ POINT 2397 1.26052028816003 31.06697586732646
+ POINT 2398 4.299971210771425 32.85149278176542
+ POINT 2399 4.813858896773226 32.84793939933139
+ POINT 2400 4.555689088750212 33.29824097344651
+ POINT 2401 4.047040589691667 32.40376536153468
+ POINT 2402 3.788870781668652 32.85406693564981
+ POINT 2403 1.99779136886551 34.24333877774004
+ POINT 2404 1.739534188555335 34.71160974839909
+ POINT 2405 2.242930868975687 34.69789125435826
+ POINT 2406 1.750101670519205 33.79266021463997
+ POINT 2407 2.253498350939557 33.77894172059914
+ POINT 2408 4.811613439274451 30.16570216508861
+ POINT 2409 4.556608060237682 29.71849742642267
+ POINT 2410 4.303205728751885 30.16454791935548
+ POINT 2411 5.321476248288842 30.16725951513379
+ POINT 2412 5.830756015410285 30.16946429579235
+ POINT 2413 6.341450139931419 30.17268173113207
+ POINT 2414 5.574295537881691 29.72185645281436
+ POINT 2415 4.303354423758809 31.05895384807756
+ POINT 2416 4.559517683407055 31.50692914415298
+ POINT 2417 4.303319379261703 31.953673122892
+ POINT 2418 4.814339322939793 31.95444722891127
+ POINT 2419 3.792218950158929 31.95624727677639
+ POINT 2420 3.53960420638969 31.50780686224725
+ POINT 2421 3.283325416819654 31.95789910088994
+ POINT 2422 18.93911406219143 18.64650935978337
+ POINT 2423 19.5261405338395 18.65502620489522
+ POINT 2424 19.39362763295739 15.11254594470878
+ POINT 2425 18.99857188883907 15.51737654824043
+ POINT 2426 19.25787290188996 16.44788794426737
+ POINT 2427 18.75405232248962 16.85355794479968
+ POINT 2428 19.18738723924495 16.90476516850342
+ POINT 2429 18.37155330956431 16.4239303910665
+ POINT 2430 18.3010676469193 16.88080761530255
+ POINT 2431 18.66020366196966 15.9349676413002
+ POINT 2432 19.16290621200404 15.97908962750386
+ POINT 2433 19.60184782770187 16.0291610895696
+ POINT 2434 17.74265060326497 16.90620537096182
+ POINT 2435 18.12514961619028 17.335832924695
+ POINT 2436 15.35519968440101 23.50052060043794
+ POINT 2437 15.61382388545503 23.94120904958511
+ POINT 2438 16.14374614558074 23.94660548122907
+ POINT 2439 15.87594038737391 24.38867578503489
+ POINT 2440 16.40292032494667 23.50896024931439
+ POINT 2441 14.04156102276654 20.44473665232049
+ POINT 2442 13.5101459043692 20.44182359619071
+ POINT 2443 13.23791783332129 20.0000177682021
+ POINT 2444 12.99581450514272 20.44181897368124
+ POINT 2445 14.32798942893715 21.75754985993104
+ POINT 2446 14.59066675027901 22.19303681739878
+ POINT 2447 14.05739186853169 22.19336416533053
+ POINT 2448 14.59606856183489 21.32333671296435
+ POINT 2449 17.02043936108002 17.36861009534426
+ POINT 2450 16.75104595303201 17.80975860309653
+ POINT 2451 17.29733916448795 17.80237918810654
+ POINT 2452 16.8825211737115 20.00090158182218
+ POINT 2453 16.50015673941269 20.45264191937547
+ POINT 2454 16.08514518550571 20.00088643540819
+ POINT 2455 16.11090188810538 20.45097896467276
+ POINT 2456 15.67928540345191 21.32845415312463
+ POINT 2457 15.97041169404601 20.90170701865165
+ POINT 2458 15.55540014013904 20.44995153468437
+ POINT 2459 15.13808712838207 21.32895105033127
+ POINT 2460 15.40246258575432 21.75672561479265
+ POINT 2461 14.87289137953249 20.89506525129633
+ POINT 2462 16.20906446251038 17.81010162569915
+ POINT 2463 16.48596426591832 18.24387071846142
+ POINT 2464 17.67264086770901 25.76730075340195
+ POINT 2465 17.52697787020489 25.32168372621399
+ POINT 2466 17.1018668450201 25.72098828977573
+ POINT 2467 17.78498630795706 24.9096132943493
+ POINT 2468 18.29689274451687 24.94722520315896
+ POINT 2469 17.98412715958014 24.48884230766805
+ POINT 2470 18.19154482344632 27.14919909897187
+ POINT 2471 18.00418440385464 27.60561752382607
+ POINT 2472 18.50178002760287 27.59500731331329
+ POINT 2473 17.22320550548447 27.12725699911247
+ POINT 2474 16.99718056314592 26.6294993269721
+ POINT 2475 17.47355478486276 26.66436298910405
+ POINT 2476 14.77835587396051 33.47591176927389
+ POINT 2477 14.5037091327629 32.89870630528225
+ POINT 2478 14.20286679509669 33.2286249931342
+ POINT 2479 14.91119950175903 32.71983261654729
+ POINT 2480 15.41335988088872 32.74473764552774
+ POINT 2481 13.26816755360081 21.75856091096891
+ POINT 2482 13.0048315681012 21.32143470787244
+ POINT 2483 16.7511085267673 22.19060870549156
+ POINT 2484 16.20887687158396 22.19021726809433
+ POINT 2485 16.17786126300281 23.06167228219098
+ POINT 2486 16.69915194428762 23.07149378572608
+ POINT 2487 16.13755756315898 24.82813436948326
+ POINT 2488 16.41272816316716 25.26878389243772
+ POINT 2489 15.60763530303328 24.82273793783929
+ POINT 2490 15.34000798260733 25.26618804426989
+ POINT 2491 15.57192146402785 25.71183427290126
+ POINT 2492 15.04267696781684 25.71582579488349
+ POINT 2493 19.39363952846237 24.88740687823191
+ POINT 2494 18.885848220639 24.93009895932983
+ POINT 2495 18.68670736901592 25.35086994601108
+ POINT 2496 19.15366600169464 25.75648146541981
+ POINT 2497 18.56007556635269 25.77221469844787
+ POINT 2498 17.29751718982028 22.19792338787625
+ POINT 2499 17.82901984993449 22.20723229864854
+ POINT 2500 17.02050154539675 22.63152050098736
+ POINT 2501 17.2455606073406 23.07880846811078
+ POINT 2502 17.69547194751031 24.00000391993576
+ POINT 2503 18.20737838407013 24.03761582874543
+ POINT 2504 18.37170027960414 23.57574163654564
+ POINT 2505 17.42146708911589 23.53377959693132
+ POINT 2506 17.74281669022501 23.0938063121926
+ POINT 2507 15.25853878864088 12.92422065523148
+ POINT 2508 15.0175685566735 12.47064415693754
+ POINT 2509 17.58990097002385 11.50018009270076
+ POINT 2510 17.36873006000716 11.06025787356734
+ POINT 2511 18.10310452692819 11.49837625079764
+ POINT 2512 17.65638158620408 10.60573636868109
+ POINT 2513 15.04253498339223 10.68172168255394
+ POINT 2514 14.51635320344969 10.68688592002177
+ POINT 2515 14.77952260731562 10.24189432870903
+ POINT 2516 14.26072834128369 11.1308604785193
+ POINT 2517 15.29884441434331 11.11647511404975
+ POINT 2518 15.02941585016789 11.5708497790334
+ POINT 2519 -5.559612278106096 22.64037941022797
+ POINT 2520 -5.812595406053648 23.08012397436108
+ POINT 2521 -5.306180262645629 23.08034305013044
+ POINT 2522 -11.43576012403759 16.0359829772844
+ POINT 2523 -10.91930130833142 16.03530291420144
+ POINT 2524 -11.17839236720871 16.47753707839758
+ POINT 2525 -11.95093603481484 15.1524484606076
+ POINT 2526 -12.46808184577289 15.15416888873691
+ POINT 2527 -11.69363999436943 15.59489173025373
+ POINT 2528 -11.43396510560572 15.15130554344212
+ POINT 2529 -11.95273105324672 16.03712589444988
+ POINT 2530 -11.43712821990608 16.91861467088325
+ POINT 2531 -10.92066940419991 16.91793460780029
+ POINT 2532 -10.6635990468805 17.35875835728356
+ POINT 2533 -10.40486319418314 16.91768076479789
+ POINT 2534 -10.92128585029515 17.79908423287577
+ POINT 2535 -10.40547964027838 17.79883038987337
+ POINT 2536 -11.17515797884532 20.00000102031307
+ POINT 2537 -11.43519237168078 19.55947185837874
+ POINT 2538 -10.91971864863478 19.55946991621752
+ POINT 2539 -17.69355183457131 26.21921688206146
+ POINT 2540 -17.91957704254855 26.71697422906539
+ POINT 2541 -17.47355512042661 26.66436143557672
+ POINT 2542 -18.41154214164629 26.7040528116507
+ POINT 2543 -18.5809866532765 26.22413096385403
+ POINT 2544 -18.85906250548473 26.65851045942693
+ POINT 2545 -18.58165190157233 21.78818398655776
+ POINT 2546 -18.38730056826177 22.23230077017542
+ POINT 2547 -18.87782301108845 22.24485568342974
+ POINT 2548 -18.44846894716024 21.34055390991821
+ POINT 2549 -12.97062101492125 29.31875403642425
+ POINT 2550 -12.46767030297665 29.32772470608927
+ POINT 2551 -12.72223548790102 29.77728049112642
+ POINT 2552 -13.22907514769955 28.86709581957689
+ POINT 2553 -14.51635826947124 29.31311155849969
+ POINT 2554 -14.26073306937787 28.86913861906651
+ POINT 2555 -14.51706009046056 28.4236684902674
+ POINT 2556 -13.99842148648492 28.41952325896755
+ POINT 2557 -14.7795280512982 29.75810081374213
+ POINT 2558 -15.03254101741964 30.19341176913132
+ POINT 2559 -14.50635783171041 30.1882502220222
+ POINT 2560 -15.04254145518047 29.31827310560881
+ POINT 2561 -15.56202218869213 29.32850735956158
+ POINT 2562 -16.09215847892137 29.34349976240278
+ POINT 2563 -15.83584752723667 29.77825476369244
+ POINT 2564 -15.29885240686518 28.88351810431914
+ POINT 2565 -15.56326504283053 31.03948508656246
+ POINT 2566 -16.09046899946972 31.08225492312761
+ POINT 2567 -16.36982582431926 30.66455001640303
+ POINT 2568 -16.62469646598935 31.11842918285091
+ POINT 2569 -16.10341526745587 30.2125664936679
+ POINT 2570 -15.57327897722664 30.1975740908267
+ POINT 2571 -15.30010875763884 30.62772349910677
+ POINT 2572 -15.02252708302353 31.03532276486708
+ POINT 2573 -17.36874409487987 28.93971676960333
+ POINT 2574 -17.07238964582313 28.49069203988263
+ POINT 2575 -16.33477468949221 28.91218584585327
+ POINT 2576 -16.60860002803674 29.36193324998413
+ POINT 2577 -17.13332295795837 29.38218899091014
+ POINT 2578 -17.65639589526919 29.39423674904752
+ POINT 2579 -16.5728923949743 28.46738370478237
+ POINT 2580 -16.79406580218986 28.02745641123038
+ POINT 2581 -16.05645084585894 28.44895021720102
+ POINT 2582 -11.43421905289848 27.52144951460756
+ POINT 2583 -11.6916320508292 27.96979564432751
+ POINT 2584 -11.94478840412654 27.52156732452448
+ POINT 2585 -10.92260322222589 27.52096203886612
+ POINT 2586 -11.17575957552322 27.07273371906309
+ POINT 2587 -14.54458520175707 20.44472116630428
+ POINT 2588 -14.04156085494355 20.44473661417197
+ POINT 2589 -14.25527342288196 20.00000694189264
+ POINT 2590 -13.74078421360634 27.97171208992312
+ POINT 2591 -13.48445719252365 28.41718221872224
+ POINT 2592 -12.97143787482097 28.41928465053246
+ POINT 2593 -12.71451066085117 27.96964225196112
+ POINT 2594 -12.45912861602707 28.41955585281577
+ POINT 2595 -16.25413008413381 27.08512273155318
+ POINT 2596 -16.52070005962864 27.54827010780237
+ POINT 2597 -16.0279985758462 27.54100069988094
+ POINT 2598 -17.02019731047746 27.57157844290263
+ POINT 2599 -17.22320594816005 27.12725546102763
+ POINT 2600 -16.99718074018281 26.6294981140237
+ POINT 2601 -15.51800943988496 26.61966242771222
+ POINT 2602 -15.01513775921834 26.61758552880125
+ POINT 2603 -15.25855691968476 27.07577642472079
+ POINT 2604 -12.20839980609971 25.28942190368818
+ POINT 2605 -12.46344601370725 25.73349604427731
+ POINT 2606 -11.94630087233431 25.73521605642329
+ POINT 2607 -12.46807352183216 24.84583381340267
+ POINT 2608 -11.95092838045923 24.84755382554865
+ POINT 2609 -12.98765585547731 24.84316419719443
+ POINT 2610 -12.73018442983683 24.40129611905489
+ POINT 2611 -13.24519821910848 25.28412915854135
+ POINT 2612 -9.129651643227703 27.06523077144557
+ POINT 2613 -8.876288684125369 27.50911488874473
+ POINT 2614 -9.387389242004456 27.51154300998024
+ POINT 2615 -11.43269449945645 25.7358488670784
+ POINT 2616 -11.68774070706399 26.17992300766753
+ POINT 2617 -11.43075487019097 26.62688850656359
+ POINT 2618 -11.94436124306884 26.62625569590848
+ POINT 2619 -10.91913903951838 26.62640103082215
+ POINT 2620 -11.43575265155543 23.96401593507675
+ POINT 2621 -10.91929460003396 23.9646969017269
+ POINT 2622 -11.17838521827446 23.52246042867934
+ POINT 2623 -11.43395834902085 24.84869716197923
+ POINT 2624 -11.6936320647533 24.40510907169372
+ POINT 2625 -11.9527226829938 23.96287259864617
+ POINT 2626 -9.674059715189312 31.54309886182291
+ POINT 2627 -9.923928805191473 31.0922115971265
+ POINT 2628 -9.413784457395401 31.09278152867489
+ POINT 2629 -7.33625026584593 21.32043467489033
+ POINT 2630 -7.591125517743469 20.88045700659352
+ POINT 2631 -7.337223839723812 20.44026648652743
+ POINT 2632 -6.830512094503344 20.44026665091224
+ POINT 2633 -6.575528491143303 20.88082068876169
+ POINT 2634 -6.828119317097339 21.32047870894126
+ POINT 2635 -7.081929718985547 21.76037960279158
+ POINT 2636 -6.321207944282921 21.32076561666295
+ POINT 2637 -8.865941131087769 23.08182349266286
+ POINT 2638 -8.35498225184941 23.08157072480208
+ POINT 2639 -8.866487325995669 23.96406401648594
+ POINT 2640 -8.355738913521897 23.96328209781178
+ POINT 2641 -8.611808118958542 24.40495790685818
+ POINT 2642 -9.122215297035932 23.52275432385121
+ POINT 2643 -9.377738307564679 23.08218960907453
+ POINT 2644 -9.378284502472578 23.9644301328976
+ POINT 2645 -11.43519851064686 20.44052946226004
+ POINT 2646 -10.91972478760085 20.44052752009882
+ POINT 2647 -10.92146522300643 21.32094671163846
+ POINT 2648 -11.18084963629104 21.76061562971537
+ POINT 2649 -11.43914973268702 21.32072488012269
+ POINT 2650 -8.354717852301953 17.79936126551275
+ POINT 2651 -8.865677316820541 17.7991080550456
+ POINT 2652 -8.865604125273149 18.67950030830442
+ POINT 2653 -8.354849206451807 18.67954722684985
+ POINT 2654 -7.8449370799189 18.67964045894598
+ POINT 2655 -7.336251432918799 18.67956409604354
+ POINT 2656 -7.081931132275803 18.23961943152085
+ POINT 2657 -8.09997451760549 18.23956994043947
+ POINT 2658 -7.844805725769048 17.79945449760887
+ POINT 2659 -8.100430139091614 16.47811947625329
+ POINT 2660 -7.845750550729444 16.03722597916978
+ POINT 2661 -8.355741934804009 16.03671803565851
+ POINT 2662 -7.84499390774128 16.91893662122336
+ POINT 2663 -7.336521112848085 16.03802299597051
+ POINT 2664 -7.591832908560479 15.59662155537573
+ POINT 2665 -7.081982832760588 16.47905573175917
+ POINT 2666 -3.54490611780126 20.88709779020111
+ POINT 2667 -3.290304169812604 21.32705841216561
+ POINT 2668 -3.794349397708337 21.32485605719605
+ POINT 2669 -4.07370210063638 19.99999990535588
+ POINT 2670 -3.813606861772008 19.55755217403422
+ POINT 2671 -3.813606786979048 20.4424476880606
+ POINT 2672 -3.309561597917081 19.55534986530946
+ POINT 2673 -3.544906231427986 19.11290209845403
+ POINT 2674 -3.309561559083315 20.44465004303017
+ POINT 2675 -2.976342896691423 37.87084587080842
+ POINT 2676 -3.221425950774599 37.37975080057947
+ POINT 2677 -2.526770059080721 38.86620393748946
+ POINT 2678 -2.74911739425569 38.36872913844745
+ POINT 2679 -3.247670177747043 38.30899320764298
+ POINT 2680 -3.510972884148524 38.7290535079245
+ POINT 2681 -3.738198386584258 38.23117024028548
+ POINT 2682 -2.221684732532352 36.55039136936763
+ POINT 2683 -2.720983152386764 36.50668992783906
+ POINT 2684 -1.975649639226325 36.09501466529477
+ POINT 2685 -2.229342038877392 35.61557517193711
+ POINT 2686 -2.490020268553868 35.14475718983718
+ POINT 2687 -2.734688313083581 35.59417021242318
+ POINT 2688 -1.730981594696612 35.64560164270876
+ POINT 2689 -1.486809012309066 35.18419628736905
+ POINT 2690 -4.303354465001183 31.05895358128684
+ POINT 2691 -4.55951779146229 31.50692884476348
+ POINT 2692 -4.814374491189353 31.05972774650009
+ POINT 2693 -4.303319481666954 31.95367266283595
+ POINT 2694 -4.814339507855124 31.9544468280492
+ POINT 2695 -3.794429959970654 31.05851674025303
+ POINT 2696 -3.285536346627419 31.06016856732271
+ POINT 2697 -3.539604151930885 31.5078065066199
+ POINT 2698 -4.049286659697717 30.61131564198964
+ POINT 2699 -3.792218904985805 31.95624679413531
+ POINT 2700 -3.28332529164257 31.95789862120499
+ POINT 2701 -4.047040621378638 32.40376477742103
+ POINT 2702 7.293827708476641e-08 30.61670207641359
+ POINT 2703 -0.2521485735852201 31.06882400602231
+ POINT 2704 -0.2521485843374779 30.16753613384589
+ POINT 2705 -0.7573647761819143 29.27115377417338
+ POINT 2706 -0.5048694095893164 29.71821293229341
+ POINT 2707 -0.757018053121834 30.16737885684081
+ POINT 2708 -1.261813079214908 30.16656491069634
+ POINT 2709 -1.00909225396307 30.61588811224881
+ POINT 2710 -1.750101564306177 33.7926600881429
+ POINT 2711 -1.247341893467582 33.80032930854107
+ POINT 2712 -0.9957606346718019 34.26612784853185
+ POINT 2713 -1.241669357333788 34.72964383553155
+ POINT 2714 -1.739534339372401 34.71160969751359
+ POINT 2715 -11.99490542589216 33.72244073919998
+ POINT 2716 -12.55579994637244 33.72998392753992
+ POINT 2717 -12.24028160504613 34.13586616472574
+ POINT 2718 -12.58774656772219 32.92273577571433
+ POINT 2719 -12.04127268056533 32.88444075338846
+ POINT 2720 -12.31859548106905 32.49061802708863
+ POINT 2721 -11.76196356192489 33.30918024521488
+ POINT 2722 -11.49281247527174 32.87706249658918
+ POINT 2723 -11.44644522059858 33.7150624824007
+ POINT 2724 -10.96746234053338 33.79803021601935
+ POINT 2725 -10.46487803283816 33.83310531972037
+ POINT 2726 -10.71091904893609 33.33687709211661
+ POINT 2727 -11.20040420450066 34.21129071000446
+ POINT 2728 -11.46127976573915 30.22519151574363
+ POINT 2729 -11.70834995916295 29.77725564258582
+ POINT 2730 -11.97221458253263 30.23418703394924
+ POINT 2731 -10.68395992686636 29.76000252533419
+ POINT 2732 -10.93683718292719 29.31526402048404
+ POINT 2733 -13.99001145216601 30.2071360473141
+ POINT 2734 -14.24302441828744 30.64244700270329
+ POINT 2735 -13.47593211929433 30.2148213247283
+ POINT 2736 -12.882639952868 33.38136001505353
+ POINT 2737 -13.12801613202197 33.79478544057929
+ POINT 2738 -13.15996275337173 32.9875372887537
+ POINT 2739 -12.56903973339889 32.06645679208884
+ POINT 2740 -12.02256584624203 32.02816176976298
+ POINT 2741 -8.913239817098617 31.99135920727501
+ POINT 2742 -8.40158183646983 31.98514989359324
+ POINT 2743 -8.652257386764454 31.53745947968953
+ POINT 2744 -8.921335412563566 32.89535129795895
+ POINT 2745 -8.673611325668027 33.34794371176464
+ POINT 2746 -8.414840179908452 32.89164203498441
+ POINT 2747 -5.072107480879501 32.40303922173636
+ POINT 2748 -5.328305790674837 31.95629540366389
+ POINT 2749 10.14864152241564 25.29167841478616
+ POINT 2750 10.40452204895563 24.84933923994486
+ POINT 2751 7.345760569471696 27.50220841755529
+ POINT 2752 6.836865374418886 27.50054703680143
+ POINT 2753 7.089552523791351 27.05704250164396
+ POINT 2754 2.525426835782363 26.16307688713685
+ POINT 2755 2.272480634611741 25.72176210905083
+ POINT 2756 2.777875233522349 25.72204462651898
+ POINT 2757 1.767575335564268 26.60489238751902
+ POINT 2758 1.514941509738058 26.16264509615625
+ POINT 2759 2.272957824933265 26.60516717755396
+ POINT 2760 2.778352423843874 26.60544969502211
+ POINT 2761 4.805074847682363 27.49442755495632
+ POINT 2762 4.552513154400769 27.93750824958521
+ POINT 2763 4.297887807610577 27.49325833103988
+ POINT 2764 6.57468887445735 24.40195169880285
+ POINT 2765 6.321311698834721 24.84298263597548
+ POINT 2766 7.849057448689945 25.73004086883459
+ POINT 2767 8.359006247967862 25.73123236418823
+ POINT 2768 8.61552521165617 26.17503643791459
+ POINT 2769 9.404349218168869 30.19173390211969
+ POINT 2770 9.65777479999708 29.74665923251244
+ POINT 2771 10.40670379081607 26.62599846740034
+ POINT 2772 10.66169908791753 26.18015324950281
+ POINT 2773 10.91913923802371 26.62640116557348
+ POINT 2774 10.40539732837285 25.73591803949286
+ POINT 2775 10.91783277558049 25.73632073766599
+ POINT 2776 9.89250783475268 25.73551092662298
+ POINT 2777 9.637659499680273 26.17823816723135
+ POINT 2778 12.98765611516729 24.84316435404515
+ POINT 2779 13.24519849159788 25.28412934430153
+ POINT 2780 12.97771797713904 25.73181949643032
+ POINT 2781 13.4973712688774 25.72824679366293
+ POINT 2782 13.74303197345077 26.17287521768461
+ POINT 2783 13.99649931993174 26.62119388701589
+ POINT 2784 13.48335810089953 26.624255615123
+ POINT 2785 14.0105124879096 25.72518506555582
+ POINT 2786 14.53346833943965 25.71999652791481
+ POINT 2787 14.76538182086017 26.16564275654618
+ POINT 2788 12.97101588266317 26.6242609325337
+ POINT 2789 13.22448322914414 27.07257960186498
+ POINT 2790 11.18782984741558 28.86783824005193
+ POINT 2791 11.44023158859328 28.42154320407505
+ POINT 2792 10.92866118458883 28.41597310920991
+ POINT 2793 15.8358466505693 29.77825662708678
+ POINT 2794 15.57327800023705 30.19757601615488
+ POINT 2795 15.03254016683603 30.19341354430916
+ POINT 2796 -0.8995237521899599 19.54873467419662
+ POINT 2797 -1.223665336802445 19.99999999772069
+ POINT 2798 -1.340523578198245 19.5487346702835
+ POINT 2799 -0.8995237451475713 20.45126532729634
+ POINT 2800 -1.340523571155856 20.45126532338323
+ POINT 2801 -1.523722054976781 19.10064953446878
+ POINT 2802 -1.775181039070304 18.66606637620227
+ POINT 2803 -1.267840977679282 18.66288618849292
+ POINT 2804 -1.847863639589266 19.55191485799285
+ POINT 2805 3.030578223423045 16.47865931956265
+ POINT 2806 2.7786995819392 16.9173169337976
+ POINT 2807 3.283887773770873 16.91774472162141
+ POINT 2808 2.273605935625607 16.91641083896922
+ POINT 2809 2.777737361196587 16.03895609462461
+ POINT 2810 2.272576544974629 16.03887379781015
+ POINT 2811 2.524923874579844 15.59959836069592
+ POINT 2812 3.282925553028259 16.03938388244843
+ POINT 2813 -0.7612694088495366 18.66199020272551
+ POINT 2814 -1.012728392943059 18.227407044459
+ POINT 2815 -0.758598544150526 17.78995693156367
+ POINT 2816 -1.265170112980272 17.79085291733108
+ POINT 2817 4.506764545389951 1.417895953039242
+ POINT 2818 4.783535558950785 1.00631976803145
+ POINT 2819 4.758484548151512 1.889696750885436
+ POINT 2820 4.253215613299169 1.820569169400931
+ POINT 2821 3.510966697825907 1.270945661498197
+ POINT 2822 3.322764554813852 0.7621993600452871
+ POINT 2823 2.853419417958452 0.6871814573462394
+ POINT 2824 3.15663773239814 0.2506800547597778
+ POINT 2825 2.526762781558002 1.133795733001061
+ POINT 2826 0.7361792967570719 3.370479836805422
+ POINT 2827 0.984246123665582 3.857601448530803
+ POINT 2828 1.229220834288343 3.387837280503928
+ POINT 2829 0.2456021749298 4.312315065409472
+ POINT 2830 -6.12900348972989e-07 3.840243961866928
+ POINT 2831 -0.2456030241048603 4.312315022444103
+ POINT 2832 0.2456016322509388 3.358689814749931
+ POINT 2833 0.5049285170465799 15.59922462282507
+ POINT 2834 0.2524349318952632 15.15933354319677
+ POINT 2835 0.7573634386942838 15.15936468952784
+ POINT 2836 -0.2524349044090859 14.27853318435742
+ POINT 2837 1.330778542918409e-08 14.71947361203522
+ POINT 2838 0.2524349358260958 14.27853318222174
+ POINT 2839 -0.2524349083399185 15.15933354533245
+ POINT 2840 -0.7573634152411641 15.15936469433383
+ POINT 2841 -0.5049284966536864 15.59922462549537
+ POINT 2842 0.5049254022037216 13.83754849930346
+ POINT 2843 0.7574092353969514 13.3953638490185
+ POINT 2844 0.2524838513024543 13.39540810425898
+ POINT 2845 0.7573603199205929 14.27848892698126
+ POINT 2846 1.262484605133556 13.39525696279437
+ POINT 2847 1.010043054232288 12.95311656774989
+ POINT 2848 1.767575339991074 13.39510769916648
+ POINT 2849 1.514941521155737 13.83735498043508
+ POINT 2850 1.262295113836738 15.15932946063648
+ POINT 2851 1.767248131092881 15.15945960799914
+ POINT 2852 1.514810041101744 15.5993859165188
+ POINT 2853 1.009801528685421 14.71943838100818
+ POINT 2854 1.262291995063047 14.2784536980899
+ POINT 2855 1.767382729920565 14.278304434462
+ POINT 2856 10.41084000253686 12.48260731078788
+ POINT 2857 9.899143909428762 12.48490033133931
+ POINT 2858 10.15245058881716 12.93005073050543
+ POINT 2859 7.613367978441445 10.26725776150029
+ POINT 2860 7.865566856326732 10.71237296609314
+ POINT 2861 7.872056162547818 9.817820601218891
+ POINT 2862 6.840628853956597 11.61013350401928
+ POINT 2863 7.350228541129577 11.60757337758872
+ POINT 2864 7.602701329817169 12.05219325805719
+ POINT 2865 7.859856068084092 11.60547869619642
+ POINT 2866 6.584305485265666 12.05624824322372
+ POINT 2867 6.331860536359608 11.61209380779351
+ POINT 2868 7.345761240100929 12.4977925867857
+ POINT 2869 7.855388767055443 12.4956979053934
+ POINT 2870 6.836865843678177 12.49945375805594
+ POINT 2871 6.328097526081189 12.50141406183017
+ POINT 2872 7.089553280916451 12.94295840539215
+ POINT 2873 8.370126385671387 11.60298196347085
+ POINT 2874 8.117653596983795 11.15836208300238
+ POINT 2875 8.375837173914027 10.70987623336757
+ POINT 2876 4.295101059051913 14.27689245468694
+ POINT 2877 4.801572033150954 14.27614783489993
+ POINT 2878 5.054251674501884 14.71756589197868
+ POINT 2879 5.308173049886577 14.27556530526172
+ POINT 2880 4.041727348991283 14.71850999116095
+ POINT 2881 4.800381330074277 15.15879930644609
+ POINT 2882 5.3069823468099 15.15821677680788
+ POINT 2883 7.849059237793011 14.26996017987809
+ POINT 2884 8.103070930537744 14.71207488647675
+ POINT 2885 5.815417413760485 14.27454965531052
+ POINT 2886 5.562737772409555 13.83313159823176
+ POINT 2887 -0.2521485527378636 8.931176099677991
+ POINT 2888 -0.5035763908778745 8.480088454668433
+ POINT 2889 -0.7557250243185949 8.932210406700243
+ POINT 2890 -0.2509573870619522 8.024279294560063
+ POINT 2891 0.2509575473889861 8.024279283349045
+ POINT 2892 7.962417714058034e-08 7.56950443026293
+ POINT 2893 6.593280292555939 10.27328387180388
+ POINT 2894 6.335879483268245 10.7209592028273
+ POINT 2895 5.830755701913942 9.830536241827216
+ POINT 2896 5.574295302392639 10.27814403449093
+ POINT 2897 5.321475942820628 9.832740939252627
+ POINT 2898 6.341449789967948 9.827318887765713
+ POINT 2899 5.062470520941847 11.17165642054254
+ POINT 2900 5.317804209527402 10.72520563662399
+ POINT 2901 5.827083968620716 10.72300093919858
+ POINT 2902 6.079388390403009 11.16802080496036
+ POINT 2903 5.823065021712079 11.61413554416479
+ POINT 2904 5.315146558477212 11.61569271764991
+ POINT 2905 5.567618704433812 12.05976572048306
+ POINT 2906 1.26260880164937 12.50952783290288
+ POINT 2907 0.7575334319127655 12.509634719127
+ POINT 2908 1.515420485651163 12.06591797610076
+ POINT 2909 1.767930107970686 12.50939982472365
+ POINT 2910 2.779582641351243 11.62045230557948
+ POINT 2911 2.526574119133528 12.06542614609067
+ POINT 2912 2.273750314190195 11.62081612741035
+ POINT 2913 3.538866270969666 12.06436176963468
+ POINT 2914 3.284985271677322 12.50826344534523
+ POINT 2915 3.286081822236629 11.62005928968668
+ POINT 2916 2.273653942155398 10.72932286147457
+ POINT 2917 2.52689359077933 10.28311528781965
+ POINT 2918 2.021045272905355 11.17585461155564
+ POINT 2919 1.76803675068764 11.62082845206683
+ POINT 2920 1.262715444366323 11.62095646024605
+ POINT 2921 1.010161226929193 11.17580755694835
+ POINT 2922 0.7575449618927166 11.62089708098228
+ POINT 2923 1.767940378652842 10.72933518613105
+ POINT 2924 1.262535322656886 10.72890566637786
+ POINT 2925 1.515143991906928 10.28237391629679
+ POINT 2926 0.253078415467722 21.33774656433547
+ POINT 2927 0.5081909984648777 20.90226741555631
+ POINT 2928 -0.3913327526621082 20.45100208957463
+ POINT 2929 2.734971728257651e-09 20.45100208875773
+ POINT 2930 -0.39133275539708 20.0000000008169
+ POINT 2931 -0.5081909870155196 20.90226741523717
+ POINT 2932 0.3913327604803603 20.45100208957464
+ POINT 2933 0.3913327577453886 20.0000000008169
+ POINT 2934 0.2530784161400829 22.21052479098349
+ POINT 2935 0.5055201289601644 22.64707892336772
+ POINT 2936 -2.785590905596614 21.32882419900507
+ POINT 2937 -3.03503418550369 21.76658246600001
+ POINT 2938 1.770560907143734 17.79144658719761
+ POINT 2939 2.024810499173619 18.22997737721628
+ POINT 2940 1.775181052026418 18.66606637464487
+ POINT 2941 2.280691576572412 18.66774072366555
+ POINT 2942 1.265170126328186 17.79085291521534
+ POINT 2943 1.012728405401115 18.22740704319246
+ POINT 2944 0.7585985571016766 17.7899569302122
+ POINT 2945 1.516431058844295 17.35399647421735
+ POINT 2946 0.8995237605176197 19.54873467387751
+ POINT 2947 1.340523588216353 19.54873466996442
+ POINT 2948 1.523722067484837 19.10064953360767
+ POINT 2949 1.267840990086043 18.66288618715841
+ POINT 2950 0.7612694208595338 18.66199020215526
+ POINT 2951 5.813248074708591 17.79940577746486
+ POINT 2952 6.319914201894026 17.79970755524536
+ POINT 2953 6.067133785253771 18.23927390332938
+ POINT 2954 3.535574274154806 15.59970463007047
+ POINT 2955 3.788415136381265 16.0394078550085
+ POINT 2956 4.29392652128657 16.03975141330591
+ POINT 2957 4.547087929945052 15.59958939695291
+ POINT 2958 4.79995059372381 16.03961220762827
+ POINT 2959 4.041277800160023 16.47943066568386
+ POINT 2960 3.788433948862058 15.15930008166777
+ POINT 2961 3.282944365509053 15.1592761091077
+ POINT 2962 4.294357257637037 15.15893851212372
+ POINT 2963 3.794349415726029 21.32485606072119
+ POINT 2964 3.290304186047734 21.32705841534533
+ POINT 2965 3.544906134739364 20.8870977923218
+ POINT 2966 3.035034201374663 21.76658246994613
+ POINT 2967 3.285878222907446 22.20420717451871
+ POINT 2968 3.81360680382783 20.44244768929398
+ POINT 2969 4.073702118111949 19.99999990535705
+ POINT 2970 4.30904667870178 20.44244765376073
+ POINT 2971 3.813606878619757 19.55755217280245
+ POINT 2972 4.309046753493707 19.5575521372692
+ POINT 2973 3.091725105391231 19.99999995889588
+ POINT 2974 3.309561574149535 20.44465004391812
+ POINT 2975 2.535961556076473 19.1072647545244
+ POINT 2976 2.785591003223675 18.67117575709582
+ POINT 2977 2.823024475136099 19.55534988242807
+ POINT 2978 3.309561612982868 19.55534986442249
+ POINT 2979 3.544906248364625 19.11290209633464
+ POINT 2980 4.553342649405812 19.11635063545458
+ POINT 2981 4.813437888898004 19.55879836800918
+ POINT 2982 3.78894556721224 16.91866702923937
+ POINT 2983 3.537066925728395 17.35732464347433
+ POINT 2984 4.294456952117544 16.91901058753678
+ POINT 2985 10.40485762242933 23.0823167754689
+ POINT 2986 10.66359386676167 22.64123696885316
+ POINT 2987 7.336519205314388 23.96197717939193
+ POINT 2988 7.845748174573922 23.96277428191098
+ POINT 2989 7.847092038101775 15.1545453326975
+ POINT 2990 8.357041317327358 15.15335405870247
+ POINT 2991 7.335858156970897 16.91917008184071
+ POINT 2992 6.82740222651428 16.91959839644326
+ POINT 2993 7.081982885691881 16.4790557103205
+ POINT 2994 6.573652994571071 17.35977609867216
+ POINT 2995 6.82753870511625 17.79964422453667
+ POINT 2996 6.319777723292055 16.91966172715194
+ POINT 2997 8.865603095183527 21.32049701279709
+ POINT 2998 8.610566546294587 20.88042660659833
+ POINT 2999 8.354847778087121 21.32045064574386
+ POINT 3000 -19.49782579425925 18.2262342507611
+ POINT 3001 -19.95653724886555 18.68219083235013
+ POINT 3002 -19.87861801615688 17.79987597964446
+ POINT 3003 -18.66020382675364 15.93496854205557
+ POINT 3004 -19.16290631175541 15.97909016657372
+ POINT 3005 -18.99857199443355 15.51737708814106
+ POINT 3006 -17.91955297322556 13.2829594368018
+ POINT 3007 -18.41152301195191 13.295877500577
+ POINT 3008 -9.129653461818208 12.93477147753005
+ POINT 3009 -8.876289950333131 12.49088708422035
+ POINT 3010 -8.365440669810539 12.49364887761896
+ POINT 3011 -8.108500589767266 12.9392481990543
+ POINT 3012 -7.855388676964306 12.4956979610122
+ POINT 3013 -8.361774657741075 13.38192668055925
+ POINT 3014 -7.851722664894842 13.38397576395249
+ POINT 3015 -4.80356472378408 18.67759654481199
+ POINT 3016 -4.299173591137375 18.67635031371034
+ POINT 3017 -5.054931658031134 18.23828417657461
+ POINT 3018 -2.280691562830554 18.66774072586148
+ POINT 3019 -2.024810485533055 18.22997737988562
+ POINT 3020 -2.785590988433182 18.67117575963704
+ POINT 3021 -2.535961541970431 19.1072647559537
+ POINT 3022 -5.306982312776921 15.15821679877318
+ POINT 3023 -5.813814758590553 15.15783103442108
+ POINT 3024 -4.547087902507322 15.59958941436245
+ POINT 3025 -4.293926496647592 16.03975142784848
+ POINT 3026 -7.337862524706304 15.15534238385541
+ POINT 3027 -7.847091962587663 15.15454536705468
+ POINT 3028 -9.890905060586594 16.91769167150019
+ POINT 3029 -10.147975417906 16.47686792201691
+ POINT 3030 -9.122219403737819 16.47724518073061
+ POINT 3031 -9.377742636906071 16.91780911523353
+ POINT 3032 -9.634630413183206 17.35862195801451
+ POINT 3033 -15.51798373490658 13.38033590670376
+ POINT 3034 -15.01511587050028 13.38241715695336
+ POINT 3035 -14.76536195414445 13.83436752674101
+ POINT 3036 -11.6877451403522 13.82008259053461
+ POINT 3037 -11.43269990813222 14.264155554569
+ POINT 3038 -11.43075852913953 13.37311667077508
+ POINT 3039 -10.91914257799354 13.37360334277097
+ POINT 3040 -14.49013065771233 8.92250716809294
+ POINT 3041 -13.97378473792814 8.903623831005547
+ POINT 3042 -13.75932210669217 8.400895838660942
+ POINT 3043 -14.48388519872614 8.085770307453599
+ POINT 3044 -14.7532851786944 8.51074262304131
+ POINT 3045 -14.07639210786223 7.906905857500061
+ POINT 3046 -16.05643838843906 11.55103715881512
+ POINT 3047 -16.33476399675755 11.08780033828979
+ POINT 3048 -16.09214922620015 10.65648918306597
+ POINT 3049 -15.54889503500405 11.56061276607589
+ POINT 3050 11.2389936247567 7.556479722522218
+ POINT 3051 10.95968569172366 7.131739392009571
+ POINT 3052 10.96516018232728 8.002770687957165
+ POINT 3053 10.45710182271854 7.09666523164841
+ POINT 3054 10.19676557908151 7.554948702823318
+ POINT 3055 9.947996817509239 7.086330070692012
+ POINT 3056 10.44503645463636 8.011377880133024
+ POINT 3057 9.935931449427057 8.001042719176626
+ POINT 3058 9.433883059010681 7.09648042600004
+ POINT 3059 9.694219302647717 6.638196954825132
+ POINT 3060 9.431468298922116 6.192050324704395
+ POINT 3061 8.921334355776636 7.10464922441238
+ POINT 3062 9.175111870638158 7.552782340279261
+ POINT 3063 9.020608292392154 2.610986790489027
+ POINT 3064 9.474327155954036 2.853381851282785
+ POINT 3065 9.424223358758637 2.359591439050014
+ POINT 3066 8.61015283696532 3.016787348807768
+ POINT 3067 9.406407135751241 3.443882765087797
+ POINT 3068 14.24301966553495 9.357549438241348
+ POINT 3069 14.4901295966866 8.92250482268938
+ POINT 3070 15.02251965234311 8.964668030477915
+ POINT 3071 14.50635307594872 9.811745665581833
+ POINT 3072 15.03253485589125 9.806581428114002
+ POINT 3073 15.30010149579994 9.372267151041644
+ POINT 3074 1.391480458123909 0.5361652771996028
+ POINT 3075 1.5311646848921 1.034881203024674
+ POINT 3076 0.9403288020067619 0.5067124227468429
+ POINT 3077 1.30290062382262 0.04248387209852996
+ POINT 3078 0.5146184240444129 0.9751892831391331
+ POINT 3079 0.7618858102185746 1.458041036081303
+ POINT 3080 1.257885314814681 1.486842127641039
+ POINT 3081 1.759808407924379 1.526429439176829
+ POINT 3082 -7.903282532023693 3.431138862491011
+ POINT 3083 -8.152789841056642 3.936144390882303
+ POINT 3084 -7.405025206157284 4.401754955187759
+ POINT 3085 -7.126972980823624 3.982555849504718
+ POINT 3086 -6.871914937442281 4.456668046370027
+ POINT 3087 -7.912211134470291 4.392559551191403
+ POINT 3088 -7.657153091088949 4.866671748056711
+ POINT 3089 -9.947996922680865 7.086330753741288
+ POINT 3090 -10.19676544567954 7.554949393736067
+ POINT 3091 -9.433883096893222 7.096480642617021
+ POINT 3092 -9.935931248079878 8.001043112251882
+ POINT 3093 4.527367092332923e-08 11.17574818979146
+ POINT 3094 -0.252495297355625 10.7286890466501
+ POINT 3095 -0.7573647365983451 10.72884633098105
+ POINT 3096 -6.777768896535333 2.634657762748669
+ POINT 3097 -7.244270061060128 2.731385544386314
+ POINT 3098 -7.354841851407485 3.536945192983723
+ POINT 3099 -6.821731582692482 3.591858284165991
+ POINT 3100 -7.598041133892552 3.040441297152283
+ POINT 3101 -2.770028523234636 7.135495143417519
+ POINT 3102 -2.262551794000459 7.128472515207454
+ POINT 3103 -2.013561812098475 7.580836281036188
+ POINT 3104 -1.756818092472177 7.124101067148673
+ POINT 3105 -2.268204295821881 8.035370941832417
+ POINT 3106 -1.975649084420517 3.904985271154332
+ POINT 3107 -2.229341417725875 4.384424847169543
+ POINT 3108 -1.730981152791177 4.354398340751177
+ POINT 3109 -1.233116312198353 4.336364163628327
+ POINT 3110 -1.48680864550371 4.815803739643538
+ POINT 3111 -0.7430351466867606 5.261285573502088
+ POINT 3112 -0.494472020592799 4.791077844253667
+ POINT 3113 -0.2485633623686729 5.254593855235067
+ POINT 3114 -0.740074808422948 4.319006740711124
+ POINT 3115 -3.989917167396486 2.240630780408752
+ POINT 3116 -3.738200036941911 1.768829703597202
+ POINT 3117 -3.247670870830478 1.691006496083939
+ POINT 3118 -2.976342610696507 2.129153640981189
+ POINT 3119 -3.734386660790618 2.660010881492179
+ POINT 3120 -4.249408434534817 2.711752124426682
+ POINT 3121 -6.558942474787781 3.123176139372501
+ POINT 3122 -6.331073604203918 3.568786795893496
+ POINT 3123 -6.287110918046769 2.611586274476174
+ POINT 3124 -6.621962591182754 4.900980417645647
+ POINT 3125 -6.343910365849093 4.481781311962606
+ POINT 3126 1.975648595423093 36.09501468771074
+ POINT 3127 1.730980862699194 35.6456016167933
+ POINT 3128 2.229341421389412 35.61557529593476
+ POINT 3129 1.767382707537047 25.72169563959068
+ POINT 3130 2.019831105277033 25.28066337897281
+ POINT 3131 1.262291980403351 25.72154636607824
+ POINT 3132 1.767248087730079 24.84054044960734
+ POINT 3133 2.272346014804772 24.84060691906749
+ POINT 3134 1.262295090029159 24.84067059179185
+ POINT 3135 -0.2524838111325409 26.60459195706799
+ POINT 3136 2.444279567637153e-08 27.04677661342691
+ POINT 3137 -0.2524838031658742 27.4903401891097
+ POINT 3138 0.2524838616507888 27.49034019456228
+ POINT 3139 -0.7575333892249605 27.4903653405446
+ POINT 3140 3.788433723962699 24.84070003411083
+ POINT 3141 4.041727103362698 25.28149016974522
+ POINT 3142 3.283312657697288 25.72224398475948
+ POINT 3143 3.030366456526666 25.28092920667346
+ POINT 3144 3.789177592187962 25.72274613527788
+ POINT 3145 4.295100814849055 25.72310774010915
+ POINT 3146 3.536686369183645 26.16386155512341
+ POINT 3147 2.272576461040474 23.96112624728912
+ POINT 3148 2.020306171472144 23.5221043798967
+ POINT 3149 2.273605847126488 23.08358918644693
+ POINT 3150 2.778699451801812 23.08268308508446
+ POINT 3151 3.030578057285068 23.52134071927124
+ POINT 3152 3.283887584263749 23.08225529947948
+ POINT 3153 6.82172659767877 36.40814779878537
+ POINT 3154 7.35483619344178 36.46305945729526
+ POINT 3155 6.558938425685055 36.87683381454495
+ POINT 3156 6.777763402182511 37.36535117969289
+ POINT 3157 7.244263972315331 37.26861717750442
+ POINT 3158 5.845709060934203 32.8543398439479
+ POINT 3159 5.327825047917067 32.84978785259251
+ POINT 3160 5.587460787769149 33.29923958236787
+ POINT 3161 5.07210716993828 32.40303966091142
+ POINT 3162 5.839992684245366 31.95857160899264
+ POINT 3163 5.328305474083631 31.9562956821724
+ POINT 3164 11.7636152966602 35.51005436606592
+ POINT 3165 11.89138268840086 36.08088984207926
+ POINT 3166 13.96434143009819 33.62431889214255
+ POINT 3167 13.62553027166024 33.96298348535633
+ POINT 3168 14.13907578790397 34.14519481201172
+ POINT 3169 13.6933777803736 33.05047192353857
+ POINT 3170 11.47394032795509 34.67289773812949
+ POINT 3171 11.20040168097641 34.21129404646143
+ POINT 3172 11.44644337030582 33.71506560055828
+ POINT 3173 10.96746084748497 33.79803270401432
+ POINT 3174 9.928435644092694 34.70960053046583
+ POINT 3175 9.445444615479557 34.74869014145943
+ POINT 3176 10.20212549960824 34.27925374770544
+ POINT 3177 8.55693472587436 37.47116564769411
+ POINT 3178 8.610154574479843 36.98321170564777
+ POINT 3179 7.792705712071077 37.37442105721501
+ POINT 3180 8.146978123645237 37.66529759679247
+ POINT 3181 8.559637437237384 38.07574638038857
+ POINT 3182 8.395984878751314 36.56036043869134
+ POINT 3183 7.903277933197526 36.56886333700585
+ POINT 3184 7.59803541538643 36.95956247755778
+ POINT 3185 13.23628235860721 30.68752328103807
+ POINT 3186 13.02182189368296 31.19025353239009
+ POINT 3187 13.39848589487437 32.59184677084766
+ POINT 3188 13.08141264733925 32.09785538670456
+ POINT 3189 13.15996052987587 32.98754066985602
+ POINT 3190 3.734384876860566 37.33999019105068
+ POINT 3191 3.989913736038182 37.75937050229219
+ POINT 3192 3.738191811837065 38.23117125418775
+ POINT 3193 3.247663856437776 38.30899372408128
+ POINT 3194 2.976338586140713 37.87084607032222
+ POINT 3195 0.7575449832500279 28.37910301124292
+ POINT 3196 0.5050496180037712 27.9339289377297
+ POINT 3197 1.262608818111103 27.49047225529183
+ POINT 3198 1.515420516496924 27.93408212583156
+ POINT 3199 0.7575334456124412 27.49036536204691
+ POINT 3200 2.526893724749228 29.71688489057836
+ POINT 3201 2.779450491643448 30.16459955601931
+ POINT 3202 3.286497797291172 29.27075851415398
+ POINT 3203 3.54071932016649 29.71695812350327
+ POINT 3204 3.793978826839798 29.27114357134025
+ POINT 3205 2.779998606761999 29.27036546592124
+ POINT 3206 2.273654040893363 29.2706772901826
+ POINT 3207 0.2509575631490233 32.89023084573768
+ POINT 3208 7.962001580263944e-08 32.43049566678853
+ POINT 3209 0.2509575815135437 31.97572081582519
+ POINT 3210 -0.2509574211939724 31.97572080461469
+ POINT 3211 0.7545341147933871 31.97468656237741
+ POINT 3212 1.00487180505531 32.42701557238493
+ POINT 3213 2.262552379835649 32.871528064516
+ POINT 3214 2.013562317430567 32.41916421915188
+ POINT 3215 1.75681859018817 32.87589931213495
+ POINT 3216 2.268204796802595 31.96462962194811
+ POINT 3217 2.77500339006423 31.96212582894687
+ POINT 3218 3.027618133833469 32.410566243476
+ POINT 3219 1.247341957495069 33.80032933334168
+ POINT 3220 1.503048939569117 33.33593227620078
+ POINT 3221 0.7511021544362571 32.88704853645076
+ POINT 3222 0.5001446352577484 33.34678370418941
+ POINT 3223 0.7487078672168751 33.80939990733931
+ POINT 3224 0.9957605981669626 34.2661278457785
+ POINT 3225 1.254058877164035 32.88356843083666
+ POINT 3226 4.807634527403731 36.45417558306546
+ POINT 3227 4.268078121334274 36.43451973236753
+ POINT 3228 5.055439451329409 35.99075638523749
+ POINT 3229 4.016824286852271 36.00258917550283
+ POINT 3230 3.742624318707891 36.43693935563272
+ POINT 3231 4.285159710652261 35.55276249892606
+ POINT 3232 3.759705908025878 35.55518212219123
+ POINT 3233 5.313339571489223 35.5337790049437
+ POINT 3234 5.576017529265764 35.08006250744026
+ POINT 3235 4.800178209638467 35.54319217194386
+ POINT 3236 4.543059830812075 35.09578511863226
+ POINT 3237 6.593280538182253 29.7267168205935
+ POINT 3238 6.845584839365598 29.28169702003494
+ POINT 3239 6.335879606186479 29.27904143291438
+ POINT 3240 6.851155373110538 30.17533731825264
+ POINT 3241 7.361674109424366 30.17880960428335
+ POINT 3242 7.109843711173534 30.62477451482192
+ POINT 3243 7.613368231755042 29.73274323698628
+ POINT 3244 7.872056569818037 30.18218043355557
+ POINT 3245 3.794429966540387 31.05851703304998
+ POINT 3246 4.049286650570231 30.61131584299384
+ POINT 3247 3.794281271533463 30.1641111043279
+ POINT 3248 3.033012443010421 30.61175253684394
+ POINT 3249 3.285536433201112 31.06016885716353
+ POINT 3250 3.286800241984837 30.16372604714163
+ POINT 3251 19.49782570706544 18.22623423316451
+ POINT 3252 19.95653726784996 18.68219111832597
+ POINT 3253 18.58166017353374 18.21127385550157
+ POINT 3254 18.44873815733738 18.65901810939465
+ POINT 3255 17.82900842060782 17.79250664273356
+ POINT 3256 17.55961501255982 18.23365515048583
+ POINT 3257 18.38742546426215 17.76710888707429
+ POINT 3258 18.87780136911621 17.75460013746301
+ POINT 3259 17.52690217883121 14.67823772169018
+ POINT 3260 17.21413812833305 15.13667453160922
+ POINT 3261 17.10180895186563 14.27897243895621
+ POINT 3262 16.61643123646513 14.28454314481263
+ POINT 3263 16.41267770706892 14.73120621263948
+ POINT 3264 16.07296510477975 14.29114476438398
+ POINT 3265 14.25527356652689 20.00000694342845
+ POINT 3266 14.54458535674566 20.44472120503738
+ POINT 3267 15.08660392329284 20.4503355424043
+ POINT 3268 15.22709411735221 19.99960748842541
+ POINT 3269 14.54446737878539 19.55524897689899
+ POINT 3270 14.04144304480628 19.5552644241821
+ POINT 3271 15.12585065643982 22.18962336947886
+ POINT 3272 15.66704893150966 22.18912647227221
+ POINT 3273 15.93226494226947 22.62311502278055
+ POINT 3274 15.63603332292851 23.06058148636886
+ POINT 3275 15.10960336366766 23.06196334102751
+ POINT 3276 14.85525309603435 22.62543767487836
+ POINT 3277 15.07838610348047 15.1733118594097
+ POINT 3278 15.60761466098593 15.17729090093799
+ POINT 3279 15.33998301787808 14.73382879068254
+ POINT 3280 14.82036766750458 15.61339008097941
+ POINT 3281 15.08744436360368 16.05749207836569
+ POINT 3282 14.56179428451994 16.05410818967995
+ POINT 3283 14.55273602439673 15.16992797072396
+ POINT 3284 15.87591227598083 15.61135500755215
+ POINT 3285 16.13750919037845 15.17187193882498
+ POINT 3286 16.68097532206382 15.16527031925363
+ POINT 3287 16.93896961164258 15.57734025779473
+ POINT 3288 17.24542059267814 16.921237054667
+ POINT 3289 17.42133862340716 16.46621174527455
+ POINT 3290 16.6991273812222 16.92861646965699
+ POINT 3291 17.19812051536607 16.01499394956502
+ POINT 3292 16.66495770909684 16.04358973720944
+ POINT 3293 16.50011603657139 19.55060584927988
+ POINT 3294 16.11086118526408 19.54894289457717
+ POINT 3295 16.23490740586323 18.67143802475644
+ POINT 3296 16.77688889638486 18.67109500215383
+ POINT 3297 16.90823717346987 19.54895804099115
+ POINT 3298 15.66731510254423 17.81120259941419
+ POINT 3299 15.93239678965792 17.3770904840493
+ POINT 3300 15.12588811735991 17.81032407015078
+ POINT 3301 15.40255579021237 18.24333521180063
+ POINT 3302 14.85535684791786 17.37460770073489
+ POINT 3303 15.10975920515541 16.93820082241529
+ POINT 3304 14.5744686233815 16.93461706538583
+ POINT 3305 14.59059753558601 17.80674031312132
+ POINT 3306 16.79406525039852 28.02745799197655
+ POINT 3307 17.07238886613754 28.4906939788942
+ POINT 3308 16.57289177244715 28.46738533203519
+ POINT 3309 17.4965710356451 27.60644365003999
+ POINT 3310 17.80117571229844 28.04994051262165
+ POINT 3311 17.02019681392827 27.57157998790804
+ POINT 3312 16.52069972023788 27.54827134104903
+ POINT 3313 17.58991650606833 28.49979170459397
+ POINT 3314 18.10312000032976 28.50159082583126
+ POINT 3315 18.41154163693258 26.70405457720359
+ POINT 3316 18.5809862969927 26.22413241238169
+ POINT 3317 18.8590620588132 26.65851173471512
+ POINT 3318 17.91957654068757 26.71697613947613
+ POINT 3319 17.69355159834902 26.21921846733577
+ POINT 3320 18.11866262353381 25.81991390377403
+ POINT 3321 16.25412989716249 27.08512372750859
+ POINT 3322 16.02799833363274 27.5410017315771
+ POINT 3323 12.4713348273634 20.44086210014538
+ POINT 3324 12.74356289841131 20.88266792813398
+ POINT 3325 12.48035189032188 21.32047783433658
+ POINT 3326 11.9561289915379 23.08041192363828
+ POINT 3327 12.47539190118238 23.07854903560531
+ POINT 3328 12.21410635583005 23.51991665586499
+ POINT 3329 11.69840716659313 22.64001307273599
+ POINT 3330 13.00253570004953 22.19714775592412
+ POINT 3331 13.52908269363856 22.196464052818
+ POINT 3332 13.52075711029057 23.07307462590749
+ POINT 3333 13.79176001498042 22.63195101028575
+ POINT 3334 12.99841005278091 23.07655233280262
+ POINT 3335 12.74043268848876 22.63704760057591
+ POINT 3336 12.47951754845101 22.19914445872682
+ POINT 3337 16.76214594331712 26.16105609261419
+ POINT 3338 16.616482945813 25.71543906542623
+ POINT 3339 16.07300726146418 25.70885169527617
+ POINT 3340 15.7756762466737 26.15848944588978
+ POINT 3341 16.01909527733369 26.61668049315067
+ POINT 3342 15.51800947989736 26.61966307077576
+ POINT 3343 16.51179666393882 26.6239501026226
+ POINT 3344 18.1251910242728 22.66390416293884
+ POINT 3345 18.38730066575757 22.23230127821533
+ POINT 3346 18.87782298075228 22.24485624002787
+ POINT 3347 18.30109750604809 23.11887529175939
+ POINT 3348 18.75407461365194 23.14583948729189
+ POINT 3349 19.25336766894756 22.67096916601431
+ POINT 3350 19.18732501041783 23.0950223359802
+ POINT 3351 19.76177108442964 23.07772703249995
+ POINT 3352 13.22907297795537 11.13290668839839
+ POINT 3353 12.97061925836632 10.68124856516747
+ POINT 3354 12.46766895126554 10.67227901173746
+ POINT 3355 12.97143653644138 11.58072012917699
+ POINT 3356 13.4844546615271 11.58282112395052
+ POINT 3357 12.45912907450942 11.5804496180641
+ POINT 3358 12.71451075808115 12.03036405361623
+ POINT 3359 -7.335668197682937 22.20031115705586
+ POINT 3360 -7.590411055385765 22.64051999376785
+ POINT 3361 -6.827537248934346 22.20035519110679
+ POINT 3362 -6.573651574572926 22.64022353991485
+ POINT 3363 -6.319913095875537 22.20029198565057
+ POINT 3364 -5.813247200796855 22.20059393150383
+ POINT 3365 -5.306832057388836 22.20081300727318
+ POINT 3366 -6.067132875158276 21.76072558269578
+ POINT 3367 -5.81454204920424 21.32106756251621
+ POINT 3368 -5.309100236308474 21.32171516131793
+ POINT 3369 -9.89088523942082 17.79886411983713
+ POINT 3370 -10.14857204283547 18.23918999542934
+ POINT 3371 -9.377722815740299 17.79898156357048
+ POINT 3372 -9.121932143058153 18.23935021686822
+ POINT 3373 -9.377649624192905 18.6793738168293
+ POINT 3374 -10.66209369019408 15.59357842031993
+ POINT 3375 -10.4047259333652 16.03513252143312
+ POINT 3376 -9.890767799768657 16.03514342813541
+ POINT 3377 -15.5551069052719 19.54892678731335
+ POINT 3378 -15.97007772814454 19.09864623920131
+ POINT 3379 -16.11086108382489 19.54894292435325
+ POINT 3380 -15.08631065964352 19.54931079809318
+ POINT 3381 -15.22709401532387 19.99960748324512
+ POINT 3382 -11.95485738736122 20.44085699368801
+ POINT 3383 -12.47133467813871 20.44086208506123
+ POINT 3384 -12.2071089926688 20.00000805384752
+ POINT 3385 -12.48035172922288 21.32047778514489
+ POINT 3386 -11.95880860940138 21.32105241155066
+ POINT 3387 -12.22007726579314 21.75981917179383
+ POINT 3388 -11.69942419611676 20.88138349347376
+ POINT 3389 -17.47644814565474 19.54717789841071
+ POINT 3390 -17.94988903481506 19.54747252881383
+ POINT 3391 -17.76408314933547 19.99954839206847
+ POINT 3392 -18.23422300064733 19.09467791728322
+ POINT 3393 -17.87676913679358 18.65944248023681
+ POINT 3394 -17.09404296891593 19.09688220569864
+ POINT 3395 -16.90823708343633 19.54895806895328
+ POINT 3396 -19.76177103771798 23.07772732892936
+ POINT 3397 -19.25336756698695 22.67096898371729
+ POINT 3398 -19.18732490419377 23.0950221392252
+ POINT 3399 -19.4477189002975 22.22685220009963
+ POINT 3400 -19.87859220361732 22.20035725566065
+ POINT 3401 -19.25792784453962 23.55188835030948
+ POINT 3402 -18.75407461812375 23.14583867813167
+ POINT 3403 -19.16298007020004 24.02058528839067
+ POINT 3404 -19.60183463285162 23.97090406750409
+ POINT 3405 -17.87637073668006 21.33989279033893
+ POINT 3406 -17.34486803521384 21.33058393944672
+ POINT 3407 -17.55962675727944 21.76632022241122
+ POINT 3408 -17.09376266137075 20.90344544375881
+ POINT 3409 -16.77701868197013 21.3298728758311
+ POINT 3410 -17.4761271373948 20.45170513451989
+ POINT 3411 -16.90827778415109 20.45099407090427
+ POINT 3412 -17.94956802655513 20.45199976492301
+ POINT 3413 -18.23371022509465 20.90481762695371
+ POINT 3414 -15.02942422141325 28.42914654430462
+ POINT 3415 -14.7671126385203 27.97953118420565
+ POINT 3416 -15.52045268491218 27.53143128093732
+ POINT 3417 -15.78702266040701 27.9945786571865
+ POINT 3418 -15.54890495492492 28.43938079825739
+ POINT 3419 -15.01758100424557 27.52935438202635
+ POINT 3420 -14.50521687329288 27.52387632798913
+ POINT 3421 -9.904430672806125 28.40707065619491
+ POINT 3422 -10.41689547651911 28.41240707877134
+ POINT 3423 -10.66929721457722 27.96611203768271
+ POINT 3424 -10.92866096154303 28.41597287549923
+ POINT 3425 -9.645779006227713 27.95898668411711
+ POINT 3426 -9.392677949480536 28.4035110993572
+ POINT 3427 -10.41083773720197 27.51739624213824
+ POINT 3428 -9.899141965330045 27.51510256681794
+ POINT 3429 -10.15244797297871 27.06995256800136
+ POINT 3430 -12.99581434484171 20.4418189497832
+ POINT 3431 -13.51014574115279 20.441823572053
+ POINT 3432 -13.23791767975737 20.00001776749054
+ POINT 3433 -13.00483139592588 21.32143464986686
+ POINT 3434 -13.53137837642367 21.32075092653462
+ POINT 3435 -13.26816736611243 21.75856082205582
+ POINT 3436 -12.74356273953413 20.88266788962369
+ POINT 3437 -13.79945752002789 20.88653779646463
+ POINT 3438 -14.06279349021444 21.32366396865359
+ POINT 3439 -13.00253550757575 22.19714766326392
+ POINT 3440 -13.52908248807354 22.19646393993168
+ POINT 3441 -16.2347869870319 21.3294814436242
+ POINT 3442 -16.48589236087499 21.75661993931211
+ POINT 3443 -12.19975810951217 27.07290291179299
+ POINT 3444 -12.4571711074429 27.52124904151294
+ POINT 3445 -12.9694803662368 27.52097783922964
+ POINT 3446 -12.45674394638519 26.62593741289694
+ POINT 3447 -13.99578690627322 27.52331351175184
+ POINT 3448 -14.24625527199849 27.07313670957253
+ POINT 3449 -13.48182261231196 27.52097247150653
+ POINT 3450 -13.22448305890368 27.07257926105835
+ POINT 3451 -16.51179676394965 26.62394911594787
+ POINT 3452 -16.76214593621621 26.16105509049696
+ POINT 3453 -16.01909528016721 26.61667970802645
+ POINT 3454 -15.77567611970079 26.15848881210691
+ POINT 3455 -16.6164827210978 25.71543822133669
+ POINT 3456 -17.10186669733096 25.72098721941252
+ POINT 3457 -14.2878073219469 25.27536783225349
+ POINT 3458 -14.55271790511985 24.83011743787473
+ POINT 3459 -8.872303159269968 26.61976418580748
+ POINT 3460 -9.383403717149058 26.62219230704299
+ POINT 3461 -8.615525103211919 26.17503638397946
+ POINT 3462 -8.361773029290564 26.61807484838205
+ POINT 3463 -6.072689306874938 27.05391647376855
+ POINT 3464 -5.820129147476668 27.49712192171329
+ POINT 3465 -6.32809711573065 27.4985865281558
+ POINT 3466 -8.108499361881071 27.06075324214968
+ POINT 3467 -7.851721305823022 26.61602544032166
+ POINT 3468 -7.342393531093229 26.61452723488857
+ POINT 3469 -7.595667198502723 26.17184884112093
+ POINT 3470 -7.089552456771225 27.05704245715018
+ POINT 3471 -6.833498349450926 26.61286585794945
+ POINT 3472 -8.86778693118517 24.84742870791405
+ POINT 3473 -9.124384612345526 25.29019441464502
+ POINT 3474 -9.37915421259267 24.8485055322633
+ POINT 3475 -8.869536282064676 25.73292165585033
+ POINT 3476 -9.380903563472174 25.73399848019958
+ POINT 3477 -8.359006152085271 25.7312323184249
+ POINT 3478 -8.357038518711398 24.84664678923989
+ POINT 3479 -10.66208748767119 24.40642264890459
+ POINT 3480 -10.40472005439022 23.96486714250717
+ POINT 3481 -9.890762707770147 23.96485666497387
+ POINT 3482 -10.14796982013292 23.52313091779618
+ POINT 3483 -9.635034736729882 24.4061663576086
+ POINT 3484 -9.891632417890238 24.84893206433957
+ POINT 3485 -10.91783258828627 25.73632062930466
+ POINT 3486 -11.1763927535566 25.29161367806042
+ POINT 3487 -10.91909643785067 24.8491689242055
+ POINT 3488 -10.40452189220693 24.84933916498578
+ POINT 3489 -10.14864136806972 25.29167833964048
+ POINT 3490 -11.74873160124686 31.58187192779659
+ POINT 3491 -11.49828734891701 32.00603316279637
+ POINT 3492 -11.47479874651534 31.12093311396852
+ POINT 3493 -11.99907724384035 31.14306172093513
+ POINT 3494 -8.903187047443012 31.09050659247998
+ POINT 3495 -8.391529066814227 31.08429727879821
+ POINT 3496 -9.153056137445173 30.63961932778357
+ POINT 3497 -9.398187070199079 29.29658412996691
+ POINT 3498 -9.657774617851228 29.74665905739351
+ POINT 3499 -8.893751625915996 30.18945879004375
+ POINT 3500 -8.634397568876253 29.73884359430083
+ POINT 3501 -8.383104670453044 30.18672919584575
+ POINT 3502 -9.404349035868384 30.19173372623865
+ POINT 3503 -9.917079129380406 30.19681959513333
+ POINT 3504 -11.43712146196009 23.08138062463141
+ POINT 3505 -10.92066341043863 23.08206159128155
+ POINT 3506 -10.92128239036736 22.20090962423238
+ POINT 3507 -11.43896690004795 22.20068779271661
+ POINT 3508 -10.40485749578829 23.08231672552517
+ POINT 3509 -9.890900149168209 23.08230624799187
+ POINT 3510 -9.634625983220046 22.64137541680352
+ POINT 3511 -10.66359373947392 22.64123692147724
+ POINT 3512 -10.40547647571701 22.201164758476
+ POINT 3513 -10.66371310846123 20.88088246173954
+ POINT 3514 -10.40367257665969 20.44035401979257
+ POINT 3515 -10.40541301206526 21.32077321133221
+ POINT 3516 -9.8901701579261 20.44035371858478
+ POINT 3517 -10.14618183706572 19.99999877694407
+ POINT 3518 -9.634491342600295 20.88059096244695
+ POINT 3519 -6.573652952599984 17.35977611294056
+ POINT 3520 -6.827538661488333 17.79964423723647
+ POINT 3521 -7.335669920285115 17.79968797825121
+ POINT 3522 -6.827402180000886 16.91959841386031
+ POINT 3523 -7.335858102257347 16.9191701018657
+ POINT 3524 -7.590413254981577 17.35947930332449
+ POINT 3525 -3.091725092272973 19.99999995889544
+ POINT 3526 -2.823024423095185 20.44465006103595
+ POINT 3527 -2.82302446192895 19.55534988331524
+ POINT 3528 -2.318125036326323 19.55191484953968
+ POINT 3529 -2.134926559547786 19.9999999853544
+ POINT 3530 -2.359753808315156 39.37214496437061
+ POINT 3531 -2.220681201259319 39.87633202954547
+ POINT 3532 -2.853428424545745 39.31281750216315
+ POINT 3533 -3.322774736378872 39.23779911173357
+ POINT 3534 -3.813302945216087 39.15997614437607
+ POINT 3535 -4.091233566165744 39.57707352541702
+ POINT 3536 -4.278277613788639 39.06280534020281
+ POINT 3537 -3.156650010923889 39.74931797899575
+ POINT 3538 -3.033012362958341 30.6117523199572
+ POINT 3539 -2.778186554918571 31.06104208632408
+ POINT 3540 -2.27138793410801 31.06354594879045
+ POINT 3541 -2.523911917777087 31.51196219615595
+ POINT 3542 -2.019774925652819 30.61385000253146
+ POINT 3543 -1.765500288511335 31.06477011236333
+ POINT 3544 -2.779450402058304 30.16459938073862
+ POINT 3545 -3.286800193767151 30.16372586173725
+ POINT 3546 -3.794281249655442 30.16411092827807
+ POINT 3547 -3.540719288755405 29.71695798905948
+ POINT 3548 -4.303205754685972 30.16454776931187
+ POINT 3549 -3.027617960595887 32.41056575188199
+ POINT 3550 -2.775003207540966 31.96212546436659
+ POINT 3551 -2.268204586730404 31.96462932683296
+ POINT 3552 -2.013562100740824 32.41916396507942
+ POINT 3553 -1.762470810976946 31.96900069686879
+ POINT 3554 -2.77002899331762 32.86450527990432
+ POINT 3555 -3.278351077419224 32.86027843674272
+ POINT 3556 -2.262552160354756 32.87152776282665
+ POINT 3557 -2.513285277178094 33.32124044768738
+ POINT 3558 -1.512133134743765 31.51667171366356
+ POINT 3559 -1.257490648754185 31.97120635191003
+ POINT 3560 -0.7545339478042523 31.97468651214141
+ POINT 3561 -0.5035764459107245 31.51991166117807
+ POINT 3562 -0.7557251001955001 31.06778971354904
+ POINT 3563 -1.260520126288574 31.06697576740457
+ POINT 3564 -1.997791297947086 34.24333855669495
+ POINT 3565 -2.25349817785614 33.77894139916177
+ POINT 3566 -2.760975010819003 33.77191891623943
+ POINT 3567 -3.011955447586298 34.2203681171806
+ POINT 3568 -3.271742546908253 33.76266716570622
+ POINT 3569 -2.748277227128552 34.67648604901853
+ POINT 3570 -3.259044763217802 34.66723429848531
+ POINT 3571 -2.242930952922364 34.69789100853247
+ POINT 3572 -10.99496194121145 34.7558609147853
+ POINT 3573 -11.47394482127665 34.67289318116666
+ POINT 3574 -10.72127300001099 35.18620741077456
+ POINT 3575 -10.447732383235 34.72460493961236
+ POINT 3576 -11.39311640574461 35.78402816783584
+ POINT 3577 -11.76362390176834 35.51004748537068
+ POINT 3578 -11.89139445142899 36.08088113093766
+ POINT 3579 -10.945244583311 30.21194894494906
+ POINT 3580 -11.20910920668068 30.66888033631249
+ POINT 3581 -10.95876356408719 31.10769054317395
+ POINT 3582 -10.43863904361896 31.09908334789622
+ POINT 3583 -10.70432858345361 31.55113612555225
+ POINT 3584 -10.17836378582505 30.6487660147482
+ POINT 3585 -10.43178936780789 30.20369134590305
+ POINT 3586 -12.20772792247103 28.87130307528364
+ POINT 3587 -11.95934239545081 29.3298295299858
+ POINT 3588 -11.44840757865733 29.32083401178019
+ POINT 3589 -11.18782961921505 28.86783790788402
+ POINT 3590 -11.95080070850122 28.4216606767123
+ POINT 3591 -11.44023135727316 28.42154286679538
+ POINT 3592 -12.78538354685579 31.63539654824448
+ POINT 3593 -13.08141318168281 32.09785280557013
+ POINT 3594 -13.69337999756491 33.05046757946367
+ POINT 3595 -14.20287042370327 33.22861936316023
+ POINT 3596 -13.9643465646559 33.62431331178948
+ POINT 3597 -14.50371229213761 32.89870088682812
+ POINT 3598 -14.7783619362536 33.47590510864688
+ POINT 3599 -14.33939456995485 32.47590094466933
+ POINT 3600 -13.3984866124191 32.59184334012446
+ POINT 3601 -13.61483042587599 32.16078309628009
+ POINT 3602 -12.5094486201497 31.15885540730061
+ POINT 3603 -12.23551576541817 30.69791659347253
+ POINT 3604 -12.48258595884198 30.24998072031472
+ POINT 3605 -13.02182206843361 31.19025142078188
+ POINT 3606 -13.23628259023528 30.6875215539166
+ POINT 3607 -13.51221751694137 31.16406269486048
+ POINT 3608 -12.98553667078657 30.24101005064971
+ POINT 3609 -9.935933060425999 31.99895783017763
+ POINT 3610 -9.425788712629927 31.99952776172602
+ POINT 3611 -9.175113162335302 32.44721817562974
+ POINT 3612 -9.433884308094877 32.90351985240996
+ POINT 3613 -9.947998399553743 32.91366946294919
+ POINT 3614 -9.694220649782007 33.36180258527841
+ POINT 3615 -5.845709714652145 32.8543394931615
+ POINT 3616 -6.35943259227712 32.85785448154385
+ POINT 3617 -6.099796641324188 32.4084027857334
+ POINT 3618 -6.620526367917938 33.30931460020675
+ POINT 3619 -6.874613294589981 32.86337789277866
+ POINT 3620 -5.843830266875138 33.74469076224041
+ POINT 3621 -6.366502908847091 33.75556165131462
+ POINT 3622 -6.104987510117153 34.19646122458308
+ POINT 3623 -6.881683611159954 33.76108506254942
+ POINT 3624 -8.152299853281146 32.43384481530836
+ POINT 3625 -7.904575766385607 32.88643722911405
+ POINT 3626 -7.38887125499455 32.87173901043978
+ POINT 3627 -7.651411581621856 33.32953623011583
+ POINT 3628 -7.891317422946985 31.97994508772288
+ POINT 3629 -7.127777479353732 32.42027889177689
+ POINT 3630 5.815416780370211 25.7254507508302
+ POINT 3631 6.068349777660536 25.28383032121751
+ POINT 3632 6.322914497966334 25.72626412073013
+ POINT 3633 5.813813981238598 24.84216926607556
+ POINT 3634 5.054251193044102 25.28243436294704
+ POINT 3635 5.306981751859498 24.8417834592201
+ POINT 3636 5.559943673033683 24.40093577397807
+ POINT 3637 6.584305206584972 27.94375248790075
+ POINT 3638 6.331860450220269 28.38790682772228
+ POINT 3639 6.840628663734527 28.38986729253429
+ POINT 3640 6.328097160904627 27.49858657198942
+ POINT 3641 5.31221078469278 27.49556469000557
+ POINT 3642 5.057585437902588 27.05131477146023
+ POINT 3643 5.817351437794507 26.61016822842614
+ POINT 3644 6.072689351825773 27.05391651369978
+ POINT 3645 6.325319414707275 26.61163283561645
+ POINT 3646 5.82012918399186 27.49712196479911
+ POINT 3647 5.567618593771634 27.9402347482952
+ POINT 3648 4.047052787592788 28.82584698915801
+ POINT 3649 4.29983719277504 28.38154452099692
+ POINT 3650 4.807024232846825 28.38271374491336
+ POINT 3651 4.301274310468107 29.2720465985073
+ POINT 3652 4.809682020990673 29.27320084424044
+ POINT 3653 4.549022188976916 26.16510838289133
+ POINT 3654 4.802971287585841 26.60801534827591
+ POINT 3655 4.296500402283245 26.6072706710264
+ POINT 3656 5.310107224596258 26.60915248332515
+ POINT 3657 5.56273728747776 26.16686880524183
+ POINT 3658 5.308172567171963 25.72443500572921
+ POINT 3659 4.801571700151651 25.72385241735866
+ POINT 3660 3.790057682711869 26.60644965824722
+ POINT 3661 4.044006781320794 27.04935662363181
+ POINT 3662 3.284985274934477 27.49173672429433
+ POINT 3663 3.031723737372097 27.04803779814592
+ POINT 3664 3.284192748221195 26.60594750772882
+ POINT 3665 3.791445088039201 27.4924373182607
+ POINT 3666 7.595667276623683 26.1718488829917
+ POINT 3667 7.339729660651949 25.72854265913015
+ POINT 3668 6.831093491921173 25.72749718220235
+ POINT 3669 6.578160494630848 26.16911761181503
+ POINT 3670 6.833498408662114 26.61286589708867
+ POINT 3671 7.342393603714925 26.61452727784253
+ POINT 3672 7.851721391752919 26.61602548754698
+ POINT 3673 10.16379461741962 28.8569316742142
+ POINT 3674 9.910917354739734 29.30167017583803
+ POINT 3675 10.42338218073125 29.30700664681063
+ POINT 3676 9.398187236685452 29.296584259916
+ POINT 3677 11.1763929467876 25.29161378016803
+ POINT 3678 11.43269470633229 25.73584899017798
+ POINT 3679 11.17575978189087 27.0727338951912
+ POINT 3680 11.43421927431302 27.52144974007221
+ POINT 3681 10.92260343334439 27.52096222835202
+ POINT 3682 11.43075507899234 26.62688867729366
+ POINT 3683 11.95934260436991 29.32983015861389
+ POINT 3684 12.46767046560084 29.32772545608889
+ POINT 3685 12.20772811265096 28.87130363239207
+ POINT 3686 12.48258604719192 30.24998189542344
+ POINT 3687 11.97221474555926 30.23418783961753
+ POINT 3688 12.23551583543139 30.69791775273026
+ POINT 3689 12.9694805256095 27.52097823699379
+ POINT 3690 13.48182274384587 27.52097291958309
+ POINT 3691 13.74078426771563 27.97171267290139
+ POINT 3692 13.99578697125026 27.52331403777258
+ POINT 3693 -0.2530784093217016 18.66225344208705
+ POINT 3694 0.2530784208222577 18.66225344183592
+ POINT 3695 6.030645871568652e-09 18.22651105844045
+ POINT 3696 0.5081910055071862 19.09773258580186
+ POINT 3697 -0.5081909940579249 19.09773258612098
+ POINT 3698 0.3913327604803437 19.54899791355816
+ POINT 3699 2.734955073611239e-09 19.54899791274126
+ POINT 3700 -0.3913327526621249 19.54899791355815
+ POINT 3701 3.794281045691874 9.835889181209401
+ POINT 3702 3.286800036582792 9.836274197162457
+ POINT 3703 2.229340800261039 4.38442472316282
+ POINT 3704 1.730980420814213 4.354398366661153
+ POINT 3705 1.975648040643678 3.904985248730975
+ POINT 3706 5.253303014360708 1.128293718388772
+ POINT 3707 5.02628530891481 0.6418891392761246
+ POINT 3708 2.255436532179687 1.571943194814049
+ POINT 3709 1.982157162102268 2.023904119430414
+ POINT 3710 2.749111535735891 1.631270413254645
+ POINT 3711 -1.254058521951619 7.116431779054716
+ POINT 3712 -0.7511018940799036 7.112951583302987
+ POINT 3713 -1.503048503853604 6.664068013225982
+ POINT 3714 -1.997790841279557 5.756661654557217
+ POINT 3715 -1.739533928644415 5.288390381777326
+ POINT 3716 -2.242930398731676 5.302109189546279
+ POINT 3717 -1.241669088051592 5.270356204654476
+ POINT 3718 -0.9957604298274654 5.733872215635875
+ POINT 3719 -1.247341652262671 6.199670785960144
+ POINT 3720 -0.7487077108978402 6.190600154807756
+ POINT 3721 -1.750101222783229 6.207340074054102
+ POINT 3722 0.2525804711664861 16.03806627312495
+ POINT 3723 0.7575089779655068 16.03809741945602
+ POINT 3724 2.02030624750022 16.47789565447198
+ POINT 3725 1.768522151534456 16.91607496170236
+ POINT 3726 1.263131370718908 16.9154812897201
+ POINT 3727 1.010191697747241 16.47724942348051
+ POINT 3728 0.7581006050570804 16.91517093599549
+ POINT 3729 1.767492760883478 16.03853792054329
+ POINT 3730 1.262539743627335 16.03840777318063
+ POINT 3731 2.020500917581566 12.9527349076961
+ POINT 3732 2.27331260158336 12.50912505089398
+ POINT 3733 2.779144928744407 12.50876122906312
+ POINT 3734 3.031723754127154 12.95196235014854
+ POINT 3735 2.778352454165535 13.39455042727942
+ POINT 3736 2.272957833603747 13.3948329253368
+ POINT 3737 2.525426876575043 13.8369232187498
+ POINT 3738 2.777506896019309 15.1594754466739
+ POINT 3739 2.272346079797352 15.15939314985943
+ POINT 3740 2.019831152532347 14.71933669397711
+ POINT 3741 3.030366570726561 14.7190708982712
+ POINT 3742 2.272480678625036 14.27823797632229
+ POINT 3743 2.777875299186825 14.27795547826491
+ POINT 3744 10.93683714441736 10.68473936450384
+ POINT 3745 10.42338210640577 10.69299645121282
+ POINT 3746 10.16379499462924 11.14307136444035
+ POINT 3747 9.91091727032488 10.69833236588283
+ POINT 3748 10.41689657692929 11.58759618069605
+ POINT 3749 9.904431740848405 11.59293209536606
+ POINT 3750 8.383104263115078 9.813271926383957
+ POINT 3751 8.131409992405931 9.367205411144512
+ POINT 3752 9.398187257932385 10.70341785754419
+ POINT 3753 9.657774369708918 10.25334294431667
+ POINT 3754 8.893751225144806 9.810542586143804
+ POINT 3755 8.634397395286692 10.26115777621818
+ POINT 3756 8.886484135943755 10.70714689312742
+ POINT 3757 9.13962703655972 11.15213631469359
+ POINT 3758 9.404348514274115 9.808267818781912
+ POINT 3759 9.153055382102501 9.360381968947689
+ POINT 3760 8.872305329160442 13.38023764365699
+ POINT 3761 8.361774760572246 13.38192662649333
+ POINT 3762 8.108500687104918 12.93924814391208
+ POINT 3763 7.851722750806532 13.38397571670315
+ POINT 3764 9.129653596289845 12.93477140237956
+ POINT 3765 9.383406228579656 13.37780999233429
+ POINT 3766 8.365440776821156 12.49364881518358
+ POINT 3767 8.880975687566195 11.60022015801457
+ POINT 3768 8.623178158666493 12.04733677120861
+ POINT 3769 8.876290078715968 12.4908870097273
+ POINT 3770 9.387390978135182 12.48845935840459
+ POINT 3771 9.645780391854883 12.04101593868705
+ POINT 3772 9.392678809554825 11.59649112243135
+ POINT 3773 7.336521171883755 16.03802297080912
+ POINT 3774 6.828065241427138 16.03845128541167
+ POINT 3775 7.5918329762552 15.59662152541176
+ POINT 3776 7.845750620519943 16.03722595032059
+ POINT 3777 7.337862589465587 15.15534235318604
+ POINT 3778 5.057585641163165 12.94868558387678
+ POINT 3779 5.310107534158264 13.39084788872668
+ POINT 3780 5.817351898032172 13.38983223877548
+ POINT 3781 6.07268977213729 12.94608405296639
+ POINT 3782 6.325320010388582 13.38836776247147
+ POINT 3783 5.312210950489913 12.50443571161929
+ POINT 3784 5.820129413724779 12.50287853813417
+ POINT 3785 7.339731120788066 14.27145814743096
+ POINT 3786 7.595668707268915 13.82815216683726
+ POINT 3787 6.578161363273717 13.83088304133535
+ POINT 3788 6.833499237378835 13.38713485552626
+ POINT 3789 7.342394633801588 13.38547368425602
+ POINT 3790 0.252580463343477 23.08531079540609
+ POINT 3791 8.162767350938793e-09 23.52306095911839
+ POINT 3792 -0.2525804483660444 23.08531079452379
+ POINT 3793 0.7575089608641339 23.96190261703586
+ POINT 3794 1.010191668996723 23.52275060745893
+ POINT 3795 0.7581005854889762 23.08482908796231
+ POINT 3796 0.2525804650598689 23.96193376174162
+ POINT 3797 -0.2525804466496525 23.96193376085932
+ POINT 3798 0.5049285060517139 24.40077541877679
+ POINT 3799 -0.5055201152249069 22.64707892226741
+ POINT 3800 -0.7581005704056165 23.08482908597971
+ POINT 3801 -2.280691500226466 21.33225925503491
+ POINT 3802 -2.53596148453538 20.89273520120051
+ POINT 3803 -2.318125017725038 20.44808511706579
+ POINT 3804 -1.847863620987981 20.44808512551896
+ POINT 3805 -1.523722029333108 20.89935045509462
+ POINT 3806 5.812596363012457 16.91987591856731
+ POINT 3807 6.066345594955665 16.47969821633841
+ POINT 3808 5.052976709870697 16.47984331586753
+ POINT 3809 5.306138118529179 16.03968129951453
+ POINT 3810 3.790935938593665 22.20328485170038
+ POINT 3811 3.537066694466712 22.64267534247436
+ POINT 3812 3.788945299949968 23.08133297666114
+ POINT 3813 4.294456576555887 23.08098941943979
+ POINT 3814 5.814542622740053 18.67893193273223
+ POINT 3815 6.321208749925488 18.67923371051273
+ POINT 3816 5.56317568611094 19.11824430305507
+ POINT 3817 5.309100721439222 18.67828449587171
+ POINT 3818 5.55961311789328 17.35962041953518
+ POINT 3819 5.306832701253025 17.79918676761919
+ POINT 3820 5.306180989556889 16.91965690872165
+ POINT 3821 4.547661231803737 17.3588241803909
+ POINT 3822 4.799993464751521 16.91958781683539
+ POINT 3823 4.801296726707842 17.79849881202905
+ POINT 3824 4.295760214073866 17.79792158273044
+ POINT 3825 5.054931683523153 18.23828416995873
+ POINT 3826 4.80356474689404 18.67759654028158
+ POINT 3827 4.299173611489742 18.6763503095416
+ POINT 3828 3.290304316514962 18.67294152057774
+ POINT 3829 3.035034337010901 18.23341748971889
+ POINT 3830 3.285878391294609 17.79579279452859
+ POINT 3831 3.790936184735975 17.79671510214655
+ POINT 3832 4.04457167964008 18.2363897337847
+ POINT 3833 3.794349582151851 18.67514382895771
+ POINT 3834 10.40547659015908 22.20116479457716
+ POINT 3835 10.92128251969344 22.20090966781737
+ POINT 3836 10.14796994537765 23.52313096986383
+ POINT 3837 9.8907628324997 23.96485671831825
+ POINT 3838 10.40472019475341 23.96486720377927
+ POINT 3839 9.890900260175624 23.08230629000788
+ POINT 3840 9.378284610504384 23.96443017775849
+ POINT 3841 9.377738405713401 23.08218964573298
+ POINT 3842 9.634626082765084 22.64137545133806
+ POINT 3843 8.099972523597952 21.7604283165895
+ POINT 3844 7.844935974709012 21.32035791039074
+ POINT 3845 5.052976083273045 23.52015672445931
+ POINT 3846 5.306137433620915 23.96031879840885
+ POINT 3847 5.812969663000015 23.9607046052643
+ POINT 3848 8.610566754219654 19.11957081809886
+ POINT 3849 8.86560419797468 18.67950029477104
+ POINT 3850 8.354849270149012 18.67954721468524
+ POINT 3851 4.553342440596749 20.88364911748843
+ POINT 3852 4.813437754880869 20.4412013335515
+ POINT 3853 7.59041331172436 17.35947928465035
+ POINT 3854 7.84499397090196 16.91893659852759
+ POINT 3855 -19.25787296088819 16.44788827908155
+ POINT 3856 -19.60184782149814 16.02916106451099
+ POINT 3857 -19.1873871451938 16.90476537360675
+ POINT 3858 -19.76179636729207 16.92243533655163
+ POINT 3859 -18.75405232838112 16.85355871501342
+ POINT 3860 -17.47351228606856 13.33558852399519
+ POINT 3861 -16.99713742559343 13.37046042966367
+ POINT 3862 -17.69351481734877 13.78071241680643
+ POINT 3863 -17.67256727113895 14.23260684746697
+ POINT 3864 -17.10180880051252 14.27897349996412
+ POINT 3865 -17.52690194145971 14.67823884343126
+ POINT 3866 -18.11860795829596 14.17997776027357
+ POINT 3867 -8.872305209312021 13.38023770553157
+ POINT 3868 -8.615527284439597 13.82496527042976
+ POINT 3869 -9.383406088516729 13.37781006740056
+ POINT 3870 -3.29030430028144 18.67294152375674
+ POINT 3871 -3.794349564136366 18.67514383248151
+ POINT 3872 -4.044571659990828 18.23638973901306
+ POINT 3873 -3.790936165766305 17.79671510855067
+ POINT 3874 -4.295760192767313 17.79792158977951
+ POINT 3875 -3.035034321141562 18.23341749366453
+ POINT 3876 -4.801296702384416 17.79849882003976
+ POINT 3877 -4.547661208159893 17.35882418957737
+ POINT 3878 -5.306180959737993 16.91965692151171
+ POINT 3879 -5.55961308673966 17.35962043087595
+ POINT 3880 -5.306832673423715 17.79918677637247
+ POINT 3881 -4.799993438895712 16.91958782835436
+ POINT 3882 -4.294456929278608 16.9190105980941
+ POINT 3883 -2.272576526046017 16.03887380690432
+ POINT 3884 -2.777737341802472 16.0389561054949
+ POINT 3885 -2.524923853949907 15.59959837248141
+ POINT 3886 -1.009801502771103 14.71943838905496
+ POINT 3887 -1.262295091084871 15.15932946921788
+ POINT 3888 -1.767248108404131 15.15945961891492
+ POINT 3889 -1.514810020874192 15.59938592419379
+ POINT 3890 -3.788433924444957 15.15930010017922
+ POINT 3891 -3.282944342657759 15.15927612630229
+ POINT 3892 -3.53557425149356 15.59970464494893
+ POINT 3893 -7.339731052101191 14.27145818376952
+ POINT 3894 -7.595668629168774 13.82815220873106
+ POINT 3895 -7.849059155801069 14.26996022049591
+ POINT 3896 -7.342394561194965 13.3854737272261
+ POINT 3897 -7.084485066391316 14.7143115191922
+ POINT 3898 -6.829226012364133 15.15638770751324
+ POINT 3899 -6.321312708705147 15.15701776202244
+ POINT 3900 -6.068350603934552 14.71617011524867
+ POINT 3901 -6.322915322587308 14.27373641192795
+ POINT 3902 -5.815417372472714 14.27454968432659
+ POINT 3903 -6.831094539759021 14.27250350742734
+ POINT 3904 -6.578161308297183 13.83088307650527
+ POINT 3905 -8.866490968805563 16.03593620740154
+ POINT 3906 -8.611811380443392 15.59504271031803
+ POINT 3907 -9.378288849377203 16.03556985539014
+ POINT 3908 -9.6350393648364 15.59383445480634
+ POINT 3909 -9.379158137016026 15.15149576728833
+ POINT 3910 -9.89163708740748 15.1510693400336
+ POINT 3911 -15.8358398935749 10.22173585196274
+ POINT 3912 -15.57327200390477 9.802417738572654
+ POINT 3913 -15.56201444033999 10.67148502492812
+ POINT 3914 -15.03253570609934 9.806583202382573
+ POINT 3915 -14.77952317432621 10.24189580191657
+ POINT 3916 9.425787409990559 8.000472836505047
+ POINT 3917 9.674058285545414 8.456902013814751
+ POINT 3918 8.913238706756516 8.008641634917387
+ POINT 3919 9.413783458670364 8.907219666364485
+ POINT 3920 8.903186169541055 8.909494433726376
+ POINT 3921 8.934155614066498 6.185727604037459
+ POINT 3922 9.185518368839453 5.729430618608695
+ POINT 3923 8.426271183269629 5.29029227071893
+ POINT 3924 8.171917178443586 5.749542014684138
+ POINT 3925 7.909982677729378 5.316726387461308
+ POINT 3926 7.65715073777133 4.866671726394044
+ POINT 3927 7.405022267322629 4.401754646811489
+ POINT 3928 7.912208212106719 4.392559563913546
+ POINT 3929 7.402796732945287 5.325921470359251
+ POINT 3930 8.404914415163201 4.401060889634398
+ POINT 3931 8.152785944714498 3.936143810051844
+ POINT 3932 8.395983975566867 3.439639257034445
+ POINT 3933 7.903277772510386 3.431137931313593
+ POINT 3934 8.859661009169432 3.521793227546019
+ POINT 3935 9.192238274352787 3.866734673314474
+ POINT 3936 4.268076247259387 3.565481647629336
+ POINT 3937 4.016822549239988 3.997412240786614
+ POINT 3938 3.742622838171702 3.563061153758769
+ POINT 3939 7.792705379504119 2.62557788257827
+ POINT 3940 7.793203652127295 2.025645271244315
+ POINT 3941 7.321623681205077 1.829570466086152
+ POINT 3942 7.678396273741249 1.532671260083118
+ POINT 3943 -9.67405808643629 8.456902308458442
+ POINT 3944 -9.413783282784191 8.907219840486656
+ POINT 3945 -9.425787263000267 8.000473059513219
+ POINT 3946 -9.404348331955575 9.808267994664813
+ POINT 3947 -9.657774187537704 10.2533431194428
+ POINT 3948 -9.398187091428191 10.70341798750657
+ POINT 3949 -8.886483995011314 10.70714699997187
+ POINT 3950 -8.634397277109187 10.26115787334679
+ POINT 3951 -8.375837072421056 10.70987630924256
+ POINT 3952 -7.859855983182076 11.60547875629908
+ POINT 3953 -8.117653499839879 11.15836215444448
+ POINT 3954 -7.865566781937751 10.71237302781939
+ POINT 3955 -7.402798620889166 5.325921535058544
+ POINT 3956 -7.909984549202172 5.316726131062188
+ POINT 3957 -7.91137279652743 6.215871164881401
+ POINT 3958 -7.395668297048518 6.230569439935667
+ POINT 3959 -7.651411014573558 6.670464686753046
+ POINT 3960 -7.127776753374082 7.579721889218547
+ POINT 3961 -7.388870581544597 7.128261877982224
+ POINT 3962 -6.874612686924131 7.136622973043634
+ POINT 3963 -7.904575081023509 7.113563602927958
+ POINT 3964 -2.775002874658712 8.037874849929569
+ POINT 3965 -2.523911656853837 8.48803806266702
+ POINT 3966 -2.748276461706778 5.323514342820022
+ POINT 3967 -2.490019549071636 4.855243070040132
+ POINT 3968 -2.734687480700977 4.405830000443286
+ POINT 3969 -2.221684119951277 3.449608486395616
+ POINT 3970 -1.723323855016578 3.419581979977251
+ POINT 3971 -1.475257769780243 2.932460366680298
+ POINT 3972 -1.727946415087521 2.471297653398232
+ POINT 3973 -2.223574359144033 2.516811469853332
+ POINT 3974 -3.221425371391462 2.620248809612628
+ POINT 3975 -3.480916638529793 3.091370153630558
+ POINT 3976 -2.468657119838987 3.007906638484771
+ POINT 3977 -2.720982349242926 3.493309929661852
+ POINT 3978 -2.722872588435682 2.560512913119568
+ POINT 3979 -5.842877759869626 2.614418369465591
+ POINT 3980 -6.061704181617179 2.125899992841759
+ POINT 3981 -5.97038887687998 1.577324987897494
+ POINT 3982 -5.06120498229036 2.210552055587216
+ POINT 3983 -5.314757330560761 1.807879325032759
+ POINT 3984 -5.55603059107262 1.449150510867695
+ POINT 3985 -5.910338424284915 0.8932498958018659
+ POINT 3986 -5.818442258077686 3.559384883546551
+ POINT 3987 -6.081231365982387 4.02806702834004
+ POINT 3988 -5.831279019722861 4.472379399615662
+ POINT 3989 -5.313338782452499 4.466227623547525
+ POINT 3990 -5.576017782319205 4.91994190717009
+ POINT 3991 -6.359431968524975 7.142146372318731
+ POINT 3992 -6.620525796695491 6.690686361082408
+ POINT 3993 1.233115817299789 35.66363567026767
+ POINT 3994 1.486808643266108 35.18419627849168
+ POINT 3995 0.4944716807918905 35.20892209325812
+ POINT 3996 0.7430350528777356 34.73871437587108
+ POINT 3997 1.24166914315593 34.72964380187346
+ POINT 3998 1.723322487966932 36.58041769429607
+ POINT 3999 1.47525558328076 37.06753926104606
+ POINT 4000 1.229221132046703 36.61216257531929
+ POINT 4001 1.727943080105888 37.52870184484969
+ POINT 4002 2.223571255475589 37.48318802553167
+ POINT 4003 2.221683046657149 36.55039137343753
+ POINT 4004 -6.12911124076021e-07 36.15975594917647
+ POINT 4005 0.2456022332246583 35.68768488038043
+ POINT 4006 0.7400741502994709 35.68099311908834
+ POINT 4007 0.9842463697325569 36.14239845738996
+ POINT 4008 0.7361794650463853 36.62952002413996
+ POINT 4009 0.2456016905429583 36.6413100607267
+ POINT 4010 -3.793978809704677 29.27114346488373
+ POINT 4011 -3.286497753816385 29.27075839834291
+ POINT 4012 -4.047052767131356 28.82584690724009
+ POINT 4013 -4.301274302070375 29.27204649795666
+ POINT 4014 -1.010043015772705 27.0468834923308
+ POINT 4015 -1.262608764623798 27.49047222490107
+ POINT 4016 -1.767930085310411 27.49060023494886
+ POINT 4017 -1.515420458762666 27.93408208316265
+ POINT 4018 0.2524349327400771 25.72146687392503
+ POINT 4019 0.7573603149878654 25.72151113216611
+ POINT 4020 1.009801512786854 25.28056167560054
+ POINT 4021 0.7573634246136738 24.84063535787972
+ POINT 4022 0.2524349288094089 24.84066650258547
+ POINT 4023 2.777737238018064 23.96104396031738
+ POINT 4024 2.524923774235408 24.40040170273027
+ POINT 4025 2.777506791782362 24.84052463209574
+ POINT 4026 3.535574059218396 24.40029545953312
+ POINT 4027 3.282925370480001 23.96061617471239
+ POINT 4028 3.282944215957301 24.84072399033624
+ POINT 4029 12.20022707000518 35.34109407649751
+ POINT 4030 11.70510822545789 35.04850824368519
+ POINT 4031 11.91055210130007 34.50393744856109
+ POINT 4032 12.60489935123083 35.00986841165744
+ POINT 4033 12.66773748228985 35.47670596579247
+ POINT 4034 8.893751753942059 30.18945889408129
+ POINT 4035 9.153056290168134 30.63961947961057
+ POINT 4036 8.131410636714342 30.63279563621241
+ POINT 4037 8.383104759045018 30.18672926891533
+ POINT 4038 8.634397687045755 29.73884369142445
+ POINT 4039 12.58774522600974 32.92273845990162
+ POINT 4040 12.88263711150898 33.38136361259253
+ POINT 4041 11.99490300572006 33.72244417282177
+ POINT 4042 11.76196217222862 33.30918283037465
+ POINT 4043 10.44503879622377 31.98862289521601
+ POINT 4044 9.935933261738526 31.99895822327177
+ POINT 4045 10.19676774154491 32.44505172349099
+ POINT 4046 10.43863927688695 31.09908378942327
+ POINT 4047 9.923929035406161 31.09221194132288
+ POINT 4048 12.04127152589021 32.88444301026691
+ POINT 4049 12.3185949442571 32.49062006753039
+ POINT 4050 11.23899726008386 32.44352050666546
+ POINT 4051 11.49281189047597 32.87706443800342
+ POINT 4052 10.95968790642227 32.8682603267732
+ POINT 4053 1.262715484017742 28.37904364136764
+ POINT 4054 1.768036798549242 28.37917166198487
+ POINT 4055 1.010161265302347 28.82419254739624
+ POINT 4056 2.021045344488098 28.82414552152322
+ POINT 4057 1.767940462475327 29.27066494618034
+ POINT 4058 1.26253538053122 29.27109444816391
+ POINT 4059 2.770029231935803 32.86450580601395
+ POINT 4060 2.513285504693407 33.32124089899702
+ POINT 4061 3.271742772836252 33.76266810178318
+ POINT 4062 3.531281879770986 33.30800649818775
+ POINT 4063 3.782262295813676 33.75645595947597
+ POINT 4064 3.278351258691227 32.86027907795702
+ POINT 4065 2.760975203039712 33.77191946209709
+ POINT 4066 3.011955619082402 34.2203689233853
+ POINT 4067 3.24336847489558 35.56418088173734
+ POINT 4068 3.51170389869557 35.11435420516057
+ POINT 4069 3.259044827222107 34.66723526388904
+ POINT 4070 2.748277257425567 34.67648662420295
+ POINT 4071 3.775382260352405 34.65823650434292
+ POINT 4072 2.490020077115392 35.144757594862
+ POINT 4073 2.734687809839291 35.59417066577944
+ POINT 4074 2.982689819169599 36.0349985828101
+ POINT 4075 5.320196103324097 34.6359031807579
+ POINT 4076 5.838135302791581 34.62975089654809
+ POINT 4077 5.843829338818099 33.7446915717945
+ POINT 4078 5.325945325800963 33.74013958043911
+ POINT 4079 6.104986270073042 34.19646204120262
+ POINT 4080 6.366501732041227 33.75556204313139
+ POINT 4081 7.355184469361421 29.28425732715628
+ POINT 4082 7.097783537365648 28.83658193947715
+ POINT 4083 7.865566929755092 29.28762815642849
+ POINT 4084 7.350228293730351 28.39242759965563
+ POINT 4085 19.44766038638703 17.77297915226804
+ POINT 4086 19.25342567711544 17.32881418384076
+ POINT 4087 19.87861805246748 17.79987630487601
+ POINT 4088 19.7617964066728 16.92243558592404
+ POINT 4089 18.23422309592939 19.09467776603307
+ POINT 4090 17.94988909858838 19.54747247390121
+ POINT 4091 17.87676920727169 18.65944226175127
+ POINT 4092 17.47644822823684 19.54717784596157
+ POINT 4093 17.34509995115183 18.66931480712425
+ POINT 4094 17.09404309109673 19.09688211341927
+ POINT 4095 14.28781180230033 14.72466403349399
+ POINT 4096 14.01051623503285 14.27484065136018
+ POINT 4097 14.53345889310514 14.28002636702044
+ POINT 4098 14.02979336632444 15.1647422550637
+ POINT 4099 9.380906978001171 14.26600341154953
+ POINT 4100 9.12438810215771 14.70980710098454
+ POINT 4101 15.04265771685345 14.28419049908406
+ POINT 4102 14.76536214958597 13.83436711695024
+ POINT 4103 15.51798377903927 13.38033526490094
+ POINT 4104 15.77563980375512 13.8415064727855
+ POINT 4105 15.57188627435891 14.28816954061234
+ POINT 4106 15.0151159829359 13.3824166393444
+ POINT 4107 14.50591715918759 13.37825250728078
+ POINT 4108 14.32789030772291 18.24225940568398
+ POINT 4109 14.06264433374127 18.67628429324169
+ POINT 4110 14.59588283104642 18.67648157009492
+ POINT 4111 14.05735903828086 17.80654303626809
+ POINT 4112 15.97007787533187 19.09864616168911
+ POINT 4113 15.55510702426619 19.54892674781743
+ POINT 4114 15.67915324486533 18.67142187799671
+ POINT 4115 15.13772625968102 18.6705433487333
+ POINT 4116 14.87248028569938 19.104568236291
+ POINT 4117 15.08631080741999 19.54931075553736
+ POINT 4118 16.40287455364234 16.49110362272822
+ POINT 4119 16.17789332204421 16.93847666340548
+ POINT 4120 15.63614396207806 16.93957763712053
+ POINT 4121 16.14372364991884 16.05344993095792
+ POINT 4122 15.61382912052633 16.05886889307093
+ POINT 4123 15.35525573754169 16.49958700177147
+ POINT 4124 15.52045255096381 27.53143212489101
+ POINT 4125 15.7870223740392 27.99457973843145
+ POINT 4126 15.02942399137993 28.42914752056209
+ POINT 4127 14.76711254324515 27.97953196141813
+ POINT 4128 14.51705994325481 28.42366935023485
+ POINT 4129 14.50592923991572 26.62175677982754
+ POINT 4130 14.24625536736449 27.07313717726593
+ POINT 4131 14.50521689123425 27.52387693058424
+ POINT 4132 15.01513786829292 26.61758604679623
+ POINT 4133 15.25855689895291 27.07577709405712
+ POINT 4134 15.01758093935937 27.52935510091147
+ POINT 4135 12.9694811665887 12.47903060881283
+ POINT 4136 12.45717370465674 12.47876009769995
+ POINT 4137 14.50520651711792 12.4761250777077
+ POINT 4138 14.7671040812539 12.02046720497029
+ POINT 4139 13.74078013085571 12.02829134523479
+ POINT 4140 13.9984165723697 11.58047790445619
+ POINT 4141 14.51705381061231 11.57633069980357
+ POINT 4142 11.4484074904361 10.67917014008009
+ POINT 4143 11.95934178620452 10.67017466538644
+ POINT 4144 12.20772768780863 11.12870134727384
+ POINT 4145 11.18783017672887 11.13216622534658
+ POINT 4146 11.9508019094484 11.57834527171309
+ POINT 4147 -6.319776468193496 23.08033815128008
+ POINT 4148 -6.066344452733028 23.52030179118255
+ POINT 4149 -6.827400621252306 23.08040135673631
+ POINT 4150 -5.054931155474743 21.76171557577203
+ POINT 4151 -4.801296232783984 22.20150105449617
+ POINT 4152 -4.299173338283442 21.32364952911328
+ POINT 4153 -4.044571390294786 21.76361015107778
+ POINT 4154 -4.803564411703622 21.32240320854091
+ POINT 4155 -9.890817652390373 18.67925530533506
+ POINT 4156 -10.40541205324793 18.6792215753713
+ POINT 4157 -10.66370535213654 19.1191138197801
+ POINT 4158 -10.92145974258163 18.67904850987438
+ POINT 4159 -10.40367095930107 19.55964298171444
+ POINT 4160 -9.890168540567483 19.55964268050665
+ POINT 4161 -9.634489634605369 19.11940539677126
+ POINT 4162 -10.40452722022296 15.15066274552778
+ POINT 4163 -10.91910259518919 15.1508331382961
+ POINT 4164 -11.1763986356346 14.70838986864997
+ POINT 4165 -10.91783739771569 14.26368314942298
+ POINT 4166 -10.14864599240259 14.70832405800977
+ POINT 4167 -12.73019529136231 15.59870134525367
+ POINT 4168 -12.98766621355665 15.15683558657137
+ POINT 4169 -15.04265746253503 14.28419090907873
+ POINT 4170 -14.53345861723851 14.28002669541752
+ POINT 4171 -17.78489628918051 15.09030875190717
+ POINT 4172 -17.98400083785333 15.51100038825157
+ POINT 4173 -18.29676496075896 15.05256382727852
+ POINT 4174 -17.21413781855408 15.13667540440432
+ POINT 4175 -18.37155338762809 16.42393112019951
+ POINT 4176 -18.3010675719337 16.8808082147247
+ POINT 4177 -18.20721907030622 15.96221804176685
+ POINT 4178 -17.69535039872778 15.99996296639551
+ POINT 4179 -11.18084802879951 18.23937671254223
+ POINT 4180 -11.43914132768812 18.67926895695104
+ POINT 4181 -11.43896743540164 17.79930467995242
+ POINT 4182 -12.99576621508222 19.55819858351203
+ POINT 4183 -13.5100976113933 19.55820320578183
+ POINT 4184 -14.85535659566817 17.374607928817
+ POINT 4185 -14.59059730877303 17.80674048573657
+ POINT 4186 -15.12588788049639 17.81032428898499
+ POINT 4187 -14.57446835462891 16.93461729113196
+ POINT 4188 -15.10975892635227 16.93820109438039
+ POINT 4189 -16.50015666545286 20.45264189053479
+ POINT 4190 -16.08514514186547 20.00088643669584
+ POINT 4191 -16.11090178453964 20.45097892630424
+ POINT 4192 -16.88252114147691 20.00090158129587
+ POINT 4193 -16.50011596473811 19.5506058885838
+ POINT 4194 -18.66035566784347 24.06457908884339
+ POINT 4195 -18.99865817957391 24.48245948801812
+ POINT 4196 -18.88584837729288 24.93009825639208
+ POINT 4197 -19.39363960589392 24.88740656466259
+ POINT 4198 -17.82901974500803 22.20723193084345
+ POINT 4199 -17.29751704354181 22.19792307995124
+ POINT 4200 -18.12519085452415 22.66390362771543
+ POINT 4201 -17.42146697630052 23.53377902746666
+ POINT 4202 -17.69547182462984 24.00000320447274
+ POINT 4203 -17.19821562645829 23.98500536439521
+ POINT 4204 -18.2073784758447 24.03761507800751
+ POINT 4205 -17.98412712600248 24.48884141493606
+ POINT 4206 -18.37170036647084 23.57574087838007
+ POINT 4207 -17.74281660287124 23.09380582796382
+ POINT 4208 -17.24556040469969 23.0788079878863
+ POINT 4209 -18.30109742612498 23.11887466729579
+ POINT 4210 -12.74043249554734 22.63704750337856
+ POINT 4211 -12.47951737358623 22.1991443855027
+ POINT 4212 -11.95797425376473 22.19971901190847
+ POINT 4213 -11.69840700784104 22.64001300642548
+ POINT 4214 -11.95612881567687 23.08041184382327
+ POINT 4215 -13.79175978718601 22.63195086063527
+ POINT 4216 -14.05739164572269 22.19336401942717
+ POINT 4217 -16.69915170518863 23.07149332083817
+ POINT 4218 -16.17786098319811 23.06167189306724
+ POINT 4219 -16.40292005613846 23.50895975961821
+ POINT 4220 -16.20887664909252 22.19021698069621
+ POINT 4221 -16.75110834403075 22.1906084129031
+ POINT 4222 -17.02050133175934 22.63152012133533
+ POINT 4223 -13.99649914138446 26.62119352777317
+ POINT 4224 -14.50592910840412 26.62175634401045
+ POINT 4225 -14.76538162860431 26.16564234700188
+ POINT 4226 -14.53346806546978 25.71999620058877
+ POINT 4227 -14.0105122342672 25.72518479387579
+ POINT 4228 -15.04267671628401 25.71582538537957
+ POINT 4229 -16.66503651825777 23.95642639357603
+ POINT 4230 -16.14374579626725 23.9466049658051
+ POINT 4231 -16.93904136658709 24.42265057058211
+ POINT 4232 -16.68103287029956 24.83472097500758
+ POINT 4233 -17.21421197850009 24.86329994582677
+ POINT 4234 -9.637659354432278 26.17823809135695
+ POINT 4235 -9.895007838390011 26.62370467699503
+ POINT 4236 -10.40670361026193 26.62599835231532
+ POINT 4237 -10.66169890492968 26.18015313981581
+ POINT 4238 -10.40539715902982 25.73591795079784
+ POINT 4239 -9.892507684713129 25.73551085015163
+ POINT 4240 -3.538866270674407 27.93563837319875
+ POINT 4241 -3.791445061003568 27.4924372688973
+ POINT 4242 -3.284985242746421 27.49173667393181
+ POINT 4243 -3.792541681848606 28.3806414211657
+ POINT 4244 -4.299837174214305 28.38154445423863
+ POINT 4245 -3.286081863591458 28.37994082620021
+ POINT 4246 -6.578160439640206 26.16911757665643
+ POINT 4247 -6.3253193653182 26.61163279891804
+ POINT 4248 -5.817351397064218 26.61016819247553
+ POINT 4249 -6.322914449413139 25.72626408985695
+ POINT 4250 -6.831093433545865 25.72749714888835
+ POINT 4251 -5.815416739071694 25.72545072182048
+ POINT 4252 -6.068349732977355 25.2838302940524
+ POINT 4253 -8.103068545520017 25.2879261001149
+ POINT 4254 -7.847089733293389 24.84545529905903
+ POINT 4255 -7.33972959193747 25.72854262281094
+ POINT 4256 -7.084483601710403 25.28568913601146
+ POINT 4257 -7.84905736666726 25.73004082824404
+ POINT 4258 -7.337860774808862 24.84465820022065
+ POINT 4259 -6.829224616417257 24.84361272629806
+ POINT 4260 -7.591830748000244 24.40337888934564
+ POINT 4261 -10.95968825756436 32.86825866172835
+ POINT 4262 -11.2389973762048 32.44351916990193
+ POINT 4263 -10.96516313120963 31.99722932793554
+ POINT 4264 -10.45710394986915 32.90333376542937
+ POINT 4265 -10.19676760818201 32.44505103256093
+ POINT 4266 -10.4450386107414 31.98862213265781
+ POINT 4267 -5.839993028780057 31.9585713890503
+ POINT 4268 -5.58222505575568 31.50997899536313
+ POINT 4269 -6.353715906405032 31.96208637743266
+ POINT 4270 -9.890881409539208 22.20113221196177
+ POINT 4271 -9.377719567935678 22.20101557304443
+ POINT 4272 -9.890817945887456 21.32074066481798
+ POINT 4273 -9.377648390967682 21.32062266583164
+ POINT 4274 -10.14857006043265 21.76080491471691
+ POINT 4275 -9.121929625682005 21.76064670155081
+ POINT 4276 -3.989917438513398 37.75936920944303
+ POINT 4277 -4.253220144914879 38.17942950972456
+ POINT 4278 -5.0612047044748 37.78945190920187
+ POINT 4279 -4.788965345375917 37.30790232371594
+ POINT 4280 -5.345230853006697 37.3897257540357
+ POINT 4281 -3.511703891126289 35.11435281720901
+ POINT 4282 -3.775382111584034 34.65823488537108
+ POINT 4283 -4.288463783602202 34.65011427144418
+ POINT 4284 -4.035804655693716 34.20299575272048
+ POINT 4285 -13.43620984438418 34.81446134683805
+ POINT 4286 -13.29869599960812 34.31160156237819
+ POINT 4287 -12.93463213128416 34.64179503997145
+ POINT 4288 -13.62553600610368 33.9629776498918
+ POINT 4289 -14.13908291075123 34.14518767789303
+ POINT 4290 -12.60490716900593 35.00986141752851
+ POINT 4291 -12.20023572325958 35.34108684648683
+ POINT 4292 -12.66774772099321 35.47669756860905
+ POINT 4293 -11.70511437947869 35.04850274706365
+ POINT 4294 -11.9105566427679 34.50393254228281
+ POINT 4295 -12.47145116324818 34.51147573062274
+ POINT 4296 -9.806918774248189 36.80166842930682
+ POINT 4297 -10.26857635288579 37.16264372426561
+ POINT 4298 -10.1979850569437 36.56768967568621
+ POINT 4299 -1.515143968311342 29.71762612467332
+ POINT 4300 -1.767218169152578 30.16613538008133
+ POINT 4301 -2.273105814749252 30.16491121650845
+ POINT 4302 -2.526893645558062 29.71688475828849
+ POINT 4303 -4.295343851645418 33.74833423033055
+ POINT 4304 -3.78226217962725 33.75645484425745
+ POINT 4305 -3.531281742859955 33.30800564331628
+ POINT 4306 -3.788870710138221 32.85406611529395
+ POINT 4307 -4.299971286819369 32.85149198399459
+ POINT 4308 -10.95895536230713 35.58920341710635
+ POINT 4309 -10.41172580433067 35.55794744193341
+ POINT 4310 -11.08356921006429 36.15576819899469
+ POINT 4311 -10.1942008448515 36.08605690473453
+ POINT 4312 -9.956518482555364 35.68306089840274
+ POINT 4313 -10.65319237871901 36.44257621921687
+ POINT 4314 -11.0910623698248 36.64296654514917
+ POINT 4315 -13.7593285339414 31.59910572962469
+ POINT 4316 -13.97378905574307 31.09637586275941
+ POINT 4317 -14.49013543528747 31.07749003746751
+ POINT 4318 -14.0764019646777 32.09309626417902
+ POINT 4319 -14.48389267802026 31.91422357801393
+ POINT 4320 -14.75329172047915 31.4892516249232
+ POINT 4321 -5.587461461429323 33.29923896261564
+ POINT 4322 -5.325946062699384 33.7401385358841
+ POINT 4323 -5.327825510476393 32.84978726680519
+ POINT 4324 -4.809231792482727 33.74478093752646
+ POINT 4325 -5.065600597928541 34.19023273715123
+ POINT 4326 -4.555689316416261 33.29824002906342
+ POINT 4327 -4.813859227656678 32.8479386911905
+ POINT 4328 5.823064971458006 28.38586497473401
+ POINT 4329 5.315146572158927 28.38430769994047
+ POINT 4330 5.062470610533198 28.82834397135218
+ POINT 4331 6.079388428607562 28.83197977936755
+ POINT 4332 5.317804360302774 29.27479479926754
+ POINT 4333 5.827084127424216 29.27699957992611
+ POINT 4334 10.41689568078359 28.4124072611171
+ POINT 4335 10.66929742196129 27.96611222514022
+ POINT 4336 9.904430854792075 28.4070707901445
+ POINT 4337 10.41083792953915 27.51739638025921
+ POINT 4338 8.886484172763202 29.29285479615131
+ POINT 4339 8.37583717786616 29.29012517098535
+ POINT 4340 9.139626727505856 28.8478657394769
+ POINT 4341 8.117653415472539 28.84163926115534
+ POINT 4342 11.95092859671319 24.8475539406863
+ POINT 4343 12.46807375787325 24.84583394788076
+ POINT 4344 12.20840003869946 25.28942203987447
+ POINT 4345 11.95272288103627 23.96287269629527
+ POINT 4346 12.47198579068075 23.9610098082623
+ POINT 4347 12.73018467318101 24.40129625485699
+ POINT 4348 11.43575282852112 23.96401601812759
+ POINT 4349 10.91929475924401 23.96469697384104
+ POINT 4350 11.43395854419803 24.84869726251862
+ POINT 4351 10.91909661344623 24.84916901000663
+ POINT 4352 11.69363226337182 24.40510917052491
+ POINT 4353 10.66208764636606 24.40642272229546
+ POINT 4354 12.45674415720379 26.62593764544495
+ POINT 4355 12.71561902895919 26.17761365870297
+ POINT 4356 12.46344625167966 25.73349620934157
+ POINT 4357 11.9463010905196 25.73521620214711
+ POINT 4358 11.68774091931249 26.17992315964508
+ POINT 4359 11.94436146317965 26.6262558892628
+ POINT 4360 12.19975831688364 27.07290316309354
+ POINT 4361 11.70835016186513 29.77725626131508
+ POINT 4362 11.44840780891525 29.32083443761827
+ POINT 4363 10.94524480188349 30.2119493620846
+ POINT 4364 10.68396014223092 29.76000284437696
+ POINT 4365 11.4612799501046 30.22519211862191
+ POINT 4366 11.20910938557762 30.66888094038705
+ POINT 4367 10.9368374049108 29.31526434275312
+ POINT 4368 11.95080093219896 28.42166108213997
+ POINT 4369 12.4591287934299 28.41955637961497
+ POINT 4370 12.71451082664457 27.96964269203738
+ POINT 4371 12.97143800709656 28.41928524228948
+ POINT 4372 11.69163226937222 27.96979595129795
+ POINT 4373 12.45717131194284 27.52124937431928
+ POINT 4374 11.9447886179187 27.52156761813713
+ POINT 4375 15.29885200343264 28.8835193357322
+ POINT 4376 15.56202156575395 29.32850886335364
+ POINT 4377 15.04254095371091 29.31827443700025
+ POINT 4378 16.0564503860919 28.44895155360157
+ POINT 4379 16.33477400183093 28.91218754051921
+ POINT 4380 15.54890460342297 28.43938194691547
+ POINT 4381 16.09215770029102 29.34350152581874
+ POINT 4382 12.72223555131803 29.77728149733855
+ POINT 4383 12.97062105959908 29.31875497111673
+ POINT 4384 12.98553664119016 30.24101141045128
+ POINT 4385 13.47593186273332 30.21482288295318
+ POINT 4386 14.77952748380703 29.75810228782938
+ POINT 4387 14.50635713461083 30.18825186751686
+ POINT 4388 14.51635792148571 29.31311276020795
+ POINT 4389 13.9900110158661 30.20713768228853
+ POINT 4390 13.73926529844905 29.76062581170174
+ POINT 4391 2.273105774761268 9.83508879984791
+ POINT 4392 2.779450317637714 9.835400651617574
+ POINT 4393 3.033012220564729 9.388247709190718
+ POINT 4394 5.582224331984559 8.490021384452593
+ POINT 4395 5.324236755485918 8.938715200324722
+ POINT 4396 4.303205470450614 9.835452415437004
+ POINT 4397 4.811613166163307 9.834298227553571
+ POINT 4398 4.049286364268548 9.3886844889632
+ POINT 4399 5.068073565684609 9.386690434889857
+ POINT 4400 4.814373978828597 8.940272488625666
+ POINT 4401 2.221682434110464 3.449608482318896
+ POINT 4402 1.723322054663639 3.41958212581723
+ POINT 4403 1.475255227755129 2.932460514091849
+ POINT 4404 1.727942742988692 2.471297861599172
+ POINT 4405 2.223570867244001 2.516811617236392
+ POINT 4406 3.247664549616101 1.691005979661493
+ POINT 4407 3.738193462327802 1.768828689718033
+ POINT 4408 2.976338300237787 2.129153441474481
+ POINT 4409 3.989913465089363 2.240629487564227
+ POINT 4410 3.734383925154549 2.66000978424141
+ POINT 4411 4.249406076125915 2.711750263924309
+ POINT 4412 -0.2525804527561534 16.03806627400728
+ POINT 4413 -0.7575089596573991 16.03809742300865
+ POINT 4414 8.162773457165429e-09 16.47693907063823
+ POINT 4415 0.5055201424216942 17.35292109533307
+ POINT 4416 0.2530784214946227 17.78947522331019
+ POINT 4417 0.2525804694500266 16.91468922909349
+ POINT 4418 -0.2525804544726128 16.91468922997582
+ POINT 4419 -0.2530784086493366 17.78947522356133
+ POINT 4420 -0.5055201286865491 17.35292109643341
+ POINT 4421 -0.7581005899738023 16.91517093797816
+ POINT 4422 10.92866218369657 11.58403101835576
+ POINT 4423 10.66929892991574 12.03389174928147
+ POINT 4424 10.92260560930413 12.47904214844759
+ POINT 4425 11.44023252971531 11.57846179393201
+ POINT 4426 11.6916339164161 12.03021006472227
+ POINT 4427 6.829226066792335 15.15638767985543
+ POINT 4428 7.08448512863891 14.71431148714117
+ POINT 4429 6.32291537112456 14.27373638104556
+ POINT 4430 6.068350648601582 14.71617008807552
+ POINT 4431 6.831094598114815 14.27250347410035
+ POINT 4432 6.574690216144999 15.59804860267928
+ POINT 4433 6.320151929953125 16.03908134219066
+ POINT 4434 5.812970569673526 16.03929553360603
+ POINT 4435 5.559944453526639 15.59906442536678
+ POINT 4436 5.813814797954246 15.15783101089938
+ POINT 4437 6.321312755318322 15.15701773663442
+ POINT 4438 -1.775181001650297 21.33393361507919
+ POINT 4439 -1.267840951818172 21.33711381294345
+ POINT 4440 -2.024810422711531 21.77002261288375
+ POINT 4441 -0.7585985253342913 22.21004308218826
+ POINT 4442 -0.2530784032947191 22.21052479073235
+ POINT 4443 -0.25307840396708 21.33774656408433
+ POINT 4444 6.030698440628868e-09 21.77348895090434
+ POINT 4445 -0.761269396452543 21.33800980180604
+ POINT 4446 -1.012728368769732 21.77259296179061
+ POINT 4447 -1.26517008069992 22.20914709332568
+ POINT 4448 6.57552905270612 19.11917837703191
+ POINT 4449 6.830512439734651 19.55973226747113
+ POINT 4450 6.323600974440302 19.55944563035479
+ POINT 4451 7.337224191221686 19.55973210309189
+ POINT 4452 7.085296112955868 19.99999935641476
+ POINT 4453 7.591126172197229 19.11954137608066
+ POINT 4454 7.845909845418445 19.55980846502429
+ POINT 4455 6.828120215219838 18.67952034762907
+ POINT 4456 5.819524031753277 19.55944573980127
+ POINT 4457 6.074507418781808 19.99999963024048
+ POINT 4458 5.819523813334327 20.44055367013701
+ POINT 4459 6.323600756021351 20.44055356069054
+ POINT 4460 5.314082130452446 19.55879830294076
+ POINT 4461 5.069786234540341 19.99999980475538
+ POINT 4462 5.314081996435311 20.44120126848308
+ POINT 4463 5.563175333674854 20.88175519893314
+ POINT 4464 8.866487420657002 23.96406405540996
+ POINT 4465 8.355738994225081 23.96328213075802
+ POINT 4466 8.100427383778017 23.52188039085872
+ POINT 4467 9.122215393276559 23.52275436205428
+ POINT 4468 8.86594121586602 23.08182352338446
+ POINT 4469 11.18084976696353 21.76061566877308
+ POINT 4470 11.43896704356612 22.20068784304909
+ POINT 4471 11.95797441386322 22.1997190736917
+ POINT 4472 11.9588087557341 21.32105244930146
+ POINT 4473 12.22007742542399 21.75981922903992
+ POINT 4474 10.148570164294 21.76080494256901
+ POINT 4475 9.890881511362227 22.2011322436048
+ POINT 4476 9.377719656900005 22.20101559932991
+ POINT 4477 9.377648474444069 21.3206226826241
+ POINT 4478 9.121929706236603 21.76064672176964
+ POINT 4479 8.865674277639464 22.2008899295029
+ POINT 4480 7.336250313716918 21.32043468385277
+ POINT 4481 7.591125568206087 20.88045701300713
+ POINT 4482 7.337223885828448 20.44026648925234
+ POINT 4483 7.845909546820542 20.44018971579031
+ POINT 4484 6.830512134341413 20.44026665363158
+ POINT 4485 6.575528528893932 20.88082069352811
+ POINT 4486 4.547660785761197 22.64117575790155
+ POINT 4487 4.799992952164152 23.08041215768531
+ POINT 4488 5.306180292478354 23.08034306292107
+ POINT 4489 8.865707267923504 19.55976133923551
+ POINT 4490 8.354952340097839 19.55980825914972
+ POINT 4491 8.865707358596341 20.44023587696896
+ POINT 4492 8.354952041499935 20.44018950991573
+ POINT 4493 9.121386178165395 19.99999862805303
+ POINT 4494 9.377000682960047 20.44023572473563
+ POINT 4495 9.37700059228721 19.55976118700218
+ POINT 4496 8.101050359122295 19.99999898616094
+ POINT 4497 -18.88575813755943 15.0697268260569
+ POINT 4498 -19.39362771734272 15.11254628586869
+ POINT 4499 -18.68665358888661 14.6490351897125
+ POINT 4500 -15.77563967202531 13.84150710457371
+ POINT 4501 -16.01906260749091 13.38331127087525
+ POINT 4502 -16.51175963280237 13.37603091203635
+ POINT 4503 -16.76209633740071 13.83891198637251
+ POINT 4504 -16.61643100772146 14.28454398233681
+ POINT 4505 -3.285878374189513 17.79579280002091
+ POINT 4506 -3.537066906965997 17.35732465078735
+ POINT 4507 -2.781165062341254 17.79402703590121
+ POINT 4508 -2.272346057716946 15.15939316355719
+ POINT 4509 -2.777506873473401 15.15947546214778
+ POINT 4510 -2.019831127927625 14.71933670858128
+ POINT 4511 -3.030366546424797 14.71907091737807
+ POINT 4512 -4.29435723120281 15.1589385317425
+ POINT 4513 -4.800381300429374 15.1587993272791
+ POINT 4514 -4.041727322367009 14.71851001309586
+ POINT 4515 -5.05425164147241 14.71756591615323
+ POINT 4516 -4.295101030996014 14.27689248118367
+ POINT 4517 -3.789177724238159 14.27725404962039
+ POINT 4518 -8.103070844109666 14.7120749267257
+ POINT 4519 -8.357041227963842 15.15335409824602
+ POINT 4520 -8.867790261965396 15.15257226998905
+ POINT 4521 -8.359008421177249 14.26876895168724
+ POINT 4522 -9.124387984536476 14.70980715521631
+ POINT 4523 -8.869538972748195 14.26707997665955
+ POINT 4524 -9.380906847798823 14.26600347395883
+ POINT 4525 -15.04253548417184 10.68172301284076
+ POINT 4526 -14.51635355078331 10.68688712093244
+ POINT 4527 -14.26072851253494 11.13086143448761
+ POINT 4528 -15.29884481679709 11.11647634394399
+ POINT 4529 -15.0294160788359 11.57085075398853
+ POINT 4530 -14.51705395682312 11.57633155901834
+ POINT 4531 8.673610243951781 6.652056971493288
+ POINT 4532 8.414839055579259 7.108358885772509
+ POINT 4533 7.90457462665794 7.113563743870362
+ POINT 4534 8.152298738482797 7.566155996789455
+ POINT 4535 7.651410299100585 6.670464801650749
+ POINT 4536 7.388869982004122 7.128261912667696
+ POINT 4537 7.91137180832887 6.215871382139966
+ POINT 4538 7.395667163675052 6.2305695509373
+ POINT 4539 8.427660313869119 6.189437265397586
+ POINT 4540 8.401580829217719 8.014850918935689
+ POINT 4541 7.8913164002964 8.020055777033541
+ POINT 4542 8.65225636857012 8.462541415161475
+ POINT 4543 7.629644152233771 8.473224754720867
+ POINT 4544 7.380362061498849 8.024529832574634
+ POINT 4545 8.391528292002256 8.915703717744677
+ POINT 4546 7.880480191434996 8.920252392579611
+ POINT 4547 8.948131191765635 5.244986877960783
+ POINT 4548 8.686196691051427 4.812171250737954
+ POINT 4549 8.926774423659207 4.355755496876252
+ POINT 4550 9.445443876621251 5.251309598627719
+ POINT 4551 9.6910474270449 4.80595499243688
+ POINT 4552 9.473520550241012 4.27784503441803
+ POINT 4553 6.871912274813603 4.456666857990875
+ POINT 4554 6.343908009479829 4.48177946767831
+ POINT 4555 6.621960527653464 4.900979418979421
+ POINT 4556 7.126969749148993 3.982554695510378
+ POINT 4557 4.533432449664246 3.111476287422326
+ POINT 4558 4.788961989599059 2.692095990745143
+ POINT 4559 4.807632160732531 3.545827374450171
+ POINT 4560 6.855123306554548 1.732841382331951
+ POINT 4561 6.414612844901361 1.574488513075082
+ POINT 4562 6.765655367225731 1.179109809653417
+ POINT 4563 6.972434580994955 2.219793303106146
+ POINT 4564 -7.602701248857268 12.05219331399483
+ POINT 4565 -7.345761168813994 12.49779263543017
+ POINT 4566 -7.350228475031765 11.60757343071705
+ POINT 4567 -5.308173014700433 14.27556533336659
+ POINT 4568 -5.562737733353188 13.83313163004587
+ POINT 4569 -4.801572002352885 14.27614786187251
+ POINT 4570 -4.549022404224035 13.83489189839703
+ POINT 4571 -1.261812988480139 9.83343522240709
+ POINT 4572 -1.009092171925209 9.384112018230109
+ POINT 4573 -1.260520010065219 8.933024373220549
+ POINT 4574 -1.765500117844419 8.93523006966014
+ POINT 4575 -5.068073644725306 9.38669057972551
+ POINT 4576 -4.811613206609751 9.83429836303813
+ POINT 4577 -5.321476005364882 9.832741044573023
+ POINT 4578 -8.171918437075256 5.749541788172571
+ POINT 4579 -8.426272907275038 5.290292001170738
+ POINT 4580 -8.948133223185337 5.244987163541136
+ POINT 4581 -9.185519494225359 5.729430999154442
+ POINT 4582 -8.934156282145356 6.185727540104251
+ POINT 4583 -8.427661154600298 6.18943703498995
+ POINT 4584 -8.673610641597531 6.652056916813081
+ POINT 4585 -6.360808891330913 5.359381494985303
+ POINT 4586 -6.8888134629241 5.334268229392724
+ POINT 4587 -7.141644921037324 5.784322612398201
+ POINT 4588 -6.881683139083452 6.238916134269846
+ POINT 4589 -6.366502420684297 6.244439533544943
+ POINT 4590 -8.913238659918125 8.008641685997079
+ POINT 4591 -9.175111821561714 7.552782489790519
+ POINT 4592 -8.152298933237061 7.566155955215757
+ POINT 4593 -8.414839366266023 7.108358763986579
+ POINT 4594 -8.401580872630081 8.014850914686292
+ POINT 4595 -8.652256314068634 8.462541484408993
+ POINT 4596 -7.891316587387569 8.020055753627672
+ POINT 4597 -8.921334493811083 7.104649269100879
+ POINT 4598 0.5050496066864969 12.06607114806098
+ POINT 4599 0.2524838592694156 12.509659882908
+ POINT 4600 -0.5050495406976978 12.06607116411123
+ POINT 4601 -0.2524953099325488 11.62092225687016
+ POINT 4602 -0.7575448846733936 11.62089710913941
+ POINT 4603 0.2524953892493668 11.62092224476328
+ POINT 4604 -3.283324914400852 8.042101763472806
+ POINT 4605 -3.027617553368896 7.589434642638204
+ POINT 4606 -3.78887016301438 7.145934490043004
+ POINT 4607 -4.047040141601858 7.596235740379548
+ POINT 4608 -4.299970711505202 7.148508674241112
+ POINT 4609 -3.792218491321482 8.043753636400142
+ POINT 4610 -4.303319039812305 8.04632782059825
+ POINT 4611 -3.539603812611298 8.492193843691508
+ POINT 4612 -3.278350562976776 7.139722056960755
+ POINT 4613 -3.53128113288012 6.69199499082232
+ POINT 4614 -3.259043844909186 5.332766362072315
+ POINT 4615 -3.011954694569225 5.779632481578462
+ POINT 4616 -3.271741805307075 6.237333529285412
+ POINT 4617 -3.782261405344679 6.243545962367661
+ POINT 4618 -4.035803751858573 5.797005308049524
+ POINT 4619 -4.295343079431618 6.251666769586432
+ POINT 4620 -3.775380952945744 5.341766264901346
+ POINT 4621 -3.511702720083296 4.885648126142907
+ POINT 4622 -4.543058686584349 4.904219080036945
+ POINT 4623 -4.288462627032683 5.349887072120117
+ POINT 4624 -4.803481485497177 5.359458123185124
+ POINT 4625 -3.243367634643463 4.435820574068364
+ POINT 4626 -2.982689503297702 3.965002351197774
+ POINT 4627 -3.229662503185413 3.52330050328693
+ POINT 4628 -3.742623792584569 3.563062575166481
+ POINT 4629 -3.759704742680022 4.444820476897395
+ POINT 4630 -5.320794455696689 3.555246287829873
+ POINT 4631 -5.570636693918219 3.095966055383329
+ POINT 4632 -5.345229957488629 2.610279773748913
+ POINT 4633 -4.788963916338954 2.692099741504953
+ POINT 4634 -4.533433409733085 3.11147984258838
+ POINT 4635 -5.320195886747793 5.3641005719377
+ POINT 4636 -5.065599827196129 5.809768564020871
+ POINT 4637 -5.838136124018156 5.370252348005836
+ POINT 4638 -6.104986995759502 5.803540159752914
+ POINT 4639 -5.843829653371539 6.255310386565476
+ POINT 4640 -5.845709132172464 7.14566131989957
+ POINT 4641 -6.099796022401105 7.591597931860797
+ POINT 4642 2.468655552028582 36.99209317569083
+ POINT 4643 2.720981659484743 36.50669016910551
+ POINT 4644 3.221422882693706 37.37975122048137
+ POINT 4645 3.480916159023034 36.90863094192812
+ POINT 4646 2.722869868303182 37.43948682119965
+ POINT 4647 3.229662324541032 36.47670038506341
+ POINT 4648 -2.273750322176463 28.37918393450756
+ POINT 4649 -2.779582658660454 28.37954777701897
+ POINT 4650 -2.526574115933269 27.93457393572186
+ POINT 4651 -3.033258069834652 28.82455082498592
+ POINT 4652 -2.77999854888538 29.27036534916167
+ POINT 4653 -2.273653961576329 29.27067718493149
+ POINT 4654 -4.295759860195631 22.20207831721287
+ POINT 4655 -3.790935919620525 22.20328484529564
+ POINT 4656 -4.547660762109723 22.64117574871403
+ POINT 4657 -1.770560839361158 22.20855341824481
+ POINT 4658 -2.276071337937328 22.20687905820053
+ POINT 4659 -1.516430995925717 22.64600353864246
+ POINT 4660 -0.7574091942873926 26.60463620877062
+ POINT 4661 -0.5049253650460661 26.16245155786428
+ POINT 4662 -1.26248456968623 26.60474309312709
+ POINT 4663 -2.020500884784648 27.04726516205367
+ POINT 4664 -2.273312578923515 27.49087502031526
+ POINT 4665 -2.779144915407506 27.49123886282667
+ POINT 4666 -3.031723705736667 27.04803775852522
+ POINT 4667 9.674059914272764 31.54309915647984
+ POINT 4668 9.425788859593911 31.99952798475481
+ POINT 4669 8.903187169034737 31.09050669476753
+ POINT 4670 9.413784633261546 31.09278170280593
+ POINT 4671 7.395667531479379 33.76943158160459
+ POINT 4672 6.881682436448375 33.76108525769369
+ POINT 4673 6.620525505193433 33.30931478828556
+ POINT 4674 6.099796175241582 32.40840299268783
+ POINT 4675 6.359431915093664 32.8578547224632
+ POINT 4676 6.874612619500812 32.86337793702549
+ POINT 4677 7.127777065364786 32.42027890997031
+ POINT 4678 7.388870655464554 32.87173897579268
+ POINT 4679 6.353715538404828 31.96208648750794
+ POINT 4680 8.934156162843058 33.81427295860885
+ POINT 4681 9.185518916730516 34.2705695880624
+ POINT 4682 9.431469087173463 33.80794971603986
+ POINT 4683 8.171917422879144 34.25045899549634
+ POINT 4684 8.426271187026909 34.70970875020592
+ POINT 4685 8.948131691149152 34.75501338402842
+ POINT 4686 7.651410866152008 33.32953611527348
+ POINT 4687 7.904575312015982 32.8864370882183
+ POINT 4688 7.911372188030805 33.78412969403021
+ POINT 4689 8.427660757551774 33.81056352916524
+ POINT 4690 8.673610927994719 33.34794365714271
+ POINT 4691 9.694220357455089 33.36180316353837
+ POINT 4692 9.945583111342547 33.81809979299192
+ POINT 4693 10.71091845921928 33.33687874930079
+ POINT 4694 10.46487676988987 33.83310719520395
+ POINT 4695 9.947998294341922 32.91367014601859
+ POINT 4696 9.43388427017284 32.90352006906653
+ POINT 4697 10.45710382882717 32.90333481796283
+ POINT 4698 12.55579669464555 33.7299880503965
+ POINT 4699 13.12801199851167 33.79479026035089
+ POINT 4700 12.47144579022556 34.51148132613582
+ POINT 4701 12.93462514265352 34.64180178367647
+ POINT 4702 12.24027789272276 34.13587082058012
+ POINT 4703 13.29868985479681 34.3116079231603
+ POINT 4704 13.43620128425083 34.8144691256151
+ POINT 4705 12.50944856105111 31.15885690226704
+ POINT 4706 11.99907725941845 31.14306284646113
+ POINT 4707 12.78538331767002 31.63539862612097
+ POINT 4708 12.5690393147074 32.06645875658151
+ POINT 4709 12.02256561458787 32.0281633069468
+ POINT 4710 5.065600016341717 34.19023420969232
+ POINT 4711 4.803482242815901 34.64054582058449
+ POINT 4712 4.035804672356232 34.20299720629515
+ POINT 4713 4.295343779290965 33.74833560269973
+ POINT 4714 4.809231465292767 33.74478222026569
+ POINT 4715 4.288463743829695 34.65011614756668
+ POINT 4716 9.637662575318704 13.82176439745997
+ POINT 4717 9.895010842448107 13.37629815618254
+ POINT 4718 9.892511591869622 14.26449157539778
+ POINT 4719 10.4067069355562 13.37400513563111
+ POINT 4720 13.52905067048734 17.80348860989551
+ POINT 4721 13.79175789835044 17.36796951733285
+ POINT 4722 13.00252411868155 17.80282680195637
+ POINT 4723 13.26812525861197 18.24140032089161
+ POINT 4724 12.74043410877834 17.36292953030527
+ POINT 4725 12.47950869690297 17.80084124130137
+ POINT 4726 13.51009777439233 19.55820318321305
+ POINT 4727 13.79929158665083 19.11344521668358
+ POINT 4728 13.53129906332733 18.67922305227264
+ POINT 4729 13.00477251152154 18.6785612443335
+ POINT 4730 12.99576637516585 19.55819856070358
+ POINT 4731 12.74349662902931 19.11733796967289
+ POINT 4732 12.47131668795828 19.55915255466194
+ POINT 4733 12.48032282431396 18.67951523829186
+ POINT 4734 11.43914986613786 21.32072491301456
+ POINT 4735 11.69942433103575 20.88138351831122
+ POINT 4736 10.92146534226518 21.32094673778284
+ POINT 4737 12.71562432355781 13.82239950971875
+ POINT 4738 12.9710204628949 13.37575475080886
+ POINT 4739 12.45674797382721 13.37407141180644
+ POINT 4740 12.97772491657961 14.26819291122295
+ POINT 4741 12.46345242751193 14.26650957222053
+ POINT 4742 13.49738297842677 14.27178058327745
+ POINT 4743 13.74303006923158 13.8271429168039
+ POINT 4744 13.24521108238089 14.71589064577923
+ POINT 4745 13.22448245842652 12.92743092592447
+ POINT 4746 13.48181951185093 12.47903488184075
+ POINT 4747 13.99578142269353 12.47669166234643
+ POINT 4748 14.24624589811313 12.92686861431367
+ POINT 4749 13.48335880815712 13.37575902383678
+ POINT 4750 13.9964920647632 13.37881909191951
+ POINT 4751 -6.320150687976366 23.96091876360178
+ POINT 4752 -5.812969625836519 23.96070458668278
+ POINT 4753 -6.574688825297787 24.40195167480463
+ POINT 4754 -6.828063652194295 23.9615488793044
+ POINT 4755 -5.813813941857884 24.84216924255897
+ POINT 4756 -6.321311652199329 24.84298261059543
+ POINT 4757 -7.081981008898271 23.52094424303451
+ POINT 4758 -7.336519146219691 23.96197715423737
+ POINT 4759 -7.845748104704221 23.96277425307575
+ POINT 4760 -7.335856115277702 23.08082963166928
+ POINT 4761 -7.844991443031732 23.08106288006605
+ POINT 4762 -8.100427311741345 23.52188036270352
+ POINT 4763 -10.40540157467472 14.26408505747693
+ POINT 4764 -10.66170284717234 13.81985074339596
+ POINT 4765 -9.637662430070954 13.82176447342599
+ POINT 4766 -9.895010682577141 13.37629824542447
+ POINT 4767 -9.892511441859234 14.26449165198275
+ POINT 4768 -10.40670675495256 13.37400525082491
+ POINT 4769 -12.47199466734123 16.03898502117763
+ POINT 4770 -12.21411479700939 16.4800762682083
+ POINT 4771 -12.99157903512498 16.04165171901209
+ POINT 4772 -14.28781148834783 14.72466430653915
+ POINT 4773 -14.01051597995725 14.27484092420143
+ POINT 4774 -13.50732425510632 15.16042328920559
+ POINT 4775 -13.24521080951691 14.71589083268884
+ POINT 4776 -13.49738271635704 14.27178080931081
+ POINT 4777 -16.93896929093587 15.5773409849898
+ POINT 4778 -16.68097494321506 15.16527107651389
+ POINT 4779 -15.67915306855816 18.67142202530682
+ POINT 4780 -15.40255559056302 18.2433353971784
+ POINT 4781 -15.1377260715964 18.67054347403299
+ POINT 4782 -15.66731487745816 17.81120284025883
+ POINT 4783 -16.23490724711116 18.67143816234672
+ POINT 4784 -11.95483924810893 19.55914747757233
+ POINT 4785 -11.69939991789839 19.11861637347679
+ POINT 4786 -11.95878820411627 18.67894457614464
+ POINT 4787 -12.47131653888641 19.55915256894556
+ POINT 4788 -12.48032266377783 18.67951528684885
+ POINT 4789 -12.22006407356756 18.2401678703231
+ POINT 4790 -12.74349647052235 19.11733800723685
+ POINT 4791 -13.00477233997363 18.67856130141531
+ POINT 4792 -14.87248011401993 19.104568316138
+ POINT 4793 -14.5444672240719 19.55524901206978
+ POINT 4794 -14.59588263602478 18.67648168800958
+ POINT 4795 -14.04144287725837 19.55526445993747
+ POINT 4796 -13.79929141258323 19.11344527595896
+ POINT 4797 -13.53129887895662 18.67922312921883
+ POINT 4798 -13.2681250722121 18.24140040883083
+ POINT 4799 -14.0626441448217 18.67628438337447
+ POINT 4800 -14.05735881756995 17.80654318110146
+ POINT 4801 -14.32789010239817 18.24225954126945
+ POINT 4802 -18.2968927833904 24.94722405978977
+ POINT 4803 -18.68670738346595 25.35086902771102
+ POINT 4804 -18.11866277312836 25.81991225332942
+ POINT 4805 -18.56007566971161 25.77221354163332
+ POINT 4806 -19.15366621552857 25.75648074725418
+ POINT 4807 -17.67264085100642 25.76729945984075
+ POINT 4808 -17.52697763588802 25.32168259068048
+ POINT 4809 -17.78498613217555 24.909612186255
+ POINT 4810 -12.47539170563856 23.0785489390462
+ POINT 4811 -12.99840983962808 23.07655221680742
+ POINT 4812 -12.47198557295549 23.9610096938691
+ POINT 4813 -12.99156790660064 23.95834007766085
+ POINT 4814 -12.21410615975761 23.51991655725213
+ POINT 4815 -14.04906603364312 23.06997456115545
+ POINT 4816 -13.52075687599397 23.07307448165996
+ POINT 4817 -14.03636788977065 23.95057690948157
+ POINT 4818 -13.51391494296653 23.95486234251339
+ POINT 4819 -14.30341627472643 23.50650018459617
+ POINT 4820 -14.561721042046 23.9459789118976
+ POINT 4821 -14.57441918591847 23.06537656357148
+ POINT 4822 -13.25571608608519 23.5145759173276
+ POINT 4823 -14.5960683653604 21.32333659147519
+ POINT 4824 -14.32798922175618 21.75754972154517
+ POINT 4825 -14.59066652086865 22.19303664224877
+ POINT 4826 -13.74303175114319 26.17287493709136
+ POINT 4827 -13.48335791473757 26.62425530265345
+ POINT 4828 -12.97771773598447 25.73181930175693
+ POINT 4829 -12.71561880221907 26.17761345449204
+ POINT 4830 -13.49737100762031 25.72824656875608
+ POINT 4831 -12.97101566866241 26.62426067037656
+ POINT 4832 -15.87594000709251 24.3886752863724
+ POINT 4833 -15.61382354497319 23.94120865241457
+ POINT 4834 -15.08739359140011 23.94259057999703
+ POINT 4835 -15.35519938057486 23.50052025942974
+ POINT 4836 -15.07839045447396 24.82672910597416
+ POINT 4837 -14.82034520644433 24.38666730488244
+ POINT 4838 -4.297887780716318 27.4932582820506
+ POINT 4839 -4.044006752788331 27.04935658278367
+ POINT 4840 -5.312210754179706 27.49556464468527
+ POINT 4841 -5.567618563035417 27.94023469907253
+ POINT 4842 -4.552513129335004 27.93750819510436
+ POINT 4843 -4.807024214617755 28.38271368117876
+ POINT 4844 -4.805074821119767 27.49442750899073
+ POINT 4845 -5.057585405561018 27.0513147316315
+ POINT 4846 -6.33587960182028 29.27904137271206
+ POINT 4847 -6.593280542092714 29.72671675993249
+ POINT 4848 -6.845584816882877 29.28169696677443
+ POINT 4849 -9.139626577699488 28.84786563078475
+ POINT 4850 -8.880974911121076 28.39978165870695
+ POINT 4851 -8.886484031839617 29.29285468931666
+ POINT 4852 -8.375837076376664 29.29012509511866
+ POINT 4853 -6.606301488352729 31.5172784426189
+ POINT 4854 -6.86610510089686 31.96710983930201
+ POINT 4855 -7.380363061301429 31.97547095696313
+ POINT 4856 -7.629645044490113 31.52677603524801
+ POINT 4857 -3.734387612605413 37.33998909381205
+ POINT 4858 -3.480917883197236 36.90862995438757
+ POINT 4859 -4.249409370936035 37.28824836325113
+ POINT 4860 -4.533435519467933 36.88852220808495
+ POINT 4861 -4.758488233341749 38.11030236366913
+ POINT 4862 -4.50676918141261 38.58210339451158
+ POINT 4863 -4.783545702215509 38.99367819414739
+ POINT 4864 -5.253316076616899 38.87170298229778
+ POINT 4865 -5.026304722136116 39.35810581481412
+ POINT 4866 -5.31475374097253 38.1921257939889
+ POINT 4867 -5.55603254774995 38.55085252783052
+ POINT 4868 -4.803482580347485 34.64054361135685
+ POINT 4869 -5.320196850564142 34.63590120971449
+ POINT 4870 -4.543060036237803 35.09578274400744
+ POINT 4871 -9.474341817876265 37.14660975144912
+ POINT 4872 -9.406416566704262 36.55611168334616
+ POINT 4873 -9.473526932351346 35.72215174385364
+ POINT 4874 -9.691051891830522 35.19404228105253
+ POINT 4875 -7.395668664845115 33.76943169253389
+ POINT 4876 -7.141645205774269 34.21567874364175
+ POINT 4877 -7.911373176236172 33.78412991120815
+ POINT 4878 -5.970391354147889 38.42267776501082
+ POINT 4879 -5.910343674528779 39.10674848218104
+ POINT 4880 9.899142136969207 27.51510267900654
+ POINT 4881 10.15244814835231 27.06995268221834
+ POINT 4882 9.895007998246125 26.62370476614767
+ POINT 4883 9.383403857216514 26.62219238204935
+ POINT 4884 9.645779171780866 27.95898679566293
+ POINT 4885 9.392678108416897 28.40351120876002
+ POINT 4886 8.880975044494647 28.39978174499532
+ POINT 4887 9.387389390594027 27.51154309762205
+ POINT 4888 14.26073289743033 28.8691395757118
+ POINT 4889 13.99842144929555 28.41952401656783
+ POINT 4890 13.99771942752645 29.30896742654093
+ POINT 4891 13.48445722189115 28.41718289837834
+ POINT 4892 13.22907518867648 28.86709658595593
+ POINT 4893 13.48364027439367 29.31665262720558
+ POINT 4894 2.778186435888486 8.938957890864957
+ POINT 4895 3.285536154833564 8.93983143640984
+ POINT 4896 0.503576558953103 8.480088415641912
+ POINT 4897 0.7545340256392324 8.025313551344778
+ POINT 4898 1.257490675288657 8.028793692477928
+ POINT 4899 1.00487166372454 7.572984560185061
+ POINT 4900 1.767218177292147 9.833864649502274
+ POINT 4901 1.261813121296191 9.833435129749081
+ POINT 4902 2.01977490415053 9.386150013300199
+ POINT 4903 1.254058685362145 7.116431701475741
+ POINT 4904 0.7511020357127205 7.112951560342591
+ POINT 4905 1.503048670056133 6.664067888028908
+ POINT 4906 1.756818298067953 7.124100887871379
+ POINT 4907 3.221422303399006 2.620248389708918
+ POINT 4908 3.480914914435558 3.091369166068999
+ POINT 4909 2.72098085638526 3.493309688384574
+ POINT 4910 3.229661216416159 3.523299759226276
+ POINT 4911 2.982688780121403 3.965001676074344
+ POINT 4912 2.46865487040522 3.007906565470829
+ POINT 4913 2.722869289518796 2.56051282330207
+ POINT 4914 -1.010191681274808 16.47724942694537
+ POINT 4915 -1.263131355488745 16.91548129340297
+ POINT 4916 -2.020306230344167 16.47789566114399
+ POINT 4917 -1.767492742491601 16.03853792813051
+ POINT 4918 -1.262539725172341 16.03840777843346
+ POINT 4919 12.1997613590734 12.92710547342492
+ POINT 4920 11.94479095056584 12.47843891822832
+ POINT 4921 11.43422157083276 12.47855544044724
+ POINT 4922 11.17576264345388 12.92727100195365
+ POINT 4923 11.94436521973632 13.37375023233481
+ POINT 4924 7.336251480752613 18.6795640871081
+ POINT 4925 7.844937134949372 18.67964044904051
+ POINT 4926 8.099974578704396 18.23956992571268
+ POINT 4927 7.84480578458009 17.79945448070259
+ POINT 4928 8.354717919779731 17.79936124634732
+ POINT 4929 7.335669970649025 17.79968796401571
+ POINT 4930 7.081931177971981 18.23961942058892
+ POINT 4931 8.354982325926542 23.08157075161737
+ POINT 4932 7.844991506275383 23.08106290277033
+ POINT 4933 7.844803584321875 22.20054442238268
+ POINT 4934 8.354715387699985 22.20063715773581
+ POINT 4935 8.610505338363385 22.64100603529607
+ POINT 4936 7.590411112199734 22.64052001245645
+ POINT 4937 7.335856170051208 23.08082965169779
+ POINT 4938 7.335668248097701 22.20031117131014
+ POINT 4939 9.890818040191585 21.32074068357608
+ POINT 4940 10.40541311898843 21.32077323454844
+ POINT 4941 10.66371321816277 20.88088247878991
+ POINT 4942 10.40367267864471 20.44035402693132
+ POINT 4943 10.91972490192146 20.44052753016572
+ POINT 4944 9.890170248707562 20.4403537256876
+ POINT 4945 10.14618193246625 19.99999877706341
+ POINT 4946 9.634491429138507 20.88059097460354
+ POINT 4947 6.827400667807767 23.08040137415767
+ POINT 4948 7.081981061883418 23.52094426447156
+ POINT 4949 6.066344491613611 23.52030180831326
+ POINT 4950 6.320150731026381 23.96091878388248
+ POINT 4951 6.828063703070947 23.96154890185181
+ POINT 4952 4.803564434818736 21.32240321307486
+ POINT 4953 4.299173358639647 21.32364953328408
+ POINT 4954 4.044571409948016 21.76361015630762
+ POINT 4955 4.295759881507283 22.20207832426327
+ POINT 4956 4.801296257115548 22.20150106250879
+ POINT 4957 5.054931180975862 21.76171558239177
+ POINT 4958 5.306832085229775 22.20081301603004
+ POINT 4959 5.309100262932963 21.32171516659611
+ POINT 4960 5.81454207983198 21.32106756825005
+ POINT 4961 -18.56002184971921 14.22769492657082
+ POINT 4962 -18.58096939592903 13.77580049591028
+ POINT 4963 -19.15364988885438 14.24346495111939
+ POINT 4964 -18.85904440570564 13.34143830515129
+ POINT 4965 -15.33998266280768 14.7338292242525
+ POINT 4966 -15.57188599971363 14.288170055576
+ POINT 4967 -16.07296487229796 14.29114541974748
+ POINT 4968 -16.41267733540978 14.73120693333909
+ POINT 4969 -16.13750880779156 15.17187251392457
+ POINT 4970 -3.788945546787723 16.91866703867328
+ POINT 4971 -4.041277777523542 16.47943067745028
+ POINT 4972 -3.283887755210931 16.91774473014353
+ POINT 4973 -3.03057820446562 16.47865932897363
+ POINT 4974 -2.778699564643894 16.9173169410877
+ POINT 4975 -3.788415114156707 16.03940786842766
+ POINT 4976 -3.282925532369509 16.03938389455073
+ POINT 4977 -2.526915470103403 17.35549624645666
+ POINT 4978 -2.273605919358092 16.91641084528677
+ POINT 4979 -1.516431044502669 17.35399647754574
+ POINT 4980 -1.770560893295203 17.79144659044107
+ POINT 4981 -2.276071417055452 17.79312094010028
+ POINT 4982 -1.768522135803676 16.91607496651296
+ POINT 4983 6.366501243846965 6.244439141771339
+ POINT 4984 6.881681964346839 6.238915939179471
+ POINT 4985 6.620524933946894 6.690686173039952
+ POINT 4986 7.141643473575124 5.784322519668687
+ POINT 4987 6.888811533617075 5.334267858601422
+ POINT 4988 6.360807268283301 5.359380468288856
+ POINT 4989 5.328304956021583 8.043704908345143
+ POINT 4990 5.839992119376236 8.041429038737206
+ POINT 4991 5.072106627115973 7.596960962835897
+ POINT 4992 4.814338839724297 8.045553308551284
+ POINT 4993 6.874612011818435 7.136622928830665
+ POINT 4994 7.12777633937579 7.579721871050277
+ POINT 4995 6.359431291318561 7.142146131422533
+ POINT 4996 6.866104091313161 8.032890848737603
+ POINT 4997 6.099795556301682 7.591597724921501
+ POINT 4998 5.84570847843014 7.145660969130788
+ POINT 4999 6.353714932264657 8.037914201028951
+ POINT 5000 6.081229359011346 4.028063957887165
+ POINT 5001 5.831277611851206 4.472376518875711
+ POINT 5002 5.818440427341621 3.559379919758002
+ POINT 5003 6.331070824970244 3.568782868560602
+ POINT 5004 5.320793662260057 3.555241511663863
+ POINT 5005 5.570635128218955 3.0959604223373
+ POINT 5006 5.055437459855198 4.009246871870873
+ POINT 5007 6.821727892775355 3.591856572778605
+ POINT 5008 6.558938961105631 3.123172534649443
+ POINT 5009 6.777765117627584 2.634655229109696
+ POINT 5010 6.287108049822472 2.611581524891692
+ POINT 5011 7.244265492278114 2.731384312863897
+ POINT 5012 7.354837885284381 3.536944361599219
+ POINT 5013 7.598035916136748 3.04043980858182
+ POINT 5014 4.299970635453084 7.14850787645576
+ POINT 5015 3.788870234546398 7.145933669669137
+ POINT 5016 4.047040109912 7.596235156255416
+ POINT 5017 5.345228489927225 2.610272286506451
+ POINT 5018 5.842875255008789 2.614410694600591
+ POINT 5019 6.061701411530742 2.125893389060844
+ POINT 5020 5.314751048479676 1.807873046646745
+ POINT 5021 5.061202116388895 2.210546263008434
+ POINT 5022 5.970380050087678 1.57731768278398
+ POINT 5023 5.556020582598091 1.44914323051177
+ POINT 5024 5.91032202053712 0.893244814956379
+ POINT 5025 -6.836865785799978 12.49945380288166
+ POINT 5026 -7.089553213907015 12.94295844989903
+ POINT 5027 -6.833499178180947 13.3871348946776
+ POINT 5028 -6.325319961009233 13.38836779917821
+ POINT 5029 -1.767218052469922 9.83386477079263
+ POINT 5030 -1.515143883278228 10.28237400844931
+ POINT 5031 -4.303205496386696 9.835452565483031
+ POINT 5032 -4.556607857026273 10.28150303033054
+ POINT 5033 -3.794281023813899 9.835889357263516
+ POINT 5034 -3.286799988363986 9.836274382571714
+ POINT 5035 -3.540719111353306 10.28304225808364
+ POINT 5036 -4.049286373397377 9.3886846899711
+ POINT 5037 -3.285536068257624 8.939831726257879
+ POINT 5038 -3.794429645178254 8.941483599185215
+ POINT 5039 -4.303354117751051 8.94104680740473
+ POINT 5040 -8.903186047936739 8.909494536004507
+ POINT 5041 -9.153055229364252 9.360382120771384
+ POINT 5042 -8.391528260648695 8.915703764693721
+ POINT 5043 -8.131409949387299 9.367205473050699
+ POINT 5044 -7.880480215519194 8.920252421455185
+ POINT 5045 -8.893751097108121 9.810542690182665
+ POINT 5046 -8.383104174517864 9.813271999453356
+ POINT 5047 -7.872056129388366 9.81782065621482
+ POINT 5048 -0.2524838087497524 13.39540810971175
+ POINT 5049 2.44434774088198e-08 12.95322345942679
+ POINT 5050 -0.2524838007827911 12.50965988836077
+ POINT 5051 -0.757533375523636 12.50963474063003
+ POINT 5052 -1.010043008245645 12.95311658754424
+ POINT 5053 -1.262608748160552 12.5095278632947
+ POINT 5054 -5.055438029190892 4.009250597348579
+ POINT 5055 -4.800176791787235 4.456813104903008
+ POINT 5056 -4.285157933322742 4.447242053838
+ POINT 5057 -4.807632465031426 3.545831769185357
+ POINT 5058 -4.268076983227289 3.565484152107086
+ POINT 5059 -4.016822847882909 3.997414501763457
+ POINT 5060 -4.555688689148163 6.701760771737632
+ POINT 5061 -4.809231035662058 6.255220117419496
+ POINT 5062 -5.325945436912674 6.259862566172071
+ POINT 5063 -4.813858667735643 7.152062022074176
+ POINT 5064 -5.327824915713599 7.150213499506166
+ POINT 5065 -5.072106938070638 7.596961402009646
+ POINT 5066 -5.587460861837469 6.7007619399641
+ POINT 5067 -4.814374102587054 8.940272696222461
+ POINT 5068 -4.559517374367931 8.493071605436576
+ POINT 5069 -5.324236901342186 8.938715377757356
+ POINT 5070 -4.814339024648308 8.045553709415984
+ POINT 5071 -5.328305272626263 8.043705186847973
+ POINT 5072 -2.021045274972744 28.82414544323013
+ POINT 5073 -1.76803673224556 28.37917160193302
+ POINT 5074 -1.262715411558947 28.37904359188522
+ POINT 5075 -1.010161179515999 28.82419250185701
+ POINT 5076 -1.767940371645426 29.27066485235695
+ POINT 5077 -1.262535281707757 29.27109438297196
+ POINT 5078 -3.537066675701101 22.64267533516108
+ POINT 5079 -3.283887565701342 23.08225529095755
+ POINT 5080 -3.78894527952161 23.0813329672272
+ POINT 5081 -2.526915358233893 22.64450376122651
+ POINT 5082 -2.781164941584266 22.20597295586544
+ POINT 5083 -3.285878205800256 22.20420716902598
+ POINT 5084 -2.777737218622537 23.96104394944767
+ POINT 5085 -3.030578038325537 23.52134070986063
+ POINT 5086 -3.282925349818851 23.96061616261071
+ POINT 5087 -2.778699434505028 23.08268307779451
+ POINT 5088 -2.273605830858089 23.08358918012959
+ POINT 5089 -4.294456553710889 23.08098940888245
+ POINT 5090 -4.04127744371113 23.52056936467892
+ POINT 5091 -4.799992926299243 23.08041214616574
+ POINT 5092 -5.052976054246795 23.52015671029886
+ POINT 5093 -2.777506769235351 24.84052461662275
+ POINT 5094 -3.030366432223659 25.28092918756785
+ POINT 5095 -3.282944193104159 24.84072397314284
+ POINT 5096 1.330755233786007e-08 25.28052643955282
+ POINT 5097 -0.2524349013237393 25.72146687178944
+ POINT 5098 -0.7573602844785909 25.72151112349207
+ POINT 5099 -0.2524349052544075 24.84066650044989
+ POINT 5100 -1.514941477347312 26.16264507841994
+ POINT 5101 -1.767575298832624 26.60489236198012
+ POINT 5102 -2.272957792445729 26.60516714734652
+ POINT 5103 8.652257441255252 31.53745954895175
+ POINT 5104 8.39152909816184 31.0842973257564
+ POINT 5105 7.880480908934858 31.07974849039663
+ POINT 5106 8.414839869207476 32.89164191324666
+ POINT 5107 8.152299658520024 32.43384477376586
+ POINT 5108 8.913239863919834 31.99135925837855
+ POINT 5109 9.175113211385597 32.44721832517048
+ POINT 5110 8.921335274498762 32.89535134269027
+ POINT 5111 8.401581793046937 31.98514988936742
+ POINT 5112 7.891317235855443 31.97994506433906
+ POINT 5113 11.74873159823277 31.58187307730738
+ POINT 5114 11.47479887261305 31.1209339277706
+ POINT 5115 11.49828722778247 32.00603438825626
+ POINT 5116 10.96516324372876 31.99723027702603
+ POINT 5117 10.70432876392238 31.55113677680682
+ POINT 5118 10.95876372439194 31.10769117123329
+ POINT 5119 13.5073245348637 15.16042310084938
+ POINT 5120 13.7722487569601 15.60568703807935
+ POINT 5121 12.98766647301654 15.15683542879488
+ POINT 5122 11.95878835004167 18.67894453890096
+ POINT 5123 11.43914146078369 18.67926892442837
+ POINT 5124 11.69940005256377 19.11861634915865
+ POINT 5125 11.95797422263067 17.80027054191047
+ POINT 5126 12.22006423253389 18.24016781356158
+ POINT 5127 11.95483938702825 19.55914746318869
+ POINT 5128 11.43519249777028 19.55947184871609
+ POINT 5129 11.17515809731908 20.00000102052662
+ POINT 5130 10.9197187628546 19.55946990649659
+ POINT 5131 11.43519863683714 20.44052947238522
+ POINT 5132 11.95485752643337 20.44085700867212
+ POINT 5133 12.20710913316478 20.00000805421938
+ POINT 5134 8.610508600834709 17.35899258697246
+ POINT 5135 8.865677394959015 17.79910803198256
+ POINT 5136 10.66370546167478 19.11911380302585
+ POINT 5137 10.40367106122358 19.55964297483639
+ POINT 5138 9.890168631286432 19.55964267359267
+ POINT 5139 9.634489721044543 19.11940538477516
+ POINT 5140 -4.8003808551864 24.84120085001912
+ POINT 5141 -5.306981717815686 24.84178343725863
+ POINT 5142 -5.054251160006624 25.28243433877643
+ POINT 5143 -5.55994363703766 24.40093575380166
+ POINT 5144 -5.306137401794322 23.96031878138243
+ POINT 5145 -4.799950065447936 23.96038787741774
+ POINT 5146 -11.95797406324265 17.80027060346049
+ POINT 5147 -12.47950852290421 17.80084131416471
+ POINT 5148 -12.4753984618416 16.92143972111907
+ POINT 5149 -11.95613484774709 16.91958059439132
+ POINT 5150 -11.69841188473828 17.35997812379403
+ POINT 5151 -13.25572876182561 16.4853991857355
+ POINT 5152 -13.51392938584669 16.04511550981153
+ POINT 5153 -14.04907256824607 16.92994355105175
+ POINT 5154 -14.30347489893017 16.49353671661515
+ POINT 5155 -17.42133850836408 16.46621230299164
+ POINT 5156 -17.19812027591119 16.01499464947636
+ POINT 5157 -16.66495740057217 16.04359032158593
+ POINT 5158 -16.48596411693903 18.24387092939627
+ POINT 5159 -16.7768887765254 18.67109514329076
+ POINT 5160 -17.3450998387438 18.66931497274819
+ POINT 5161 -17.55961494440304 18.23365541782893
+ POINT 5162 -15.13808693917218 21.32895091825263
+ POINT 5163 -14.87289120763043 20.89506516536105
+ POINT 5164 -15.08660377556885 20.45033549308172
+ POINT 5165 -15.55540002119723 20.44995148230189
+ POINT 5166 -15.67928522368949 21.32845399962185
+ POINT 5167 -15.40246238141945 21.75672542573599
+ POINT 5168 -15.97041154478462 20.90170693614084
+ POINT 5169 -15.10960308030174 23.06196306963319
+ POINT 5170 -14.85525283921842 22.62543744619248
+ POINT 5171 -15.12585041525192 22.18962314831048
+ POINT 5172 -15.63603303387482 23.06058114205074
+ POINT 5173 -15.66704869976923 22.1891262296797
+ POINT 5174 -15.93226468292499 22.62311470327069
+ POINT 5175 -15.60763493081995 24.82273747748248
+ POINT 5176 -16.13755718211401 24.82813379087301
+ POINT 5177 -16.07300703291225 25.70885103720212
+ POINT 5178 -16.41272779402701 25.26878316611768
+ POINT 5179 -15.34000762949547 25.26618761047478
+ POINT 5180 -15.57192119263 25.71183375688789
+ POINT 5181 -4.801571669348379 25.72385239038944
+ POINT 5182 -5.308172531977664 25.72443497762895
+ POINT 5183 -5.562737248413449 26.16686877343349
+ POINT 5184 -5.310107189970187 26.609152448284
+ POINT 5185 -4.802971256910249 26.60801531258947
+ POINT 5186 -6.341450194137229 30.17268166580354
+ POINT 5187 -6.851155409199826 30.1753372598659
+ POINT 5188 -6.859007872044449 31.0718020351126
+ POINT 5189 -6.346618677552621 31.06677857324325
+ POINT 5190 -5.827084132913434 29.27699951540124
+ POINT 5191 -6.079388407703597 28.83197972224318
+ POINT 5192 -5.823064947564565 28.38586492051645
+ POINT 5193 -6.331860416471411 28.38790677782728
+ POINT 5194 -5.315146554267603 28.38430764348843
+ POINT 5195 -5.062470599146903 28.82834390262268
+ POINT 5196 -4.556608069675993 29.71849731589442
+ POINT 5197 -4.811613479718268 30.165702029606
+ POINT 5198 -5.317804366752521 29.27479472056045
+ POINT 5199 -5.574295560869203 29.72185637102933
+ POINT 5200 -4.809682027102673 29.27320075825078
+ POINT 5201 -8.37012581029477 28.39701947502677
+ POINT 5202 -8.623177182075818 27.95266494359922
+ POINT 5203 -8.365439583299061 27.50635270506456
+ POINT 5204 -7.855387859831518 27.50430329700417
+ POINT 5205 -5.055440020725587 35.99075265980588
+ POINT 5206 -4.807634831823819 36.45417118840255
+ POINT 5207 -5.320796682809582 36.4447576399531
+ POINT 5208 -4.268078857383937 36.43451722793773
+ POINT 5209 -4.800178501361454 35.54318914608771
+ POINT 5210 -5.313340352347217 35.53377559763826
+ POINT 5211 -4.285159704616173 35.55275980617505
+ POINT 5212 -3.759706120423524 35.55518051249211
+ POINT 5213 -3.243368772057292 35.56417992560635
+ POINT 5214 -2.982690542380816 36.03499790770628
+ POINT 5215 -4.016824585547176 36.00258691457239
+ POINT 5216 -3.742625273191289 36.4369379342548
+ POINT 5217 -3.229663611360475 36.47669964102222
+ POINT 5218 -7.354840159678442 36.4630586256994
+ POINT 5219 -7.903282692818332 36.56886240561009
+ POINT 5220 -7.598040633279414 36.95956098877416
+ POINT 5221 -7.126972347222575 36.01744750407371
+ POINT 5222 -6.821730287683658 36.40814608723778
+ POINT 5223 -9.020623545645163 37.38900516343447
+ POINT 5224 -9.424243510782267 37.64039778849911
+ POINT 5225 -8.55965244144466 38.07573926529626
+ POINT 5226 -8.556945323688646 37.47116104503266
+ POINT 5227 -8.146988554944242 37.6652934901699
+ POINT 5228 -8.61016138837582 36.98320888708665
+ POINT 5229 -8.948133722619318 34.7550130983436
+ POINT 5230 -8.426272911082375 34.70970901961947
+ POINT 5231 -8.68619953008956 35.18782904777932
+ POINT 5232 -8.171918681535782 34.25045922190498
+ POINT 5233 -7.909984489006024 34.68327517134071
+ POINT 5234 -8.934156830967638 33.81427302246146
+ POINT 5235 -8.427661598312522 33.81056375948693
+ POINT 5236 -7.402798616599393 34.67408020217368
+ POINT 5237 -7.657152846145986 35.13332999988818
+ POINT 5238 -7.405024596478357 35.59824753662824
+ POINT 5239 -7.912210468884988 35.60744250579526
+ POINT 5240 -6.871914724483572 35.54333499816662
+ POINT 5241 -6.888813562914232 34.66573357218922
+ POINT 5242 -5.838136677064515 34.62974945206364
+ POINT 5243 -6.36080931903647 34.64062034113785
+ POINT 5244 -6.621962729861593 35.09902179966978
+ POINT 5245 -6.34391048060581 35.51822176711525
+ POINT 5246 -5.576018659483458 35.08006032626925
+ POINT 5247 -5.831280178847591 35.52762383998741
+ POINT 5248 -6.081232173469569 35.97193703848426
+ POINT 5249 -6.414624379431359 38.42551013672836
+ POINT 5250 -6.06170323738905 37.87410771123918
+ POINT 5251 -6.85513583736405 38.26715632721284
+ POINT 5252 -6.765677367949003 38.82088227601641
+ POINT 5253 -5.842877995505253 37.38558927504278
+ POINT 5254 -5.57063863640637 36.90403968955684
+ POINT 5255 -5.818443825308139 36.44062116096016
+ POINT 5256 -6.287111020788723 37.38842164676031
+ POINT 5257 -6.558941939522226 36.87683020971369
+ POINT 5258 -6.777767181406023 37.36534864591009
+ POINT 5259 -6.331074127066358 36.431219088088
+ POINT 5260 8.876288812510946 27.50911496320762
+ POINT 5261 9.129651777699287 27.06523084655123
+ POINT 5262 8.872303279133433 26.61976424763491
+ POINT 5263 8.361773132138943 26.61807490241647
+ POINT 5264 8.108499459230185 27.06075329726731
+ POINT 5265 8.370125922301042 28.3970195492633
+ POINT 5266 7.859855674189975 28.39452253470644
+ POINT 5267 8.623177303212083 27.95266501854642
+ POINT 5268 7.602700800558854 27.94780788776358
+ POINT 5269 8.365439690317341 27.5063527674756
+ POINT 5270 7.85538794993132 27.50430335260611
+ POINT 5271 2.013562028795792 7.580836026957666
+ POINT 5272 2.26255201348978 7.128472213510832
+ POINT 5273 2.77500305718747 8.037874485340598
+ POINT 5274 3.027617726611467 7.589434151032957
+ POINT 5275 3.283325039581317 8.042101283776436
+ POINT 5276 4.303354076505858 8.941046540609735
+ POINT 5277 4.559517266307168 8.493071306044598
+ POINT 5278 4.303318937401558 8.046327360535352
+ POINT 5279 3.794429651747119 8.941483306382132
+ POINT 5280 3.539603867070875 8.492193488056373
+ POINT 5281 3.792218536494872 8.04375315374873
+ POINT 5282 1.765500287132538 8.935229901889144
+ POINT 5283 1.512133152393508 8.483328312230684
+ POINT 5284 1.26052017194238 8.933024273296105
+ POINT 5285 2.268204505900643 8.035370646710422
+ POINT 5286 2.523911818870494 8.488037779453901
+ POINT 5287 2.271387884601659 8.93645405223478
+ POINT 5288 1.762470790478816 8.030999321070967
+ POINT 5289 0.7570181339856141 9.832621206105948
+ POINT 5290 0.2521486956286256 9.832463953535083
+ POINT 5291 1.009092319370833 9.384111939311431
+ POINT 5292 7.294083631537163e-08 9.383298033689051
+ POINT 5293 0.755725184631803 8.932210349652973
+ POINT 5294 0.2521487063815567 8.931176081657238
+ POINT 5295 0.5001445506630317 6.653216377611718
+ POINT 5296 0.2509575290254266 7.109769236321039
+ POINT 5297 -0.2509574054255117 7.109769247532057
+ POINT 5298 -0.5001444446786542 6.653216389361097
+ POINT 5299 -0.2485632222434483 6.187417819036827
+ POINT 5300 1.486808276477663 4.815803748516092
+ POINT 5301 1.233115516860302 4.336364274084247
+ POINT 5302 0.7400739793290316 4.319006830385741
+ POINT 5303 0.4944715681245202 4.791077890962915
+ POINT 5304 1.247341716301759 6.199670761156298
+ POINT 5305 1.750101329007567 6.207339947551936
+ POINT 5306 1.241668873888472 5.270356238309256
+ POINT 5307 1.739533777842383 5.288390330886163
+ POINT 5308 6.319776508411969 23.08033816696384
+ POINT 5309 6.57365161657976 22.64022355419007
+ POINT 5310 5.813247233137025 22.20059394145463
+ POINT 5311 5.559612309276712 22.64037942157165
+ POINT 5312 5.812595440385603 23.08012398834565
+ POINT 5313 6.827537292599711 22.20035520381776
+ POINT 5314 7.081929764721854 21.760379613744
+ POINT 5315 6.067132909156976 21.76072559108232
+ POINT 5316 6.321207979898867 21.32076562341935
+ POINT 5317 6.319913133203913 22.20029199662393
+ POINT 5318 6.828119358218929 21.32047871636039
+ POINT 5319 -15.60761428771511 15.17729136075921
+ POINT 5320 -15.8759118955204 15.61135550393402
+ POINT 5321 -15.07838575053652 15.17331221426195
+ POINT 5322 5.313338001627086 4.46622421620718
+ POINT 5323 4.800176500099562 4.456810078993488
+ POINT 5324 5.57601665209557 4.919939725998326
+ POINT 5325 3.782261521536312 6.243544847125578
+ POINT 5326 4.035803768525128 5.797003854445578
+ POINT 5327 4.295343007076298 6.25166539718948
+ POINT 5328 5.32782445313552 7.150212913721168
+ POINT 5329 5.5874601881524 6.7007613202222
+ POINT 5330 4.555688461472631 6.70175982734103
+ POINT 5331 4.809230708461447 6.255218834661029
+ POINT 5332 4.813858336838233 7.152061313927309
+ POINT 5333 -5.310107499537395 13.39084792377241
+ POINT 5334 -5.817351857309676 13.38983227473242
+ POINT 5335 -6.07268972719344 12.94608409290475
+ POINT 5336 -5.830755763497873 9.830536332965101
+ POINT 5337 -5.574295325382317 10.27814411627772
+ POINT 5338 -5.827083974112147 10.72300100372588
+ POINT 5339 -5.317804215979157 10.7252057153338
+ POINT 5340 -6.328097480913719 12.50141410567111
+ POINT 5341 -6.584305435820698 12.05624829120225
+ POINT 5342 -5.820129377214162 12.50287858122533
+ POINT 5343 -2.273653862835852 10.72932296672886
+ POINT 5344 -2.779998427153544 10.72963483000736
+ POINT 5345 -2.526893511585702 10.28311542011334
+ POINT 5346 -3.03325797369162 11.17544935978157
+ POINT 5347 -3.286081789785646 11.62005936335257
+ POINT 5348 -2.77958259449772 11.62045238019389
+ POINT 5349 -3.793978657891382 10.72885678785785
+ POINT 5350 -3.28649762244147 10.72924181316605
+ POINT 5351 -3.033012140510429 9.388247926083039
+ POINT 5352 -2.778186307943474 8.938958170589331
+ POINT 5353 -2.271387729106642 8.936454262492179
+ POINT 5354 -2.019774768934057 9.386150177582453
+ POINT 5355 -2.273105663732145 9.835088963624671
+ POINT 5356 -2.779450228049837 9.835400826903166
+ POINT 5357 -5.5822245505022 8.490021566077278
+ POINT 5358 -5.835924092640452 8.936439449580325
+ POINT 5359 -5.83999246392453 8.041429258670941
+ POINT 5360 -6.353715300277041 8.037914311090102
+ POINT 5361 -0.7574091937513752 13.39536386100999
+ POINT 5362 -0.5049253668923982 13.83754850584218
+ POINT 5363 -1.262484566388291 13.39525698367467
+ POINT 5364 -0.7573602894107085 14.27848893565566
+ POINT 5365 -1.262291965254416 14.27845371053971
+ POINT 5366 -3.28331274272134 14.2777561649855
+ POINT 5367 -3.536686451350343 13.83613863307331
+ POINT 5368 -2.777875273536981 14.27795550083099
+ POINT 5369 -2.272576442111081 23.96112623819538
+ POINT 5370 -2.524923753604395 24.40040169094545
+ POINT 5371 -2.272345992723895 24.84060690537046
+ POINT 5372 -1.009801486872866 25.28056166755413
+ POINT 5373 -1.262291950595193 25.72154635362897
+ POINT 5374 -1.767382679741587 25.721695622482
+ POINT 5375 -2.01983108067216 25.2806633643694
+ POINT 5376 -2.272480607424279 25.72176208916036
+ POINT 5377 -1.767248065041203 24.84054043869209
+ POINT 5378 -2.778352392893433 26.60544966214032
+ POINT 5379 -3.284192720232348 26.60594747324546
+ POINT 5380 -2.52542680694141 26.16307686206677
+ POINT 5381 -2.777875207871983 25.72204460395416
+ POINT 5382 -3.28331263174079 25.72224396047425
+ POINT 5383 6.866104760713585 31.96710990335178
+ POINT 5384 7.380362796677328 31.97547094211897
+ POINT 5385 7.629644931204242 31.52677605772053
+ POINT 5386 6.606301269717369 31.51727851965659
+ POINT 5387 7.369526469756744 31.07527436817653
+ POINT 5388 6.859007733442916 31.07180208214582
+ POINT 5389 13.51392964722839 16.04511534389315
+ POINT 5390 14.03639847868913 16.04943449810747
+ POINT 5391 13.52076444975717 16.92688894744077
+ POINT 5392 14.04907281755069 16.92994337381335
+ POINT 5393 14.30347517478823 16.49353649549375
+ POINT 5394 11.18084815906273 18.23937667376692
+ POINT 5395 10.92145986158483 18.67904848402461
+ POINT 5396 10.40541215995382 18.6792215523644
+ POINT 5397 11.43896757839668 17.79930462984569
+ POINT 5398 11.69841204276576 17.35997805758548
+ POINT 5399 10.92128597919782 17.79908418944193
+ POINT 5400 10.66359917374389 17.35875830998669
+ POINT 5401 10.40547975440994 17.79883035390792
+ POINT 5402 8.865944840957612 16.91817543653783
+ POINT 5403 8.354985365778326 16.91842865090259
+ POINT 5404 8.355742015396309 16.03671800269559
+ POINT 5405 8.100430211024863 16.47811944809296
+ POINT 5406 9.377722904526436 17.79898153735976
+ POINT 5407 9.890885340997441 17.79886408828225
+ POINT 5408 9.634630512485 17.35862192353019
+ POINT 5409 10.14857214645137 18.23918996773749
+ POINT 5410 9.89081774654132 18.67925528673874
+ POINT 5411 9.377649707542098 18.67937380014824
+ POINT 5412 9.121932223471456 18.23935019673461
+ POINT 5413 12.7301955341313 15.59870120865399
+ POINT 5414 12.46808208164849 15.15416875358384
+ POINT 5415 10.66170303024074 13.81985063353565
+ POINT 5416 10.91914277660979 13.37360320785854
+ POINT 5417 11.43075873813842 13.37311649985818
+ POINT 5418 11.68774535289223 13.8200824382397
+ POINT 5419 -4.294356920184748 24.84106161932534
+ POINT 5420 -3.788433699542313 24.84070001560085
+ POINT 5421 -4.041727076734903 25.28149014781243
+ POINT 5422 -4.547087477993811 24.40041071780754
+ POINT 5423 -3.535574036554005 24.40029544465575
+ POINT 5424 -3.788414856257005 23.96059220506871
+ POINT 5425 -4.293926130446284 23.96024864672396
+ POINT 5426 -13.52905046638359 17.80348872203954
+ POINT 5427 -13.79175767275845 17.36796966650665
+ POINT 5428 -13.52076421705971 16.92688909198984
+ POINT 5429 -13.00252392740061 17.80282689423603
+ POINT 5430 -12.998413866338 16.9234253011904
+ POINT 5431 -12.7404339170757 17.36292962737342
+ POINT 5432 -14.02979306030074 15.16474248285489
+ POINT 5433 -14.55273569758199 15.16992825407098
+ POINT 5434 -14.03639819104111 16.04943470346083
+ POINT 5435 -14.56179397742396 16.05410844354104
+ POINT 5436 -13.77224846434048 15.60568723673743
+ POINT 5437 -14.82036732248942 15.61339039057769
+ POINT 5438 -15.08744403037848 16.05749240373201
+ POINT 5439 -16.2090642477196 17.81010190909618
+ POINT 5440 -15.93239653765298 17.37709080090277
+ POINT 5441 -16.75104577713385 17.80975889004021
+ POINT 5442 -17.29733902574828 17.80237948696045
+ POINT 5443 -17.82900832379805 17.79250699444906
+ POINT 5444 -18.125149458915 17.3358334365596
+ POINT 5445 -17.74265051816197 16.90620584174569
+ POINT 5446 -17.02043915652885 17.36861046666035
+ POINT 5447 -17.24542039534538 16.92123752482653
+ POINT 5448 -16.69912714673096 16.9286169279063
+ POINT 5449 -6.088630944097952 30.61808470458812
+ POINT 5450 -5.83075607699084 30.16946420465471
+ POINT 5451 -5.321476310829926 30.16725940981392
+ POINT 5452 -5.068073995839905 30.61330986323137
+ POINT 5453 -5.324237322301012 31.06128512670801
+ POINT 5454 -5.835924560406232 31.06356111209442
+ POINT 5455 -7.109843760575517 30.62477446137646
+ POINT 5456 -7.369526571375625 31.07527433075212
+ POINT 5457 -8.131410593699739 30.63279557430232
+ POINT 5458 -7.880480933021181 31.07974846151187
+ POINT 5459 -7.872056536659996 30.1821803785594
+ POINT 5460 -7.361674108531002 30.17880955550542
+ POINT 5461 -7.613368185284306 29.73274317704884
+ POINT 5462 -7.859855589284646 28.39452247461595
+ POINT 5463 -8.117653318329905 28.84163918972367
+ POINT 5464 -7.097783486965113 28.83658188443342
+ POINT 5465 -7.355184427237546 29.28425727165385
+ POINT 5466 -7.865566855366541 29.28762809470784
+ POINT 5467 -6.840628617274074 28.38986724165644
+ POINT 5468 -6.584305157135041 27.94375243992971
+ POINT 5469 -7.602700719593607 27.94780783183896
+ POINT 5470 -7.345760498175617 27.50220836892409
+ POINT 5471 -7.350228227628744 28.39242754653586
+ POINT 5472 -6.836865316533313 27.50054699198497
+ POINT 5473 -8.859668248791966 36.47820331889234
+ POINT 5474 -9.192245205163893 36.13326199675004
+ POINT 5475 -8.926778614439051 35.64424337939984
+ POINT 5476 -8.395990026835449 36.56035920049054
+ POINT 5477 -8.152789553234477 36.06385683741578
+ POINT 5478 -8.404917802902107 35.59893930067572
+ POINT 5479 -9.445446661180085 34.74868923560489
+ POINT 5480 -9.928438211384101 34.70959839015399
+ POINT 5481 -9.1855200421729 34.27056920744505
+ POINT 5482 -10.20212715258456 34.27925189416473
+ POINT 5483 -9.94558386098727 33.81809877026199
+ POINT 5484 -9.431469769528404 33.80794915972277
+ POINT 5485 -6.972437622679337 37.78020738278309
+ POINT 5486 -7.24426854141284 37.26861594573647
+ POINT 5487 -7.793216463077668 37.97434844713221
+ POINT 5488 -7.792711074552729 37.37441972564716
+ POINT 5489 -7.321637197370867 38.17042362703923
+ POINT 5490 -7.678418548302079 38.46731947176784
+ POINT 5491 2.770028761860395 7.135494617296446
+ POINT 5492 2.513285031132556 6.678759478210158
+ POINT 5493 3.271742031244156 6.237332593188722
+ POINT 5494 3.531281269795326 6.691994135932626
+ POINT 5495 3.278350744254242 7.139721415732282
+ POINT 5496 0.2485632276968463 6.187417834842025
+ POINT 5497 0.7487077343841402 6.190600158863577
+ POINT 5498 0.9957603933355736 5.733872218386605
+ POINT 5499 -3.852233976253672e-08 5.724801600288686
+ POINT 5500 0.7430348919708534 5.261285636016535
+ POINT 5501 0.2485630875716218 5.254593871040265
+ POINT 5502 -15.61382878159145 16.05886928995985
+ POINT 5503 -16.1437233016679 16.05345044312521
+ POINT 5504 -16.40287428664322 16.49110410761176
+ POINT 5505 -15.63614367756524 16.93957798060823
+ POINT 5506 -15.35525543652598 16.4995873429232
+ POINT 5507 -16.17789304782668 16.93847704944558
+ POINT 5508 1.997790912210466 5.756661433504865
+ POINT 5509 2.253497865964841 6.221058560377475
+ POINT 5510 2.760974614335455 6.228080964163087
+ POINT 5511 3.011954866076441 5.77963167535604
+ POINT 5512 2.242930314799657 5.302108943711701
+ POINT 5513 4.543058481172607 4.904216705369631
+ POINT 5514 4.288462587269439 5.349885195959473
+ POINT 5515 4.803481147968283 5.359455913919637
+ POINT 5516 3.775381101729453 5.34176464589557
+ POINT 5517 4.285157939400719 4.447239361033324
+ POINT 5518 3.759704530313033 4.444818867162756
+ POINT 5519 5.325944699989877 6.259861521617189
+ POINT 5520 5.843828725284497 6.255309577026809
+ POINT 5521 6.104985755684442 5.803539343166328
+ POINT 5522 5.838134749720831 5.370250903544328
+ POINT 5523 5.065599245593544 5.809767091465639
+ POINT 5524 5.320195139496712 5.364098600875796
+ POINT 5525 -4.802971484868761 13.39198497902312
+ POINT 5526 -4.296500513511889 13.39272959833429
+ POINT 5527 -5.057585608825249 12.94868562370967
+ POINT 5528 -6.335879478904616 10.72095926303271
+ POINT 5529 -6.079388369501457 11.1680208620888
+ POINT 5530 -6.84062880750044 11.61013355490421
+ POINT 5531 -7.097783541825249 11.16341899720847
+ POINT 5532 -6.331860502614183 11.61209385769366
+ POINT 5533 -5.823064997821714 11.61413559838683
+ POINT 5534 -6.341449844176644 9.827318953093449
+ POINT 5535 -6.08863052415921 9.381915881388753
+ POINT 5536 -6.346618173319224 8.933222069708673
+ POINT 5537 -2.273750259397786 11.62081619889232
+ POINT 5538 -2.526574075491812 12.06542620246332
+ POINT 5539 -2.27331255849431 12.50912509652447
+ POINT 5540 -2.779144893594244 12.50876127782604
+ POINT 5541 -1.767930060637219 12.50939986568534
+ POINT 5542 -1.51542042791521 12.06591801877112
+ POINT 5543 -2.020500878739651 12.95273494104806
+ POINT 5544 -7.369525954258662 8.924726485537136
+ POINT 5545 -7.629644265520056 8.473224777180157
+ POINT 5546 -6.606300873029995 8.482722239581177
+ POINT 5547 -6.86610443150657 8.032890912771032
+ POINT 5548 -6.859007304548753 8.928198671389605
+ POINT 5549 -7.109843254547891 9.375226315664634
+ POINT 5550 -7.380362326127036 8.024529817709622
+ POINT 5551 -2.525426847734203 13.83692324382117
+ POINT 5552 -2.272480651437661 14.27823799621374
+ POINT 5553 -1.767382702124846 14.27830445157146
+ POINT 5554 -1.514941488764452 13.83735499817217
+ POINT 5555 -1.767575303258722 13.39510772470642
+ POINT 5556 -2.272957801115813 13.39483295554556
+ POINT 5557 -2.778352423215133 13.39455046016281
+ POINT 5558 -1.767492689297242 23.96146211472275
+ POINT 5559 -2.020306154315385 23.52210437322497
+ POINT 5560 -1.263131319383013 23.08451873173783
+ POINT 5561 -1.01019165252415 23.52275060399421
+ POINT 5562 -1.768522078044251 23.08392505665697
+ POINT 5563 -1.262295067277426 24.84067058321086
+ POINT 5564 -1.514809979329161 24.40061412421192
+ POINT 5565 -0.7575089425560693 23.96190261348339
+ POINT 5566 -0.5049284856589678 24.40077541610661
+ POINT 5567 -0.7573634011608242 24.84063535307396
+ POINT 5568 -1.262539691533465 23.96159225924151
+ POINT 5569 -4.549022158760552 26.16510835246748
+ POINT 5570 -4.295100786789511 25.72310771361495
+ POINT 5571 -3.789177566147076 25.72274610989047
+ POINT 5572 -3.5366863417954 26.16386152627678
+ POINT 5573 -3.790057654638633 26.60644962266168
+ POINT 5574 -4.296500374351382 26.60727063581498
+ POINT 5575 10.92066954525162 16.91793455038633
+ POINT 5576 10.40486332046374 16.91768071485232
+ POINT 5577 10.40472607340097 16.03513246006513
+ POINT 5578 10.91930146715205 16.03530284192124
+ POINT 5579 10.66209384858155 15.5935783467344
+ POINT 5580 12.47199488428663 16.03898490629723
+ POINT 5581 12.99157927565469 16.04165158150828
+ POINT 5582 12.99841407818347 16.92342518505589
+ POINT 5583 12.47539865640488 16.92143962440089
+ POINT 5584 13.25572899738372 16.48539904153639
+ POINT 5585 11.95273125070042 16.03712579643803
+ POINT 5586 11.43576030048511 16.03598289401182
+ POINT 5587 11.69364019254794 15.59489163101673
+ POINT 5588 11.17839252530453 16.47753700734255
+ POINT 5589 11.43712837858468 16.91861460247691
+ POINT 5590 11.95613502281867 16.91958051454169
+ POINT 5591 12.21411499222381 16.48007616929232
+ POINT 5592 11.95093625080717 15.15244834498486
+ POINT 5593 11.43396530059186 15.15130544255865
+ POINT 5594 11.43270011507272 14.26415543114492
+ POINT 5595 11.94630659667062 14.26478916362155
+ POINT 5596 12.20840718969241 14.71058256512575
+ POINT 5597 9.122219499790404 16.47724514251171
+ POINT 5598 9.377742734846787 16.91780907858158
+ POINT 5599 9.890905171317794 16.91769162950407
+ POINT 5600 10.14797554282553 16.47686786990372
+ POINT 5601 9.890767924255025 16.03514337471688
+ POINT 5602 10.91783758504318 14.26368304084108
+ POINT 5603 10.40540174398959 14.26408496861366
+ POINT 5604 10.40452737681125 15.15066267039869
+ POINT 5605 10.91910277056232 15.15083305225481
+ POINT 5606 11.17639882882156 14.70838976622293
+ POINT 5607 10.14864614667206 14.70832398270322
+ POINT 5608 9.89163722469128 15.15106927718282
+ POINT 5609 3.51170272767204 4.885646738160905
+ POINT 5610 3.243367337511309 4.435819617914195
+ POINT 5611 2.748276492019028 5.323513767621375
+ POINT 5612 2.490019357650945 4.85524266500267
+ POINT 5613 3.259043908927729 5.332765396647009
+ POINT 5614 2.734686977480409 4.405829547072493
+ POINT 5615 -3.031723722491756 12.95196238977117
+ POINT 5616 -3.284985239489258 12.50826349571002
+ POINT 5617 -4.044006831271692 12.95064364330777
+ POINT 5618 -3.790057750626966 13.39355056268168
+ POINT 5619 -3.284192769110147 13.39405267804679
+ POINT 5620 -3.792541619613724 11.61935880772859
+ POINT 5621 -3.538866240419825 12.0643618281409
+ POINT 5622 -3.791445069317336 12.50756294008603
+ POINT 5623 -4.297887832202258 12.50674197573865
+ POINT 5624 -6.851155057129612 9.824663480890202
+ POINT 5625 -6.593280296468273 10.27328393246655
+ POINT 5626 -7.355184359388906 10.7157436666423
+ POINT 5627 -7.613367931970085 10.26725782144039
+ POINT 5628 -7.36167370683952 9.821191295037732
+ POINT 5629 -6.845584691857582 10.71830379082946
+ POINT 5630 -1.76803668438193 11.62082851212063
+ POINT 5631 -2.021045203387837 11.17585468985119
+ POINT 5632 -1.767940287819996 10.72933527995718
+ POINT 5633 -1.262715371905262 11.62095650973
+ POINT 5634 -1.010161141140113 11.17580760248892
+ POINT 5635 -1.262535223830214 10.72890573157164
+ POINT 5636 9.378288957212938 16.03556981048882
+ POINT 5637 8.866491063323762 16.03593616844507
+ POINT 5638 8.611811472818843 15.5950426706727
+ POINT 5639 8.867790365254811 15.15257222445195
+ POINT 5640 9.379158257649195 15.15149571295476
+ POINT 5641 9.635039487788383 15.59383440065023
+ POINT 5642 -4.299837112326497 11.6184558241427
+ POINT 5643 -4.047052661692318 11.17415335935438
+ POINT 5644 -4.301274150604154 10.72795380427197
+ POINT 5645 -5.062470509557039 11.17165648927523
+ POINT 5646 -4.809681860827208 10.72679960182707
+ POINT 5647 -4.805074905311793 12.50557281219472
+ POINT 5648 -5.312210919980426 12.50443575694401
+ POINT 5649 -4.552513143357436 12.06249210897299
+ POINT 5650 -5.567618673700705 12.05976576971038
+ POINT 5651 -4.807024185436029 11.61728666059878
+ POINT 5652 -5.315146540587978 11.61569277410551
END POINTS LIST
@@ -1403,669 +5665,2765 @@ END POINTS LIST
BEGIN MESH STRUCTURE DESCRIPTION
-CONVEX 0 'GT_PK(2,2)' 181 364 142 365 366 161
-CONVEX 1 'GT_PK(2,2)' 180 367 181 368 369 3
-CONVEX 2 'GT_PK(2,2)' 180 367 181 370 365 161
-CONVEX 3 'GT_PK(2,2)' 358 371 359 372 373 4
-CONVEX 4 'GT_PK(2,2)' 360 374 359 375 373 4
-CONVEX 5 'GT_PK(2,2)' 350 376 360 377 378 361
-CONVEX 6 'GT_PK(2,2)' 127 379 108 380 381 128
-CONVEX 7 'GT_PK(2,2)' 127 379 108 382 383 107
-CONVEX 8 'GT_PK(2,2)' 182 384 201 385 386 2
-CONVEX 9 'GT_PK(2,2)' 141 387 142 388 389 122
-CONVEX 10 'GT_PK(2,2)' 141 387 142 390 366 161
-CONVEX 11 'GT_PK(2,2)' 17 391 8 392 393 7
-CONVEX 12 'GT_PK(2,2)' 325 394 309 395 396 326
-CONVEX 13 'GT_PK(2,2)' 354 397 341 398 399 353
-CONVEX 14 'GT_PK(2,2)' 39 400 55 401 402 40
-CONVEX 15 'GT_PK(2,2)' 39 403 25 401 404 40
-CONVEX 16 'GT_PK(2,2)' 71 405 55 406 407 72
-CONVEX 17 'GT_PK(2,2)' 316 408 317 409 410 331
-CONVEX 18 'GT_PK(2,2)' 356 411 346 412 413 357
-CONVEX 19 'GT_PK(2,2)' 87 414 86 415 416 69
-CONVEX 20 'GT_PK(2,2)' 89 417 108 418 383 107
-CONVEX 21 'GT_PK(2,2)' 89 419 71 420 406 72
-CONVEX 22 'GT_PK(2,2)' 109 421 108 422 381 128
-CONVEX 23 'GT_PK(2,2)' 126 423 127 424 382 107
-CONVEX 24 'GT_PK(2,2)' 163 425 162 426 427 143
-CONVEX 25 'GT_PK(2,2)' 163 425 162 428 429 2
-CONVEX 26 'GT_PK(2,2)' 163 430 182 428 385 2
-CONVEX 27 'GT_PK(2,2)' 191 431 211 432 433 210
-CONVEX 28 'GT_PK(2,2)' 191 434 190 435 436 1
-CONVEX 29 'GT_PK(2,2)' 191 434 190 432 437 210
-CONVEX 30 'GT_PK(2,2)' 136 438 155 439 440 135
-CONVEX 31 'GT_PK(2,2)' 149 441 130 442 443 150
-CONVEX 32 'GT_PK(2,2)' 131 444 130 445 443 150
-CONVEX 33 'GT_PK(2,2)' 15 446 6 447 448 5
-CONVEX 34 'GT_PK(2,2)' 18 449 17 450 451 30
-CONVEX 35 'GT_PK(2,2)' 18 452 9 453 454 0
-CONVEX 36 'GT_PK(2,2)' 18 455 8 453 456 0
-CONVEX 37 'GT_PK(2,2)' 18 449 17 455 391 8
-CONVEX 38 'GT_PK(2,2)' 363 457 362 458 459 352
-CONVEX 39 'GT_PK(2,2)' 351 460 362 461 459 352
-CONVEX 40 'GT_PK(2,2)' 351 462 338 463 464 350
-CONVEX 41 'GT_PK(2,2)' 351 463 350 465 377 361
-CONVEX 42 'GT_PK(2,2)' 351 460 362 465 466 361
-CONVEX 43 'GT_PK(2,2)' 339 467 325 468 469 324
-CONVEX 44 'GT_PK(2,2)' 339 470 338 468 471 324
-CONVEX 45 'GT_PK(2,2)' 339 472 351 473 461 352
-CONVEX 46 'GT_PK(2,2)' 339 472 351 470 462 338
-CONVEX 47 'GT_PK(2,2)' 340 474 341 475 399 353
-CONVEX 48 'GT_PK(2,2)' 340 476 339 477 473 352
-CONVEX 49 'GT_PK(2,2)' 340 476 339 478 467 325
-CONVEX 50 'GT_PK(2,2)' 340 474 341 479 480 326
-CONVEX 51 'GT_PK(2,2)' 340 478 325 479 395 326
-CONVEX 52 'GT_PK(2,2)' 340 481 363 475 482 353
-CONVEX 53 'GT_PK(2,2)' 340 481 363 477 458 352
-CONVEX 54 'GT_PK(2,2)' 278 483 259 484 485 258
-CONVEX 55 'GT_PK(2,2)' 276 486 257 487 488 256
-CONVEX 56 'GT_PK(2,2)' 347 489 358 490 491 357
-CONVEX 57 'GT_PK(2,2)' 347 492 346 490 413 357
-CONVEX 58 'GT_PK(2,2)' 337 493 338 494 464 350
-CONVEX 59 'GT_PK(2,2)' 308 495 325 496 469 324
-CONVEX 60 'GT_PK(2,2)' 308 495 325 497 394 309
-CONVEX 61 'GT_PK(2,2)' 291 498 309 499 500 292
-CONVEX 62 'GT_PK(2,2)' 291 501 308 498 497 309
-CONVEX 63 'GT_PK(2,2)' 291 501 308 502 503 290
-CONVEX 64 'GT_PK(2,2)' 197 504 216 505 506 196
-CONVEX 65 'GT_PK(2,2)' 197 507 178 508 509 198
-CONVEX 66 'GT_PK(2,2)' 171 510 190 511 436 1
-CONVEX 67 'GT_PK(2,2)' 64 512 81 513 514 80
-CONVEX 68 'GT_PK(2,2)' 19 515 9 516 517 10
-CONVEX 69 'GT_PK(2,2)' 19 518 18 515 452 9
-CONVEX 70 'GT_PK(2,2)' 24 519 39 520 521 38
-CONVEX 71 'GT_PK(2,2)' 24 519 39 522 403 25
-CONVEX 72 'GT_PK(2,2)' 54 523 39 524 400 55
-CONVEX 73 'GT_PK(2,2)' 54 525 71 524 405 55
-CONVEX 74 'GT_PK(2,2)' 54 523 39 526 521 38
-CONVEX 75 'GT_PK(2,2)' 54 527 53 526 528 38
-CONVEX 76 'GT_PK(2,2)' 315 529 316 530 531 299
-CONVEX 77 'GT_PK(2,2)' 343 532 344 533 534 331
-CONVEX 78 'GT_PK(2,2)' 343 535 316 533 409 331
-CONVEX 79 'GT_PK(2,2)' 300 536 316 537 531 299
-CONVEX 80 'GT_PK(2,2)' 300 536 316 538 408 317
-CONVEX 81 'GT_PK(2,2)' 123 539 124 540 541 104
-CONVEX 82 'GT_PK(2,2)' 123 539 124 542 543 143
-CONVEX 83 'GT_PK(2,2)' 123 544 162 542 427 143
-CONVEX 84 'GT_PK(2,2)' 70 545 53 546 547 69
-CONVEX 85 'GT_PK(2,2)' 70 548 87 546 415 69
-CONVEX 86 'GT_PK(2,2)' 70 549 54 545 527 53
-CONVEX 87 'GT_PK(2,2)' 70 549 54 550 525 71
-CONVEX 88 'GT_PK(2,2)' 106 551 126 552 553 125
-CONVEX 89 'GT_PK(2,2)' 106 551 126 554 424 107
-CONVEX 90 'GT_PK(2,2)' 105 555 86 556 557 104
-CONVEX 91 'GT_PK(2,2)' 105 558 87 555 414 86
-CONVEX 92 'GT_PK(2,2)' 105 559 124 556 541 104
-CONVEX 93 'GT_PK(2,2)' 105 560 106 558 561 87
-CONVEX 94 'GT_PK(2,2)' 105 559 124 562 563 125
-CONVEX 95 'GT_PK(2,2)' 105 560 106 562 552 125
-CONVEX 96 'GT_PK(2,2)' 179 564 178 565 509 198
-CONVEX 97 'GT_PK(2,2)' 56 566 73 567 568 57
-CONVEX 98 'GT_PK(2,2)' 56 569 55 570 402 40
-CONVEX 99 'GT_PK(2,2)' 56 569 55 571 407 72
-CONVEX 100 'GT_PK(2,2)' 56 566 73 571 572 72
-CONVEX 101 'GT_PK(2,2)' 90 573 109 574 421 108
-CONVEX 102 'GT_PK(2,2)' 90 575 89 576 420 72
-CONVEX 103 'GT_PK(2,2)' 90 575 89 574 417 108
-CONVEX 104 'GT_PK(2,2)' 90 577 73 576 572 72
-CONVEX 105 'GT_PK(2,2)' 187 578 167 579 580 168
-CONVEX 106 'GT_PK(2,2)' 116 581 136 582 439 135
-CONVEX 107 'GT_PK(2,2)' 116 581 136 583 584 117
-CONVEX 108 'GT_PK(2,2)' 154 585 153 586 587 173
-CONVEX 109 'GT_PK(2,2)' 154 588 155 589 440 135
-CONVEX 110 'GT_PK(2,2)' 172 590 153 591 587 173
-CONVEX 111 'GT_PK(2,2)' 172 592 171 593 511 1
-CONVEX 112 'GT_PK(2,2)' 264 594 245 595 596 244
-CONVEX 113 'GT_PK(2,2)' 298 597 297 598 599 314
-CONVEX 114 'GT_PK(2,2)' 298 600 315 598 601 314
-CONVEX 115 'GT_PK(2,2)' 298 602 281 603 604 299
-CONVEX 116 'GT_PK(2,2)' 298 600 315 603 530 299
-CONVEX 117 'GT_PK(2,2)' 202 605 182 606 384 201
-CONVEX 118 'GT_PK(2,2)' 144 607 163 608 426 143
-CONVEX 119 'GT_PK(2,2)' 144 609 124 610 563 125
-CONVEX 120 'GT_PK(2,2)' 144 609 124 608 543 143
-CONVEX 121 'GT_PK(2,2)' 215 611 216 612 506 196
-CONVEX 122 'GT_PK(2,2)' 215 613 195 612 614 196
-CONVEX 123 'GT_PK(2,2)' 99 615 81 616 617 82
-CONVEX 124 'GT_PK(2,2)' 99 618 118 619 620 117
-CONVEX 125 'GT_PK(2,2)' 35 621 36 622 623 23
-CONVEX 126 'GT_PK(2,2)' 35 621 36 624 625 50
-CONVEX 127 'GT_PK(2,2)' 100 626 118 627 628 119
-CONVEX 128 'GT_PK(2,2)' 100 629 99 630 616 82
-CONVEX 129 'GT_PK(2,2)' 100 629 99 626 618 118
-CONVEX 130 'GT_PK(2,2)' 137 631 136 632 584 117
-CONVEX 131 'GT_PK(2,2)' 137 633 118 632 620 117
-CONVEX 132 'GT_PK(2,2)' 74 634 73 635 568 57
-CONVEX 133 'GT_PK(2,2)' 74 636 75 637 638 92
-CONVEX 134 'GT_PK(2,2)' 148 639 167 640 580 168
-CONVEX 135 'GT_PK(2,2)' 148 641 149 640 642 168
-CONVEX 136 'GT_PK(2,2)' 93 643 75 644 645 76
-CONVEX 137 'GT_PK(2,2)' 93 643 75 646 638 92
-CONVEX 138 'GT_PK(2,2)' 46 647 45 648 649 61
-CONVEX 139 'GT_PK(2,2)' 46 650 62 648 651 61
-CONVEX 140 'GT_PK(2,2)' 46 650 62 652 653 47
-CONVEX 141 'GT_PK(2,2)' 327 654 354 655 397 341
-CONVEX 142 'GT_PK(2,2)' 327 655 341 656 480 326
-CONVEX 143 'GT_PK(2,2)' 217 657 218 658 659 198
-CONVEX 144 'GT_PK(2,2)' 217 660 197 658 508 198
-CONVEX 145 'GT_PK(2,2)' 217 660 197 661 504 216
-CONVEX 146 'GT_PK(2,2)' 200 662 180 663 368 3
-CONVEX 147 'GT_PK(2,2)' 200 664 220 663 665 3
-CONVEX 148 'GT_PK(2,2)' 238 666 257 667 668 258
-CONVEX 149 'GT_PK(2,2)' 238 669 259 667 485 258
-CONVEX 150 'GT_PK(2,2)' 238 670 239 669 671 259
-CONVEX 151 'GT_PK(2,2)' 277 672 257 673 668 258
-CONVEX 152 'GT_PK(2,2)' 277 674 276 672 486 257
-CONVEX 153 'GT_PK(2,2)' 277 675 278 673 484 258
-CONVEX 154 'GT_PK(2,2)' 277 675 278 676 677 296
-CONVEX 155 'GT_PK(2,2)' 236 678 255 679 680 256
-CONVEX 156 'GT_PK(2,2)' 236 681 217 682 661 216
-CONVEX 157 'GT_PK(2,2)' 275 683 276 684 487 256
-CONVEX 158 'GT_PK(2,2)' 275 685 255 684 680 256
-CONVEX 159 'GT_PK(2,2)' 275 686 294 683 687 276
-CONVEX 160 'GT_PK(2,2)' 275 686 294 688 689 293
-CONVEX 161 'GT_PK(2,2)' 209 690 229 691 692 210
-CONVEX 162 'GT_PK(2,2)' 209 693 189 694 695 208
-CONVEX 163 'GT_PK(2,2)' 209 696 190 691 437 210
-CONVEX 164 'GT_PK(2,2)' 209 693 189 696 697 190
-CONVEX 165 'GT_PK(2,2)' 334 698 347 699 492 346
-CONVEX 166 'GT_PK(2,2)' 345 700 356 701 411 346
-CONVEX 167 'GT_PK(2,2)' 345 702 355 700 703 356
-CONVEX 168 'GT_PK(2,2)' 349 704 337 705 494 350
-CONVEX 169 'GT_PK(2,2)' 349 706 360 707 374 359
-CONVEX 170 'GT_PK(2,2)' 349 705 350 706 376 360
-CONVEX 171 'GT_PK(2,2)' 349 708 336 704 709 337
-CONVEX 172 'GT_PK(2,2)' 323 710 338 711 471 324
-CONVEX 173 'GT_PK(2,2)' 323 712 337 710 493 338
-CONVEX 174 'GT_PK(2,2)' 307 713 308 714 503 290
-CONVEX 175 'GT_PK(2,2)' 307 713 308 715 496 324
-CONVEX 176 'GT_PK(2,2)' 307 716 323 715 711 324
-CONVEX 177 'GT_PK(2,2)' 307 716 323 717 718 306
-CONVEX 178 'GT_PK(2,2)' 272 719 291 720 502 290
-CONVEX 179 'GT_PK(2,2)' 169 721 149 722 442 150
-CONVEX 180 'GT_PK(2,2)' 169 721 149 723 642 168
-CONVEX 181 'GT_PK(2,2)' 22 724 35 725 726 34
-CONVEX 182 'GT_PK(2,2)' 22 724 35 727 622 23
-CONVEX 183 'GT_PK(2,2)' 63 728 62 729 653 47
-CONVEX 184 'GT_PK(2,2)' 63 728 62 730 731 79
-CONVEX 185 'GT_PK(2,2)' 63 730 79 732 733 80
-CONVEX 186 'GT_PK(2,2)' 63 734 64 732 513 80
-CONVEX 187 'GT_PK(2,2)' 21 735 12 736 737 11
-CONVEX 188 'GT_PK(2,2)' 21 738 33 739 740 34
-CONVEX 189 'GT_PK(2,2)' 21 741 22 739 725 34
-CONVEX 190 'GT_PK(2,2)' 21 741 22 735 742 12
-CONVEX 191 'GT_PK(2,2)' 49 743 35 744 726 34
-CONVEX 192 'GT_PK(2,2)' 49 743 35 745 624 50
-CONVEX 193 'GT_PK(2,2)' 330 746 315 747 529 316
-CONVEX 194 'GT_PK(2,2)' 330 748 343 747 535 316
-CONVEX 195 'GT_PK(2,2)' 330 746 315 749 601 314
-CONVEX 196 'GT_PK(2,2)' 88 750 70 751 548 87
-CONVEX 197 'GT_PK(2,2)' 88 752 106 751 561 87
-CONVEX 198 'GT_PK(2,2)' 88 750 70 753 550 71
-CONVEX 199 'GT_PK(2,2)' 88 752 106 754 554 107
-CONVEX 200 'GT_PK(2,2)' 88 755 89 754 418 107
-CONVEX 201 'GT_PK(2,2)' 88 755 89 753 419 71
-CONVEX 202 'GT_PK(2,2)' 159 756 179 757 564 178
-CONVEX 203 'GT_PK(2,2)' 129 758 110 759 760 130
-CONVEX 204 'GT_PK(2,2)' 129 761 148 762 763 128
-CONVEX 205 'GT_PK(2,2)' 129 764 109 762 422 128
-CONVEX 206 'GT_PK(2,2)' 129 758 110 764 765 109
-CONVEX 207 'GT_PK(2,2)' 129 766 149 759 441 130
-CONVEX 208 'GT_PK(2,2)' 129 761 148 766 641 149
-CONVEX 209 'GT_PK(2,2)' 111 767 131 768 444 130
-CONVEX 210 'GT_PK(2,2)' 111 769 110 768 760 130
-CONVEX 211 'GT_PK(2,2)' 111 769 110 770 771 92
-CONVEX 212 'GT_PK(2,2)' 111 772 93 770 646 92
-CONVEX 213 'GT_PK(2,2)' 91 773 90 774 573 109
-CONVEX 214 'GT_PK(2,2)' 91 775 110 776 771 92
-CONVEX 215 'GT_PK(2,2)' 91 775 110 774 765 109
-CONVEX 216 'GT_PK(2,2)' 91 777 74 776 637 92
-CONVEX 217 'GT_PK(2,2)' 91 773 90 778 577 73
-CONVEX 218 'GT_PK(2,2)' 91 777 74 778 634 73
-CONVEX 219 'GT_PK(2,2)' 97 779 79 780 733 80
-CONVEX 220 'GT_PK(2,2)' 97 781 96 779 782 79
-CONVEX 221 'GT_PK(2,2)' 114 783 133 784 785 113
-CONVEX 222 'GT_PK(2,2)' 114 786 95 784 787 113
-CONVEX 223 'GT_PK(2,2)' 114 786 95 788 789 96
-CONVEX 224 'GT_PK(2,2)' 132 790 133 791 785 113
-CONVEX 225 'GT_PK(2,2)' 263 792 264 793 595 244
-CONVEX 226 'GT_PK(2,2)' 263 794 262 795 796 281
-CONVEX 227 'GT_PK(2,2)' 282 797 281 798 604 299
-CONVEX 228 'GT_PK(2,2)' 282 799 264 800 801 283
-CONVEX 229 'GT_PK(2,2)' 282 802 263 797 795 281
-CONVEX 230 'GT_PK(2,2)' 282 802 263 799 792 264
-CONVEX 231 'GT_PK(2,2)' 282 803 300 800 804 283
-CONVEX 232 'GT_PK(2,2)' 282 803 300 798 537 299
-CONVEX 233 'GT_PK(2,2)' 261 805 279 806 807 260
-CONVEX 234 'GT_PK(2,2)' 243 808 263 809 793 244
-CONVEX 235 'GT_PK(2,2)' 243 808 263 810 794 262
-CONVEX 236 'GT_PK(2,2)' 221 811 202 812 606 201
-CONVEX 237 'GT_PK(2,2)' 221 813 240 814 815 222
-CONVEX 238 'GT_PK(2,2)' 221 811 202 814 816 222
-CONVEX 239 'GT_PK(2,2)' 156 817 136 818 438 155
-CONVEX 240 'GT_PK(2,2)' 156 819 175 818 820 155
-CONVEX 241 'GT_PK(2,2)' 156 821 137 817 631 136
-CONVEX 242 'GT_PK(2,2)' 192 822 191 823 431 211
-CONVEX 243 'GT_PK(2,2)' 192 822 191 824 435 1
-CONVEX 244 'GT_PK(2,2)' 192 825 172 824 593 1
-CONVEX 245 'GT_PK(2,2)' 192 825 172 826 591 173
-CONVEX 246 'GT_PK(2,2)' 174 827 154 828 586 173
-CONVEX 247 'GT_PK(2,2)' 174 827 154 829 588 155
-CONVEX 248 'GT_PK(2,2)' 174 830 175 829 820 155
-CONVEX 249 'GT_PK(2,2)' 214 831 215 832 613 195
-CONVEX 250 'GT_PK(2,2)' 214 831 215 833 834 234
-CONVEX 251 'GT_PK(2,2)' 98 835 81 836 514 80
-CONVEX 252 'GT_PK(2,2)' 98 837 99 835 615 81
-CONVEX 253 'GT_PK(2,2)' 98 838 97 836 780 80
-CONVEX 254 'GT_PK(2,2)' 98 837 99 839 619 117
-CONVEX 255 'GT_PK(2,2)' 98 840 116 839 583 117
-CONVEX 256 'GT_PK(2,2)' 98 838 97 840 841 116
-CONVEX 257 'GT_PK(2,2)' 52 842 68 843 844 67
-CONVEX 258 'GT_PK(2,2)' 83 845 66 846 847 67
-CONVEX 259 'GT_PK(2,2)' 83 848 100 849 630 82
-CONVEX 260 'GT_PK(2,2)' 83 845 66 849 850 82
-CONVEX 261 'GT_PK(2,2)' 51 851 66 852 853 50
-CONVEX 262 'GT_PK(2,2)' 51 854 36 855 856 37
-CONVEX 263 'GT_PK(2,2)' 51 854 36 852 625 50
-CONVEX 264 'GT_PK(2,2)' 51 851 66 857 847 67
-CONVEX 265 'GT_PK(2,2)' 51 858 52 855 859 37
-CONVEX 266 'GT_PK(2,2)' 51 858 52 857 843 67
-CONVEX 267 'GT_PK(2,2)' 103 860 102 861 862 85
-CONVEX 268 'GT_PK(2,2)' 121 863 102 864 865 120
-CONVEX 269 'GT_PK(2,2)' 121 866 141 867 388 122
-CONVEX 270 'GT_PK(2,2)' 121 868 103 867 869 122
-CONVEX 271 'GT_PK(2,2)' 121 868 103 863 860 102
-CONVEX 272 'GT_PK(2,2)' 58 870 74 871 635 57
-CONVEX 273 'GT_PK(2,2)' 58 870 74 872 636 75
-CONVEX 274 'GT_PK(2,2)' 29 873 17 874 451 30
-CONVEX 275 'GT_PK(2,2)' 60 875 45 876 649 61
-CONVEX 276 'GT_PK(2,2)' 60 877 77 878 879 76
-CONVEX 277 'GT_PK(2,2)' 60 877 77 876 880 61
-CONVEX 278 'GT_PK(2,2)' 94 881 95 882 787 113
-CONVEX 279 'GT_PK(2,2)' 94 883 93 884 644 76
-CONVEX 280 'GT_PK(2,2)' 94 885 77 884 879 76
-CONVEX 281 'GT_PK(2,2)' 94 885 77 881 886 95
-CONVEX 282 'GT_PK(2,2)' 41 887 56 888 570 40
-CONVEX 283 'GT_PK(2,2)' 41 887 56 889 567 57
-CONVEX 284 'GT_PK(2,2)' 28 890 27 891 892 15
-CONVEX 285 'GT_PK(2,2)' 28 893 29 894 895 43
-CONVEX 286 'GT_PK(2,2)' 14 896 15 897 447 5
-CONVEX 287 'GT_PK(2,2)' 14 898 27 896 892 15
-CONVEX 288 'GT_PK(2,2)' 31 899 45 900 901 30
-CONVEX 289 'GT_PK(2,2)' 31 902 46 899 647 45
-CONVEX 290 'GT_PK(2,2)' 31 903 18 900 450 30
-CONVEX 291 'GT_PK(2,2)' 31 904 19 903 518 18
-CONVEX 292 'GT_PK(2,2)' 311 905 327 906 907 328
-CONVEX 293 'GT_PK(2,2)' 311 908 294 909 689 293
-CONVEX 294 'GT_PK(2,2)' 342 910 329 911 912 328
-CONVEX 295 'GT_PK(2,2)' 342 913 327 914 654 354
-CONVEX 296 'GT_PK(2,2)' 342 913 327 911 907 328
-CONVEX 297 'GT_PK(2,2)' 237 915 217 916 657 218
-CONVEX 298 'GT_PK(2,2)' 237 917 238 918 666 257
-CONVEX 299 'GT_PK(2,2)' 237 917 238 916 919 218
-CONVEX 300 'GT_PK(2,2)' 237 920 236 915 681 217
-CONVEX 301 'GT_PK(2,2)' 237 918 257 921 488 256
-CONVEX 302 'GT_PK(2,2)' 237 920 236 921 679 256
-CONVEX 303 'GT_PK(2,2)' 199 922 218 923 659 198
-CONVEX 304 'GT_PK(2,2)' 199 924 179 923 565 198
-CONVEX 305 'GT_PK(2,2)' 199 924 179 925 926 180
-CONVEX 306 'GT_PK(2,2)' 199 927 200 925 662 180
-CONVEX 307 'GT_PK(2,2)' 219 928 239 929 930 220
-CONVEX 308 'GT_PK(2,2)' 219 931 238 928 670 239
-CONVEX 309 'GT_PK(2,2)' 219 932 200 929 664 220
-CONVEX 310 'GT_PK(2,2)' 219 931 238 933 919 218
-CONVEX 311 'GT_PK(2,2)' 219 934 199 933 922 218
-CONVEX 312 'GT_PK(2,2)' 219 934 199 932 927 200
-CONVEX 313 'GT_PK(2,2)' 312 935 329 936 912 328
-CONVEX 314 'GT_PK(2,2)' 312 937 311 936 906 328
-CONVEX 315 'GT_PK(2,2)' 312 937 311 938 908 294
-CONVEX 316 'GT_PK(2,2)' 235 939 236 940 682 216
-CONVEX 317 'GT_PK(2,2)' 235 939 236 941 678 255
-CONVEX 318 'GT_PK(2,2)' 235 942 215 940 611 216
-CONVEX 319 'GT_PK(2,2)' 235 942 215 943 834 234
-CONVEX 320 'GT_PK(2,2)' 235 944 254 943 945 234
-CONVEX 321 'GT_PK(2,2)' 235 944 254 941 946 255
-CONVEX 322 'GT_PK(2,2)' 265 947 264 948 801 283
-CONVEX 323 'GT_PK(2,2)' 265 947 264 949 594 245
-CONVEX 324 'GT_PK(2,2)' 333 950 334 951 699 346
-CONVEX 325 'GT_PK(2,2)' 333 952 345 951 701 346
-CONVEX 326 'GT_PK(2,2)' 332 953 317 954 410 331
-CONVEX 327 'GT_PK(2,2)' 332 955 318 953 956 317
-CONVEX 328 'GT_PK(2,2)' 332 957 344 954 534 331
-CONVEX 329 'GT_PK(2,2)' 332 958 333 955 959 318
-CONVEX 330 'GT_PK(2,2)' 332 958 333 960 952 345
-CONVEX 331 'GT_PK(2,2)' 332 961 355 957 962 344
-CONVEX 332 'GT_PK(2,2)' 332 960 345 961 702 355
-CONVEX 333 'GT_PK(2,2)' 335 963 334 964 698 347
-CONVEX 334 'GT_PK(2,2)' 335 965 336 966 967 321
-CONVEX 335 'GT_PK(2,2)' 322 968 323 969 718 306
-CONVEX 336 'GT_PK(2,2)' 322 968 323 970 712 337
-CONVEX 337 'GT_PK(2,2)' 322 971 336 972 967 321
-CONVEX 338 'GT_PK(2,2)' 322 971 336 970 709 337
-CONVEX 339 'GT_PK(2,2)' 250 973 270 974 975 251
-CONVEX 340 'GT_PK(2,2)' 289 976 307 977 714 290
-CONVEX 341 'GT_PK(2,2)' 289 976 307 978 717 306
-CONVEX 342 'GT_PK(2,2)' 305 979 322 980 972 321
-CONVEX 343 'GT_PK(2,2)' 305 979 322 981 969 306
-CONVEX 344 'GT_PK(2,2)' 274 982 275 983 685 255
-CONVEX 345 'GT_PK(2,2)' 274 984 254 983 946 255
-CONVEX 346 'GT_PK(2,2)' 274 982 275 985 688 293
-CONVEX 347 'GT_PK(2,2)' 274 985 293 986 987 292
-CONVEX 348 'GT_PK(2,2)' 273 988 291 989 499 292
-CONVEX 349 'GT_PK(2,2)' 273 990 272 988 719 291
-CONVEX 350 'GT_PK(2,2)' 273 991 274 989 986 292
-CONVEX 351 'GT_PK(2,2)' 273 991 274 992 984 254
-CONVEX 352 'GT_PK(2,2)' 170 993 169 994 722 150
-CONVEX 353 'GT_PK(2,2)' 170 993 169 995 996 189
-CONVEX 354 'GT_PK(2,2)' 170 997 171 998 510 190
-CONVEX 355 'GT_PK(2,2)' 170 995 189 998 697 190
-CONVEX 356 'GT_PK(2,2)' 188 999 189 1000 695 208
-CONVEX 357 'GT_PK(2,2)' 188 1001 169 999 996 189
-CONVEX 358 'GT_PK(2,2)' 188 1000 208 1002 1003 207
-CONVEX 359 'GT_PK(2,2)' 188 1004 187 1002 1005 207
-CONVEX 360 'GT_PK(2,2)' 188 1004 187 1006 579 168
-CONVEX 361 'GT_PK(2,2)' 188 1001 169 1006 723 168
-CONVEX 362 'GT_PK(2,2)' 48 1007 63 1008 734 64
-CONVEX 363 'GT_PK(2,2)' 48 1009 49 1008 1010 64
-CONVEX 364 'GT_PK(2,2)' 48 1011 33 1012 1013 47
-CONVEX 365 'GT_PK(2,2)' 48 1007 63 1012 729 47
-CONVEX 366 'GT_PK(2,2)' 48 1011 33 1014 740 34
-CONVEX 367 'GT_PK(2,2)' 48 1009 49 1014 744 34
-CONVEX 368 'GT_PK(2,2)' 20 1015 21 1016 736 11
-CONVEX 369 'GT_PK(2,2)' 20 1017 10 1016 1018 11
-CONVEX 370 'GT_PK(2,2)' 20 1019 19 1017 516 10
-CONVEX 371 'GT_PK(2,2)' 20 1015 21 1020 738 33
-CONVEX 372 'GT_PK(2,2)' 65 1021 49 1022 1010 64
-CONVEX 373 'GT_PK(2,2)' 65 1022 64 1023 512 81
-CONVEX 374 'GT_PK(2,2)' 65 1024 66 1025 853 50
-CONVEX 375 'GT_PK(2,2)' 65 1021 49 1025 745 50
-CONVEX 376 'GT_PK(2,2)' 65 1023 81 1026 617 82
-CONVEX 377 'GT_PK(2,2)' 65 1024 66 1026 850 82
-CONVEX 378 'GT_PK(2,2)' 139 1027 120 1028 1029 119
-CONVEX 379 'GT_PK(2,2)' 140 1030 139 1031 1032 159
-CONVEX 380 'GT_PK(2,2)' 140 1030 139 1033 1027 120
-CONVEX 381 'GT_PK(2,2)' 140 1034 121 1035 866 141
-CONVEX 382 'GT_PK(2,2)' 140 1034 121 1033 864 120
-CONVEX 383 'GT_PK(2,2)' 160 1036 159 1037 756 179
-CONVEX 384 'GT_PK(2,2)' 160 1038 180 1039 370 161
-CONVEX 385 'GT_PK(2,2)' 160 1037 179 1038 926 180
-CONVEX 386 'GT_PK(2,2)' 160 1040 140 1036 1031 159
-CONVEX 387 'GT_PK(2,2)' 160 1041 141 1039 390 161
-CONVEX 388 'GT_PK(2,2)' 160 1040 140 1041 1035 141
-CONVEX 389 'GT_PK(2,2)' 186 1042 187 1043 578 167
-CONVEX 390 'GT_PK(2,2)' 164 1044 144 1045 607 163
-CONVEX 391 'GT_PK(2,2)' 147 1046 127 1047 380 128
-CONVEX 392 'GT_PK(2,2)' 147 1048 148 1047 763 128
-CONVEX 393 'GT_PK(2,2)' 147 1048 148 1049 639 167
-CONVEX 394 'GT_PK(2,2)' 78 1050 95 1051 789 96
-CONVEX 395 'GT_PK(2,2)' 78 1052 77 1050 886 95
-CONVEX 396 'GT_PK(2,2)' 78 1051 96 1053 782 79
-CONVEX 397 'GT_PK(2,2)' 78 1054 62 1053 731 79
-CONVEX 398 'GT_PK(2,2)' 78 1054 62 1055 651 61
-CONVEX 399 'GT_PK(2,2)' 78 1052 77 1055 880 61
-CONVEX 400 'GT_PK(2,2)' 115 1056 116 1057 582 135
-CONVEX 401 'GT_PK(2,2)' 115 1058 114 1059 788 96
-CONVEX 402 'GT_PK(2,2)' 115 1060 97 1059 781 96
-CONVEX 403 'GT_PK(2,2)' 115 1060 97 1056 841 116
-CONVEX 404 'GT_PK(2,2)' 134 1061 133 1062 1063 153
-CONVEX 405 'GT_PK(2,2)' 134 1064 114 1061 783 133
-CONVEX 406 'GT_PK(2,2)' 134 1065 115 1064 1058 114
-CONVEX 407 'GT_PK(2,2)' 134 1065 115 1066 1057 135
-CONVEX 408 'GT_PK(2,2)' 134 1067 154 1066 589 135
-CONVEX 409 'GT_PK(2,2)' 134 1067 154 1062 585 153
-CONVEX 410 'GT_PK(2,2)' 151 1068 132 1069 1070 131
-CONVEX 411 'GT_PK(2,2)' 151 1069 131 1071 445 150
-CONVEX 412 'GT_PK(2,2)' 151 1072 170 1071 994 150
-CONVEX 413 'GT_PK(2,2)' 151 1072 170 1073 997 171
-CONVEX 414 'GT_PK(2,2)' 152 1074 172 1075 592 171
-CONVEX 415 'GT_PK(2,2)' 152 1076 151 1075 1073 171
-CONVEX 416 'GT_PK(2,2)' 152 1076 151 1077 1068 132
-CONVEX 417 'GT_PK(2,2)' 152 1077 132 1078 790 133
-CONVEX 418 'GT_PK(2,2)' 152 1078 133 1079 1063 153
-CONVEX 419 'GT_PK(2,2)' 152 1074 172 1079 590 153
-CONVEX 420 'GT_PK(2,2)' 242 1080 222 1081 1082 223
-CONVEX 421 'GT_PK(2,2)' 242 1083 261 1084 1085 262
-CONVEX 422 'GT_PK(2,2)' 242 1086 243 1081 1087 223
-CONVEX 423 'GT_PK(2,2)' 242 1086 243 1084 810 262
-CONVEX 424 'GT_PK(2,2)' 280 1088 261 1089 805 279
-CONVEX 425 'GT_PK(2,2)' 280 1090 298 1091 597 297
-CONVEX 426 'GT_PK(2,2)' 280 1089 279 1091 1092 297
-CONVEX 427 'GT_PK(2,2)' 280 1090 298 1093 602 281
-CONVEX 428 'GT_PK(2,2)' 280 1094 262 1093 796 281
-CONVEX 429 'GT_PK(2,2)' 280 1088 261 1094 1085 262
-CONVEX 430 'GT_PK(2,2)' 176 1095 156 1096 819 175
-CONVEX 431 'GT_PK(2,2)' 176 1097 195 1098 614 196
-CONVEX 432 'GT_PK(2,2)' 176 1096 175 1097 1099 195
-CONVEX 433 'GT_PK(2,2)' 252 1100 232 1101 1102 251
-CONVEX 434 'GT_PK(2,2)' 231 1103 232 1104 1102 251
-CONVEX 435 'GT_PK(2,2)' 231 1105 250 1104 974 251
-CONVEX 436 'GT_PK(2,2)' 212 1106 232 1107 1108 213
-CONVEX 437 'GT_PK(2,2)' 212 1109 192 1110 823 211
-CONVEX 438 'GT_PK(2,2)' 212 1111 231 1110 1112 211
-CONVEX 439 'GT_PK(2,2)' 212 1111 231 1106 1103 232
-CONVEX 440 'GT_PK(2,2)' 193 1113 174 1114 828 173
-CONVEX 441 'GT_PK(2,2)' 193 1115 212 1116 1107 213
-CONVEX 442 'GT_PK(2,2)' 193 1117 192 1114 826 173
-CONVEX 443 'GT_PK(2,2)' 193 1115 212 1117 1109 192
-CONVEX 444 'GT_PK(2,2)' 194 1118 214 1119 832 195
-CONVEX 445 'GT_PK(2,2)' 194 1120 175 1119 1099 195
-CONVEX 446 'GT_PK(2,2)' 194 1121 174 1120 830 175
-CONVEX 447 'GT_PK(2,2)' 194 1118 214 1122 1123 213
-CONVEX 448 'GT_PK(2,2)' 194 1124 193 1122 1116 213
-CONVEX 449 'GT_PK(2,2)' 194 1124 193 1121 1113 174
-CONVEX 450 'GT_PK(2,2)' 101 1125 102 1126 865 120
-CONVEX 451 'GT_PK(2,2)' 101 1126 120 1127 1029 119
-CONVEX 452 'GT_PK(2,2)' 101 1128 100 1127 627 119
-CONVEX 453 'GT_PK(2,2)' 101 1129 83 1128 848 100
-CONVEX 454 'GT_PK(2,2)' 59 1130 58 1131 872 75
-CONVEX 455 'GT_PK(2,2)' 59 1130 58 1132 1133 43
-CONVEX 456 'GT_PK(2,2)' 59 1131 75 1134 645 76
-CONVEX 457 'GT_PK(2,2)' 59 1135 60 1134 878 76
-CONVEX 458 'GT_PK(2,2)' 16 1136 29 1137 873 17
-CONVEX 459 'GT_PK(2,2)' 16 1138 15 1139 446 6
-CONVEX 460 'GT_PK(2,2)' 16 1140 28 1138 891 15
-CONVEX 461 'GT_PK(2,2)' 16 1140 28 1136 893 29
-CONVEX 462 'GT_PK(2,2)' 16 1137 17 1141 392 7
-CONVEX 463 'GT_PK(2,2)' 16 1139 6 1141 1142 7
-CONVEX 464 'GT_PK(2,2)' 44 1143 60 1144 875 45
-CONVEX 465 'GT_PK(2,2)' 44 1145 29 1146 895 43
-CONVEX 466 'GT_PK(2,2)' 44 1147 59 1146 1132 43
-CONVEX 467 'GT_PK(2,2)' 44 1147 59 1143 1135 60
-CONVEX 468 'GT_PK(2,2)' 44 1144 45 1148 901 30
-CONVEX 469 'GT_PK(2,2)' 44 1145 29 1148 874 30
-CONVEX 470 'GT_PK(2,2)' 112 1149 94 1150 882 113
-CONVEX 471 'GT_PK(2,2)' 112 1151 132 1150 791 113
-CONVEX 472 'GT_PK(2,2)' 112 1151 132 1152 1070 131
-CONVEX 473 'GT_PK(2,2)' 112 1149 94 1153 883 93
-CONVEX 474 'GT_PK(2,2)' 112 1154 111 1152 767 131
-CONVEX 475 'GT_PK(2,2)' 112 1154 111 1153 772 93
-CONVEX 476 'GT_PK(2,2)' 26 1155 41 1156 1157 27
-CONVEX 477 'GT_PK(2,2)' 26 1158 14 1159 1160 13
-CONVEX 478 'GT_PK(2,2)' 26 1158 14 1156 898 27
-CONVEX 479 'GT_PK(2,2)' 26 1155 41 1161 888 40
-CONVEX 480 'GT_PK(2,2)' 26 1162 25 1161 404 40
-CONVEX 481 'GT_PK(2,2)' 26 1159 13 1162 1163 25
-CONVEX 482 'GT_PK(2,2)' 42 1164 41 1165 1157 27
-CONVEX 483 'GT_PK(2,2)' 42 1166 28 1165 890 27
-CONVEX 484 'GT_PK(2,2)' 42 1164 41 1167 889 57
-CONVEX 485 'GT_PK(2,2)' 42 1168 58 1167 871 57
-CONVEX 486 'GT_PK(2,2)' 42 1168 58 1169 1133 43
-CONVEX 487 'GT_PK(2,2)' 42 1166 28 1169 894 43
-CONVEX 488 'GT_PK(2,2)' 310 1170 327 1171 656 326
-CONVEX 489 'GT_PK(2,2)' 310 1172 311 1170 905 327
-CONVEX 490 'GT_PK(2,2)' 310 1173 309 1171 396 326
-CONVEX 491 'GT_PK(2,2)' 310 1173 309 1174 500 292
-CONVEX 492 'GT_PK(2,2)' 310 1175 293 1174 987 292
-CONVEX 493 'GT_PK(2,2)' 310 1172 311 1175 909 293
-CONVEX 494 'GT_PK(2,2)' 313 1176 312 1177 935 329
-CONVEX 495 'GT_PK(2,2)' 295 1178 277 1179 676 296
-CONVEX 496 'GT_PK(2,2)' 295 1180 313 1179 1181 296
-CONVEX 497 'GT_PK(2,2)' 295 1180 313 1182 1176 312
-CONVEX 498 'GT_PK(2,2)' 295 1182 312 1183 938 294
-CONVEX 499 'GT_PK(2,2)' 295 1183 294 1184 687 276
-CONVEX 500 'GT_PK(2,2)' 295 1178 277 1184 674 276
-CONVEX 501 'GT_PK(2,2)' 284 1185 265 1186 948 283
-CONVEX 502 'GT_PK(2,2)' 284 1185 265 1187 1188 266
-CONVEX 503 'GT_PK(2,2)' 319 1189 333 1190 950 334
-CONVEX 504 'GT_PK(2,2)' 319 1191 302 1192 1193 318
-CONVEX 505 'GT_PK(2,2)' 319 1189 333 1192 959 318
-CONVEX 506 'GT_PK(2,2)' 227 1194 208 1195 1003 207
-CONVEX 507 'GT_PK(2,2)' 227 1196 226 1195 1197 207
-CONVEX 508 'GT_PK(2,2)' 246 1198 265 1199 1188 266
-CONVEX 509 'GT_PK(2,2)' 246 1200 247 1199 1201 266
-CONVEX 510 'GT_PK(2,2)' 246 1198 265 1202 949 245
-CONVEX 511 'GT_PK(2,2)' 246 1203 227 1200 1204 247
-CONVEX 512 'GT_PK(2,2)' 246 1205 226 1202 1206 245
-CONVEX 513 'GT_PK(2,2)' 246 1203 227 1205 1196 226
-CONVEX 514 'GT_PK(2,2)' 348 1207 335 1208 964 347
-CONVEX 515 'GT_PK(2,2)' 348 1209 358 1210 371 359
-CONVEX 516 'GT_PK(2,2)' 348 1208 347 1209 489 358
-CONVEX 517 'GT_PK(2,2)' 348 1207 335 1211 965 336
-CONVEX 518 'GT_PK(2,2)' 348 1212 349 1210 707 359
-CONVEX 519 'GT_PK(2,2)' 348 1212 349 1211 708 336
-CONVEX 520 'GT_PK(2,2)' 230 1213 211 1214 433 210
-CONVEX 521 'GT_PK(2,2)' 230 1215 229 1214 692 210
-CONVEX 522 'GT_PK(2,2)' 230 1216 231 1213 1112 211
-CONVEX 523 'GT_PK(2,2)' 230 1216 231 1217 1105 250
-CONVEX 524 'GT_PK(2,2)' 271 1218 289 1219 1220 270
-CONVEX 525 'GT_PK(2,2)' 271 1219 270 1221 975 251
-CONVEX 526 'GT_PK(2,2)' 271 1222 272 1223 720 290
-CONVEX 527 'GT_PK(2,2)' 271 1218 289 1223 977 290
-CONVEX 528 'GT_PK(2,2)' 271 1224 252 1221 1101 251
-CONVEX 529 'GT_PK(2,2)' 271 1224 252 1222 1225 272
-CONVEX 530 'GT_PK(2,2)' 288 1226 289 1227 1220 270
-CONVEX 531 'GT_PK(2,2)' 288 1226 289 1228 978 306
-CONVEX 532 'GT_PK(2,2)' 288 1229 305 1228 981 306
-CONVEX 533 'GT_PK(2,2)' 32 1230 20 1231 1020 33
-CONVEX 534 'GT_PK(2,2)' 32 1232 31 1233 902 46
-CONVEX 535 'GT_PK(2,2)' 32 1232 31 1234 904 19
-CONVEX 536 'GT_PK(2,2)' 32 1230 20 1234 1019 19
-CONVEX 537 'GT_PK(2,2)' 32 1231 33 1235 1013 47
-CONVEX 538 'GT_PK(2,2)' 32 1233 46 1235 652 47
-CONVEX 539 'GT_PK(2,2)' 206 1236 187 1237 1005 207
-CONVEX 540 'GT_PK(2,2)' 206 1238 186 1236 1042 187
-CONVEX 541 'GT_PK(2,2)' 206 1239 226 1237 1197 207
-CONVEX 542 'GT_PK(2,2)' 184 1240 204 1241 1242 185
-CONVEX 543 'GT_PK(2,2)' 145 1243 164 1244 1044 144
-CONVEX 544 'GT_PK(2,2)' 145 1245 126 1246 553 125
-CONVEX 545 'GT_PK(2,2)' 145 1244 144 1246 610 125
-CONVEX 546 'GT_PK(2,2)' 183 1247 163 1248 430 182
-CONVEX 547 'GT_PK(2,2)' 183 1249 164 1247 1045 163
-CONVEX 548 'GT_PK(2,2)' 183 1250 184 1249 1251 164
-CONVEX 549 'GT_PK(2,2)' 183 1252 202 1248 605 182
-CONVEX 550 'GT_PK(2,2)' 241 1253 240 1254 815 222
-CONVEX 551 'GT_PK(2,2)' 241 1255 242 1254 1080 222
-CONVEX 552 'GT_PK(2,2)' 241 1255 242 1256 1083 261
-CONVEX 553 'GT_PK(2,2)' 241 1253 240 1257 1258 260
-CONVEX 554 'GT_PK(2,2)' 241 1256 261 1257 806 260
-CONVEX 555 'GT_PK(2,2)' 177 1259 197 1260 505 196
-CONVEX 556 'GT_PK(2,2)' 177 1261 176 1260 1098 196
-CONVEX 557 'GT_PK(2,2)' 177 1259 197 1262 507 178
-CONVEX 558 'GT_PK(2,2)' 233 1263 252 1264 1100 232
-CONVEX 559 'GT_PK(2,2)' 233 1264 232 1265 1108 213
-CONVEX 560 'GT_PK(2,2)' 233 1266 214 1267 833 234
-CONVEX 561 'GT_PK(2,2)' 233 1266 214 1265 1123 213
-CONVEX 562 'GT_PK(2,2)' 253 1268 273 1269 990 272
-CONVEX 563 'GT_PK(2,2)' 253 1270 252 1269 1225 272
-CONVEX 564 'GT_PK(2,2)' 253 1268 273 1271 992 254
-CONVEX 565 'GT_PK(2,2)' 253 1272 233 1270 1263 252
-CONVEX 566 'GT_PK(2,2)' 253 1271 254 1273 945 234
-CONVEX 567 'GT_PK(2,2)' 253 1272 233 1273 1267 234
-CONVEX 568 'GT_PK(2,2)' 84 1274 101 1275 1125 102
-CONVEX 569 'GT_PK(2,2)' 84 1276 68 1277 844 67
-CONVEX 570 'GT_PK(2,2)' 84 1278 83 1277 846 67
-CONVEX 571 'GT_PK(2,2)' 84 1274 101 1278 1129 83
-CONVEX 572 'GT_PK(2,2)' 84 1276 68 1279 1280 85
-CONVEX 573 'GT_PK(2,2)' 84 1275 102 1279 862 85
-CONVEX 574 'GT_PK(2,2)' 301 1281 284 1282 1186 283
-CONVEX 575 'GT_PK(2,2)' 301 1281 284 1283 1284 302
-CONVEX 576 'GT_PK(2,2)' 301 1285 300 1282 804 283
-CONVEX 577 'GT_PK(2,2)' 301 1285 300 1286 538 317
-CONVEX 578 'GT_PK(2,2)' 301 1287 318 1286 956 317
-CONVEX 579 'GT_PK(2,2)' 301 1283 302 1287 1193 318
-CONVEX 580 'GT_PK(2,2)' 320 1288 335 1289 966 321
-CONVEX 581 'GT_PK(2,2)' 320 1288 335 1290 963 334
-CONVEX 582 'GT_PK(2,2)' 320 1291 319 1290 1190 334
-CONVEX 583 'GT_PK(2,2)' 228 1292 227 1293 1204 247
-CONVEX 584 'GT_PK(2,2)' 228 1294 209 1295 690 229
-CONVEX 585 'GT_PK(2,2)' 228 1294 209 1296 694 208
-CONVEX 586 'GT_PK(2,2)' 228 1292 227 1296 1194 208
-CONVEX 587 'GT_PK(2,2)' 269 1297 250 1298 973 270
-CONVEX 588 'GT_PK(2,2)' 269 1299 288 1298 1227 270
-CONVEX 589 'GT_PK(2,2)' 225 1300 206 1301 1239 226
-CONVEX 590 'GT_PK(2,2)' 225 1302 245 1303 596 244
-CONVEX 591 'GT_PK(2,2)' 225 1301 226 1302 1206 245
-CONVEX 592 'GT_PK(2,2)' 166 1304 147 1305 1049 167
-CONVEX 593 'GT_PK(2,2)' 166 1306 186 1305 1043 167
-CONVEX 594 'GT_PK(2,2)' 166 1306 186 1307 1308 185
-CONVEX 595 'GT_PK(2,2)' 203 1309 184 1310 1240 204
-CONVEX 596 'GT_PK(2,2)' 203 1311 183 1309 1250 184
-CONVEX 597 'GT_PK(2,2)' 203 1310 204 1312 1313 223
-CONVEX 598 'GT_PK(2,2)' 203 1311 183 1314 1252 202
-CONVEX 599 'GT_PK(2,2)' 203 1315 222 1312 1082 223
-CONVEX 600 'GT_PK(2,2)' 203 1314 202 1315 816 222
-CONVEX 601 'GT_PK(2,2)' 138 1316 137 1317 633 118
-CONVEX 602 'GT_PK(2,2)' 138 1317 118 1318 628 119
-CONVEX 603 'GT_PK(2,2)' 138 1319 139 1318 1028 119
-CONVEX 604 'GT_PK(2,2)' 157 1320 176 1321 1095 156
-CONVEX 605 'GT_PK(2,2)' 157 1322 177 1320 1261 176
-CONVEX 606 'GT_PK(2,2)' 157 1321 156 1323 821 137
-CONVEX 607 'GT_PK(2,2)' 157 1324 138 1323 1316 137
-CONVEX 608 'GT_PK(2,2)' 249 1325 269 1326 1297 250
-CONVEX 609 'GT_PK(2,2)' 249 1327 230 1328 1215 229
-CONVEX 610 'GT_PK(2,2)' 249 1327 230 1326 1217 250
-CONVEX 611 'GT_PK(2,2)' 287 1329 288 1330 1229 305
-CONVEX 612 'GT_PK(2,2)' 287 1331 269 1329 1299 288
-CONVEX 613 'GT_PK(2,2)' 224 1332 243 1333 1087 223
-CONVEX 614 'GT_PK(2,2)' 224 1334 204 1333 1313 223
-CONVEX 615 'GT_PK(2,2)' 224 1332 243 1335 809 244
-CONVEX 616 'GT_PK(2,2)' 224 1336 225 1335 1303 244
-CONVEX 617 'GT_PK(2,2)' 205 1337 206 1338 1238 186
-CONVEX 618 'GT_PK(2,2)' 205 1339 225 1337 1300 206
-CONVEX 619 'GT_PK(2,2)' 205 1338 186 1340 1308 185
-CONVEX 620 'GT_PK(2,2)' 205 1341 224 1339 1336 225
-CONVEX 621 'GT_PK(2,2)' 205 1342 204 1340 1242 185
-CONVEX 622 'GT_PK(2,2)' 205 1341 224 1342 1334 204
-CONVEX 623 'GT_PK(2,2)' 146 1343 166 1344 1304 147
-CONVEX 624 'GT_PK(2,2)' 146 1344 147 1345 1046 127
-CONVEX 625 'GT_PK(2,2)' 146 1346 126 1345 423 127
-CONVEX 626 'GT_PK(2,2)' 146 1347 145 1346 1245 126
-CONVEX 627 'GT_PK(2,2)' 165 1348 184 1349 1251 164
-CONVEX 628 'GT_PK(2,2)' 165 1350 145 1349 1243 164
-CONVEX 629 'GT_PK(2,2)' 165 1348 184 1351 1241 185
-CONVEX 630 'GT_PK(2,2)' 165 1352 166 1351 1307 185
-CONVEX 631 'GT_PK(2,2)' 165 1353 146 1350 1347 145
-CONVEX 632 'GT_PK(2,2)' 165 1353 146 1352 1343 166
-CONVEX 633 'GT_PK(2,2)' 158 1354 157 1355 1322 177
-CONVEX 634 'GT_PK(2,2)' 158 1356 159 1357 757 178
-CONVEX 635 'GT_PK(2,2)' 158 1355 177 1357 1262 178
-CONVEX 636 'GT_PK(2,2)' 158 1354 157 1358 1324 138
-CONVEX 637 'GT_PK(2,2)' 158 1359 139 1356 1032 159
-CONVEX 638 'GT_PK(2,2)' 158 1358 138 1359 1319 139
-CONVEX 639 'GT_PK(2,2)' 267 1360 247 1361 1201 266
-CONVEX 640 'GT_PK(2,2)' 248 1362 249 1363 1328 229
-CONVEX 641 'GT_PK(2,2)' 248 1364 267 1365 1360 247
-CONVEX 642 'GT_PK(2,2)' 248 1366 228 1363 1295 229
-CONVEX 643 'GT_PK(2,2)' 248 1366 228 1365 1293 247
-CONVEX 644 'GT_PK(2,2)' 268 1367 287 1368 1331 269
-CONVEX 645 'GT_PK(2,2)' 268 1369 248 1370 1364 267
-CONVEX 646 'GT_PK(2,2)' 268 1371 249 1368 1325 269
-CONVEX 647 'GT_PK(2,2)' 268 1369 248 1371 1362 249
-CONVEX 648 'GT_PK(2,2)' 303 1372 319 1373 1191 302
-CONVEX 649 'GT_PK(2,2)' 303 1374 320 1372 1291 319
-CONVEX 650 'GT_PK(2,2)' 286 1375 268 1376 1367 287
-CONVEX 651 'GT_PK(2,2)' 286 1375 268 1377 1370 267
-CONVEX 652 'GT_PK(2,2)' 304 1378 287 1379 1330 305
-CONVEX 653 'GT_PK(2,2)' 304 1380 303 1381 1374 320
-CONVEX 654 'GT_PK(2,2)' 304 1382 286 1378 1376 287
-CONVEX 655 'GT_PK(2,2)' 304 1382 286 1380 1383 303
-CONVEX 656 'GT_PK(2,2)' 304 1379 305 1384 980 321
-CONVEX 657 'GT_PK(2,2)' 304 1381 320 1384 1289 321
-CONVEX 658 'GT_PK(2,2)' 285 1385 286 1386 1383 303
-CONVEX 659 'GT_PK(2,2)' 285 1387 284 1388 1284 302
-CONVEX 660 'GT_PK(2,2)' 285 1386 303 1388 1373 302
-CONVEX 661 'GT_PK(2,2)' 285 1385 286 1389 1377 267
-CONVEX 662 'GT_PK(2,2)' 285 1387 284 1390 1187 266
-CONVEX 663 'GT_PK(2,2)' 285 1389 267 1390 1361 266
+CONVEX 0 GT_PK(2,2) 258 1447 259 1448 1449 293
+CONVEX 1 GT_PK(2,2) 25 1450 10 1451 1452 0
+CONVEX 2 GT_PK(2,2) 18 1453 17 1454 1455 36
+CONVEX 3 GT_PK(2,2) 1426 1456 1440 1457 1458 4
+CONVEX 4 GT_PK(2,2) 824 1459 823 1460 1461 863
+CONVEX 5 GT_PK(2,2) 824 1462 784 1459 1463 823
+CONVEX 6 GT_PK(2,2) 1058 1464 1020 1465 1466 1021
+CONVEX 7 GT_PK(2,2) 728 1467 767 1468 1469 768
+CONVEX 8 GT_PK(2,2) 395 1470 394 1471 1472 357
+CONVEX 9 GT_PK(2,2) 225 1473 258 1474 1447 259
+CONVEX 10 GT_PK(2,2) 160 1475 192 1476 1477 191
+CONVEX 11 GT_PK(2,2) 224 1478 192 1479 1477 191
+CONVEX 12 GT_PK(2,2) 224 1480 225 1481 1473 258
+CONVEX 13 GT_PK(2,2) 224 1480 225 1478 1482 192
+CONVEX 14 GT_PK(2,2) 216 1483 185 1484 1485 186
+CONVEX 15 GT_PK(2,2) 280 1486 281 1487 1488 247
+CONVEX 16 GT_PK(2,2) 280 1486 281 1489 1490 315
+CONVEX 17 GT_PK(2,2) 64 1491 65 1492 1493 88
+CONVEX 18 GT_PK(2,2) 6 1494 20 1495 1496 5
+CONVEX 19 GT_PK(2,2) 21 1497 6 1498 1494 20
+CONVEX 20 GT_PK(2,2) 21 1497 6 1499 1500 7
+CONVEX 21 GT_PK(2,2) 1428 1501 1442 1502 1503 1443
+CONVEX 22 GT_PK(2,2) 1408 1504 1426 1505 1506 1407
+CONVEX 23 GT_PK(2,2) 1373 1507 1396 1508 1509 1397
+CONVEX 24 GT_PK(2,2) 1431 1510 1430 1511 1512 1412
+CONVEX 25 GT_PK(2,2) 1431 1513 1445 1514 1515 1446
+CONVEX 26 GT_PK(2,2) 1431 1510 1430 1513 1516 1445
+CONVEX 27 GT_PK(2,2) 1218 1517 1185 1518 1519 1184
+CONVEX 28 GT_PK(2,2) 1218 1517 1185 1520 1521 1219
+CONVEX 29 GT_PK(2,2) 745 1522 705 1523 1524 3
+CONVEX 30 GT_PK(2,2) 745 1525 784 1523 1526 3
+CONVEX 31 GT_PK(2,2) 782 1527 743 1528 1529 744
+CONVEX 32 GT_PK(2,2) 782 1527 743 1530 1531 781
+CONVEX 33 GT_PK(2,2) 1165 1532 1130 1533 1534 1129
+CONVEX 34 GT_PK(2,2) 1262 1535 1229 1536 1537 1230
+CONVEX 35 GT_PK(2,2) 1164 1538 1198 1539 1540 1199
+CONVEX 36 GT_PK(2,2) 1164 1541 1165 1542 1533 1129
+CONVEX 37 GT_PK(2,2) 1164 1541 1165 1539 1543 1199
+CONVEX 38 GT_PK(2,2) 1232 1544 1198 1545 1540 1199
+CONVEX 39 GT_PK(2,2) 1232 1546 1231 1547 1548 1264
+CONVEX 40 GT_PK(2,2) 1232 1546 1231 1544 1549 1198
+CONVEX 41 GT_PK(2,2) 936 1550 937 1551 1552 975
+CONVEX 42 GT_PK(2,2) 316 1553 281 1554 1490 315
+CONVEX 43 GT_PK(2,2) 428 1555 429 1556 1557 467
+CONVEX 44 GT_PK(2,2) 319 1558 320 1559 1560 355
+CONVEX 45 GT_PK(2,2) 319 1561 354 1559 1562 355
+CONVEX 46 GT_PK(2,2) 1059 1563 1058 1564 1465 1021
+CONVEX 47 GT_PK(2,2) 706 1565 746 1566 1567 2
+CONVEX 48 GT_PK(2,2) 706 1565 746 1568 1569 747
+CONVEX 49 GT_PK(2,2) 706 1570 667 1566 1571 2
+CONVEX 50 GT_PK(2,2) 706 1572 668 1570 1573 667
+CONVEX 51 GT_PK(2,2) 1406 1574 1385 1575 1576 1407
+CONVEX 52 GT_PK(2,2) 1406 1577 1424 1578 1579 1405
+CONVEX 53 GT_PK(2,2) 1278 1580 1279 1581 1582 1247
+CONVEX 54 GT_PK(2,2) 1196 1583 1229 1584 1537 1230
+CONVEX 55 GT_PK(2,2) 806 1585 767 1586 1587 766
+CONVEX 56 GT_PK(2,2) 806 1588 845 1589 1590 846
+CONVEX 57 GT_PK(2,2) 806 1591 805 1586 1592 766
+CONVEX 58 GT_PK(2,2) 806 1591 805 1588 1593 845
+CONVEX 59 GT_PK(2,2) 727 1594 767 1595 1587 766
+CONVEX 60 GT_PK(2,2) 727 1596 728 1594 1467 767
+CONVEX 61 GT_PK(2,2) 807 1597 767 1598 1469 768
+CONVEX 62 GT_PK(2,2) 807 1599 806 1597 1585 767
+CONVEX 63 GT_PK(2,2) 807 1600 847 1601 1602 846
+CONVEX 64 GT_PK(2,2) 807 1599 806 1601 1589 846
+CONVEX 65 GT_PK(2,2) 403 1603 365 1604 1605 366
+CONVEX 66 GT_PK(2,2) 439 1606 478 1607 1608 477
+CONVEX 67 GT_PK(2,2) 325 1609 326 1610 1611 362
+CONVEX 68 GT_PK(2,2) 363 1612 326 1613 1614 327
+CONVEX 69 GT_PK(2,2) 363 1612 326 1615 1611 362
+CONVEX 70 GT_PK(2,2) 128 1616 158 1617 1618 157
+CONVEX 71 GT_PK(2,2) 189 1619 190 1620 1621 222
+CONVEX 72 GT_PK(2,2) 189 1619 190 1622 1623 158
+CONVEX 73 GT_PK(2,2) 189 1624 156 1625 1626 157
+CONVEX 74 GT_PK(2,2) 189 1622 158 1625 1618 157
+CONVEX 75 GT_PK(2,2) 255 1627 256 1628 1629 222
+CONVEX 76 GT_PK(2,2) 253 1630 252 1631 1632 219
+CONVEX 77 GT_PK(2,2) 253 1633 220 1631 1634 219
+CONVEX 78 GT_PK(2,2) 187 1635 220 1636 1634 219
+CONVEX 79 GT_PK(2,2) 291 1637 326 1638 1614 327
+CONVEX 80 GT_PK(2,2) 161 1639 160 1640 1475 192
+CONVEX 81 GT_PK(2,2) 131 1641 161 1642 1639 160
+CONVEX 82 GT_PK(2,2) 131 1643 104 1644 1645 132
+CONVEX 83 GT_PK(2,2) 131 1641 161 1644 1646 132
+CONVEX 84 GT_PK(2,2) 129 1647 128 1648 1616 158
+CONVEX 85 GT_PK(2,2) 223 1649 224 1650 1479 191
+CONVEX 86 GT_PK(2,2) 223 1651 256 1652 1629 222
+CONVEX 87 GT_PK(2,2) 223 1653 190 1650 1654 191
+CONVEX 88 GT_PK(2,2) 223 1653 190 1652 1621 222
+CONVEX 89 GT_PK(2,2) 127 1655 155 1656 1657 154
+CONVEX 90 GT_PK(2,2) 127 1658 126 1656 1659 154
+CONVEX 91 GT_PK(2,2) 127 1660 100 1658 1661 126
+CONVEX 92 GT_PK(2,2) 181 1662 182 1663 1664 152
+CONVEX 93 GT_PK(2,2) 246 1665 280 1666 1487 247
+CONVEX 94 GT_PK(2,2) 124 1667 99 1668 1669 98
+CONVEX 95 GT_PK(2,2) 125 1670 124 1671 1672 152
+CONVEX 96 GT_PK(2,2) 125 1670 124 1673 1667 99
+CONVEX 97 GT_PK(2,2) 125 1673 99 1674 1675 76
+CONVEX 98 GT_PK(2,2) 125 1676 100 1674 1677 76
+CONVEX 99 GT_PK(2,2) 125 1676 100 1678 1661 126
+CONVEX 100 GT_PK(2,2) 75 1679 53 1680 1681 98
+CONVEX 101 GT_PK(2,2) 75 1682 99 1680 1669 98
+CONVEX 102 GT_PK(2,2) 75 1682 99 1683 1675 76
+CONVEX 103 GT_PK(2,2) 217 1684 218 1685 1686 186
+CONVEX 104 GT_PK(2,2) 217 1687 216 1685 1484 186
+CONVEX 105 GT_PK(2,2) 217 1687 216 1688 1689 249
+CONVEX 106 GT_PK(2,2) 248 1690 216 1691 1689 249
+CONVEX 107 GT_PK(2,2) 248 1692 281 1693 1488 247
+CONVEX 108 GT_PK(2,2) 282 1694 316 1695 1696 317
+CONVEX 109 GT_PK(2,2) 282 1694 316 1697 1553 281
+CONVEX 110 GT_PK(2,2) 282 1698 248 1699 1691 249
+CONVEX 111 GT_PK(2,2) 282 1698 248 1697 1692 281
+CONVEX 112 GT_PK(2,2) 314 1700 280 1701 1489 315
+CONVEX 113 GT_PK(2,2) 12 1702 27 1703 1704 13
+CONVEX 114 GT_PK(2,2) 35 1705 56 1706 1707 34
+CONVEX 115 GT_PK(2,2) 79 1708 56 1709 1710 80
+CONVEX 116 GT_PK(2,2) 79 1711 34 1712 1713 55
+CONVEX 117 GT_PK(2,2) 79 1708 56 1711 1707 34
+CONVEX 118 GT_PK(2,2) 43 1714 25 1715 1716 44
+CONVEX 119 GT_PK(2,2) 43 1717 65 1715 1718 44
+CONVEX 120 GT_PK(2,2) 43 1719 64 1717 1491 65
+CONVEX 121 GT_PK(2,2) 22 1720 21 1721 1499 7
+CONVEX 122 GT_PK(2,2) 22 1722 8 1721 1723 7
+CONVEX 123 GT_PK(2,2) 22 1722 8 1724 1725 23
+CONVEX 124 GT_PK(2,2) 22 1724 23 1726 1727 41
+CONVEX 125 GT_PK(2,2) 1427 1728 1428 1729 1501 1442
+CONVEX 126 GT_PK(2,2) 1427 1730 1408 1731 1504 1426
+CONVEX 127 GT_PK(2,2) 1427 1728 1428 1732 1733 1409
+CONVEX 128 GT_PK(2,2) 1427 1730 1408 1732 1734 1409
+CONVEX 129 GT_PK(2,2) 1386 1735 1385 1736 1576 1407
+CONVEX 130 GT_PK(2,2) 1386 1737 1408 1736 1505 1407
+CONVEX 131 GT_PK(2,2) 885 1738 845 1739 1590 846
+CONVEX 132 GT_PK(2,2) 1193 1740 1192 1741 1742 1158
+CONVEX 133 GT_PK(2,2) 1429 1743 1428 1744 1502 1443
+CONVEX 134 GT_PK(2,2) 1391 1745 1390 1746 1747 1412
+CONVEX 135 GT_PK(2,2) 1248 1748 1279 1749 1582 1247
+CONVEX 136 GT_PK(2,2) 1183 1750 1149 1751 1752 1148
+CONVEX 137 GT_PK(2,2) 1183 1750 1149 1753 1754 1184
+CONVEX 138 GT_PK(2,2) 1187 1755 1188 1756 1757 1221
+CONVEX 139 GT_PK(2,2) 468 1758 429 1759 1557 467
+CONVEX 140 GT_PK(2,2) 470 1760 469 1761 1762 431
+CONVEX 141 GT_PK(2,2) 507 1763 508 1764 1765 546
+CONVEX 142 GT_PK(2,2) 507 1766 545 1764 1767 546
+CONVEX 143 GT_PK(2,2) 507 1768 470 1769 1760 469
+CONVEX 144 GT_PK(2,2) 507 1768 470 1763 1770 508
+CONVEX 145 GT_PK(2,2) 507 1771 468 1769 1772 469
+CONVEX 146 GT_PK(2,2) 704 1773 745 1774 1522 705
+CONVEX 147 GT_PK(2,2) 704 1773 745 1775 1776 744
+CONVEX 148 GT_PK(2,2) 585 1777 545 1778 1767 546
+CONVEX 149 GT_PK(2,2) 898 1779 937 1780 1781 938
+CONVEX 150 GT_PK(2,2) 783 1782 784 1783 1463 823
+CONVEX 151 GT_PK(2,2) 783 1784 745 1782 1525 784
+CONVEX 152 GT_PK(2,2) 783 1784 745 1785 1776 744
+CONVEX 153 GT_PK(2,2) 783 1786 782 1785 1528 744
+CONVEX 154 GT_PK(2,2) 783 1783 823 1787 1788 822
+CONVEX 155 GT_PK(2,2) 783 1786 782 1787 1789 822
+CONVEX 156 GT_PK(2,2) 1263 1790 1262 1791 1536 1230
+CONVEX 157 GT_PK(2,2) 1263 1792 1231 1791 1793 1230
+CONVEX 158 GT_PK(2,2) 1263 1792 1231 1794 1548 1264
+CONVEX 159 GT_PK(2,2) 897 1795 936 1796 1797 896
+CONVEX 160 GT_PK(2,2) 897 1795 936 1798 1550 937
+CONVEX 161 GT_PK(2,2) 897 1799 898 1800 1801 858
+CONVEX 162 GT_PK(2,2) 897 1799 898 1798 1779 937
+CONVEX 163 GT_PK(2,2) 818 1802 779 1803 1804 778
+CONVEX 164 GT_PK(2,2) 821 1805 820 1806 1807 781
+CONVEX 165 GT_PK(2,2) 821 1808 782 1809 1789 822
+CONVEX 166 GT_PK(2,2) 821 1808 782 1806 1530 781
+CONVEX 167 GT_PK(2,2) 940 1810 939 1811 1812 978
+CONVEX 168 GT_PK(2,2) 940 1810 939 1813 1814 900
+CONVEX 169 GT_PK(2,2) 902 1815 942 1816 1817 903
+CONVEX 170 GT_PK(2,2) 902 1815 942 1818 1819 941
+CONVEX 171 GT_PK(2,2) 976 1820 937 1821 1781 938
+CONVEX 172 GT_PK(2,2) 976 1820 937 1822 1552 975
+CONVEX 173 GT_PK(2,2) 352 1823 316 1824 1696 317
+CONVEX 174 GT_PK(2,2) 430 1825 392 1826 1827 429
+CONVEX 175 GT_PK(2,2) 430 1828 469 1829 1762 431
+CONVEX 176 GT_PK(2,2) 430 1830 468 1826 1758 429
+CONVEX 177 GT_PK(2,2) 430 1830 468 1828 1772 469
+CONVEX 178 GT_PK(2,2) 393 1831 430 1832 1829 431
+CONVEX 179 GT_PK(2,2) 393 1831 430 1833 1825 392
+CONVEX 180 GT_PK(2,2) 391 1834 392 1835 1827 429
+CONVEX 181 GT_PK(2,2) 391 1836 428 1837 1838 390
+CONVEX 182 GT_PK(2,2) 391 1836 428 1835 1555 429
+CONVEX 183 GT_PK(2,2) 391 1839 354 1837 1840 390
+CONVEX 184 GT_PK(2,2) 391 1834 392 1841 1842 355
+CONVEX 185 GT_PK(2,2) 391 1839 354 1841 1562 355
+CONVEX 186 GT_PK(2,2) 318 1843 319 1844 1845 284
+CONVEX 187 GT_PK(2,2) 318 1843 319 1846 1561 354
+CONVEX 188 GT_PK(2,2) 285 1847 319 1848 1558 320
+CONVEX 189 GT_PK(2,2) 285 1849 284 1850 1851 251
+CONVEX 190 GT_PK(2,2) 285 1847 319 1849 1845 284
+CONVEX 191 GT_PK(2,2) 707 1852 706 1853 1568 747
+CONVEX 192 GT_PK(2,2) 707 1852 706 1854 1572 668
+CONVEX 193 GT_PK(2,2) 786 1855 746 1856 1857 785
+CONVEX 194 GT_PK(2,2) 786 1855 746 1858 1569 747
+CONVEX 195 GT_PK(2,2) 1265 1859 1233 1860 1861 1234
+CONVEX 196 GT_PK(2,2) 1201 1862 1233 1863 1861 1234
+CONVEX 197 GT_PK(2,2) 1201 1862 1233 1864 1865 1200
+CONVEX 198 GT_PK(2,2) 1134 1866 1135 1867 1868 1099
+CONVEX 199 GT_PK(2,2) 1132 1869 1166 1870 1871 1131
+CONVEX 200 GT_PK(2,2) 1095 1872 1059 1873 1563 1058
+CONVEX 201 GT_PK(2,2) 948 1874 909 1875 1876 910
+CONVEX 202 GT_PK(2,2) 1103 1877 1138 1878 1879 1102
+CONVEX 203 GT_PK(2,2) 717 1880 756 1881 1882 757
+CONVEX 204 GT_PK(2,2) 717 1883 677 1884 1885 678
+CONVEX 205 GT_PK(2,2) 717 1880 756 1886 1887 716
+CONVEX 206 GT_PK(2,2) 717 1883 677 1886 1888 716
+CONVEX 207 GT_PK(2,2) 796 1889 756 1890 1882 757
+CONVEX 208 GT_PK(2,2) 796 1891 797 1890 1892 757
+CONVEX 209 GT_PK(2,2) 796 1891 797 1893 1894 836
+CONVEX 210 GT_PK(2,2) 796 1895 835 1893 1896 836
+CONVEX 211 GT_PK(2,2) 599 1897 559 1898 1899 598
+CONVEX 212 GT_PK(2,2) 759 1900 760 1901 1902 720
+CONVEX 213 GT_PK(2,2) 759 1903 719 1901 1904 720
+CONVEX 214 GT_PK(2,2) 718 1905 678 1906 1907 679
+CONVEX 215 GT_PK(2,2) 718 1908 719 1906 1909 679
+CONVEX 216 GT_PK(2,2) 718 1910 717 1911 1881 757
+CONVEX 217 GT_PK(2,2) 718 1910 717 1905 1884 678
+CONVEX 218 GT_PK(2,2) 721 1912 760 1913 1902 720
+CONVEX 219 GT_PK(2,2) 721 1914 681 1913 1915 720
+CONVEX 220 GT_PK(2,2) 721 1914 681 1916 1917 682
+CONVEX 221 GT_PK(2,2) 721 1918 761 1912 1919 760
+CONVEX 222 GT_PK(2,2) 680 1920 640 1921 1922 641
+CONVEX 223 GT_PK(2,2) 680 1923 681 1921 1924 641
+CONVEX 224 GT_PK(2,2) 680 1920 640 1925 1926 679
+CONVEX 225 GT_PK(2,2) 680 1923 681 1927 1915 720
+CONVEX 226 GT_PK(2,2) 680 1928 719 1925 1909 679
+CONVEX 227 GT_PK(2,2) 680 1928 719 1927 1904 720
+CONVEX 228 GT_PK(2,2) 1425 1929 1426 1930 1506 1407
+CONVEX 229 GT_PK(2,2) 1425 1931 1406 1930 1575 1407
+CONVEX 230 GT_PK(2,2) 1425 1931 1406 1932 1577 1424
+CONVEX 231 GT_PK(2,2) 1425 1929 1426 1933 1456 1440
+CONVEX 232 GT_PK(2,2) 1425 1933 1440 1934 1935 1439
+CONVEX 233 GT_PK(2,2) 1425 1932 1424 1934 1936 1439
+CONVEX 234 GT_PK(2,2) 1384 1937 1361 1938 1939 1385
+CONVEX 235 GT_PK(2,2) 1384 1940 1405 1941 1942 1383
+CONVEX 236 GT_PK(2,2) 1384 1943 1406 1940 1578 1405
+CONVEX 237 GT_PK(2,2) 1384 1943 1406 1938 1574 1385
+CONVEX 238 GT_PK(2,2) 971 1944 970 1945 1946 1009
+CONVEX 239 GT_PK(2,2) 932 1947 970 1948 1949 931
+CONVEX 240 GT_PK(2,2) 932 1950 971 1951 1952 933
+CONVEX 241 GT_PK(2,2) 932 1950 971 1947 1944 970
+CONVEX 242 GT_PK(2,2) 969 1953 970 1954 1949 931
+CONVEX 243 GT_PK(2,2) 969 1955 930 1954 1956 931
+CONVEX 244 GT_PK(2,2) 969 1955 930 1957 1958 968
+CONVEX 245 GT_PK(2,2) 895 1959 894 1960 1961 855
+CONVEX 246 GT_PK(2,2) 1197 1962 1231 1963 1793 1230
+CONVEX 247 GT_PK(2,2) 1197 1964 1196 1963 1584 1230
+CONVEX 248 GT_PK(2,2) 1197 1962 1231 1965 1549 1198
+CONVEX 249 GT_PK(2,2) 609 1966 610 1967 1968 649
+CONVEX 250 GT_PK(2,2) 241 1969 275 1970 1971 242
+CONVEX 251 GT_PK(2,2) 241 1972 274 1969 1973 275
+CONVEX 252 GT_PK(2,2) 29 1974 14 1975 1976 15
+CONVEX 253 GT_PK(2,2) 66 1977 44 1978 1979 45
+CONVEX 254 GT_PK(2,2) 66 1980 65 1977 1718 44
+CONVEX 255 GT_PK(2,2) 460 1981 459 1982 1983 498
+CONVEX 256 GT_PK(2,2) 276 1984 275 1985 1971 242
+CONVEX 257 GT_PK(2,2) 455 1986 454 1987 1988 416
+CONVEX 258 GT_PK(2,2) 455 1986 454 1989 1990 493
+CONVEX 259 GT_PK(2,2) 307 1991 306 1992 1993 342
+CONVEX 260 GT_PK(2,2) 310 1994 345 1995 1996 346
+CONVEX 261 GT_PK(2,2) 310 1997 276 1998 1984 275
+CONVEX 262 GT_PK(2,2) 417 1999 455 2000 1987 416
+CONVEX 263 GT_PK(2,2) 417 1999 455 2001 2002 456
+CONVEX 264 GT_PK(2,2) 417 2003 379 2000 2004 416
+CONVEX 265 GT_PK(2,2) 417 2003 379 2005 2006 380
+CONVEX 266 GT_PK(2,2) 343 2007 307 2008 2009 308
+CONVEX 267 GT_PK(2,2) 343 2007 307 2010 1992 342
+CONVEX 268 GT_PK(2,2) 343 2011 379 2010 2012 342
+CONVEX 269 GT_PK(2,2) 343 2011 379 2013 2006 380
+CONVEX 270 GT_PK(2,2) 339 2014 304 2015 2016 303
+CONVEX 271 GT_PK(2,2) 341 2017 306 2018 1993 342
+CONVEX 272 GT_PK(2,2) 726 2019 727 2020 1595 766
+CONVEX 273 GT_PK(2,2) 688 2021 727 2022 1596 728
+CONVEX 274 GT_PK(2,2) 628 2023 668 2024 2025 629
+CONVEX 275 GT_PK(2,2) 628 2023 668 2026 1573 667
+CONVEX 276 GT_PK(2,2) 589 2027 628 2028 2024 629
+CONVEX 277 GT_PK(2,2) 589 2027 628 2029 2030 588
+CONVEX 278 GT_PK(2,2) 364 2031 363 2032 1613 327
+CONVEX 279 GT_PK(2,2) 364 2031 363 2033 2034 401
+CONVEX 280 GT_PK(2,2) 328 2035 364 2036 2037 365
+CONVEX 281 GT_PK(2,2) 328 2035 364 2038 2032 327
+CONVEX 282 GT_PK(2,2) 329 2039 365 2040 1605 366
+CONVEX 283 GT_PK(2,2) 329 2041 330 2040 2042 366
+CONVEX 284 GT_PK(2,2) 329 2043 328 2039 2036 365
+CONVEX 285 GT_PK(2,2) 329 2043 328 2044 2045 293
+CONVEX 286 GT_PK(2,2) 367 2046 330 2047 2042 366
+CONVEX 287 GT_PK(2,2) 601 2048 640 2049 1922 641
+CONVEX 288 GT_PK(2,2) 562 2050 522 2051 2052 561
+CONVEX 289 GT_PK(2,2) 562 2053 601 2051 2054 561
+CONVEX 290 GT_PK(2,2) 523 2055 562 2056 2050 522
+CONVEX 291 GT_PK(2,2) 523 2055 562 2057 2058 563
+CONVEX 292 GT_PK(2,2) 521 2059 522 2060 2052 561
+CONVEX 293 GT_PK(2,2) 397 2061 398 2062 2063 360
+CONVEX 294 GT_PK(2,2) 437 2064 398 2065 2066 399
+CONVEX 295 GT_PK(2,2) 361 2067 398 2068 2063 360
+CONVEX 296 GT_PK(2,2) 361 2069 325 2070 1610 362
+CONVEX 297 GT_PK(2,2) 361 2070 362 2071 2072 399
+CONVEX 298 GT_PK(2,2) 361 2067 398 2071 2066 399
+CONVEX 299 GT_PK(2,2) 286 2073 322 2074 2075 321
+CONVEX 300 GT_PK(2,2) 359 2076 397 2077 2078 396
+CONVEX 301 GT_PK(2,2) 359 2076 397 2079 2062 360
+CONVEX 302 GT_PK(2,2) 358 2080 321 2081 2082 357
+CONVEX 303 GT_PK(2,2) 358 2083 322 2080 2075 321
+CONVEX 304 GT_PK(2,2) 358 2084 395 2081 1471 357
+CONVEX 305 GT_PK(2,2) 358 2085 359 2083 2086 322
+CONVEX 306 GT_PK(2,2) 358 2084 395 2087 2088 396
+CONVEX 307 GT_PK(2,2) 358 2085 359 2087 2077 396
+CONVEX 308 GT_PK(2,2) 402 2089 403 2090 1603 365
+CONVEX 309 GT_PK(2,2) 402 2091 364 2092 2033 401
+CONVEX 310 GT_PK(2,2) 402 2091 364 2090 2037 365
+CONVEX 311 GT_PK(2,2) 400 2093 439 2094 2095 401
+CONVEX 312 GT_PK(2,2) 400 2096 363 2094 2034 401
+CONVEX 313 GT_PK(2,2) 400 2097 362 2098 2072 399
+CONVEX 314 GT_PK(2,2) 400 2096 363 2097 1615 362
+CONVEX 315 GT_PK(2,2) 438 2099 439 2100 1607 477
+CONVEX 316 GT_PK(2,2) 438 2101 437 2102 2065 399
+CONVEX 317 GT_PK(2,2) 438 2103 400 2102 2098 399
+CONVEX 318 GT_PK(2,2) 438 2103 400 2099 2093 439
+CONVEX 319 GT_PK(2,2) 101 2104 77 2105 2106 102
+CONVEX 320 GT_PK(2,2) 101 2107 129 2105 2108 102
+CONVEX 321 GT_PK(2,2) 101 2107 129 2109 1647 128
+CONVEX 322 GT_PK(2,2) 188 2110 189 2111 1624 156
+CONVEX 323 GT_PK(2,2) 188 2112 187 2111 2113 156
+CONVEX 324 GT_PK(2,2) 188 2112 187 2114 1635 220
+CONVEX 325 GT_PK(2,2) 254 2115 253 2116 1633 220
+CONVEX 326 GT_PK(2,2) 254 2117 255 2118 2119 289
+CONVEX 327 GT_PK(2,2) 287 2120 253 2121 1630 252
+CONVEX 328 GT_PK(2,2) 287 2122 286 2121 2123 252
+CONVEX 329 GT_PK(2,2) 287 2122 286 2124 2073 322
+CONVEX 330 GT_PK(2,2) 292 2125 291 2126 1638 327
+CONVEX 331 GT_PK(2,2) 292 2127 258 2128 1448 293
+CONVEX 332 GT_PK(2,2) 292 2129 328 2128 2045 293
+CONVEX 333 GT_PK(2,2) 292 2129 328 2126 2038 327
+CONVEX 334 GT_PK(2,2) 257 2130 224 2131 1481 258
+CONVEX 335 GT_PK(2,2) 257 2132 292 2131 2127 258
+CONVEX 336 GT_PK(2,2) 257 2132 292 2133 2125 291
+CONVEX 337 GT_PK(2,2) 257 2133 291 2134 2135 256
+CONVEX 338 GT_PK(2,2) 257 2136 223 2134 1651 256
+CONVEX 339 GT_PK(2,2) 257 2136 223 2130 1649 224
+CONVEX 340 GT_PK(2,2) 290 2137 325 2138 1609 326
+CONVEX 341 GT_PK(2,2) 290 2139 291 2138 1637 326
+CONVEX 342 GT_PK(2,2) 290 2137 325 2140 2141 289
+CONVEX 343 GT_PK(2,2) 290 2142 255 2140 2119 289
+CONVEX 344 GT_PK(2,2) 290 2142 255 2143 1627 256
+CONVEX 345 GT_PK(2,2) 290 2139 291 2143 2135 256
+CONVEX 346 GT_PK(2,2) 103 2144 131 2145 1643 104
+CONVEX 347 GT_PK(2,2) 103 2146 77 2147 2106 102
+CONVEX 348 GT_PK(2,2) 103 2148 54 2146 2149 77
+CONVEX 349 GT_PK(2,2) 130 2150 129 2151 2108 102
+CONVEX 350 GT_PK(2,2) 130 2152 131 2153 1642 160
+CONVEX 351 GT_PK(2,2) 130 2154 103 2151 2147 102
+CONVEX 352 GT_PK(2,2) 130 2154 103 2152 2144 131
+CONVEX 353 GT_PK(2,2) 159 2155 190 2156 1654 191
+CONVEX 354 GT_PK(2,2) 159 2157 130 2158 2150 129
+CONVEX 355 GT_PK(2,2) 159 2155 190 2159 1623 158
+CONVEX 356 GT_PK(2,2) 159 2158 129 2159 1648 158
+CONVEX 357 GT_PK(2,2) 159 2160 160 2156 1476 191
+CONVEX 358 GT_PK(2,2) 159 2157 130 2160 2153 160
+CONVEX 359 GT_PK(2,2) 214 2161 183 2162 2163 182
+CONVEX 360 GT_PK(2,2) 214 2164 246 2165 1666 247
+CONVEX 361 GT_PK(2,2) 184 2166 183 2167 2168 154
+CONVEX 362 GT_PK(2,2) 184 2169 216 2170 1483 185
+CONVEX 363 GT_PK(2,2) 184 2171 155 2167 1657 154
+CONVEX 364 GT_PK(2,2) 184 2170 185 2171 2172 155
+CONVEX 365 GT_PK(2,2) 153 2173 183 2174 2163 182
+CONVEX 366 GT_PK(2,2) 153 2174 182 2175 1664 152
+CONVEX 367 GT_PK(2,2) 153 2176 126 2177 1659 154
+CONVEX 368 GT_PK(2,2) 153 2173 183 2177 2168 154
+CONVEX 369 GT_PK(2,2) 153 2178 125 2175 1671 152
+CONVEX 370 GT_PK(2,2) 153 2178 125 2176 1678 126
+CONVEX 371 GT_PK(2,2) 151 2179 181 2180 1663 152
+CONVEX 372 GT_PK(2,2) 151 2181 124 2180 1672 152
+CONVEX 373 GT_PK(2,2) 73 2182 52 2183 2184 33
+CONVEX 374 GT_PK(2,2) 250 2185 217 2186 1684 218
+CONVEX 375 GT_PK(2,2) 250 2187 284 2188 1851 251
+CONVEX 376 GT_PK(2,2) 250 2186 218 2188 2189 251
+CONVEX 377 GT_PK(2,2) 250 2185 217 2190 1688 249
+CONVEX 378 GT_PK(2,2) 215 2191 248 2192 1690 216
+CONVEX 379 GT_PK(2,2) 215 2193 184 2192 2169 216
+CONVEX 380 GT_PK(2,2) 215 2193 184 2194 2166 183
+CONVEX 381 GT_PK(2,2) 215 2195 214 2194 2161 183
+CONVEX 382 GT_PK(2,2) 215 2191 248 2196 1693 247
+CONVEX 383 GT_PK(2,2) 215 2195 214 2196 2165 247
+CONVEX 384 GT_PK(2,2) 279 2197 314 2198 1700 280
+CONVEX 385 GT_PK(2,2) 279 2199 246 2200 2201 245
+CONVEX 386 GT_PK(2,2) 279 2199 246 2198 1665 280
+CONVEX 387 GT_PK(2,2) 279 2202 278 2200 2203 245
+CONVEX 388 GT_PK(2,2) 279 2202 278 2204 2205 313
+CONVEX 389 GT_PK(2,2) 279 2197 314 2204 2206 313
+CONVEX 390 GT_PK(2,2) 11 2207 25 2208 1451 0
+CONVEX 391 GT_PK(2,2) 57 2209 35 2210 1705 56
+CONVEX 392 GT_PK(2,2) 57 2210 56 2211 1710 80
+CONVEX 393 GT_PK(2,2) 57 2212 17 2213 1455 36
+CONVEX 394 GT_PK(2,2) 57 2209 35 2212 2214 17
+CONVEX 395 GT_PK(2,2) 105 2215 79 2216 1709 80
+CONVEX 396 GT_PK(2,2) 105 2215 79 2217 2218 104
+CONVEX 397 GT_PK(2,2) 105 2219 106 2216 2220 80
+CONVEX 398 GT_PK(2,2) 105 2217 104 2221 1645 132
+CONVEX 399 GT_PK(2,2) 78 2222 79 2223 2218 104
+CONVEX 400 GT_PK(2,2) 78 2224 103 2223 2145 104
+CONVEX 401 GT_PK(2,2) 78 2224 103 2225 2148 54
+CONVEX 402 GT_PK(2,2) 78 2225 54 2226 2227 55
+CONVEX 403 GT_PK(2,2) 78 2222 79 2226 1712 55
+CONVEX 404 GT_PK(2,2) 162 2228 161 2229 1646 132
+CONVEX 405 GT_PK(2,2) 302 2230 268 2231 2232 303
+CONVEX 406 GT_PK(2,2) 37 2233 18 2234 1454 36
+CONVEX 407 GT_PK(2,2) 37 2235 19 2233 2236 18
+CONVEX 408 GT_PK(2,2) 201 2237 202 2238 2239 234
+CONVEX 409 GT_PK(2,2) 201 2240 233 2238 2241 234
+CONVEX 410 GT_PK(2,2) 87 2242 64 2243 1492 88
+CONVEX 411 GT_PK(2,2) 139 2244 168 2245 2246 169
+CONVEX 412 GT_PK(2,2) 9 2247 8 2248 1725 23
+CONVEX 413 GT_PK(2,2) 24 2249 43 2250 1714 25
+CONVEX 414 GT_PK(2,2) 24 2250 25 2251 1450 10
+CONVEX 415 GT_PK(2,2) 24 2252 9 2251 2253 10
+CONVEX 416 GT_PK(2,2) 24 2252 9 2254 2248 23
+CONVEX 417 GT_PK(2,2) 42 2255 23 2256 1727 41
+CONVEX 418 GT_PK(2,2) 42 2257 43 2258 1719 64
+CONVEX 419 GT_PK(2,2) 42 2259 24 2255 2254 23
+CONVEX 420 GT_PK(2,2) 42 2259 24 2257 2249 43
+CONVEX 421 GT_PK(2,2) 39 2260 21 2261 1498 20
+CONVEX 422 GT_PK(2,2) 1441 2262 1427 2263 1729 1442
+CONVEX 423 GT_PK(2,2) 1441 2264 1426 2265 1457 4
+CONVEX 424 GT_PK(2,2) 1441 2262 1427 2264 1731 1426
+CONVEX 425 GT_PK(2,2) 1387 2266 1408 2267 1734 1409
+CONVEX 426 GT_PK(2,2) 1387 2268 1386 2266 1737 1408
+CONVEX 427 GT_PK(2,2) 1337 2269 1309 2270 2271 1336
+CONVEX 428 GT_PK(2,2) 1337 2269 1309 2272 2273 1310
+CONVEX 429 GT_PK(2,2) 1362 2274 1361 2275 1939 1385
+CONVEX 430 GT_PK(2,2) 1362 2276 1386 2275 1735 1385
+CONVEX 431 GT_PK(2,2) 1362 2274 1361 2277 2278 1336
+CONVEX 432 GT_PK(2,2) 1362 2279 1337 2277 2270 1336
+CONVEX 433 GT_PK(2,2) 1076 2280 1075 2281 2282 1112
+CONVEX 434 GT_PK(2,2) 1000 2283 1001 2284 2285 1039
+CONVEX 435 GT_PK(2,2) 1040 2286 1001 2287 2285 1039
+CONVEX 436 GT_PK(2,2) 1040 2288 1078 2289 2290 1041
+CONVEX 437 GT_PK(2,2) 927 2291 966 2292 2293 928
+CONVEX 438 GT_PK(2,2) 927 2294 888 2292 2295 928
+CONVEX 439 GT_PK(2,2) 927 2296 887 2294 2297 888
+CONVEX 440 GT_PK(2,2) 925 2298 924 2299 2300 885
+CONVEX 441 GT_PK(2,2) 1415 2301 1433 2302 2303 1434
+CONVEX 442 GT_PK(2,2) 1415 2304 1414 2301 2305 1433
+CONVEX 443 GT_PK(2,2) 1432 2306 1414 2307 2305 1433
+CONVEX 444 GT_PK(2,2) 1222 2308 1188 2309 2310 1189
+CONVEX 445 GT_PK(2,2) 1222 2308 1188 2311 1757 1221
+CONVEX 446 GT_PK(2,2) 1348 2312 1373 2313 1508 1397
+CONVEX 447 GT_PK(2,2) 1347 2314 1348 2315 2312 1373
+CONVEX 448 GT_PK(2,2) 1347 2314 1348 2316 2317 1320
+CONVEX 449 GT_PK(2,2) 1416 2318 1395 2319 2320 1417
+CONVEX 450 GT_PK(2,2) 1371 2321 1345 2322 2323 1346
+CONVEX 451 GT_PK(2,2) 1371 2321 1345 2324 2325 1370
+CONVEX 452 GT_PK(2,2) 1372 2326 1347 2327 2328 1346
+CONVEX 453 GT_PK(2,2) 1372 2326 1347 2329 2315 1373
+CONVEX 454 GT_PK(2,2) 1372 2330 1371 2327 2322 1346
+CONVEX 455 GT_PK(2,2) 1372 2330 1371 2331 2332 1395
+CONVEX 456 GT_PK(2,2) 1372 2329 1373 2333 1507 1396
+CONVEX 457 GT_PK(2,2) 1372 2333 1396 2334 2335 1417
+CONVEX 458 GT_PK(2,2) 1372 2331 1395 2334 2320 1417
+CONVEX 459 GT_PK(2,2) 1344 2336 1369 2337 2338 1370
+CONVEX 460 GT_PK(2,2) 1344 2339 1345 2337 2325 1370
+CONVEX 461 GT_PK(2,2) 1344 2340 1343 2341 2342 1316
+CONVEX 462 GT_PK(2,2) 1344 2340 1343 2336 2343 1369
+CONVEX 463 GT_PK(2,2) 1317 2344 1344 2345 2341 1316
+CONVEX 464 GT_PK(2,2) 1317 2344 1344 2346 2339 1345
+CONVEX 465 GT_PK(2,2) 1444 2347 1429 2348 1744 1443
+CONVEX 466 GT_PK(2,2) 1444 2349 1430 2350 1516 1445
+CONVEX 467 GT_PK(2,2) 1444 2347 1429 2349 2351 1430
+CONVEX 468 GT_PK(2,2) 1410 2352 1428 2353 1733 1409
+CONVEX 469 GT_PK(2,2) 1410 2354 1429 2352 1743 1428
+CONVEX 470 GT_PK(2,2) 1368 2355 1369 2356 2357 1392
+CONVEX 471 GT_PK(2,2) 1368 2358 1391 2356 2359 1392
+CONVEX 472 GT_PK(2,2) 1368 2360 1343 2355 2343 1369
+CONVEX 473 GT_PK(2,2) 1413 2361 1432 2362 2306 1414
+CONVEX 474 GT_PK(2,2) 1413 2363 1431 2364 1511 1412
+CONVEX 475 GT_PK(2,2) 1413 2365 1391 2364 1746 1412
+CONVEX 476 GT_PK(2,2) 1413 2362 1414 2366 2367 1392
+CONVEX 477 GT_PK(2,2) 1413 2365 1391 2366 2359 1392
+CONVEX 478 GT_PK(2,2) 1413 2363 1431 2368 1514 1446
+CONVEX 479 GT_PK(2,2) 1413 2361 1432 2368 2369 1446
+CONVEX 480 GT_PK(2,2) 1113 2370 1112 2371 2372 1148
+CONVEX 481 GT_PK(2,2) 1113 2373 1149 2371 1752 1148
+CONVEX 482 GT_PK(2,2) 1113 2374 1076 2370 2281 1112
+CONVEX 483 GT_PK(2,2) 1150 2375 1185 2376 1519 1184
+CONVEX 484 GT_PK(2,2) 1150 2377 1149 2376 1754 1184
+CONVEX 485 GT_PK(2,2) 1079 2378 1078 2379 2380 1115
+CONVEX 486 GT_PK(2,2) 1079 2381 1116 2379 2382 1115
+CONVEX 487 GT_PK(2,2) 1079 2381 1116 2383 2384 1080
+CONVEX 488 GT_PK(2,2) 1079 2378 1078 2385 2290 1041
+CONVEX 489 GT_PK(2,2) 1280 2386 1248 2387 1748 1279
+CONVEX 490 GT_PK(2,2) 1280 2388 1309 2387 2389 1279
+CONVEX 491 GT_PK(2,2) 1280 2388 1309 2390 2273 1310
+CONVEX 492 GT_PK(2,2) 1217 2391 1183 2392 2393 1216
+CONVEX 493 GT_PK(2,2) 1217 2394 1218 2395 2396 1250
+CONVEX 494 GT_PK(2,2) 1217 2394 1218 2397 1518 1184
+CONVEX 495 GT_PK(2,2) 1217 2391 1183 2397 1753 1184
+CONVEX 496 GT_PK(2,2) 1253 2398 1284 2399 2400 1285
+CONVEX 497 GT_PK(2,2) 1253 2401 1252 2398 2402 1284
+CONVEX 498 GT_PK(2,2) 1311 2403 1312 2404 2405 1339
+CONVEX 499 GT_PK(2,2) 1311 2406 1282 2403 2407 1312
+CONVEX 500 GT_PK(2,2) 1153 2408 1187 2409 2410 1152
+CONVEX 501 GT_PK(2,2) 1153 2408 1187 2411 1755 1188
+CONVEX 502 GT_PK(2,2) 1154 2412 1188 2413 2310 1189
+CONVEX 503 GT_PK(2,2) 1154 2414 1153 2412 2411 1188
+CONVEX 504 GT_PK(2,2) 1220 2415 1187 2416 1756 1221
+CONVEX 505 GT_PK(2,2) 1220 2417 1253 2416 2418 1221
+CONVEX 506 GT_PK(2,2) 1220 2419 1252 2420 2421 1219
+CONVEX 507 GT_PK(2,2) 1220 2417 1253 2419 2401 1252
+CONVEX 508 GT_PK(2,2) 665 2422 704 2423 1774 705
+CONVEX 509 GT_PK(2,2) 547 2424 508 2425 1765 546
+CONVEX 510 GT_PK(2,2) 586 2426 587 2427 2428 625
+CONVEX 511 GT_PK(2,2) 586 2429 585 2427 2430 625
+CONVEX 512 GT_PK(2,2) 586 2429 585 2431 1778 546
+CONVEX 513 GT_PK(2,2) 586 2432 547 2431 2425 546
+CONVEX 514 GT_PK(2,2) 586 2432 547 2426 2433 587
+CONVEX 515 GT_PK(2,2) 624 2434 585 2435 2430 625
+CONVEX 516 GT_PK(2,2) 899 2436 898 2437 1780 938
+CONVEX 517 GT_PK(2,2) 899 2438 939 2437 2439 938
+CONVEX 518 GT_PK(2,2) 899 2438 939 2440 1814 900
+CONVEX 519 GT_PK(2,2) 739 2441 779 2442 1804 778
+CONVEX 520 GT_PK(2,2) 739 2443 738 2442 2444 778
+CONVEX 521 GT_PK(2,2) 819 2445 818 2446 2447 858
+CONVEX 522 GT_PK(2,2) 819 2445 818 2448 1802 779
+CONVEX 523 GT_PK(2,2) 623 2449 624 2450 2451 663
+CONVEX 524 GT_PK(2,2) 742 2452 743 2453 1531 781
+CONVEX 525 GT_PK(2,2) 742 2454 741 2453 2455 781
+CONVEX 526 GT_PK(2,2) 780 2456 820 2457 1807 781
+CONVEX 527 GT_PK(2,2) 780 2458 741 2457 2455 781
+CONVEX 528 GT_PK(2,2) 780 2459 819 2456 2460 820
+CONVEX 529 GT_PK(2,2) 780 2459 819 2461 2448 779
+CONVEX 530 GT_PK(2,2) 662 2462 623 2463 2450 663
+CONVEX 531 GT_PK(2,2) 979 2464 1017 2465 2466 978
+CONVEX 532 GT_PK(2,2) 979 2467 940 2465 1811 978
+CONVEX 533 GT_PK(2,2) 979 2467 940 2468 2469 941
+CONVEX 534 GT_PK(2,2) 1056 2470 1057 2471 2472 1094
+CONVEX 535 GT_PK(2,2) 1055 2473 1056 2474 2475 1017
+CONVEX 536 GT_PK(2,2) 1295 2476 1294 2477 2478 1262
+CONVEX 537 GT_PK(2,2) 1295 2479 1263 2477 1790 1262
+CONVEX 538 GT_PK(2,2) 1295 2479 1263 2480 1794 1264
+CONVEX 539 GT_PK(2,2) 817 2481 818 2482 1803 778
+CONVEX 540 GT_PK(2,2) 860 2483 821 2484 1805 820
+CONVEX 541 GT_PK(2,2) 860 2485 899 2486 2440 900
+CONVEX 542 GT_PK(2,2) 977 2487 939 2488 1812 978
+CONVEX 543 GT_PK(2,2) 977 2487 939 2489 2439 938
+CONVEX 544 GT_PK(2,2) 977 2490 976 2489 1821 938
+CONVEX 545 GT_PK(2,2) 977 2490 976 2491 2492 1015
+CONVEX 546 GT_PK(2,2) 980 2493 942 2494 1819 941
+CONVEX 547 GT_PK(2,2) 980 2495 979 2496 2497 1019
+CONVEX 548 GT_PK(2,2) 980 2495 979 2494 2468 941
+CONVEX 549 GT_PK(2,2) 861 2498 821 2499 1809 822
+CONVEX 550 GT_PK(2,2) 861 2500 860 2501 2486 900
+CONVEX 551 GT_PK(2,2) 861 2500 860 2498 2483 821
+CONVEX 552 GT_PK(2,2) 901 2502 940 2503 2469 941
+CONVEX 553 GT_PK(2,2) 901 2504 902 2503 1818 941
+CONVEX 554 GT_PK(2,2) 901 2502 940 2505 1813 900
+CONVEX 555 GT_PK(2,2) 901 2506 861 2505 2501 900
+CONVEX 556 GT_PK(2,2) 427 2507 428 2508 1838 390
+CONVEX 557 GT_PK(2,2) 356 2509 392 2510 1842 355
+CONVEX 558 GT_PK(2,2) 356 2511 393 2509 1833 392
+CONVEX 559 GT_PK(2,2) 356 2512 320 2510 1560 355
+CONVEX 560 GT_PK(2,2) 353 2513 318 2514 2515 317
+CONVEX 561 GT_PK(2,2) 353 2516 352 2514 1824 317
+CONVEX 562 GT_PK(2,2) 353 2517 354 2518 1840 390
+CONVEX 563 GT_PK(2,2) 353 2513 318 2517 1846 354
+CONVEX 564 GT_PK(2,2) 838 2519 839 2520 2521 878
+CONVEX 565 GT_PK(2,2) 517 2522 556 2523 2524 557
+CONVEX 566 GT_PK(2,2) 516 2525 478 2526 1608 477
+CONVEX 567 GT_PK(2,2) 516 2527 517 2525 2528 478
+CONVEX 568 GT_PK(2,2) 516 2527 517 2529 2522 556
+CONVEX 569 GT_PK(2,2) 596 2530 556 2531 2524 557
+CONVEX 570 GT_PK(2,2) 596 2532 597 2531 2533 557
+CONVEX 571 GT_PK(2,2) 596 2532 597 2534 2535 636
+CONVEX 572 GT_PK(2,2) 714 2536 715 2537 2538 675
+CONVEX 573 GT_PK(2,2) 982 2539 983 2540 2541 1021
+CONVEX 574 GT_PK(2,2) 982 2542 1020 2540 1466 1021
+CONVEX 575 GT_PK(2,2) 982 2543 981 2542 2544 1020
+CONVEX 576 GT_PK(2,2) 787 2545 786 2546 2547 826
+CONVEX 577 GT_PK(2,2) 787 2545 786 2548 1858 747
+CONVEX 578 GT_PK(2,2) 1100 2549 1135 2550 2551 1136
+CONVEX 579 GT_PK(2,2) 1100 2549 1135 2552 1868 1099
+CONVEX 580 GT_PK(2,2) 1098 2553 1134 2554 1867 1099
+CONVEX 581 GT_PK(2,2) 1098 2555 1062 2554 2556 1099
+CONVEX 582 GT_PK(2,2) 1133 2557 1134 2558 2559 1168
+CONVEX 583 GT_PK(2,2) 1133 2560 1098 2557 2553 1134
+CONVEX 584 GT_PK(2,2) 1097 2561 1133 2562 2563 1132
+CONVEX 585 GT_PK(2,2) 1097 2561 1133 2564 2560 1098
+CONVEX 586 GT_PK(2,2) 1167 2565 1201 2566 1864 1200
+CONVEX 587 GT_PK(2,2) 1167 2567 1166 2566 2568 1200
+CONVEX 588 GT_PK(2,2) 1167 2569 1132 2567 1869 1166
+CONVEX 589 GT_PK(2,2) 1167 2570 1133 2569 2563 1132
+CONVEX 590 GT_PK(2,2) 1167 2565 1201 2571 2572 1168
+CONVEX 591 GT_PK(2,2) 1167 2570 1133 2571 2558 1168
+CONVEX 592 GT_PK(2,2) 1096 2573 1095 2574 1872 1059
+CONVEX 593 GT_PK(2,2) 1096 2575 1097 2576 2562 1132
+CONVEX 594 GT_PK(2,2) 1096 2576 1132 2577 1870 1131
+CONVEX 595 GT_PK(2,2) 1096 2573 1095 2577 2578 1131
+CONVEX 596 GT_PK(2,2) 1096 2574 1059 2579 2580 1060
+CONVEX 597 GT_PK(2,2) 1096 2575 1097 2579 2581 1060
+CONVEX 598 GT_PK(2,2) 1065 2582 1027 2583 2584 1064
+CONVEX 599 GT_PK(2,2) 1065 2582 1027 2585 2586 1028
+CONVEX 600 GT_PK(2,2) 751 2587 711 2588 2589 712
+CONVEX 601 GT_PK(2,2) 1063 2590 1062 2591 2556 1099
+CONVEX 602 GT_PK(2,2) 1063 2592 1100 2591 2552 1099
+CONVEX 603 GT_PK(2,2) 1063 2592 1100 2593 2594 1064
+CONVEX 604 GT_PK(2,2) 1022 2595 1023 2596 2597 1060
+CONVEX 605 GT_PK(2,2) 1022 2598 1059 2599 1564 1021
+CONVEX 606 GT_PK(2,2) 1022 2598 1059 2596 2580 1060
+CONVEX 607 GT_PK(2,2) 1022 2600 983 2599 2541 1021
+CONVEX 608 GT_PK(2,2) 985 2601 1023 2602 2603 1024
+CONVEX 609 GT_PK(2,2) 949 2604 950 2605 2606 988
+CONVEX 610 GT_PK(2,2) 949 2604 950 2607 2608 911
+CONVEX 611 GT_PK(2,2) 949 2607 911 2609 2610 910
+CONVEX 612 GT_PK(2,2) 949 2611 948 2609 1875 910
+CONVEX 613 GT_PK(2,2) 1030 2612 1029 2613 2614 1067
+CONVEX 614 GT_PK(2,2) 989 2615 950 2616 2606 988
+CONVEX 615 GT_PK(2,2) 989 2617 1027 2616 2618 988
+CONVEX 616 GT_PK(2,2) 989 2617 1027 2619 2586 1028
+CONVEX 617 GT_PK(2,2) 912 2620 872 2621 2622 873
+CONVEX 618 GT_PK(2,2) 912 2623 950 2624 2608 911
+CONVEX 619 GT_PK(2,2) 912 2620 872 2624 2625 911
+CONVEX 620 GT_PK(2,2) 1206 2626 1207 2627 2628 1173
+CONVEX 621 GT_PK(2,2) 758 2629 797 2630 1892 757
+CONVEX 622 GT_PK(2,2) 758 2631 718 2630 1911 757
+CONVEX 623 GT_PK(2,2) 758 2631 718 2632 1908 719
+CONVEX 624 GT_PK(2,2) 758 2633 759 2632 1903 719
+CONVEX 625 GT_PK(2,2) 758 2629 797 2634 2635 798
+CONVEX 626 GT_PK(2,2) 758 2633 759 2634 2636 798
+CONVEX 627 GT_PK(2,2) 875 2637 835 2638 1896 836
+CONVEX 628 GT_PK(2,2) 875 2639 914 2640 2641 915
+CONVEX 629 GT_PK(2,2) 875 2637 835 2642 2643 874
+CONVEX 630 GT_PK(2,2) 875 2639 914 2642 2644 874
+CONVEX 631 GT_PK(2,2) 754 2645 714 2646 2536 715
+CONVEX 632 GT_PK(2,2) 794 2647 754 2648 2649 793
+CONVEX 633 GT_PK(2,2) 638 2650 599 2651 1898 598
+CONVEX 634 GT_PK(2,2) 638 2652 677 2653 1885 678
+CONVEX 635 GT_PK(2,2) 639 2654 678 2655 1907 679
+CONVEX 636 GT_PK(2,2) 639 2656 640 2655 1926 679
+CONVEX 637 GT_PK(2,2) 639 2657 638 2654 2653 678
+CONVEX 638 GT_PK(2,2) 639 2657 638 2658 2650 599
+CONVEX 639 GT_PK(2,2) 560 2659 559 2660 2661 520
+CONVEX 640 GT_PK(2,2) 560 2662 599 2659 1897 559
+CONVEX 641 GT_PK(2,2) 560 2663 521 2660 2664 520
+CONVEX 642 GT_PK(2,2) 560 2663 521 2665 2060 561
+CONVEX 643 GT_PK(2,2) 762 2666 761 2667 2668 801
+CONVEX 644 GT_PK(2,2) 722 2669 721 2670 1916 682
+CONVEX 645 GT_PK(2,2) 722 2669 721 2671 1918 761
+CONVEX 646 GT_PK(2,2) 722 2672 683 2670 2673 682
+CONVEX 647 GT_PK(2,2) 722 2674 762 2671 2666 761
+CONVEX 648 GT_PK(2,2) 1404 2675 1405 2676 1942 1383
+CONVEX 649 GT_PK(2,2) 1423 2677 1424 2678 1579 1405
+CONVEX 650 GT_PK(2,2) 1423 2679 1404 2678 2675 1405
+CONVEX 651 GT_PK(2,2) 1423 2679 1404 2680 2681 1422
+CONVEX 652 GT_PK(2,2) 1360 2682 1384 2683 1941 1383
+CONVEX 653 GT_PK(2,2) 1360 2682 1384 2684 1937 1361
+CONVEX 654 GT_PK(2,2) 1335 2685 1360 2686 2687 1334
+CONVEX 655 GT_PK(2,2) 1335 2688 1361 2689 2278 1336
+CONVEX 656 GT_PK(2,2) 1335 2685 1360 2688 2684 1361
+CONVEX 657 GT_PK(2,2) 1212 2690 1178 2691 2692 1211
+CONVEX 658 GT_PK(2,2) 1212 2693 1244 2691 2694 1211
+CONVEX 659 GT_PK(2,2) 1179 2695 1212 2696 2697 1213
+CONVEX 660 GT_PK(2,2) 1179 2695 1212 2698 2690 1178
+CONVEX 661 GT_PK(2,2) 1245 2699 1212 2700 2697 1213
+CONVEX 662 GT_PK(2,2) 1245 2699 1212 2701 2693 1244
+CONVEX 663 GT_PK(2,2) 1182 2702 1183 2703 2393 1216
+CONVEX 664 GT_PK(2,2) 1182 2702 1183 2704 1751 1148
+CONVEX 665 GT_PK(2,2) 1147 2705 1112 2706 2372 1148
+CONVEX 666 GT_PK(2,2) 1147 2707 1182 2706 2704 1148
+CONVEX 667 GT_PK(2,2) 1147 2707 1182 2708 2709 1181
+CONVEX 668 GT_PK(2,2) 1308 2710 1278 2711 1580 1279
+CONVEX 669 GT_PK(2,2) 1308 2712 1309 2711 2389 1279
+CONVEX 670 GT_PK(2,2) 1308 2712 1309 2713 2271 1336
+CONVEX 671 GT_PK(2,2) 1308 2714 1335 2713 2689 1336
+CONVEX 672 GT_PK(2,2) 1268 2715 1298 2716 2717 1297
+CONVEX 673 GT_PK(2,2) 1268 2718 1236 2719 2720 1237
+CONVEX 674 GT_PK(2,2) 1268 2721 1269 2719 2722 1237
+CONVEX 675 GT_PK(2,2) 1268 2721 1269 2715 2723 1298
+CONVEX 676 GT_PK(2,2) 1299 2724 1269 2725 2726 1270
+CONVEX 677 GT_PK(2,2) 1299 2724 1269 2727 2723 1298
+CONVEX 678 GT_PK(2,2) 1137 2728 1171 2729 2730 1136
+CONVEX 679 GT_PK(2,2) 1137 2731 1138 2732 1879 1102
+CONVEX 680 GT_PK(2,2) 1169 2733 1134 2734 2559 1168
+CONVEX 681 GT_PK(2,2) 1169 2733 1134 2735 1866 1135
+CONVEX 682 GT_PK(2,2) 1267 2736 1268 2737 2716 1297
+CONVEX 683 GT_PK(2,2) 1267 2736 1268 2738 2718 1236
+CONVEX 684 GT_PK(2,2) 1204 2739 1236 2740 2720 1237
+CONVEX 685 GT_PK(2,2) 1240 2741 1207 2742 2743 1208
+CONVEX 686 GT_PK(2,2) 1271 2744 1240 2745 2746 1272
+CONVEX 687 GT_PK(2,2) 1243 2747 1244 2748 2694 1211
+CONVEX 688 GT_PK(2,2) 972 2749 971 2750 1952 933
+CONVEX 689 GT_PK(2,2) 1083 2751 1046 2752 2753 1045
+CONVEX 690 GT_PK(2,2) 1002 2754 1003 2755 2756 964
+CONVEX 691 GT_PK(2,2) 1002 2757 1040 2758 2286 1001
+CONVEX 692 GT_PK(2,2) 1002 2754 1003 2759 2760 1041
+CONVEX 693 GT_PK(2,2) 1002 2757 1040 2759 2289 1041
+CONVEX 694 GT_PK(2,2) 1081 2761 1043 2762 2763 1080
+CONVEX 695 GT_PK(2,2) 929 2764 930 2765 1958 968
+CONVEX 696 GT_PK(2,2) 1008 2766 969 2767 1953 970
+CONVEX 697 GT_PK(2,2) 1008 2767 970 2768 1946 1009
+CONVEX 698 GT_PK(2,2) 1157 2769 1192 2770 1742 1158
+CONVEX 699 GT_PK(2,2) 1010 2771 1049 2772 2773 1011
+CONVEX 700 GT_PK(2,2) 1010 2774 972 2772 2775 1011
+CONVEX 701 GT_PK(2,2) 1010 2776 971 2777 1945 1009
+CONVEX 702 GT_PK(2,2) 1010 2774 972 2776 2749 971
+CONVEX 703 GT_PK(2,2) 974 2778 936 2779 1551 975
+CONVEX 704 GT_PK(2,2) 974 2780 1013 2779 2781 975
+CONVEX 705 GT_PK(2,2) 1014 2782 1013 2783 2784 1052
+CONVEX 706 GT_PK(2,2) 1014 2782 1013 2785 2781 975
+CONVEX 707 GT_PK(2,2) 1014 2786 976 2785 1822 975
+CONVEX 708 GT_PK(2,2) 1014 2786 976 2787 2492 1015
+CONVEX 709 GT_PK(2,2) 1051 2788 1013 2789 2784 1052
+CONVEX 710 GT_PK(2,2) 1124 2790 1123 2791 2792 1087
+CONVEX 711 GT_PK(2,2) 1163 2793 1164 2794 1538 1198
+CONVEX 712 GT_PK(2,2) 1163 2795 1197 2794 1965 1198
+CONVEX 713 GT_PK(2,2) 725 2796 685 2797 2798 724
+CONVEX 714 GT_PK(2,2) 725 2799 764 2797 2800 724
+CONVEX 715 GT_PK(2,2) 684 2801 685 2802 2803 645
+CONVEX 716 GT_PK(2,2) 684 2801 685 2804 2798 724
+CONVEX 717 GT_PK(2,2) 570 2805 571 2806 2807 610
+CONVEX 718 GT_PK(2,2) 570 2808 609 2806 1966 610
+CONVEX 719 GT_PK(2,2) 570 2809 531 2810 2811 530
+CONVEX 720 GT_PK(2,2) 570 2809 531 2805 2812 571
+CONVEX 721 GT_PK(2,2) 646 2813 685 2814 2803 645
+CONVEX 722 GT_PK(2,2) 646 2815 606 2814 2816 645
+CONVEX 723 GT_PK(2,2) 30 2817 29 2818 1975 15
+CONVEX 724 GT_PK(2,2) 30 2817 29 2819 2820 48
+CONVEX 725 GT_PK(2,2) 28 2821 29 2822 1974 14
+CONVEX 726 GT_PK(2,2) 28 2822 14 2823 2824 13
+CONVEX 727 GT_PK(2,2) 28 2825 27 2823 1704 13
+CONVEX 728 GT_PK(2,2) 89 2826 66 2827 2828 90
+CONVEX 729 GT_PK(2,2) 89 2829 114 2830 2831 88
+CONVEX 730 GT_PK(2,2) 89 2832 65 2830 1493 88
+CONVEX 731 GT_PK(2,2) 89 2826 66 2832 1980 65
+CONVEX 732 GT_PK(2,2) 528 2833 529 2834 2835 490
+CONVEX 733 GT_PK(2,2) 489 2836 451 2837 2838 490
+CONVEX 734 GT_PK(2,2) 489 2839 528 2840 2841 527
+CONVEX 735 GT_PK(2,2) 489 2839 528 2837 2834 490
+CONVEX 736 GT_PK(2,2) 452 2842 451 2843 2844 413
+CONVEX 737 GT_PK(2,2) 452 2842 451 2845 2838 490
+CONVEX 738 GT_PK(2,2) 414 2846 452 2847 2843 413
+CONVEX 739 GT_PK(2,2) 414 2846 452 2848 2849 453
+CONVEX 740 GT_PK(2,2) 491 2850 529 2851 2852 530
+CONVEX 741 GT_PK(2,2) 491 2850 529 2853 2835 490
+CONVEX 742 GT_PK(2,2) 491 2854 452 2853 2845 490
+CONVEX 743 GT_PK(2,2) 491 2854 452 2855 2849 453
+CONVEX 744 GT_PK(2,2) 385 2856 423 2857 2858 422
+CONVEX 745 GT_PK(2,2) 311 2859 310 2860 1995 346
+CONVEX 746 GT_PK(2,2) 311 2859 310 2861 1997 276
+CONVEX 747 GT_PK(2,2) 382 2862 345 2863 1996 346
+CONVEX 748 GT_PK(2,2) 382 2864 383 2863 2865 346
+CONVEX 749 GT_PK(2,2) 382 2866 381 2862 2867 345
+CONVEX 750 GT_PK(2,2) 382 2868 420 2864 2869 383
+CONVEX 751 GT_PK(2,2) 382 2866 381 2870 2871 419
+CONVEX 752 GT_PK(2,2) 382 2868 420 2870 2872 419
+CONVEX 753 GT_PK(2,2) 347 2873 383 2874 2865 346
+CONVEX 754 GT_PK(2,2) 347 2875 311 2874 2860 346
+CONVEX 755 GT_PK(2,2) 494 2876 455 2877 2002 456
+CONVEX 756 GT_PK(2,2) 494 2878 495 2877 2879 456
+CONVEX 757 GT_PK(2,2) 494 2876 455 2880 1989 493
+CONVEX 758 GT_PK(2,2) 494 2878 495 2881 2882 533
+CONVEX 759 GT_PK(2,2) 497 2883 459 2884 1983 498
+CONVEX 760 GT_PK(2,2) 457 2885 495 2886 2879 456
+CONVEX 761 GT_PK(2,2) 235 2887 268 2888 2889 234
+CONVEX 762 GT_PK(2,2) 235 2890 202 2888 2239 234
+CONVEX 763 GT_PK(2,2) 235 2891 203 2890 2892 202
+CONVEX 764 GT_PK(2,2) 309 2893 310 2894 1994 345
+CONVEX 765 GT_PK(2,2) 309 2895 274 2896 2897 308
+CONVEX 766 GT_PK(2,2) 309 2895 274 2898 1973 275
+CONVEX 767 GT_PK(2,2) 309 2893 310 2898 1998 275
+CONVEX 768 GT_PK(2,2) 344 2899 343 2900 2008 308
+CONVEX 769 GT_PK(2,2) 344 2901 309 2900 2896 308
+CONVEX 770 GT_PK(2,2) 344 2901 309 2902 2894 345
+CONVEX 771 GT_PK(2,2) 344 2903 381 2902 2867 345
+CONVEX 772 GT_PK(2,2) 344 2903 381 2904 2905 380
+CONVEX 773 GT_PK(2,2) 344 2899 343 2904 2013 380
+CONVEX 774 GT_PK(2,2) 376 2906 414 2907 2847 413
+CONVEX 775 GT_PK(2,2) 376 2906 414 2908 2909 377
+CONVEX 776 GT_PK(2,2) 378 2910 341 2911 2912 377
+CONVEX 777 GT_PK(2,2) 378 2913 379 2914 2004 416
+CONVEX 778 GT_PK(2,2) 378 2913 379 2915 2012 342
+CONVEX 779 GT_PK(2,2) 378 2910 341 2915 2018 342
+CONVEX 780 GT_PK(2,2) 305 2916 341 2917 2017 306
+CONVEX 781 GT_PK(2,2) 340 2918 341 2919 2912 377
+CONVEX 782 GT_PK(2,2) 340 2920 376 2919 2908 377
+CONVEX 783 GT_PK(2,2) 340 2920 376 2921 2922 339
+CONVEX 784 GT_PK(2,2) 340 2923 305 2918 2916 341
+CONVEX 785 GT_PK(2,2) 340 2921 339 2924 2014 304
+CONVEX 786 GT_PK(2,2) 340 2923 305 2924 2925 304
+CONVEX 787 GT_PK(2,2) 765 2926 805 2927 1592 766
+CONVEX 788 GT_PK(2,2) 765 2928 725 2929 2930 1
+CONVEX 789 GT_PK(2,2) 765 2928 725 2931 2799 764
+CONVEX 790 GT_PK(2,2) 765 2932 726 2929 2933 1
+CONVEX 791 GT_PK(2,2) 765 2932 726 2927 2020 766
+CONVEX 792 GT_PK(2,2) 844 2934 805 2935 1593 845
+CONVEX 793 GT_PK(2,2) 802 2936 762 2937 2667 801
+CONVEX 794 GT_PK(2,2) 648 2938 609 2939 1967 649
+CONVEX 795 GT_PK(2,2) 648 2940 688 2939 2941 649
+CONVEX 796 GT_PK(2,2) 648 2942 608 2943 2944 647
+CONVEX 797 GT_PK(2,2) 648 2942 608 2938 2945 609
+CONVEX 798 GT_PK(2,2) 687 2946 726 2947 2019 727
+CONVEX 799 GT_PK(2,2) 687 2948 688 2947 2021 727
+CONVEX 800 GT_PK(2,2) 687 2949 648 2948 2940 688
+CONVEX 801 GT_PK(2,2) 687 2949 648 2950 2943 647
+CONVEX 802 GT_PK(2,2) 613 2951 652 2952 2953 653
+CONVEX 803 GT_PK(2,2) 532 2954 531 2955 2812 571
+CONVEX 804 GT_PK(2,2) 532 2956 572 2957 2958 533
+CONVEX 805 GT_PK(2,2) 532 2956 572 2955 2959 571
+CONVEX 806 GT_PK(2,2) 532 2954 531 2960 2961 493
+CONVEX 807 GT_PK(2,2) 532 2962 494 2957 2881 533
+CONVEX 808 GT_PK(2,2) 532 2962 494 2960 2880 493
+CONVEX 809 GT_PK(2,2) 808 2963 769 2964 2965 768
+CONVEX 810 GT_PK(2,2) 808 2966 807 2964 1598 768
+CONVEX 811 GT_PK(2,2) 808 2966 807 2967 1600 847
+CONVEX 812 GT_PK(2,2) 729 2968 769 2969 2970 730
+CONVEX 813 GT_PK(2,2) 729 2971 690 2969 2972 730
+CONVEX 814 GT_PK(2,2) 729 2973 728 2974 1468 768
+CONVEX 815 GT_PK(2,2) 729 2968 769 2974 2965 768
+CONVEX 816 GT_PK(2,2) 689 2975 688 2976 2941 649
+CONVEX 817 GT_PK(2,2) 689 2975 688 2977 2022 728
+CONVEX 818 GT_PK(2,2) 689 2978 729 2977 2973 728
+CONVEX 819 GT_PK(2,2) 689 2978 729 2979 2971 690
+CONVEX 820 GT_PK(2,2) 691 2980 690 2981 2972 730
+CONVEX 821 GT_PK(2,2) 611 2982 571 2983 2807 610
+CONVEX 822 GT_PK(2,2) 611 2984 572 2982 2959 571
+CONVEX 823 GT_PK(2,2) 854 2985 894 2986 1961 855
+CONVEX 824 GT_PK(2,2) 891 2987 930 2988 1956 931
+CONVEX 825 GT_PK(2,2) 536 2989 497 2990 2884 498
+CONVEX 826 GT_PK(2,2) 614 2991 575 2992 2993 574
+CONVEX 827 GT_PK(2,2) 614 2994 613 2995 2952 653
+CONVEX 828 GT_PK(2,2) 614 2994 613 2992 2996 574
+CONVEX 829 GT_PK(2,2) 774 2997 813 2998 2999 773
+CONVEX 830 GT_PK(2,2) 627 3000 628 3001 2026 667
+CONVEX 831 GT_PK(2,2) 627 3000 628 3002 2030 588
+CONVEX 832 GT_PK(2,2) 549 3003 510 3004 3005 509
+CONVEX 833 GT_PK(2,2) 433 3006 395 3007 1470 394
+CONVEX 834 GT_PK(2,2) 404 3008 403 3009 1604 366
+CONVEX 835 GT_PK(2,2) 404 3010 367 3009 2047 366
+CONVEX 836 GT_PK(2,2) 404 3010 367 3011 3012 405
+CONVEX 837 GT_PK(2,2) 404 3013 443 3011 3014 405
+CONVEX 838 GT_PK(2,2) 642 3015 681 3016 1917 682
+CONVEX 839 GT_PK(2,2) 642 3015 681 3017 1924 641
+CONVEX 840 GT_PK(2,2) 644 3018 684 3019 2802 645
+CONVEX 841 GT_PK(2,2) 644 3018 684 3020 3021 683
+CONVEX 842 GT_PK(2,2) 484 3022 523 3023 2056 522
+CONVEX 843 GT_PK(2,2) 524 3024 523 3025 2057 563
+CONVEX 844 GT_PK(2,2) 482 3026 521 3027 2664 520
+CONVEX 845 GT_PK(2,2) 558 3028 597 3029 2533 557
+CONVEX 846 GT_PK(2,2) 558 3030 559 3031 1899 598
+CONVEX 847 GT_PK(2,2) 558 3028 597 3031 3032 598
+CONVEX 848 GT_PK(2,2) 436 3033 397 3034 2061 398
+CONVEX 849 GT_PK(2,2) 436 3035 437 3034 2064 398
+CONVEX 850 GT_PK(2,2) 440 3036 439 3037 1606 478
+CONVEX 851 GT_PK(2,2) 440 3036 439 3038 2095 401
+CONVEX 852 GT_PK(2,2) 440 3039 402 3038 2092 401
+CONVEX 853 GT_PK(2,2) 221 3040 254 3041 2117 255
+CONVEX 854 GT_PK(2,2) 221 3041 255 3042 1628 222
+CONVEX 855 GT_PK(2,2) 221 3043 188 3044 2114 220
+CONVEX 856 GT_PK(2,2) 221 3040 254 3044 2116 220
+CONVEX 857 GT_PK(2,2) 221 3045 189 3042 1620 222
+CONVEX 858 GT_PK(2,2) 221 3043 188 3045 2110 189
+CONVEX 859 GT_PK(2,2) 323 3046 359 3047 2086 322
+CONVEX 860 GT_PK(2,2) 323 3048 287 3047 2124 322
+CONVEX 861 GT_PK(2,2) 323 3046 359 3049 2079 360
+CONVEX 862 GT_PK(2,2) 213 3050 214 3051 2162 182
+CONVEX 863 GT_PK(2,2) 213 3050 214 3052 2164 246
+CONVEX 864 GT_PK(2,2) 213 3053 181 3051 1662 182
+CONVEX 865 GT_PK(2,2) 213 3054 212 3053 3055 181
+CONVEX 866 GT_PK(2,2) 213 3052 246 3056 2201 245
+CONVEX 867 GT_PK(2,2) 213 3054 212 3056 3057 245
+CONVEX 868 GT_PK(2,2) 180 3058 212 3059 3055 181
+CONVEX 869 GT_PK(2,2) 180 3060 151 3059 2179 181
+CONVEX 870 GT_PK(2,2) 180 3061 211 3058 3062 212
+CONVEX 871 GT_PK(2,2) 74 3063 52 3064 3065 53
+CONVEX 872 GT_PK(2,2) 74 3066 73 3063 2182 52
+CONVEX 873 GT_PK(2,2) 74 3064 53 3067 1681 98
+CONVEX 874 GT_PK(2,2) 283 3068 282 3069 1699 249
+CONVEX 875 GT_PK(2,2) 283 3070 250 3069 2190 249
+CONVEX 876 GT_PK(2,2) 283 3068 282 3071 1695 317
+CONVEX 877 GT_PK(2,2) 283 3072 318 3071 2515 317
+CONVEX 878 GT_PK(2,2) 283 3072 318 3073 1844 284
+CONVEX 879 GT_PK(2,2) 283 3070 250 3073 2187 284
+CONVEX 880 GT_PK(2,2) 26 3074 12 3075 1702 27
+CONVEX 881 GT_PK(2,2) 26 3076 11 3074 3077 12
+CONVEX 882 GT_PK(2,2) 26 3076 11 3078 2207 25
+CONVEX 883 GT_PK(2,2) 26 3078 25 3079 1716 44
+CONVEX 884 GT_PK(2,2) 26 3079 44 3080 1979 45
+CONVEX 885 GT_PK(2,2) 26 3075 27 3080 3081 45
+CONVEX 886 GT_PK(2,2) 81 3082 57 3083 2211 80
+CONVEX 887 GT_PK(2,2) 81 3084 107 3085 3086 82
+CONVEX 888 GT_PK(2,2) 81 3087 106 3083 2220 80
+CONVEX 889 GT_PK(2,2) 81 3084 107 3087 3088 106
+CONVEX 890 GT_PK(2,2) 193 3089 161 3090 1640 192
+CONVEX 891 GT_PK(2,2) 193 3091 162 3089 2228 161
+CONVEX 892 GT_PK(2,2) 193 3092 225 3090 1482 192
+CONVEX 893 GT_PK(2,2) 338 3093 339 3094 2015 303
+CONVEX 894 GT_PK(2,2) 338 3095 302 3094 2231 303
+CONVEX 895 GT_PK(2,2) 58 3096 37 3097 2234 36
+CONVEX 896 GT_PK(2,2) 58 3098 81 3099 3085 82
+CONVEX 897 GT_PK(2,2) 58 3100 57 3097 2213 36
+CONVEX 898 GT_PK(2,2) 58 3098 81 3100 3082 57
+CONVEX 899 GT_PK(2,2) 200 3101 168 3102 2246 169
+CONVEX 900 GT_PK(2,2) 200 3103 201 3102 3104 169
+CONVEX 901 GT_PK(2,2) 200 3103 201 3105 2240 233
+CONVEX 902 GT_PK(2,2) 86 3106 87 3107 3108 112
+CONVEX 903 GT_PK(2,2) 113 3109 87 3110 3108 112
+CONVEX 904 GT_PK(2,2) 113 3111 141 3112 3113 114
+CONVEX 905 GT_PK(2,2) 113 3112 114 3114 2831 88
+CONVEX 906 GT_PK(2,2) 113 3109 87 3114 2243 88
+CONVEX 907 GT_PK(2,2) 40 3115 39 3116 2260 21
+CONVEX 908 GT_PK(2,2) 40 3117 22 3118 1726 41
+CONVEX 909 GT_PK(2,2) 40 3117 22 3116 1720 21
+CONVEX 910 GT_PK(2,2) 40 3115 39 3119 3120 61
+CONVEX 911 GT_PK(2,2) 59 3121 58 3122 3099 82
+CONVEX 912 GT_PK(2,2) 59 3121 58 3123 3096 37
+CONVEX 913 GT_PK(2,2) 108 3124 107 3125 3086 82
+CONVEX 914 GT_PK(2,2) 1364 3126 1365 3127 3128 1339
+CONVEX 915 GT_PK(2,2) 963 3129 1002 3130 2755 964
+CONVEX 916 GT_PK(2,2) 963 3129 1002 3131 2758 1001
+CONVEX 917 GT_PK(2,2) 963 3132 925 3130 3133 964
+CONVEX 918 GT_PK(2,2) 963 3132 925 3134 2298 924
+CONVEX 919 GT_PK(2,2) 1038 3135 1000 3136 2284 1039
+CONVEX 920 GT_PK(2,2) 1038 3137 1076 3136 3138 1039
+CONVEX 921 GT_PK(2,2) 1038 3137 1076 3139 2280 1075
+CONVEX 922 GT_PK(2,2) 965 3140 927 3141 2291 966
+CONVEX 923 GT_PK(2,2) 965 3142 1003 3143 2756 964
+CONVEX 924 GT_PK(2,2) 965 3144 1004 3141 3145 966
+CONVEX 925 GT_PK(2,2) 965 3144 1004 3142 3146 1003
+CONVEX 926 GT_PK(2,2) 886 3147 925 3148 2299 885
+CONVEX 927 GT_PK(2,2) 886 3148 885 3149 1739 846
+CONVEX 928 GT_PK(2,2) 886 3150 847 3149 1602 846
+CONVEX 929 GT_PK(2,2) 886 3151 887 3150 3152 847
+CONVEX 930 GT_PK(2,2) 1393 3153 1369 3154 2338 1370
+CONVEX 931 GT_PK(2,2) 1393 3153 1369 3155 2357 1392
+CONVEX 932 GT_PK(2,2) 1393 3156 1414 3155 2367 1392
+CONVEX 933 GT_PK(2,2) 1393 3157 1415 3156 2304 1414
+CONVEX 934 GT_PK(2,2) 1254 3158 1286 3159 3160 1285
+CONVEX 935 GT_PK(2,2) 1254 3161 1253 3159 2399 1285
+CONVEX 936 GT_PK(2,2) 1254 3162 1222 3163 2311 1221
+CONVEX 937 GT_PK(2,2) 1254 3161 1253 3163 2418 1221
+CONVEX 938 GT_PK(2,2) 1374 3164 1348 3165 2313 1397
+CONVEX 939 GT_PK(2,2) 1293 3166 1294 3167 3168 1323
+CONVEX 940 GT_PK(2,2) 1293 3166 1294 3169 2478 1262
+CONVEX 941 GT_PK(2,2) 1321 3170 1348 3171 2317 1320
+CONVEX 942 GT_PK(2,2) 1321 3172 1291 3171 3173 1320
+CONVEX 943 GT_PK(2,2) 1319 3174 1347 3175 2328 1346
+CONVEX 944 GT_PK(2,2) 1319 3174 1347 3176 2316 1320
+CONVEX 945 GT_PK(2,2) 1394 3177 1416 3178 2318 1395
+CONVEX 946 GT_PK(2,2) 1394 3179 1415 3180 2302 1434
+CONVEX 947 GT_PK(2,2) 1394 3177 1416 3180 3181 1434
+CONVEX 948 GT_PK(2,2) 1394 3182 1371 3183 2324 1370
+CONVEX 949 GT_PK(2,2) 1394 3182 1371 3178 2332 1395
+CONVEX 950 GT_PK(2,2) 1394 3184 1393 3183 3154 1370
+CONVEX 951 GT_PK(2,2) 1394 3184 1393 3179 3157 1415
+CONVEX 952 GT_PK(2,2) 1195 3185 1196 3186 1583 1229
+CONVEX 953 GT_PK(2,2) 1261 3187 1262 3188 1535 1229
+CONVEX 954 GT_PK(2,2) 1261 3189 1293 3187 3169 1262
+CONVEX 955 GT_PK(2,2) 1411 3190 1390 3191 1747 1412
+CONVEX 956 GT_PK(2,2) 1411 3192 1430 3191 1512 1412
+CONVEX 957 GT_PK(2,2) 1411 3193 1429 3192 2351 1430
+CONVEX 958 GT_PK(2,2) 1411 3194 1410 3193 2354 1429
+CONVEX 959 GT_PK(2,2) 1077 3195 1113 3196 2374 1076
+CONVEX 960 GT_PK(2,2) 1077 3197 1040 3198 2288 1078
+CONVEX 961 GT_PK(2,2) 1077 3196 1076 3199 3138 1039
+CONVEX 962 GT_PK(2,2) 1077 3197 1040 3199 2287 1039
+CONVEX 963 GT_PK(2,2) 1151 3200 1150 3201 2375 1185
+CONVEX 964 GT_PK(2,2) 1151 3202 1116 3203 3204 1152
+CONVEX 965 GT_PK(2,2) 1151 3202 1116 3205 2382 1115
+CONVEX 966 GT_PK(2,2) 1151 3200 1150 3205 3206 1115
+CONVEX 967 GT_PK(2,2) 1249 3207 1280 3208 2386 1248
+CONVEX 968 GT_PK(2,2) 1249 3208 1248 3209 3210 1216
+CONVEX 969 GT_PK(2,2) 1249 3211 1217 3212 2395 1250
+CONVEX 970 GT_PK(2,2) 1249 3211 1217 3209 2392 1216
+CONVEX 971 GT_PK(2,2) 1251 3213 1282 3214 3215 1250
+CONVEX 972 GT_PK(2,2) 1251 3216 1218 3214 2396 1250
+CONVEX 973 GT_PK(2,2) 1251 3216 1218 3217 1520 1219
+CONVEX 974 GT_PK(2,2) 1251 3218 1252 3217 2421 1219
+CONVEX 975 GT_PK(2,2) 1281 3219 1311 3220 2406 1282
+CONVEX 976 GT_PK(2,2) 1281 3221 1249 3222 3207 1280
+CONVEX 977 GT_PK(2,2) 1281 3222 1280 3223 2390 1310
+CONVEX 978 GT_PK(2,2) 1281 3219 1311 3223 3224 1310
+CONVEX 979 GT_PK(2,2) 1281 3220 1282 3225 3215 1250
+CONVEX 980 GT_PK(2,2) 1281 3221 1249 3225 3212 1250
+CONVEX 981 GT_PK(2,2) 1367 3226 1391 3227 1745 1390
+CONVEX 982 GT_PK(2,2) 1367 3228 1368 3226 2358 1391
+CONVEX 983 GT_PK(2,2) 1367 3229 1366 3227 3230 1390
+CONVEX 984 GT_PK(2,2) 1367 3229 1366 3231 3232 1341
+CONVEX 985 GT_PK(2,2) 1342 3233 1368 3234 2360 1343
+CONVEX 986 GT_PK(2,2) 1342 3235 1367 3233 3228 1368
+CONVEX 987 GT_PK(2,2) 1342 3235 1367 3236 3231 1341
+CONVEX 988 GT_PK(2,2) 1155 3237 1154 3238 3239 1119
+CONVEX 989 GT_PK(2,2) 1155 3237 1154 3240 2413 1189
+CONVEX 990 GT_PK(2,2) 1155 3241 1190 3240 3242 1189
+CONVEX 991 GT_PK(2,2) 1155 3241 1190 3243 3244 1156
+CONVEX 992 GT_PK(2,2) 1186 3245 1220 3246 2415 1187
+CONVEX 993 GT_PK(2,2) 1186 3246 1187 3247 2410 1152
+CONVEX 994 GT_PK(2,2) 1186 3248 1185 3249 1521 1219
+CONVEX 995 GT_PK(2,2) 1186 3245 1220 3249 2420 1219
+CONVEX 996 GT_PK(2,2) 1186 3250 1151 3247 3203 1152
+CONVEX 997 GT_PK(2,2) 1186 3250 1151 3248 3201 1185
+CONVEX 998 GT_PK(2,2) 666 3251 665 3252 2423 705
+CONVEX 999 GT_PK(2,2) 664 3253 665 3254 2422 704
+CONVEX 1000 GT_PK(2,2) 664 3255 624 3256 2451 663
+CONVEX 1001 GT_PK(2,2) 664 3253 665 3257 3258 625
+CONVEX 1002 GT_PK(2,2) 664 3255 624 3257 2435 625
+CONVEX 1003 GT_PK(2,2) 506 3259 507 3260 1766 545
+CONVEX 1004 GT_PK(2,2) 506 3259 507 3261 1771 468
+CONVEX 1005 GT_PK(2,2) 506 3261 468 3262 1759 467
+CONVEX 1006 GT_PK(2,2) 506 3263 505 3262 3264 467
+CONVEX 1007 GT_PK(2,2) 740 3265 739 3266 2441 779
+CONVEX 1008 GT_PK(2,2) 740 3267 780 3266 2461 779
+CONVEX 1009 GT_PK(2,2) 740 3267 780 3268 2458 741
+CONVEX 1010 GT_PK(2,2) 740 3265 739 3269 3270 700
+CONVEX 1011 GT_PK(2,2) 859 3271 819 3272 2460 820
+CONVEX 1012 GT_PK(2,2) 859 3273 860 3272 2484 820
+CONVEX 1013 GT_PK(2,2) 859 3273 860 3274 2485 899
+CONVEX 1014 GT_PK(2,2) 859 3274 899 3275 2436 898
+CONVEX 1015 GT_PK(2,2) 859 3275 898 3276 1801 858
+CONVEX 1016 GT_PK(2,2) 859 3271 819 3276 2446 858
+CONVEX 1017 GT_PK(2,2) 543 3277 504 3278 3279 505
+CONVEX 1018 GT_PK(2,2) 543 3280 542 3281 3282 582
+CONVEX 1019 GT_PK(2,2) 543 3277 504 3280 3283 542
+CONVEX 1020 GT_PK(2,2) 544 3284 543 3285 3278 505
+CONVEX 1021 GT_PK(2,2) 544 3286 506 3287 3260 545
+CONVEX 1022 GT_PK(2,2) 544 3286 506 3285 3263 505
+CONVEX 1023 GT_PK(2,2) 584 3288 624 3289 2434 585
+CONVEX 1024 GT_PK(2,2) 584 3290 623 3288 2449 624
+CONVEX 1025 GT_PK(2,2) 584 3289 585 3291 1777 545
+CONVEX 1026 GT_PK(2,2) 584 3292 544 3291 3287 545
+CONVEX 1027 GT_PK(2,2) 702 3293 742 3294 2454 741
+CONVEX 1028 GT_PK(2,2) 702 3295 662 3296 2463 663
+CONVEX 1029 GT_PK(2,2) 702 3293 742 3297 2452 743
+CONVEX 1030 GT_PK(2,2) 622 3298 662 3299 2462 623
+CONVEX 1031 GT_PK(2,2) 622 3298 662 3300 3301 661
+CONVEX 1032 GT_PK(2,2) 622 3302 621 3303 3304 582
+CONVEX 1033 GT_PK(2,2) 622 3302 621 3300 3305 661
+CONVEX 1034 GT_PK(2,2) 1093 3306 1092 3307 3308 1129
+CONVEX 1035 GT_PK(2,2) 1093 3309 1056 3310 2471 1094
+CONVEX 1036 GT_PK(2,2) 1093 3311 1055 3306 3312 1092
+CONVEX 1037 GT_PK(2,2) 1093 3311 1055 3309 2473 1056
+CONVEX 1038 GT_PK(2,2) 1093 3313 1130 3307 1534 1129
+CONVEX 1039 GT_PK(2,2) 1093 3310 1094 3313 3314 1130
+CONVEX 1040 GT_PK(2,2) 1018 3315 1057 3316 3317 1019
+CONVEX 1041 GT_PK(2,2) 1018 3318 1056 3315 2470 1057
+CONVEX 1042 GT_PK(2,2) 1018 3318 1056 3319 2475 1017
+CONVEX 1043 GT_PK(2,2) 1018 3320 979 3316 2497 1019
+CONVEX 1044 GT_PK(2,2) 1018 3320 979 3319 2464 1017
+CONVEX 1045 GT_PK(2,2) 1054 3321 1055 3322 3312 1092
+CONVEX 1046 GT_PK(2,2) 777 3323 738 3324 2444 778
+CONVEX 1047 GT_PK(2,2) 777 3325 817 3324 2482 778
+CONVEX 1048 GT_PK(2,2) 856 3326 895 3327 3328 896
+CONVEX 1049 GT_PK(2,2) 856 3326 895 3329 1960 855
+CONVEX 1050 GT_PK(2,2) 857 3330 817 3331 2481 818
+CONVEX 1051 GT_PK(2,2) 857 3332 897 3333 1800 858
+CONVEX 1052 GT_PK(2,2) 857 3331 818 3333 2447 858
+CONVEX 1053 GT_PK(2,2) 857 3332 897 3334 1796 896
+CONVEX 1054 GT_PK(2,2) 857 3335 856 3334 3327 896
+CONVEX 1055 GT_PK(2,2) 857 3335 856 3330 3336 817
+CONVEX 1056 GT_PK(2,2) 1016 3337 1017 3338 2466 978
+CONVEX 1057 GT_PK(2,2) 1016 3339 977 3338 2488 978
+CONVEX 1058 GT_PK(2,2) 1016 3339 977 3340 2491 1015
+CONVEX 1059 GT_PK(2,2) 1016 3341 1054 3340 3342 1015
+CONVEX 1060 GT_PK(2,2) 1016 3343 1055 3337 2474 1017
+CONVEX 1061 GT_PK(2,2) 1016 3341 1054 3343 3321 1055
+CONVEX 1062 GT_PK(2,2) 862 3344 861 3345 2499 822
+CONVEX 1063 GT_PK(2,2) 862 3346 823 3345 1788 822
+CONVEX 1064 GT_PK(2,2) 862 3347 901 3348 2504 902
+CONVEX 1065 GT_PK(2,2) 862 3347 901 3344 2506 861
+CONVEX 1066 GT_PK(2,2) 862 3346 823 3349 1461 863
+CONVEX 1067 GT_PK(2,2) 862 3350 903 3349 3351 863
+CONVEX 1068 GT_PK(2,2) 862 3348 902 3350 1816 903
+CONVEX 1069 GT_PK(2,2) 351 3352 352 3353 1823 316
+CONVEX 1070 GT_PK(2,2) 351 3353 316 3354 1554 315
+CONVEX 1071 GT_PK(2,2) 351 3355 388 3352 3356 352
+CONVEX 1072 GT_PK(2,2) 351 3355 388 3357 3358 387
+CONVEX 1073 GT_PK(2,2) 837 3359 797 3360 1894 836
+CONVEX 1074 GT_PK(2,2) 837 3359 797 3361 2635 798
+CONVEX 1075 GT_PK(2,2) 837 3362 838 3361 3363 798
+CONVEX 1076 GT_PK(2,2) 799 3364 838 3365 2519 839
+CONVEX 1077 GT_PK(2,2) 799 3364 838 3366 3363 798
+CONVEX 1078 GT_PK(2,2) 799 3367 759 3366 2636 798
+CONVEX 1079 GT_PK(2,2) 799 3367 759 3368 1900 760
+CONVEX 1080 GT_PK(2,2) 637 3369 597 3370 2535 636
+CONVEX 1081 GT_PK(2,2) 637 3369 597 3371 3032 598
+CONVEX 1082 GT_PK(2,2) 637 3372 638 3371 2651 598
+CONVEX 1083 GT_PK(2,2) 637 3372 638 3373 2652 677
+CONVEX 1084 GT_PK(2,2) 518 3374 517 3375 2523 557
+CONVEX 1085 GT_PK(2,2) 518 3376 558 3375 3029 557
+CONVEX 1086 GT_PK(2,2) 671 3377 710 3378 3379 670
+CONVEX 1087 GT_PK(2,2) 671 3380 711 3377 3381 710
+CONVEX 1088 GT_PK(2,2) 753 3382 714 3383 3384 713
+CONVEX 1089 GT_PK(2,2) 753 3385 792 3386 3387 793
+CONVEX 1090 GT_PK(2,2) 753 3388 754 3386 2649 793
+CONVEX 1091 GT_PK(2,2) 753 3388 754 3382 2645 714
+CONVEX 1092 GT_PK(2,2) 669 3389 708 3390 3391 707
+CONVEX 1093 GT_PK(2,2) 669 3392 668 3393 2025 629
+CONVEX 1094 GT_PK(2,2) 669 3390 707 3392 1854 668
+CONVEX 1095 GT_PK(2,2) 669 3389 708 3394 3395 670
+CONVEX 1096 GT_PK(2,2) 825 3396 864 3397 3398 826
+CONVEX 1097 GT_PK(2,2) 825 3399 786 3400 1856 785
+CONVEX 1098 GT_PK(2,2) 825 3399 786 3397 2547 826
+CONVEX 1099 GT_PK(2,2) 865 3401 864 3402 3398 826
+CONVEX 1100 GT_PK(2,2) 865 3401 864 3403 3404 904
+CONVEX 1101 GT_PK(2,2) 748 3405 787 3406 3407 788
+CONVEX 1102 GT_PK(2,2) 748 3408 749 3406 3409 788
+CONVEX 1103 GT_PK(2,2) 748 3408 749 3410 3411 708
+CONVEX 1104 GT_PK(2,2) 748 3410 708 3412 3391 707
+CONVEX 1105 GT_PK(2,2) 748 3412 707 3413 1853 747
+CONVEX 1106 GT_PK(2,2) 748 3405 787 3413 2548 747
+CONVEX 1107 GT_PK(2,2) 1061 3414 1098 3415 2555 1062
+CONVEX 1108 GT_PK(2,2) 1061 3416 1023 3417 2597 1060
+CONVEX 1109 GT_PK(2,2) 1061 3418 1097 3417 2581 1060
+CONVEX 1110 GT_PK(2,2) 1061 3418 1097 3414 2564 1098
+CONVEX 1111 GT_PK(2,2) 1061 3415 1062 3419 3420 1024
+CONVEX 1112 GT_PK(2,2) 1061 3416 1023 3419 2603 1024
+CONVEX 1113 GT_PK(2,2) 1066 3421 1103 3422 1878 1102
+CONVEX 1114 GT_PK(2,2) 1066 3423 1065 3422 3424 1102
+CONVEX 1115 GT_PK(2,2) 1066 3421 1103 3425 3426 1067
+CONVEX 1116 GT_PK(2,2) 1066 3423 1065 3427 2585 1028
+CONVEX 1117 GT_PK(2,2) 1066 3428 1029 3425 2614 1067
+CONVEX 1118 GT_PK(2,2) 1066 3428 1029 3427 3429 1028
+CONVEX 1119 GT_PK(2,2) 752 3430 713 3431 3432 712
+CONVEX 1120 GT_PK(2,2) 752 3433 792 3434 3435 791
+CONVEX 1121 GT_PK(2,2) 752 3436 753 3430 3383 713
+CONVEX 1122 GT_PK(2,2) 752 3436 753 3433 3385 792
+CONVEX 1123 GT_PK(2,2) 752 3437 751 3431 2588 712
+CONVEX 1124 GT_PK(2,2) 752 3437 751 3434 3438 791
+CONVEX 1125 GT_PK(2,2) 831 3439 792 3440 3435 791
+CONVEX 1126 GT_PK(2,2) 789 3441 749 3442 3409 788
+CONVEX 1127 GT_PK(2,2) 1026 3443 1027 3444 2584 1064
+CONVEX 1128 GT_PK(2,2) 1026 3445 1063 3444 2593 1064
+CONVEX 1129 GT_PK(2,2) 1026 3443 1027 3446 2618 988
+CONVEX 1130 GT_PK(2,2) 1025 3447 1062 3448 3420 1024
+CONVEX 1131 GT_PK(2,2) 1025 3449 1063 3447 2590 1062
+CONVEX 1132 GT_PK(2,2) 1025 3450 1026 3449 3445 1063
+CONVEX 1133 GT_PK(2,2) 984 3451 1022 3452 2600 983
+CONVEX 1134 GT_PK(2,2) 984 3451 1022 3453 2595 1023
+CONVEX 1135 GT_PK(2,2) 984 3454 985 3453 2601 1023
+CONVEX 1136 GT_PK(2,2) 984 3455 945 3452 3456 983
+CONVEX 1137 GT_PK(2,2) 947 3457 948 3458 1874 909
+CONVEX 1138 GT_PK(2,2) 991 3459 1030 3460 2612 1029
+CONVEX 1139 GT_PK(2,2) 991 3459 1030 3461 3462 992
+CONVEX 1140 GT_PK(2,2) 1033 3463 1032 3464 3465 1070
+CONVEX 1141 GT_PK(2,2) 1031 3466 1030 3467 3462 992
+CONVEX 1142 GT_PK(2,2) 1031 3468 993 3467 3469 992
+CONVEX 1143 GT_PK(2,2) 1031 3468 993 3470 3471 1032
+CONVEX 1144 GT_PK(2,2) 953 3472 914 3473 3474 952
+CONVEX 1145 GT_PK(2,2) 953 3475 991 3473 3476 952
+CONVEX 1146 GT_PK(2,2) 953 3475 991 3477 3461 992
+CONVEX 1147 GT_PK(2,2) 953 3472 914 3478 2641 915
+CONVEX 1148 GT_PK(2,2) 913 3479 912 3480 2621 873
+CONVEX 1149 GT_PK(2,2) 913 3480 873 3481 3482 874
+CONVEX 1150 GT_PK(2,2) 913 3483 914 3481 2644 874
+CONVEX 1151 GT_PK(2,2) 913 3483 914 3484 3474 952
+CONVEX 1152 GT_PK(2,2) 951 3485 989 3486 2615 950
+CONVEX 1153 GT_PK(2,2) 951 3487 912 3486 2623 950
+CONVEX 1154 GT_PK(2,2) 951 3488 913 3487 3479 912
+CONVEX 1155 GT_PK(2,2) 951 3488 913 3489 3484 952
+CONVEX 1156 GT_PK(2,2) 1205 3490 1204 3491 2740 1237
+CONVEX 1157 GT_PK(2,2) 1205 3490 1204 3492 3493 1171
+CONVEX 1158 GT_PK(2,2) 1174 3494 1207 3495 2743 1208
+CONVEX 1159 GT_PK(2,2) 1174 3494 1207 3496 2628 1173
+CONVEX 1160 GT_PK(2,2) 1139 3497 1103 3498 1877 1138
+CONVEX 1161 GT_PK(2,2) 1139 3499 1174 3500 3501 1140
+CONVEX 1162 GT_PK(2,2) 1139 3498 1138 3502 3503 1173
+CONVEX 1163 GT_PK(2,2) 1139 3499 1174 3502 3496 1173
+CONVEX 1164 GT_PK(2,2) 833 3504 872 3505 2622 873
+CONVEX 1165 GT_PK(2,2) 833 3506 794 3507 2648 793
+CONVEX 1166 GT_PK(2,2) 834 3508 873 3509 3482 874
+CONVEX 1167 GT_PK(2,2) 834 3510 835 3509 2643 874
+CONVEX 1168 GT_PK(2,2) 834 3511 833 3508 3505 873
+CONVEX 1169 GT_PK(2,2) 834 3511 833 3512 3506 794
+CONVEX 1170 GT_PK(2,2) 755 3513 754 3514 2646 715
+CONVEX 1171 GT_PK(2,2) 755 3515 794 3513 2647 754
+CONVEX 1172 GT_PK(2,2) 755 3514 715 3516 3517 716
+CONVEX 1173 GT_PK(2,2) 755 3518 756 3516 1887 716
+CONVEX 1174 GT_PK(2,2) 600 3519 601 3520 2048 640
+CONVEX 1175 GT_PK(2,2) 600 3521 639 3520 2656 640
+CONVEX 1176 GT_PK(2,2) 600 3519 601 3522 2054 561
+CONVEX 1177 GT_PK(2,2) 600 3523 560 3522 2665 561
+CONVEX 1178 GT_PK(2,2) 600 3521 639 3524 2658 599
+CONVEX 1179 GT_PK(2,2) 600 3523 560 3524 2662 599
+CONVEX 1180 GT_PK(2,2) 723 3525 722 3526 2674 762
+CONVEX 1181 GT_PK(2,2) 723 3525 722 3527 2672 683
+CONVEX 1182 GT_PK(2,2) 723 3528 684 3529 2804 724
+CONVEX 1183 GT_PK(2,2) 723 3528 684 3527 3021 683
+CONVEX 1184 GT_PK(2,2) 1438 3530 1424 3531 1936 1439
+CONVEX 1185 GT_PK(2,2) 1438 3532 1423 3530 2677 1424
+CONVEX 1186 GT_PK(2,2) 1437 3533 1423 3534 2680 1422
+CONVEX 1187 GT_PK(2,2) 1437 3535 1436 3534 3536 1422
+CONVEX 1188 GT_PK(2,2) 1437 3537 1438 3533 3532 1423
+CONVEX 1189 GT_PK(2,2) 1180 3538 1179 3539 2696 1213
+CONVEX 1190 GT_PK(2,2) 1180 3540 1214 3539 3541 1213
+CONVEX 1191 GT_PK(2,2) 1180 3540 1214 3542 3543 1181
+CONVEX 1192 GT_PK(2,2) 1180 3538 1179 3544 3545 1145
+CONVEX 1193 GT_PK(2,2) 1144 3546 1179 3547 3545 1145
+CONVEX 1194 GT_PK(2,2) 1144 3546 1179 3548 2698 1178
+CONVEX 1195 GT_PK(2,2) 1246 3549 1245 3550 2700 1213
+CONVEX 1196 GT_PK(2,2) 1246 3551 1214 3550 3541 1213
+CONVEX 1197 GT_PK(2,2) 1246 3551 1214 3552 3553 1247
+CONVEX 1198 GT_PK(2,2) 1246 3554 1277 3549 3555 1245
+CONVEX 1199 GT_PK(2,2) 1246 3556 1278 3552 1581 1247
+CONVEX 1200 GT_PK(2,2) 1246 3554 1277 3556 3557 1278
+CONVEX 1201 GT_PK(2,2) 1215 3558 1214 3559 3553 1247
+CONVEX 1202 GT_PK(2,2) 1215 3560 1248 3559 1749 1247
+CONVEX 1203 GT_PK(2,2) 1215 3560 1248 3561 3210 1216
+CONVEX 1204 GT_PK(2,2) 1215 3562 1182 3561 2703 1216
+CONVEX 1205 GT_PK(2,2) 1215 3558 1214 3563 3543 1181
+CONVEX 1206 GT_PK(2,2) 1215 3562 1182 3563 2709 1181
+CONVEX 1207 GT_PK(2,2) 1307 3564 1308 3565 2710 1278
+CONVEX 1208 GT_PK(2,2) 1307 3566 1277 3567 3568 1306
+CONVEX 1209 GT_PK(2,2) 1307 3566 1277 3565 3557 1278
+CONVEX 1210 GT_PK(2,2) 1307 3569 1334 3567 3570 1306
+CONVEX 1211 GT_PK(2,2) 1307 3571 1335 3569 2686 1334
+CONVEX 1212 GT_PK(2,2) 1307 3564 1308 3571 2714 1335
+CONVEX 1213 GT_PK(2,2) 1326 3572 1299 3573 2727 1298
+CONVEX 1214 GT_PK(2,2) 1326 3572 1299 3574 3575 1327
+CONVEX 1215 GT_PK(2,2) 1326 3576 1375 3577 3578 1351
+CONVEX 1216 GT_PK(2,2) 1172 3579 1137 3580 2728 1171
+CONVEX 1217 GT_PK(2,2) 1172 3581 1205 3580 3492 1171
+CONVEX 1218 GT_PK(2,2) 1172 3581 1205 3582 3583 1206
+CONVEX 1219 GT_PK(2,2) 1172 3582 1206 3584 2627 1173
+CONVEX 1220 GT_PK(2,2) 1172 3585 1138 3584 3503 1173
+CONVEX 1221 GT_PK(2,2) 1172 3579 1137 3585 2731 1138
+CONVEX 1222 GT_PK(2,2) 1101 3586 1100 3587 2550 1136
+CONVEX 1223 GT_PK(2,2) 1101 3588 1137 3587 2729 1136
+CONVEX 1224 GT_PK(2,2) 1101 3588 1137 3589 2732 1102
+CONVEX 1225 GT_PK(2,2) 1101 3586 1100 3590 2594 1064
+CONVEX 1226 GT_PK(2,2) 1101 3591 1065 3589 3424 1102
+CONVEX 1227 GT_PK(2,2) 1101 3591 1065 3590 2583 1064
+CONVEX 1228 GT_PK(2,2) 1203 3592 1204 3593 2739 1236
+CONVEX 1229 GT_PK(2,2) 1235 3594 1267 3595 3596 1266
+CONVEX 1230 GT_PK(2,2) 1235 3597 1265 3595 3598 1266
+CONVEX 1231 GT_PK(2,2) 1235 3597 1265 3599 1860 1234
+CONVEX 1232 GT_PK(2,2) 1235 3594 1267 3600 2738 1236
+CONVEX 1233 GT_PK(2,2) 1235 3601 1203 3600 3593 1236
+CONVEX 1234 GT_PK(2,2) 1170 3602 1204 3603 3493 1171
+CONVEX 1235 GT_PK(2,2) 1170 3603 1171 3604 2730 1136
+CONVEX 1236 GT_PK(2,2) 1170 3605 1203 3606 3607 1169
+CONVEX 1237 GT_PK(2,2) 1170 3605 1203 3602 3592 1204
+CONVEX 1238 GT_PK(2,2) 1170 3608 1135 3604 2551 1136
+CONVEX 1239 GT_PK(2,2) 1170 3606 1169 3608 2735 1135
+CONVEX 1240 GT_PK(2,2) 1239 3609 1206 3610 2626 1207
+CONVEX 1241 GT_PK(2,2) 1239 3611 1240 3610 2741 1207
+CONVEX 1242 GT_PK(2,2) 1239 3612 1271 3611 2744 1240
+CONVEX 1243 GT_PK(2,2) 1239 3612 1271 3613 3614 1270
+CONVEX 1244 GT_PK(2,2) 1274 3615 1243 3616 3617 1242
+CONVEX 1245 GT_PK(2,2) 1274 3618 1273 3616 3619 1242
+CONVEX 1246 GT_PK(2,2) 1274 3620 1304 3621 3622 1303
+CONVEX 1247 GT_PK(2,2) 1274 3618 1273 3621 3623 1303
+CONVEX 1248 GT_PK(2,2) 1241 3624 1240 3625 2746 1272
+CONVEX 1249 GT_PK(2,2) 1241 3626 1273 3625 3627 1272
+CONVEX 1250 GT_PK(2,2) 1241 3624 1240 3628 2742 1208
+CONVEX 1251 GT_PK(2,2) 1241 3626 1273 3629 3619 1242
+CONVEX 1252 GT_PK(2,2) 967 3630 1006 3631 3632 968
+CONVEX 1253 GT_PK(2,2) 967 3633 929 3631 2765 968
+CONVEX 1254 GT_PK(2,2) 967 3634 966 3635 2293 928
+CONVEX 1255 GT_PK(2,2) 967 3633 929 3635 3636 928
+CONVEX 1256 GT_PK(2,2) 1082 3637 1083 3638 3639 1119
+CONVEX 1257 GT_PK(2,2) 1082 3637 1083 3640 2752 1045
+CONVEX 1258 GT_PK(2,2) 1044 3641 1081 3642 2761 1043
+CONVEX 1259 GT_PK(2,2) 1044 3643 1006 3644 3645 1045
+CONVEX 1260 GT_PK(2,2) 1044 3646 1082 3644 3640 1045
+CONVEX 1261 GT_PK(2,2) 1044 3646 1082 3641 3647 1081
+CONVEX 1262 GT_PK(2,2) 1117 3648 1116 3649 2384 1080
+CONVEX 1263 GT_PK(2,2) 1117 3650 1081 3649 2762 1080
+CONVEX 1264 GT_PK(2,2) 1117 3648 1116 3651 3204 1152
+CONVEX 1265 GT_PK(2,2) 1117 3652 1153 3651 2409 1152
+CONVEX 1266 GT_PK(2,2) 1005 3653 1004 3654 3655 1043
+CONVEX 1267 GT_PK(2,2) 1005 3656 1044 3654 3642 1043
+CONVEX 1268 GT_PK(2,2) 1005 3656 1044 3657 3643 1006
+CONVEX 1269 GT_PK(2,2) 1005 3658 967 3657 3630 1006
+CONVEX 1270 GT_PK(2,2) 1005 3653 1004 3659 3145 966
+CONVEX 1271 GT_PK(2,2) 1005 3658 967 3659 3634 966
+CONVEX 1272 GT_PK(2,2) 1042 3660 1004 3661 3655 1043
+CONVEX 1273 GT_PK(2,2) 1042 3662 1079 3663 2385 1041
+CONVEX 1274 GT_PK(2,2) 1042 3664 1003 3663 2760 1041
+CONVEX 1275 GT_PK(2,2) 1042 3660 1004 3664 3146 1003
+CONVEX 1276 GT_PK(2,2) 1042 3661 1043 3665 2763 1080
+CONVEX 1277 GT_PK(2,2) 1042 3662 1079 3665 2383 1080
+CONVEX 1278 GT_PK(2,2) 1007 3666 1008 3667 2766 969
+CONVEX 1279 GT_PK(2,2) 1007 3667 969 3668 1957 968
+CONVEX 1280 GT_PK(2,2) 1007 3669 1006 3668 3632 968
+CONVEX 1281 GT_PK(2,2) 1007 3669 1006 3670 3645 1045
+CONVEX 1282 GT_PK(2,2) 1007 3671 1046 3670 2753 1045
+CONVEX 1283 GT_PK(2,2) 1007 3666 1008 3671 3672 1046
+CONVEX 1284 GT_PK(2,2) 1122 3673 1123 3674 3675 1158
+CONVEX 1285 GT_PK(2,2) 1122 3676 1157 3674 2770 1158
+CONVEX 1286 GT_PK(2,2) 973 3677 972 3678 2775 1011
+CONVEX 1287 GT_PK(2,2) 1050 3679 1049 3680 3681 1087
+CONVEX 1288 GT_PK(2,2) 1050 3679 1049 3682 2773 1011
+CONVEX 1289 GT_PK(2,2) 1160 3683 1124 3684 3685 1125
+CONVEX 1290 GT_PK(2,2) 1160 3686 1195 3687 3688 1194
+CONVEX 1291 GT_PK(2,2) 1089 3689 1051 3690 2789 1052
+CONVEX 1292 GT_PK(2,2) 1089 3691 1090 3690 3692 1052
+CONVEX 1293 GT_PK(2,2) 686 3693 646 3694 3695 647
+CONVEX 1294 GT_PK(2,2) 686 3696 687 3694 2950 647
+CONVEX 1295 GT_PK(2,2) 686 3693 646 3697 2813 685
+CONVEX 1296 GT_PK(2,2) 686 3698 726 3699 2933 1
+CONVEX 1297 GT_PK(2,2) 686 3696 687 3698 2946 726
+CONVEX 1298 GT_PK(2,2) 686 3700 725 3699 2930 1
+CONVEX 1299 GT_PK(2,2) 686 3700 725 3697 2796 685
+CONVEX 1300 GT_PK(2,2) 272 3701 307 3702 1991 306
+CONVEX 1301 GT_PK(2,2) 116 3703 91 3704 3705 90
+CONVEX 1302 GT_PK(2,2) 16 3706 30 3707 2818 15
+CONVEX 1303 GT_PK(2,2) 46 3708 27 3709 3081 45
+CONVEX 1304 GT_PK(2,2) 46 3710 28 3708 2825 27
+CONVEX 1305 GT_PK(2,2) 170 3711 201 3712 2237 202
+CONVEX 1306 GT_PK(2,2) 170 3711 201 3713 3104 169
+CONVEX 1307 GT_PK(2,2) 140 3714 139 3715 3716 112
+CONVEX 1308 GT_PK(2,2) 140 3717 113 3715 3110 112
+CONVEX 1309 GT_PK(2,2) 140 3717 113 3718 3111 141
+CONVEX 1310 GT_PK(2,2) 140 3719 170 3718 3720 141
+CONVEX 1311 GT_PK(2,2) 140 3714 139 3721 2245 169
+CONVEX 1312 GT_PK(2,2) 140 3719 170 3721 3713 169
+CONVEX 1313 GT_PK(2,2) 568 3722 528 3723 2833 529
+CONVEX 1314 GT_PK(2,2) 569 3724 570 3725 2808 609
+CONVEX 1315 GT_PK(2,2) 569 3726 608 3725 2945 609
+CONVEX 1316 GT_PK(2,2) 569 3727 568 3726 3728 608
+CONVEX 1317 GT_PK(2,2) 569 3724 570 3729 2810 530
+CONVEX 1318 GT_PK(2,2) 569 3730 529 3729 2852 530
+CONVEX 1319 GT_PK(2,2) 569 3727 568 3730 3723 529
+CONVEX 1320 GT_PK(2,2) 415 3731 414 3732 2909 377
+CONVEX 1321 GT_PK(2,2) 415 3733 378 3734 2914 416
+CONVEX 1322 GT_PK(2,2) 415 3733 378 3732 2911 377
+CONVEX 1323 GT_PK(2,2) 415 3735 454 3734 1988 416
+CONVEX 1324 GT_PK(2,2) 415 3736 453 3735 3737 454
+CONVEX 1325 GT_PK(2,2) 415 3731 414 3736 2848 453
+CONVEX 1326 GT_PK(2,2) 492 3738 531 3739 2811 530
+CONVEX 1327 GT_PK(2,2) 492 3740 491 3739 2851 530
+CONVEX 1328 GT_PK(2,2) 492 3738 531 3741 2961 493
+CONVEX 1329 GT_PK(2,2) 492 3740 491 3742 2855 453
+CONVEX 1330 GT_PK(2,2) 492 3743 454 3741 1990 493
+CONVEX 1331 GT_PK(2,2) 492 3742 453 3743 3737 454
+CONVEX 1332 GT_PK(2,2) 349 3744 314 3745 2206 313
+CONVEX 1333 GT_PK(2,2) 349 3746 348 3745 3747 313
+CONVEX 1334 GT_PK(2,2) 349 3748 385 3746 3749 348
+CONVEX 1335 GT_PK(2,2) 277 3750 311 3751 2861 276
+CONVEX 1336 GT_PK(2,2) 312 3752 348 3753 3747 313
+CONVEX 1337 GT_PK(2,2) 312 3754 277 3755 3750 311
+CONVEX 1338 GT_PK(2,2) 312 3756 347 3752 3757 348
+CONVEX 1339 GT_PK(2,2) 312 3756 347 3755 2875 311
+CONVEX 1340 GT_PK(2,2) 312 3758 278 3753 2205 313
+CONVEX 1341 GT_PK(2,2) 312 3754 277 3758 3759 278
+CONVEX 1342 GT_PK(2,2) 421 3760 460 3761 1981 459
+CONVEX 1343 GT_PK(2,2) 421 3762 420 3761 3763 459
+CONVEX 1344 GT_PK(2,2) 421 3760 460 3764 3765 422
+CONVEX 1345 GT_PK(2,2) 421 3762 420 3766 2869 383
+CONVEX 1346 GT_PK(2,2) 384 3767 347 3768 2873 383
+CONVEX 1347 GT_PK(2,2) 384 3769 421 3770 3764 422
+CONVEX 1348 GT_PK(2,2) 384 3769 421 3768 3766 383
+CONVEX 1349 GT_PK(2,2) 384 3771 385 3770 2857 422
+CONVEX 1350 GT_PK(2,2) 384 3771 385 3772 3749 348
+CONVEX 1351 GT_PK(2,2) 384 3767 347 3772 3757 348
+CONVEX 1352 GT_PK(2,2) 535 3773 575 3774 2993 574
+CONVEX 1353 GT_PK(2,2) 535 3775 536 3773 3776 575
+CONVEX 1354 GT_PK(2,2) 535 3775 536 3777 2989 497
+CONVEX 1355 GT_PK(2,2) 418 3778 417 3779 2001 456
+CONVEX 1356 GT_PK(2,2) 418 3780 457 3779 2886 456
+CONVEX 1357 GT_PK(2,2) 418 3780 457 3781 3782 419
+CONVEX 1358 GT_PK(2,2) 418 3778 417 3783 2005 380
+CONVEX 1359 GT_PK(2,2) 418 3784 381 3781 2871 419
+CONVEX 1360 GT_PK(2,2) 418 3784 381 3783 2905 380
+CONVEX 1361 GT_PK(2,2) 458 3785 497 3786 2883 459
+CONVEX 1362 GT_PK(2,2) 458 3787 457 3788 3782 419
+CONVEX 1363 GT_PK(2,2) 458 3789 420 3788 2872 419
+CONVEX 1364 GT_PK(2,2) 458 3789 420 3786 3763 459
+CONVEX 1365 GT_PK(2,2) 884 3790 844 3791 3792 883
+CONVEX 1366 GT_PK(2,2) 884 3793 924 3794 2300 885
+CONVEX 1367 GT_PK(2,2) 884 3794 885 3795 1738 845
+CONVEX 1368 GT_PK(2,2) 884 3790 844 3795 2935 845
+CONVEX 1369 GT_PK(2,2) 884 3791 883 3796 3797 923
+CONVEX 1370 GT_PK(2,2) 884 3793 924 3796 3798 923
+CONVEX 1371 GT_PK(2,2) 843 3799 844 3800 3792 883
+CONVEX 1372 GT_PK(2,2) 763 3801 802 3802 2936 762
+CONVEX 1373 GT_PK(2,2) 763 3803 723 3804 3529 724
+CONVEX 1374 GT_PK(2,2) 763 3803 723 3802 3526 762
+CONVEX 1375 GT_PK(2,2) 763 3805 764 3804 2800 724
+CONVEX 1376 GT_PK(2,2) 573 3806 613 3807 2996 574
+CONVEX 1377 GT_PK(2,2) 573 3808 572 3809 2958 533
+CONVEX 1378 GT_PK(2,2) 848 3810 808 3811 2967 847
+CONVEX 1379 GT_PK(2,2) 848 3812 887 3813 2297 888
+CONVEX 1380 GT_PK(2,2) 848 3812 887 3811 3152 847
+CONVEX 1381 GT_PK(2,2) 692 3814 652 3815 2953 653
+CONVEX 1382 GT_PK(2,2) 692 3816 691 3814 3817 652
+CONVEX 1383 GT_PK(2,2) 612 3818 613 3819 2951 652
+CONVEX 1384 GT_PK(2,2) 612 3820 573 3818 3806 613
+CONVEX 1385 GT_PK(2,2) 612 3821 611 3822 2984 572
+CONVEX 1386 GT_PK(2,2) 612 3820 573 3822 3808 572
+CONVEX 1387 GT_PK(2,2) 651 3823 612 3824 3821 611
+CONVEX 1388 GT_PK(2,2) 651 3823 612 3825 3819 652
+CONVEX 1389 GT_PK(2,2) 651 3826 691 3825 3817 652
+CONVEX 1390 GT_PK(2,2) 651 3826 691 3827 2980 690
+CONVEX 1391 GT_PK(2,2) 650 3828 689 3829 2976 649
+CONVEX 1392 GT_PK(2,2) 650 3830 610 3829 1968 649
+CONVEX 1393 GT_PK(2,2) 650 3831 611 3830 2983 610
+CONVEX 1394 GT_PK(2,2) 650 3832 651 3831 3824 611
+CONVEX 1395 GT_PK(2,2) 650 3828 689 3833 2979 690
+CONVEX 1396 GT_PK(2,2) 650 3832 651 3833 3827 690
+CONVEX 1397 GT_PK(2,2) 815 3834 854 3835 2986 855
+CONVEX 1398 GT_PK(2,2) 893 3836 894 3837 3838 933
+CONVEX 1399 GT_PK(2,2) 893 3839 854 3836 2985 894
+CONVEX 1400 GT_PK(2,2) 893 3840 932 3837 1951 933
+CONVEX 1401 GT_PK(2,2) 893 3841 853 3839 3842 854
+CONVEX 1402 GT_PK(2,2) 812 3843 813 3844 2999 773
+CONVEX 1403 GT_PK(2,2) 889 3845 888 3846 2295 928
+CONVEX 1404 GT_PK(2,2) 889 3847 929 3846 3636 928
+CONVEX 1405 GT_PK(2,2) 695 3848 694 3849 3850 655
+CONVEX 1406 GT_PK(2,2) 770 3851 769 3852 2970 730
+CONVEX 1407 GT_PK(2,2) 615 3853 614 3854 2991 575
+CONVEX 1408 GT_PK(2,2) 548 3855 549 3856 3004 509
+CONVEX 1409 GT_PK(2,2) 548 3857 589 3858 2029 588
+CONVEX 1410 GT_PK(2,2) 548 3855 549 3857 3859 589
+CONVEX 1411 GT_PK(2,2) 434 3860 395 3861 2088 396
+CONVEX 1412 GT_PK(2,2) 434 3862 433 3860 3006 395
+CONVEX 1413 GT_PK(2,2) 434 3863 472 3864 3865 473
+CONVEX 1414 GT_PK(2,2) 434 3863 472 3862 3866 433
+CONVEX 1415 GT_PK(2,2) 442 3867 404 3868 3013 443
+CONVEX 1416 GT_PK(2,2) 442 3867 404 3869 3008 403
+CONVEX 1417 GT_PK(2,2) 643 3870 683 3871 2673 682
+CONVEX 1418 GT_PK(2,2) 643 3872 642 3871 3016 682
+CONVEX 1419 GT_PK(2,2) 643 3872 642 3873 3874 603
+CONVEX 1420 GT_PK(2,2) 643 3875 644 3870 3020 683
+CONVEX 1421 GT_PK(2,2) 602 3876 642 3877 3874 603
+CONVEX 1422 GT_PK(2,2) 602 3878 562 3879 2053 601
+CONVEX 1423 GT_PK(2,2) 602 3879 601 3880 2049 641
+CONVEX 1424 GT_PK(2,2) 602 3876 642 3880 3017 641
+CONVEX 1425 GT_PK(2,2) 602 3878 562 3881 2058 563
+CONVEX 1426 GT_PK(2,2) 602 3877 603 3881 3882 563
+CONVEX 1427 GT_PK(2,2) 565 3883 526 3884 3885 525
+CONVEX 1428 GT_PK(2,2) 488 3886 489 3887 2840 527
+CONVEX 1429 GT_PK(2,2) 488 3888 526 3887 3889 527
+CONVEX 1430 GT_PK(2,2) 486 3890 524 3891 3892 525
+CONVEX 1431 GT_PK(2,2) 444 3893 482 3894 3895 443
+CONVEX 1432 GT_PK(2,2) 444 3894 443 3896 3014 405
+CONVEX 1433 GT_PK(2,2) 483 3897 482 3898 3026 521
+CONVEX 1434 GT_PK(2,2) 483 3898 521 3899 2059 522
+CONVEX 1435 GT_PK(2,2) 483 3900 484 3899 3023 522
+CONVEX 1436 GT_PK(2,2) 483 3900 484 3901 3902 445
+CONVEX 1437 GT_PK(2,2) 483 3903 444 3901 3904 445
+CONVEX 1438 GT_PK(2,2) 483 3903 444 3897 3893 482
+CONVEX 1439 GT_PK(2,2) 519 3905 559 3906 2661 520
+CONVEX 1440 GT_PK(2,2) 519 3907 558 3905 3030 559
+CONVEX 1441 GT_PK(2,2) 519 3908 518 3909 3910 480
+CONVEX 1442 GT_PK(2,2) 519 3908 518 3907 3376 558
+CONVEX 1443 GT_PK(2,2) 288 3911 287 3912 2120 253
+CONVEX 1444 GT_PK(2,2) 288 3913 323 3911 3048 287
+CONVEX 1445 GT_PK(2,2) 288 3914 254 3912 2115 253
+CONVEX 1446 GT_PK(2,2) 288 3914 254 3915 2118 289
+CONVEX 1447 GT_PK(2,2) 244 3916 212 3917 3057 245
+CONVEX 1448 GT_PK(2,2) 244 3918 211 3916 3062 212
+CONVEX 1449 GT_PK(2,2) 244 3919 278 3917 2203 245
+CONVEX 1450 GT_PK(2,2) 244 3920 277 3919 3759 278
+CONVEX 1451 GT_PK(2,2) 150 3921 180 3922 3060 151
+CONVEX 1452 GT_PK(2,2) 150 3923 122 3924 3925 149
+CONVEX 1453 GT_PK(2,2) 121 3926 122 3927 3928 96
+CONVEX 1454 GT_PK(2,2) 121 3926 122 3929 3925 149
+CONVEX 1455 GT_PK(2,2) 97 3930 122 3931 3928 96
+CONVEX 1456 GT_PK(2,2) 97 3932 73 3931 3933 96
+CONVEX 1457 GT_PK(2,2) 97 3934 74 3932 3066 73
+CONVEX 1458 GT_PK(2,2) 97 3934 74 3935 3067 98
+CONVEX 1459 GT_PK(2,2) 93 3936 69 3937 3938 92
+CONVEX 1460 GT_PK(2,2) 51 3939 73 3940 2183 33
+CONVEX 1461 GT_PK(2,2) 51 3941 32 3940 3942 33
+CONVEX 1462 GT_PK(2,2) 226 3943 225 3944 1474 259
+CONVEX 1463 GT_PK(2,2) 226 3945 193 3943 3092 225
+CONVEX 1464 GT_PK(2,2) 294 3946 259 3947 1449 293
+CONVEX 1465 GT_PK(2,2) 294 3948 329 3947 2044 293
+CONVEX 1466 GT_PK(2,2) 294 3948 329 3949 2041 330
+CONVEX 1467 GT_PK(2,2) 294 3950 295 3949 3951 330
+CONVEX 1468 GT_PK(2,2) 331 3952 367 3953 2046 330
+CONVEX 1469 GT_PK(2,2) 331 3954 295 3953 3951 330
+CONVEX 1470 GT_PK(2,2) 134 3955 107 3956 3088 106
+CONVEX 1471 GT_PK(2,2) 134 3957 163 3958 3959 164
+CONVEX 1472 GT_PK(2,2) 195 3960 196 3961 3962 164
+CONVEX 1473 GT_PK(2,2) 195 3963 163 3961 3959 164
+CONVEX 1474 GT_PK(2,2) 232 3964 200 3965 3105 233
+CONVEX 1475 GT_PK(2,2) 111 3966 139 3967 3716 112
+CONVEX 1476 GT_PK(2,2) 111 3968 86 3967 3107 112
+CONVEX 1477 GT_PK(2,2) 63 3969 86 3970 3106 87
+CONVEX 1478 GT_PK(2,2) 63 3970 87 3971 2242 64
+CONVEX 1479 GT_PK(2,2) 63 3972 42 3973 2256 41
+CONVEX 1480 GT_PK(2,2) 63 3972 42 3971 2258 64
+CONVEX 1481 GT_PK(2,2) 62 3974 40 3975 3119 61
+CONVEX 1482 GT_PK(2,2) 62 3976 63 3977 3969 86
+CONVEX 1483 GT_PK(2,2) 62 3974 40 3978 3118 41
+CONVEX 1484 GT_PK(2,2) 62 3976 63 3978 3973 41
+CONVEX 1485 GT_PK(2,2) 38 3979 59 3980 3123 37
+CONVEX 1486 GT_PK(2,2) 38 3980 37 3981 2235 19
+CONVEX 1487 GT_PK(2,2) 38 3982 39 3983 2261 20
+CONVEX 1488 GT_PK(2,2) 38 3983 20 3984 1496 5
+CONVEX 1489 GT_PK(2,2) 38 3981 19 3984 3985 5
+CONVEX 1490 GT_PK(2,2) 83 3986 59 3987 3122 82
+CONVEX 1491 GT_PK(2,2) 83 3988 108 3987 3125 82
+CONVEX 1492 GT_PK(2,2) 83 3988 108 3989 3990 109
+CONVEX 1493 GT_PK(2,2) 165 3991 196 3992 3962 164
+CONVEX 1494 GT_PK(2,2) 1338 3993 1364 3994 3127 1339
+CONVEX 1495 GT_PK(2,2) 1338 3995 1337 3996 2272 1310
+CONVEX 1496 GT_PK(2,2) 1338 3997 1311 3994 2404 1339
+CONVEX 1497 GT_PK(2,2) 1338 3997 1311 3996 3224 1310
+CONVEX 1498 GT_PK(2,2) 1388 3998 1364 3999 4000 1387
+CONVEX 1499 GT_PK(2,2) 1388 3999 1387 4001 2267 1409
+CONVEX 1500 GT_PK(2,2) 1388 4002 1410 4001 2353 1409
+CONVEX 1501 GT_PK(2,2) 1388 3998 1364 4003 3126 1365
+CONVEX 1502 GT_PK(2,2) 1363 4004 1362 4005 2279 1337
+CONVEX 1503 GT_PK(2,2) 1363 4006 1338 4005 3995 1337
+CONVEX 1504 GT_PK(2,2) 1363 4006 1338 4007 3993 1364
+CONVEX 1505 GT_PK(2,2) 1363 4007 1364 4008 4000 1387
+CONVEX 1506 GT_PK(2,2) 1363 4008 1387 4009 2268 1386
+CONVEX 1507 GT_PK(2,2) 1363 4004 1362 4009 2276 1386
+CONVEX 1508 GT_PK(2,2) 1109 4010 1144 4011 3547 1145
+CONVEX 1509 GT_PK(2,2) 1109 4010 1144 4012 4013 1108
+CONVEX 1510 GT_PK(2,2) 1037 4014 1038 4015 3139 1075
+CONVEX 1511 GT_PK(2,2) 1037 4016 1074 4015 4017 1075
+CONVEX 1512 GT_PK(2,2) 962 4018 1000 4019 2283 1001
+CONVEX 1513 GT_PK(2,2) 962 4020 963 4019 3131 1001
+CONVEX 1514 GT_PK(2,2) 962 4021 924 4022 3798 923
+CONVEX 1515 GT_PK(2,2) 962 4020 963 4021 3134 924
+CONVEX 1516 GT_PK(2,2) 926 4023 886 4024 3147 925
+CONVEX 1517 GT_PK(2,2) 926 4024 925 4025 3133 964
+CONVEX 1518 GT_PK(2,2) 926 4026 927 4027 2296 887
+CONVEX 1519 GT_PK(2,2) 926 4023 886 4027 3151 887
+CONVEX 1520 GT_PK(2,2) 926 4028 965 4025 3143 964
+CONVEX 1521 GT_PK(2,2) 926 4028 965 4026 3140 927
+CONVEX 1522 GT_PK(2,2) 1349 4029 1374 4030 3164 1348
+CONVEX 1523 GT_PK(2,2) 1349 4031 1321 4030 3170 1348
+CONVEX 1524 GT_PK(2,2) 1349 4029 1374 4032 4033 1350
+CONVEX 1525 GT_PK(2,2) 1191 4034 1157 4035 2769 1192
+CONVEX 1526 GT_PK(2,2) 1191 4036 1190 4037 3244 1156
+CONVEX 1527 GT_PK(2,2) 1191 4034 1157 4037 4038 1156
+CONVEX 1528 GT_PK(2,2) 1292 4039 1261 4040 3189 1293
+CONVEX 1529 GT_PK(2,2) 1292 4041 1321 4042 3172 1291
+CONVEX 1530 GT_PK(2,2) 1226 4043 1259 4044 4045 1258
+CONVEX 1531 GT_PK(2,2) 1226 4046 1193 4047 1740 1192
+CONVEX 1532 GT_PK(2,2) 1260 4048 1292 4049 4039 1261
+CONVEX 1533 GT_PK(2,2) 1260 4050 1259 4051 4052 1291
+CONVEX 1534 GT_PK(2,2) 1260 4048 1292 4051 4042 1291
+CONVEX 1535 GT_PK(2,2) 1114 4053 1077 4054 3198 1078
+CONVEX 1536 GT_PK(2,2) 1114 4053 1077 4055 3195 1113
+CONVEX 1537 GT_PK(2,2) 1114 4054 1078 4056 2380 1115
+CONVEX 1538 GT_PK(2,2) 1114 4057 1150 4056 3206 1115
+CONVEX 1539 GT_PK(2,2) 1114 4055 1113 4058 2373 1149
+CONVEX 1540 GT_PK(2,2) 1114 4057 1150 4058 2377 1149
+CONVEX 1541 GT_PK(2,2) 1283 4059 1251 4060 3213 1282
+CONVEX 1542 GT_PK(2,2) 1283 4061 1313 4062 4063 1284
+CONVEX 1543 GT_PK(2,2) 1283 4064 1252 4062 2402 1284
+CONVEX 1544 GT_PK(2,2) 1283 4059 1251 4064 3218 1252
+CONVEX 1545 GT_PK(2,2) 1283 4060 1282 4065 2407 1312
+CONVEX 1546 GT_PK(2,2) 1283 4061 1313 4065 4066 1312
+CONVEX 1547 GT_PK(2,2) 1340 4067 1366 4068 3232 1341
+CONVEX 1548 GT_PK(2,2) 1340 4069 1313 4070 4066 1312
+CONVEX 1549 GT_PK(2,2) 1340 4069 1313 4068 4071 1341
+CONVEX 1550 GT_PK(2,2) 1340 4070 1312 4072 2405 1339
+CONVEX 1551 GT_PK(2,2) 1340 4073 1365 4072 3128 1339
+CONVEX 1552 GT_PK(2,2) 1340 4067 1366 4073 4074 1365
+CONVEX 1553 GT_PK(2,2) 1315 4075 1342 4076 3234 1343
+CONVEX 1554 GT_PK(2,2) 1315 4077 1286 4078 3160 1285
+CONVEX 1555 GT_PK(2,2) 1315 4077 1286 4079 4080 1316
+CONVEX 1556 GT_PK(2,2) 1315 4076 1343 4079 2342 1316
+CONVEX 1557 GT_PK(2,2) 1120 4081 1155 4082 3238 1119
+CONVEX 1558 GT_PK(2,2) 1120 4081 1155 4083 3243 1156
+CONVEX 1559 GT_PK(2,2) 1120 4084 1083 4082 3639 1119
+CONVEX 1560 GT_PK(2,2) 626 4085 665 4086 3258 625
+CONVEX 1561 GT_PK(2,2) 626 4087 666 4085 3251 665
+CONVEX 1562 GT_PK(2,2) 626 4088 587 4086 2428 625
+CONVEX 1563 GT_PK(2,2) 703 4089 704 4090 1775 744
+CONVEX 1564 GT_PK(2,2) 703 4091 664 4089 3254 704
+CONVEX 1565 GT_PK(2,2) 703 4092 743 4090 1529 744
+CONVEX 1566 GT_PK(2,2) 703 4091 664 4093 3256 663
+CONVEX 1567 GT_PK(2,2) 703 4094 702 4093 3296 663
+CONVEX 1568 GT_PK(2,2) 703 4094 702 4092 3297 743
+CONVEX 1569 GT_PK(2,2) 503 4095 504 4096 4097 465
+CONVEX 1570 GT_PK(2,2) 503 4095 504 4098 3283 542
+CONVEX 1571 GT_PK(2,2) 499 4099 460 4100 1982 498
+CONVEX 1572 GT_PK(2,2) 466 4101 504 4102 4097 465
+CONVEX 1573 GT_PK(2,2) 466 4103 428 4104 1556 467
+CONVEX 1574 GT_PK(2,2) 466 4105 505 4104 3264 467
+CONVEX 1575 GT_PK(2,2) 466 4101 504 4105 3279 505
+CONVEX 1576 GT_PK(2,2) 466 4106 427 4102 4107 465
+CONVEX 1577 GT_PK(2,2) 466 4106 427 4103 2507 428
+CONVEX 1578 GT_PK(2,2) 660 4108 661 4109 4110 700
+CONVEX 1579 GT_PK(2,2) 660 4111 621 4108 3305 661
+CONVEX 1580 GT_PK(2,2) 701 4112 702 4113 3294 741
+CONVEX 1581 GT_PK(2,2) 701 4112 702 4114 3295 662
+CONVEX 1582 GT_PK(2,2) 701 4114 662 4115 3301 661
+CONVEX 1583 GT_PK(2,2) 701 4115 661 4116 4110 700
+CONVEX 1584 GT_PK(2,2) 701 4117 740 4116 3269 700
+CONVEX 1585 GT_PK(2,2) 701 4117 740 4113 3268 741
+CONVEX 1586 GT_PK(2,2) 583 4118 584 4119 3290 623
+CONVEX 1587 GT_PK(2,2) 583 4120 622 4119 3299 623
+CONVEX 1588 GT_PK(2,2) 583 4118 584 4121 3292 544
+CONVEX 1589 GT_PK(2,2) 583 4121 544 4122 3284 543
+CONVEX 1590 GT_PK(2,2) 583 4122 543 4123 3281 582
+CONVEX 1591 GT_PK(2,2) 583 4120 622 4123 3303 582
+CONVEX 1592 GT_PK(2,2) 1091 4124 1054 4125 3322 1092
+CONVEX 1593 GT_PK(2,2) 1091 4126 1127 4127 4128 1090
+CONVEX 1594 GT_PK(2,2) 1053 4129 1014 4130 2783 1052
+CONVEX 1595 GT_PK(2,2) 1053 4131 1090 4130 3692 1052
+CONVEX 1596 GT_PK(2,2) 1053 4129 1014 4132 2787 1015
+CONVEX 1597 GT_PK(2,2) 1053 4133 1054 4132 3342 1015
+CONVEX 1598 GT_PK(2,2) 1053 4134 1091 4131 4127 1090
+CONVEX 1599 GT_PK(2,2) 1053 4134 1091 4133 4124 1054
+CONVEX 1600 GT_PK(2,2) 425 4135 388 4136 3358 387
+CONVEX 1601 GT_PK(2,2) 389 4137 427 4138 2508 390
+CONVEX 1602 GT_PK(2,2) 389 4139 388 4140 3356 352
+CONVEX 1603 GT_PK(2,2) 389 4141 353 4138 2518 390
+CONVEX 1604 GT_PK(2,2) 389 4141 353 4140 2516 352
+CONVEX 1605 GT_PK(2,2) 350 4142 314 4143 1701 315
+CONVEX 1606 GT_PK(2,2) 350 4144 351 4143 3354 315
+CONVEX 1607 GT_PK(2,2) 350 4145 349 4142 3744 314
+CONVEX 1608 GT_PK(2,2) 350 4144 351 4146 3357 387
+CONVEX 1609 GT_PK(2,2) 877 4147 838 4148 2520 878
+CONVEX 1610 GT_PK(2,2) 877 4149 837 4147 3362 838
+CONVEX 1611 GT_PK(2,2) 800 4150 799 4151 3365 839
+CONVEX 1612 GT_PK(2,2) 800 4152 761 4153 2668 801
+CONVEX 1613 GT_PK(2,2) 800 4152 761 4154 1919 760
+CONVEX 1614 GT_PK(2,2) 800 4150 799 4154 3368 760
+CONVEX 1615 GT_PK(2,2) 676 4155 637 4156 3370 636
+CONVEX 1616 GT_PK(2,2) 676 4156 636 4157 4158 675
+CONVEX 1617 GT_PK(2,2) 676 4159 715 4157 2538 675
+CONVEX 1618 GT_PK(2,2) 676 4159 715 4160 3517 716
+CONVEX 1619 GT_PK(2,2) 676 4161 677 4160 1888 716
+CONVEX 1620 GT_PK(2,2) 676 4155 637 4161 3373 677
+CONVEX 1621 GT_PK(2,2) 479 4162 518 4163 3374 517
+CONVEX 1622 GT_PK(2,2) 479 4163 517 4164 2528 478
+CONVEX 1623 GT_PK(2,2) 479 4165 440 4164 3037 478
+CONVEX 1624 GT_PK(2,2) 479 4162 518 4166 3910 480
+CONVEX 1625 GT_PK(2,2) 515 4167 516 4168 2526 477
+CONVEX 1626 GT_PK(2,2) 475 4169 436 4170 3035 437
+CONVEX 1627 GT_PK(2,2) 511 4171 472 4172 4173 510
+CONVEX 1628 GT_PK(2,2) 511 4171 472 4174 3865 473
+CONVEX 1629 GT_PK(2,2) 550 4175 549 4176 3859 589
+CONVEX 1630 GT_PK(2,2) 550 4175 549 4177 3003 510
+CONVEX 1631 GT_PK(2,2) 550 4178 511 4177 4172 510
+CONVEX 1632 GT_PK(2,2) 635 4179 636 4180 4158 675
+CONVEX 1633 GT_PK(2,2) 635 4181 596 4179 2534 636
+CONVEX 1634 GT_PK(2,2) 673 4182 713 4183 3432 712
+CONVEX 1635 GT_PK(2,2) 593 4184 592 4185 4186 632
+CONVEX 1636 GT_PK(2,2) 593 4184 592 4187 4188 553
+CONVEX 1637 GT_PK(2,2) 709 4189 749 4190 4191 710
+CONVEX 1638 GT_PK(2,2) 709 4189 749 4192 3411 708
+CONVEX 1639 GT_PK(2,2) 709 4190 710 4193 3379 670
+CONVEX 1640 GT_PK(2,2) 709 4192 708 4193 3395 670
+CONVEX 1641 GT_PK(2,2) 905 4194 865 4195 3403 904
+CONVEX 1642 GT_PK(2,2) 905 4196 943 4195 4197 904
+CONVEX 1643 GT_PK(2,2) 827 4198 787 4199 3407 788
+CONVEX 1644 GT_PK(2,2) 827 4198 787 4200 2546 826
+CONVEX 1645 GT_PK(2,2) 866 4201 867 4202 4203 906
+CONVEX 1646 GT_PK(2,2) 866 4204 905 4202 4205 906
+CONVEX 1647 GT_PK(2,2) 866 4204 905 4206 4194 865
+CONVEX 1648 GT_PK(2,2) 866 4207 827 4201 4208 867
+CONVEX 1649 GT_PK(2,2) 866 4206 865 4209 3402 826
+CONVEX 1650 GT_PK(2,2) 866 4207 827 4209 4200 826
+CONVEX 1651 GT_PK(2,2) 832 4210 831 4211 3439 792
+CONVEX 1652 GT_PK(2,2) 832 4211 792 4212 3387 793
+CONVEX 1653 GT_PK(2,2) 832 4213 833 4212 3507 793
+CONVEX 1654 GT_PK(2,2) 832 4213 833 4214 3504 872
+CONVEX 1655 GT_PK(2,2) 830 4215 831 4216 3440 791
+CONVEX 1656 GT_PK(2,2) 828 4217 867 4218 4219 868
+CONVEX 1657 GT_PK(2,2) 828 4220 789 4221 3442 788
+CONVEX 1658 GT_PK(2,2) 828 4222 827 4221 4199 788
+CONVEX 1659 GT_PK(2,2) 828 4222 827 4217 4208 867
+CONVEX 1660 GT_PK(2,2) 986 4223 1025 4224 3448 1024
+CONVEX 1661 GT_PK(2,2) 986 4225 985 4224 2602 1024
+CONVEX 1662 GT_PK(2,2) 986 4226 947 4227 3457 948
+CONVEX 1663 GT_PK(2,2) 986 4226 947 4225 4228 985
+CONVEX 1664 GT_PK(2,2) 907 4229 867 4230 4219 868
+CONVEX 1665 GT_PK(2,2) 907 4229 867 4231 4203 906
+CONVEX 1666 GT_PK(2,2) 907 4232 945 4231 4233 906
+CONVEX 1667 GT_PK(2,2) 990 4234 991 4235 3460 1029
+CONVEX 1668 GT_PK(2,2) 990 4235 1029 4236 3429 1028
+CONVEX 1669 GT_PK(2,2) 990 4237 989 4236 2619 1028
+CONVEX 1670 GT_PK(2,2) 990 4238 951 4237 3485 989
+CONVEX 1671 GT_PK(2,2) 990 4234 991 4239 3476 952
+CONVEX 1672 GT_PK(2,2) 990 4238 951 4239 3489 952
+CONVEX 1673 GT_PK(2,2) 1072 4240 1073 4241 4242 1035
+CONVEX 1674 GT_PK(2,2) 1072 4243 1109 4244 4012 1108
+CONVEX 1675 GT_PK(2,2) 1072 4243 1109 4240 4245 1073
+CONVEX 1676 GT_PK(2,2) 994 4246 993 4247 3471 1032
+CONVEX 1677 GT_PK(2,2) 994 4248 1033 4247 3463 1032
+CONVEX 1678 GT_PK(2,2) 994 4246 993 4249 4250 955
+CONVEX 1679 GT_PK(2,2) 994 4251 956 4249 4252 955
+CONVEX 1680 GT_PK(2,2) 954 4253 953 4254 3478 915
+CONVEX 1681 GT_PK(2,2) 954 4255 993 4256 4250 955
+CONVEX 1682 GT_PK(2,2) 954 4255 993 4257 3469 992
+CONVEX 1683 GT_PK(2,2) 954 4253 953 4257 3477 992
+CONVEX 1684 GT_PK(2,2) 954 4258 916 4256 4259 955
+CONVEX 1685 GT_PK(2,2) 954 4258 916 4254 4260 915
+CONVEX 1686 GT_PK(2,2) 1238 4261 1269 4262 2722 1237
+CONVEX 1687 GT_PK(2,2) 1238 4263 1205 4262 3491 1237
+CONVEX 1688 GT_PK(2,2) 1238 4261 1269 4264 2726 1270
+CONVEX 1689 GT_PK(2,2) 1238 4265 1239 4264 3613 1270
+CONVEX 1690 GT_PK(2,2) 1238 4263 1205 4266 3583 1206
+CONVEX 1691 GT_PK(2,2) 1238 4265 1239 4266 3609 1206
+CONVEX 1692 GT_PK(2,2) 1210 4267 1243 4268 2748 1211
+CONVEX 1693 GT_PK(2,2) 1210 4267 1243 4269 3617 1242
+CONVEX 1694 GT_PK(2,2) 795 4270 834 4271 3510 835
+CONVEX 1695 GT_PK(2,2) 795 4272 755 4273 3518 756
+CONVEX 1696 GT_PK(2,2) 795 4270 834 4274 3512 794
+CONVEX 1697 GT_PK(2,2) 795 4272 755 4274 3515 794
+CONVEX 1698 GT_PK(2,2) 795 4275 796 4273 1889 756
+CONVEX 1699 GT_PK(2,2) 795 4275 796 4271 1895 835
+CONVEX 1700 GT_PK(2,2) 1403 4276 1404 4277 2681 1422
+CONVEX 1701 GT_PK(2,2) 1403 4278 1402 4279 4280 1381
+CONVEX 1702 GT_PK(2,2) 1333 4281 1334 4282 3570 1306
+CONVEX 1703 GT_PK(2,2) 1333 4283 1305 4282 4284 1306
+CONVEX 1704 GT_PK(2,2) 1296 4285 1324 4286 4287 1297
+CONVEX 1705 GT_PK(2,2) 1296 4288 1267 4289 3596 1266
+CONVEX 1706 GT_PK(2,2) 1296 4288 1267 4286 2737 1297
+CONVEX 1707 GT_PK(2,2) 1325 4290 1324 4291 4292 1351
+CONVEX 1708 GT_PK(2,2) 1325 4293 1326 4294 3573 1298
+CONVEX 1709 GT_PK(2,2) 1325 4293 1326 4291 3577 1351
+CONVEX 1710 GT_PK(2,2) 1325 4294 1298 4295 2717 1297
+CONVEX 1711 GT_PK(2,2) 1325 4290 1324 4295 4287 1297
+CONVEX 1712 GT_PK(2,2) 1398 4296 1353 4297 4298 1376
+CONVEX 1713 GT_PK(2,2) 1146 4299 1147 4300 2708 1181
+CONVEX 1714 GT_PK(2,2) 1146 4301 1180 4300 3542 1181
+CONVEX 1715 GT_PK(2,2) 1146 4301 1180 4302 3544 1145
+CONVEX 1716 GT_PK(2,2) 1276 4303 1305 4304 4284 1306
+CONVEX 1717 GT_PK(2,2) 1276 4305 1277 4304 3568 1306
+CONVEX 1718 GT_PK(2,2) 1276 4305 1277 4306 3555 1245
+CONVEX 1719 GT_PK(2,2) 1276 4306 1245 4307 2701 1244
+CONVEX 1720 GT_PK(2,2) 1352 4308 1326 4309 3574 1327
+CONVEX 1721 GT_PK(2,2) 1352 4308 1326 4310 3576 1375
+CONVEX 1722 GT_PK(2,2) 1352 4311 1353 4309 4312 1327
+CONVEX 1723 GT_PK(2,2) 1352 4310 1375 4313 4314 1376
+CONVEX 1724 GT_PK(2,2) 1352 4311 1353 4313 4298 1376
+CONVEX 1725 GT_PK(2,2) 1202 4315 1203 4316 3607 1169
+CONVEX 1726 GT_PK(2,2) 1202 4316 1169 4317 2734 1168
+CONVEX 1727 GT_PK(2,2) 1202 4318 1235 4319 3599 1234
+CONVEX 1728 GT_PK(2,2) 1202 4318 1235 4315 3601 1203
+CONVEX 1729 GT_PK(2,2) 1202 4320 1201 4319 1863 1234
+CONVEX 1730 GT_PK(2,2) 1202 4320 1201 4317 2572 1168
+CONVEX 1731 GT_PK(2,2) 1275 4321 1274 4322 3620 1304
+CONVEX 1732 GT_PK(2,2) 1275 4321 1274 4323 3615 1243
+CONVEX 1733 GT_PK(2,2) 1275 4324 1305 4322 4325 1304
+CONVEX 1734 GT_PK(2,2) 1275 4326 1276 4324 4303 1305
+CONVEX 1735 GT_PK(2,2) 1275 4323 1243 4327 2747 1244
+CONVEX 1736 GT_PK(2,2) 1275 4326 1276 4327 4307 1244
+CONVEX 1737 GT_PK(2,2) 1118 4328 1082 4329 3647 1081
+CONVEX 1738 GT_PK(2,2) 1118 4330 1117 4329 3650 1081
+CONVEX 1739 GT_PK(2,2) 1118 4328 1082 4331 3638 1119
+CONVEX 1740 GT_PK(2,2) 1118 4330 1117 4332 3652 1153
+CONVEX 1741 GT_PK(2,2) 1118 4333 1154 4331 3239 1119
+CONVEX 1742 GT_PK(2,2) 1118 4333 1154 4332 2414 1153
+CONVEX 1743 GT_PK(2,2) 1086 4334 1123 4335 2792 1087
+CONVEX 1744 GT_PK(2,2) 1086 4336 1122 4334 3673 1123
+CONVEX 1745 GT_PK(2,2) 1086 4337 1049 4335 3681 1087
+CONVEX 1746 GT_PK(2,2) 1121 4338 1157 4339 4038 1156
+CONVEX 1747 GT_PK(2,2) 1121 4340 1122 4338 3676 1157
+CONVEX 1748 GT_PK(2,2) 1121 4341 1120 4339 4083 1156
+CONVEX 1749 GT_PK(2,2) 935 4342 973 4343 4344 974
+CONVEX 1750 GT_PK(2,2) 935 4345 895 4346 3328 896
+CONVEX 1751 GT_PK(2,2) 935 4347 936 4346 1797 896
+CONVEX 1752 GT_PK(2,2) 935 4343 974 4347 2778 936
+CONVEX 1753 GT_PK(2,2) 934 4348 895 4349 1959 894
+CONVEX 1754 GT_PK(2,2) 934 4350 973 4351 3677 972
+CONVEX 1755 GT_PK(2,2) 934 4352 935 4348 4345 895
+CONVEX 1756 GT_PK(2,2) 934 4352 935 4350 4342 973
+CONVEX 1757 GT_PK(2,2) 934 4349 894 4353 3838 933
+CONVEX 1758 GT_PK(2,2) 934 4351 972 4353 2750 933
+CONVEX 1759 GT_PK(2,2) 1012 4354 1051 4355 2788 1013
+CONVEX 1760 GT_PK(2,2) 1012 4356 974 4355 2780 1013
+CONVEX 1761 GT_PK(2,2) 1012 4357 973 4356 4344 974
+CONVEX 1762 GT_PK(2,2) 1012 4357 973 4358 3678 1011
+CONVEX 1763 GT_PK(2,2) 1012 4359 1050 4358 3682 1011
+CONVEX 1764 GT_PK(2,2) 1012 4359 1050 4354 4360 1051
+CONVEX 1765 GT_PK(2,2) 1159 4361 1160 4362 3683 1124
+CONVEX 1766 GT_PK(2,2) 1159 4363 1193 4364 1741 1158
+CONVEX 1767 GT_PK(2,2) 1159 4365 1194 4363 4366 1193
+CONVEX 1768 GT_PK(2,2) 1159 4361 1160 4365 3687 1194
+CONVEX 1769 GT_PK(2,2) 1159 4367 1123 4364 3675 1158
+CONVEX 1770 GT_PK(2,2) 1159 4362 1124 4367 2790 1123
+CONVEX 1771 GT_PK(2,2) 1088 4368 1124 4369 3685 1125
+CONVEX 1772 GT_PK(2,2) 1088 4370 1089 4369 4371 1125
+CONVEX 1773 GT_PK(2,2) 1088 4368 1124 4372 2791 1087
+CONVEX 1774 GT_PK(2,2) 1088 4370 1089 4373 3689 1051
+CONVEX 1775 GT_PK(2,2) 1088 4374 1050 4372 3680 1087
+CONVEX 1776 GT_PK(2,2) 1088 4374 1050 4373 4360 1051
+CONVEX 1777 GT_PK(2,2) 1128 4375 1127 4376 4377 1163
+CONVEX 1778 GT_PK(2,2) 1128 4378 1092 4379 3308 1129
+CONVEX 1779 GT_PK(2,2) 1128 4380 1091 4378 4125 1092
+CONVEX 1780 GT_PK(2,2) 1128 4380 1091 4375 4126 1127
+CONVEX 1781 GT_PK(2,2) 1128 4381 1164 4379 1542 1129
+CONVEX 1782 GT_PK(2,2) 1128 4376 1163 4381 2793 1164
+CONVEX 1783 GT_PK(2,2) 1161 4382 1160 4383 3684 1125
+CONVEX 1784 GT_PK(2,2) 1161 4384 1195 4385 3185 1196
+CONVEX 1785 GT_PK(2,2) 1161 4382 1160 4384 3686 1195
+CONVEX 1786 GT_PK(2,2) 1162 4386 1163 4387 2795 1197
+CONVEX 1787 GT_PK(2,2) 1162 4388 1127 4386 4377 1163
+CONVEX 1788 GT_PK(2,2) 1162 4387 1197 4389 1964 1196
+CONVEX 1789 GT_PK(2,2) 1162 4390 1161 4389 4385 1196
+CONVEX 1790 GT_PK(2,2) 271 4391 305 4392 2917 306
+CONVEX 1791 GT_PK(2,2) 271 4393 272 4392 3702 306
+CONVEX 1792 GT_PK(2,2) 240 4394 241 4395 1972 274
+CONVEX 1793 GT_PK(2,2) 273 4396 307 4397 2009 308
+CONVEX 1794 GT_PK(2,2) 273 4398 272 4396 3701 307
+CONVEX 1795 GT_PK(2,2) 273 4399 274 4397 2897 308
+CONVEX 1796 GT_PK(2,2) 273 4400 240 4399 4395 274
+CONVEX 1797 GT_PK(2,2) 67 4401 91 4402 3705 90
+CONVEX 1798 GT_PK(2,2) 67 4403 66 4402 2828 90
+CONVEX 1799 GT_PK(2,2) 67 4403 66 4404 1978 45
+CONVEX 1800 GT_PK(2,2) 67 4405 46 4404 3709 45
+CONVEX 1801 GT_PK(2,2) 47 4406 28 4407 2821 29
+CONVEX 1802 GT_PK(2,2) 47 4408 46 4406 3710 28
+CONVEX 1803 GT_PK(2,2) 47 4407 29 4409 2820 48
+CONVEX 1804 GT_PK(2,2) 47 4410 69 4409 4411 48
+CONVEX 1805 GT_PK(2,2) 567 4412 528 4413 2841 527
+CONVEX 1806 GT_PK(2,2) 567 4414 568 4412 3722 528
+CONVEX 1807 GT_PK(2,2) 607 4415 608 4416 2944 647
+CONVEX 1808 GT_PK(2,2) 607 4417 568 4415 3728 608
+CONVEX 1809 GT_PK(2,2) 607 4418 567 4417 4414 568
+CONVEX 1810 GT_PK(2,2) 607 4419 646 4416 3695 647
+CONVEX 1811 GT_PK(2,2) 607 4419 646 4420 2815 606
+CONVEX 1812 GT_PK(2,2) 607 4418 567 4420 4421 606
+CONVEX 1813 GT_PK(2,2) 386 4422 349 4423 3748 385
+CONVEX 1814 GT_PK(2,2) 386 4423 385 4424 2856 423
+CONVEX 1815 GT_PK(2,2) 386 4425 350 4426 4146 387
+CONVEX 1816 GT_PK(2,2) 386 4425 350 4422 4145 349
+CONVEX 1817 GT_PK(2,2) 496 4427 535 4428 3777 497
+CONVEX 1818 GT_PK(2,2) 496 4429 457 4430 2885 495
+CONVEX 1819 GT_PK(2,2) 496 4431 458 4428 3785 497
+CONVEX 1820 GT_PK(2,2) 496 4431 458 4429 3787 457
+CONVEX 1821 GT_PK(2,2) 534 4432 535 4433 3774 574
+CONVEX 1822 GT_PK(2,2) 534 4434 573 4435 3809 533
+CONVEX 1823 GT_PK(2,2) 534 4434 573 4433 3807 574
+CONVEX 1824 GT_PK(2,2) 534 4436 495 4435 2882 533
+CONVEX 1825 GT_PK(2,2) 534 4437 496 4436 4430 495
+CONVEX 1826 GT_PK(2,2) 534 4437 496 4432 4427 535
+CONVEX 1827 GT_PK(2,2) 803 4438 763 4439 3805 764
+CONVEX 1828 GT_PK(2,2) 803 4438 763 4440 3801 802
+CONVEX 1829 GT_PK(2,2) 804 4441 843 4442 3799 844
+CONVEX 1830 GT_PK(2,2) 804 4443 765 4444 2926 805
+CONVEX 1831 GT_PK(2,2) 804 4442 844 4444 2934 805
+CONVEX 1832 GT_PK(2,2) 804 4443 765 4445 2931 764
+CONVEX 1833 GT_PK(2,2) 804 4446 803 4445 4439 764
+CONVEX 1834 GT_PK(2,2) 804 4446 803 4441 4447 843
+CONVEX 1835 GT_PK(2,2) 693 4448 692 4449 4450 732
+CONVEX 1836 GT_PK(2,2) 693 4451 733 4449 4452 732
+CONVEX 1837 GT_PK(2,2) 693 4451 733 4453 4454 694
+CONVEX 1838 GT_PK(2,2) 693 4448 692 4455 3815 653
+CONVEX 1839 GT_PK(2,2) 731 4456 692 4457 4450 732
+CONVEX 1840 GT_PK(2,2) 731 4458 771 4457 4459 732
+CONVEX 1841 GT_PK(2,2) 731 4460 691 4461 2981 730
+CONVEX 1842 GT_PK(2,2) 731 4456 692 4460 3816 691
+CONVEX 1843 GT_PK(2,2) 731 4462 770 4461 3852 730
+CONVEX 1844 GT_PK(2,2) 731 4462 770 4458 4463 771
+CONVEX 1845 GT_PK(2,2) 892 4464 932 4465 1948 931
+CONVEX 1846 GT_PK(2,2) 892 4466 891 4465 2988 931
+CONVEX 1847 GT_PK(2,2) 892 4467 893 4464 3840 932
+CONVEX 1848 GT_PK(2,2) 892 4467 893 4468 3841 853
+CONVEX 1849 GT_PK(2,2) 816 4469 815 4470 3835 855
+CONVEX 1850 GT_PK(2,2) 816 4471 856 4470 3329 855
+CONVEX 1851 GT_PK(2,2) 816 4472 777 4473 3325 817
+CONVEX 1852 GT_PK(2,2) 816 4471 856 4473 3336 817
+CONVEX 1853 GT_PK(2,2) 814 4474 815 4475 3834 854
+CONVEX 1854 GT_PK(2,2) 814 4476 853 4475 3842 854
+CONVEX 1855 GT_PK(2,2) 814 4477 774 4478 2997 813
+CONVEX 1856 GT_PK(2,2) 814 4476 853 4478 4479 813
+CONVEX 1857 GT_PK(2,2) 772 4480 812 4481 3844 773
+CONVEX 1858 GT_PK(2,2) 772 4482 733 4481 4483 773
+CONVEX 1859 GT_PK(2,2) 772 4482 733 4484 4452 732
+CONVEX 1860 GT_PK(2,2) 772 4485 771 4484 4459 732
+CONVEX 1861 GT_PK(2,2) 849 4486 848 4487 3813 888
+CONVEX 1862 GT_PK(2,2) 849 4488 889 4487 3845 888
+CONVEX 1863 GT_PK(2,2) 734 4489 695 4490 3848 694
+CONVEX 1864 GT_PK(2,2) 734 4491 774 4492 2998 773
+CONVEX 1865 GT_PK(2,2) 734 4491 774 4493 4494 735
+CONVEX 1866 GT_PK(2,2) 734 4489 695 4493 4495 735
+CONVEX 1867 GT_PK(2,2) 734 4496 733 4492 4483 773
+CONVEX 1868 GT_PK(2,2) 734 4496 733 4490 4454 694
+CONVEX 1869 GT_PK(2,2) 471 4497 510 4498 3005 509
+CONVEX 1870 GT_PK(2,2) 471 4499 472 4497 4173 510
+CONVEX 1871 GT_PK(2,2) 435 4500 436 4501 3033 397
+CONVEX 1872 GT_PK(2,2) 435 4501 397 4502 2078 396
+CONVEX 1873 GT_PK(2,2) 435 4503 434 4502 3861 396
+CONVEX 1874 GT_PK(2,2) 435 4503 434 4504 3864 473
+CONVEX 1875 GT_PK(2,2) 604 4505 643 4506 3873 603
+CONVEX 1876 GT_PK(2,2) 604 4505 643 4507 3875 644
+CONVEX 1877 GT_PK(2,2) 487 4508 526 4509 3885 525
+CONVEX 1878 GT_PK(2,2) 487 4510 488 4508 3888 526
+CONVEX 1879 GT_PK(2,2) 487 4511 486 4509 3891 525
+CONVEX 1880 GT_PK(2,2) 485 4512 524 4513 3024 523
+CONVEX 1881 GT_PK(2,2) 485 4514 486 4512 3890 524
+CONVEX 1882 GT_PK(2,2) 485 4515 484 4513 3022 523
+CONVEX 1883 GT_PK(2,2) 485 4514 486 4516 4517 447
+CONVEX 1884 GT_PK(2,2) 481 4518 482 4519 3027 520
+CONVEX 1885 GT_PK(2,2) 481 4520 519 4519 3906 520
+CONVEX 1886 GT_PK(2,2) 481 4518 482 4521 3895 443
+CONVEX 1887 GT_PK(2,2) 481 4520 519 4522 3909 480
+CONVEX 1888 GT_PK(2,2) 481 4523 442 4521 3868 443
+CONVEX 1889 GT_PK(2,2) 481 4523 442 4522 4524 480
+CONVEX 1890 GT_PK(2,2) 324 4525 288 4526 3915 289
+CONVEX 1891 GT_PK(2,2) 324 4527 325 4526 2141 289
+CONVEX 1892 GT_PK(2,2) 324 4528 323 4529 3049 360
+CONVEX 1893 GT_PK(2,2) 324 4525 288 4528 3913 323
+CONVEX 1894 GT_PK(2,2) 324 4530 361 4529 2068 360
+CONVEX 1895 GT_PK(2,2) 324 4530 361 4527 2069 325
+CONVEX 1896 GT_PK(2,2) 179 4531 180 4532 3061 211
+CONVEX 1897 GT_PK(2,2) 179 4532 211 4533 4534 210
+CONVEX 1898 GT_PK(2,2) 179 4535 178 4533 4536 210
+CONVEX 1899 GT_PK(2,2) 179 4535 178 4537 4538 149
+CONVEX 1900 GT_PK(2,2) 179 4539 150 4537 3924 149
+CONVEX 1901 GT_PK(2,2) 179 4539 150 4531 3921 180
+CONVEX 1902 GT_PK(2,2) 243 4540 211 4541 4534 210
+CONVEX 1903 GT_PK(2,2) 243 4542 244 4540 3918 211
+CONVEX 1904 GT_PK(2,2) 243 4541 210 4543 4544 242
+CONVEX 1905 GT_PK(2,2) 243 4542 244 4545 3920 277
+CONVEX 1906 GT_PK(2,2) 243 4546 276 4543 1985 242
+CONVEX 1907 GT_PK(2,2) 243 4545 277 4546 3751 276
+CONVEX 1908 GT_PK(2,2) 123 4547 150 4548 3923 122
+CONVEX 1909 GT_PK(2,2) 123 4549 97 4548 3930 122
+CONVEX 1910 GT_PK(2,2) 123 4550 151 4551 2181 124
+CONVEX 1911 GT_PK(2,2) 123 4547 150 4550 3922 151
+CONVEX 1912 GT_PK(2,2) 123 4551 124 4552 1668 98
+CONVEX 1913 GT_PK(2,2) 123 4549 97 4552 3935 98
+CONVEX 1914 GT_PK(2,2) 95 4553 121 4554 4555 120
+CONVEX 1915 GT_PK(2,2) 95 4553 121 4556 3927 96
+CONVEX 1916 GT_PK(2,2) 70 4557 69 4558 4411 48
+CONVEX 1917 GT_PK(2,2) 70 4559 93 4557 3936 69
+CONVEX 1918 GT_PK(2,2) 50 4560 32 4561 4562 31
+CONVEX 1919 GT_PK(2,2) 50 4563 51 4560 3941 32
+CONVEX 1920 GT_PK(2,2) 368 4564 367 4565 3012 405
+CONVEX 1921 GT_PK(2,2) 368 4566 331 4564 3952 367
+CONVEX 1922 GT_PK(2,2) 446 4567 484 4568 3902 445
+CONVEX 1923 GT_PK(2,2) 446 4569 485 4570 4516 447
+CONVEX 1924 GT_PK(2,2) 446 4569 485 4567 4515 484
+CONVEX 1925 GT_PK(2,2) 267 4571 302 4572 2230 268
+CONVEX 1926 GT_PK(2,2) 267 4572 268 4573 2889 234
+CONVEX 1927 GT_PK(2,2) 267 4574 233 4573 2241 234
+CONVEX 1928 GT_PK(2,2) 264 4575 263 4576 4577 298
+CONVEX 1929 GT_PK(2,2) 133 4578 134 4579 3956 106
+CONVEX 1930 GT_PK(2,2) 133 4580 105 4581 2221 132
+CONVEX 1931 GT_PK(2,2) 133 4580 105 4579 2219 106
+CONVEX 1932 GT_PK(2,2) 133 4582 162 4581 2229 132
+CONVEX 1933 GT_PK(2,2) 133 4583 163 4582 4584 162
+CONVEX 1934 GT_PK(2,2) 133 4578 134 4583 3957 163
+CONVEX 1935 GT_PK(2,2) 135 4585 108 4586 3124 107
+CONVEX 1936 GT_PK(2,2) 135 4587 134 4586 3955 107
+CONVEX 1937 GT_PK(2,2) 135 4587 134 4588 3958 164
+CONVEX 1938 GT_PK(2,2) 135 4589 165 4588 3992 164
+CONVEX 1939 GT_PK(2,2) 194 4590 226 4591 3945 193
+CONVEX 1940 GT_PK(2,2) 194 4592 195 4593 3963 163
+CONVEX 1941 GT_PK(2,2) 194 4594 227 4590 4595 226
+CONVEX 1942 GT_PK(2,2) 194 4594 227 4592 4596 195
+CONVEX 1943 GT_PK(2,2) 194 4593 163 4597 4584 162
+CONVEX 1944 GT_PK(2,2) 194 4591 193 4597 3091 162
+CONVEX 1945 GT_PK(2,2) 375 4598 376 4599 2907 413
+CONVEX 1946 GT_PK(2,2) 375 4600 374 4601 4602 338
+CONVEX 1947 GT_PK(2,2) 375 4598 376 4603 2922 339
+CONVEX 1948 GT_PK(2,2) 375 4601 338 4603 3093 339
+CONVEX 1949 GT_PK(2,2) 199 4604 232 4605 3964 200
+CONVEX 1950 GT_PK(2,2) 199 4606 167 4607 4608 198
+CONVEX 1951 GT_PK(2,2) 199 4607 198 4609 4610 231
+CONVEX 1952 GT_PK(2,2) 199 4604 232 4609 4611 231
+CONVEX 1953 GT_PK(2,2) 199 4605 200 4612 3101 168
+CONVEX 1954 GT_PK(2,2) 199 4606 167 4612 4613 168
+CONVEX 1955 GT_PK(2,2) 138 4614 111 4615 3966 139
+CONVEX 1956 GT_PK(2,2) 138 4615 139 4616 2244 168
+CONVEX 1957 GT_PK(2,2) 138 4617 167 4618 4619 137
+CONVEX 1958 GT_PK(2,2) 138 4617 167 4616 4613 168
+CONVEX 1959 GT_PK(2,2) 110 4620 138 4621 4614 111
+CONVEX 1960 GT_PK(2,2) 110 4622 109 4623 4624 137
+CONVEX 1961 GT_PK(2,2) 110 4620 138 4623 4618 137
+CONVEX 1962 GT_PK(2,2) 85 4625 111 4626 3968 86
+CONVEX 1963 GT_PK(2,2) 85 4627 62 4628 3975 61
+CONVEX 1964 GT_PK(2,2) 85 4627 62 4626 3977 86
+CONVEX 1965 GT_PK(2,2) 85 4629 110 4625 4621 111
+CONVEX 1966 GT_PK(2,2) 60 4630 83 4631 3986 59
+CONVEX 1967 GT_PK(2,2) 60 4632 38 4633 3982 39
+CONVEX 1968 GT_PK(2,2) 60 4632 38 4631 3979 59
+CONVEX 1969 GT_PK(2,2) 60 4633 39 4634 3120 61
+CONVEX 1970 GT_PK(2,2) 136 4635 109 4636 4624 137
+CONVEX 1971 GT_PK(2,2) 136 4637 108 4635 3990 109
+CONVEX 1972 GT_PK(2,2) 136 4638 135 4637 4585 108
+CONVEX 1973 GT_PK(2,2) 136 4638 135 4639 4589 165
+CONVEX 1974 GT_PK(2,2) 197 4640 165 4641 3991 196
+CONVEX 1975 GT_PK(2,2) 1389 4642 1388 4643 4003 1365
+CONVEX 1976 GT_PK(2,2) 1389 4644 1411 4645 3190 1390
+CONVEX 1977 GT_PK(2,2) 1389 4644 1411 4646 3194 1410
+CONVEX 1978 GT_PK(2,2) 1389 4642 1388 4646 4002 1410
+CONVEX 1979 GT_PK(2,2) 1389 4647 1366 4645 3230 1390
+CONVEX 1980 GT_PK(2,2) 1389 4647 1366 4643 4074 1365
+CONVEX 1981 GT_PK(2,2) 1110 4648 1074 4649 4650 1073
+CONVEX 1982 GT_PK(2,2) 1110 4651 1109 4649 4245 1073
+CONVEX 1983 GT_PK(2,2) 1110 4651 1109 4652 4011 1145
+CONVEX 1984 GT_PK(2,2) 1110 4653 1146 4652 4302 1145
+CONVEX 1985 GT_PK(2,2) 840 4654 800 4655 4153 801
+CONVEX 1986 GT_PK(2,2) 840 4654 800 4656 4151 839
+CONVEX 1987 GT_PK(2,2) 842 4657 803 4658 4440 802
+CONVEX 1988 GT_PK(2,2) 842 4657 803 4659 4447 843
+CONVEX 1989 GT_PK(2,2) 999 4660 1038 4661 3135 1000
+CONVEX 1990 GT_PK(2,2) 999 4662 1037 4660 4014 1038
+CONVEX 1991 GT_PK(2,2) 1036 4663 1037 4664 4016 1074
+CONVEX 1992 GT_PK(2,2) 1036 4665 1073 4666 4242 1035
+CONVEX 1993 GT_PK(2,2) 1036 4664 1074 4665 4650 1073
+CONVEX 1994 GT_PK(2,2) 1225 4667 1226 4668 4044 1258
+CONVEX 1995 GT_PK(2,2) 1225 4669 1191 4670 4035 1192
+CONVEX 1996 GT_PK(2,2) 1225 4667 1226 4670 4047 1192
+CONVEX 1997 GT_PK(2,2) 1287 4671 1317 4672 2345 1316
+CONVEX 1998 GT_PK(2,2) 1287 4673 1286 4672 4080 1316
+CONVEX 1999 GT_PK(2,2) 1255 4674 1254 4675 3158 1286
+CONVEX 2000 GT_PK(2,2) 1255 4676 1287 4675 4673 1286
+CONVEX 2001 GT_PK(2,2) 1255 4676 1287 4677 4678 1256
+CONVEX 2002 GT_PK(2,2) 1255 4674 1254 4679 3162 1222
+CONVEX 2003 GT_PK(2,2) 1318 4680 1289 4681 4682 1319
+CONVEX 2004 GT_PK(2,2) 1318 4683 1317 4684 2346 1345
+CONVEX 2005 GT_PK(2,2) 1318 4684 1345 4685 2323 1346
+CONVEX 2006 GT_PK(2,2) 1318 4681 1319 4685 3175 1346
+CONVEX 2007 GT_PK(2,2) 1288 4686 1287 4687 4678 1256
+CONVEX 2008 GT_PK(2,2) 1288 4686 1287 4688 4671 1317
+CONVEX 2009 GT_PK(2,2) 1288 4689 1318 4688 4683 1317
+CONVEX 2010 GT_PK(2,2) 1288 4689 1318 4690 4680 1289
+CONVEX 2011 GT_PK(2,2) 1290 4691 1289 4692 4682 1319
+CONVEX 2012 GT_PK(2,2) 1290 4693 1291 4694 3173 1320
+CONVEX 2013 GT_PK(2,2) 1290 4692 1319 4694 3176 1320
+CONVEX 2014 GT_PK(2,2) 1290 4691 1289 4695 4696 1258
+CONVEX 2015 GT_PK(2,2) 1290 4697 1259 4693 4052 1291
+CONVEX 2016 GT_PK(2,2) 1290 4697 1259 4695 4045 1258
+CONVEX 2017 GT_PK(2,2) 1322 4698 1292 4699 4040 1293
+CONVEX 2018 GT_PK(2,2) 1322 4700 1349 4701 4032 1350
+CONVEX 2019 GT_PK(2,2) 1322 4700 1349 4702 4031 1321
+CONVEX 2020 GT_PK(2,2) 1322 4698 1292 4702 4041 1321
+CONVEX 2021 GT_PK(2,2) 1322 4701 1350 4703 4704 1323
+CONVEX 2022 GT_PK(2,2) 1322 4699 1293 4703 3167 1323
+CONVEX 2023 GT_PK(2,2) 1228 4705 1195 4706 3688 1194
+CONVEX 2024 GT_PK(2,2) 1228 4705 1195 4707 3186 1229
+CONVEX 2025 GT_PK(2,2) 1228 4708 1261 4707 3188 1229
+CONVEX 2026 GT_PK(2,2) 1228 4709 1260 4708 4049 1261
+CONVEX 2027 GT_PK(2,2) 1314 4710 1315 4711 4075 1342
+CONVEX 2028 GT_PK(2,2) 1314 4712 1313 4713 4063 1284
+CONVEX 2029 GT_PK(2,2) 1314 4713 1284 4714 2400 1285
+CONVEX 2030 GT_PK(2,2) 1314 4710 1315 4714 4078 1285
+CONVEX 2031 GT_PK(2,2) 1314 4712 1313 4715 4071 1341
+CONVEX 2032 GT_PK(2,2) 1314 4711 1342 4715 3236 1341
+CONVEX 2033 GT_PK(2,2) 461 4716 460 4717 3765 422
+CONVEX 2034 GT_PK(2,2) 461 4718 499 4716 4099 460
+CONVEX 2035 GT_PK(2,2) 461 4719 423 4717 2858 422
+CONVEX 2036 GT_PK(2,2) 620 4720 660 4721 4111 621
+CONVEX 2037 GT_PK(2,2) 620 4720 660 4722 4723 659
+CONVEX 2038 GT_PK(2,2) 620 4724 619 4722 4725 659
+CONVEX 2039 GT_PK(2,2) 699 4726 739 4727 3270 700
+CONVEX 2040 GT_PK(2,2) 699 4728 660 4727 4109 700
+CONVEX 2041 GT_PK(2,2) 699 4728 660 4729 4723 659
+CONVEX 2042 GT_PK(2,2) 699 4726 739 4730 2443 738
+CONVEX 2043 GT_PK(2,2) 698 4731 699 4732 4730 738
+CONVEX 2044 GT_PK(2,2) 698 4731 699 4733 4729 659
+CONVEX 2045 GT_PK(2,2) 776 4734 816 4735 4472 777
+CONVEX 2046 GT_PK(2,2) 776 4734 816 4736 4469 815
+CONVEX 2047 GT_PK(2,2) 464 4737 463 4738 4739 425
+CONVEX 2048 GT_PK(2,2) 464 4737 463 4740 4741 502
+CONVEX 2049 GT_PK(2,2) 464 4742 503 4743 4096 465
+CONVEX 2050 GT_PK(2,2) 464 4742 503 4740 4744 502
+CONVEX 2051 GT_PK(2,2) 426 4745 425 4746 4135 388
+CONVEX 2052 GT_PK(2,2) 426 4747 389 4748 4137 427
+CONVEX 2053 GT_PK(2,2) 426 4747 389 4746 4139 388
+CONVEX 2054 GT_PK(2,2) 426 4749 464 4745 4738 425
+CONVEX 2055 GT_PK(2,2) 426 4748 427 4750 4107 465
+CONVEX 2056 GT_PK(2,2) 426 4749 464 4750 4743 465
+CONVEX 2057 GT_PK(2,2) 917 4751 877 4752 4148 878
+CONVEX 2058 GT_PK(2,2) 917 4751 877 4753 4754 916
+CONVEX 2059 GT_PK(2,2) 917 4755 956 4756 4252 955
+CONVEX 2060 GT_PK(2,2) 917 4753 916 4756 4259 955
+CONVEX 2061 GT_PK(2,2) 876 4757 877 4758 4754 916
+CONVEX 2062 GT_PK(2,2) 876 4758 916 4759 4260 915
+CONVEX 2063 GT_PK(2,2) 876 4760 837 4761 3360 836
+CONVEX 2064 GT_PK(2,2) 876 4757 877 4760 4149 837
+CONVEX 2065 GT_PK(2,2) 876 4762 875 4761 2638 836
+CONVEX 2066 GT_PK(2,2) 876 4762 875 4759 2640 915
+CONVEX 2067 GT_PK(2,2) 441 4763 479 4764 4165 440
+CONVEX 2068 GT_PK(2,2) 441 4765 442 4766 3869 403
+CONVEX 2069 GT_PK(2,2) 441 4765 442 4767 4524 480
+CONVEX 2070 GT_PK(2,2) 441 4763 479 4767 4166 480
+CONVEX 2071 GT_PK(2,2) 441 4768 402 4766 2089 403
+CONVEX 2072 GT_PK(2,2) 441 4764 440 4768 3039 402
+CONVEX 2073 GT_PK(2,2) 555 4769 516 4770 2529 556
+CONVEX 2074 GT_PK(2,2) 555 4771 515 4769 4167 516
+CONVEX 2075 GT_PK(2,2) 476 4772 475 4773 4170 437
+CONVEX 2076 GT_PK(2,2) 476 4774 515 4775 4168 477
+CONVEX 2077 GT_PK(2,2) 476 4776 438 4775 2100 477
+CONVEX 2078 GT_PK(2,2) 476 4776 438 4773 2101 437
+CONVEX 2079 GT_PK(2,2) 512 4777 511 4778 4174 473
+CONVEX 2080 GT_PK(2,2) 631 4779 671 4780 4781 632
+CONVEX 2081 GT_PK(2,2) 631 4782 592 4780 4186 632
+CONVEX 2082 GT_PK(2,2) 631 4779 671 4783 3378 670
+CONVEX 2083 GT_PK(2,2) 674 4784 714 4785 2537 675
+CONVEX 2084 GT_PK(2,2) 674 4786 635 4785 4180 675
+CONVEX 2085 GT_PK(2,2) 674 4784 714 4787 3384 713
+CONVEX 2086 GT_PK(2,2) 674 4786 635 4788 4789 634
+CONVEX 2087 GT_PK(2,2) 674 4790 673 4787 4182 713
+CONVEX 2088 GT_PK(2,2) 674 4790 673 4788 4791 634
+CONVEX 2089 GT_PK(2,2) 672 4792 671 4793 3380 711
+CONVEX 2090 GT_PK(2,2) 672 4792 671 4794 4781 632
+CONVEX 2091 GT_PK(2,2) 672 4793 711 4795 2589 712
+CONVEX 2092 GT_PK(2,2) 672 4796 673 4795 4183 712
+CONVEX 2093 GT_PK(2,2) 633 4797 673 4798 4791 634
+CONVEX 2094 GT_PK(2,2) 633 4799 672 4797 4796 673
+CONVEX 2095 GT_PK(2,2) 633 4800 593 4801 4185 632
+CONVEX 2096 GT_PK(2,2) 633 4799 672 4801 4794 632
+CONVEX 2097 GT_PK(2,2) 944 4802 905 4803 4196 943
+CONVEX 2098 GT_PK(2,2) 944 4804 982 4805 2543 981
+CONVEX 2099 GT_PK(2,2) 944 4803 943 4805 4806 981
+CONVEX 2100 GT_PK(2,2) 944 4804 982 4807 2539 983
+CONVEX 2101 GT_PK(2,2) 944 4808 945 4807 3456 983
+CONVEX 2102 GT_PK(2,2) 944 4808 945 4809 4233 906
+CONVEX 2103 GT_PK(2,2) 944 4802 905 4809 4205 906
+CONVEX 2104 GT_PK(2,2) 871 4810 832 4811 4210 831
+CONVEX 2105 GT_PK(2,2) 871 4812 911 4813 2610 910
+CONVEX 2106 GT_PK(2,2) 871 4814 872 4812 2625 911
+CONVEX 2107 GT_PK(2,2) 871 4810 832 4814 4214 872
+CONVEX 2108 GT_PK(2,2) 870 4815 830 4816 4215 831
+CONVEX 2109 GT_PK(2,2) 870 4817 909 4818 1876 910
+CONVEX 2110 GT_PK(2,2) 870 4819 869 4817 4820 909
+CONVEX 2111 GT_PK(2,2) 870 4819 869 4815 4821 830
+CONVEX 2112 GT_PK(2,2) 870 4822 871 4818 4813 910
+CONVEX 2113 GT_PK(2,2) 870 4822 871 4816 4811 831
+CONVEX 2114 GT_PK(2,2) 790 4823 751 4824 3438 791
+CONVEX 2115 GT_PK(2,2) 790 4825 830 4824 4216 791
+CONVEX 2116 GT_PK(2,2) 987 4826 986 4827 4223 1025
+CONVEX 2117 GT_PK(2,2) 987 4828 949 4829 2605 988
+CONVEX 2118 GT_PK(2,2) 987 4828 949 4830 2611 948
+CONVEX 2119 GT_PK(2,2) 987 4826 986 4830 4227 948
+CONVEX 2120 GT_PK(2,2) 987 4831 1026 4829 3446 988
+CONVEX 2121 GT_PK(2,2) 987 4827 1025 4831 3450 1026
+CONVEX 2122 GT_PK(2,2) 908 4832 907 4833 4230 868
+CONVEX 2123 GT_PK(2,2) 908 4834 869 4833 4835 868
+CONVEX 2124 GT_PK(2,2) 908 4836 947 4837 3458 909
+CONVEX 2125 GT_PK(2,2) 908 4834 869 4837 4820 909
+CONVEX 2126 GT_PK(2,2) 1034 4838 1072 4839 4241 1035
+CONVEX 2127 GT_PK(2,2) 1071 4840 1033 4841 3464 1070
+CONVEX 2128 GT_PK(2,2) 1071 4842 1072 4843 4244 1108
+CONVEX 2129 GT_PK(2,2) 1071 4844 1034 4840 4845 1033
+CONVEX 2130 GT_PK(2,2) 1071 4844 1034 4842 4838 1072
+CONVEX 2131 GT_PK(2,2) 1142 4846 1106 4847 4848 1141
+CONVEX 2132 GT_PK(2,2) 1104 4849 1103 4850 3426 1067
+CONVEX 2133 GT_PK(2,2) 1104 4851 1139 4849 3497 1103
+CONVEX 2134 GT_PK(2,2) 1104 4851 1139 4852 3500 1140
+CONVEX 2135 GT_PK(2,2) 1209 4853 1210 4854 4269 1242
+CONVEX 2136 GT_PK(2,2) 1209 4855 1241 4856 3628 1208
+CONVEX 2137 GT_PK(2,2) 1209 4855 1241 4854 3629 1242
+CONVEX 2138 GT_PK(2,2) 1382 4857 1404 4858 2676 1383
+CONVEX 2139 GT_PK(2,2) 1382 4859 1403 4857 4276 1404
+CONVEX 2140 GT_PK(2,2) 1382 4859 1403 4860 4279 1381
+CONVEX 2141 GT_PK(2,2) 1421 4861 1403 4862 4277 1422
+CONVEX 2142 GT_PK(2,2) 1421 4863 1436 4864 4865 1435
+CONVEX 2143 GT_PK(2,2) 1421 4863 1436 4862 3536 1422
+CONVEX 2144 GT_PK(2,2) 1421 4866 1402 4864 4867 1435
+CONVEX 2145 GT_PK(2,2) 1421 4861 1403 4866 4278 1402
+CONVEX 2146 GT_PK(2,2) 1332 4868 1305 4869 4325 1304
+CONVEX 2147 GT_PK(2,2) 1332 4870 1333 4868 4283 1305
+CONVEX 2148 GT_PK(2,2) 1377 4871 1398 4872 4296 1353
+CONVEX 2149 GT_PK(2,2) 1328 4873 1353 4874 4312 1327
+CONVEX 2150 GT_PK(2,2) 1302 4875 1273 4876 3623 1303
+CONVEX 2151 GT_PK(2,2) 1302 4875 1273 4877 3627 1272
+CONVEX 2152 GT_PK(2,2) 1420 4878 1402 4879 4867 1435
+CONVEX 2153 GT_PK(2,2) 1048 4880 1086 4881 4337 1049
+CONVEX 2154 GT_PK(2,2) 1048 4882 1010 4883 2777 1009
+CONVEX 2155 GT_PK(2,2) 1048 4882 1010 4881 2771 1049
+CONVEX 2156 GT_PK(2,2) 1085 4884 1086 4885 4336 1122
+CONVEX 2157 GT_PK(2,2) 1085 4886 1121 4885 4340 1122
+CONVEX 2158 GT_PK(2,2) 1085 4887 1048 4884 4880 1086
+CONVEX 2159 GT_PK(2,2) 1126 4888 1127 4889 4128 1090
+CONVEX 2160 GT_PK(2,2) 1126 4890 1162 4888 4388 1127
+CONVEX 2161 GT_PK(2,2) 1126 4891 1089 4892 4371 1125
+CONVEX 2162 GT_PK(2,2) 1126 4891 1089 4889 3691 1090
+CONVEX 2163 GT_PK(2,2) 1126 4893 1161 4892 4383 1125
+CONVEX 2164 GT_PK(2,2) 1126 4890 1162 4893 4390 1161
+CONVEX 2165 GT_PK(2,2) 238 4894 271 4895 4393 272
+CONVEX 2166 GT_PK(2,2) 236 4896 235 4897 2891 203
+CONVEX 2167 GT_PK(2,2) 236 4898 204 4897 4899 203
+CONVEX 2168 GT_PK(2,2) 270 4900 305 4901 2925 304
+CONVEX 2169 GT_PK(2,2) 270 4902 271 4900 4391 305
+CONVEX 2170 GT_PK(2,2) 172 4903 204 4904 4899 203
+CONVEX 2171 GT_PK(2,2) 172 4903 204 4905 4906 173
+CONVEX 2172 GT_PK(2,2) 68 4907 47 4908 4410 69
+CONVEX 2173 GT_PK(2,2) 68 4909 91 4910 4911 92
+CONVEX 2174 GT_PK(2,2) 68 4908 69 4910 3938 92
+CONVEX 2175 GT_PK(2,2) 68 4912 67 4909 4401 91
+CONVEX 2176 GT_PK(2,2) 68 4912 67 4913 4405 46
+CONVEX 2177 GT_PK(2,2) 68 4907 47 4913 4408 46
+CONVEX 2178 GT_PK(2,2) 566 4914 567 4915 4421 606
+CONVEX 2179 GT_PK(2,2) 566 4916 565 4917 3883 526
+CONVEX 2180 GT_PK(2,2) 566 4917 526 4918 3889 527
+CONVEX 2181 GT_PK(2,2) 566 4914 567 4918 4413 527
+CONVEX 2182 GT_PK(2,2) 424 4919 425 4920 4136 387
+CONVEX 2183 GT_PK(2,2) 424 4921 386 4920 4426 387
+CONVEX 2184 GT_PK(2,2) 424 4921 386 4922 4424 423
+CONVEX 2185 GT_PK(2,2) 424 4923 463 4919 4739 425
+CONVEX 2186 GT_PK(2,2) 654 4924 693 4925 4453 694
+CONVEX 2187 GT_PK(2,2) 654 4925 694 4926 3850 655
+CONVEX 2188 GT_PK(2,2) 654 4927 615 4926 4928 655
+CONVEX 2189 GT_PK(2,2) 654 4927 615 4929 3853 614
+CONVEX 2190 GT_PK(2,2) 654 4929 614 4930 2995 653
+CONVEX 2191 GT_PK(2,2) 654 4924 693 4930 4455 653
+CONVEX 2192 GT_PK(2,2) 852 4931 892 4932 4466 891
+CONVEX 2193 GT_PK(2,2) 852 4933 812 4934 3843 813
+CONVEX 2194 GT_PK(2,2) 852 4935 853 4934 4479 813
+CONVEX 2195 GT_PK(2,2) 852 4931 892 4935 4468 853
+CONVEX 2196 GT_PK(2,2) 852 4936 851 4932 4937 891
+CONVEX 2197 GT_PK(2,2) 852 4936 851 4933 4938 812
+CONVEX 2198 GT_PK(2,2) 775 4939 814 4940 4474 815
+CONVEX 2199 GT_PK(2,2) 775 4941 776 4942 4943 736
+CONVEX 2200 GT_PK(2,2) 775 4941 776 4940 4736 815
+CONVEX 2201 GT_PK(2,2) 775 4944 735 4942 4945 736
+CONVEX 2202 GT_PK(2,2) 775 4946 774 4944 4494 735
+CONVEX 2203 GT_PK(2,2) 775 4939 814 4946 4477 774
+CONVEX 2204 GT_PK(2,2) 890 4947 851 4948 4937 891
+CONVEX 2205 GT_PK(2,2) 890 4949 889 4950 3847 929
+CONVEX 2206 GT_PK(2,2) 890 4950 929 4951 2764 930
+CONVEX 2207 GT_PK(2,2) 890 4948 891 4951 2987 930
+CONVEX 2208 GT_PK(2,2) 809 4952 770 4953 3851 769
+CONVEX 2209 GT_PK(2,2) 809 4954 808 4953 2963 769
+CONVEX 2210 GT_PK(2,2) 809 4955 848 4954 3810 808
+CONVEX 2211 GT_PK(2,2) 809 4956 849 4955 4486 848
+CONVEX 2212 GT_PK(2,2) 810 4957 809 4958 4956 849
+CONVEX 2213 GT_PK(2,2) 810 4959 770 4960 4463 771
+CONVEX 2214 GT_PK(2,2) 810 4957 809 4959 4952 770
+CONVEX 2215 GT_PK(2,2) 432 4961 472 4962 3866 433
+CONVEX 2216 GT_PK(2,2) 432 4963 471 4961 4499 472
+CONVEX 2217 GT_PK(2,2) 432 4962 433 4964 3007 394
+CONVEX 2218 GT_PK(2,2) 474 4965 475 4966 4169 436
+CONVEX 2219 GT_PK(2,2) 474 4967 435 4966 4500 436
+CONVEX 2220 GT_PK(2,2) 474 4967 435 4968 4504 473
+CONVEX 2221 GT_PK(2,2) 474 4969 512 4968 4778 473
+CONVEX 2222 GT_PK(2,2) 564 4970 603 4971 3882 563
+CONVEX 2223 GT_PK(2,2) 564 4972 604 4970 4506 603
+CONVEX 2224 GT_PK(2,2) 564 4972 604 4973 4974 565
+CONVEX 2225 GT_PK(2,2) 564 4975 524 4971 3025 563
+CONVEX 2226 GT_PK(2,2) 564 4975 524 4976 3892 525
+CONVEX 2227 GT_PK(2,2) 564 4973 565 4976 3884 525
+CONVEX 2228 GT_PK(2,2) 605 4977 604 4978 4974 565
+CONVEX 2229 GT_PK(2,2) 605 4979 606 4980 2816 645
+CONVEX 2230 GT_PK(2,2) 605 4981 644 4980 3019 645
+CONVEX 2231 GT_PK(2,2) 605 4977 604 4981 4507 644
+CONVEX 2232 GT_PK(2,2) 605 4982 566 4979 4915 606
+CONVEX 2233 GT_PK(2,2) 605 4982 566 4978 4916 565
+CONVEX 2234 GT_PK(2,2) 148 4983 177 4984 4985 178
+CONVEX 2235 GT_PK(2,2) 148 4984 178 4986 4538 149
+CONVEX 2236 GT_PK(2,2) 148 4987 121 4986 3929 149
+CONVEX 2237 GT_PK(2,2) 148 4987 121 4988 4555 120
+CONVEX 2238 GT_PK(2,2) 208 4989 240 4990 4394 241
+CONVEX 2239 GT_PK(2,2) 208 4989 240 4991 4992 207
+CONVEX 2240 GT_PK(2,2) 209 4993 178 4994 4536 210
+CONVEX 2241 GT_PK(2,2) 209 4995 177 4993 4985 178
+CONVEX 2242 GT_PK(2,2) 209 4994 210 4996 4544 242
+CONVEX 2243 GT_PK(2,2) 209 4997 208 4995 4998 177
+CONVEX 2244 GT_PK(2,2) 209 4999 241 4996 1970 242
+CONVEX 2245 GT_PK(2,2) 209 4997 208 4999 4990 241
+CONVEX 2246 GT_PK(2,2) 94 5000 95 5001 4554 120
+CONVEX 2247 GT_PK(2,2) 94 5000 95 5002 5003 71
+CONVEX 2248 GT_PK(2,2) 94 5004 70 5002 5005 71
+CONVEX 2249 GT_PK(2,2) 94 5004 70 5006 4559 93
+CONVEX 2250 GT_PK(2,2) 72 5007 95 5008 5003 71
+CONVEX 2251 GT_PK(2,2) 72 5009 50 5008 5010 71
+CONVEX 2252 GT_PK(2,2) 72 5009 50 5011 4563 51
+CONVEX 2253 GT_PK(2,2) 72 5007 95 5012 4556 96
+CONVEX 2254 GT_PK(2,2) 72 5013 73 5012 3933 96
+CONVEX 2255 GT_PK(2,2) 72 5011 51 5013 3939 73
+CONVEX 2256 GT_PK(2,2) 175 5014 207 5015 5016 206
+CONVEX 2257 GT_PK(2,2) 49 5017 70 5018 5005 71
+CONVEX 2258 GT_PK(2,2) 49 5019 50 5018 5010 71
+CONVEX 2259 GT_PK(2,2) 49 5020 30 5021 2819 48
+CONVEX 2260 GT_PK(2,2) 49 5017 70 5021 4558 48
+CONVEX 2261 GT_PK(2,2) 49 5019 50 5022 4561 31
+CONVEX 2262 GT_PK(2,2) 49 5023 16 5022 5024 31
+CONVEX 2263 GT_PK(2,2) 49 5023 16 5020 3706 30
+CONVEX 2264 GT_PK(2,2) 406 5025 368 5026 4565 405
+CONVEX 2265 GT_PK(2,2) 406 5027 444 5026 3896 405
+CONVEX 2266 GT_PK(2,2) 406 5027 444 5028 3904 445
+CONVEX 2267 GT_PK(2,2) 301 5029 267 5030 4571 302
+CONVEX 2268 GT_PK(2,2) 299 5031 264 5032 4576 298
+CONVEX 2269 GT_PK(2,2) 265 5033 299 5034 5035 300
+CONVEX 2270 GT_PK(2,2) 265 5033 299 5036 5031 264
+CONVEX 2271 GT_PK(2,2) 265 5037 232 5038 4611 231
+CONVEX 2272 GT_PK(2,2) 265 5036 264 5038 5039 231
+CONVEX 2273 GT_PK(2,2) 260 5040 226 5041 3944 259
+CONVEX 2274 GT_PK(2,2) 260 5042 227 5040 4595 226
+CONVEX 2275 GT_PK(2,2) 260 5043 261 5042 5044 227
+CONVEX 2276 GT_PK(2,2) 260 5045 294 5041 3946 259
+CONVEX 2277 GT_PK(2,2) 260 5045 294 5046 3950 295
+CONVEX 2278 GT_PK(2,2) 260 5043 261 5046 5047 295
+CONVEX 2279 GT_PK(2,2) 412 5048 451 5049 2844 413
+CONVEX 2280 GT_PK(2,2) 412 5050 375 5049 4599 413
+CONVEX 2281 GT_PK(2,2) 412 5050 375 5051 4600 374
+CONVEX 2282 GT_PK(2,2) 412 5052 411 5051 5053 374
+CONVEX 2283 GT_PK(2,2) 84 5054 83 5055 3989 109
+CONVEX 2284 GT_PK(2,2) 84 5056 110 5055 4622 109
+CONVEX 2285 GT_PK(2,2) 84 5057 60 5058 4634 61
+CONVEX 2286 GT_PK(2,2) 84 5057 60 5054 4630 83
+CONVEX 2287 GT_PK(2,2) 84 5059 85 5058 4628 61
+CONVEX 2288 GT_PK(2,2) 84 5059 85 5056 4629 110
+CONVEX 2289 GT_PK(2,2) 166 5060 167 5061 4619 137
+CONVEX 2290 GT_PK(2,2) 166 5062 136 5061 4636 137
+CONVEX 2291 GT_PK(2,2) 166 5060 167 5063 4608 198
+CONVEX 2292 GT_PK(2,2) 166 5064 197 5063 5065 198
+CONVEX 2293 GT_PK(2,2) 166 5062 136 5066 4639 165
+CONVEX 2294 GT_PK(2,2) 166 5064 197 5066 4640 165
+CONVEX 2295 GT_PK(2,2) 230 5067 264 5068 5039 231
+CONVEX 2296 GT_PK(2,2) 230 5067 264 5069 4575 263
+CONVEX 2297 GT_PK(2,2) 230 5070 198 5068 4610 231
+CONVEX 2298 GT_PK(2,2) 230 5071 197 5070 5065 198
+CONVEX 2299 GT_PK(2,2) 1111 5072 1110 5073 4648 1074
+CONVEX 2300 GT_PK(2,2) 1111 5074 1075 5075 2282 1112
+CONVEX 2301 GT_PK(2,2) 1111 5073 1074 5074 4017 1075
+CONVEX 2302 GT_PK(2,2) 1111 5072 1110 5076 4653 1146
+CONVEX 2303 GT_PK(2,2) 1111 5077 1147 5075 2705 1112
+CONVEX 2304 GT_PK(2,2) 1111 5076 1146 5077 4299 1147
+CONVEX 2305 GT_PK(2,2) 841 5078 840 5079 5080 880
+CONVEX 2306 GT_PK(2,2) 841 5081 842 5082 4658 802
+CONVEX 2307 GT_PK(2,2) 841 5082 802 5083 2937 801
+CONVEX 2308 GT_PK(2,2) 841 5078 840 5083 4655 801
+CONVEX 2309 GT_PK(2,2) 881 5084 920 5085 5086 880
+CONVEX 2310 GT_PK(2,2) 881 5087 841 5085 5079 880
+CONVEX 2311 GT_PK(2,2) 881 5087 841 5088 5081 842
+CONVEX 2312 GT_PK(2,2) 879 5089 840 5090 5080 880
+CONVEX 2313 GT_PK(2,2) 879 5091 839 5092 2521 878
+CONVEX 2314 GT_PK(2,2) 879 5089 840 5091 4656 839
+CONVEX 2315 GT_PK(2,2) 959 5093 920 5094 5095 958
+CONVEX 2316 GT_PK(2,2) 961 5096 962 5097 4018 1000
+CONVEX 2317 GT_PK(2,2) 961 5098 999 5097 4661 1000
+CONVEX 2318 GT_PK(2,2) 961 5096 962 5099 4022 923
+CONVEX 2319 GT_PK(2,2) 998 5100 999 5101 4662 1037
+CONVEX 2320 GT_PK(2,2) 998 5102 1036 5101 4663 1037
+CONVEX 2321 GT_PK(2,2) 1224 5103 1225 5104 4669 1191
+CONVEX 2322 GT_PK(2,2) 1224 5104 1191 5105 4036 1190
+CONVEX 2323 GT_PK(2,2) 1257 5106 1288 5107 4687 1256
+CONVEX 2324 GT_PK(2,2) 1257 5108 1225 5109 4668 1258
+CONVEX 2325 GT_PK(2,2) 1257 5110 1289 5109 4696 1258
+CONVEX 2326 GT_PK(2,2) 1257 5106 1288 5110 4690 1289
+CONVEX 2327 GT_PK(2,2) 1257 5111 1224 5107 5112 1256
+CONVEX 2328 GT_PK(2,2) 1257 5111 1224 5108 5103 1225
+CONVEX 2329 GT_PK(2,2) 1227 5113 1228 5114 4706 1194
+CONVEX 2330 GT_PK(2,2) 1227 5113 1228 5115 4709 1260
+CONVEX 2331 GT_PK(2,2) 1227 5115 1260 5116 4050 1259
+CONVEX 2332 GT_PK(2,2) 1227 5117 1226 5116 4043 1259
+CONVEX 2333 GT_PK(2,2) 1227 5114 1194 5118 4366 1193
+CONVEX 2334 GT_PK(2,2) 1227 5117 1226 5118 4046 1193
+CONVEX 2335 GT_PK(2,2) 541 5119 503 5120 4098 542
+CONVEX 2336 GT_PK(2,2) 541 5119 503 5121 4744 502
+CONVEX 2337 GT_PK(2,2) 658 5122 698 5123 5124 697
+CONVEX 2338 GT_PK(2,2) 658 5125 619 5126 4725 659
+CONVEX 2339 GT_PK(2,2) 658 5122 698 5126 4733 659
+CONVEX 2340 GT_PK(2,2) 737 5127 698 5128 5124 697
+CONVEX 2341 GT_PK(2,2) 737 5128 697 5129 5130 736
+CONVEX 2342 GT_PK(2,2) 737 5131 776 5129 4943 736
+CONVEX 2343 GT_PK(2,2) 737 5131 776 5132 4735 777
+CONVEX 2344 GT_PK(2,2) 737 5132 777 5133 3323 738
+CONVEX 2345 GT_PK(2,2) 737 5127 698 5133 4732 738
+CONVEX 2346 GT_PK(2,2) 616 5134 615 5135 4928 655
+CONVEX 2347 GT_PK(2,2) 696 5136 697 5137 5130 736
+CONVEX 2348 GT_PK(2,2) 696 5138 735 5137 4945 736
+CONVEX 2349 GT_PK(2,2) 696 5139 695 5138 4495 735
+CONVEX 2350 GT_PK(2,2) 918 5140 957 5141 5142 956
+CONVEX 2351 GT_PK(2,2) 918 5143 917 5141 4755 956
+CONVEX 2352 GT_PK(2,2) 918 5143 917 5144 4752 878
+CONVEX 2353 GT_PK(2,2) 918 5145 879 5144 5092 878
+CONVEX 2354 GT_PK(2,2) 595 5146 635 5147 4789 634
+CONVEX 2355 GT_PK(2,2) 595 5148 555 5149 4770 556
+CONVEX 2356 GT_PK(2,2) 595 5150 596 5149 2530 556
+CONVEX 2357 GT_PK(2,2) 595 5146 635 5150 4181 596
+CONVEX 2358 GT_PK(2,2) 554 5151 555 5152 4771 515
+CONVEX 2359 GT_PK(2,2) 554 5153 593 5154 4187 553
+CONVEX 2360 GT_PK(2,2) 551 5155 550 5156 4178 511
+CONVEX 2361 GT_PK(2,2) 551 5157 512 5156 4777 511
+CONVEX 2362 GT_PK(2,2) 630 5158 631 5159 4783 670
+CONVEX 2363 GT_PK(2,2) 630 5160 669 5161 3393 629
+CONVEX 2364 GT_PK(2,2) 630 5160 669 5159 3394 670
+CONVEX 2365 GT_PK(2,2) 750 5162 790 5163 4823 751
+CONVEX 2366 GT_PK(2,2) 750 5164 711 5165 3381 710
+CONVEX 2367 GT_PK(2,2) 750 5163 751 5164 2587 711
+CONVEX 2368 GT_PK(2,2) 750 5162 790 5166 5167 789
+CONVEX 2369 GT_PK(2,2) 750 5168 749 5165 4191 710
+CONVEX 2370 GT_PK(2,2) 750 5166 789 5168 3441 749
+CONVEX 2371 GT_PK(2,2) 829 5169 869 5170 4821 830
+CONVEX 2372 GT_PK(2,2) 829 5171 790 5170 4825 830
+CONVEX 2373 GT_PK(2,2) 829 5169 869 5172 4835 868
+CONVEX 2374 GT_PK(2,2) 829 5171 790 5173 5167 789
+CONVEX 2375 GT_PK(2,2) 829 5174 828 5172 4218 868
+CONVEX 2376 GT_PK(2,2) 829 5174 828 5173 4220 789
+CONVEX 2377 GT_PK(2,2) 946 5175 908 5176 4832 907
+CONVEX 2378 GT_PK(2,2) 946 5177 984 5178 3455 945
+CONVEX 2379 GT_PK(2,2) 946 5176 907 5178 4232 945
+CONVEX 2380 GT_PK(2,2) 946 5175 908 5179 4836 947
+CONVEX 2381 GT_PK(2,2) 946 5177 984 5180 3454 985
+CONVEX 2382 GT_PK(2,2) 946 5179 947 5180 4228 985
+CONVEX 2383 GT_PK(2,2) 995 5181 957 5182 5142 956
+CONVEX 2384 GT_PK(2,2) 995 5183 994 5182 4251 956
+CONVEX 2385 GT_PK(2,2) 995 5183 994 5184 4248 1033
+CONVEX 2386 GT_PK(2,2) 995 5185 1034 5184 4845 1033
+CONVEX 2387 GT_PK(2,2) 1176 5186 1142 5187 4847 1141
+CONVEX 2388 GT_PK(2,2) 1176 5188 1209 5189 4853 1210
+CONVEX 2389 GT_PK(2,2) 1107 5190 1142 5191 4846 1106
+CONVEX 2390 GT_PK(2,2) 1107 5191 1106 5192 5193 1070
+CONVEX 2391 GT_PK(2,2) 1107 5194 1071 5192 4841 1070
+CONVEX 2392 GT_PK(2,2) 1107 5194 1071 5195 4843 1108
+CONVEX 2393 GT_PK(2,2) 1143 5196 1144 5197 3548 1178
+CONVEX 2394 GT_PK(2,2) 1143 5198 1107 5199 5190 1142
+CONVEX 2395 GT_PK(2,2) 1143 5196 1144 5200 4013 1108
+CONVEX 2396 GT_PK(2,2) 1143 5198 1107 5200 5195 1108
+CONVEX 2397 GT_PK(2,2) 1068 5201 1104 5202 4850 1067
+CONVEX 2398 GT_PK(2,2) 1068 5203 1030 5202 2613 1067
+CONVEX 2399 GT_PK(2,2) 1068 5204 1031 5203 3466 1030
+CONVEX 2400 GT_PK(2,2) 1358 5205 1357 5206 5207 1381
+CONVEX 2401 GT_PK(2,2) 1358 5208 1382 5206 4860 1381
+CONVEX 2402 GT_PK(2,2) 1358 5209 1332 5205 5210 1357
+CONVEX 2403 GT_PK(2,2) 1358 5209 1332 5211 4870 1333
+CONVEX 2404 GT_PK(2,2) 1359 5212 1333 5213 4281 1334
+CONVEX 2405 GT_PK(2,2) 1359 5214 1360 5213 2687 1334
+CONVEX 2406 GT_PK(2,2) 1359 5215 1358 5212 5211 1333
+CONVEX 2407 GT_PK(2,2) 1359 5215 1358 5216 5208 1382
+CONVEX 2408 GT_PK(2,2) 1359 5214 1360 5217 2683 1383
+CONVEX 2409 GT_PK(2,2) 1359 5216 1382 5217 4858 1383
+CONVEX 2410 GT_PK(2,2) 1355 5218 1379 5219 5220 1378
+CONVEX 2411 GT_PK(2,2) 1355 5218 1379 5221 5222 1356
+CONVEX 2412 GT_PK(2,2) 1399 5223 1377 5224 4871 1398
+CONVEX 2413 GT_PK(2,2) 1399 5225 1418 5226 5227 1378
+CONVEX 2414 GT_PK(2,2) 1399 5223 1377 5226 5228 1378
+CONVEX 2415 GT_PK(2,2) 1301 5229 1328 5230 5231 1329
+CONVEX 2416 GT_PK(2,2) 1301 5232 1302 5230 5233 1329
+CONVEX 2417 GT_PK(2,2) 1301 5234 1271 5235 2745 1272
+CONVEX 2418 GT_PK(2,2) 1301 5232 1302 5235 4877 1272
+CONVEX 2419 GT_PK(2,2) 1330 5236 1302 5237 5233 1329
+CONVEX 2420 GT_PK(2,2) 1330 5238 1355 5237 5239 1329
+CONVEX 2421 GT_PK(2,2) 1330 5238 1355 5240 5221 1356
+CONVEX 2422 GT_PK(2,2) 1330 5236 1302 5241 4876 1303
+CONVEX 2423 GT_PK(2,2) 1331 5242 1304 5243 3622 1303
+CONVEX 2424 GT_PK(2,2) 1331 5244 1330 5243 5241 1303
+CONVEX 2425 GT_PK(2,2) 1331 5244 1330 5245 5240 1356
+CONVEX 2426 GT_PK(2,2) 1331 5246 1332 5242 4869 1304
+CONVEX 2427 GT_PK(2,2) 1331 5246 1332 5247 5210 1357
+CONVEX 2428 GT_PK(2,2) 1331 5245 1356 5247 5248 1357
+CONVEX 2429 GT_PK(2,2) 1401 5249 1420 5250 4878 1402
+CONVEX 2430 GT_PK(2,2) 1401 5249 1420 5251 5252 1419
+CONVEX 2431 GT_PK(2,2) 1380 5253 1402 5254 4280 1381
+CONVEX 2432 GT_PK(2,2) 1380 5255 1357 5254 5207 1381
+CONVEX 2433 GT_PK(2,2) 1380 5256 1401 5253 5250 1402
+CONVEX 2434 GT_PK(2,2) 1380 5256 1401 5257 5258 1379
+CONVEX 2435 GT_PK(2,2) 1380 5259 1356 5255 5248 1357
+CONVEX 2436 GT_PK(2,2) 1380 5257 1379 5259 5222 1356
+CONVEX 2437 GT_PK(2,2) 1047 5260 1085 5261 4887 1048
+CONVEX 2438 GT_PK(2,2) 1047 5261 1048 5262 4883 1009
+CONVEX 2439 GT_PK(2,2) 1047 5263 1008 5262 2768 1009
+CONVEX 2440 GT_PK(2,2) 1047 5263 1008 5264 3672 1046
+CONVEX 2441 GT_PK(2,2) 1084 5265 1121 5266 4341 1120
+CONVEX 2442 GT_PK(2,2) 1084 5267 1085 5265 4886 1121
+CONVEX 2443 GT_PK(2,2) 1084 5266 1120 5268 4084 1083
+CONVEX 2444 GT_PK(2,2) 1084 5269 1047 5267 5260 1085
+CONVEX 2445 GT_PK(2,2) 1084 5268 1083 5270 2751 1046
+CONVEX 2446 GT_PK(2,2) 1084 5269 1047 5270 5264 1046
+CONVEX 2447 GT_PK(2,2) 205 5271 204 5272 4906 173
+CONVEX 2448 GT_PK(2,2) 205 5273 238 5274 5275 206
+CONVEX 2449 GT_PK(2,2) 239 5276 273 5277 4400 240
+CONVEX 2450 GT_PK(2,2) 239 5277 240 5278 4992 207
+CONVEX 2451 GT_PK(2,2) 239 5276 273 5279 4398 272
+CONVEX 2452 GT_PK(2,2) 239 5280 238 5279 4895 272
+CONVEX 2453 GT_PK(2,2) 239 5278 207 5281 5016 206
+CONVEX 2454 GT_PK(2,2) 239 5280 238 5281 5275 206
+CONVEX 2455 GT_PK(2,2) 237 5282 270 5283 5284 236
+CONVEX 2456 GT_PK(2,2) 237 5285 205 5286 5273 238
+CONVEX 2457 GT_PK(2,2) 237 5286 238 5287 4894 271
+CONVEX 2458 GT_PK(2,2) 237 5282 270 5287 4902 271
+CONVEX 2459 GT_PK(2,2) 237 5283 236 5288 4898 204
+CONVEX 2460 GT_PK(2,2) 237 5285 205 5288 5271 204
+CONVEX 2461 GT_PK(2,2) 269 5289 304 5290 2016 303
+CONVEX 2462 GT_PK(2,2) 269 5291 270 5289 4901 304
+CONVEX 2463 GT_PK(2,2) 269 5292 268 5290 2232 303
+CONVEX 2464 GT_PK(2,2) 269 5291 270 5293 5284 236
+CONVEX 2465 GT_PK(2,2) 269 5294 235 5292 2887 268
+CONVEX 2466 GT_PK(2,2) 269 5293 236 5294 4896 235
+CONVEX 2467 GT_PK(2,2) 171 5295 172 5296 4904 203
+CONVEX 2468 GT_PK(2,2) 171 5296 203 5297 2892 202
+CONVEX 2469 GT_PK(2,2) 171 5298 170 5297 3712 202
+CONVEX 2470 GT_PK(2,2) 171 5298 170 5299 3720 141
+CONVEX 2471 GT_PK(2,2) 115 5300 116 5301 3704 90
+CONVEX 2472 GT_PK(2,2) 115 5302 89 5301 2827 90
+CONVEX 2473 GT_PK(2,2) 115 5302 89 5303 2829 114
+CONVEX 2474 GT_PK(2,2) 143 5304 172 5305 4905 173
+CONVEX 2475 GT_PK(2,2) 143 5306 115 5307 5300 116
+CONVEX 2476 GT_PK(2,2) 850 5308 890 5309 4947 851
+CONVEX 2477 GT_PK(2,2) 850 5310 810 5311 4958 849
+CONVEX 2478 GT_PK(2,2) 850 5311 849 5312 4488 889
+CONVEX 2479 GT_PK(2,2) 850 5308 890 5312 4949 889
+CONVEX 2480 GT_PK(2,2) 811 5313 851 5314 4938 812
+CONVEX 2481 GT_PK(2,2) 811 5315 810 5316 4960 771
+CONVEX 2482 GT_PK(2,2) 811 5317 850 5313 5309 851
+CONVEX 2483 GT_PK(2,2) 811 5317 850 5315 5310 810
+CONVEX 2484 GT_PK(2,2) 811 5318 772 5316 4485 771
+CONVEX 2485 GT_PK(2,2) 811 5318 772 5314 4480 812
+CONVEX 2486 GT_PK(2,2) 513 5319 474 5320 4969 512
+CONVEX 2487 GT_PK(2,2) 513 5319 474 5321 4965 475
+CONVEX 2488 GT_PK(2,2) 119 5322 94 5323 5006 93
+CONVEX 2489 GT_PK(2,2) 119 5322 94 5324 5001 120
+CONVEX 2490 GT_PK(2,2) 145 5325 175 5326 5327 146
+CONVEX 2491 GT_PK(2,2) 176 5328 208 5329 4998 177
+CONVEX 2492 GT_PK(2,2) 176 5330 175 5331 5327 146
+CONVEX 2493 GT_PK(2,2) 176 5328 208 5332 4991 207
+CONVEX 2494 GT_PK(2,2) 176 5330 175 5332 5014 207
+CONVEX 2495 GT_PK(2,2) 407 5333 446 5334 4568 445
+CONVEX 2496 GT_PK(2,2) 407 5335 406 5334 5028 445
+CONVEX 2497 GT_PK(2,2) 297 5336 263 5337 4577 298
+CONVEX 2498 GT_PK(2,2) 297 5338 333 5337 5339 298
+CONVEX 2499 GT_PK(2,2) 369 5340 406 5341 5025 368
+CONVEX 2500 GT_PK(2,2) 369 5342 407 5340 5335 406
+CONVEX 2501 GT_PK(2,2) 336 5343 301 5344 5345 300
+CONVEX 2502 GT_PK(2,2) 335 5346 336 5347 5348 372
+CONVEX 2503 GT_PK(2,2) 335 5349 299 5350 5035 300
+CONVEX 2504 GT_PK(2,2) 335 5346 336 5350 5344 300
+CONVEX 2505 GT_PK(2,2) 266 5351 265 5352 5037 232
+CONVEX 2506 GT_PK(2,2) 266 5352 232 5353 3965 233
+CONVEX 2507 GT_PK(2,2) 266 5354 267 5353 4574 233
+CONVEX 2508 GT_PK(2,2) 266 5355 301 5354 5029 267
+CONVEX 2509 GT_PK(2,2) 266 5355 301 5356 5345 300
+CONVEX 2510 GT_PK(2,2) 266 5351 265 5356 5034 300
+CONVEX 2511 GT_PK(2,2) 229 5357 230 5358 5069 263
+CONVEX 2512 GT_PK(2,2) 229 5359 197 5360 4641 196
+CONVEX 2513 GT_PK(2,2) 229 5357 230 5359 5071 197
+CONVEX 2514 GT_PK(2,2) 450 5361 412 5362 5048 451
+CONVEX 2515 GT_PK(2,2) 450 5361 412 5363 5052 411
+CONVEX 2516 GT_PK(2,2) 450 5364 489 5362 2836 451
+CONVEX 2517 GT_PK(2,2) 450 5365 488 5364 3886 489
+CONVEX 2518 GT_PK(2,2) 448 5366 486 5367 4517 447
+CONVEX 2519 GT_PK(2,2) 448 5368 487 5366 4511 486
+CONVEX 2520 GT_PK(2,2) 921 5369 881 5370 5084 920
+CONVEX 2521 GT_PK(2,2) 921 5371 959 5370 5093 920
+CONVEX 2522 GT_PK(2,2) 960 5372 961 5373 5098 999
+CONVEX 2523 GT_PK(2,2) 960 5374 998 5373 5100 999
+CONVEX 2524 GT_PK(2,2) 960 5374 998 5375 5376 959
+CONVEX 2525 GT_PK(2,2) 960 5377 921 5375 5371 959
+CONVEX 2526 GT_PK(2,2) 997 5378 1036 5379 4666 1035
+CONVEX 2527 GT_PK(2,2) 997 5380 998 5378 5102 1036
+CONVEX 2528 GT_PK(2,2) 997 5381 959 5382 5094 958
+CONVEX 2529 GT_PK(2,2) 997 5380 998 5381 5376 959
+CONVEX 2530 GT_PK(2,2) 1223 5383 1255 5384 4677 1256
+CONVEX 2531 GT_PK(2,2) 1223 5385 1224 5384 5112 1256
+CONVEX 2532 GT_PK(2,2) 1223 5383 1255 5386 4679 1222
+CONVEX 2533 GT_PK(2,2) 1223 5385 1224 5387 5105 1190
+CONVEX 2534 GT_PK(2,2) 1223 5386 1222 5388 2309 1189
+CONVEX 2535 GT_PK(2,2) 1223 5387 1190 5388 3242 1189
+CONVEX 2536 GT_PK(2,2) 581 5389 541 5390 5120 542
+CONVEX 2537 GT_PK(2,2) 581 5391 620 5392 4721 621
+CONVEX 2538 GT_PK(2,2) 581 5390 542 5393 3282 582
+CONVEX 2539 GT_PK(2,2) 581 5392 621 5393 3304 582
+CONVEX 2540 GT_PK(2,2) 657 5394 658 5395 5123 697
+CONVEX 2541 GT_PK(2,2) 657 5396 696 5395 5136 697
+CONVEX 2542 GT_PK(2,2) 618 5397 658 5398 5125 619
+CONVEX 2543 GT_PK(2,2) 618 5399 657 5400 5401 617
+CONVEX 2544 GT_PK(2,2) 618 5399 657 5397 5394 658
+CONVEX 2545 GT_PK(2,2) 576 5402 616 5403 5134 615
+CONVEX 2546 GT_PK(2,2) 576 5404 536 5405 3776 575
+CONVEX 2547 GT_PK(2,2) 576 5403 615 5405 3854 575
+CONVEX 2548 GT_PK(2,2) 656 5406 616 5407 5408 617
+CONVEX 2549 GT_PK(2,2) 656 5409 657 5407 5401 617
+CONVEX 2550 GT_PK(2,2) 656 5409 657 5410 5396 696
+CONVEX 2551 GT_PK(2,2) 656 5410 696 5411 5139 695
+CONVEX 2552 GT_PK(2,2) 656 5411 695 5412 3849 655
+CONVEX 2553 GT_PK(2,2) 656 5406 616 5412 5135 655
+CONVEX 2554 GT_PK(2,2) 540 5413 541 5414 5121 502
+CONVEX 2555 GT_PK(2,2) 462 5415 461 5416 4719 423
+CONVEX 2556 GT_PK(2,2) 462 5417 424 5416 4922 423
+CONVEX 2557 GT_PK(2,2) 462 5417 424 5418 4923 463
+CONVEX 2558 GT_PK(2,2) 919 5419 957 5420 5421 958
+CONVEX 2559 GT_PK(2,2) 919 5422 918 5419 5140 957
+CONVEX 2560 GT_PK(2,2) 919 5423 920 5420 5095 958
+CONVEX 2561 GT_PK(2,2) 919 5423 920 5424 5086 880
+CONVEX 2562 GT_PK(2,2) 919 5425 879 5424 5090 880
+CONVEX 2563 GT_PK(2,2) 919 5422 918 5425 5145 879
+CONVEX 2564 GT_PK(2,2) 594 5426 633 5427 4800 593
+CONVEX 2565 GT_PK(2,2) 594 5428 554 5427 5153 593
+CONVEX 2566 GT_PK(2,2) 594 5426 633 5429 4798 634
+CONVEX 2567 GT_PK(2,2) 594 5428 554 5430 5151 555
+CONVEX 2568 GT_PK(2,2) 594 5431 595 5429 5147 634
+CONVEX 2569 GT_PK(2,2) 594 5431 595 5430 5148 555
+CONVEX 2570 GT_PK(2,2) 514 5432 476 5433 4772 475
+CONVEX 2571 GT_PK(2,2) 514 5434 554 5435 5154 553
+CONVEX 2572 GT_PK(2,2) 514 5432 476 5436 4774 515
+CONVEX 2573 GT_PK(2,2) 514 5434 554 5436 5152 515
+CONVEX 2574 GT_PK(2,2) 514 5437 513 5435 5438 553
+CONVEX 2575 GT_PK(2,2) 514 5437 513 5433 5321 475
+CONVEX 2576 GT_PK(2,2) 591 5439 631 5440 4782 592
+CONVEX 2577 GT_PK(2,2) 591 5441 630 5439 5158 631
+CONVEX 2578 GT_PK(2,2) 590 5442 630 5443 5161 629
+CONVEX 2579 GT_PK(2,2) 590 5444 589 5443 2028 629
+CONVEX 2580 GT_PK(2,2) 590 5445 550 5444 4176 589
+CONVEX 2581 GT_PK(2,2) 590 5446 591 5442 5441 630
+CONVEX 2582 GT_PK(2,2) 590 5447 551 5445 5155 550
+CONVEX 2583 GT_PK(2,2) 590 5446 591 5447 5448 551
+CONVEX 2584 GT_PK(2,2) 1177 5449 1176 5450 5186 1142
+CONVEX 2585 GT_PK(2,2) 1177 5451 1143 5452 5197 1178
+CONVEX 2586 GT_PK(2,2) 1177 5451 1143 5450 5199 1142
+CONVEX 2587 GT_PK(2,2) 1177 5452 1178 5453 2692 1211
+CONVEX 2588 GT_PK(2,2) 1177 5454 1210 5453 4268 1211
+CONVEX 2589 GT_PK(2,2) 1177 5449 1176 5454 5189 1210
+CONVEX 2590 GT_PK(2,2) 1175 5455 1176 5456 5188 1209
+CONVEX 2591 GT_PK(2,2) 1175 5457 1174 5458 3495 1208
+CONVEX 2592 GT_PK(2,2) 1175 5456 1209 5458 4856 1208
+CONVEX 2593 GT_PK(2,2) 1175 5457 1174 5459 3501 1140
+CONVEX 2594 GT_PK(2,2) 1175 5460 1141 5459 5461 1140
+CONVEX 2595 GT_PK(2,2) 1175 5455 1176 5460 5187 1141
+CONVEX 2596 GT_PK(2,2) 1105 5462 1068 5463 5201 1104
+CONVEX 2597 GT_PK(2,2) 1105 5464 1106 5465 4848 1141
+CONVEX 2598 GT_PK(2,2) 1105 5465 1141 5466 5461 1140
+CONVEX 2599 GT_PK(2,2) 1105 5463 1104 5466 4852 1140
+CONVEX 2600 GT_PK(2,2) 1069 5467 1106 5468 5193 1070
+CONVEX 2601 GT_PK(2,2) 1069 5469 1068 5470 5204 1031
+CONVEX 2602 GT_PK(2,2) 1069 5471 1105 5467 5464 1106
+CONVEX 2603 GT_PK(2,2) 1069 5471 1105 5469 5462 1068
+CONVEX 2604 GT_PK(2,2) 1069 5472 1032 5468 3465 1070
+CONVEX 2605 GT_PK(2,2) 1069 5470 1031 5472 3470 1032
+CONVEX 2606 GT_PK(2,2) 1354 5473 1377 5474 4872 1353
+CONVEX 2607 GT_PK(2,2) 1354 5475 1328 5474 4873 1353
+CONVEX 2608 GT_PK(2,2) 1354 5473 1377 5476 5228 1378
+CONVEX 2609 GT_PK(2,2) 1354 5477 1355 5476 5219 1378
+CONVEX 2610 GT_PK(2,2) 1354 5475 1328 5478 5231 1329
+CONVEX 2611 GT_PK(2,2) 1354 5477 1355 5478 5239 1329
+CONVEX 2612 GT_PK(2,2) 1300 5479 1328 5480 4874 1327
+CONVEX 2613 GT_PK(2,2) 1300 5481 1301 5479 5229 1328
+CONVEX 2614 GT_PK(2,2) 1300 5482 1299 5483 2725 1270
+CONVEX 2615 GT_PK(2,2) 1300 5482 1299 5480 3575 1327
+CONVEX 2616 GT_PK(2,2) 1300 5484 1271 5483 3614 1270
+CONVEX 2617 GT_PK(2,2) 1300 5481 1301 5484 5234 1271
+CONVEX 2618 GT_PK(2,2) 1400 5485 1401 5486 5258 1379
+CONVEX 2619 GT_PK(2,2) 1400 5487 1418 5488 5227 1378
+CONVEX 2620 GT_PK(2,2) 1400 5486 1379 5488 5220 1378
+CONVEX 2621 GT_PK(2,2) 1400 5489 1419 5487 5490 1418
+CONVEX 2622 GT_PK(2,2) 1400 5485 1401 5489 5251 1419
+CONVEX 2623 GT_PK(2,2) 174 5491 205 5492 5272 173
+CONVEX 2624 GT_PK(2,2) 174 5493 145 5494 5325 175
+CONVEX 2625 GT_PK(2,2) 174 5494 175 5495 5015 206
+CONVEX 2626 GT_PK(2,2) 174 5491 205 5495 5274 206
+CONVEX 2627 GT_PK(2,2) 142 5496 171 5497 5295 172
+CONVEX 2628 GT_PK(2,2) 142 5498 143 5497 5304 172
+CONVEX 2629 GT_PK(2,2) 142 5496 171 5499 5299 141
+CONVEX 2630 GT_PK(2,2) 142 5498 143 5500 5306 115
+CONVEX 2631 GT_PK(2,2) 142 5499 141 5501 3113 114
+CONVEX 2632 GT_PK(2,2) 142 5500 115 5501 5303 114
+CONVEX 2633 GT_PK(2,2) 552 5502 513 5503 5320 512
+CONVEX 2634 GT_PK(2,2) 552 5504 551 5503 5157 512
+CONVEX 2635 GT_PK(2,2) 552 5505 592 5506 4188 553
+CONVEX 2636 GT_PK(2,2) 552 5502 513 5506 5438 553
+CONVEX 2637 GT_PK(2,2) 552 5507 591 5505 5440 592
+CONVEX 2638 GT_PK(2,2) 552 5507 591 5504 5448 551
+CONVEX 2639 GT_PK(2,2) 144 5508 143 5509 5305 173
+CONVEX 2640 GT_PK(2,2) 144 5510 174 5509 5492 173
+CONVEX 2641 GT_PK(2,2) 144 5510 174 5511 5493 145
+CONVEX 2642 GT_PK(2,2) 144 5508 143 5512 5307 116
+CONVEX 2643 GT_PK(2,2) 118 5513 119 5514 5515 146
+CONVEX 2644 GT_PK(2,2) 118 5516 145 5514 5326 146
+CONVEX 2645 GT_PK(2,2) 118 5513 119 5517 5323 93
+CONVEX 2646 GT_PK(2,2) 118 5517 93 5518 3937 92
+CONVEX 2647 GT_PK(2,2) 147 5519 176 5520 5329 177
+CONVEX 2648 GT_PK(2,2) 147 5521 148 5522 4988 120
+CONVEX 2649 GT_PK(2,2) 147 5521 148 5520 4983 177
+CONVEX 2650 GT_PK(2,2) 147 5519 176 5523 5331 146
+CONVEX 2651 GT_PK(2,2) 147 5524 119 5522 5324 120
+CONVEX 2652 GT_PK(2,2) 147 5524 119 5523 5515 146
+CONVEX 2653 GT_PK(2,2) 408 5525 446 5526 4570 447
+CONVEX 2654 GT_PK(2,2) 408 5527 407 5525 5333 446
+CONVEX 2655 GT_PK(2,2) 332 5528 297 5529 5338 333
+CONVEX 2656 GT_PK(2,2) 332 5530 368 5531 4566 331
+CONVEX 2657 GT_PK(2,2) 332 5532 369 5530 5341 368
+CONVEX 2658 GT_PK(2,2) 332 5532 369 5529 5533 333
+CONVEX 2659 GT_PK(2,2) 262 5534 297 5535 5336 263
+CONVEX 2660 GT_PK(2,2) 262 5536 229 5535 5358 263
+CONVEX 2661 GT_PK(2,2) 373 5537 336 5538 5348 372
+CONVEX 2662 GT_PK(2,2) 373 5539 410 5538 5540 372
+CONVEX 2663 GT_PK(2,2) 373 5541 411 5542 5053 374
+CONVEX 2664 GT_PK(2,2) 373 5539 410 5541 5543 411
+CONVEX 2665 GT_PK(2,2) 228 5544 261 5545 5044 227
+CONVEX 2666 GT_PK(2,2) 228 5546 229 5547 5360 196
+CONVEX 2667 GT_PK(2,2) 228 5548 262 5544 5549 261
+CONVEX 2668 GT_PK(2,2) 228 5548 262 5546 5536 229
+CONVEX 2669 GT_PK(2,2) 228 5550 195 5547 3960 196
+CONVEX 2670 GT_PK(2,2) 228 5545 227 5550 4596 195
+CONVEX 2671 GT_PK(2,2) 449 5551 448 5552 5368 487
+CONVEX 2672 GT_PK(2,2) 449 5552 487 5553 4510 488
+CONVEX 2673 GT_PK(2,2) 449 5554 450 5553 5365 488
+CONVEX 2674 GT_PK(2,2) 449 5554 450 5555 5363 411
+CONVEX 2675 GT_PK(2,2) 449 5556 410 5555 5543 411
+CONVEX 2676 GT_PK(2,2) 449 5551 448 5556 5557 410
+CONVEX 2677 GT_PK(2,2) 882 5558 921 5559 5369 881
+CONVEX 2678 GT_PK(2,2) 882 5560 843 5561 3800 883
+CONVEX 2679 GT_PK(2,2) 882 5562 842 5560 4659 843
+CONVEX 2680 GT_PK(2,2) 882 5559 881 5562 5088 842
+CONVEX 2681 GT_PK(2,2) 922 5563 960 5564 5377 921
+CONVEX 2682 GT_PK(2,2) 922 5565 883 5566 3797 923
+CONVEX 2683 GT_PK(2,2) 922 5567 961 5566 5099 923
+CONVEX 2684 GT_PK(2,2) 922 5563 960 5567 5372 961
+CONVEX 2685 GT_PK(2,2) 922 5568 882 5565 5561 883
+CONVEX 2686 GT_PK(2,2) 922 5568 882 5564 5558 921
+CONVEX 2687 GT_PK(2,2) 996 5569 995 5570 5181 957
+CONVEX 2688 GT_PK(2,2) 996 5570 957 5571 5421 958
+CONVEX 2689 GT_PK(2,2) 996 5572 997 5571 5382 958
+CONVEX 2690 GT_PK(2,2) 996 5572 997 5573 5379 1035
+CONVEX 2691 GT_PK(2,2) 996 5574 1034 5573 4839 1035
+CONVEX 2692 GT_PK(2,2) 996 5569 995 5574 5185 1034
+CONVEX 2693 GT_PK(2,2) 578 5575 618 5576 5400 617
+CONVEX 2694 GT_PK(2,2) 578 5577 538 5578 5579 539
+CONVEX 2695 GT_PK(2,2) 580 5580 540 5581 5413 541
+CONVEX 2696 GT_PK(2,2) 580 5582 620 5583 4724 619
+CONVEX 2697 GT_PK(2,2) 580 5584 581 5582 5391 620
+CONVEX 2698 GT_PK(2,2) 580 5584 581 5581 5389 541
+CONVEX 2699 GT_PK(2,2) 579 5585 540 5586 5587 539
+CONVEX 2700 GT_PK(2,2) 579 5588 578 5586 5578 539
+CONVEX 2701 GT_PK(2,2) 579 5588 578 5589 5575 618
+CONVEX 2702 GT_PK(2,2) 579 5589 618 5590 5398 619
+CONVEX 2703 GT_PK(2,2) 579 5591 580 5590 5583 619
+CONVEX 2704 GT_PK(2,2) 579 5591 580 5585 5580 540
+CONVEX 2705 GT_PK(2,2) 501 5592 540 5593 5587 539
+CONVEX 2706 GT_PK(2,2) 501 5594 462 5595 5418 463
+CONVEX 2707 GT_PK(2,2) 501 5595 463 5596 4741 502
+CONVEX 2708 GT_PK(2,2) 501 5592 540 5596 5414 502
+CONVEX 2709 GT_PK(2,2) 577 5597 576 5598 5402 616
+CONVEX 2710 GT_PK(2,2) 577 5598 616 5599 5408 617
+CONVEX 2711 GT_PK(2,2) 577 5600 578 5599 5576 617
+CONVEX 2712 GT_PK(2,2) 577 5600 578 5601 5577 538
+CONVEX 2713 GT_PK(2,2) 500 5602 462 5603 5415 461
+CONVEX 2714 GT_PK(2,2) 500 5604 538 5605 5579 539
+CONVEX 2715 GT_PK(2,2) 500 5606 501 5605 5593 539
+CONVEX 2716 GT_PK(2,2) 500 5606 501 5602 5594 462
+CONVEX 2717 GT_PK(2,2) 500 5603 461 5607 4718 499
+CONVEX 2718 GT_PK(2,2) 500 5604 538 5607 5608 499
+CONVEX 2719 GT_PK(2,2) 117 5609 118 5610 5518 92
+CONVEX 2720 GT_PK(2,2) 117 5611 144 5612 5512 116
+CONVEX 2721 GT_PK(2,2) 117 5611 144 5613 5511 145
+CONVEX 2722 GT_PK(2,2) 117 5609 118 5613 5516 145
+CONVEX 2723 GT_PK(2,2) 117 5614 91 5610 4911 92
+CONVEX 2724 GT_PK(2,2) 117 5612 116 5614 3703 91
+CONVEX 2725 GT_PK(2,2) 409 5615 410 5616 5540 372
+CONVEX 2726 GT_PK(2,2) 409 5617 408 5618 5526 447
+CONVEX 2727 GT_PK(2,2) 409 5619 448 5618 5367 447
+CONVEX 2728 GT_PK(2,2) 409 5619 448 5615 5557 410
+CONVEX 2729 GT_PK(2,2) 371 5620 335 5621 5347 372
+CONVEX 2730 GT_PK(2,2) 371 5622 409 5621 5616 372
+CONVEX 2731 GT_PK(2,2) 371 5622 409 5623 5617 408
+CONVEX 2732 GT_PK(2,2) 296 5624 262 5625 5534 297
+CONVEX 2733 GT_PK(2,2) 296 5626 331 5627 3954 295
+CONVEX 2734 GT_PK(2,2) 296 5628 261 5627 5047 295
+CONVEX 2735 GT_PK(2,2) 296 5624 262 5628 5549 261
+CONVEX 2736 GT_PK(2,2) 296 5629 332 5626 5531 331
+CONVEX 2737 GT_PK(2,2) 296 5629 332 5625 5528 297
+CONVEX 2738 GT_PK(2,2) 337 5630 373 5631 5537 336
+CONVEX 2739 GT_PK(2,2) 337 5631 336 5632 5343 301
+CONVEX 2740 GT_PK(2,2) 337 5633 374 5634 4602 338
+CONVEX 2741 GT_PK(2,2) 337 5630 373 5633 5542 374
+CONVEX 2742 GT_PK(2,2) 337 5634 338 5635 3095 302
+CONVEX 2743 GT_PK(2,2) 337 5632 301 5635 5030 302
+CONVEX 2744 GT_PK(2,2) 537 5636 577 5637 5597 576
+CONVEX 2745 GT_PK(2,2) 537 5638 536 5639 2990 498
+CONVEX 2746 GT_PK(2,2) 537 5637 576 5638 5404 536
+CONVEX 2747 GT_PK(2,2) 537 5640 499 5639 4100 498
+CONVEX 2748 GT_PK(2,2) 537 5641 538 5640 5608 499
+CONVEX 2749 GT_PK(2,2) 537 5636 577 5641 5601 538
+CONVEX 2750 GT_PK(2,2) 334 5642 371 5643 5620 335
+CONVEX 2751 GT_PK(2,2) 334 5643 335 5644 5349 299
+CONVEX 2752 GT_PK(2,2) 334 5645 333 5646 5339 298
+CONVEX 2753 GT_PK(2,2) 334 5644 299 5646 5032 298
+CONVEX 2754 GT_PK(2,2) 370 5647 408 5648 5527 407
+CONVEX 2755 GT_PK(2,2) 370 5649 371 5647 5623 408
+CONVEX 2756 GT_PK(2,2) 370 5650 369 5648 5342 407
+CONVEX 2757 GT_PK(2,2) 370 5651 334 5649 5642 371
+CONVEX 2758 GT_PK(2,2) 370 5650 369 5652 5533 333
+CONVEX 2759 GT_PK(2,2) 370 5651 334 5652 5645 333
END MESH STRUCTURE DESCRIPTION
diff --git a/interface/src/scilab/demos/data/disc_P2_h2.mesh b/interface/src/scilab/demos/data/disc_P2_h2.mesh
index 8a11842..35b2731 100644
--- a/interface/src/scilab/demos/data/disc_P2_h2.mesh
+++ b/interface/src/scilab/demos/data/disc_P2_h2.mesh
@@ -10,312 +10,1392 @@ BEGIN POINTS LIST
POINT 2 -20 20
POINT 3 20 20
POINT 4 0 40
- POINT 5 -10.98978892636249 3.289986853546615
- POINT 6 -7.455051935387742 1.441384732666446
- POINT 7 -3.676797270081755 0.3408758629801169
- POINT 8 3.676739140647854 0.3408649912656072
- POINT 9 7.454956757891998 1.441346499866884
- POINT 10 10.98967587538561 3.289912503101757
- POINT 11 -14.0168269073075 5.73365626899654
- POINT 12 -8.695621440244636 6.296208976859693
- POINT 13 -4.394745255440499 5.015856566647908
- POINT 14 -2.026216535175318e-05 4.385124114216329
- POINT 15 4.394708091285465 5.015856253328598
- POINT 16 8.695583210536949 6.296192236703892
- POINT 17 14.01674847505161 5.733579208955796
- POINT 18 -16.59751417751507 8.841033957952504
- POINT 19 -11.67153666400569 9.560370517352128
- POINT 20 -6.622536405170427 9.609178468908505
- POINT 21 -2.162226938155009 8.907447576607822
- POINT 22 2.162220418053965 8.907449303560238
- POINT 23 6.62252892316614 9.609178885793535
- POINT 24 11.67152235457562 9.560353456050622
- POINT 25 16.59746793653143 8.840965180813091
- POINT 26 -18.49296961576042 12.38356548043812
- POINT 27 -14.03986978753954 13.21961891707463
- POINT 28 -9.212447689054923 13.42718043490255
- POINT 29 -4.546978357052273 13.23975192949301
- POINT 30 5.760553932435131e-06 13.09029577543401
- POINT 31 4.546984712272912 13.2397591385677
- POINT 32 9.212451943525352 13.42717994917974
- POINT 33 14.03987180658499 13.21960569166439
- POINT 34 18.49294552140193 12.3835069787666
- POINT 35 -19.60575567023449 16.04850096809653
- POINT 36 -15.59452670078516 17.30489743540965
- POINT 37 -11.19255363614599 17.32291243784231
- POINT 38 -6.720002186738463 17.55851232809086
- POINT 39 -2.521105171955536 17.0288301192291
- POINT 40 2.521117530994832 17.02884382666544
- POINT 41 6.720008173371727 17.55852412828754
- POINT 42 11.19255813733148 17.32291152297285
- POINT 43 15.59452813708109 17.30489873028883
- POINT 44 19.60574841112116 16.04846495145881
- POINT 45 -16.35730659116254 21.75725594233062
- POINT 46 -12.54544836995473 21.48138724705098
- POINT 47 -8.37129847568881 21.60726175061301
- POINT 48 -4.053718777686841 21.85246502790269
- POINT 49 -1.430589398276894e-05 24.01054233578156
- POINT 50 4.05371501425693 21.85249206836341
- POINT 51 8.371300119263841 21.60726988024046
- POINT 52 12.54545081863551 21.48139080472586
- POINT 53 16.35731330216852 21.75725990853536
- POINT 54 -19.41056153872311 24.81976148284177
- POINT 55 -14.80560392580181 26.07573876068267
- POINT 56 -10.66746926752378 25.66425346686257
- POINT 57 -6.065699906353569 25.80431103098134
- POINT 58 -2.285109034351877 27.41452583361899
- POINT 59 2.285117889708415 27.41450890210915
- POINT 60 6.065725475366363 25.80433146618176
- POINT 61 10.66748147994728 25.66426492608582
- POINT 62 14.80560831647502 26.07574769863441
- POINT 63 19.41055542162303 24.81978611809871
- POINT 64 -17.79052993253167 29.13767173407599
- POINT 65 -12.53266642765302 30.28076603601422
- POINT 66 -8.408829224822554 29.44178330973553
- POINT 67 -4.486611626819454 30.93433334096026
- POINT 68 -3.455844492966306e-06 31.78686138258002
- POINT 69 4.486608079340947 30.93433387532503
- POINT 70 8.408846377235559 29.44180970477908
- POINT 71 12.53266137297764 30.28079181313681
- POINT 72 17.79050469035144 29.13772087902333
- POINT 73 -15.42321743407593 32.73280660267888
- POINT 74 -12.36825118230115 35.71707233206979
- POINT 75 -8.654673025388929 33.6487632940044
- POINT 76 -4.244918305693361 35.1578478808239
- POINT 77 4.244868056856853 35.1578586139012
- POINT 78 8.654638880706619 33.64878973380078
- POINT 79 12.36818408598653 35.71712513202336
- POINT 80 15.42316052899461 32.73287553137968
- POINT 81 -8.358587775297027 38.16959026512966
- POINT 82 -4.173840349470416 39.55962823616952
- POINT 83 -3.315758252031564e-05 36.08253135745896
- POINT 84 4.173782294307199 39.55964062450516
- POINT 85 8.358512109833965 38.16962507345837
- POINT 86 -15.31869198252731 11.03032643751357
- POINT 87 -14.13452542076038 9.200702237652315
- POINT 88 -12.85570322577262 11.38999471721338
- POINT 89 14.81719997183304 15.26225221097661
- POINT 90 12.61621497195824 15.27125860731862
- POINT 91 13.39354313720629 17.31390512663084
- POINT 92 16.26640866399346 12.80155633521549
- POINT 93 15.31866987155821 11.03028543623874
- POINT 94 17.63438934978107 10.56451880793851
- POINT 95 17.04373682924151 14.84420285452771
- POINT 96 -10.59366972652097 31.96476466500931
- POINT 97 -10.47074782623779 29.86127467287488
- POINT 98 -8.531751125105743 31.54527330186997
- POINT 99 -12.45045880497709 32.99891918404201
- POINT 100 -10.51146210384504 34.68291781303709
- POINT 101 -8.506630400342978 35.90917677956703
- POINT 102 -10.43571526797337 37.06153095754958
- POINT 103 -17.63442337101413 10.56458323774599
- POINT 104 -16.26641970164998 12.80159219875637
- POINT 105 -15.3858183445685 7.22202811794831
- POINT 106 -12.8441817856566 7.647013393174333
- POINT 107 16.29805650341323 27.60673428882887
- POINT 108 15.16158303166454 29.70925634608007
- POINT 109 13.66913484472633 28.17826975588561
- POINT 110 -1.142556245098185 29.6006936080995
- POINT 111 4.427678269136592e-06 27.41451736786407
- POINT 112 1.142557216931961 29.60068514234459
- POINT 113 -17.04374815827279 14.84423145792389
- POINT 114 -14.81719824416235 15.26225817624214
- POINT 115 15.97592071962481 19.53107931941209
- POINT 116 18.17865665108426 20.87862995426768
- POINT 117 17.79726406854054 18.65244936514441
- POINT 118 11.62616187505517 13.32339282042206
- POINT 119 10.20250504042842 15.3750457360763
- POINT 120 6.879718327899132 13.33346954387372
- POINT 121 7.917490433345746 11.51817941748664
- POINT 122 5.584756817719526 11.42446901218062
- POINT 123 7.545654146317784 19.582897004264
- POINT 124 8.956283155351606 17.4407178256302
- POINT 125 9.781929128297662 19.46509070160666
- POINT 126 7.96623005844854 15.49285203873364
- POINT 127 5.633496442822319 15.39914163342762
- POINT 128 12.8556970805803 11.3899795738575
- POINT 129 14.13449514555352 9.200659318431857
- POINT 130 10.44198714905048 11.49376670261518
- POINT 131 9.147025638870879 9.584766170922078
- POINT 132 -13.97794193086447 31.50678631934655
- POINT 133 -13.97561719584198 34.30671603178849
- POINT 134 -16.70387650845763 30.99911431489088
- POINT 135 -15.16159818009234 29.7092188850451
- POINT 136 -6.301753040495194 36.66371907297678
- POINT 137 -6.449795665541145 34.40330558741415
- POINT 138 -4.209379327581889 37.35873805849671
- POINT 139 -6.304639255162508 38.98029279438281
- POINT 140 4.209325175582026 37.35874961920318
- POINT 141 6.301690083345409 36.66374184367979
- POINT 142 6.304573775735958 38.98031527820729
- POINT 143 -13.66913517672742 28.17825239834845
- POINT 144 -16.29806692916674 27.60670524737933
- POINT 145 -17.10808273226246 25.44775012176222
- POINT 146 -18.72542076142402 27.02556955988556
- POINT 147 10.51141148334658 34.68295743291207
- POINT 148 8.506575495270292 35.90920740362957
- POINT 149 10.4356453552653 37.06157496167121
- POINT 150 6.449753468781736 34.40332417385099
- POINT 151 10.59365012684213 31.96479077346879
- POINT 152 8.531742628971088 31.54529971928993
- POINT 153 10.4707538751066 29.86130075895795
- POINT 154 12.45042272948209 32.99895847258009
- POINT 155 17.60013827410112 16.67668184087382
- POINT 156 19.90119304214559 18.01442401696686
- POINT 157 19.13728303754552 14.18928652402979
- POINT 158 13.97555586519206 34.30677709224583
- POINT 159 13.97791095098612 31.50683367225824
- POINT 160 16.70383744452203 30.99917471256351
- POINT 161 -17.60014118550983 16.67669920175309
- POINT 162 -19.90119484636033 18.01444229663801
- POINT 163 -17.79726335039258 18.65244871770483
- POINT 164 -19.13729740986643 14.18933437204147
- POINT 165 14.45138206040202 21.61932535663061
- POINT 166 13.67552956755527 23.77856925168013
- POINT 167 15.58146080932177 23.91650380358488
- POINT 168 10.45837546894968 21.54433034248316
- POINT 169 11.8690044779835 19.40215116384935
- POINT 170 14.0699894778583 19.39314476750734
- POINT 171 18.7254069306502 27.02560730650771
- POINT 172 17.10808186904902 25.44776690836656
- POINT 173 17.88393436189578 23.28852301331703
- POINT 174 19.85209195747333 22.42784944192063
- POINT 175 8.366603477656822 25.73429819613379
- POINT 176 9.53816392859142 27.55303731543246
- POINT 177 7.237285926300961 27.62307058548042
- POINT 178 11.60007142646246 27.97252836961132
- POINT 179 12.73654489821115 25.87000631236012
- POINT 180 9.519390799605562 23.63576740316314
- POINT 181 7.218512797315102 23.70580067321111
- POINT 182 11.6064661492914 23.57282786540584
- POINT 183 5.059720244811647 23.82841176727259
- POINT 184 6.212507566760386 21.72988097430193
- POINT 185 5.386861593814329 19.70550809832548
- POINT 186 3.169416451982673 24.63350048523628
- POINT 187 4.175421682537388 26.60942018414546
- POINT 188 12.84413541481362 7.64696633250321
- POINT 189 15.38575758374665 7.221953946724504
- POINT 190 6.545145650911207 5.656024245016244
- POINT 191 7.659056066851544 7.952685561248713
- POINT 192 5.508618507225803 7.312517569561066
- POINT 193 10.18355278255628 7.928272846377257
- POINT 194 11.35616584279428 6.014885722829844
- POINT 195 9.84262954296128 4.793052369902824
- POINT 196 12.5627706312312 4.437969385077269
- POINT 197 5.924832424588732 3.228601376597741
- POINT 198 5.59298116705137 0.7979540467762278
- POINT 199 4.03572361596666 2.678360622297102
- POINT 200 8.075269984214474 3.868769368285388
- POINT 201 9.268518322543754 2.277286464498438
- POINT 202 -3.385860330585666 29.17442958728963
- POINT 203 -2.243307541331974 31.36059736177015
- POINT 204 -4.365764966256407 33.04609061089208
- POINT 205 -2.122460880768927 33.47235463170196
- POINT 206 -5.276155766586511 28.3693221859708
- POINT 207 -6.447720425821004 30.1880583253479
- POINT 208 -7.237264565588061 27.62304717035844
- POINT 209 -4.175404470352722 26.60941843230016
- POINT 210 -6.570642326104192 32.29154831748234
- POINT 211 -2.122475731637941 35.62018961914143
- POINT 212 -1.830671350664097e-05 33.93469637001949
- POINT 213 2.122417449637166 35.62019498568008
- POINT 214 2.12243230050618 33.47235999824061
- POINT 215 -2.086936753526468 37.82107979681424
- POINT 216 -1.657879126015782e-05 38.04126567872948
- POINT 217 -2.098502568614956 39.88960238033538
- POINT 218 2.086874568362339 37.82108599098206
- POINT 219 2.09847524707464 39.8896054946081
- POINT 220 5.276166777353655 28.3693326707534
- POINT 221 6.447727228288253 30.18807179005206
- POINT 222 3.385862984524681 29.17442138871709
- POINT 223 6.570623480023783 32.2915618045629
- POINT 224 4.365738068098899 33.04609624461312
- POINT 225 2.243302311748227 31.36059762895253
- POINT 226 -15.97591664597385 19.53107668887014
- POINT 227 -18.17865329558127 20.87862797116531
- POINT 228 -17.88393406494282 23.2885087125862
- POINT 229 -19.85209345422734 22.42783684408701
- POINT 230 -15.58145525848218 23.91649735150665
- POINT 231 1.260561645774382 15.05956980104973
- POINT 232 3.534051121633872 15.13430148261657
- POINT 233 2.273495236413422 13.16502745700086
- POINT 234 4.62056285218328 17.29368397747649
- POINT 235 3.287416272625881 19.44066794751443
- POINT 236 1.260558765497416 18.51442191333272
- POINT 237 2.026857507128465 20.92624603418171
- POINT 238 -1.260549705700802 15.05956294733156
- POINT 239 -3.534041764503905 15.13429102436105
- POINT 240 -2.27348629824917 13.16502385246351
- POINT 241 -4.620553679346999 17.29367122365998
- POINT 242 -5.633490271895369 15.39913212879194
- POINT 243 6.179519647986353e-06 17.02883697294727
- POINT 244 -1.260552585977768 18.51441505961455
- POINT 245 3.354602565163439 11.07360422106397
- POINT 246 4.392374670610053 9.258314094676887
- POINT 247 1.081113089303949 10.99887253949712
- POINT 248 3.278464254669715 6.961652778444417
- POINT 249 -8.956277911442228 17.44071238296659
- POINT 250 -9.781926055917403 19.46508709422766
- POINT 251 -7.545650331213636 19.58288703935193
- POINT 252 -13.39354016846558 17.31390493662598
- POINT 253 -12.61621171184277 15.27126567745847
- POINT 254 -7.659078922707532 7.952693722884099
- POINT 255 -10.18357905212516 7.928289747105911
- POINT 256 -9.147036534588061 9.584774493130316
- POINT 257 -11.35622417377607 6.014932622928116
- POINT 258 -9.842705183303561 4.793097915203154
- POINT 259 -12.5628648971392 4.438046414902402
- POINT 260 -8.07533668781619 3.868796854763069
- POINT 261 -9.268622145138828 2.27734158433505
- POINT 262 1.081100077944307 6.646286708888283
- POINT 263 2.197343914560057 4.700490183772463
- POINT 264 1.838359439241251 2.362994552740968
- POINT 265 -1.013108267587659e-05 2.192562057108165
- POINT 266 1.846253788767268 0.0853985780217391
- POINT 267 -1.081110588800538 10.99887167602092
- POINT 268 -3.354602647603641 11.07359975305042
- POINT 269 -4.392381671662718 9.258313022758163
- POINT 270 -5.58475738111135 11.42446519920076
- POINT 271 -3.260050521758373e-06 8.90744844008403
- POINT 272 -1.08112360016018 6.646285845412075
- POINT 273 -8.366584586938671 25.73428224892195
- POINT 274 -9.519383871606294 23.63575760873779
- POINT 275 -7.21849919102119 23.70578639079717
- POINT 276 -9.538149246173166 27.55301838829905
- POINT 277 -11.6000678475884 27.97250975143839
- POINT 278 -12.73653659666279 25.86999611377262
- POINT 279 -5.059709342020205 23.82838802944201
- POINT 280 -6.212508626687826 21.72986338925784
- POINT 281 -3.287411974821189 19.44064757356589
- POINT 282 -2.026859388843421 20.92623251395134
- POINT 283 -3.169413906019359 24.63349543076084
- POINT 284 -5.386860482212652 19.70548867799678
- POINT 285 -11.86900100305036 19.40214984244664
- POINT 286 -10.45837342282177 21.54432449883199
- POINT 287 -11.60645881873926 23.57282035695677
- POINT 288 -14.45137748055864 21.6193215946908
- POINT 289 -14.06998753536995 19.39314234123031
- POINT 290 -13.67552614787827 23.77856300386682
- POINT 291 -7.966224937896692 15.49284638149671
- POINT 292 -6.879713023053598 13.33346618219778
- POINT 293 -10.20250066260046 15.37504643637243
- POINT 294 -7.917492047112675 11.51817945190553
- POINT 295 -10.44199217653031 11.49377547612734
- POINT 296 -11.62615873829723 13.32339967598859
- POINT 297 -1.838408766123554 2.362999988598223
- POINT 298 -1.846281530475226 0.08540130760665365
- POINT 299 -3.278486096797754 6.961652071627865
- POINT 300 -2.197382758802926 4.700490340432118
- POINT 301 -6.545183347842568 5.6560327717538
- POINT 302 -5.92489859541412 3.228620649657177
- POINT 303 -5.508640830305463 7.312517517778206
- POINT 304 -4.035771262761127 2.678366214814012
- POINT 305 -5.593056997119752 0.797976657516179
- POINT 306 -2.026866541790412 22.93150368184212
- POINT 307 -7.152946991384468e-06 22.00527116789078
- POINT 308 -1.14256167012293 25.71253408470027
- POINT 309 1.142551791907216 25.71252561894535
- POINT 310 2.026850354181474 22.93151720207248
+ POINT 5 -7.08999439411224 1.298877587388341
+ POINT 6 -5.282004223598042 0.7100950914239894
+ POINT 7 -3.47031521720064 0.3033781502190239
+ POINT 8 -1.689974063564663 0.07152821552843025
+ POINT 9 1.689960162663852 0.07152703670926773
+ POINT 10 3.470291113247503 0.3033739033986539
+ POINT 11 5.281972434142698 0.7100863867937268
+ POINT 12 7.089956578995546 1.298863250915369
+ POINT 13 -10.33788236531681 2.879013223504487
+ POINT 14 -8.728323343402396 2.005101511455367
+ POINT 15 -6.155723063676203 2.801434963065342
+ POINT 16 -4.091201195594828 2.459658715166061
+ POINT 17 -2.066659832781266 2.187655143712953
+ POINT 18 -4.444059962388502e-06 2.064287137447093
+ POINT 19 2.066650046418929 2.187657831466219
+ POINT 20 4.091191239691891 2.459658150301677
+ POINT 21 6.155715570419536 2.801429443148412
+ POINT 22 8.728292838334855 2.005086715177716
+ POINT 23 10.3378510065 2.878994288669519
+ POINT 24 -13.31700959313135 5.078295824654251
+ POINT 25 -11.8842697780299 3.913852796799773
+ POINT 26 -9.460448082417175 4.366488604800259
+ POINT 27 -7.512025315084293 4.126002865730436
+ POINT 28 -5.172892121816004 4.455275571417475
+ POINT 29 -3.057534701397881 4.267955770521298
+ POINT 30 -1.012355277947994 4.110780430542055
+ POINT 31 1.012349419089582 4.110782567666035
+ POINT 32 3.057529483199409 4.267957853121388
+ POINT 33 5.172886691584971 4.455272913530382
+ POINT 34 7.512016782430195 4.125998677146069
+ POINT 35 9.460436885249777 4.366480067235193
+ POINT 36 11.88424594459136 3.913835188943747
+ POINT 37 13.31698679929866 5.078275482126558
+ POINT 38 -14.7498830675396 6.492929647996144
+ POINT 39 -12.45509720824102 6.556537137387828
+ POINT 40 -10.6482491458674 5.948211070168938
+ POINT 41 -8.422109451390526 6.167912606077227
+ POINT 42 -6.353060403793894 6.112985632708121
+ POINT 43 -4.1407681774423 6.228053553808773
+ POINT 44 -2.044474263097546 6.130734213928414
+ POINT 45 -1.590000917432027e-06 6.079527809516725
+ POINT 46 2.044472146376001 6.130736081211611
+ POINT 47 4.140767470322072 6.22805374467435
+ POINT 48 6.353058937427791 6.112982734736828
+ POINT 49 8.422108492096564 6.167907314850485
+ POINT 50 10.64824854146091 5.948202934940974
+ POINT 51 12.45509688415863 6.556538659055924
+ POINT 52 14.74986960384593 6.492914945498344
+ POINT 53 -16.04355519086491 8.058294224118221
+ POINT 54 -13.74135223644284 8.192183278283656
+ POINT 55 -11.47752803375488 8.160729976898475
+ POINT 56 -9.493527168153337 7.92578225082361
+ POINT 57 -7.348476128284648 8.030483731407866
+ POINT 58 -5.251990097092846 8.021830105465815
+ POINT 59 -3.111403417400961 8.061569553457121
+ POINT 60 -1.03035566619991 8.025902010406856
+ POINT 61 1.030354767138576 8.025902400729668
+ POINT 62 3.111403710309801 8.061569941428463
+ POINT 63 5.251991017315566 8.021829123575905
+ POINT 64 7.348476568276788 8.030480163525478
+ POINT 65 9.49352663676625 7.92577656119784
+ POINT 66 11.47752506667806 8.160726192772536
+ POINT 67 13.74135116972482 8.192181839463158
+ POINT 68 16.04354708966182 8.058283340247721
+ POINT 69 -17.19580986241097 9.787060992258192
+ POINT 70 -14.93702314944201 9.823933424582281
+ POINT 71 -12.67351421081692 9.907845730886832
+ POINT 72 -10.48194789872941 9.921029402134767
+ POINT 73 -8.415247672061369 9.840575684874789
+ POINT 74 -6.293821461179366 9.890161035967978
+ POINT 75 -4.18979493172746 9.895564239362063
+ POINT 76 -2.081243704999238 9.916613908721169
+ POINT 77 5.730172508017217e-08 9.910960593168005
+ POINT 78 2.081244132593595 9.916613808527552
+ POINT 79 4.189795976700378 9.895563750716825
+ POINT 80 6.293822706796825 9.890159478467984
+ POINT 81 8.415248200245212 9.840572417227369
+ POINT 82 10.48194698614503 9.921026346494969
+ POINT 83 12.67351249301398 9.90784290415405
+ POINT 84 14.93702196401547 9.823930709655935
+ POINT 85 17.19580506925672 9.787052921897237
+ POINT 86 -18.1760415240729 11.65545001122227
+ POINT 87 -15.97553246064111 11.5448525408589
+ POINT 88 -13.78571642443011 11.61751913076442
+ POINT 89 -11.59628723826348 11.69602393958708
+ POINT 90 -9.442169657304916 11.7276271718398
+ POINT 91 -7.349624558628578 11.71151253389753
+ POINT 92 -5.24282073613147 11.73166174921223
+ POINT 93 -3.137905182843987 11.749161104766
+ POINT 94 -1.042556134226208 11.76547185321201
+ POINT 95 1.042556695466196 11.76547172930404
+ POINT 96 3.13790593838561 11.74916068398455
+ POINT 97 5.242821722657395 11.73166093775092
+ POINT 98 7.349625501825332 11.7115109952139
+ POINT 99 9.442169874348188 11.72762525690472
+ POINT 100 11.59628683371615 11.69602200942614
+ POINT 101 13.78571564810794 11.61751684765504
+ POINT 102 15.97553159279355 11.54484971825705
+ POINT 103 18.17603883633879 11.65544415682245
+ POINT 104 -18.9605397782243 13.63620150237337
+ POINT 105 -16.8378114819632 13.34701391345798
+ POINT 106 -14.74755920142683 13.39190264700377
+ POINT 107 -12.63015409928628 13.45515225576576
+ POINT 108 -10.4974158537763 13.51638952902862
+ POINT 109 -8.377087236386718 13.55137598391785
+ POINT 110 -6.285880485474346 13.5571522438029
+ POINT 111 -4.197964629953373 13.554499339371
+ POINT 112 -2.088214950681028 13.58585648886253
+ POINT 113 2.731150748891409e-07 13.59731244193799
+ POINT 114 2.088215540160786 13.58585624443037
+ POINT 115 4.197965288358211 13.55449885456938
+ POINT 116 6.285881219549023 13.55715142631005
+ POINT 117 8.377087797482492 13.5513749885778
+ POINT 118 10.49741609890272 13.51638838986579
+ POINT 119 12.63015411255437 13.45515089704564
+ POINT 120 14.74755900190871 13.3919008647022
+ POINT 121 16.83781104922592 13.34701152878708
+ POINT 122 18.96053842326367 13.63619746535554
+ POINT 123 -19.5357573624754 15.71582163367355
+ POINT 124 -17.53374306722162 15.20882267305824
+ POINT 125 -15.57069741754931 15.24451363995668
+ POINT 126 -13.55098734811856 15.27194090964616
+ POINT 127 -11.4874826074671 15.31182390849893
+ POINT 128 -9.398270307101383 15.3521915525082
+ POINT 129 -7.307964300837752 15.3807112166889
+ POINT 130 -5.231490199222396 15.39200882295255
+ POINT 131 -3.169152633696715 15.35291249391119
+ POINT 132 -1.041499472772248 15.40847695692984
+ POINT 133 1.041499922227459 15.40847686112553
+ POINT 134 3.169153095957357 15.35291225824823
+ POINT 135 5.231490717147384 15.39200836588829
+ POINT 136 7.307964797170775 15.38071066913708
+ POINT 137 9.398270745362067 15.35219096658757
+ POINT 138 11.48748296447435 15.31182320391143
+ POINT 139 13.55098760797554 15.27193995853761
+ POINT 140 15.57069756108526 15.24451232768288
+ POINT 141 17.5337430129703 15.20882089303506
+ POINT 142 19.53575681130713 15.71581912036011
+ POINT 143 -18.2269232082509 17.13021291903821
+ POINT 144 -16.40696619670878 17.17145148168169
+ POINT 145 -14.46503683750223 17.15281425943443
+ POINT 146 -12.45424174106675 17.15199836204197
+ POINT 147 -10.39981013664358 17.16515504075176
+ POINT 148 -8.328026293006795 17.18988295252257
+ POINT 149 -6.256758829896484 17.21190086556036
+ POINT 150 -4.196112455235621 17.22388615617422
+ POINT 151 -2.171217513306863 17.11254059462183
+ POINT 152 1.665915350806957e-07 17.22074676082319
+ POINT 153 2.171217828945217 17.1125405142267
+ POINT 154 4.19611284158213 17.22388591748381
+ POINT 155 6.256759233014987 17.21190057227975
+ POINT 156 8.32802671761999 17.18988265372117
+ POINT 157 10.39981059340922 17.16515474428726
+ POINT 158 12.45424219159261 17.15199799003971
+ POINT 159 14.46503723679426 17.15281363556374
+ POINT 160 16.40696659288819 17.17145057879611
+ POINT 161 18.22692352993353 17.13021164782587
+ POINT 162 -19.89780896458842 17.98079262859248
+ POINT 163 -17.84230000449807 19.0216744028301
+ POINT 164 -15.67627065513821 19.02313060013363
+ POINT 165 -13.55906626932976 19.0036025225671
+ POINT 166 -11.45548002657009 18.98870888881037
+ POINT 167 -9.365348057261556 18.99918972787285
+ POINT 168 -7.287998267664897 19.0218085635537
+ POINT 169 -5.225476971032742 19.04419029905378
+ POINT 170 -3.181207515747626 19.06061320124515
+ POINT 171 -1.234450813224698 18.81027364364246
+ POINT 172 1.234451001429794 18.8102736784703
+ POINT 173 3.181207777678578 19.06061305006857
+ POINT 174 5.225477302694968 19.04419014960234
+ POINT 175 7.287998656796332 19.02180842950959
+ POINT 176 9.365348511226138 18.99918964629332
+ POINT 177 11.45548052731511 18.98870888549819
+ POINT 178 13.55906673221513 19.00360248933783
+ POINT 179 15.6762709640833 19.02313030096059
+ POINT 180 17.84230024444024 19.02167396477342
+ POINT 181 19.89780885181004 17.98079151724459
+ POINT 182 -18.34809671121251 20.89054860233434
+ POINT 183 -16.5148528869666 20.87800710044906
+ POINT 184 -14.52694695679922 20.85426661015416
+ POINT 185 -12.45599638977427 20.8108810324845
+ POINT 186 -10.37011211347385 20.80605366101868
+ POINT 187 -8.288100923056527 20.82387931457176
+ POINT 188 -6.210897946834899 20.84807602452601
+ POINT 189 -4.130583790032196 20.86687448767059
+ POINT 190 -2.030932593701857 20.87063865748742
+ POINT 191 9.744431586633517e-08 21.64935021861394
+ POINT 192 2.030932751362846 20.87063857502341
+ POINT 193 4.130584013659444 20.86687431844705
+ POINT 194 6.210898346296974 20.84807594605767
+ POINT 195 8.288101445193462 20.82387932992417
+ POINT 196 10.37011274159265 20.80605382218947
+ POINT 197 12.45599711658471 20.8108813744629
+ POINT 198 14.52694762208812 20.85426702370534
+ POINT 199 16.51485331119099 20.87800725634424
+ POINT 200 18.348097009919 20.89054895986076
+ POINT 201 -19.88382274553589 22.15257822717576
+ POINT 202 -17.85872906553023 22.79187608979278
+ POINT 203 -15.75836820209814 22.71857538973881
+ POINT 204 -13.57945048306569 22.62787433244293
+ POINT 205 -11.43502337227142 22.60571660119635
+ POINT 206 -9.32896785495339 22.62172230713452
+ POINT 207 -7.252191943285577 22.65010775210676
+ POINT 208 -5.19352107545026 22.67271964550248
+ POINT 209 -3.145718127729072 22.67904520073677
+ POINT 210 -1.19802941618547 22.93488185752093
+ POINT 211 1.198029575535804 22.93488182516196
+ POINT 212 3.145718298303114 22.67904507452085
+ POINT 213 5.193521324838902 22.67271937177574
+ POINT 214 7.252192530636423 22.65010772431655
+ POINT 215 9.328968618053137 22.62172251326393
+ POINT 216 11.43502432491394 22.60571702295378
+ POINT 217 13.57945157268804 22.62787513308746
+ POINT 218 15.75836910518877 22.71857642015902
+ POINT 219 17.85872913941462 22.7918771500154
+ POINT 220 19.88382260621709 22.15257951409296
+ POINT 221 -19.56496589012501 24.14874796995999
+ POINT 222 -17.12378015908613 24.49263729810405
+ POINT 223 -14.75261366404331 24.36653106466741
+ POINT 224 -12.51545015644557 24.36405857012063
+ POINT 225 -10.36487612468117 24.40059700241373
+ POINT 226 -8.270782662155399 24.44922254990688
+ POINT 227 -6.207288303035652 24.48752518657241
+ POINT 228 -4.152672439085122 24.50430982838724
+ POINT 229 -2.144764510838116 24.6392641397031
+ POINT 230 6.736184551131563e-08 24.56637229685156
+ POINT 231 2.144764639428793 24.6392640566236
+ POINT 232 4.152672593221236 24.5043096033403
+ POINT 233 6.207288592802848 24.48752465778632
+ POINT 234 8.270783499471428 24.44922265688236
+ POINT 235 10.36487726829784 24.4005974184117
+ POINT 236 12.51545141239867 24.36405943508291
+ POINT 237 14.75261493047371 24.36653271363972
+ POINT 238 17.12378075459493 24.4926401834798
+ POINT 239 19.56496529523762 24.14875077537231
+ POINT 240 -19.08648829040304 25.9754468234863
+ POINT 241 -17.2845615037453 26.31014844212238
+ POINT 242 -15.41261905344529 26.10941999036963
+ POINT 243 -13.37179093546351 26.11632995430249
+ POINT 244 -11.29591265365937 26.16877399507631
+ POINT 245 -9.236109783161917 26.24563353410026
+ POINT 246 -7.197506282144635 26.30683884552605
+ POINT 247 -5.148124747507762 26.32635712487787
+ POINT 248 -3.122954853611116 26.40463970225008
+ POINT 249 -1.028840474391874 26.37582534616704
+ POINT 250 1.028840597301122 26.37582532979795
+ POINT 251 3.122954923639289 26.40463955141999
+ POINT 252 5.148124848876652 26.32635667877105
+ POINT 253 7.197506356103443 26.30683804371632
+ POINT 254 9.236111124219747 26.24563372506302
+ POINT 255 11.29591412227338 26.16877501716782
+ POINT 256 13.3717921011747 26.11633170886203
+ POINT 257 15.41261961645513 26.1094231779272
+ POINT 258 17.28456075910474 26.31015378144565
+ POINT 259 19.08648669351269 25.97545192419629
+ POINT 260 -18.31673994912508 28.03100477126815
+ POINT 261 -16.29279631468638 28.07734896422777
+ POINT 262 -14.29108105178232 27.93826211324394
+ POINT 263 -12.23205698562959 27.95454691920996
+ POINT 264 -10.1921242779246 28.04641052160824
+ POINT 265 -8.184908522052318 28.14581978804722
+ POINT 266 -6.142892720399755 28.15468429908139
+ POINT 267 -4.115765842832939 28.20978375998045
+ POINT 268 -2.044953225702631 28.19763670818671
+ POINT 269 1.215817429928157e-07 28.20528019734085
+ POINT 270 2.044953387448034 28.19763672758267
+ POINT 271 4.115765884875199 28.20978350344839
+ POINT 272 6.142892053295159 28.15468405294527
+ POINT 273 8.184908802060571 28.1458177672969
+ POINT 274 10.1921266003412 28.04641156253142
+ POINT 275 12.23205881411247 27.95454935528251
+ POINT 276 14.2910815778731 27.93826589300298
+ POINT 277 16.29279479603289 28.07735539177588
+ POINT 278 18.31673641698378 28.0310128272082
+ POINT 279 -17.36678064292307 29.91942186322351
+ POINT 280 -15.30701199611502 29.80163024565981
+ POINT 281 -13.1975126296105 29.73273604910611
+ POINT 282 -11.14232609374812 29.83834011557202
+ POINT 283 -9.18383040196667 30.00598319236085
+ POINT 284 -7.135586668146636 29.99761305864382
+ POINT 285 -5.123286168201119 30.04271988926355
+ POINT 286 -3.053121112865554 30.02630175178171
+ POINT 287 -1.015876570824747 30.05156154994286
+ POINT 288 1.015877381461083 30.05156170293002
+ POINT 289 3.053121697974701 30.02630185030043
+ POINT 290 5.123284228587577 30.0427213293883
+ POINT 291 7.135586245905698 29.99761060242232
+ POINT 292 9.183831168146963 30.00598031130402
+ POINT 293 11.14232972160493 29.83834373724195
+ POINT 294 13.19751369866922 29.73274161644041
+ POINT 295 15.30700948964564 29.80163858123015
+ POINT 296 17.36677404971316 29.91943340651388
+ POINT 297 -16.21450019303935 31.70854318392894
+ POINT 298 -14.18134842576247 31.46072633556853
+ POINT 299 -12.05433474215738 31.57807989769072
+ POINT 300 -10.18803390533311 31.90895778516169
+ POINT 301 -8.127827538982091 31.83562093362241
+ POINT 302 -6.132870312528693 31.91947084481104
+ POINT 303 -4.060514707104238 31.84886116654844
+ POINT 304 -2.023054298900899 31.90620457141977
+ POINT 305 1.779731685490338e-06 31.92616315841029
+ POINT 306 2.023057639192921 31.90620515692421
+ POINT 307 4.060510421402324 31.84886697474238
+ POINT 308 6.132869669181516 31.91946778705557
+ POINT 309 8.127827628663475 31.83561745950141
+ POINT 310 10.18803390203203 31.90895591912609
+ POINT 311 12.05433729770214 31.5780897141657
+ POINT 312 14.18134461110469 31.46073802168817
+ POINT 313 16.21448882325949 31.70855892928177
+ POINT 314 -14.85855987098478 33.38742688347396
+ POINT 315 -12.97622115412793 33.15231979037343
+ POINT 316 -11.24542238667929 33.84152597332419
+ POINT 317 -9.096796145803623 33.67355592311518
+ POINT 318 -7.169110863793735 33.81460869617811
+ POINT 319 -5.025802643706024 33.69074033624606
+ POINT 320 -3.036012504986613 33.74897677262599
+ POINT 321 -1.006001725651425 33.81394161048243
+ POINT 322 1.006017505359627 33.81394238106373
+ POINT 323 3.03600454008222 33.7489957057666
+ POINT 324 5.025801824829388 33.69073476359576
+ POINT 325 7.169110502599582 33.81460511144136
+ POINT 326 9.09679356939724 33.67355436459209
+ POINT 327 11.24541326548703 33.84153193558982
+ POINT 328 12.97621626240949 33.15233833055714
+ POINT 329 14.85854134665239 33.38744744340443
+ POINT 330 -13.24234864752243 34.98800194480442
+ POINT 331 -10.03539086910046 35.3828070140792
+ POINT 332 -8.191323309688949 35.8082238544771
+ POINT 333 -5.969442595277822 35.42728838548917
+ POINT 334 -3.964572821971675 35.68073227615353
+ POINT 335 -2.062446042804255 35.66361537576937
+ POINT 336 3.401394552337428e-05 35.7433135846511
+ POINT 337 2.062435708551036 35.66367717807774
+ POINT 338 3.96457676799794 35.68072163899399
+ POINT 339 5.969444351238414 35.42728363799607
+ POINT 340 8.19131937738778 35.80822453891639
+ POINT 341 10.03538306356879 35.38281277249126
+ POINT 342 13.2423188856883 34.98802824022632
+ POINT 343 -11.71964489363993 36.20647782730662
+ POINT 344 -9.885418518050601 37.38615830834937
+ POINT 345 -6.769213566269587 37.09871131951007
+ POINT 346 -4.834310082657146 37.45809613171494
+ POINT 347 -2.966207997229898 37.80957975457357
+ POINT 348 -1.228951401026502 37.50853541118494
+ POINT 349 1.228967413584314 37.50873516084056
+ POINT 350 2.966244431714553 37.80956888117363
+ POINT 351 4.834322604660215 37.45809313826081
+ POINT 352 6.769215951806145 37.09871058669637
+ POINT 353 9.885380262406448 37.38618005968161
+ POINT 354 11.71961051109886 36.20650269083999
+ POINT 355 -8.160801736293346 38.25928024378061
+ POINT 356 -6.108721403629119 39.04425169999729
+ POINT 357 -4.094025391529261 39.57648988183318
+ POINT 358 -2.032918826278168 39.89641276827972
+ POINT 359 -0.000114943787747096 38.55954134616952
+ POINT 360 2.032857647557499 39.89641901912924
+ POINT 361 4.093978133093873 39.57649976491602
+ POINT 362 6.108678764431183 39.04426537708952
+ POINT 363 8.16076002653128 38.25929888548312
+ POINT 364 19.74927974328947 16.84311090331085
+ POINT 365 19.06236619087178 17.55550158253523
+ POINT 366 18.88134017062033 16.42301538409299
+ POINT 367 18.87005454812514 18.50123274100901
+ POINT 368 18.92115012222012 19.51083698238671
+ POINT 369 19.97443587516672 18.98910375220634
+ POINT 370 18.03461188718688 18.07594280629964
+ POINT 371 -1.016516885032958 39.22797705722462
+ POINT 372 -1.017777998289471 39.97408640454459
+ POINT 373 -5.747189387354801e-05 39.27977067308476
+ POINT 374 1.016371351884876 39.22798018264938
+ POINT 375 1.017747548306818 39.9740879692846
+ POINT 376 2.499551039636026 38.85299395015144
+ POINT 377 3.530111282404213 38.69303432304483
+ POINT 378 3.067591411714378 39.76334698055007
+ POINT 379 -10.9924492306217 14.41410671876377
+ POINT 380 -10.44287645728424 15.33200773050357
+ POINT 381 -9.947843080438842 14.43429054076841
+ POINT 382 -12.05881835337669 14.38348808213234
+ POINT 383 -11.56378497653129 13.48577089239719
+ POINT 384 -19.1159597283742 21.52156341475505
+ POINT 385 -19.17404835560626 20.44527430116717
+ POINT 386 -19.97093456597552 21.07785567562136
+ POINT 387 18.53474991213871 15.46232000669758
+ POINT 388 18.24714071811698 14.4225091791953
+ POINT 389 19.27621315646036 14.66824556999596
+ POINT 390 17.88033327145191 16.16951627043046
+ POINT 391 -1.878316948172965 1.129591679620692
+ POINT 392 -2.768487524990953 1.245516646965989
+ POINT 393 -2.582747461702293 0.167465745146943
+ POINT 394 7.648469065631529 32.82511128547139
+ POINT 395 8.132952035998411 33.74407973801672
+ POINT 396 8.612310599030359 32.75458591204675
+ POINT 397 10.87749678733383 35.79465773166562
+ POINT 398 10.81858671612841 36.82136097977488
+ POINT 399 9.960381662987619 36.38449641608644
+ POINT 400 -11.96631262099795 7.358633557143151
+ POINT 401 -11.55167317705421 6.252374103778383
+ POINT 402 -11.06288858981114 7.054470523533706
+ POINT 403 -12.16968349313546 5.2351949670938
+ POINT 404 -11.26625946194865 4.931031933484356
+ POINT 405 -12.0755211222859 9.034287853892653
+ POINT 406 -11.57773105477317 9.914437566510799
+ POINT 407 -10.97973796624214 9.040879689516622
+ POINT 408 -10.17110926624146 33.75754094821968
+ POINT 409 -10.64040662788987 34.61216649370169
+ POINT 410 -9.566093507452038 34.52818146859719
+ POINT 411 -5.471515743143133 38.25117391585611
+ POINT 412 -5.108309760920813 39.33662769024022
+ POINT 413 -4.464167737093204 38.51729300677406
+ POINT 414 -17.075786992357 11.60015127604059
+ POINT 415 -16.58567116152604 10.66595676655855
+ POINT 416 -17.71058118590639 10.70832033698396
+ POINT 417 -11.04685154601989 12.60620673430785
+ POINT 418 -12.11322066877488 12.57558809767642
+ POINT 419 -12.1349007245402 10.80193483523696
+ POINT 420 -11.03911756849645 10.80852667086092
+ POINT 421 -9.437251545081509 13.53388275647323
+ POINT 422 -8.887678771744049 14.45178376821303
+ POINT 423 -12.51923497779283 15.29188240907255
+ POINT 424 -13.09057072370242 14.36354658270596
+ POINT 425 -18.87005448454325 18.50123351571129
+ POINT 426 -18.03461160637449 18.07594366093415
+ POINT 427 -19.06236608641966 17.55550277381534
+ POINT 428 -18.92115000224904 19.51083720141505
+ POINT 429 -19.97443590274372 18.98910431002001
+ POINT 430 -18.09519835785529 19.95611150258222
+ POINT 431 0.5990148364900598 22.29211602188795
+ POINT 432 -0.599014659370577 22.29211603806743
+ POINT 433 7.967516690854382e-08 22.93488184134145
+ POINT 434 -1.01546624812877 21.25999443805068
+ POINT 435 4.872215793316759e-08 20.82467510930697
+ POINT 436 -1.015466296850928 20.43531932874371
+ POINT 437 -1.614481004943663 21.90276025750417
+ POINT 438 6.782362015092881 16.29630562070841
+ POINT 439 6.26972775715908 15.38635951751268
+ POINT 440 5.744124975081186 16.30195446908402
+ POINT 441 -5.74412451455944 16.30195484425646
+ POINT 442 -5.226435642566052 17.21789351086729
+ POINT 443 -4.713801327229008 16.30794748956339
+ POINT 444 -4.200321416459555 15.37246065843187
+ POINT 445 -3.682632544466168 16.2883993250427
+ POINT 446 -5.718863643637123 1.755765027244666
+ POINT 447 -6.622858728894221 2.050156275226842
+ POINT 448 -6.1930002735872 0.9829879862466689
+ POINT 449 -1.033332138420614 2.125971140580023
+ POINT 450 -0.5061798610039783 3.087533783994574
+ POINT 451 -1.53950755536463 3.149217787127504
+ POINT 452 0.8449778593019447 1.06790708707818
+ POINT 453 -2.222029981194251e-06 1.032143568723546
+ POINT 454 0.8457366719362006 0.01788976042541284
+ POINT 455 -0.8449892538123129 1.067907676487761
+ POINT 456 -0.8457434623547605 0.01789005539397318
+ POINT 457 7.14550668849857 38.67998224759658
+ POINT 458 7.464987989168712 37.67900473608974
+ POINT 459 6.438947358118664 38.07148798189294
+ POINT 460 5.471500684545699 38.25117925767516
+ POINT 461 5.801769278233181 37.27840186247859
+ POINT 462 4.399449686329078 36.5694073886274
+ POINT 463 3.900283518187385 37.63383100971722
+ POINT 464 3.465410599856247 36.74514526008381
+ POINT 465 4.464150368877045 38.51729645158841
+ POINT 466 5.108265028519643 39.33663957465164
+ POINT 467 6.569277426918998 34.62094437471872
+ POINT 468 5.497623088033901 34.55900920079591
+ POINT 469 6.097456163714485 33.75266993751856
+ POINT 470 4.967010559618177 35.55400263849503
+ POINT 471 4.495189296413664 34.68572820129488
+ POINT 472 5.401883477949315 36.44268838812844
+ POINT 473 6.369330151522279 36.26299711234622
+ POINT 474 9.113351220478284 35.59551865570383
+ POINT 475 9.038349819897114 36.597202299299
+ POINT 476 7.080381864313097 35.61775408845623
+ POINT 477 7.480267664596962 36.45346756280638
+ POINT 478 7.680214939993681 34.81141482517887
+ POINT 479 8.64405647339251 34.74088945175424
+ POINT 480 9.566088316483015 34.52818356854168
+ POINT 481 8.17603970195953 37.03376171219976
+ POINT 482 9.033624999701651 37.84358769694784
+ POINT 483 18.72983203648753 27.01380028490616
+ POINT 484 17.80064858804426 27.17058330432692
+ POINT 485 18.18552372630872 26.14280285282097
+ POINT 486 14.85185059716412 27.02384453546509
+ POINT 487 13.8314368395239 27.02729880093251
+ POINT 488 14.39220585881491 26.11287744339462
+ POINT 489 -2.499563411754033 38.85299626142665
+ POINT 490 -3.530116694379579 38.69303481820337
+ POINT 491 -3.067645385176077 39.76333856162318
+ POINT 492 -3.900259039943522 37.63383794314426
+ POINT 493 3.013506238274488 35.67219940853586
+ POINT 494 2.514340070132794 36.73662302962569
+ POINT 495 6.650990085890549 32.86703644924846
+ POINT 496 5.579335747005452 32.80510127532567
+ POINT 497 7.130348648922496 31.87754262327849
+ POINT 498 7.631706937284587 30.91661403096186
+ POINT 499 8.159708707026331 30.00179545686317
+ POINT 500 8.655829398405219 30.92079888540271
+ POINT 501 6.634227957543607 30.95853919473894
+ POINT 502 6.129435237246637 30.02016596590531
+ POINT 503 5.628076948884546 30.98109455822193
+ POINT 504 11.94551072074933 21.70829919870834
+ POINT 505 11.41305492908868 20.80846759832619
+ POINT 506 10.9025685332533 21.70588542257163
+ POINT 507 13.00753192439992 19.90724193190037
+ POINT 508 13.49147236933642 20.83257419908412
+ POINT 509 14.04300717715163 19.92893475652158
+ POINT 510 -1.632691703463277 19.84045615056494
+ POINT 511 -0.617225406612349 19.40513682182123
+ POINT 512 7.881862384261 8.935526290376423
+ POINT 513 6.821149637536807 8.96031982099673
+ POINT 514 7.354535453521018 9.865365947847677
+ POINT 515 1.878305104541391 1.129592434087743
+ POINT 516 2.768470579833216 1.245515867432436
+ POINT 517 2.582728607973412 0.1674632640394325
+ POINT 518 1.033322801179483 2.125972484456656
+ POINT 519 -12.88605340068618 5.81741648102104
+ POINT 520 -14.05126013257847 5.767569248488341
+ POINT 521 -13.60249013789031 6.524733392691986
+ POINT 522 -12.61408342909388 4.479532986874619
+ POINT 523 -13.09822472234193 7.374360207835742
+ POINT 524 -12.60944013509886 8.176456627591065
+ POINT 525 -13.20743322362988 9.050014504585244
+ POINT 526 -14.24561765199122 7.3425564631399
+ POINT 527 -14.89245371365388 8.125238751200939
+ POINT 528 -15.41659981616689 7.259181873308678
+ POINT 529 -12.11082177040361 33.4969228818488
+ POINT 530 -12.51527794814265 32.36519984403208
+ POINT 531 -11.64987856441833 32.70980293550745
+ POINT 532 -10.81862285529724 36.82133760142749
+ POINT 533 -10.87751788137019 35.79464242069291
+ POINT 534 -9.960404693575528 36.38448266121428
+ POINT 535 -11.48253364015961 35.0240019003154
+ POINT 536 -10.7167281460062 32.87524187924294
+ POINT 537 -11.12118432374524 31.74351884142621
+ POINT 538 -9.642415025568365 32.79125685413843
+ POINT 539 -18.53475021484851 15.4623221533659
+ POINT 540 -19.27621404631537 14.6682488620726
+ POINT 541 -18.24714142272296 14.42251208771581
+ POINT 542 -18.88134028536315 16.42301727635588
+ POINT 543 -17.88033313773626 16.16951779604823
+ POINT 544 -19.74928002630716 16.84311272522837
+ POINT 545 -15.49028917015346 8.94111382435025
+ POINT 546 -16.06641650592649 9.805497208420237
+ POINT 547 -16.64214543071471 8.907705737630335
+ POINT 548 -15.45627780504156 10.68439298272059
+ POINT 549 -14.33918769294243 9.008058351432968
+ POINT 550 -13.80526868012947 9.865889577734556
+ POINT 551 -14.1492732747727 14.33192177832496
+ POINT 552 -15.15912830948807 14.31820814348022
+ POINT 553 -14.56084238283394 15.25822727480142
+ POINT 554 -13.68885665035655 13.42352745138476
+ POINT 555 -17.50692650301805 12.50123196234012
+ POINT 556 -17.89917563009375 13.49160770791567
+ POINT 557 -18.59468367857226 12.63537262535845
+ POINT 558 -16.40667197130215 12.44593322715844
+ POINT 559 -17.18577727459241 14.27791829325811
+ POINT 560 -15.79268534169501 13.36945828023087
+ POINT 561 -15.36154583103397 12.46837759393134
+ POINT 562 -16.20425444975626 14.29576377670733
+ POINT 563 -16.55222024238547 15.22666815650746
+ POINT 564 14.61766884814922 19.01336639514921
+ POINT 565 15.10160929308571 19.93869866233297
+ POINT 566 -8.954387420107352 8.883178967849199
+ POINT 567 -8.421001648218994 7.978132991115737
+ POINT 568 -7.881861900173009 8.935529708141328
+ POINT 569 -10.48552760095411 8.043256113861043
+ POINT 570 -10.07088815701037 6.936996660496273
+ POINT 571 -9.987737533441372 8.923405826479188
+ POINT 572 -9.448597785395389 9.880802543504778
+ POINT 573 -8.909628446845817 12.63950157787882
+ POINT 574 -9.96979275554061 12.62200835043421
+ POINT 575 -10.5192284477842 11.71182555571344
+ POINT 576 -9.962058778017163 10.82432828698728
+ POINT 577 -8.928708664683143 10.78410142835729
+ POINT 578 -8.826724490159041 19.9115345212223
+ POINT 579 -7.788049595360713 19.92284393906273
+ POINT 580 -8.326673162463226 19.01049914571327
+ POINT 581 6.796923008359899 14.46893104772356
+ POINT 582 5.758685968348203 14.47457989609917
+ POINT 583 7.331484508515757 13.55426320744392
+ POINT 584 7.842526297326634 14.46604282885744
+ POINT 585 3.183665335263674 17.16821321585526
+ POINT 586 3.688660309630354 18.14224948377619
+ POINT 587 2.676212803311897 18.08657678214764
+ POINT 588 5.226436037298559 17.21789324488178
+ POINT 589 4.713801779364758 16.30794714168605
+ POINT 590 1.702834415187505 17.9614070963485
+ POINT 591 2.207829389554186 18.93544336426943
+ POINT 592 9.410254775410465e-08 18.81027366105638
+ POINT 593 0.6172255007148968 19.40513683923515
+ POINT 594 -9.714117030543257 27.14602202785425
+ POINT 595 -10.74401846579198 27.10759225834228
+ POINT 596 -10.26601121841064 26.20720376458829
+ POINT 597 -15.19792430940091 31.58463475974873
+ POINT 598 -14.51995414837362 32.42407660952124
+ POINT 599 -15.55919105425835 32.56628720680114
+ POINT 600 -13.5787847899452 32.30652306297098
+ POINT 601 -13.91739051255635 33.26987333692369
+ POINT 602 -13.68943052768649 30.59673119233732
+ POINT 603 -13.11784158395992 31.51940311662963
+ POINT 604 -12.62592368588394 30.65540797339841
+ POINT 605 -18.10341288837137 21.84121234606356
+ POINT 606 -18.87127590553306 22.47222715848427
+ POINT 607 -17.12463310060343 18.09656294225589
+ POINT 608 -17.31694470247984 17.15083220035995
+ POINT 609 -16.9703546319652 16.19013707736997
+ POINT 610 -15.98883180712904 16.20798256081918
+ POINT 611 10.38199647148354 22.61371976810885
+ POINT 612 9.849540679822894 21.7138881677267
+ POINT 613 8.8085350316233 21.72280092159405
+ POINT 614 9.329107093393057 20.81496657605682
+ POINT 615 8.9287090372967 10.78409883706605
+ POINT 616 9.962058430246611 10.82432580169985
+ POINT 617 9.448597593195121 9.88079938186117
+ POINT 618 9.969792986625455 12.62200682338526
+ POINT 619 8.90962883591534 12.63950012274126
+ POINT 620 9.437251948192607 13.5338816892218
+ POINT 621 10.67234141492057 4.14015762808947
+ POINT 622 9.899143945874886 3.622737177952356
+ POINT 623 11.12308967028839 3.378421352424517
+ POINT 624 10.05434271335534 5.157341501088084
+ POINT 625 11.26624724302613 4.931019061942361
+ POINT 626 11.04685146630943 12.60620519964597
+ POINT 627 12.11322047313526 12.57558645323589
+ POINT 628 11.56378510572855 13.48576964345572
+ POINT 629 10.51922835403217 11.71182363316543
+ POINT 630 11.03911690993059 10.80852417796056
+ POINT 631 8.353117771266421 15.36645081786232
+ POINT 632 8.887679271422279 14.45178297758268
+ POINT 633 9.947843422132394 14.43428967822668
+ POINT 634 -7.354534566620368 9.865368360421384
+ POINT 635 -6.821148794732007 8.960322383687922
+ POINT 636 -5.241808196453412 9.89286263766502
+ POINT 637 -5.768321098655418 10.8109113925901
+ POINT 638 -4.716307833929465 10.81361299428714
+ POINT 639 -8.846687175134175 18.09453634019771
+ POINT 640 -7.808012280335847 18.10584575803814
+ POINT 641 -7.292392561451639 17.20089190904147
+ POINT 642 -6.77237854878069 18.11685471455703
+ POINT 643 -3.663850057285723 10.82236267206403
+ POINT 644 -2.609574443921612 10.83288750674358
+ POINT 645 -3.135519318363349 9.906089074041617
+ POINT 646 -4.190362959487728 11.74041142698911
+ POINT 647 1.022235278187542 6.105131945364167
+ POINT 648 1.537413456757289 7.078319240970639
+ POINT 649 0.5151765885688294 7.052715105123196
+ POINT 650 2.577937928342901 7.096153011320037
+ POINT 651 2.070879238724189 8.043736171079065
+ POINT 652 3.092619808349037 6.17939491294298
+ POINT 653 3.626085590315936 7.144811843051406
+ POINT 654 11.48251188829295 35.02401731321491
+ POINT 655 10.64039816452791 34.61217235404054
+ POINT 656 10.17110341744214 33.75754315009095
+ POINT 657 14.6689103389384 22.67322577662324
+ POINT 658 14.05319959738808 21.7410710783964
+ POINT 659 15.14265836363845 21.78642172193218
+ POINT 660 13.01772434463638 21.71937825377518
+ POINT 661 12.50723794880099 22.61679607802062
+ POINT 662 18.09519862717962 19.95611146231709
+ POINT 663 19.1740485049595 20.44527447993038
+ POINT 664 19.11595980806804 21.52156423697686
+ POINT 665 19.97093453194041 21.0778563218991
+ POINT 666 16.26820018552503 25.3010316807035
+ POINT 667 17.20417075684983 25.40139698246272
+ POINT 668 16.34859018777993 26.20978847968642
+ POINT 669 18.10513372405381 25.23404605383805
+ POINT 670 18.34437302491627 24.32069547942606
+ POINT 671 19.34729683337535 25.06775162939346
+ POINT 672 15.85270720624401 27.09338928485154
+ POINT 673 16.78867777756881 27.19375458661076
+ POINT 674 15.291938186953 28.00781064238943
+ POINT 675 17.30476560650833 28.05418410949204
+ POINT 676 16.82978442287303 28.99839439914488
+ POINT 677 17.8667222480114 28.98778277049785
+ POINT 678 11.90568276733603 25.26641722612537
+ POINT 679 12.94362175678668 25.24019557197247
+ POINT 680 12.33385311172404 26.14255336301493
+ POINT 681 13.04745149254336 23.49596728408519
+ POINT 682 11.97523786865631 23.48488822901835
+ POINT 683 13.26157019599279 27.94640762414275
+ POINT 684 12.80192545764358 27.03544053207227
+ POINT 685 11.76398646819293 27.06166218622517
+ POINT 686 12.71478625639084 28.84364548586147
+ POINT 687 13.74429763827116 28.8355037547217
+ POINT 688 11.6871942678587 28.89644654626223
+ POINT 689 12.16992171013707 29.78554267684118
+ POINT 690 -2.645241319283594 23.65915467021994
+ POINT 691 -2.171873771957271 22.80696352912885
+ POINT 692 -1.671396963511793 23.78707299861202
+ POINT 693 -3.638150958880634 21.77295984420368
+ POINT 694 -4.169619601589666 22.67588242311962
+ POINT 695 -4.662052432741228 21.76979706658653
+ POINT 696 -2.588325360715464 21.77484192911209
+ POINT 697 -3.080758191867026 20.868756572579
+ POINT 698 -3.465390409600786 36.74515601536355
+ POINT 699 -4.39944145231441 36.56941420393424
+ POINT 700 -6.438967484949353 38.07148150975368
+ POINT 701 -5.801761824463367 37.27840372561251
+ POINT 702 -7.465007651281466 37.67899578164534
+ POINT 703 -7.145548671869747 38.67996608706892
+ POINT 704 1.645701561067675 36.58620616945915
+ POINT 705 2.097605922649433 37.6591520210071
+ POINT 706 1.630912530570906 38.7025770899849
+ POINT 707 0.6144262348982835 38.03413825350503
+ POINT 708 0.6145007137649187 36.62602437274583
+ POINT 709 1.03123486124828 35.70349538136442
+ POINT 710 3.50029065404008 34.71485867238029
+ POINT 711 4.030903182455804 33.71986523468118
+ POINT 712 2.549220124316628 34.70633644192217
+ POINT 713 5.09669004529192 31.88416738089897
+ POINT 714 4.59189732499495 30.94579415206534
+ POINT 715 4.543156123115856 32.76980086916907
+ POINT 716 3.548257480742272 32.79893134025448
+ POINT 717 3.041784030297622 31.8775360658333
+ POINT 718 2.529531089637571 32.8276004313454
+ POINT 719 6.639239149600429 29.07614732768379
+ POINT 720 5.633088140941368 29.09870269116678
+ POINT 721 -5.741117900464612 18.12804558230707
+ POINT 722 -4.710794713134181 18.134038227614
+ POINT 723 -6.25673761934882 19.03299943130374
+ POINT 724 9.094364861792316 3.185783391206454
+ POINT 725 8.120154810382525 3.065542696161892
+ POINT 726 8.486226833839986 4.246239372190631
+ POINT 727 9.543080762382589 2.423606448705923
+ POINT 728 4.181697363812684 8.041699532502184
+ POINT 729 4.69637924381882 7.124941434125128
+ POINT 730 4.720893497007972 8.958696437146365
+ POINT 731 3.650599843505089 8.978566846072644
+ POINT 732 5.772906862056196 8.955994301021946
+ POINT 733 5.241809341748601 9.892861614592405
+ POINT 734 6.300233792796178 8.026154643550692
+ POINT 735 6.622836074707541 2.05014634703189
+ POINT 736 5.718844002281117 1.755757914971069
+ POINT 737 6.192965581434661 0.9829766219365916
+ POINT 738 5.664301131002254 3.628351178339397
+ POINT 739 6.833866176424866 3.46371406014724
+ POINT 740 6.342451737007583 4.290635795338225
+ POINT 741 7.442004204377196 2.403258079163064
+ POINT 742 7.917003402974732 1.633697762640239
+ POINT 743 8.94127268867317 5.267193691042839
+ POINT 744 7.96706263726338 5.146952995998276
+ POINT 745 9.535178516778736 6.058055124895729
+ POINT 746 -13.10928490082518 34.07016086758892
+ POINT 747 -12.24388551710086 34.4147639590643
+ POINT 748 -12.49585729120814 35.61581090418589
+ POINT 749 -14.07322716081642 34.21070994911054
+ POINT 750 -14.36136978693606 10.72072627767335
+ POINT 751 -14.88062444253561 11.58118583581166
+ POINT 752 -14.26663781292847 12.50471088888409
+ POINT 753 -13.22961531762352 10.76268243082563
+ POINT 754 -13.2079352618582 12.53633569326509
+ POINT 755 -12.6910018313468 11.65677153517575
+ POINT 756 15.07065410043878 18.08797196826217
+ POINT 757 14.01205198450469 18.07820806245078
+ POINT 758 -6.796922393156049 14.4689317302459
+ POINT 759 -6.269727250030074 15.38636001982073
+ POINT 760 -5.758685342348371 14.47458053337772
+ POINT 761 -7.817995296922273 16.28529708460574
+ POINT 762 -8.353117303969567 15.36645138459855
+ POINT 763 -8.863148300054089 16.27103725251539
+ POINT 764 -7.842525768612235 14.46604360030338
+ POINT 765 -7.331483860930532 13.55426411386037
+ POINT 766 -6.782361565367118 16.29630604112463
+ POINT 767 -3.683558631825044 14.45370591664109
+ POINT 768 -4.714727414587884 14.47325408116177
+ POINT 769 -5.24192255771386 13.55582579158695
+ POINT 770 -4.720392683042421 12.64308054429161
+ POINT 771 -5.764350610802907 12.64440699650756
+ POINT 772 -3.667934906398679 12.6518302220685
+ POINT 773 -8.395897107966746 11.71956985286866
+ POINT 774 -7.863355897507648 12.63144425890769
+ POINT 775 -6.817752522051462 12.63433238885021
+ POINT 776 -6.296222647380024 11.72158714155488
+ POINT 777 -6.821723009903972 10.80083678493275
+ POINT 778 -7.882436115344974 10.77604410938616
+ POINT 779 4.716308849678887 10.81361234423387
+ POINT 780 5.76832221472711 10.81091020810945
+ POINT 781 4.190363830521503 11.74041081086773
+ POINT 782 3.663850957542993 10.82236221735069
+ POINT 783 1.564857731194123 14.49716655277795
+ POINT 784 1.04410790663793 13.59158434318418
+ POINT 785 0.5207500976712671 14.50289465153176
+ POINT 786 1.565386117813491 12.67566398686721
+ POINT 787 0.5212784842906355 12.68139208562102
+ POINT 788 2.613060739273198 12.66750846420746
+ POINT 789 2.090231316925903 11.7573162066443
+ POINT 790 2.247276054134772e-07 15.40847690902769
+ POINT 791 -0.5207495998285867 14.50289469943392
+ POINT 792 -11.21209063177709 28.0004787204091
+ POINT 793 -11.76398481964448 27.06166045714313
+ POINT 794 -13.26156901870596 27.94640451622695
+ POINT 795 -12.71478480762005 28.84364148415803
+ POINT 796 -13.74429684069641 28.83549908117502
+ POINT 797 -12.16991936167931 29.78553808233906
+ POINT 798 -11.59833041795275 30.70821000663137
+ POINT 799 -10.66722518583636 28.94237531859013
+ POINT 800 -10.16307824785739 29.92216165396643
+ POINT 801 -9.687977339945633 29.02619685698455
+ POINT 802 -11.68719153968886 28.89644351739098
+ POINT 803 -10.66517999954061 30.87364895036685
+ POINT 804 -9.685932153649887 30.95747048876127
+ POINT 805 -16.82978847880473 28.99838541372564
+ POINT 806 -17.30476813190573 28.05417686774796
+ POINT 807 -17.86672715494531 28.98777290369169
+ POINT 808 -12.80192396054655 27.03543843675622
+ POINT 809 -12.33385179456144 26.1425519746894
+ POINT 810 -13.83143599362291 27.02729603377322
+ POINT 811 -18.71184747782762 23.47031202987638
+ POINT 812 -19.74963048996175 23.15469430712368
+ POINT 813 -19.34729785953139 25.06774765708812
+ POINT 814 -18.34437302460557 24.32069263403202
+ POINT 815 -18.10513422474459 25.23404206079518
+ POINT 816 -17.49125461230818 23.64225669394841
+ POINT 817 7.817995757395382 16.28529666142913
+ POINT 818 7.292392975317489 17.20089161300046
+ POINT 819 7.80801268720816 18.10584554161538
+ POINT 820 6.772378944905659 18.11685450089467
+ POINT 821 8.863148731491028 16.27103681015437
+ POINT 822 1.015466424403581 21.25999439681868
+ POINT 823 1.614481163449325 21.90276020009269
+ POINT 824 1.015466375681423 20.43531928751171
+ POINT 825 1.63269187639632 19.84045612674685
+ POINT 826 2.606070264520712 19.96562581254599
+ POINT 827 4.710795072138549 18.13403803354307
+ POINT 828 4.203342540186773 19.05240159983545
+ POINT 829 5.741118267854977 18.12804536094104
+ POINT 830 6.25673797974565 19.03299928955596
+ POINT 831 8.29058057434478 22.63591511879024
+ POINT 832 7.770146987914942 21.73699352712036
+ POINT 833 7.761488015053925 23.54966519059946
+ POINT 834 8.799876058762283 23.53547258507314
+ POINT 835 7.882436851035273 10.77604170622064
+ POINT 836 6.821724104311079 10.80083523684094
+ POINT 837 8.395897688086761 11.71956812605931
+ POINT 838 6.296223612241364 11.72158596648241
+ POINT 839 7.863356649653912 12.63144299189585
+ POINT 840 6.817753360687178 12.63433121076197
+ POINT 841 5.764351471103209 12.64440618203048
+ POINT 842 15.41658924936081 7.259168960497591
+ POINT 843 14.24561038678537 7.342548392480751
+ POINT 844 14.89244912969332 8.12523258985544
+ POINT 845 12.07551877984602 9.034284548463294
+ POINT 846 13.2074318313694 9.050012371808604
+ POINT 847 12.60943811820144 8.176454016117848
+ POINT 848 12.13489966336506 10.8019324567901
+ POINT 849 11.57772973957951 9.91443462532451
+ POINT 850 10.97973602641154 9.040876269633753
+ POINT 851 11.96631097541835 7.35863242591423
+ POINT 852 11.55167271280977 6.252370796998449
+ POINT 853 11.06288680406948 7.054464563856754
+ POINT 854 12.169671414375 5.235186923999835
+ POINT 855 12.88604184172865 5.817407070591241
+ POINT 856 12.61406020569684 4.479514007912766
+ POINT 857 13.09822402694172 7.374360249259541
+ POINT 858 13.60248324400228 6.524726802277135
+ POINT 859 14.05124229732068 5.767551513356759
+ POINT 860 17.07578521456617 11.60014693753975
+ POINT 861 17.71057756929273 10.70831332876806
+ POINT 862 16.58566833102513 10.66595132007714
+ POINT 863 16.40667132100974 12.44593062352206
+ POINT 864 15.79268502556732 13.36945619674464
+ POINT 865 15.36154529735113 12.46837529147962
+ POINT 866 17.18577703109811 14.27791621091107
+ POINT 867 17.8991747362448 13.49160449707131
+ POINT 868 17.50692494278236 12.50122784280477
+ POINT 869 18.59468174703889 12.63536765117651
+ POINT 870 -5.772905779136106 8.955995570716897
+ POINT 871 -6.300233112688748 8.02615691843684
+ POINT 872 -4.720892514410153 8.958697172413938
+ POINT 873 -2.562097267089574 3.227805457117126
+ POINT 874 -2.034944989672938 4.189368100531676
+ POINT 875 -0.5151786281004135 7.052714909961791
+ POINT 876 -4.495306666907339e-07 8.025902205568261
+ POINT 877 -0.5151778044490922 8.96843130178743
+ POINT 878 -1.555799685599574 8.971257959564014
+ POINT 879 -1.040621823848756 9.913787250944587
+ POINT 880 0.5151774122201507 8.968431496948837
+ POINT 881 2.806199940197374e-07 11.76547179125803
+ POINT 882 -0.5212779305555666 12.681392147575
+ POINT 883 -2.090230658535098 11.75731647898901
+ POINT 884 -1.561899919612723 10.84104288096659
+ POINT 885 -0.5212780384622415 10.83821622319001
+ POINT 886 0.5212783763839607 10.83821616123602
+ POINT 887 -8.95781830977193 7.046847428450418
+ POINT 888 -9.535179298628961 6.058061838123082
+ POINT 889 -7.885292789837587 7.099198168742546
+ POINT 890 -6.342458718450149 4.290639218573956
+ POINT 891 -5.664307592746104 3.628355267241409
+ POINT 892 -6.833874189380248 3.463718914397889
+ POINT 893 -4.115213411606943 4.361615670969387
+ POINT 894 -4.656830149629152 5.341664562613124
+ POINT 895 -3.599151439420091 5.248004662165036
+ POINT 896 -7.4420232035393 2.403268237260354
+ POINT 897 -7.917037371317474 1.633712477540171
+ POINT 898 -8.120174329243344 3.065552188592901
+ POINT 899 0.5061739145443324 5.095155188591381
+ POINT 900 -2.929429205988932e-06 4.110781499104045
+ POINT 901 -0.5061784339744557 5.09515412002939
+ POINT 902 1.528410782732792 5.120759324438823
+ POINT 903 0.5061724875148098 3.087534852556564
+ POINT 904 1.539499732754256 3.149220199566127
+ POINT 905 11.64987528159459 32.70981082487776
+ POINT 906 12.51527678005581 32.36521402236142
+ POINT 907 12.11081476394826 33.49693513307348
+ POINT 908 12.62592549818568 30.65541566530306
+ POINT 909 11.59833350965353 30.70821672570382
+ POINT 910 14.07320338353421 34.21073365839178
+ POINT 911 13.10926757404889 34.07018328539174
+ POINT 912 13.91737880453094 33.26989288698078
+ POINT 913 12.24386607558766 34.41478008790807
+ POINT 914 12.49582536742833 35.61583656588377
+ POINT 915 14.16603325158087 23.49720392336359
+ POINT 916 15.25549201783124 23.54255456689937
+ POINT 917 15.93819784253432 24.42958644855976
+ POINT 918 15.08261727346442 25.23797794578346
+ POINT 919 16.44107492989185 23.60560830181941
+ POINT 920 13.63403317143619 24.36529607436132
+ POINT 921 14.0622035158242 25.24143221125088
+ POINT 922 16.13661120818988 21.79829183825163
+ POINT 923 15.52090046663956 20.86613714002479
+ POINT 924 16.09556213763715 19.95056877865242
+ POINT 925 17.17857677781561 19.94984061055883
+ POINT 926 16.75928560426177 19.02240213286701
+ POINT 927 17.431475160555 20.8842781081025
+ POINT 928 18.71184721732612 23.47031396269385
+ POINT 929 18.87127587281586 22.47222833205418
+ POINT 930 19.74963016806416 23.15469636218577
+ POINT 931 17.49125494700478 23.6422586667476
+ POINT 932 18.10341307466681 21.84121305493807
+ POINT 933 16.8085491223017 22.75522678508721
+ POINT 934 17.18679122530281 21.83494220317982
+ POINT 935 14.51994297887854 32.4240927325463
+ POINT 936 13.57878043675709 32.30653817612266
+ POINT 937 13.11784095440342 31.51941386792693
+ POINT 938 13.68942915488696 30.59673981906429
+ POINT 939 11.44016434034826 24.38232842674731
+ POINT 940 10.89995079660589 23.50315722068274
+ POINT 941 10.83039569528561 25.28468621778976
+ POINT 942 9.846922943175489 23.51115996583782
+ POINT 943 9.317830383884633 24.42491003764703
+ POINT 944 9.800494196258793 25.32311557173736
+ POINT 945 8.753447311845587 25.34742819097269
+ POINT 946 10.26601262324656 26.20720437111542
+ POINT 947 -9.188516399988456 28.09611515482773
+ POINT 948 -8.684369462009494 29.07590149020404
+ POINT 949 -8.710509152607116 27.19572666107374
+ POINT 950 -4.967007708624748 35.55401033082136
+ POINT 951 -5.401876338967484 36.44269225860205
+ POINT 952 -6.369328080773704 36.26299985249962
+ POINT 953 -8.644059727746285 34.74088988879614
+ POINT 954 -9.113357089394702 35.59551543427815
+ POINT 955 -7.680217086741342 34.8114162753276
+ POINT 956 -8.132953504798678 33.74408230964664
+ POINT 957 -9.038370913869775 36.59719108141323
+ POINT 958 -7.080382952483385 35.61775611998313
+ POINT 959 -6.569276729535778 34.62094854083364
+ POINT 960 -7.480268437979268 36.45346758699358
+ POINT 961 -8.176062522991147 37.03375204912885
+ POINT 962 -9.033664824607252 37.8435674405669
+ POINT 963 -3.013509432387965 35.67217382596145
+ POINT 964 -2.514327020017076 36.73659756517147
+ POINT 965 -1.031206014429366 35.70346448021024
+ POINT 966 -1.53422388422784 34.73877849312591
+ POINT 967 -0.5029838558529507 34.77862759756677
+ POINT 968 2.021011022720923 33.78146904341516
+ POINT 969 1.514537572276274 32.86007376899397
+ POINT 970 1.534226606955332 34.73880977957074
+ POINT 971 0.5030257596525753 34.77862798285742
+ POINT 972 7.889854101383875e-06 33.81394199577308
+ POINT 973 1.536896992374578 27.28673102869031
+ POINT 974 2.075897760470205 26.39023244060897
+ POINT 975 2.583954155543661 27.30113813950133
+ POINT 976 3.556816059688512 30.9375844125214
+ POINT 977 4.088202963281139 30.03451158984436
+ POINT 978 2.538089668583811 30.96625350361232
+ POINT 979 0.5030096425456565 32.87005276973701
+ POINT 980 -0.5029999729598695 32.87005238444636
+ POINT 981 1.011529709462303 31.91618415766725
+ POINT 982 11.21209270722683 28.00048045890696
+ POINT 983 10.74402036130729 27.10759328984962
+ POINT 984 9.714118862280475 27.14602264379722
+ POINT 985 10.66722816097306 28.94237764988668
+ POINT 986 9.687978884244082 29.02619593691772
+ POINT 987 10.16308044487594 29.92216202427299
+ POINT 988 7.660247523983134 29.07171418485961
+ POINT 989 8.684369985103768 29.07589903930046
+ POINT 990 7.163900427677865 28.15025091012108
+ POINT 991 9.188517701200887 28.09611466491416
+ POINT 992 8.710509963140158 27.19572574617996
+ POINT 993 -4.203342243390184 19.05240175014947
+ POINT 994 -3.688659985491623 18.14224967870969
+ POINT 995 -3.655895652889911 19.96374384445787
+ POINT 996 -4.678030380532469 19.95553239336218
+ POINT 997 -2.207829164486162 18.93544342244381
+ POINT 998 -2.606070054724741 19.96562592936628
+ POINT 999 -5.170740868433548 20.8574752560983
+ POINT 1000 -5.702209511142579 21.76039783501424
+ POINT 1001 -5.71818745893382 19.94613316178989
+ POINT 1002 -6.731544945060238 21.74909188831638
+ POINT 1003 -6.222856509367919 22.66141369880462
+ POINT 1004 -7.249499434945713 20.83597766954888
+ POINT 1005 -7.770146433171051 21.73699353333926
+ POINT 1006 -6.749448107249898 19.93494229403985
+ POINT 1007 5.802524977371679 7.067405929156367
+ POINT 1008 6.85076775285229 7.071731449131153
+ POINT 1009 7.387583714762178 6.140445024793657
+ POINT 1010 7.885292530186677 7.099193739187982
+ POINT 1011 5.762972814506381 5.284127824133605
+ POINT 1012 5.246913203874932 6.170518239705588
+ POINT 1013 4.656827080953521 5.341663329102365
+ POINT 1014 6.932537859928994 5.119490705941448
+ POINT 1015 5.123453405055713 2.630543796725044
+ POINT 1016 4.686581836917295 1.584872268547702
+ POINT 1017 3.780741176469697 1.381516026850165
+ POINT 1018 4.380854250247183 0.4856945617800922
+ POINT 1019 3.07892064305541 2.323657990883948
+ POINT 1020 4.632038965638431 3.457465531916029
+ POINT 1021 8.957817564431407 7.046841938024162
+ POINT 1022 8.421001602521519 7.978128362361659
+ POINT 1023 8.954387418505732 8.883174489212605
+ POINT 1024 10.48552585172216 8.043251376985188
+ POINT 1025 10.07088758911358 6.936989748069407
+ POINT 1026 9.98773681145564 8.923401453846404
+ POINT 1027 14.14927330494213 14.3319204116199
+ POINT 1028 13.09057086026495 14.36354542779163
+ POINT 1029 13.68885655723154 13.42352588087392
+ POINT 1030 14.5608425845304 15.25822614311025
+ POINT 1031 15.01786739893976 16.19866298162331
+ POINT 1032 14.0080124223849 16.21237679705068
+ POINT 1033 15.15912828149698 14.31820659619254
+ POINT 1034 16.20425430515559 14.29576192823498
+ POINT 1035 16.55222028702778 15.22666661035897
+ POINT 1036 15.43600191484122 17.16213210717993
+ POINT 1037 16.04161877848574 18.09729043987835
+ POINT 1038 17.12463341866421 18.09656227178477
+ POINT 1039 17.31694506141086 17.15083111331099
+ POINT 1040 15.98883207698672 16.2079814532395
+ POINT 1041 16.97035480292924 16.19013573591558
+ POINT 1042 -9.329106518265187 20.81496648779522
+ POINT 1043 -9.8677300853677 19.90262169444576
+ POINT 1044 -16.0416184259235 18.09729104090766
+ POINT 1045 -16.75928532981814 19.02240250148187
+ POINT 1046 -10.94364637205534 16.23848947462534
+ POINT 1047 -9.899040221872481 16.25867329662998
+ POINT 1048 -9.363918214825187 17.17751899663717
+ POINT 1049 -9.882579096952568 18.0821723843123
+ POINT 1050 1.561900414029895 10.8410427689158
+ POINT 1051 2.609575035489602 10.83288724625605
+ POINT 1052 1.04062209494766 9.913787200847779
+ POINT 1053 3.135520054646986 9.906088779622188
+ POINT 1054 2.596323921451698 8.989091874978008
+ POINT 1055 1.555799449866085 8.97125810462861
+ POINT 1056 5.241923253953617 13.55582514043971
+ POINT 1057 4.714728002752798 14.47325361022883
+ POINT 1058 3.143090414259499 13.57017754949987
+ POINT 1059 3.667935613371911 12.65182976927697
+ POINT 1060 4.720393505507803 12.64307989616015
+ POINT 1061 2.105326509092408 15.38069455968688
+ POINT 1062 2.670185462451287 16.23272638623747
+ POINT 1063 1.606358875586338 16.26050868767612
+ POINT 1064 2.628684318059071 14.4693842513393
+ POINT 1065 3.683559192157784 14.45370555640881
+ POINT 1066 4.200321906552371 15.37246031206826
+ POINT 1067 3.682632968769743 16.28839908786602
+ POINT 1068 -1.606358493039556 16.26050877577584
+ POINT 1069 -2.670185073501789 16.23272654426651
+ POINT 1070 -2.105326053234482 15.38069472542052
+ POINT 1071 -3.183664984271242 17.16821337539803
+ POINT 1072 -2.676212514527244 18.08657689793349
+ POINT 1073 -1.70283416326578 17.96140711913215
+ POINT 1074 0.6172255840106643 18.01551021964674
+ POINT 1075 -0.6172253233165815 18.01551020223283
+ POINT 1076 -1.085608673357664 17.16664367772251
+ POINT 1077 -0.5207496530903567 16.31461185887652
+ POINT 1078 0.5207500444094971 16.31461181097436
+ POINT 1079 1.085608997768376 17.16664363752495
+ POINT 1080 -16.26819960626571 25.30102864423684
+ POINT 1081 -15.0826163587443 25.23797552751852
+ POINT 1082 -15.93819691156472 24.42958418138574
+ POINT 1083 -15.85270768406584 27.0933844772987
+ POINT 1084 -14.85185005261381 27.02384105180678
+ POINT 1085 -15.29193868323435 28.00780553873586
+ POINT 1086 -14.3922049944544 26.11287497233606
+ POINT 1087 -14.06220229975341 25.24143050948495
+ POINT 1088 -15.7999041554007 28.93948960494379
+ POINT 1089 -16.33689631951905 29.86052605444166
+ POINT 1090 -14.74418021093874 30.63117829061417
+ POINT 1091 -15.76075609457718 30.75508671479437
+ POINT 1092 -16.81445339648837 30.82931935765637
+ POINT 1093 -14.25226231286276 29.76718314738296
+ POINT 1094 -14.79904652394867 28.86994617945188
+ POINT 1095 8.846687614423065 18.09453615000725
+ POINT 1096 8.326673584011235 19.01049903790145
+ POINT 1097 8.8267249782098 19.91153448810875
+ POINT 1098 9.867730626409395 19.90262173424139
+ POINT 1099 7.788050050994897 19.92284387971688
+ POINT 1100 4.650398721048944 25.41533314105567
+ POINT 1101 4.13553988625797 26.36549811509552
+ POINT 1102 3.637813758430262 25.45447457738014
+ POINT 1103 3.148718616325014 24.57178682998195
+ POINT 1104 2.633859781534041 25.52195180402179
+ POINT 1105 1.586802618364957 25.50754469321078
+ POINT 1106 3.649195445762174 23.59167733893057
+ POINT 1107 4.169619811571008 22.67588222314829
+ POINT 1108 4.673096959030069 23.58851448755802
+ POINT 1109 2.58832552483298 21.77484182477213
+ POINT 1110 2.171873936919459 22.8069634498414
+ POINT 1111 2.645241468865954 23.65915456557222
+ POINT 1112 1.671397107482298 23.78707294089278
+ POINT 1113 4.678030658177207 19.95553223402469
+ POINT 1114 3.655895895669011 19.96374368425781
+ POINT 1115 3.638151155981279 21.77295969648394
+ POINT 1116 4.662052669249173 21.76979684511139
+ POINT 1117 3.080758382511145 20.86875644673523
+ POINT 1118 6.731545438466698 21.74909183518711
+ POINT 1119 7.249499895745219 20.83597763799092
+ POINT 1120 6.749448501546653 19.93494218778363
+ POINT 1121 5.718187824495971 19.94613304783
+ POINT 1122 5.702209835567938 21.7603976589167
+ POINT 1123 6.222856927737663 22.66141354804614
+ POINT 1124 5.17074117997821 20.85747513225235
+ POINT 1125 14.88062362045075 11.58118328295605
+ POINT 1126 14.26663732500833 12.50470885617862
+ POINT 1127 13.20793488033116 12.53633387235034
+ POINT 1128 12.69100124091205 11.65676942854059
+ POINT 1129 13.22961407056096 10.76267987590455
+ POINT 1130 -4.181696757246904 8.041699829461468
+ POINT 1131 -3.650599174564211 8.978566896409593
+ POINT 1132 -3.626085797421631 7.144811553632946
+ POINT 1133 -4.696379137267573 7.124941829637294
+ POINT 1134 -2.5963235612001 8.989091731089145
+ POINT 1135 -2.070879541800435 8.043735781931989
+ POINT 1136 -3.574367948496355 3.363807242843679
+ POINT 1137 -3.078930514188047 2.323656929439507
+ POINT 1138 -5.123462129635516 2.630546839115701
+ POINT 1139 -4.686602709596436 1.584876903295025
+ POINT 1140 -4.632046658705416 3.457467143291768
+ POINT 1141 -3.780758206397734 1.381518432692542
+ POINT 1142 -4.380882064820396 0.4857008521467929
+ POINT 1143 -1.537414964648728 7.078318112167635
+ POINT 1144 -1.022237926549232 6.10513101172257
+ POINT 1145 -2.551004482247714 5.199344992224856
+ POINT 1146 -3.092621220269923 6.179393883868594
+ POINT 1147 -2.577938840249254 7.096151883692768
+ POINT 1148 -1.52841477052277 5.120757322235234
+ POINT 1149 -1.565385542453618 12.67566417103727
+ POINT 1150 -1.044107338782977 13.59158446540026
+ POINT 1151 -1.564857211726638 14.49716672289619
+ POINT 1152 -2.628683792188871 14.46938449138686
+ POINT 1153 -2.613060066762507 12.66750879681426
+ POINT 1154 -3.143089790317201 13.57017791411676
+ POINT 1155 -8.941278766903849 5.267200605438743
+ POINT 1156 -8.486236698750734 4.246245735265347
+ POINT 1157 -7.96706738323741 5.146957735903831
+ POINT 1158 -9.094385712909785 3.185795058127813
+ POINT 1159 -9.899165223866994 3.622750914152373
+ POINT 1160 -9.543111594457244 2.423623277029117
+ POINT 1161 -10.05434861414229 5.157349837484599
+ POINT 1162 -10.67235893022354 4.140170700800017
+ POINT 1163 -11.12311705597741 3.378439779022869
+ POINT 1164 -7.38758492759221 6.140449119392674
+ POINT 1165 -6.932542859439094 5.119494249219278
+ POINT 1166 -5.762976262804949 5.284130602062798
+ POINT 1167 -6.850768266039271 7.071734682057993
+ POINT 1168 -5.80252525044337 7.067407869086968
+ POINT 1169 -5.246914290618097 6.170519593258447
+ POINT 1170 10.71672358375953 32.87524392735796
+ POINT 1171 9.642413735714634 32.79125514185909
+ POINT 1172 11.12118559986708 31.74352281664589
+ POINT 1173 9.15793076534775 31.87228668931375
+ POINT 1174 9.685932535089496 30.95746811521505
+ POINT 1175 10.66518181181848 30.87364982818402
+ POINT 1176 15.19791671718209 31.58464847548497
+ POINT 1177 15.55917637400988 32.56630552600364
+ POINT 1178 15.79990214283926 28.93949698650302
+ POINT 1179 16.3368917696794 29.86053599387202
+ POINT 1180 15.76074915645257 30.75509875525596
+ POINT 1181 16.81444462265249 30.82933310971594
+ POINT 1182 14.74417705037517 30.63118830145916
+ POINT 1183 14.25226159415743 29.76719009883528
+ POINT 1184 14.79904553375937 28.86995223711657
+ POINT 1185 -7.660247595099477 29.07171642334552
+ POINT 1186 -8.159708535056653 30.00179812550234
+ POINT 1187 -6.639239694273195 29.0761486788626
+ POINT 1188 -7.163900621226036 28.1502520435643
+ POINT 1189 -5.497622619491922 34.55901436086761
+ POINT 1190 -4.49518773283885 34.6857363061998
+ POINT 1191 -5.579336478117359 32.80510559052856
+ POINT 1192 -6.09745675374988 33.75267451621208
+ POINT 1193 -6.650990588161214 32.86703977049458
+ POINT 1194 -5.700404689242956 23.58012241603744
+ POINT 1195 -6.729740123160614 23.56881646933958
+ POINT 1196 -7.239035482595526 24.46837386823964
+ POINT 1197 -7.761487302720488 23.54966515100682
+ POINT 1198 -7.691207402098477 27.22632931678663
+ POINT 1199 -6.670199501272196 27.23076157230372
+ POINT 1200 -6.172815514826199 26.31659798520196
+ POINT 1201 -5.645508733953759 27.24052071197963
+ POINT 1202 -8.216808032653276 26.27623618981316
+ POINT 1203 -6.702397292590144 25.39718201604923
+ POINT 1204 -5.677706525271708 25.40694115572514
+ POINT 1205 -7.734144472150017 25.37803069771646
+ POINT 1206 -8.753446222658658 25.34742804200357
+ POINT 1207 -1.645698721915378 36.58607539347716
+ POINT 1208 -2.0975796991282 37.65905758287926
+ POINT 1209 -1.630935113652335 38.70247408973233
+ POINT 1210 -0.6145331724071246 38.03403837867723
+ POINT 1211 -0.6144586935404894 36.62592449791802
+ POINT 1212 8.00627890595873e-06 37.50863528601275
+ POINT 1213 0.5990148214488246 23.75062706100676
+ POINT 1214 -0.5990146744118122 23.75062707718625
+ POINT 1215 -1.072382221738135 24.60281821827733
+ POINT 1216 1.072382353395319 24.60281817673758
+ POINT 1217 0.5144203323314835 25.47109881332476
+ POINT 1218 3.58444379142495 29.11804267687441
+ POINT 1219 3.080359636161616 28.20371011551553
+ POINT 1220 2.549037542711368 29.11196928894155
+ POINT 1221 3.619360404257244 27.30721152743419
+ POINT 1222 5.129328969085179 28.18223377819683
+ POINT 1223 4.619525056731388 29.12625241641835
+ POINT 1224 4.631945366875925 27.26807009110972
+ POINT 1225 5.645508451085906 27.24052036585816
+ POINT 1226 2.034499539717892 30.03893177661523
+ POINT 1227 1.530415384454558 29.12459921525634
+ POINT 1228 1.519467510327002 30.97888342992712
+ POINT 1229 0.5079395805963843 30.98886243067015
+ POINT 1230 3.57436036144565 3.363808001711532
+ POINT 1231 4.115208087392189 4.361615383325885
+ POINT 1232 2.034939451144496 4.189370210393712
+ POINT 1233 2.551000814787705 5.199346967166499
+ POINT 1234 2.562089764809169 3.227807842293803
+ POINT 1235 3.599148476760741 5.248005798897869
+ POINT 1236 -8.808534389004958 21.72280081085314
+ POINT 1237 -8.290579899119484 22.63591502962064
+ POINT 1238 -9.849539984213617 21.7138879840766
+ POINT 1239 -8.799875258554394 23.5354724285207
+ POINT 1240 -14.05319871993245 21.74107047129854
+ POINT 1241 -13.49147167328674 20.83257382131933
+ POINT 1242 -13.01772343641998 21.71937768246372
+ POINT 1243 -15.07065374632022 18.08797242978403
+ POINT 1244 -15.4360015171055 17.16213287055806
+ POINT 1245 -14.0080120928104 16.21237758454029
+ POINT 1246 -15.01786712752577 16.19866394969555
+ POINT 1247 -17.17857644573234 19.94984075163958
+ POINT 1248 -17.43147479908956 20.8842778513917
+ POINT 1249 -16.09556177105241 19.95056885029135
+ POINT 1250 -15.52089992188291 20.86613685530161
+ POINT 1251 -15.10160880596872 19.93869860514389
+ POINT 1252 -17.18679097624842 21.83494159512092
+ POINT 1253 -18.18552489707417 26.14279763280435
+ POINT 1254 -17.20417083141572 25.40139287011322
+ POINT 1255 -16.3485902785953 26.20978421624601
+ POINT 1256 -16.78867890921584 27.19374870317508
+ POINT 1257 -17.80065072643519 27.17057660669527
+ POINT 1258 -18.72983447894121 27.01379366339507
+ POINT 1259 11.95573882194991 19.89979512998055
+ POINT 1260 10.91279663445388 19.89738135384383
+ POINT 1261 10.41041451927062 18.99394926589576
+ POINT 1262 12.50727362976512 18.99615568741801
+ POINT 1263 5.677706720839749 25.40694066827868
+ POINT 1264 5.179980593012042 24.49591713056331
+ POINT 1265 5.700404958820875 23.58012201478103
+ POINT 1266 6.729740561719636 23.56881619105143
+ POINT 1267 7.239036046137137 24.46837365733434
+ POINT 1268 7.691207579082008 27.22632790550661
+ POINT 1269 6.670199204699301 27.23076104833079
+ POINT 1270 6.172815602490047 26.31659736124369
+ POINT 1271 8.216808740161595 26.27623588438967
+ POINT 1272 6.702397474453146 25.39718135075132
+ POINT 1273 7.734144927787435 25.37803035029934
+ POINT 1274 14.36136880606171 10.72072377865549
+ POINT 1275 15.45627677840451 10.68439021395649
+ POINT 1276 15.49028452683864 8.941107024951828
+ POINT 1277 14.33918656687014 9.008056274559546
+ POINT 1278 13.80526722851472 9.865886806904992
+ POINT 1279 16.06641351663609 9.805491815776586
+ POINT 1280 16.64213914845493 8.907696187396814
+ POINT 1281 -7.631707103564363 30.91661699613311
+ POINT 1282 -8.655828970474381 30.92080206299163
+ POINT 1283 -7.130348925755392 31.87754588921673
+ POINT 1284 -6.634228490337664 30.95854195172743
+ POINT 1285 -9.157930722157598 31.87228935939205
+ POINT 1286 -8.612311842392856 32.75458842836879
+ POINT 1287 -7.648469201387913 32.82511481490026
+ POINT 1288 -2.549229273895434 34.70629607419768
+ POINT 1289 -2.021007115319019 33.78145919155421
+ POINT 1290 -3.500292663479144 34.71485452438976
+ POINT 1291 -4.030907574346319 33.71985855443602
+ POINT 1292 -5.179980371060386 24.49591750747982
+ POINT 1293 -4.650398593296442 25.41533347663255
+ POINT 1294 -3.649195283407097 23.591677514562
+ POINT 1295 -3.148718474961619 24.57178698404517
+ POINT 1296 -4.673096757267691 23.58851473694486
+ POINT 1297 0.5144203594414323 27.2905527635694
+ POINT 1298 1.022476754514889 28.20145846246176
+ POINT 1299 0.507938751521413 29.12842095013544
+ POINT 1300 -9.846921989817281 23.51115965477413
+ POINT 1301 -9.317829393418286 24.42490977616031
+ POINT 1302 -9.800492953921545 25.323115268257
+ POINT 1303 -10.83039438917027 25.28468549874502
+ POINT 1304 -10.92764508160684 18.07693196478106
+ POINT 1305 -10.41041404191582 18.99394930834161
+ POINT 1306 -10.91279607002197 19.89738127491452
+ POINT 1307 -11.95573820817218 19.89979496064743
+ POINT 1308 -11.41305425162406 20.80846734675159
+ POINT 1309 -15.14265757944868 21.78642099994649
+ POINT 1310 -14.66890934258192 22.67322486109087
+ POINT 1311 -16.13661054453237 21.79829124509394
+ POINT 1312 -15.25549093307073 23.54255322720311
+ POINT 1313 -14.1660320735545 23.49720269855517
+ POINT 1314 -16.80854863381419 22.75522573976579
+ POINT 1315 -16.44107418059214 23.60560634392143
+ POINT 1316 10.44287685491821 15.3320070852495
+ POINT 1317 10.99244953168854 14.41410579688861
+ POINT 1318 12.05881853851436 14.38348705047854
+ POINT 1319 12.51923528622494 15.29188158122452
+ POINT 1320 9.882579552317679 18.08217219529029
+ POINT 1321 9.363918655514606 17.17751869900422
+ POINT 1322 10.92764556036217 18.07693181489272
+ POINT 1323 9.899040669385645 16.25867285543741
+ POINT 1324 10.94364677894179 16.23848897409934
+ POINT 1325 -0.5144201764050657 27.29055277175395
+ POINT 1326 6.145462372320054e-08 26.3758253379825
+ POINT 1327 -0.5144202035150144 25.4710988215093
+ POINT 1328 -1.586802492614995 25.50754474293507
+ POINT 1329 4.053181679175566e-07 30.05156162643644
+ POINT 1330 -0.5079373955465308 30.98886235417658
+ POINT 1331 -0.5079382246215022 29.12842087364186
+ POINT 1332 -12.94362054595454 25.24019426221156
+ POINT 1333 -13.63403191024444 24.36529481739402
+ POINT 1334 -13.04745031975563 23.49596645128178
+ POINT 1335 -11.90568140505247 25.26641628259847
+ POINT 1336 -11.44016314056337 24.38232778626718
+ POINT 1337 -10.38199561361241 22.61371945416543
+ POINT 1338 -10.90256774287263 21.70588513110751
+ POINT 1339 -10.8999497484763 23.50315680180504
+ POINT 1340 -11.94550988102284 21.70829881684042
+ POINT 1341 -11.9752367643585 23.48488758565849
+ POINT 1342 -12.50723692766855 22.61679546681964
+ POINT 1343 -11.95486088381842 18.07035362542616
+ POINT 1344 -11.42702593885517 17.15857670139686
+ POINT 1345 -11.97086217426693 16.23191113527045
+ POINT 1346 -13.00261454459266 16.21196963584406
+ POINT 1347 -13.45963928928449 17.15240631073819
+ POINT 1348 -14.04300661306449 19.92893456636063
+ POINT 1349 -14.61766846223399 19.01336656135037
+ POINT 1350 -14.012051553416 18.07820839100076
+ POINT 1351 -13.00753132955202 19.9072417775258
+ POINT 1352 -12.50727314794993 18.99615570568874
+ POINT 1353 -13.00665400519826 18.07780044230454
+ POINT 1354 11.42702639250091 17.15857636716348
+ POINT 1355 11.95486135945386 18.07035343776895
+ POINT 1356 13.45963971419343 17.15240581280172
+ POINT 1357 13.00665446190387 18.07780023968877
+ POINT 1358 11.97086257803348 16.23191059697557
+ POINT 1359 13.00261489978407 16.21196897428866
+ POINT 1360 -4.63194529517035 27.26807044242916
+ POINT 1361 -5.129329281616346 28.18223402953092
+ POINT 1362 -2.075897664001495 26.39023252420856
+ POINT 1363 -2.633859682224616 25.52195192097659
+ POINT 1364 -3.619360348222028 27.30721173111527
+ POINT 1365 -4.135539800559439 26.36549841356398
+ POINT 1366 -3.637813646348119 25.45447476531866
+ POINT 1367 -1.530414898263689 29.12459912906478
+ POINT 1368 -1.022476552060444 28.20145845276378
+ POINT 1369 -2.583954039656873 27.30113820521839
+ POINT 1370 -3.080359534267785 28.20371023408358
+ POINT 1371 -1.536896850047253 27.28673102717688
+ POINT 1372 -4.543158675405131 32.76980075139725
+ POINT 1373 -5.096692509816465 31.88416600567974
+ POINT 1374 -3.548263606045425 32.79891896958721
+ POINT 1375 -2.549037169284093 29.11196922998421
+ POINT 1376 -2.034498841845151 30.03893165086228
+ POINT 1377 -3.584443477849247 29.11804275588108
+ POINT 1378 -1.519465434862823 30.97888306068132
+ POINT 1379 -1.011526259584607 31.91618386491503
+ POINT 1380 -3.041784503002568 31.8775328689841
+ POINT 1381 -2.529533401943756 32.82759067202288
+ POINT 1382 -2.538087705883227 30.96625316160074
+ POINT 1383 -3.556817909984896 30.93758145916507
+ POINT 1384 -1.514528012276162 32.8600730909511
+ POINT 1385 -4.088203640533337 30.03451082052263
+ POINT 1386 -4.591900437652678 30.94579052790599
+ POINT 1387 -6.129436418173878 30.02016647395368
+ POINT 1388 -5.628078240364906 30.9810953670373
+ POINT 1389 -4.619526005517029 29.126251824622
+ POINT 1390 -5.633089444300436 29.09870209417247
END POINTS LIST
@@ -323,145 +1403,669 @@ END POINTS LIST
BEGIN MESH STRUCTURE DESCRIPTION
-CONVEX 0 'GT_PK(2,2)' 18 86 27 87 88 19
-CONVEX 1 'GT_PK(2,2)' 33 89 43 90 91 42
-CONVEX 2 'GT_PK(2,2)' 33 92 34 93 94 25
-CONVEX 3 'GT_PK(2,2)' 33 89 43 92 95 34
-CONVEX 4 'GT_PK(2,2)' 65 96 75 97 98 66
-CONVEX 5 'GT_PK(2,2)' 65 96 75 99 100 74
-CONVEX 6 'GT_PK(2,2)' 81 101 75 102 100 74
-CONVEX 7 'GT_PK(2,2)' 26 103 18 104 86 27
-CONVEX 8 'GT_PK(2,2)' 11 105 18 106 87 19
-CONVEX 9 'GT_PK(2,2)' 72 107 62 108 109 71
-CONVEX 10 'GT_PK(2,2)' 58 110 68 111 112 59
-CONVEX 11 'GT_PK(2,2)' 36 113 26 114 104 27
-CONVEX 12 'GT_PK(2,2)' 53 115 43 116 117 3
-CONVEX 13 'GT_PK(2,2)' 32 118 33 119 90 42
-CONVEX 14 'GT_PK(2,2)' 32 120 31 121 122 23
-CONVEX 15 'GT_PK(2,2)' 41 123 51 124 125 42
-CONVEX 16 'GT_PK(2,2)' 41 126 32 124 119 42
-CONVEX 17 'GT_PK(2,2)' 41 126 32 127 120 31
-CONVEX 18 'GT_PK(2,2)' 24 128 33 129 93 25
-CONVEX 19 'GT_PK(2,2)' 24 130 32 131 121 23
-CONVEX 20 'GT_PK(2,2)' 24 130 32 128 118 33
-CONVEX 21 'GT_PK(2,2)' 73 132 65 133 99 74
-CONVEX 22 'GT_PK(2,2)' 73 132 65 134 135 64
-CONVEX 23 'GT_PK(2,2)' 76 136 81 137 101 75
-CONVEX 24 'GT_PK(2,2)' 76 138 82 136 139 81
-CONVEX 25 'GT_PK(2,2)' 77 140 84 141 142 85
-CONVEX 26 'GT_PK(2,2)' 55 143 65 144 135 64
-CONVEX 27 'GT_PK(2,2)' 55 145 54 144 146 64
-CONVEX 28 'GT_PK(2,2)' 78 147 79 148 149 85
-CONVEX 29 'GT_PK(2,2)' 78 150 77 148 141 85
-CONVEX 30 'GT_PK(2,2)' 78 151 71 152 153 70
-CONVEX 31 'GT_PK(2,2)' 78 147 79 151 154 71
-CONVEX 32 'GT_PK(2,2)' 44 155 43 156 117 3
-CONVEX 33 'GT_PK(2,2)' 44 155 43 157 95 34
-CONVEX 34 'GT_PK(2,2)' 80 158 79 159 154 71
-CONVEX 35 'GT_PK(2,2)' 80 160 72 159 108 71
-CONVEX 36 'GT_PK(2,2)' 35 161 36 162 163 2
-CONVEX 37 'GT_PK(2,2)' 35 161 36 164 113 26
-CONVEX 38 'GT_PK(2,2)' 52 165 53 166 167 62
-CONVEX 39 'GT_PK(2,2)' 52 168 51 169 125 42
-CONVEX 40 'GT_PK(2,2)' 52 170 43 169 91 42
-CONVEX 41 'GT_PK(2,2)' 52 165 53 170 115 43
-CONVEX 42 'GT_PK(2,2)' 63 171 72 172 107 62
-CONVEX 43 'GT_PK(2,2)' 63 173 53 172 167 62
-CONVEX 44 'GT_PK(2,2)' 63 173 53 174 116 3
-CONVEX 45 'GT_PK(2,2)' 61 175 60 176 177 70
-CONVEX 46 'GT_PK(2,2)' 61 178 71 176 153 70
-CONVEX 47 'GT_PK(2,2)' 61 179 62 178 109 71
-CONVEX 48 'GT_PK(2,2)' 61 175 60 180 181 51
-CONVEX 49 'GT_PK(2,2)' 61 182 52 179 166 62
-CONVEX 50 'GT_PK(2,2)' 61 182 52 180 168 51
-CONVEX 51 'GT_PK(2,2)' 50 183 60 184 181 51
-CONVEX 52 'GT_PK(2,2)' 50 185 41 184 123 51
-CONVEX 53 'GT_PK(2,2)' 50 183 60 186 187 59
-CONVEX 54 'GT_PK(2,2)' 17 188 24 189 129 25
-CONVEX 55 'GT_PK(2,2)' 16 190 15 191 192 23
-CONVEX 56 'GT_PK(2,2)' 16 193 24 191 131 23
-CONVEX 57 'GT_PK(2,2)' 16 194 17 195 196 10
-CONVEX 58 'GT_PK(2,2)' 16 194 17 193 188 24
-CONVEX 59 'GT_PK(2,2)' 9 197 15 198 199 8
-CONVEX 60 'GT_PK(2,2)' 9 200 16 201 195 10
-CONVEX 61 'GT_PK(2,2)' 9 200 16 197 190 15
-CONVEX 62 'GT_PK(2,2)' 67 202 58 203 110 68
-CONVEX 63 'GT_PK(2,2)' 67 204 76 203 205 68
-CONVEX 64 'GT_PK(2,2)' 67 206 57 207 208 66
-CONVEX 65 'GT_PK(2,2)' 67 206 57 202 209 58
-CONVEX 66 'GT_PK(2,2)' 67 210 75 207 98 66
-CONVEX 67 'GT_PK(2,2)' 67 204 76 210 137 75
-CONVEX 68 'GT_PK(2,2)' 83 211 76 212 205 68
-CONVEX 69 'GT_PK(2,2)' 83 213 77 212 214 68
-CONVEX 70 'GT_PK(2,2)' 83 215 82 216 217 4
-CONVEX 71 'GT_PK(2,2)' 83 211 76 215 138 82
-CONVEX 72 'GT_PK(2,2)' 83 218 84 216 219 4
-CONVEX 73 'GT_PK(2,2)' 83 213 77 218 140 84
-CONVEX 74 'GT_PK(2,2)' 69 220 60 221 177 70
-CONVEX 75 'GT_PK(2,2)' 69 220 60 222 187 59
-CONVEX 76 'GT_PK(2,2)' 69 223 78 221 152 70
-CONVEX 77 'GT_PK(2,2)' 69 223 78 224 150 77
-CONVEX 78 'GT_PK(2,2)' 69 225 68 222 112 59
-CONVEX 79 'GT_PK(2,2)' 69 224 77 225 214 68
-CONVEX 80 'GT_PK(2,2)' 45 226 36 227 163 2
-CONVEX 81 'GT_PK(2,2)' 45 228 54 227 229 2
-CONVEX 82 'GT_PK(2,2)' 45 230 55 228 145 54
-CONVEX 83 'GT_PK(2,2)' 40 231 30 232 233 31
-CONVEX 84 'GT_PK(2,2)' 40 234 41 232 127 31
-CONVEX 85 'GT_PK(2,2)' 40 235 50 236 237 1
-CONVEX 86 'GT_PK(2,2)' 40 235 50 234 185 41
-CONVEX 87 'GT_PK(2,2)' 39 238 30 239 240 29
-CONVEX 88 'GT_PK(2,2)' 39 241 38 239 242 29
-CONVEX 89 'GT_PK(2,2)' 39 243 40 244 236 1
-CONVEX 90 'GT_PK(2,2)' 39 243 40 238 231 30
-CONVEX 91 'GT_PK(2,2)' 22 245 31 246 122 23
-CONVEX 92 'GT_PK(2,2)' 22 247 30 245 233 31
-CONVEX 93 'GT_PK(2,2)' 22 248 15 246 192 23
-CONVEX 94 'GT_PK(2,2)' 37 249 38 250 251 47
-CONVEX 95 'GT_PK(2,2)' 37 252 36 253 114 27
-CONVEX 96 'GT_PK(2,2)' 12 254 20 255 256 19
-CONVEX 97 'GT_PK(2,2)' 12 257 11 255 106 19
-CONVEX 98 'GT_PK(2,2)' 12 257 11 258 259 5
-CONVEX 99 'GT_PK(2,2)' 12 260 6 258 261 5
-CONVEX 100 'GT_PK(2,2)' 14 262 22 263 248 15
-CONVEX 101 'GT_PK(2,2)' 14 264 8 265 266 0
-CONVEX 102 'GT_PK(2,2)' 14 263 15 264 199 8
-CONVEX 103 'GT_PK(2,2)' 21 267 30 268 240 29
-CONVEX 104 'GT_PK(2,2)' 21 269 20 268 270 29
-CONVEX 105 'GT_PK(2,2)' 21 271 22 267 247 30
-CONVEX 106 'GT_PK(2,2)' 21 272 14 271 262 22
-CONVEX 107 'GT_PK(2,2)' 56 273 57 274 275 47
-CONVEX 108 'GT_PK(2,2)' 56 273 57 276 208 66
-CONVEX 109 'GT_PK(2,2)' 56 277 65 276 97 66
-CONVEX 110 'GT_PK(2,2)' 56 278 55 277 143 65
-CONVEX 111 'GT_PK(2,2)' 48 279 57 280 275 47
-CONVEX 112 'GT_PK(2,2)' 48 281 39 282 244 1
-CONVEX 113 'GT_PK(2,2)' 48 279 57 283 209 58
-CONVEX 114 'GT_PK(2,2)' 48 284 38 280 251 47
-CONVEX 115 'GT_PK(2,2)' 48 281 39 284 241 38
-CONVEX 116 'GT_PK(2,2)' 46 285 37 286 250 47
-CONVEX 117 'GT_PK(2,2)' 46 287 56 286 274 47
-CONVEX 118 'GT_PK(2,2)' 46 288 45 289 226 36
-CONVEX 119 'GT_PK(2,2)' 46 285 37 289 252 36
-CONVEX 120 'GT_PK(2,2)' 46 288 45 290 230 55
-CONVEX 121 'GT_PK(2,2)' 46 287 56 290 278 55
-CONVEX 122 'GT_PK(2,2)' 28 291 38 292 242 29
-CONVEX 123 'GT_PK(2,2)' 28 293 37 291 249 38
-CONVEX 124 'GT_PK(2,2)' 28 294 20 292 270 29
-CONVEX 125 'GT_PK(2,2)' 28 294 20 295 256 19
-CONVEX 126 'GT_PK(2,2)' 28 296 27 295 88 19
-CONVEX 127 'GT_PK(2,2)' 28 293 37 296 253 27
-CONVEX 128 'GT_PK(2,2)' 7 297 14 298 265 0
-CONVEX 129 'GT_PK(2,2)' 13 299 21 300 272 14
-CONVEX 130 'GT_PK(2,2)' 13 301 12 302 260 6
-CONVEX 131 'GT_PK(2,2)' 13 301 12 303 254 20
-CONVEX 132 'GT_PK(2,2)' 13 299 21 303 269 20
-CONVEX 133 'GT_PK(2,2)' 13 304 7 302 305 6
-CONVEX 134 'GT_PK(2,2)' 13 304 7 300 297 14
-CONVEX 135 'GT_PK(2,2)' 49 306 48 307 282 1
-CONVEX 136 'GT_PK(2,2)' 49 306 48 308 283 58
-CONVEX 137 'GT_PK(2,2)' 49 308 58 309 111 59
-CONVEX 138 'GT_PK(2,2)' 49 310 50 307 237 1
-CONVEX 139 'GT_PK(2,2)' 49 310 50 309 186 59
+CONVEX 0 'GT_PK(2,2)' 181 364 142 365 366 161
+CONVEX 1 'GT_PK(2,2)' 180 367 181 368 369 3
+CONVEX 2 'GT_PK(2,2)' 180 367 181 370 365 161
+CONVEX 3 'GT_PK(2,2)' 358 371 359 372 373 4
+CONVEX 4 'GT_PK(2,2)' 360 374 359 375 373 4
+CONVEX 5 'GT_PK(2,2)' 350 376 360 377 378 361
+CONVEX 6 'GT_PK(2,2)' 127 379 108 380 381 128
+CONVEX 7 'GT_PK(2,2)' 127 379 108 382 383 107
+CONVEX 8 'GT_PK(2,2)' 182 384 201 385 386 2
+CONVEX 9 'GT_PK(2,2)' 141 387 142 388 389 122
+CONVEX 10 'GT_PK(2,2)' 141 387 142 390 366 161
+CONVEX 11 'GT_PK(2,2)' 17 391 8 392 393 7
+CONVEX 12 'GT_PK(2,2)' 325 394 309 395 396 326
+CONVEX 13 'GT_PK(2,2)' 354 397 341 398 399 353
+CONVEX 14 'GT_PK(2,2)' 39 400 55 401 402 40
+CONVEX 15 'GT_PK(2,2)' 39 403 25 401 404 40
+CONVEX 16 'GT_PK(2,2)' 71 405 55 406 407 72
+CONVEX 17 'GT_PK(2,2)' 316 408 317 409 410 331
+CONVEX 18 'GT_PK(2,2)' 356 411 346 412 413 357
+CONVEX 19 'GT_PK(2,2)' 87 414 86 415 416 69
+CONVEX 20 'GT_PK(2,2)' 89 417 108 418 383 107
+CONVEX 21 'GT_PK(2,2)' 89 419 71 420 406 72
+CONVEX 22 'GT_PK(2,2)' 109 421 108 422 381 128
+CONVEX 23 'GT_PK(2,2)' 126 423 127 424 382 107
+CONVEX 24 'GT_PK(2,2)' 163 425 162 426 427 143
+CONVEX 25 'GT_PK(2,2)' 163 425 162 428 429 2
+CONVEX 26 'GT_PK(2,2)' 163 430 182 428 385 2
+CONVEX 27 'GT_PK(2,2)' 191 431 211 432 433 210
+CONVEX 28 'GT_PK(2,2)' 191 434 190 435 436 1
+CONVEX 29 'GT_PK(2,2)' 191 434 190 432 437 210
+CONVEX 30 'GT_PK(2,2)' 136 438 155 439 440 135
+CONVEX 31 'GT_PK(2,2)' 149 441 130 442 443 150
+CONVEX 32 'GT_PK(2,2)' 131 444 130 445 443 150
+CONVEX 33 'GT_PK(2,2)' 15 446 6 447 448 5
+CONVEX 34 'GT_PK(2,2)' 18 449 17 450 451 30
+CONVEX 35 'GT_PK(2,2)' 18 452 9 453 454 0
+CONVEX 36 'GT_PK(2,2)' 18 455 8 453 456 0
+CONVEX 37 'GT_PK(2,2)' 18 449 17 455 391 8
+CONVEX 38 'GT_PK(2,2)' 363 457 362 458 459 352
+CONVEX 39 'GT_PK(2,2)' 351 460 362 461 459 352
+CONVEX 40 'GT_PK(2,2)' 351 462 338 463 464 350
+CONVEX 41 'GT_PK(2,2)' 351 463 350 465 377 361
+CONVEX 42 'GT_PK(2,2)' 351 460 362 465 466 361
+CONVEX 43 'GT_PK(2,2)' 339 467 325 468 469 324
+CONVEX 44 'GT_PK(2,2)' 339 470 338 468 471 324
+CONVEX 45 'GT_PK(2,2)' 339 472 351 473 461 352
+CONVEX 46 'GT_PK(2,2)' 339 472 351 470 462 338
+CONVEX 47 'GT_PK(2,2)' 340 474 341 475 399 353
+CONVEX 48 'GT_PK(2,2)' 340 476 339 477 473 352
+CONVEX 49 'GT_PK(2,2)' 340 476 339 478 467 325
+CONVEX 50 'GT_PK(2,2)' 340 474 341 479 480 326
+CONVEX 51 'GT_PK(2,2)' 340 478 325 479 395 326
+CONVEX 52 'GT_PK(2,2)' 340 481 363 475 482 353
+CONVEX 53 'GT_PK(2,2)' 340 481 363 477 458 352
+CONVEX 54 'GT_PK(2,2)' 278 483 259 484 485 258
+CONVEX 55 'GT_PK(2,2)' 276 486 257 487 488 256
+CONVEX 56 'GT_PK(2,2)' 347 489 358 490 491 357
+CONVEX 57 'GT_PK(2,2)' 347 492 346 490 413 357
+CONVEX 58 'GT_PK(2,2)' 337 493 338 494 464 350
+CONVEX 59 'GT_PK(2,2)' 308 495 325 496 469 324
+CONVEX 60 'GT_PK(2,2)' 308 495 325 497 394 309
+CONVEX 61 'GT_PK(2,2)' 291 498 309 499 500 292
+CONVEX 62 'GT_PK(2,2)' 291 501 308 498 497 309
+CONVEX 63 'GT_PK(2,2)' 291 501 308 502 503 290
+CONVEX 64 'GT_PK(2,2)' 197 504 216 505 506 196
+CONVEX 65 'GT_PK(2,2)' 197 507 178 508 509 198
+CONVEX 66 'GT_PK(2,2)' 171 510 190 511 436 1
+CONVEX 67 'GT_PK(2,2)' 64 512 81 513 514 80
+CONVEX 68 'GT_PK(2,2)' 19 515 9 516 517 10
+CONVEX 69 'GT_PK(2,2)' 19 518 18 515 452 9
+CONVEX 70 'GT_PK(2,2)' 24 519 39 520 521 38
+CONVEX 71 'GT_PK(2,2)' 24 519 39 522 403 25
+CONVEX 72 'GT_PK(2,2)' 54 523 39 524 400 55
+CONVEX 73 'GT_PK(2,2)' 54 525 71 524 405 55
+CONVEX 74 'GT_PK(2,2)' 54 523 39 526 521 38
+CONVEX 75 'GT_PK(2,2)' 54 527 53 526 528 38
+CONVEX 76 'GT_PK(2,2)' 315 529 316 530 531 299
+CONVEX 77 'GT_PK(2,2)' 343 532 344 533 534 331
+CONVEX 78 'GT_PK(2,2)' 343 535 316 533 409 331
+CONVEX 79 'GT_PK(2,2)' 300 536 316 537 531 299
+CONVEX 80 'GT_PK(2,2)' 300 536 316 538 408 317
+CONVEX 81 'GT_PK(2,2)' 123 539 124 540 541 104
+CONVEX 82 'GT_PK(2,2)' 123 539 124 542 543 143
+CONVEX 83 'GT_PK(2,2)' 123 544 162 542 427 143
+CONVEX 84 'GT_PK(2,2)' 70 545 53 546 547 69
+CONVEX 85 'GT_PK(2,2)' 70 548 87 546 415 69
+CONVEX 86 'GT_PK(2,2)' 70 549 54 545 527 53
+CONVEX 87 'GT_PK(2,2)' 70 549 54 550 525 71
+CONVEX 88 'GT_PK(2,2)' 106 551 126 552 553 125
+CONVEX 89 'GT_PK(2,2)' 106 551 126 554 424 107
+CONVEX 90 'GT_PK(2,2)' 105 555 86 556 557 104
+CONVEX 91 'GT_PK(2,2)' 105 558 87 555 414 86
+CONVEX 92 'GT_PK(2,2)' 105 559 124 556 541 104
+CONVEX 93 'GT_PK(2,2)' 105 560 106 558 561 87
+CONVEX 94 'GT_PK(2,2)' 105 559 124 562 563 125
+CONVEX 95 'GT_PK(2,2)' 105 560 106 562 552 125
+CONVEX 96 'GT_PK(2,2)' 179 564 178 565 509 198
+CONVEX 97 'GT_PK(2,2)' 56 566 73 567 568 57
+CONVEX 98 'GT_PK(2,2)' 56 569 55 570 402 40
+CONVEX 99 'GT_PK(2,2)' 56 569 55 571 407 72
+CONVEX 100 'GT_PK(2,2)' 56 566 73 571 572 72
+CONVEX 101 'GT_PK(2,2)' 90 573 109 574 421 108
+CONVEX 102 'GT_PK(2,2)' 90 575 89 576 420 72
+CONVEX 103 'GT_PK(2,2)' 90 575 89 574 417 108
+CONVEX 104 'GT_PK(2,2)' 90 577 73 576 572 72
+CONVEX 105 'GT_PK(2,2)' 187 578 167 579 580 168
+CONVEX 106 'GT_PK(2,2)' 116 581 136 582 439 135
+CONVEX 107 'GT_PK(2,2)' 116 581 136 583 584 117
+CONVEX 108 'GT_PK(2,2)' 154 585 153 586 587 173
+CONVEX 109 'GT_PK(2,2)' 154 588 155 589 440 135
+CONVEX 110 'GT_PK(2,2)' 172 590 153 591 587 173
+CONVEX 111 'GT_PK(2,2)' 172 592 171 593 511 1
+CONVEX 112 'GT_PK(2,2)' 264 594 245 595 596 244
+CONVEX 113 'GT_PK(2,2)' 298 597 297 598 599 314
+CONVEX 114 'GT_PK(2,2)' 298 600 315 598 601 314
+CONVEX 115 'GT_PK(2,2)' 298 602 281 603 604 299
+CONVEX 116 'GT_PK(2,2)' 298 600 315 603 530 299
+CONVEX 117 'GT_PK(2,2)' 202 605 182 606 384 201
+CONVEX 118 'GT_PK(2,2)' 144 607 163 608 426 143
+CONVEX 119 'GT_PK(2,2)' 144 609 124 610 563 125
+CONVEX 120 'GT_PK(2,2)' 144 609 124 608 543 143
+CONVEX 121 'GT_PK(2,2)' 215 611 216 612 506 196
+CONVEX 122 'GT_PK(2,2)' 215 613 195 612 614 196
+CONVEX 123 'GT_PK(2,2)' 99 615 81 616 617 82
+CONVEX 124 'GT_PK(2,2)' 99 618 118 619 620 117
+CONVEX 125 'GT_PK(2,2)' 35 621 36 622 623 23
+CONVEX 126 'GT_PK(2,2)' 35 621 36 624 625 50
+CONVEX 127 'GT_PK(2,2)' 100 626 118 627 628 119
+CONVEX 128 'GT_PK(2,2)' 100 629 99 630 616 82
+CONVEX 129 'GT_PK(2,2)' 100 629 99 626 618 118
+CONVEX 130 'GT_PK(2,2)' 137 631 136 632 584 117
+CONVEX 131 'GT_PK(2,2)' 137 633 118 632 620 117
+CONVEX 132 'GT_PK(2,2)' 74 634 73 635 568 57
+CONVEX 133 'GT_PK(2,2)' 74 636 75 637 638 92
+CONVEX 134 'GT_PK(2,2)' 148 639 167 640 580 168
+CONVEX 135 'GT_PK(2,2)' 148 641 149 640 642 168
+CONVEX 136 'GT_PK(2,2)' 93 643 75 644 645 76
+CONVEX 137 'GT_PK(2,2)' 93 643 75 646 638 92
+CONVEX 138 'GT_PK(2,2)' 46 647 45 648 649 61
+CONVEX 139 'GT_PK(2,2)' 46 650 62 648 651 61
+CONVEX 140 'GT_PK(2,2)' 46 650 62 652 653 47
+CONVEX 141 'GT_PK(2,2)' 327 654 354 655 397 341
+CONVEX 142 'GT_PK(2,2)' 327 655 341 656 480 326
+CONVEX 143 'GT_PK(2,2)' 217 657 218 658 659 198
+CONVEX 144 'GT_PK(2,2)' 217 660 197 658 508 198
+CONVEX 145 'GT_PK(2,2)' 217 660 197 661 504 216
+CONVEX 146 'GT_PK(2,2)' 200 662 180 663 368 3
+CONVEX 147 'GT_PK(2,2)' 200 664 220 663 665 3
+CONVEX 148 'GT_PK(2,2)' 238 666 257 667 668 258
+CONVEX 149 'GT_PK(2,2)' 238 669 259 667 485 258
+CONVEX 150 'GT_PK(2,2)' 238 670 239 669 671 259
+CONVEX 151 'GT_PK(2,2)' 277 672 257 673 668 258
+CONVEX 152 'GT_PK(2,2)' 277 674 276 672 486 257
+CONVEX 153 'GT_PK(2,2)' 277 675 278 673 484 258
+CONVEX 154 'GT_PK(2,2)' 277 675 278 676 677 296
+CONVEX 155 'GT_PK(2,2)' 236 678 255 679 680 256
+CONVEX 156 'GT_PK(2,2)' 236 681 217 682 661 216
+CONVEX 157 'GT_PK(2,2)' 275 683 276 684 487 256
+CONVEX 158 'GT_PK(2,2)' 275 685 255 684 680 256
+CONVEX 159 'GT_PK(2,2)' 275 686 294 683 687 276
+CONVEX 160 'GT_PK(2,2)' 275 686 294 688 689 293
+CONVEX 161 'GT_PK(2,2)' 209 690 229 691 692 210
+CONVEX 162 'GT_PK(2,2)' 209 693 189 694 695 208
+CONVEX 163 'GT_PK(2,2)' 209 696 190 691 437 210
+CONVEX 164 'GT_PK(2,2)' 209 693 189 696 697 190
+CONVEX 165 'GT_PK(2,2)' 334 698 347 699 492 346
+CONVEX 166 'GT_PK(2,2)' 345 700 356 701 411 346
+CONVEX 167 'GT_PK(2,2)' 345 702 355 700 703 356
+CONVEX 168 'GT_PK(2,2)' 349 704 337 705 494 350
+CONVEX 169 'GT_PK(2,2)' 349 706 360 707 374 359
+CONVEX 170 'GT_PK(2,2)' 349 705 350 706 376 360
+CONVEX 171 'GT_PK(2,2)' 349 708 336 704 709 337
+CONVEX 172 'GT_PK(2,2)' 323 710 338 711 471 324
+CONVEX 173 'GT_PK(2,2)' 323 712 337 710 493 338
+CONVEX 174 'GT_PK(2,2)' 307 713 308 714 503 290
+CONVEX 175 'GT_PK(2,2)' 307 713 308 715 496 324
+CONVEX 176 'GT_PK(2,2)' 307 716 323 715 711 324
+CONVEX 177 'GT_PK(2,2)' 307 716 323 717 718 306
+CONVEX 178 'GT_PK(2,2)' 272 719 291 720 502 290
+CONVEX 179 'GT_PK(2,2)' 169 721 149 722 442 150
+CONVEX 180 'GT_PK(2,2)' 169 721 149 723 642 168
+CONVEX 181 'GT_PK(2,2)' 22 724 35 725 726 34
+CONVEX 182 'GT_PK(2,2)' 22 724 35 727 622 23
+CONVEX 183 'GT_PK(2,2)' 63 728 62 729 653 47
+CONVEX 184 'GT_PK(2,2)' 63 728 62 730 731 79
+CONVEX 185 'GT_PK(2,2)' 63 730 79 732 733 80
+CONVEX 186 'GT_PK(2,2)' 63 734 64 732 513 80
+CONVEX 187 'GT_PK(2,2)' 21 735 12 736 737 11
+CONVEX 188 'GT_PK(2,2)' 21 738 33 739 740 34
+CONVEX 189 'GT_PK(2,2)' 21 741 22 739 725 34
+CONVEX 190 'GT_PK(2,2)' 21 741 22 735 742 12
+CONVEX 191 'GT_PK(2,2)' 49 743 35 744 726 34
+CONVEX 192 'GT_PK(2,2)' 49 743 35 745 624 50
+CONVEX 193 'GT_PK(2,2)' 330 746 315 747 529 316
+CONVEX 194 'GT_PK(2,2)' 330 748 343 747 535 316
+CONVEX 195 'GT_PK(2,2)' 330 746 315 749 601 314
+CONVEX 196 'GT_PK(2,2)' 88 750 70 751 548 87
+CONVEX 197 'GT_PK(2,2)' 88 752 106 751 561 87
+CONVEX 198 'GT_PK(2,2)' 88 750 70 753 550 71
+CONVEX 199 'GT_PK(2,2)' 88 752 106 754 554 107
+CONVEX 200 'GT_PK(2,2)' 88 755 89 754 418 107
+CONVEX 201 'GT_PK(2,2)' 88 755 89 753 419 71
+CONVEX 202 'GT_PK(2,2)' 159 756 179 757 564 178
+CONVEX 203 'GT_PK(2,2)' 129 758 110 759 760 130
+CONVEX 204 'GT_PK(2,2)' 129 761 148 762 763 128
+CONVEX 205 'GT_PK(2,2)' 129 764 109 762 422 128
+CONVEX 206 'GT_PK(2,2)' 129 758 110 764 765 109
+CONVEX 207 'GT_PK(2,2)' 129 766 149 759 441 130
+CONVEX 208 'GT_PK(2,2)' 129 761 148 766 641 149
+CONVEX 209 'GT_PK(2,2)' 111 767 131 768 444 130
+CONVEX 210 'GT_PK(2,2)' 111 769 110 768 760 130
+CONVEX 211 'GT_PK(2,2)' 111 769 110 770 771 92
+CONVEX 212 'GT_PK(2,2)' 111 772 93 770 646 92
+CONVEX 213 'GT_PK(2,2)' 91 773 90 774 573 109
+CONVEX 214 'GT_PK(2,2)' 91 775 110 776 771 92
+CONVEX 215 'GT_PK(2,2)' 91 775 110 774 765 109
+CONVEX 216 'GT_PK(2,2)' 91 777 74 776 637 92
+CONVEX 217 'GT_PK(2,2)' 91 773 90 778 577 73
+CONVEX 218 'GT_PK(2,2)' 91 777 74 778 634 73
+CONVEX 219 'GT_PK(2,2)' 97 779 79 780 733 80
+CONVEX 220 'GT_PK(2,2)' 97 781 96 779 782 79
+CONVEX 221 'GT_PK(2,2)' 114 783 133 784 785 113
+CONVEX 222 'GT_PK(2,2)' 114 786 95 784 787 113
+CONVEX 223 'GT_PK(2,2)' 114 786 95 788 789 96
+CONVEX 224 'GT_PK(2,2)' 132 790 133 791 785 113
+CONVEX 225 'GT_PK(2,2)' 263 792 264 793 595 244
+CONVEX 226 'GT_PK(2,2)' 263 794 262 795 796 281
+CONVEX 227 'GT_PK(2,2)' 282 797 281 798 604 299
+CONVEX 228 'GT_PK(2,2)' 282 799 264 800 801 283
+CONVEX 229 'GT_PK(2,2)' 282 802 263 797 795 281
+CONVEX 230 'GT_PK(2,2)' 282 802 263 799 792 264
+CONVEX 231 'GT_PK(2,2)' 282 803 300 800 804 283
+CONVEX 232 'GT_PK(2,2)' 282 803 300 798 537 299
+CONVEX 233 'GT_PK(2,2)' 261 805 279 806 807 260
+CONVEX 234 'GT_PK(2,2)' 243 808 263 809 793 244
+CONVEX 235 'GT_PK(2,2)' 243 808 263 810 794 262
+CONVEX 236 'GT_PK(2,2)' 221 811 202 812 606 201
+CONVEX 237 'GT_PK(2,2)' 221 813 240 814 815 222
+CONVEX 238 'GT_PK(2,2)' 221 811 202 814 816 222
+CONVEX 239 'GT_PK(2,2)' 156 817 136 818 438 155
+CONVEX 240 'GT_PK(2,2)' 156 819 175 818 820 155
+CONVEX 241 'GT_PK(2,2)' 156 821 137 817 631 136
+CONVEX 242 'GT_PK(2,2)' 192 822 191 823 431 211
+CONVEX 243 'GT_PK(2,2)' 192 822 191 824 435 1
+CONVEX 244 'GT_PK(2,2)' 192 825 172 824 593 1
+CONVEX 245 'GT_PK(2,2)' 192 825 172 826 591 173
+CONVEX 246 'GT_PK(2,2)' 174 827 154 828 586 173
+CONVEX 247 'GT_PK(2,2)' 174 827 154 829 588 155
+CONVEX 248 'GT_PK(2,2)' 174 830 175 829 820 155
+CONVEX 249 'GT_PK(2,2)' 214 831 215 832 613 195
+CONVEX 250 'GT_PK(2,2)' 214 831 215 833 834 234
+CONVEX 251 'GT_PK(2,2)' 98 835 81 836 514 80
+CONVEX 252 'GT_PK(2,2)' 98 837 99 835 615 81
+CONVEX 253 'GT_PK(2,2)' 98 838 97 836 780 80
+CONVEX 254 'GT_PK(2,2)' 98 837 99 839 619 117
+CONVEX 255 'GT_PK(2,2)' 98 840 116 839 583 117
+CONVEX 256 'GT_PK(2,2)' 98 838 97 840 841 116
+CONVEX 257 'GT_PK(2,2)' 52 842 68 843 844 67
+CONVEX 258 'GT_PK(2,2)' 83 845 66 846 847 67
+CONVEX 259 'GT_PK(2,2)' 83 848 100 849 630 82
+CONVEX 260 'GT_PK(2,2)' 83 845 66 849 850 82
+CONVEX 261 'GT_PK(2,2)' 51 851 66 852 853 50
+CONVEX 262 'GT_PK(2,2)' 51 854 36 855 856 37
+CONVEX 263 'GT_PK(2,2)' 51 854 36 852 625 50
+CONVEX 264 'GT_PK(2,2)' 51 851 66 857 847 67
+CONVEX 265 'GT_PK(2,2)' 51 858 52 855 859 37
+CONVEX 266 'GT_PK(2,2)' 51 858 52 857 843 67
+CONVEX 267 'GT_PK(2,2)' 103 860 102 861 862 85
+CONVEX 268 'GT_PK(2,2)' 121 863 102 864 865 120
+CONVEX 269 'GT_PK(2,2)' 121 866 141 867 388 122
+CONVEX 270 'GT_PK(2,2)' 121 868 103 867 869 122
+CONVEX 271 'GT_PK(2,2)' 121 868 103 863 860 102
+CONVEX 272 'GT_PK(2,2)' 58 870 74 871 635 57
+CONVEX 273 'GT_PK(2,2)' 58 870 74 872 636 75
+CONVEX 274 'GT_PK(2,2)' 29 873 17 874 451 30
+CONVEX 275 'GT_PK(2,2)' 60 875 45 876 649 61
+CONVEX 276 'GT_PK(2,2)' 60 877 77 878 879 76
+CONVEX 277 'GT_PK(2,2)' 60 877 77 876 880 61
+CONVEX 278 'GT_PK(2,2)' 94 881 95 882 787 113
+CONVEX 279 'GT_PK(2,2)' 94 883 93 884 644 76
+CONVEX 280 'GT_PK(2,2)' 94 885 77 884 879 76
+CONVEX 281 'GT_PK(2,2)' 94 885 77 881 886 95
+CONVEX 282 'GT_PK(2,2)' 41 887 56 888 570 40
+CONVEX 283 'GT_PK(2,2)' 41 887 56 889 567 57
+CONVEX 284 'GT_PK(2,2)' 28 890 27 891 892 15
+CONVEX 285 'GT_PK(2,2)' 28 893 29 894 895 43
+CONVEX 286 'GT_PK(2,2)' 14 896 15 897 447 5
+CONVEX 287 'GT_PK(2,2)' 14 898 27 896 892 15
+CONVEX 288 'GT_PK(2,2)' 31 899 45 900 901 30
+CONVEX 289 'GT_PK(2,2)' 31 902 46 899 647 45
+CONVEX 290 'GT_PK(2,2)' 31 903 18 900 450 30
+CONVEX 291 'GT_PK(2,2)' 31 904 19 903 518 18
+CONVEX 292 'GT_PK(2,2)' 311 905 327 906 907 328
+CONVEX 293 'GT_PK(2,2)' 311 908 294 909 689 293
+CONVEX 294 'GT_PK(2,2)' 342 910 329 911 912 328
+CONVEX 295 'GT_PK(2,2)' 342 913 327 914 654 354
+CONVEX 296 'GT_PK(2,2)' 342 913 327 911 907 328
+CONVEX 297 'GT_PK(2,2)' 237 915 217 916 657 218
+CONVEX 298 'GT_PK(2,2)' 237 917 238 918 666 257
+CONVEX 299 'GT_PK(2,2)' 237 917 238 916 919 218
+CONVEX 300 'GT_PK(2,2)' 237 920 236 915 681 217
+CONVEX 301 'GT_PK(2,2)' 237 918 257 921 488 256
+CONVEX 302 'GT_PK(2,2)' 237 920 236 921 679 256
+CONVEX 303 'GT_PK(2,2)' 199 922 218 923 659 198
+CONVEX 304 'GT_PK(2,2)' 199 924 179 923 565 198
+CONVEX 305 'GT_PK(2,2)' 199 924 179 925 926 180
+CONVEX 306 'GT_PK(2,2)' 199 927 200 925 662 180
+CONVEX 307 'GT_PK(2,2)' 219 928 239 929 930 220
+CONVEX 308 'GT_PK(2,2)' 219 931 238 928 670 239
+CONVEX 309 'GT_PK(2,2)' 219 932 200 929 664 220
+CONVEX 310 'GT_PK(2,2)' 219 931 238 933 919 218
+CONVEX 311 'GT_PK(2,2)' 219 934 199 933 922 218
+CONVEX 312 'GT_PK(2,2)' 219 934 199 932 927 200
+CONVEX 313 'GT_PK(2,2)' 312 935 329 936 912 328
+CONVEX 314 'GT_PK(2,2)' 312 937 311 936 906 328
+CONVEX 315 'GT_PK(2,2)' 312 937 311 938 908 294
+CONVEX 316 'GT_PK(2,2)' 235 939 236 940 682 216
+CONVEX 317 'GT_PK(2,2)' 235 939 236 941 678 255
+CONVEX 318 'GT_PK(2,2)' 235 942 215 940 611 216
+CONVEX 319 'GT_PK(2,2)' 235 942 215 943 834 234
+CONVEX 320 'GT_PK(2,2)' 235 944 254 943 945 234
+CONVEX 321 'GT_PK(2,2)' 235 944 254 941 946 255
+CONVEX 322 'GT_PK(2,2)' 265 947 264 948 801 283
+CONVEX 323 'GT_PK(2,2)' 265 947 264 949 594 245
+CONVEX 324 'GT_PK(2,2)' 333 950 334 951 699 346
+CONVEX 325 'GT_PK(2,2)' 333 952 345 951 701 346
+CONVEX 326 'GT_PK(2,2)' 332 953 317 954 410 331
+CONVEX 327 'GT_PK(2,2)' 332 955 318 953 956 317
+CONVEX 328 'GT_PK(2,2)' 332 957 344 954 534 331
+CONVEX 329 'GT_PK(2,2)' 332 958 333 955 959 318
+CONVEX 330 'GT_PK(2,2)' 332 958 333 960 952 345
+CONVEX 331 'GT_PK(2,2)' 332 961 355 957 962 344
+CONVEX 332 'GT_PK(2,2)' 332 960 345 961 702 355
+CONVEX 333 'GT_PK(2,2)' 335 963 334 964 698 347
+CONVEX 334 'GT_PK(2,2)' 335 965 336 966 967 321
+CONVEX 335 'GT_PK(2,2)' 322 968 323 969 718 306
+CONVEX 336 'GT_PK(2,2)' 322 968 323 970 712 337
+CONVEX 337 'GT_PK(2,2)' 322 971 336 972 967 321
+CONVEX 338 'GT_PK(2,2)' 322 971 336 970 709 337
+CONVEX 339 'GT_PK(2,2)' 250 973 270 974 975 251
+CONVEX 340 'GT_PK(2,2)' 289 976 307 977 714 290
+CONVEX 341 'GT_PK(2,2)' 289 976 307 978 717 306
+CONVEX 342 'GT_PK(2,2)' 305 979 322 980 972 321
+CONVEX 343 'GT_PK(2,2)' 305 979 322 981 969 306
+CONVEX 344 'GT_PK(2,2)' 274 982 275 983 685 255
+CONVEX 345 'GT_PK(2,2)' 274 984 254 983 946 255
+CONVEX 346 'GT_PK(2,2)' 274 982 275 985 688 293
+CONVEX 347 'GT_PK(2,2)' 274 985 293 986 987 292
+CONVEX 348 'GT_PK(2,2)' 273 988 291 989 499 292
+CONVEX 349 'GT_PK(2,2)' 273 990 272 988 719 291
+CONVEX 350 'GT_PK(2,2)' 273 991 274 989 986 292
+CONVEX 351 'GT_PK(2,2)' 273 991 274 992 984 254
+CONVEX 352 'GT_PK(2,2)' 170 993 169 994 722 150
+CONVEX 353 'GT_PK(2,2)' 170 993 169 995 996 189
+CONVEX 354 'GT_PK(2,2)' 170 997 171 998 510 190
+CONVEX 355 'GT_PK(2,2)' 170 995 189 998 697 190
+CONVEX 356 'GT_PK(2,2)' 188 999 189 1000 695 208
+CONVEX 357 'GT_PK(2,2)' 188 1001 169 999 996 189
+CONVEX 358 'GT_PK(2,2)' 188 1000 208 1002 1003 207
+CONVEX 359 'GT_PK(2,2)' 188 1004 187 1002 1005 207
+CONVEX 360 'GT_PK(2,2)' 188 1004 187 1006 579 168
+CONVEX 361 'GT_PK(2,2)' 188 1001 169 1006 723 168
+CONVEX 362 'GT_PK(2,2)' 48 1007 63 1008 734 64
+CONVEX 363 'GT_PK(2,2)' 48 1009 49 1008 1010 64
+CONVEX 364 'GT_PK(2,2)' 48 1011 33 1012 1013 47
+CONVEX 365 'GT_PK(2,2)' 48 1007 63 1012 729 47
+CONVEX 366 'GT_PK(2,2)' 48 1011 33 1014 740 34
+CONVEX 367 'GT_PK(2,2)' 48 1009 49 1014 744 34
+CONVEX 368 'GT_PK(2,2)' 20 1015 21 1016 736 11
+CONVEX 369 'GT_PK(2,2)' 20 1017 10 1016 1018 11
+CONVEX 370 'GT_PK(2,2)' 20 1019 19 1017 516 10
+CONVEX 371 'GT_PK(2,2)' 20 1015 21 1020 738 33
+CONVEX 372 'GT_PK(2,2)' 65 1021 49 1022 1010 64
+CONVEX 373 'GT_PK(2,2)' 65 1022 64 1023 512 81
+CONVEX 374 'GT_PK(2,2)' 65 1024 66 1025 853 50
+CONVEX 375 'GT_PK(2,2)' 65 1021 49 1025 745 50
+CONVEX 376 'GT_PK(2,2)' 65 1023 81 1026 617 82
+CONVEX 377 'GT_PK(2,2)' 65 1024 66 1026 850 82
+CONVEX 378 'GT_PK(2,2)' 139 1027 120 1028 1029 119
+CONVEX 379 'GT_PK(2,2)' 140 1030 139 1031 1032 159
+CONVEX 380 'GT_PK(2,2)' 140 1030 139 1033 1027 120
+CONVEX 381 'GT_PK(2,2)' 140 1034 121 1035 866 141
+CONVEX 382 'GT_PK(2,2)' 140 1034 121 1033 864 120
+CONVEX 383 'GT_PK(2,2)' 160 1036 159 1037 756 179
+CONVEX 384 'GT_PK(2,2)' 160 1038 180 1039 370 161
+CONVEX 385 'GT_PK(2,2)' 160 1037 179 1038 926 180
+CONVEX 386 'GT_PK(2,2)' 160 1040 140 1036 1031 159
+CONVEX 387 'GT_PK(2,2)' 160 1041 141 1039 390 161
+CONVEX 388 'GT_PK(2,2)' 160 1040 140 1041 1035 141
+CONVEX 389 'GT_PK(2,2)' 186 1042 187 1043 578 167
+CONVEX 390 'GT_PK(2,2)' 164 1044 144 1045 607 163
+CONVEX 391 'GT_PK(2,2)' 147 1046 127 1047 380 128
+CONVEX 392 'GT_PK(2,2)' 147 1048 148 1047 763 128
+CONVEX 393 'GT_PK(2,2)' 147 1048 148 1049 639 167
+CONVEX 394 'GT_PK(2,2)' 78 1050 95 1051 789 96
+CONVEX 395 'GT_PK(2,2)' 78 1052 77 1050 886 95
+CONVEX 396 'GT_PK(2,2)' 78 1051 96 1053 782 79
+CONVEX 397 'GT_PK(2,2)' 78 1054 62 1053 731 79
+CONVEX 398 'GT_PK(2,2)' 78 1054 62 1055 651 61
+CONVEX 399 'GT_PK(2,2)' 78 1052 77 1055 880 61
+CONVEX 400 'GT_PK(2,2)' 115 1056 116 1057 582 135
+CONVEX 401 'GT_PK(2,2)' 115 1058 114 1059 788 96
+CONVEX 402 'GT_PK(2,2)' 115 1060 97 1059 781 96
+CONVEX 403 'GT_PK(2,2)' 115 1060 97 1056 841 116
+CONVEX 404 'GT_PK(2,2)' 134 1061 133 1062 1063 153
+CONVEX 405 'GT_PK(2,2)' 134 1064 114 1061 783 133
+CONVEX 406 'GT_PK(2,2)' 134 1065 115 1064 1058 114
+CONVEX 407 'GT_PK(2,2)' 134 1065 115 1066 1057 135
+CONVEX 408 'GT_PK(2,2)' 134 1067 154 1066 589 135
+CONVEX 409 'GT_PK(2,2)' 134 1067 154 1062 585 153
+CONVEX 410 'GT_PK(2,2)' 151 1068 132 1069 1070 131
+CONVEX 411 'GT_PK(2,2)' 151 1069 131 1071 445 150
+CONVEX 412 'GT_PK(2,2)' 151 1072 170 1071 994 150
+CONVEX 413 'GT_PK(2,2)' 151 1072 170 1073 997 171
+CONVEX 414 'GT_PK(2,2)' 152 1074 172 1075 592 171
+CONVEX 415 'GT_PK(2,2)' 152 1076 151 1075 1073 171
+CONVEX 416 'GT_PK(2,2)' 152 1076 151 1077 1068 132
+CONVEX 417 'GT_PK(2,2)' 152 1077 132 1078 790 133
+CONVEX 418 'GT_PK(2,2)' 152 1078 133 1079 1063 153
+CONVEX 419 'GT_PK(2,2)' 152 1074 172 1079 590 153
+CONVEX 420 'GT_PK(2,2)' 242 1080 222 1081 1082 223
+CONVEX 421 'GT_PK(2,2)' 242 1083 261 1084 1085 262
+CONVEX 422 'GT_PK(2,2)' 242 1086 243 1081 1087 223
+CONVEX 423 'GT_PK(2,2)' 242 1086 243 1084 810 262
+CONVEX 424 'GT_PK(2,2)' 280 1088 261 1089 805 279
+CONVEX 425 'GT_PK(2,2)' 280 1090 298 1091 597 297
+CONVEX 426 'GT_PK(2,2)' 280 1089 279 1091 1092 297
+CONVEX 427 'GT_PK(2,2)' 280 1090 298 1093 602 281
+CONVEX 428 'GT_PK(2,2)' 280 1094 262 1093 796 281
+CONVEX 429 'GT_PK(2,2)' 280 1088 261 1094 1085 262
+CONVEX 430 'GT_PK(2,2)' 176 1095 156 1096 819 175
+CONVEX 431 'GT_PK(2,2)' 176 1097 195 1098 614 196
+CONVEX 432 'GT_PK(2,2)' 176 1096 175 1097 1099 195
+CONVEX 433 'GT_PK(2,2)' 252 1100 232 1101 1102 251
+CONVEX 434 'GT_PK(2,2)' 231 1103 232 1104 1102 251
+CONVEX 435 'GT_PK(2,2)' 231 1105 250 1104 974 251
+CONVEX 436 'GT_PK(2,2)' 212 1106 232 1107 1108 213
+CONVEX 437 'GT_PK(2,2)' 212 1109 192 1110 823 211
+CONVEX 438 'GT_PK(2,2)' 212 1111 231 1110 1112 211
+CONVEX 439 'GT_PK(2,2)' 212 1111 231 1106 1103 232
+CONVEX 440 'GT_PK(2,2)' 193 1113 174 1114 828 173
+CONVEX 441 'GT_PK(2,2)' 193 1115 212 1116 1107 213
+CONVEX 442 'GT_PK(2,2)' 193 1117 192 1114 826 173
+CONVEX 443 'GT_PK(2,2)' 193 1115 212 1117 1109 192
+CONVEX 444 'GT_PK(2,2)' 194 1118 214 1119 832 195
+CONVEX 445 'GT_PK(2,2)' 194 1120 175 1119 1099 195
+CONVEX 446 'GT_PK(2,2)' 194 1121 174 1120 830 175
+CONVEX 447 'GT_PK(2,2)' 194 1118 214 1122 1123 213
+CONVEX 448 'GT_PK(2,2)' 194 1124 193 1122 1116 213
+CONVEX 449 'GT_PK(2,2)' 194 1124 193 1121 1113 174
+CONVEX 450 'GT_PK(2,2)' 101 1125 102 1126 865 120
+CONVEX 451 'GT_PK(2,2)' 101 1126 120 1127 1029 119
+CONVEX 452 'GT_PK(2,2)' 101 1128 100 1127 627 119
+CONVEX 453 'GT_PK(2,2)' 101 1129 83 1128 848 100
+CONVEX 454 'GT_PK(2,2)' 59 1130 58 1131 872 75
+CONVEX 455 'GT_PK(2,2)' 59 1130 58 1132 1133 43
+CONVEX 456 'GT_PK(2,2)' 59 1131 75 1134 645 76
+CONVEX 457 'GT_PK(2,2)' 59 1135 60 1134 878 76
+CONVEX 458 'GT_PK(2,2)' 16 1136 29 1137 873 17
+CONVEX 459 'GT_PK(2,2)' 16 1138 15 1139 446 6
+CONVEX 460 'GT_PK(2,2)' 16 1140 28 1138 891 15
+CONVEX 461 'GT_PK(2,2)' 16 1140 28 1136 893 29
+CONVEX 462 'GT_PK(2,2)' 16 1137 17 1141 392 7
+CONVEX 463 'GT_PK(2,2)' 16 1139 6 1141 1142 7
+CONVEX 464 'GT_PK(2,2)' 44 1143 60 1144 875 45
+CONVEX 465 'GT_PK(2,2)' 44 1145 29 1146 895 43
+CONVEX 466 'GT_PK(2,2)' 44 1147 59 1146 1132 43
+CONVEX 467 'GT_PK(2,2)' 44 1147 59 1143 1135 60
+CONVEX 468 'GT_PK(2,2)' 44 1144 45 1148 901 30
+CONVEX 469 'GT_PK(2,2)' 44 1145 29 1148 874 30
+CONVEX 470 'GT_PK(2,2)' 112 1149 94 1150 882 113
+CONVEX 471 'GT_PK(2,2)' 112 1151 132 1150 791 113
+CONVEX 472 'GT_PK(2,2)' 112 1151 132 1152 1070 131
+CONVEX 473 'GT_PK(2,2)' 112 1149 94 1153 883 93
+CONVEX 474 'GT_PK(2,2)' 112 1154 111 1152 767 131
+CONVEX 475 'GT_PK(2,2)' 112 1154 111 1153 772 93
+CONVEX 476 'GT_PK(2,2)' 26 1155 41 1156 1157 27
+CONVEX 477 'GT_PK(2,2)' 26 1158 14 1159 1160 13
+CONVEX 478 'GT_PK(2,2)' 26 1158 14 1156 898 27
+CONVEX 479 'GT_PK(2,2)' 26 1155 41 1161 888 40
+CONVEX 480 'GT_PK(2,2)' 26 1162 25 1161 404 40
+CONVEX 481 'GT_PK(2,2)' 26 1159 13 1162 1163 25
+CONVEX 482 'GT_PK(2,2)' 42 1164 41 1165 1157 27
+CONVEX 483 'GT_PK(2,2)' 42 1166 28 1165 890 27
+CONVEX 484 'GT_PK(2,2)' 42 1164 41 1167 889 57
+CONVEX 485 'GT_PK(2,2)' 42 1168 58 1167 871 57
+CONVEX 486 'GT_PK(2,2)' 42 1168 58 1169 1133 43
+CONVEX 487 'GT_PK(2,2)' 42 1166 28 1169 894 43
+CONVEX 488 'GT_PK(2,2)' 310 1170 327 1171 656 326
+CONVEX 489 'GT_PK(2,2)' 310 1172 311 1170 905 327
+CONVEX 490 'GT_PK(2,2)' 310 1173 309 1171 396 326
+CONVEX 491 'GT_PK(2,2)' 310 1173 309 1174 500 292
+CONVEX 492 'GT_PK(2,2)' 310 1175 293 1174 987 292
+CONVEX 493 'GT_PK(2,2)' 310 1172 311 1175 909 293
+CONVEX 494 'GT_PK(2,2)' 313 1176 312 1177 935 329
+CONVEX 495 'GT_PK(2,2)' 295 1178 277 1179 676 296
+CONVEX 496 'GT_PK(2,2)' 295 1180 313 1179 1181 296
+CONVEX 497 'GT_PK(2,2)' 295 1180 313 1182 1176 312
+CONVEX 498 'GT_PK(2,2)' 295 1182 312 1183 938 294
+CONVEX 499 'GT_PK(2,2)' 295 1183 294 1184 687 276
+CONVEX 500 'GT_PK(2,2)' 295 1178 277 1184 674 276
+CONVEX 501 'GT_PK(2,2)' 284 1185 265 1186 948 283
+CONVEX 502 'GT_PK(2,2)' 284 1185 265 1187 1188 266
+CONVEX 503 'GT_PK(2,2)' 319 1189 333 1190 950 334
+CONVEX 504 'GT_PK(2,2)' 319 1191 302 1192 1193 318
+CONVEX 505 'GT_PK(2,2)' 319 1189 333 1192 959 318
+CONVEX 506 'GT_PK(2,2)' 227 1194 208 1195 1003 207
+CONVEX 507 'GT_PK(2,2)' 227 1196 226 1195 1197 207
+CONVEX 508 'GT_PK(2,2)' 246 1198 265 1199 1188 266
+CONVEX 509 'GT_PK(2,2)' 246 1200 247 1199 1201 266
+CONVEX 510 'GT_PK(2,2)' 246 1198 265 1202 949 245
+CONVEX 511 'GT_PK(2,2)' 246 1203 227 1200 1204 247
+CONVEX 512 'GT_PK(2,2)' 246 1205 226 1202 1206 245
+CONVEX 513 'GT_PK(2,2)' 246 1203 227 1205 1196 226
+CONVEX 514 'GT_PK(2,2)' 348 1207 335 1208 964 347
+CONVEX 515 'GT_PK(2,2)' 348 1209 358 1210 371 359
+CONVEX 516 'GT_PK(2,2)' 348 1208 347 1209 489 358
+CONVEX 517 'GT_PK(2,2)' 348 1207 335 1211 965 336
+CONVEX 518 'GT_PK(2,2)' 348 1212 349 1210 707 359
+CONVEX 519 'GT_PK(2,2)' 348 1212 349 1211 708 336
+CONVEX 520 'GT_PK(2,2)' 230 1213 211 1214 433 210
+CONVEX 521 'GT_PK(2,2)' 230 1215 229 1214 692 210
+CONVEX 522 'GT_PK(2,2)' 230 1216 231 1213 1112 211
+CONVEX 523 'GT_PK(2,2)' 230 1216 231 1217 1105 250
+CONVEX 524 'GT_PK(2,2)' 271 1218 289 1219 1220 270
+CONVEX 525 'GT_PK(2,2)' 271 1219 270 1221 975 251
+CONVEX 526 'GT_PK(2,2)' 271 1222 272 1223 720 290
+CONVEX 527 'GT_PK(2,2)' 271 1218 289 1223 977 290
+CONVEX 528 'GT_PK(2,2)' 271 1224 252 1221 1101 251
+CONVEX 529 'GT_PK(2,2)' 271 1224 252 1222 1225 272
+CONVEX 530 'GT_PK(2,2)' 288 1226 289 1227 1220 270
+CONVEX 531 'GT_PK(2,2)' 288 1226 289 1228 978 306
+CONVEX 532 'GT_PK(2,2)' 288 1229 305 1228 981 306
+CONVEX 533 'GT_PK(2,2)' 32 1230 20 1231 1020 33
+CONVEX 534 'GT_PK(2,2)' 32 1232 31 1233 902 46
+CONVEX 535 'GT_PK(2,2)' 32 1232 31 1234 904 19
+CONVEX 536 'GT_PK(2,2)' 32 1230 20 1234 1019 19
+CONVEX 537 'GT_PK(2,2)' 32 1231 33 1235 1013 47
+CONVEX 538 'GT_PK(2,2)' 32 1233 46 1235 652 47
+CONVEX 539 'GT_PK(2,2)' 206 1236 187 1237 1005 207
+CONVEX 540 'GT_PK(2,2)' 206 1238 186 1236 1042 187
+CONVEX 541 'GT_PK(2,2)' 206 1239 226 1237 1197 207
+CONVEX 542 'GT_PK(2,2)' 184 1240 204 1241 1242 185
+CONVEX 543 'GT_PK(2,2)' 145 1243 164 1244 1044 144
+CONVEX 544 'GT_PK(2,2)' 145 1245 126 1246 553 125
+CONVEX 545 'GT_PK(2,2)' 145 1244 144 1246 610 125
+CONVEX 546 'GT_PK(2,2)' 183 1247 163 1248 430 182
+CONVEX 547 'GT_PK(2,2)' 183 1249 164 1247 1045 163
+CONVEX 548 'GT_PK(2,2)' 183 1250 184 1249 1251 164
+CONVEX 549 'GT_PK(2,2)' 183 1252 202 1248 605 182
+CONVEX 550 'GT_PK(2,2)' 241 1253 240 1254 815 222
+CONVEX 551 'GT_PK(2,2)' 241 1255 242 1254 1080 222
+CONVEX 552 'GT_PK(2,2)' 241 1255 242 1256 1083 261
+CONVEX 553 'GT_PK(2,2)' 241 1253 240 1257 1258 260
+CONVEX 554 'GT_PK(2,2)' 241 1256 261 1257 806 260
+CONVEX 555 'GT_PK(2,2)' 177 1259 197 1260 505 196
+CONVEX 556 'GT_PK(2,2)' 177 1261 176 1260 1098 196
+CONVEX 557 'GT_PK(2,2)' 177 1259 197 1262 507 178
+CONVEX 558 'GT_PK(2,2)' 233 1263 252 1264 1100 232
+CONVEX 559 'GT_PK(2,2)' 233 1264 232 1265 1108 213
+CONVEX 560 'GT_PK(2,2)' 233 1266 214 1267 833 234
+CONVEX 561 'GT_PK(2,2)' 233 1266 214 1265 1123 213
+CONVEX 562 'GT_PK(2,2)' 253 1268 273 1269 990 272
+CONVEX 563 'GT_PK(2,2)' 253 1270 252 1269 1225 272
+CONVEX 564 'GT_PK(2,2)' 253 1268 273 1271 992 254
+CONVEX 565 'GT_PK(2,2)' 253 1272 233 1270 1263 252
+CONVEX 566 'GT_PK(2,2)' 253 1271 254 1273 945 234
+CONVEX 567 'GT_PK(2,2)' 253 1272 233 1273 1267 234
+CONVEX 568 'GT_PK(2,2)' 84 1274 101 1275 1125 102
+CONVEX 569 'GT_PK(2,2)' 84 1276 68 1277 844 67
+CONVEX 570 'GT_PK(2,2)' 84 1278 83 1277 846 67
+CONVEX 571 'GT_PK(2,2)' 84 1274 101 1278 1129 83
+CONVEX 572 'GT_PK(2,2)' 84 1276 68 1279 1280 85
+CONVEX 573 'GT_PK(2,2)' 84 1275 102 1279 862 85
+CONVEX 574 'GT_PK(2,2)' 301 1281 284 1282 1186 283
+CONVEX 575 'GT_PK(2,2)' 301 1281 284 1283 1284 302
+CONVEX 576 'GT_PK(2,2)' 301 1285 300 1282 804 283
+CONVEX 577 'GT_PK(2,2)' 301 1285 300 1286 538 317
+CONVEX 578 'GT_PK(2,2)' 301 1287 318 1286 956 317
+CONVEX 579 'GT_PK(2,2)' 301 1283 302 1287 1193 318
+CONVEX 580 'GT_PK(2,2)' 320 1288 335 1289 966 321
+CONVEX 581 'GT_PK(2,2)' 320 1288 335 1290 963 334
+CONVEX 582 'GT_PK(2,2)' 320 1291 319 1290 1190 334
+CONVEX 583 'GT_PK(2,2)' 228 1292 227 1293 1204 247
+CONVEX 584 'GT_PK(2,2)' 228 1294 209 1295 690 229
+CONVEX 585 'GT_PK(2,2)' 228 1294 209 1296 694 208
+CONVEX 586 'GT_PK(2,2)' 228 1292 227 1296 1194 208
+CONVEX 587 'GT_PK(2,2)' 269 1297 250 1298 973 270
+CONVEX 588 'GT_PK(2,2)' 269 1299 288 1298 1227 270
+CONVEX 589 'GT_PK(2,2)' 225 1300 206 1301 1239 226
+CONVEX 590 'GT_PK(2,2)' 225 1302 245 1303 596 244
+CONVEX 591 'GT_PK(2,2)' 225 1301 226 1302 1206 245
+CONVEX 592 'GT_PK(2,2)' 166 1304 147 1305 1049 167
+CONVEX 593 'GT_PK(2,2)' 166 1306 186 1305 1043 167
+CONVEX 594 'GT_PK(2,2)' 166 1306 186 1307 1308 185
+CONVEX 595 'GT_PK(2,2)' 203 1309 184 1310 1240 204
+CONVEX 596 'GT_PK(2,2)' 203 1311 183 1309 1250 184
+CONVEX 597 'GT_PK(2,2)' 203 1310 204 1312 1313 223
+CONVEX 598 'GT_PK(2,2)' 203 1311 183 1314 1252 202
+CONVEX 599 'GT_PK(2,2)' 203 1315 222 1312 1082 223
+CONVEX 600 'GT_PK(2,2)' 203 1314 202 1315 816 222
+CONVEX 601 'GT_PK(2,2)' 138 1316 137 1317 633 118
+CONVEX 602 'GT_PK(2,2)' 138 1317 118 1318 628 119
+CONVEX 603 'GT_PK(2,2)' 138 1319 139 1318 1028 119
+CONVEX 604 'GT_PK(2,2)' 157 1320 176 1321 1095 156
+CONVEX 605 'GT_PK(2,2)' 157 1322 177 1320 1261 176
+CONVEX 606 'GT_PK(2,2)' 157 1321 156 1323 821 137
+CONVEX 607 'GT_PK(2,2)' 157 1324 138 1323 1316 137
+CONVEX 608 'GT_PK(2,2)' 249 1325 269 1326 1297 250
+CONVEX 609 'GT_PK(2,2)' 249 1327 230 1328 1215 229
+CONVEX 610 'GT_PK(2,2)' 249 1327 230 1326 1217 250
+CONVEX 611 'GT_PK(2,2)' 287 1329 288 1330 1229 305
+CONVEX 612 'GT_PK(2,2)' 287 1331 269 1329 1299 288
+CONVEX 613 'GT_PK(2,2)' 224 1332 243 1333 1087 223
+CONVEX 614 'GT_PK(2,2)' 224 1334 204 1333 1313 223
+CONVEX 615 'GT_PK(2,2)' 224 1332 243 1335 809 244
+CONVEX 616 'GT_PK(2,2)' 224 1336 225 1335 1303 244
+CONVEX 617 'GT_PK(2,2)' 205 1337 206 1338 1238 186
+CONVEX 618 'GT_PK(2,2)' 205 1339 225 1337 1300 206
+CONVEX 619 'GT_PK(2,2)' 205 1338 186 1340 1308 185
+CONVEX 620 'GT_PK(2,2)' 205 1341 224 1339 1336 225
+CONVEX 621 'GT_PK(2,2)' 205 1342 204 1340 1242 185
+CONVEX 622 'GT_PK(2,2)' 205 1341 224 1342 1334 204
+CONVEX 623 'GT_PK(2,2)' 146 1343 166 1344 1304 147
+CONVEX 624 'GT_PK(2,2)' 146 1344 147 1345 1046 127
+CONVEX 625 'GT_PK(2,2)' 146 1346 126 1345 423 127
+CONVEX 626 'GT_PK(2,2)' 146 1347 145 1346 1245 126
+CONVEX 627 'GT_PK(2,2)' 165 1348 184 1349 1251 164
+CONVEX 628 'GT_PK(2,2)' 165 1350 145 1349 1243 164
+CONVEX 629 'GT_PK(2,2)' 165 1348 184 1351 1241 185
+CONVEX 630 'GT_PK(2,2)' 165 1352 166 1351 1307 185
+CONVEX 631 'GT_PK(2,2)' 165 1353 146 1350 1347 145
+CONVEX 632 'GT_PK(2,2)' 165 1353 146 1352 1343 166
+CONVEX 633 'GT_PK(2,2)' 158 1354 157 1355 1322 177
+CONVEX 634 'GT_PK(2,2)' 158 1356 159 1357 757 178
+CONVEX 635 'GT_PK(2,2)' 158 1355 177 1357 1262 178
+CONVEX 636 'GT_PK(2,2)' 158 1354 157 1358 1324 138
+CONVEX 637 'GT_PK(2,2)' 158 1359 139 1356 1032 159
+CONVEX 638 'GT_PK(2,2)' 158 1358 138 1359 1319 139
+CONVEX 639 'GT_PK(2,2)' 267 1360 247 1361 1201 266
+CONVEX 640 'GT_PK(2,2)' 248 1362 249 1363 1328 229
+CONVEX 641 'GT_PK(2,2)' 248 1364 267 1365 1360 247
+CONVEX 642 'GT_PK(2,2)' 248 1366 228 1363 1295 229
+CONVEX 643 'GT_PK(2,2)' 248 1366 228 1365 1293 247
+CONVEX 644 'GT_PK(2,2)' 268 1367 287 1368 1331 269
+CONVEX 645 'GT_PK(2,2)' 268 1369 248 1370 1364 267
+CONVEX 646 'GT_PK(2,2)' 268 1371 249 1368 1325 269
+CONVEX 647 'GT_PK(2,2)' 268 1369 248 1371 1362 249
+CONVEX 648 'GT_PK(2,2)' 303 1372 319 1373 1191 302
+CONVEX 649 'GT_PK(2,2)' 303 1374 320 1372 1291 319
+CONVEX 650 'GT_PK(2,2)' 286 1375 268 1376 1367 287
+CONVEX 651 'GT_PK(2,2)' 286 1375 268 1377 1370 267
+CONVEX 652 'GT_PK(2,2)' 304 1378 287 1379 1330 305
+CONVEX 653 'GT_PK(2,2)' 304 1380 303 1381 1374 320
+CONVEX 654 'GT_PK(2,2)' 304 1382 286 1378 1376 287
+CONVEX 655 'GT_PK(2,2)' 304 1382 286 1380 1383 303
+CONVEX 656 'GT_PK(2,2)' 304 1379 305 1384 980 321
+CONVEX 657 'GT_PK(2,2)' 304 1381 320 1384 1289 321
+CONVEX 658 'GT_PK(2,2)' 285 1385 286 1386 1383 303
+CONVEX 659 'GT_PK(2,2)' 285 1387 284 1388 1284 302
+CONVEX 660 'GT_PK(2,2)' 285 1386 303 1388 1373 302
+CONVEX 661 'GT_PK(2,2)' 285 1385 286 1389 1377 267
+CONVEX 662 'GT_PK(2,2)' 285 1387 284 1390 1187 266
+CONVEX 663 'GT_PK(2,2)' 285 1389 267 1390 1361 266
END MESH STRUCTURE DESCRIPTION
diff --git a/interface/src/scilab/demos/demo_bilaplacian.sce b/interface/src/scilab/demos/demo_bilaplacian.sce
index 6c0601d..8503e45 100644
--- a/interface/src/scilab/demos/demo_bilaplacian.sce
+++ b/interface/src/scilab/demos/demo_bilaplacian.sce
@@ -1,18 +1,28 @@
lines(0);
stacksize('max');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
printf("demo bilaplacian started\n");
N = 2;
NX = 10;
-NY = 10;
+NY = 14;
+
+m=gf_mesh('regular simplices',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+// m=gf_mesh('cartesian',0:1/NX:1, 0:1/NY:1);
+// m=gf_mesh('cartesian',0:0.4/NX:0.4, 0:1.2/NY:1.2);
-//m = gf_mesh('regular simplices',0:1/NX:1, 0:1/NY:1);
-m = gf_mesh('cartesian',0:1/NX:1, 0:1/NY:1);
-useKL = 0; // use the Kirchhoff-Love plate model, or just a pure
+useKL = 1; // use the Kirchhoff-Love plate model, or just a pure
// bilaplacian problem
D = 1.0; // Flexion modulus
@@ -24,13 +34,13 @@ mim = gf_mesh_im(m);
mfu = gf_mesh_fem(m);
mfd = gf_mesh_fem(m);
-//gf_mesh_im_set(mim, 'integ',gf_integ('IM_TRIANGLE(13)'));
-//gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_ARGYRIS'));
-//gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_PK(2,5)'));
+gf_mesh_im_set(mim, 'integ',gf_integ('IM_TRIANGLE(13)'));
+gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_ARGYRIS'));
+gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_PK(2,5)'));
-gf_mesh_im_set(mim, 'integ',gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
-gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_REDUCED_QUADC1_COMPOSITE'));
-gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_QK(2,3)'));
+//gf_mesh_im_set(mim, 'integ',gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
+//gf_mesh_fem_set(mfu, 'fem',gf_fem('FEM_REDUCED_QUADC1_COMPOSITE'));
+//gf_mesh_fem_set(mfd, 'fem',gf_fem('FEM_QK(2,3)'));
flst = gf_mesh_get(m, 'outer_faces');
n = gf_mesh_get(m, 'normal of faces', flst);
@@ -46,13 +56,13 @@ SIMPLE_SUPPORT_BOUNDARY = 3;
CLAMPED_BOUNDARY = 4;
gf_mesh_set(m, 'region', FORCE_BOUNDARY, fright);
-gf_mesh_set(m, 'region', SIMPLE_SUPPORT_BOUNDARY, [ftop fbottom fleft]);
-gf_mesh_set(m, 'region', CLAMPED_BOUNDARY, [fleft fright]);
+gf_mesh_set(m, 'region', SIMPLE_SUPPORT_BOUNDARY, [fleft ftop fbottom]);
+gf_mesh_set(m, 'region', CLAMPED_BOUNDARY, [fleft ftop fbottom]);
gf_mesh_set(m, 'region', MOMENTUM_BOUNDARY, [ftop fbottom]);
-FT = 10.;
+FT = 2.;
sol_u = gf_mesh_fem_get_eval(mfd,list(list(sprintf('sin(%g*(x+y))',FT))));
-sol_f = sol_u*FT*FT*FT*FT*N*N;
+sol_f = sol_u*FT*FT*FT*FT*N*N*D;
sol_lapl_u = -FT*FT*sol_u*N;
if (newbricks) then // uses new bricks
@@ -61,7 +71,7 @@ if (newbricks) then // uses new bricks
if useKL
gf_model_set(md, 'add initialized data', 'D', [D]);
- gf_model_set(md, 'add initialized data', 'nu', [nu]);
+ gf_model_set(md, 'add initialized data', 'nu', [NU]);
gf_model_set(md, 'add Kirchhoff-Love plate brick', mim, 'u', 'D', 'nu');
M = zeros(N,N, gf_mesh_fem_get(mfd,'nbdof'));
else
@@ -84,7 +94,7 @@ if (newbricks) then // uses new bricks
gf_model_set(md, 'add initialized fem data', 'H', mfd, H);
gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
gf_model_set(md, 'add Kirchhoff-Love Neumann term brick', mim, 'u', ...
- H, F, FORCE_BOUNDARY);
+ 'H', 'F', FORCE_BOUNDARY);
else
F = zeros(1, N, gf_mesh_fem_get(mfd, 'nbdof'));
gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
@@ -108,7 +118,7 @@ else // uses old bricks
b0 = gf_mdbrick('bilaplacian', mim, mfu, 'Kirchhoff-Love')
gf_mdbrick_set(b0, 'param','D', D);
gf_mdbrick_set(b0, 'param','nu', NU);
- M = zeros(N,N, gf_mesh_fem_get(mfd,'nbdof'));
+ M = zeros(1, gf_mesh_fem_get(mfd,'nbdof'));
else
b0 = gf_mdbrick('bilaplacian', mim, mfu);
gf_mdbrick_set(b0, 'param','D', D);
@@ -122,7 +132,7 @@ else // uses old bricks
gf_mdbrick_set(b2, 'param', 'source_term', mfd,M);
if (useKL) then
- H = zeros(N, N, gf_mesh_fem_get(mfd, 'nbdof'));
+ H = zeros(N*N, gf_mesh_fem_get(mfd, 'nbdof'));
F = zeros(N, gf_mesh_fem_get(mfd, 'nbdof'));
b3 = gf_mdbrick('neumann Kirchhoff-Love source term',b2,FORCE_BOUNDARY);
gf_mdbrick_set(b3, 'param', 'M', mfd, H);
diff --git a/interface/src/scilab/demos/demo_continuation.sce b/interface/src/scilab/demos/demo_continuation.sce
new file mode 100644
index 0000000..ac52b13
--- /dev/null
+++ b/interface/src/scilab/demos/demo_continuation.sce
@@ -0,0 +1,151 @@
+// Scilab GetFEM++ interface
+// Copyright (C) 2011-2011 Tomas Ligursky, Yves Renard.
+//
+// This file is a part of GetFEM++
+//
+// GetFEM++ is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 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 Lesser General Public
+// License for more details.
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// Simple example of the bifurcation problem: -Delta(u) + u = lambda exp(u)
+//
+// This program is used to check that scilab-getfem is working. This is also
+// a good example of use of GetFEM++.
+//
+
+lines(0);
+stacksize('max');
+
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
+gf_workspace('clear all');
+lambda = 0;
+direction = 1;
+nbstep = 80;
+
+maxit = 5;
+thrit = 4;
+minang = 0.993;
+maxres_solve = 1.e-7;
+noisy = 'very_noisy';
+
+h_init = 1e-3;
+h_max = 2e-1;
+h_min = 1e-5;
+
+// create a simple cartesian mesh
+m = gf_mesh('cartesian', [0:.1:1]);
+
+// create a mesh_fem for a field of dimension 1 (i.e. a scalar field)
+mf = gf_mesh_fem(m, 1);
+// assign the Q1 fem to all convexes of the mesh_fem,
+gf_mesh_fem_set(mf, 'classical fem', 1);
+
+// integration which will be used
+mim = gf_mesh_im(m, 4);
+
+// define the model
+md = gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mf);
+gf_model_set(md, 'add Laplacian brick', mim, 'u');
+gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add basic nonlinear brick', mim, 'u', 'u-lambda*exp(u)', '1-lambda*exp(u)', 'lambda');
+
+// initialise the continuation
+scfac = 1 / gf_mesh_fem_get(mf, 'nbdof');
+S = gf_cont_struct(md, 'lambda', scfac, 'max_iter', maxit, 'thr_iter', thrit, 'min_ang', minang, 'h_init', h_init, 'h_max', h_max, 'h_min', h_min, noisy);
+
+// compute an initial point
+if (~isempty(noisy)) then
+ printf('computing an initial point\n');
+end
+gf_model_get(md, 'solve', noisy, 'max_iter', 100, 'max_res', maxres_solve);
+[T_U, T_lambda, h] = gf_cont_struct_get(S, 'init Moore-Penrose continuation', direction);
+
+U = gf_model_get(md, 'variable', 'u');
+tau = gf_cont_struct_get(S, 'test function');
+//printf('U = '); disp(U); printf('lambda = %e\n', lambda);
+//printf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1)));
+
+U_hist = zeros(1, nbstep + 1); lambda_hist = zeros(1, nbstep + 1);
+U_hist(1) = U(1); lambda_hist(1) = lambda;
+
+scf(0); drawlater; clf();
+subplot(2,1,1);
+plot(lambda_hist(1), U_hist(1), 'k.');
+xtitle('', 'lambda', 'u(0)');
+subplot(2,1,2)
+gf_plot_1D(mf, U, 'style', 'k.-');
+xtitle('', 'x', 'u');
+drawnow;
+
+scf(1); drawlater; clf();
+plot(0, tau, 'k.');
+xtitle('', 'iteration', 'tau');
+drawnow;
+
+// continue from the initial point
+for step = 1:nbstep
+ //sleep(1000);
+ printf('\nbeginning of step %d\n', step);
+ [T_U, T_lambda, h] = gf_cont_struct_get(S, 'Moore-Penrose continuation', T_U, T_lambda, h);
+ if (h == 0) then
+ printf('Continuation has failed');
+ break;
+ end
+
+ U = gf_model_get(md, 'variable', 'u');
+ lambda = gf_model_get(md, 'variable', 'lambda');
+ tau = gf_cont_struct_get(S, 'test function');
+ U_hist(step+1) = U(1); lambda_hist(step+1) = lambda;
+// printf('U = '); disp(U); printf('lambda = %e\n', lambda);
+// printf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1)));
+
+
+ scf(0); drawlater; clf();
+ subplot(2,1,1);
+ plot(lambda_hist(1:step+1), U_hist(1:step+1), 'k-');
+ plot(lambda_hist(1:step), U_hist(1:step), 'ko');
+ plot(lambda_hist(step+1), U_hist(step+1), 'k.');
+ xtitle('', 'lambda', 'u(0)');
+ subplot(2,1,2)
+ gf_plot_1D(mf, U, 'style', 'k.-');
+ xtitle('', 'x', 'u');
+ drawnow;
+
+ scf(1); drawlater;
+ plot(step, tau, 'k.');
+ drawnow;
+
+ // calculate the determinant of the augmented Jacobian directly
+// lambda = lambda + 1e-8; gf_model_set(md, 'variable', 'lambda', [lambda]);
+// gf_model_get(md, 'assembly', 'build_rhs');
+// F1 = gf_model_get(md, 'rhs');
+// lambda = lambda - 1e-8; gf_model_set(md, 'variable', 'lambda', [lambda]);
+// gf_model_get(md, 'assembly', 'build_all');
+// F0 = gf_model_get(md, 'rhs');
+// J(1:11,1:11) = gf_model_get(md, 'tangent_matrix');
+// J(1:11,12) = ((1 / 1e-8) * (F0 - F1))';
+// J(12,1:11) = T_U; J(12,12) = T_lambda; detJ = det(J);
+// printf('J = '); disp(J); printf('det(J) = %e\n', detJ);
+// scf(2); drawlater;
+// plot(step, detJ, 'k.');
+// xtitle('', 'iteration', 'tau');
+// drawnow;
+
+ printf('end of step n° %d', step); printf(' / %d\n', nbstep);
+end
\ No newline at end of file
diff --git a/interface/src/scilab/demos/demo_convection_rotating_cavity.sce b/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
index 673ce73..9375955 100644
--- a/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
+++ b/interface/src/scilab/demos/demo_convection_rotating_cavity.sce
@@ -20,6 +20,14 @@
// The transport equation into the unit square (rotating cavity)
//
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
K0 = 2; // degree for u
diff --git a/interface/src/scilab/demos/demo_crack.sce b/interface/src/scilab/demos/demo_crack.sce
index c151ba3..ccf1c66 100644
--- a/interface/src/scilab/demos/demo_crack.sce
+++ b/interface/src/scilab/demos/demo_crack.sce
@@ -19,6 +19,15 @@
// A good example of use of GetFEM++.
lines(0);
+
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
path = get_absolute_file_path('demo_crack.sce');
diff --git a/interface/src/scilab/demos/demo_fictitious_domains.sce b/interface/src/scilab/demos/demo_fictitious_domains.sce
index c74220d..95e6f1d 100644
--- a/interface/src/scilab/demos/demo_fictitious_domains.sce
+++ b/interface/src/scilab/demos/demo_fictitious_domains.sce
@@ -8,6 +8,14 @@ printf('demo fictitious domains started\n');
disp('This demo use levelset to impose (weakly) a Dirichlet condition on an');
disp('implicit boundary defined by the zero of the levelset');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
NX = 40;
diff --git a/interface/src/scilab/demos/demo_finallaplacian.sce b/interface/src/scilab/demos/demo_finallaplacian.sce
index e7b45e3..9f3f668 100644
--- a/interface/src/scilab/demos/demo_finallaplacian.sce
+++ b/interface/src/scilab/demos/demo_finallaplacian.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_finallaplacian.sce');
printf('demo finallaplacian started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
// boundary names
up = 101; // m.region(101)
down = 102; // m.region(102)
diff --git a/interface/src/scilab/demos/demo_laplacian.sce b/interface/src/scilab/demos/demo_laplacian.sce
index 3b8196b..5ac8383 100644
--- a/interface/src/scilab/demos/demo_laplacian.sce
+++ b/interface/src/scilab/demos/demo_laplacian.sce
@@ -7,6 +7,14 @@ printf('demo laplacian started\n');
// trace on;
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/src/scilab/demos/demo_laplacian1D.sce b/interface/src/scilab/demos/demo_laplacian1D.sce
index 2ff06ac..5e84f32 100644
--- a/interface/src/scilab/demos/demo_laplacian1D.sce
+++ b/interface/src/scilab/demos/demo_laplacian1D.sce
@@ -3,6 +3,14 @@ path = get_absolute_file_path('demo_laplacian1D.sce');
printf('demo laplacian1D started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
// clears every getfem object
gf_workspace('clear all');
diff --git a/interface/src/scilab/demos/demo_mesh_generation.sce b/interface/src/scilab/demos/demo_mesh_generation.sce
new file mode 100644
index 0000000..8de0ece
--- /dev/null
+++ b/interface/src/scilab/demos/demo_mesh_generation.sce
@@ -0,0 +1,84 @@
+// Scilab GetFEM++ interface
+//
+// Copyright (C) 2011-2011 Yves Renard, Yann Collette.
+//
+// This file is a part of GetFEM++
+//
+// GetFEM++ is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 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 Lesser General Public
+// License for more details.
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// Mesh generation with the experimental meshing procedure of Getfem which
+// uses simple primitives to describe the mesh geometry.
+//
+// This program is used to check that matlab-getfem is working. This is also
+// a good example of use of GetFEM++.
+//
+
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
+gf_workspace('clear all'); clear all;
+
+N = 3; // dimension of the mesh
+K = 2; // degree of the mesh (for curved boundaries)
+if (N == 1) then
+ mo = gf_mesher_object('ball', [0], 2);
+ fixed_vertices = [0];
+ h = 0.5;
+elseif (N == 2) then
+ mo = gf_mesher_object('ball', [0 4], 2);
+ fixed_vertices = [0; 4];
+ h = 0.5;
+elseif (N == 3) then
+ if (0) then
+ mo1 = gf_mesher_object('ball', [0 0 1], 2);
+ mo2 = gf_mesher_object('ball', [0 0 -1], 2);
+ mo3 = gf_mesher_object('intersect', mo1, mo2);
+ mo4 = gf_mesher_object('ball', [0 0 0], 1.3);
+ mo5 = gf_mesher_object('union', mo4, mo3);
+ mo6 = gf_mesher_object('ball', [-1 0 0], 1);
+ mo = gf_mesher_object('set minus', mo5, mo6);
+ fixed_vertices = []; h = 0.3;
+ else
+ alpha = %pi/5;
+ L = 20;
+ R = L * tan(alpha) * 0.7;
+ mo1 = gf_mesher_object('cone', [0 0 0], [0 0 1], L, alpha);
+ mo2 = gf_mesher_object('cylinder', [0 0 L], [0, 0, 1], L, R);
+ mo = gf_mesher_object('union', mo1, mo2);
+ fixed_vertices = []; h = 2;
+ end
+elseif (N == 4) then
+ mo = gf_mesher_object('ball', [0 0 0 4], 2);
+ fixed_vertices = [0; 0; 0; 4];
+ h = 1;
+else
+ error('It is not very reasonable to build a mesh in dimension greater than 4 !');
+end
+
+m = gf_mesh('generate', mo, h, K, fixed_vertices);
+
+if (N <= 2) then
+ gf_plot_mesh(m);
+elseif (N == 3) then
+ mf = gf_mesh_fem(m, 1);
+ gf_mesh_fem_set(mf, 'classical fem', K);
+ VAL = gf_mesh_fem_get_eval(mf, list('x+y+z'));
+ gf_plot(mf, VAL, 'mesh', 'on', 'cvlst', gf_mesh_get(mf,'outer faces'), 'refine', 4);
+ // axis on; camlight;
+ gf_colormap('chouette');
+end
diff --git a/interface/src/scilab/demos/demo_mortar.sce b/interface/src/scilab/demos/demo_mortar.sce
index 6afa814..d9c5bda 100644
--- a/interface/src/scilab/demos/demo_mortar.sce
+++ b/interface/src/scilab/demos/demo_mortar.sce
@@ -7,6 +7,14 @@ stacksize('max');
path = get_absolute_file_path('demo_mortar.sce');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
NX = 9;
diff --git a/interface/src/scilab/demos/demo_nonlinear_elasticity.sce b/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
index a21f378..34a5d95 100644
--- a/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
+++ b/interface/src/scilab/demos/demo_nonlinear_elasticity.sce
@@ -10,6 +10,14 @@ path = get_absolute_file_path('demo_nonlinear_elasticity.sce');
// Load the axrot_matrix macro
exec(path + 'axrot_matrix.sci');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
// set a custom colormap
diff --git a/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce b/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
index 6dc164f..61bf42f 100644
--- a/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
+++ b/interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_nonlinear_elasticity_anim.sce');
printf('demo nonlinear_elasticity_anim\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
// replay all the computations of demo_nonlinear_elasticity.sci
load(path + '/demo_nonlinear_elasticity_U.mat');
diff --git a/interface/src/scilab/demos/demo_plasticity.sce b/interface/src/scilab/demos/demo_plasticity.sce
index c0a7b03..275ce82 100644
--- a/interface/src/scilab/demos/demo_plasticity.sce
+++ b/interface/src/scilab/demos/demo_plasticity.sce
@@ -3,6 +3,14 @@ stacksize('max');
path = get_absolute_file_path('demo_plasticity.sce');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
L = 100;
H = 20;
diff --git a/interface/src/scilab/demos/demo_plate.sce b/interface/src/scilab/demos/demo_plate.sce
index e787372..c7b10bd 100644
--- a/interface/src/scilab/demos/demo_plate.sce
+++ b/interface/src/scilab/demos/demo_plate.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_plate.sce');
printf('demo plate started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
// Plate problem test.
NX = 10.0;
diff --git a/interface/src/scilab/demos/demo_refine.sce b/interface/src/scilab/demos/demo_refine.sce
index 1f6645a..6d0a827 100644
--- a/interface/src/scilab/demos/demo_refine.sce
+++ b/interface/src/scilab/demos/demo_refine.sce
@@ -9,6 +9,14 @@ path = get_absolute_file_path('demo_refine.sce');
printf('demo refine started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
//clear all; clf;
diff --git a/interface/src/scilab/demos/demo_static_contact.sce b/interface/src/scilab/demos/demo_static_contact.sce
index 9a499e8..d2431e1 100644
--- a/interface/src/scilab/demos/demo_static_contact.sce
+++ b/interface/src/scilab/demos/demo_static_contact.sce
@@ -1,5 +1,6 @@
-// Copyright (C) 2009 Yves Renard.
-// Copyright (C) 2009-2010 Yann Collette.
+// Matlab GetFEM++ interface
+//
+// Copyright (C) 2009-2011 Yves Renard.
//
// This file is a part of GetFEM++
//
@@ -15,122 +16,198 @@
// along with this program; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
//
-// Static equilibrium of an elastic solid in contact with a rigid foundation
+// Static equilibrium of an elastic solid in contact with a rigid foundation.
+// Tests the different contact/friction formulations of Getfem.
//
// This program is used to check that matlab-getfem is working. This is also
// a good example of use of GetFEM++.
//
-lines(0);
-stacksize('max');
-
+gf_workspace('clear all');
+clear all;
path = get_absolute_file_path('demo_static_contact.sce');
-printf('demo static_contact started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
-gf_workspace('clear all');
+// Import the mesh : disc
+// m = gf_mesh('load', path + 'data/disc_P2_h2.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h1.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.5.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.25.mesh');
+// m = gf_mesh('load', path + 'data/disc_P2_h0.15.mesh');
+
+// Import the mesh : sphere
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_8_elts.mesh');
+m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_80_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_400_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_2000_elts.mesh');
+// m = gf_mesh('load', path + 'data/sphere_with_quadratic_tetra_16000_elts.mesh');
+
+d = gf_mesh_get(m, 'dim'); // Mesh dimension
+
+// Parameters of the model
+clambda = 1; // Lame coefficient
+cmu = 1; // Lame coefficient
+friction_coeff = 0.4; // coefficient of friction
+vertical_force = 0.05; // Volumic load in the vertical direction
+r = 10; // Augmentation parameter
+condition_type = 0; // 0 = Explicitely kill horizontal rigid displacements
+ // 1 = Kill rigid displacements using a global penalization
+ // 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6; // Penalization coefficient for the global penalization
-// Import the mesh
-//m = gf_mesh('load', path + '/data/disc_P2_h1.mesh');
-m = gf_mesh('load', path + '/data/disc_P2_h2.mesh');
-//m = gf_mesh('load', path + '/data/disc_P2_h0.5.mesh');
-
-d = gf_mesh_get(m, 'dim');
-
-// parameters of the model
-lambda = 1; // Lame coefficient
-mu = 1; // Lame coefficient
-friction_coeff = 0.2; // coefficient of friction
-r = 5; // Augmentation parameter
-version = 4; // 1 : frictionless contact and the basic contact brick
- // 2 : contact with 'static' friction and the basic contact brick
- // 3 : frictionless contact and the contact with a
- // rigid obstacle brick
- // 4 : contact with 'static' friction and the contact with a
- // rigid obstacle brick
if (d == 2) then
- obstacle = 'y'; // Signed distance representing the obstacle
+ cpoints = [0, 0]; // constraigned points for 2d
+ cunitv = [1, 0]; // corresponding constraigned directions for 2d
else
- obstacle = 'z'; // Signed distance representing the obstacle
+ cpoints = [0, 0, 0, 0, 0, 0, 5, 0, 5]; // constraigned points for 3d
+ cunitv = [1, 0, 0, 0, 1, 0, 0, 1, 0]; // corresponding constraigned directions for 3d
end
-// set a custom colormap
-h = scf();
-h.color_map = jetcolormap(255);
-
-//r = [0.7 .7 .7];
-//l = r($,:); s=63; s1=20; s2=25; s3=48; s4=55;
-//for i=1:s
-// c1 = max(min((i-s1)/(s2-s1),1),0);
-// c2 = max(min((i-s3)/(s4-s3),1),0);
-// r($+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2];
-//end
-//h.color_map = r;
-
-d = gf_mesh_get(m, 'dim');
-
-// Selection of the contact boundary
-border = gf_mesh_get(m, 'outer faces');
+niter = 100; // Maximum number of iterations for Newton's algorithm.
+plot_mesh = %t;
+version = 13; // 1 : frictionless contact and the basic contact brick
+ // 2 : contact with 'static' Coulomb friction and basic contact brick
+ // 3 : frictionless contact and the contact with a
+ // rigid obstacle brick
+ // 4 : contact with 'static' Coulomb friction and the contact with a
+ // rigid obstacle brick
+ // 5 : frictionless contact and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian,
+ // unsymmetric version
+ // 6 : frictionless contact and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian, symmetric
+ // version.
+ // 7 : frictionless contact and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian,
+ // unsymmetric version with an additional augmentation.
+ // 8 : frictionless contact and the integral brick
+ // New unsymmetric method.
+ // 9 : frictionless contact and the integral brick : Uzawa
+ // on the Lagrangian augmented by the penalization term.
+ // 10 : contact with 'static' Coulomb friction and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian,
+ // unsymmetric version.
+ // 11 : contact with 'static' Coulomb friction and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian,
+ // nearly symmetric version.
+ // 12 : contact with 'static' Coulomb friction and the integral brick
+ // Newton and Alart-Curnier augmented lagrangian,
+ // unsymmetric version with an additional augmentation.
+ // 13 : contact with 'static' Coulomb friction and the integral brick
+ // New unsymmetric method.
+ // 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+ // on the Lagrangian augmented by the penalization term.
+ // 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+ // coefficient).
+ // Signed distance representing the obstacle
+if (d == 2) then obstacle = 'y'; else obstacle = 'z'; end;
+
+// Selection of the contact and Dirichlet boundaries
+GAMMAC = 1; GAMMAD = 2;
+
+border = gf_mesh_get(m,'outer faces');
normals = gf_mesh_get(m, 'normal of faces', border);
-contact_boundary = border(:,find(normals(d, :) < 0));
-GAMMAC = 1;
+contact_boundary = border(:, find(normals(d, :) < -0.01));
gf_mesh_set(m, 'region', GAMMAC, contact_boundary);
-
-// Plot the mesh
-drawlater;
-gf_plot_mesh(m, 'regions', [GAMMAC]);
-title('Mesh and contact boundary (in blue)');
-drawnow;
-sleep(100);
+contact_boundary = border(:, find(normals(d, :) > 0.01));
+gf_mesh_set(m, 'region', GAMMAD, contact_boundary);
// Finite element methods
+u_degree = 2;
+lambda_degree = 2;
+
mfu = gf_mesh_fem(m, d);
-gf_mesh_fem_set(mfu, 'classical fem', 2);
+gf_mesh_fem_set(mfu, 'classical fem', u_degree);
mfd = gf_mesh_fem(m, 1);
-gf_mesh_fem_set(mfd, 'classical fem', 1);
+gf_mesh_fem_set(mfd, 'classical fem', u_degree);
+mflambda = gf_mesh_fem(m, 1); // used only by versions 5 to 13
+gf_mesh_fem_set(mflambda, 'classical fem', lambda_degree);
mfvm = gf_mesh_fem(m, 1);
-gf_mesh_fem_set(mfvm, 'classical discontinuous fem', 1);
+gf_mesh_fem_set(mfvm, 'classical discontinuous fem', u_degree-1);
+
+// Integration method
mim = gf_mesh_im(m, 4);
+if (d == 2) then
+ mim_friction = gf_mesh_im(m, ...
+ gf_integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'));
+else
+ mim_friction = gf_mesh_im(m, ...
+ gf_integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)'));
+end
+
+// Plot the mesh
+if (plot_mesh) then
+ scf(1);
+ gf_plot_mesh(m, 'regions', [GAMMAC]);
+ title('Mesh and contact boundary (in red)');
+ sleep(100);
+end
// Volumic density of force
nbdofd = gf_mesh_fem_get(mfd, 'nbdof');
nbdofu = gf_mesh_fem_get(mfu, 'nbdof');
F = zeros(nbdofd*d, 1);
-F(d:d:nbdofd*d) = -0.02;
+F(d:d:nbdofd*d) = -vertical_force;
// Elasticity model
md = gf_model('real');
gf_model_set(md, 'add fem variable', 'u', mfu);
-gf_model_set(md, 'add initialized data', 'mu', [mu]);
-gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
-gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', 'lambda', 'mu');
+gf_model_set(md, 'add initialized data', 'cmu', [cmu]);
+gf_model_set(md, 'add initialized data', 'clambda', [clambda]);
+gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', ...
+ 'clambda', 'cmu');
gf_model_set(md, 'add initialized fem data', 'volumicload', mfd, F);
gf_model_set(md, 'add source term brick', mim, 'u', 'volumicload');
-// Small penalty term to avoid rigid motion (should be replaced by an explicit
-// treatment of the rigid motion with a constraint matrix)
-gf_model_set(md, 'add initialized data', 'penalty_param', [1E-8]);
-gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+if (condition_type == 2) then
+ Ddata = zeros(1, d); Ddata(d) = -5;
+ gf_model_set(md, 'add initialized data', 'Ddata', Ddata);
+ gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', u_degree, GAMMAD, 'Ddata');
+elseif (condition_type == 0) then
+ gf_model_set(md, 'add initialized data', 'cpoints', cpoints);
+ gf_model_set(md, 'add initialized data', 'cunitv', cunitv);
+ gf_model_set(md, 'add pointwise constraints with multipliers', 'u', 'cpoints', 'cunitv');
+elseif (condition_type == 1) then
+ // Small penalty term to avoid rigid motion (should be replaced by an
+ // explicit treatment of the rigid motion with a constraint matrix)
+ gf_model_set(md, 'add initialized data', 'penalty_param', ...
+ [penalty_parameter]);
+ gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+end
// The contact condition
cdof = gf_mesh_fem_get(mfu, 'dof on region', GAMMAC);
-nbc = size(cdof, 2) / d;
+nbc = size(cdof, 2) / d;
+if (nbc <= 0) then
+ disp('No contact zone');
+ return;
+end
+
+solved = %f;
if (version == 1 | version == 2) then // defining the matrices BN and BT by hand
- contact_dof = cdof(d:d:nbc*d);
+ contact_dof = cdof(d:d:nbc*d);
contact_nodes = gf_mesh_fem_get(mfu, 'basic dof nodes', contact_dof);
- BN = spzeros(nbc, nbdofu);
+ BN = spzeros(nbc, nbdofu);
+ ngap = zeros(nbc, 1);
for i = 1:nbc
BN(i, contact_dof(i)) = -1.0;
- gap(i) = contact_nodes(d, i);
+ ngap(i) = contact_nodes(d, i);
end
+
if (version == 2) then
BT = spzeros(nbc*(d-1), nbdofu);
for i = 1:nbc
- BT(i*(d-1), contact_dof(i)-d+1) = 1.0;
- if (d > 2) then
- BT(i*(d-1)+1, contact_dof(i)-d+2) = 1.0;
+ for j = 1:d-1
+ BT(j+(i-1)*(d-1), contact_dof(i)-d+j) = 1.0;
end
end
end
@@ -139,53 +216,184 @@ if (version == 1 | version == 2) then // defining the matrices BN and BT by hand
gf_model_set(md, 'add initialized data', 'r', [r]);
if (version == 2) then
gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
- gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', ...
+ [friction_coeff]);
end
- gf_model_set(md, 'add initialized data', 'gap', gap);
+ gf_model_set(md, 'add initialized data', 'ngap', ngap);
gf_model_set(md, 'add initialized data', 'alpha', ones(nbc, 1));
if (version == 1) then
- gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', BN, 'gap', 'alpha', 0);
+ gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', ...
+ BN, 'ngap', 'alpha', 1);
else
- gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'lambda_t', 'r', BN, BT, 'friction_coeff', 'gap', 'alpha', 0);
+ gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', ...
+ 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
end
-elseif (version == 3 | version == 4) then // BN and BT defined by the contact brick
+elseif (version == 3 | version == 4) then // BN and BT defined by contact brick
+
gf_model_set(md, 'add variable', 'lambda_n', nbc);
gf_model_set(md, 'add initialized data', 'r', [r]);
if (version == 3) then
- gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', 'lambda_n', 'r', GAMMAC, obstacle, 0);
+ gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+ 'lambda_n', 'r', GAMMAC, obstacle, 1);
else
gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
- gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
- gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
- 'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, obstacle, 0);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', ...
+ [friction_coeff]);
+ gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+ 'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, ...
+ obstacle, 1);
+ end
+
+elseif (version >= 5 & version <= 8) then // The integral version, Newton
+
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ gf_model_set(md, 'add fem variable', 'lambda_n', mflambda_partial);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add integral contact with rigid obstacle brick', ...
+ mim_friction, 'u', 'lambda_n', 'obstacle', 'r', GAMMAC, version-4);
+
+elseif (version == 9) then // The integral version, Uzawa on the augmented Lagrangian
+
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+ lambda_n = zeros(1, nbc);
+ gf_model_set(md, 'add initialized fem data', 'lambda_n', mflambda_partial, lambda_n);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', GAMMAC, 'lambda_n', 2);
+
+ for ii=1:100
+ printf('iteration %d\n', ii);
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); // , 'very noisy');
+ U = gf_model_get(md, 'variable', 'u');
+ lambda_n_old = lambda_n;
+ lambda_n = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))';
+ gf_model_set(md, 'variable', 'lambda_n', lambda_n);
+ difff = max(abs(lambda_n-lambda_n_old));
+ printf('diff : %g\n', difff/max(abs(lambda_n)));
+ // pause;
+ if (difff/max(abs(lambda_n)) < penalty_parameter) then break; end;
+ end
+
+ solved = %t;
+
+elseif (version >= 10 & version <= 13) then // The integral version with friction, Newton
+
+ gf_mesh_fem_set(mflambda, 'qdim', d);
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ gf_model_set(md, 'add fem variable', 'lambda', mflambda_partial);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add integral contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9);
+
+elseif (version == 14) then // The integral version, Uzawa on the augmented Lagrangian with friction
+
+ gf_mesh_fem_set(mflambda, 'qdim', d);
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+ lambda = zeros(1, nbc);
+ gf_model_set(md, 'add initialized fem data', 'lambda', mflambda_partial, lambda);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda');
+
+ for ii=1:100
+ printf('iteration %d\n', ii);
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); // , 'very noisy');
+ U = gf_model_get(md, 'variable', 'u');
+ lambda_old = lambda;
+ lambda = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda, mfd, OBS, r, friction_coeff))';
+ gf_model_set(md, 'variable', 'lambda', lambda);
+ difff = max(abs(lambda-lambda_old));
+ printf('diff : %g\n', difff/max(abs(lambda)));
+ // pause;
+ if (difff/max(abs(lambda)) < penalty_parameter) then break; end;
end
+
+ solved = %t;
+
+elseif (version == 15) then
+
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ OBS = gf_mesh_fem_get_eval(mfd, list(obstacle));
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', 'friction_coeff', GAMMAC);
+
else
- error('Unexistent version');
+ error('Inexistent version');
end
// Solve the problem
-
-gf_model_get(md, 'solve', 'max_res', 1E-7, 'very noisy', 'max_iter', 100);
+if (~solved) then
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'very noisy', 'max_iter', niter); // , 'lsearch', 'simplest'); // , 'with pseudo potential');
+end
U = gf_model_get(md, 'variable', 'u');
-lambda_n = gf_model_get(md, 'variable', 'lambda_n');
-VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', 'u', 'lambda', 'mu', mfvm);
+// lambda_n = gf_model_get(md, 'variable', 'lambda_n');
+VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+ 'u', 'clambda', 'cmu', mfvm);
+
+
+// set a custom colormap
+// r=[0.7 .7 .7]; l = r($,:); s=63; s1=20; s2=25; s3=48;s4=55; for i=1:s, c1 = max(min((i-s1)/(s2-s1),1),0);c2 = max(min((i-s3)/(s4-s3),1),0); r($+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2]; end; colormap(r);
+
+scf(2);
-h = scf();
-drawlater;
-h.color_map = jetcolormap(255);
if (d == 3) then
- gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
- gf_mesh_get(mfdu,'outer faces'), 'deformation', U, ...
- 'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ c = [0.1;0;20];
+ x = [1;0;0];
+ y = [0;1;0];
+ z = [0;0;1];
+ // Whole boundary
+ // sl2 = gf_slice(list('boundary',list('none')), m, 5);
+ // Slice, 3 planes
+ // sl2 = gf_slice(list('boundary',list('union',list('planar',+1,c,x),list('planar',+1,c,y),list('planar',+1,c,z))),m,5);
+ // Slice, 2 planes
+ // sl2 = gf_slice(list('boundary',list('union',list('planar',+1,c,x),list('planar',+1,c,y))),m,5);
+ // Slice, 1 plane
+ sl2 = gf_slice(list('boundary',list('planar',+1,c,x)), m, 5);
+
+ P = gf_slice_get(sl2,'pts'); dP = gf_compute(mfu,U,'interpolate on',sl2);
+ gf_slice_set(sl2, 'pts', P+dP);
+ VMsl = gf_compute(mfvm,VM,'interpolate on',sl2);
+ //set(gcf,'renderer','zbuffer');
+ h = gf_plot_slice(sl2,'mesh','on','mesh_slice_edges','off','data',VMsl);
+ //view(-80,-15); axis on; camlight;
+ gf_colormap('chouette');
+ // map=[1:-1/10:0]'*[1 1 1]; colormap(map); // for NB
+
+ // gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
+ // gf_mesh_get(mfu,'outer faces'), 'deformation', U, ...
+ // 'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ // view(-5,-10); camlight; colormap(map);
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Sliced deformed configuration (not really a small deformation of course ...)');
else
gf_plot(mfvm, VM, 'deformed_mesh', 'on', 'deformation', U, ...
'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ xlabel('x'); ylabel('y');
+ title('Deformed configuration (not really a small deformation of course ...)');
end
-title('Deformed configuration (not really a small deformation of course ...)');
-colorbar(min(VM),max(VM));
-drawnow;
+//colorbar;
sleep(100);
-
-printf('demo static_contact terminated\n');
diff --git a/interface/src/scilab/demos/demo_step_by_step.sce b/interface/src/scilab/demos/demo_step_by_step.sce
index 4bcad4d..6afc11c 100644
--- a/interface/src/scilab/demos/demo_step_by_step.sce
+++ b/interface/src/scilab/demos/demo_step_by_step.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_step_by_step.sce');
printf('demo step_by_step started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
// creation of a simple cartesian mesh
diff --git a/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce b/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
index 80d0d84..35b80cc 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_poiseuille.sce
@@ -7,6 +7,14 @@ path = get_absolute_file_path('demo_stokes_2D_poiseuille.sce');
printf('demo stokes_2D_poiseuille started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
disp('validation for 2D stokes with rectangular elements : Poiseuille flow with cartesian mesh');
diff --git a/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce b/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
index 938968f..1e10ef9 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_poiseuille_arc.sce
@@ -7,6 +7,14 @@ path = get_absolute_file_path('demo_stokes_2D_poiseuille_arc.sce');
printf('demo stokes_2D_poiseuille_arc started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
disp('2D stokes demonstration on a quadratic mesh');
@@ -68,7 +76,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
pde('mf_d') = gf_mesh_fem(m,1);
pde('mim') = gf_mesh_im(m, gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
// -> if not used, the pression has strange values
gf_mesh_fem_set(pde('mf_u'),'fem',fem_u);
gf_mesh_fem_set(pde('mf_p'),'fem',fem_u);
diff --git a/interface/src/scilab/demos/demo_stokes_2D_tube.sce b/interface/src/scilab/demos/demo_stokes_2D_tube.sce
index 62d5f3b..d40d980 100644
--- a/interface/src/scilab/demos/demo_stokes_2D_tube.sce
+++ b/interface/src/scilab/demos/demo_stokes_2D_tube.sce
@@ -4,6 +4,14 @@
lines(0);
stacksize('max');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
path = get_absolute_file_path('demo_stokes_2D_tube.sce');
@@ -47,7 +55,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
pde('mf_d') = gf_mesh_fem(m,1);
pde('mim') = gf_mesh_im(m,gf_integ('IM_TRIANGLE(5)'));
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
// -> if not used, the pressure has strange values
gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(2,2)'));
gf_mesh_fem_set(pde('mf_d'),'fem',gf_fem('FEM_PK(2,2)'));
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank.sce b/interface/src/scilab/demos/demo_stokes_3D_tank.sce
index e8f5af5..3d9bc6d 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_stokes_3D_tank.sce');
printf('demo stokes_3D_tank started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
disp('3D stokes demonstration on a quadratic mesh');
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce b/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
index 5525f25..1e2addc 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank_alt.sce
@@ -6,6 +6,14 @@ stacksize('max');
path = get_absolute_file_path('demo_stokes_3D_tank_alt.sce');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
printf('demo stokes_3D_tank_alt started\n');
@@ -54,7 +62,7 @@ pde('mf_p') = gf_mesh_fem(m,1);
pde('mf_d') = gf_mesh_fem(m,1);
pde('mim') = gf_mesh_im(m, gf_integ('IM_TETRAHEDRON(5)'));
-// this is a good example of the usefullness of the cubic bubble
+// this is a good example of the usefulness of the cubic bubble
// -> if not used, the pression has strange values
//gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(3,2)')
gf_mesh_fem_set(pde('mf_u'),'fem',gf_fem('FEM_PK(3,2)'));
diff --git a/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce b/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
index 2103152..cc1d225 100644
--- a/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
+++ b/interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
@@ -3,6 +3,14 @@ stacksize('max');
path = get_absolute_file_path('demo_stokes_3D_tank_draw.sce');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
if (exists('U')~=1 | exists('P') ~= 1) then
error('run demo_stokes_3D_tank2 first');
end
diff --git a/interface/src/scilab/demos/demo_structural_optimization.sce b/interface/src/scilab/demos/demo_structural_optimization.sce
index 95417e6..6c22beb 100644
--- a/interface/src/scilab/demos/demo_structural_optimization.sce
+++ b/interface/src/scilab/demos/demo_structural_optimization.sce
@@ -29,6 +29,14 @@ path = get_absolute_file_path('demo_structural_optimization.sce');
printf('demo structural_optimization started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
Do_Plot = %T;
@@ -73,11 +81,11 @@ if (N == 2) then
NBDRAW = 20; // Draw solution each NBDRAW iterations
else
NY = 30;
- level_set_rate = 0.03 / NY;
- reinitialisation_time = 0.0045;
+ level_set_rate = 0.025 / NY;
+ reinitialisation_time = 0.003;
threshold_shape = 15;
if (TEST_CASE == 3) then
- threshold_topo = 2.6;
+ threshold_topo = 30;
else
threshold_topo = 0;
end
@@ -91,7 +99,7 @@ cg_eps = 1e-8;
cg_iter = 100000;
if (N == 2) then
- CF = k*NY/40.; // Correction factor. Usefull ?
+ CF = k*NY/40.; // Correction factor. Useful ?
else
CF = k*NY/8;
end
diff --git a/interface/src/scilab/demos/demo_topological_optimization.sce b/interface/src/scilab/demos/demo_topological_optimization.sce
index 44c6002..0bf1180 100644
--- a/interface/src/scilab/demos/demo_topological_optimization.sce
+++ b/interface/src/scilab/demos/demo_topological_optimization.sce
@@ -29,6 +29,14 @@ path = get_absolute_file_path('demo_topological_optimization.sce');
printf('demo topological_optimization started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
// parameters
diff --git a/interface/src/scilab/demos/demo_tripod.sce b/interface/src/scilab/demos/demo_tripod.sce
index dc0c882..2ead070 100644
--- a/interface/src/scilab/demos/demo_tripod.sce
+++ b/interface/src/scilab/demos/demo_tripod.sce
@@ -12,6 +12,14 @@ disp('compressible/incompressible elasticity!')
linear = 1;
incompressible = 0;
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
// import the mesh
diff --git a/interface/src/scilab/demos/demo_tripod_alt.sce b/interface/src/scilab/demos/demo_tripod_alt.sce
index ad16fca..2e3d2c5 100644
--- a/interface/src/scilab/demos/demo_tripod_alt.sce
+++ b/interface/src/scilab/demos/demo_tripod_alt.sce
@@ -8,6 +8,14 @@ stacksize('max');
path = get_absolute_file_path('demo_tripod_alt.sce');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
printf('demo tripod_alt started\n');
diff --git a/interface/src/scilab/demos/demo_tripod_anim.sce b/interface/src/scilab/demos/demo_tripod_anim.sce
index 2b4f7ff..3b17cea 100644
--- a/interface/src/scilab/demos/demo_tripod_anim.sce
+++ b/interface/src/scilab/demos/demo_tripod_anim.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_tripod_anim.sce');
printf('demo tripod_anim started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
// You should run demo_tripod first ...
//m = gf_mesh('import','gid', path + '/data/tripod.GiD.msh');
//mfu = gf_mesh_fem('from string', smfu, m);
diff --git a/interface/src/scilab/demos/demo_tripod_slice_anim.sce b/interface/src/scilab/demos/demo_tripod_slice_anim.sce
index cafe3f6..d75dbce 100644
--- a/interface/src/scilab/demos/demo_tripod_slice_anim.sce
+++ b/interface/src/scilab/demos/demo_tripod_slice_anim.sce
@@ -7,6 +7,14 @@ printf('demo tripod_slice_anim started\n');
disp('this file should be launched after demo_tripod.sce as it assumes the tripod mesh and solutions are in memory')
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
//m = gf_mesh('from string',sm);
//mfu = gf_mesh_fem('from string',smfu,m);
//mfdu = gf_mesh_fem('from string',smfdu,m);
diff --git a/interface/src/scilab/demos/demo_wave2D.sce b/interface/src/scilab/demos/demo_wave2D.sce
index 216f6d7..60de2ef 100644
--- a/interface/src/scilab/demos/demo_wave2D.sce
+++ b/interface/src/scilab/demos/demo_wave2D.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D.sce');
printf('demo wave2D started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
disp('2D scalar wave equation (helmholtz) demonstration');
diff --git a/interface/src/scilab/demos/demo_wave2D_alt.sce b/interface/src/scilab/demos/demo_wave2D_alt.sce
index bdef68e..26f74e7 100644
--- a/interface/src/scilab/demos/demo_wave2D_alt.sce
+++ b/interface/src/scilab/demos/demo_wave2D_alt.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D_alt.sce');
printf('demo wave2D_alt\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
disp('2D scalar wave equation (helmholtz) demonstration');
diff --git a/interface/src/scilab/demos/demo_wave2D_animate.sce b/interface/src/scilab/demos/demo_wave2D_animate.sce
index 8c566f0..cc42fa0 100644
--- a/interface/src/scilab/demos/demo_wave2D_animate.sce
+++ b/interface/src/scilab/demos/demo_wave2D_animate.sce
@@ -5,6 +5,14 @@ path = get_absolute_file_path('demo_wave2D_animate.sce');
printf('demo wave2D_animate started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
dt = 2*%pi/20;
t = 0:dt:2*%pi-dt/2;
diff --git a/interface/src/scilab/demos/demo_wave_equation.sce b/interface/src/scilab/demos/demo_wave_equation.sce
index 4ade4a9..dbe4776 100644
--- a/interface/src/scilab/demos/demo_wave_equation.sce
+++ b/interface/src/scilab/demos/demo_wave_equation.sce
@@ -8,6 +8,14 @@ path = get_absolute_file_path('demo_wave_equation.sce');
printf('demo wave_equation started\n');
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
gf_workspace('clear all');
m = gf_mesh('cartesian',[0:.2:1],[0:.2:1]);
diff --git a/interface/src/scilab/demos/sci_getfem.dem.gateway.sce b/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
index a15bab8..0081277 100644
--- a/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
+++ b/interface/src/scilab/demos/sci_getfem.dem.gateway.sce
@@ -5,29 +5,33 @@
// ====================================================================
demopath = get_absolute_file_path("sci_getfem.dem.gateway.sce");
-subdemolist = ["Bilaplacian", "demo_bilaplacian.sce"; ..
- "Crack", "demo_crack.sce"; ..
- "Fictitious domains", "demo_fictitious_domains.sce"; ..
- "Final Laplacian", "demo_finallaplacian.sce"; ..
- "Laplacian 1D", "demo_laplacian1D.sce"; ..
- "Laplacian", "demo_laplacian.sce"; ..
- "Mortar", "demo_mortar.sce"; ..
- "Nonlinear Elasticity", "demo_nonlinear_elasticity.sce"; ..
- "Plasticity", "demo_plasticity.sce"; ..
- "Plate", "demo_plate.sce"; ..
- "Refine", "demo_refine.sce"; ..
- "Static Contact", "demo_static_contact.sce"; ..
- "Step by Step", "demo_step_by_step.sce"; ..
- "Stokes 2D Poiseuille Arc", "demo_stokes_2D_poiseuille_arc.sce"; ..
- "Stokes 2D Poiseuille", "demo_stokes_2D_poiseuille.sce"; ..
- "Stokes 2D tube", "demo_stokes_2D_tube.sce"; ..
- "Stokes 3D tank", "demo_stokes_3D_tank.sce"; ..
- "Structural optimization", "demo_structural_optimization.sce"; ..
- "topological optimization", "demo_topological_optimization.sce"; ..
- "Tripod", "demo_tripod.sce"; ..
- "Wave 2D", "demo_wave2D.sce"; ..
- "Wave equation", "demo_wave_equation.sce"];
+subdemolist = ["Bilaplacian", "demo_bilaplacian.sce"; ..
+ "Crack", "demo_crack.sce"; ..
+ "Continuation method", "demo_continuation.sce"; ..
+ "Convection in a rotating cavity", "demo_convection_rotating_cavity.sce"; ..
+ "Fictitious domains", "demo_fictitious_domains.sce"; ..
+ "Final Laplacian", "demo_finallaplacian.sce"; ..
+ "Laplacian 1D", "demo_laplacian1D.sce"; ..
+ "Laplacian", "demo_laplacian.sce"; ..
+ "Mesh generation", "demo_mesh_generation.sce"; ..
+ "Mortar", "demo_mortar.sce"; ..
+ "Navier-Stokes", "demo_Navier_Stokes.sce"; ..
+ "Nonlinear Elasticity", "demo_nonlinear_elasticity.sce"; ..
+ "Plasticity", "demo_plasticity.sce"; ..
+ "Plate", "demo_plate.sce"; ..
+ "Refine", "demo_refine.sce"; ..
+ "Slice", "demo_slices.sce"; ..
+ "Static Contact", "demo_static_contact.sce"; ..
+ "Step by Step", "demo_step_by_step.sce"; ..
+ "Stokes 2D Poiseuille Arc", "demo_stokes_2D_poiseuille_arc.sce"; ..
+ "Stokes 2D Poiseuille", "demo_stokes_2D_poiseuille.sce"; ..
+ "Stokes 2D tube", "demo_stokes_2D_tube.sce"; ..
+ "Stokes 3D tank", "demo_stokes_3D_tank.sce"; ..
+ "Structural optimization", "demo_structural_optimization.sce"; ..
+ "topological optimization", "demo_topological_optimization.sce"; ..
+ "Tripod", "demo_tripod.sce"; ..
+ "Wave 2D", "demo_wave2D.sce"; ..
+ "Wave equation", "demo_wave_equation.sce"];
subdemolist(:,2) = demopath + subdemolist(:,2);
// ====================================================================
-
diff --git a/interface/src/scilab/demos/test_plasticity_new_brick.sce b/interface/src/scilab/demos/test_plasticity_new_brick.sce
deleted file mode 100644
index 6f14114..0000000
--- a/interface/src/scilab/demos/test_plasticity_new_brick.sce
+++ /dev/null
@@ -1,157 +0,0 @@
-gf_workspace('clear all');
-
-//
-
-// We try to compute a plasticity problem with a Von Mises crierion
-// For convenience we consider an homogenous Dirichlet condition on the left
-// of the domain and an easy computed Neumann Condition on the right
-
-//
-
-// Initialize used data
-L = 100;
-H = 20;
-lambda = 121150;
-mu = 80769;
-von_mises_threshold = 8000;
-f = [0 -330]';
-t = [0 0.9032 1 1.1 1.3 1.5 1.7 1.74 1.7 1.5 1.3 1.1 1 0.9032 0.7 0.5 0.3 0.1 0];
-
-// Create the mesh
-m = gf_mesh('triangles grid', [0:4:L], [0:2:H]);
-
-// Plotting
-h_graph = scf();
-h_graph.color_map = jetcolormap(256);
-drawlater;
-gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
-drawnow;
-
-// Define used MeshIm
-mim = gf_mesh_im(m); gf_mesh_im_set(mim, 'integ', gf_integ('IM_TRIANGLE(6)')); // Gauss methods on triangles
-
-// Define used MeshFem
-mf_u = gf_mesh_fem(m,2); gf_mesh_fem_set(mf_u, 'fem', gf_fem('FEM_PK(2,2)'));
-mf_data = gf_mesh_fem(m); gf_mesh_fem_set(mf_data, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,0)'));
-mf_sigma = gf_mesh_fem(m,4); gf_mesh_fem_set(mf_sigma, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-mf_err = gf_mesh_fem(m); gf_mesh_fem_set(mf_err, 'fem', gf_fem('FEM_PK(2,0)'));
-mf_vm = gf_mesh_fem(m); gf_mesh_fem_set(mf_vm, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-mf_pl = gf_mesh_fem(m); gf_mesh_fem_set(mf_pl, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
-
-// Find the border of the domain
-P = gf_mesh_get(m, 'pts');
-pidleft = find(abs(P(1,:))<1e-6); // Retrieve index of points which x near to 0
-pidright = find(abs(P(1,:) - L)<1e-6); // Retrieve index of points which x near to L
-fleft = gf_mesh_get(m, 'faces from pid', pidleft);
-fright = gf_mesh_get(m, 'faces from pid', pidright);
-
-// Decomposed the mesh into 2 regions with different values of Lamé coeff
-CV = gf_mesh_get(m, 'cvid');
-CVbottom = find(CV <= 250); // Retrieve index of convex located at the bottom
-CVtop = find(CV > 250); // Retrieve index of convex located at the top
-
-// Definition of Lame coeff
-lambda(CVbottom) = 121150; // Stell
-lambda(CVtop) = 84605; // Iron
-//lambda(CV) = 84605;
-mu(CVbottom) = 80769; // Stell
-mu(CVtop) = 77839; // Iron
-//mu(CV) = 77839;
-von_mises_threshold(CVbottom) = 7000;
-von_mises_threshold(CVtop) = 8000;
-
-// Assign boundary numbers
-gf_mesh_set(m,'boundary',1,fleft); // for Dirichlet condition
-gf_mesh_set(m,'boundary',2,fright); // for Neumann condition
-
-// Create the model
-md = gf_model('real');
-
-// Declare that u is the unknown of the system on mf_u
-// 2 is the number of version of the data stored, for the time integration scheme
-gf_model_set(md, 'add fem variable', 'u', mf_u, 2);
-
-// Declare that lambda is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'lambda', mf_data, lambda);
-
-// Declare that mu is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'mu', mf_data, mu);
-
-// Declare that von_mises_threshold is a data of the system on mf_data
-gf_model_set(md, 'add initialized fem data', 'von_mises_threshold', mf_data, von_mises_threshold);
-
-// Declare that sigma is a data of the system on mf_sigma
-// 2 is the number of version of the data stored, for the time integration scheme
-gf_model_set(md, 'add fem data', 'sigma', mf_sigma);
-
-// Add plasticity brick on u
-gf_model_set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-
-// Add homogeneous Dirichlet condition to u on the the left hand side of the domain
-gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
-
-// Add a source term to the system
-gf_model_set(md,'add initialized fem data', 'VolumicData', mf_data, gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(1)))));
-gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData', 2);
-
-VM = zeros(1,gf_mesh_fem_get(mf_vm, 'nbdof'));
-
-nbstep = size(t,2);
-
-dd = gf_mesh_fem_get(mf_err, 'basic dof from cvid');
-
-h_graph_2 = scf();
-h_graph_2.color_map = jetcolormap(256);
-
-h_graph_3 = scf();
-h_graph_3.color_map = jetcolormap(256);
-
-for step=1:nbstep,
- if step > 1 then
- gf_model_set(md, 'variable', 'VolumicData', gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(step)))));
- end
-
- // Solve the system
- gf_model_get(md, 'solve','lsolver', 'superlu', 'lsearch', 'simplest', 'alpha min', 0.8, 'very noisy', 'max_iter', 100, 'max_res', 1e-6);
-
- // Retrieve the solution U
- U = gf_model_get(md, 'variable', 'u', 0);
-
- // Compute new plasticity constraints used to compute
- // the Von Mises or Tresca stress
- gf_model_get(md, 'elastoplasticity next iter', mim, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
- plast = gf_model_get(md, 'compute plastic part', mim, mf_pl, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-
- // Compute Von Mises or Tresca stress
- VM = gf_model_get(md, 'compute elastoplasticity Von Mises or Tresca', 'sigma', mf_vm, 'Von Mises');
-
- scf(h_graph_2);
- drawlater;
- clf(h_graph_2);
- subplot(2,1,1);
- gf_plot(mf_vm,VM,'deformed_mesh', 'on', 'deformation', U, 'deformation_mf', mf_u, 'refine', 4, 'deformation_scale',1);
- colorbar(min(VM),max(VM));
-
- n = t(step);
- title(['Von Mises criterion for t = ', string(n)]);
-
- ERR = gf_compute(mf_u, U, 'error estimate', mim);
- E = ERR; E(dd) = ERR;
-
- subplot(2,1,2);
- gf_plot(mf_err, E, 'mesh','on', 'refine', 1);
- colorbar(min(E),max(E));
- title('Error estimate');
- drawnow;
-
- scf(h_graph_3);
- drawlater;
- clf(h_graph_3);
- gf_plot(mf_pl,plast,'deformed_mesh','on', 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1);
- colorbar(min(plast),max(plast));
- n = t(step);
- title(['Plastification for t = ', string(n)]);
- drawnow;
-
- sleep(1000);
-end
diff --git a/interface/src/scilab/demos/tutorial1.sce b/interface/src/scilab/demos/tutorial1.sce
index 7ad6482..b743827 100644
--- a/interface/src/scilab/demos/tutorial1.sce
+++ b/interface/src/scilab/demos/tutorial1.sce
@@ -1,3 +1,11 @@
+if getos()=='Windows' then
+ // Under Windows, all the trace messages are available in the dos console
+ // Under Linuxs, all the trace messages are redirected to the Scilab console
+ consolebox('on');
+end
+gf_util('trace level',3);
+gf_util('warning level',3);
+
m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
mf = gf_mesh_fem(m,1); // create a meshfem of for a field of dimension 1 (i.e. a scalar field)
gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
diff --git a/interface/src/scilab/help/builder_help.sce b/interface/src/scilab/help/builder_help.sce
index 11c5122..019718b 100644
--- a/interface/src/scilab/help/builder_help.sce
+++ b/interface/src/scilab/help/builder_help.sce
@@ -6,6 +6,6 @@
help_dir = get_absolute_file_path('builder_help.sce');
tbx_builder_help_lang("en_US", help_dir);
-tbx_builder_help_lang("fr_FR", help_dir);
+//tbx_builder_help_lang("fr_FR", help_dir);
clear help_dir;
diff --git a/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml b/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
index 94bb512..0d54d75 100644
--- a/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
+++ b/interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
@@ -24,7 +24,7 @@
demonstration demo_tripod_alt.m is very similar to the demo_tripod.sce
except that the assembly is explicit:</para>
- <programlisting role="example">
+ <programlisting role="example"><![CDATA[
nbd = gf_mesh_fem_get(mfd, 'nbdof');
F = gf_asm('boundary_source', 1, mim, mfu, mfd, repmat([0;-10;0],1,nbd));
K = gf_asm('linear_elasticity', mim, mfu, mfd, lambda*ones(1,nbd),mu*ones(1,nbd));
@@ -53,19 +53,13 @@ end
disp(sprintf('linear system solved in %.2f sec', timer()-t0));
U = (N*UU).' + U0;
- </programlisting>
+ ]]></programlisting>
<para>In getfem-interface, the assembly of vectors, and matrices is done
via the gf_asm function. The Dirichlet condition u(x) = r(x) is handled in
the weak form</para>
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata align="center" fileref="../../mml/avoiding_eq1.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation></para>
+ <para><latex style="center"><![CDATA[\int\left(h\left(x\right)u\left(x\right)\right)\cdot\nu\left(x\right)=\int r\left(x\right)\cdot\nu\left(x\right)\,\forall\nu]]></latex></para>
<para>(where h(x) is a 3Ã3 matrix field - here it is constant and equal to
the identity). The reduced system KK * UU = FF is then built via the
diff --git a/interface/src/scilab/help/en_US/examples/step_by_step_example.xml b/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
index 6c42224..d91a5e7 100644
--- a/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
+++ b/interface/src/scilab/help/en_US/examples/step_by_step_example.xml
@@ -26,13 +26,13 @@
consider a regular mesh whose nodes are
{xi=0...10,j=0..10=(i/10,j/10)}.</para>
- <programlisting role="example">
+ <programlisting role="example"><![CDATA[
// creation of a simple cartesian mesh
---> m = gf_mesh('cartesian',[0:.1:1],[0:.1:1])
+--> m = gf_mesh('cartesian',[0:.1:1],[0:.1:1])
m =
id: 0
cid: 0
- </programlisting>
+ ]]></programlisting>
<para>If you try to look at the value of m, you'll notice that it appears
to be a structure containing two integers. The first one is its
@@ -45,10 +45,10 @@ m =
<para>Now we can try to have a look at the mesh, with its vertices
numbering and the convexes numbering:</para>
- <programlisting role="example">
+ <programlisting role="example"><![CDATA[
// we enable vertices and convexes labels
---> gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
- </programlisting>
+--> gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
+ ]]></programlisting>
<para>As you can see, the mesh is regular, and the numbering of its nodes
and convexes is also regular (this is guaranteed for cartesian meshes, but
@@ -57,10 +57,10 @@ m =
<para>The next step is to create a mesh_fem object. This one links a mesh
with a set of FEM.</para>
- <programlisting role="example">
---> mf = gf_mesh_fem(m,1); // create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
---> gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
- </programlisting>
+ <programlisting role="example"><![CDATA[
+--> mf = gf_mesh_fem(m,1); // create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
+--> gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
+ ]]></programlisting>
<para>The first instruction builds a new mesh_fem object, the second
argument specifies that this object will be used to interpolate scalar
@@ -70,8 +70,8 @@ m =
polynomials of degree 2k). As Q2 is a polynomial FEM, you can view the
expression of its basis functions on the reference convex:</para>
- <programlisting role="example">
---> gf_fem_get(gf_fem('FEM_QK(2,2)'), 'poly_str')
+ <programlisting role="example"><![CDATA[
+--> gf_fem_get(gf_fem('FEM_QK(2,2)'), 'poly_str')
ans =
'1 - 3*x - 3*y + 2*x^2 + 9*x*y + 2*y^2 - 6*x^2*y - 6*x*y^2 + 4*x^2*y^2'
'4*x - 4*x^2 - 12*x*y + 12*x^2*y + 8*x*y^2 - 8*x^2*y^2'
@@ -82,15 +82,15 @@ ans =
'-y + 3*x*y + 2*y^2 - 2*x^2*y - 6*x*y^2 + 4*x^2*y^2'
'-4*x*y + 4*x^2*y + 8*x*y^2 - 8*x^2*y^2'
'x*y - 2*x^2*y - 2*x*y^2 + 4*x^2*y^2'
- </programlisting>
+ ]]></programlisting>
<para>Now, in order to perform numerical integrations on mf, we need to
build a mesh_im object:</para>
- <programlisting role="example">
+ <programlisting role="example"><![CDATA[
// assign the same integration method on all convexes
---> mim=gf_mesh_im(m, gf_integ('IM_EXACT_PARALLELEPIPED(2)'));
- </programlisting>
+--> mim=gf_mesh_im(m, gf_integ('IM_EXACT_PARALLELEPIPED(2)'));
+ ]]></programlisting>
<para>The integration method will be used to compute the various integrals
on each element: here we choose to perform exact computations (no
@@ -111,11 +111,11 @@ ans =
and convex faces. These sets (called "regions") are accessed via an
integer #id:</para>
- <programlisting role="example">
---> border = gf_mesh_get(m,'outer faces');
---> gf_mesh_set(m, 'region', 42, border); // create the region #42
---> gf_plot_mesh(m, 'regions', [42]); // the boundary edges appears in red
- </programlisting>
+ <programlisting role="example"><![CDATA[
+--> border = gf_mesh_get(m,'outer faces');
+--> gf_mesh_set(m, 'region', 42, border); // create the region #42
+--> gf_plot_mesh(m, 'regions', [42]); // the boundary edges appears in red
+ ]]></programlisting>
<para>Here we find the faces of the convexes which are on the boundary of
the mesh (i.e. the faces which are not shared by two convexes). remark: we
@@ -137,63 +137,41 @@ ans =
matrix and its right hand side are stored in a "model state" structure,
created with the gf_mdstate constructor.</para>
- <para>Let us build a problem with an easy solution: <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq1.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>, then we have <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq2.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> (the FEM won't be able to catch the exact solution
- since we use a Q2 method).</para>
+ <para>Let us build a problem with an easy solution:
+ <latex style="text"><![CDATA[u=x\left(x-1\right)y\left(y-1\right)+x^{5}]]></latex>, then we have
+ <latex style="text"><![CDATA[\Delta u=2\left(x^{2}+y^{2}\right)-2\left(x+y\right)+20y^{3}]]></latex>
+ (the FEM won't be able to catch the exact solution since we use a Q2 method).</para>
<para>We start with a "generic elliptic" brick, which handles
- <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq3.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> problems, where A can be a scalar field, a matrix
- field, or an order 4 tensor field. By default, A=1.</para>
-
- <programlisting role="example">
---> b0=gf_mdbrick('generic elliptic',mim,mf)
- </programlisting>
+ <latex style="text"><![CDATA[-\text{div}\left(A\nabla u\right)=\cdots]]></latex>
+ problems, where A can be a scalar field, a matrix field, or an order 4 tensor field. By default, A=1.</para>
+
+ <programlisting role="example"><![CDATA[
+--> b0=gf_mdbrick('generic elliptic',mim,mf)
+ ]]></programlisting>
<para>Each brick embeds a number of parameter fields. In the case of the
generic elliptic brick, there is only one parameter field, the A(x)
- coefficient in <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq3.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>. It is possible to view the list of parameters of the
- brick with</para>
-
- <programlisting role="example">
---> gf_mdbrick_get(b0, 'param list')
+ coefficient in <latex style="text"><![CDATA[-\text{div}\left(A\nabla u\right)=\cdots]]></latex>.
+ It is possible to view the list of parameters of the brick with</para>
+
+ <programlisting role="example"><![CDATA[
+--> gf_mdbrick_get(b0, 'param list')
ans =
'A'
---> gf_mdbrick_get(b0, 'param', 'A')
+--> gf_mdbrick_get(b0, 'param', 'A')
ans =
1
- </programlisting>
+ ]]></programlisting>
<para>Next we add a Dirichlet condition on the domain boundary:</para>
- <programlisting role="example">
---> b1=gf_mdbrick('dirichlet',b0,42,mf,'penalized')
- </programlisting>
+ <programlisting role="example"><![CDATA[
+--> b1=gf_mdbrick('dirichlet',b0,42,mf,'penalized')
+ ]]></programlisting>
<para>Here the number 42 is the region number to which the dirichlet
condition is applied. The 'penalized' says that the Dirichlet condition
@@ -201,30 +179,18 @@ ans =
(augmented system, direct elimination). A mesh fem argument is also
required, as the Dirichlet condition u=r is imposed in a weak form </para>
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq4.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> </para>
+ <para><latex align="center"><![CDATA[\int u\left(x\right)\nu\left(x\right)=\int r\left(x\right)\nu\left(x\right)\,\forall\nu]]></latex></para>
<para>where v is taken in the space of multipliers given by here by
mf.</para>
<para>By default, the Dirichlet brick imposes u=0 on the specified
- boundary. We change this to <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../../mml/step_by_step_eq5.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>:</para>
-
- <programlisting role="example">
---> R=gf_mesh_fem_get(mf, 'eval', list('(x-.5).^2 + (y-.5).^2 + x/5 - y/3'));
---> gf_mdbrick_set(b1, 'param', 'R', mf, R);
- </programlisting>
+ boundary. We change this to <latex style="text"><![CDATA[u=\left(x-0.5\right)^{2}+\left(y-0.5\right)^{2}+x/5-y/3]]></latex>:</para>
+
+ <programlisting role="example"><![CDATA[
+--> R=gf_mesh_fem_get(mf, 'eval', list('(x-.5).^2 + (y-.5).^2 + x/5 - y/3'));
+--> gf_mdbrick_set(b1, 'param', 'R', mf, R);
+ ]]></programlisting>
<para>Remark: the polynomial expression was interpolated on mf. It is
possible only if mf is of Lagrange type. In this first example we use the
@@ -236,19 +202,19 @@ ans =
<para>A "model state" variable is created, and the solver is
launched:</para>
- <programlisting role="example">
---> mds=gf_mdstate('real')
---> gf_mdbrick_get(b1, 'solve', mds)
- </programlisting>
+ <programlisting role="example"><![CDATA[
+--> mds=gf_mdstate('real')
+--> gf_mdbrick_get(b1, 'solve', mds)
+ ]]></programlisting>
<para>The model state now contains the solution (as well as other things,
such as the linear system which was solved). It is extracted, a display
into a matlab figure.</para>
- <programlisting role="example">
---> U=gf_mdstate_get(mds, 'state');
---> gf_plot(mf, U, 'mesh','on');
- </programlisting>
+ <programlisting role="example"><![CDATA[
+--> U=gf_mdstate_get(mds, 'state');
+--> gf_plot(mf, U, 'mesh','on');
+ ]]></programlisting>
</refsection>
<refsection>
diff --git a/interface/src/scilab/help/en_US/gf_asm.xml b/interface/src/scilab/help/en_US/gf_asm.xml
index 06f90db..6a56215 100644
--- a/interface/src/scilab/help/en_US/gf_asm.xml
+++ b/interface/src/scilab/help/en_US/gf_asm.xml
@@ -9,312 +9,389 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_asm</refname>
-
- <refpurpose>General assembly function.</refpurpose>
+ <refpurpose>
+ General assembly function.
+
+ Many of the functions below use more than one mesh_fem: the main
+ mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
+ used for the data. It is always assumed that the Qdim of mf_d is
+ equal to 1: if mf_d is used to describe vector or tensor data, you
+ just have to "stack" (in fortran ordering) as many scalar fields as
+ necessary.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-vec F = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec F)
-vec F = gf_asm('boundary source',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d,vec G)
-spmat M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2])
-spmat M = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec A)
-spmat K = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)
-[spmat K,B] = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec visc)
-[spmat H,vec R] = gf_asm('dirichlet', int boundary_num, mesh_im mim, mesh_fem mf_u,
-mesh_fem mf_d, mat Hd, vec Rd)
-M = gf_asm('boundary qu term', int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat Q)
-[spmat Q, vec G,spmat H,vec R,vec F]=gf_asm('pdetool boundary conditions',
-mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat b, mat e[, string f_expr])
-[...] = gf_asm('volumic'[, CVLST], string expr, mesh_im mim.., [mesh_fem mf1[, mf2,..]][,mat data...])
-[...] = gf_asm('boundary', int bnum, string expr, mesh_im mim.., [mesh_fem mf1[, mf2,..]][,mat data...])
-M = gf_asm('interpolation matrix', mesh_fem mf1, mesh_fem mf2)
-M = gf_asm('extrapolation matrix', mesh_fem mf1, mesh_fem mf2)
- </synopsis>
+ <synopsis>M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, boundary_num]])</synopsis>
+ <synopsis>M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</synopsis>
+ <synopsis>M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</synopsis>
+ <synopsis>M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf, mesh_im mim, real ratio, real h)</synopsis>
+ <synopsis>L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</synopsis>
+ <synopsis>Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)</synopsis>
+ <synopsis>TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem mf_p, vec P})</synopsis>
+ <synopsis>{K, B} = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec nu)</synopsis>
+ <synopsis>A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k)</synopsis>
+ <synopsis>A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</synopsis>
+ <synopsis>A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu)</synopsis>
+ <synopsis>V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd)</synopsis>
+ <synopsis>B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)</synopsis>
+ <synopsis>{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, threshold])</synopsis>
+ <synopsis>Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)</synopsis>
+ <synopsis>{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])</synopsis>
+ <synopsis>{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])</synopsis>
+ <synopsis>Mi = gf_asm('interpolation matrix', mesh_fem mf, mesh_fem mfi)</synopsis>
+ <synopsis>Me = gf_asm('extrapolation matrix',mesh_fem mf, mesh_fem mfe)</synopsis>
+ <synopsis>B = gf_asm('integral contact Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])</synopsis>
+ <synopsis>B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>
+ General assembly function.
+
+ Many of the functions below use more than one mesh_fem: the main
+ mesh_fem (mf_u) used for the main unknown, and data mesh_fem (mf_d)
+ used for the data. It is always assumed that the Qdim of mf_d is
+ equal to 1: if mf_d is used to describe vector or tensor data, you
+ just have to "stack" (in fortran ordering) as many scalar fields as
+ necessary.
+</para>
+ </refsection>
- <para>Many of the functions below use more than one mesh_fem: the main
- mesh_fem (mf_u) used for the main unknow, and data mesh_fem (mf_d) used
- for the data. It is always assumed that the Qdim of mf_d is equal to 1: if
- mf_d is used to describe vector or tensor data, you just have to "stack"
- (in fortran ordering) as many scalar fields as necessary.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>V = gf_asm('volumic_source',MeshIm mim, MeshFem mf_u, MeshFem
- mf_d, vec fd) Assembly of a volumic source term. Output a vector `V`,
- assembled on the MeshFem `mf_u`, using the data vector `fd` defined on
- the data MeshFem `mf_d`. `fd` may be real or complex-valued.</para>
-
- <para>Return a vec object.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_asm('boundary_source',int bnum, MeshIm mim, MeshFem mf_u,
- MeshFem mf_d, vec G) Assembly of a boundary source term. `G` should be
- a [Qdim x N] matrix, where N is the number of dof of `mf_d`, and Qdim
- is the dimension of the unkown u (that is set when creating the
- MeshFem).</para>
-
- <para>Return a vec object.</para>
- </listitem>
-
- <listitem>
- <para>M = gf_asm('mass_matrix',MeshIm mim, MeshFem mf1[, MeshFem mf2])
- Assembly of a mass matrix.</para>
-
- <para>Return a Spmat object.</para>
- </listitem>
-
- <listitem>
- <para>L = gf_asm('laplacian',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
- vec a) Assembly of the matrix for the Laplacian problem.
- <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq1.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> with <literal>a</literal> scalar. Return a Spmat
- object.</para>
- </listitem>
-
- <listitem>
- <para>Le = gf_asm('linear_elasticity',MeshIm mim, MeshFem mf_u,
- MeshFem mf_d, vec lambda_d, vec mu_d) Assembles of the matrix for the
- linear (isotropic) elasticity problem. <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq2.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> with <literal>C</literal> defined via
- <literal>lambda_d</literal> and <literal>mu_d</literal>.</para>
-
- <para>Return a Spmat object.</para>
- </listitem>
-
- <listitem>
- <para>TRHS = gf_asm('nonlinear_elasticity',MeshIm mim, MeshFem mf_u,
- vec U, string law, MeshFem mf_d, mat params, list('tangent
- matrix'|'rhs'|'incompressible tangent matrix', MeshFem mf_p, vec
- P|'incompressible rhs', MeshFem mf_p, vec P)) Assembles terms (tangent
- matrix and right hand side) for nonlinear elasticity. The solution
- <literal>U</literal> is required at the current time-step. The
- <emphasis>law</emphasis> may be choosen among:</para>
-
- <itemizedlist>
- <listitem>
- <para>'SaintVenant Kirchhoff': Linearized law, should be avoided).
- This law has the two usual Lame coefficients as parameters, called
- lambda and mu.</para>
- </listitem>
-
- <listitem>
- <para>'Mooney Rivlin': Only for incompressibility. This law has
- two parameters, called C1 and C2.</para>
- </listitem>
-
- <listitem>
- <para>'Ciarlet Geymonat': This law has 3 parameters, called
- lambda, mu and gamma, with gamma chosen such that gamma is in
- ]-lambda/2-mu, -mu[.</para>
- </listitem>
- </itemizedlist>
-
- <para>The parameters of the material law are described on the MeshFem
- <literal>mf_d</literal>. The matrix <literal>params</literal> should
- have <literal>nbdof(mf_d)</literal> columns, each row correspounds to
- a parameter. The last argument selects what is to be built: either the
- tangent matrix, or the right hand side. If the incompressibility is
- considered, it should be followed by a MeshFem
- <literal>mf_p</literal>, for the pression.</para>
-
- <para>Return a Spmat object (tangent matrix), vec object (right hand
- side), tuple of Spmat objects (incompressible tangent matrix), or
- tuple of vec objects (incompressible right hand side).</para>
- </listitem>
-
- <listitem>
- <para>list(K, B) = gf_asm('stokes',MeshIm mim, MeshFem mf_u, MeshFem
- mf_p, MeshFem mf_d, vec nu) Assembly of matrices for the Stokes
- problem.</para>
-
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq3.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation></para>
-
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq4.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> with <emphasis>nu</emphasis>, the fluid's dynamic
- viscosity. </para>
-
- <para>On output, <literal>K</literal> is the usual linear elasticity
- stiffness matrix with <emphasis>lambda = 0</emphasis> and
- <literal>2.mu = nu</literal>. <literal>B</literal> is a matrix
- corresponding to <emphasis>\int p\nabla\cdot\phi</emphasis>.
- <literal>K</literal> and <literal>B</literal> are Spmat
- object's.</para>
- </listitem>
-
- <listitem>
- <para>A = gf_asm('helmholtz',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
- vec k) Assembly of the matrix for the Helmholtz problem. </para>
-
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq5.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> with <literal>k</literal> complex scalar.</para>
-
- <para>Return a Spmat object.</para>
- </listitem>
-
- <listitem>
- <para>A = gf_asm('bilaplacian',MeshIm mim, MeshFem mf_u, MeshFem mf_d,
- vec a) Assembly of the matrix for the Bilaplacian problem.</para>
-
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_asm_eq6.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> with <literal>a</literal> scalar.</para>
-
- <para>Return a Spmat object.</para>
- </listitem>
-
- <listitem>
- <para>list(HH, RR) = gf_asm('dirichlet',int bnum, MeshIm mim, MeshFem
- mf_u, MeshFem mf_d, mat H, vec R [, threshold]) Assembly of Dirichlet
- conditions of type <emphasis>h.u = r</emphasis>. Handle <emphasis>h.u
- = r</emphasis> where <literal>h</literal> is a square matrix (of any
- rank) whose size is equal to the dimension of the unkown
- <literal>u</literal>. This matrix is stored in <literal>H</literal>,
- one column per dof in <emphasis>mf_d</emphasis>, each column
- containing the values of the matrix <literal>h</literal> stored in
- fortran order: <emphasis>H(:,j) = [h11(x_j) h21(x_j) h12(x_j)
- h22(x_j)]</emphasis> if <literal>u</literal> is a 2D vector field. Of
- course, if the unknown is a scalar field, you just have to set
- <literal>H = ones(1, N)</literal>, where <literal>N</literal> is the
- number of dof of <literal>mf_d</literal>. This is basically the same
- than calling <emphasis>gf_asm('boundary_qu_term')</emphasis> for
- <literal>H</literal> and calling
- <emphasis>gf_asm('neumann')</emphasis> for <literal>R</literal>,
- except that this function tries to produce a 'better' (more diagonal)
- constraints matrix (when possible). See also
- <emphasis>gf_spmat_get(M,('Dirichlet_nullspace')</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>Q = gf_asm('boundary_qu_term',int boundary_num, MeshIm mim,
- MeshFem mf_u, MeshFem mf_d, mat q) Assembly of a boundary qu term.
- <literal>q</literal> should be be a <emphasis>[Qdim x Qdim x
- N]</emphasis> array, where <literal>N</literal> is the number of dof
- of <literal>mf_d</literal>, and <literal>Qdim</literal> is the
- dimension of the unkown <literal>u</literal> (that is set when
- creating the MeshFem).</para>
-
- <para>Return a Spmat object.</para>
- </listitem>
-
- <listitem>
- <para>list(Q, G, H, R, F) = gf_asm('pdetool_boundary_conditions',mf_u,
- mf_d, b, e[, f_expr]) Assembly of pdetool boundary conditions. `B` is
- the boundary matrix exported by pdetool, and `E` is the edges array.
- `f_expr` is an optionnal expression (or vector) for the volumic term.
- On return `Q, G, H, R, F` contain the assembled boundary conditions
- (`Q` and `H` are matrices), similar to the ones returned by the
- function ASSEMB from PDETOOL.</para>
- </listitem>
-
- <listitem>
- <para>list(...) = gf_asm('volumic' [,CVLST], expr [, mesh_ims,
- mesh_fems, data...]) Generic assembly procedure for volumic assembly.
- The expression <emphasis>expr</emphasis> is evaluated over the
- MeshFem's listed in the arguments (with optional data) and assigned to
- the output arguments. For details about the syntax of assembly
- expressions, please refer to the getfem user manual (or look at the
- file getfem_assembling.h in the getfem++ sources). For example, the L2
- norm of a field can be computed with <emphasis>gf_compute(MF, U,('L2
- norm')</emphasis> or with:</para>
-
- <para><emphasis>gf_asm('volumic','u=data(#1);
- V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
- </emphasis></para>
-
- <para>The Laplacian stiffness matrix can be evaluated with
- <emphasis>gf_asm('laplacian',mim, mf, A)</emphasis> or equivalently
- with:</para>
-
- <para><emphasis>gf_asm('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(
- :,i,:,i,j).a(j))', mim,mf, A);</emphasis></para>
- </listitem>
-
- <listitem>
- <para>list(...) = gf_asm('boundary',int bnum, string expr [, MeshIm
- mim, MeshFem mf, data...]) Generic boundary assembly. See the help for
- <emphasis>gf_asm('volumic')</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>Mi = gf_asm('interpolation_matrix',MeshFem mf, MeshFem mfi)
- Build the interpolation matrix from a MeshFem onto another
- MeshFem.</para>
-
- <para>Return a matrix <literal>Mi</literal>, such that <emphasis>V =
- Mi.U</emphasis> is equal to <emphasis>gf_compute(MF,
- U,('interpolate_on',mfi)</emphasis>. Useful for repeated
- interpolations. Note that this is just interpolation, no elementary
- integrations are involved here, and <literal>mfi</literal> has to be
- lagrangian. In the more general case, you would have to do a L2
- projection via the mass matrix. <literal>Mi</literal> is a Spmat
- object.</para>
- </listitem>
-
- <listitem>
- <para>Me = gf_asm('extrapolation_matrix',MeshFem mf, MeshFem mfe)
- Build the extrapolation matrix from a MeshFem onto another
- MeshFem.</para>
-
- <para>Return a matrix <literal>Me</literal>, such that <emphasis>V =
- Me.U</emphasis> is equal to <emphasis>gf_compute(MF,
- U,('extrapolate_on',mfe)</emphasis>. Useful for repeated
- extrapolations. <literal>Me</literal> is a Spmat object.</para>
- </listitem>
+ <listitem>
+ <para><literal>M = gf_asm('mass matrix', mesh_im mim, mesh_fem mf1[, mesh_fem mf2[, boundary_num]])</literal></para>
+
+ <para> Assembly of a mass matrix.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_asm('lsneuman matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</literal></para>
+
+ <para> Assembly of a level set Neuman matrix.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_asm('nlsgrad matrix', mesh_im mim, mesh_fem mf1, mesh_fem mf2, levelset ls)</literal></para>
+
+ <para> Assembly of a nlsgrad matrix.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_asm('stabilization patch matrix', @tm mesh, mesh_fem mf, mesh_im mim, real ratio, real h)</literal></para>
+
+ <para> Assembly of stabilization patch matrix .
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>L = gf_asm('laplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</literal></para>
+
+ <para> Assembly of the matrix for the Laplacian problem.
+
+ <latex style="text"><![CDATA[\nabla\cdot(a(x)\nabla u)]]></latex> with <literal>a</literal> a scalar.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Le = gf_asm('linear elasticity', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec lambda_d, vec mu_d)</literal></para>
+
+ <para> Assembles of the matrix for the linear (isotropic) elasticity problem.
+
+ <latex style="text"><![CDATA[\nabla\cdot(C(x):\nabla u)]]></latex>
+ with <latex style="text"><![CDATA[C]]></latex> defined via <literal>lambda_d</literal> and <literal>mu_d</literal>.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>TRHS = gf_asm('nonlinear elasticity', mesh_im mim, mesh_fem mf_u, vec U, string law, mesh_fem mf_d, mat params, {'tangent matrix'|'rhs'|'incompressible tangent matrix', mesh_fem mf_p, vec P|'incompressible rhs', mesh_fem mf_p, vec P})</literal></para>
+
+ <para> Assembles terms (tangent matrix and right hand side) for nonlinear elasticity.
+
+ The solution <literal>U</literal> is required at the current time-step. The <literal>law</literal>
+ may be choosen among:
+
+ - 'SaintVenant Kirchhoff':
+ Linearized law, should be avoided). This law has the two usual
+ Lame coefficients as parameters, called lambda and mu.
+ - 'Mooney Rivlin':
+ Only for incompressibility. This law has two parameters,
+ called C1 and C2.
+ - 'Ciarlet Geymonat':
+ This law has 3 parameters, called lambda, mu and gamma, with
+ gamma chosen such that gamma is in ]-lambda/2-mu, -mu[.
+
+ The parameters of the material law are described on the mesh_fem <literal>mf_d</literal>.
+ The matrix <literal>params</literal> should have <literal>nbdof(mf_d)</literal> columns, each row
+ correspounds to a parameter.
+
+ The last argument selects what is to be built: either the tangent
+ matrix, or the right hand side. If the incompressibility is
+ considered, it should be followed by a mesh_fem <literal>mf_p</literal>, for the
+ pression.
+
+ Return a spmat object (tangent matrix), vec object (right hand
+ side), tuple of spmat objects (incompressible tangent matrix), or
+ tuple of vec objects (incompressible right hand side).
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{K, B} = gf_asm('stokes', mesh_im mim, mesh_fem mf_u, mesh_fem mf_p, mesh_fem mf_d, vec nu)</literal></para>
+
+ <para> Assembly of matrices for the Stokes problem.
+
+ <latex style="text"><![CDATA[-\nu(x)\Delta u + \nabla p = 0]]></latex>
+ <latex style="text"><![CDATA[\nabla\cdot u = 0]]></latex>
+ with <latex style="text"><![CDATA[\nu]]></latex> (<literal>nu</literal>), the fluid's dynamic viscosity.
+
+ On output, <literal>K</literal> is the usual linear elasticity stiffness matrix with
+ <latex style="text"><![CDATA[\lambda = 0]]></latex> and
+ <latex style="text"><![CDATA[2\mu = \nu]]></latex>. <literal>B</literal> is a matrix
+ corresponding to <latex style="text"><![CDATA[\int p\nabla\cdot\phi]]></latex>.
+
+ <literal>K</literal> and <literal>B</literal> are spmat object's.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_asm('helmholtz', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec k)</literal></para>
+
+ <para> Assembly of the matrix for the Helmholtz problem.
+
+ <latex style="text"><![CDATA[\Delta u + k^2 u]]></latex> = 0, with <literal>k</literal> complex scalar.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_asm('bilaplacian', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a)</literal></para>
+
+ <para> Assembly of the matrix for the Bilaplacian problem.
+
+ <latex style="text"><![CDATA[\Delta(a(x)\Delta u) = 0]]></latex> with <literal>a</literal> scalar.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_asm('bilaplacian KL', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec a, vec nu)</literal></para>
+
+ <para> Assembly of the matrix for the Bilaplacian problem with Kirchoff-Love formulation.
+
+ <latex style="text"><![CDATA[\Delta(a(x)\Delta u) = 0]]></latex> with <literal>a</literal> scalar.
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_asm('volumic source', mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec fd)</literal></para>
+
+ <para> Assembly of a volumic source term.
+
+ Output a vector <literal>V</literal>, assembled on the mesh_fem <literal>mf_u</literal>, using the data
+ vector <literal>fd</literal> defined on the data mesh_fem <literal>mf_d</literal>. <literal>fd</literal> may be real or
+ complex-valued.
+
+ Return a vec object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_asm('boundary source', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, vec G)</literal></para>
+
+ <para> Assembly of a boundary source term.
+
+ <literal>G</literal> should be a [Qdim x N] matrix, where N is the number of dof
+ of <literal>mf_d</literal>, and Qdim is the dimension of the unkown u (that is set
+ when creating the mesh_fem).
+
+ Return a vec object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{HH, RR} = gf_asm('dirichlet', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat H, vec R [, threshold])</literal></para>
+
+ <para> Assembly of Dirichlet conditions of type <literal>h.u = r</literal>.
+
+ Handle <literal>h.u = r</literal> where h is a square matrix (of any rank) whose
+ size is equal to the dimension of the unkown u. This matrix is
+ stored in <literal>H</literal>, one column per dof in <literal>mf_d</literal>, each column containing
+ the values of the matrix h stored in fortran order:
+
+ .. math::
+
+ <literal>H(:,j) = [h11(x_j) h21(x_j) h12(x_j) h22(x_j)]</literal>
+
+ if u is a 2D vector field.
+
+ Of course, if the unknown is a scalar field, you just have to set
+ <literal>H = ones(1, N)</literal>, where N is the number of dof of <literal>mf_d</literal>.
+
+ This is basically the same than calling gf_asm('boundary qu term')
+ for <literal>H</literal> and calling gf_asm('neumann') for <literal>R</literal>, except that this
+ function tries to produce a 'better' (more diagonal) constraints
+ matrix (when possible).
+
+ See also gf_spmat_get(spmat S, 'Dirichlet_nullspace').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Q = gf_asm('boundary qu term',int boundary_num, mesh_im mim, mesh_fem mf_u, mesh_fem mf_d, mat q)</literal></para>
+
+ <para> Assembly of a boundary qu term.
+
+ <literal>q</literal> should be be a [Qdim x Qdim x N] array, where N is the number
+ of dof of <literal>mf_d</literal>, and Qdim is the dimension of the unkown u (that
+ is set when creating the mesh_fem).
+
+ Return a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{...} = gf_asm('volumic' [,CVLST], expr [, mesh_ims, mesh_fems, data...])</literal></para>
+
+ <para> Generic assembly procedure for volumic assembly.
+
+ The expression <literal>expr</literal> is evaluated over the mesh_fem's listed in the
+ arguments (with optional data) and assigned to the output arguments.
+ For details about the syntax of assembly expressions, please refer
+ to the getfem user manual (or look at the file getfem_assembling.h
+ in the getfem++ sources).
+
+ For example, the L2 norm of a field can be computed with::
+
+ gf_compute('L2 norm') or with:
+
+ gf_asm('volumic','u=data(#1); V()+=u(i).u(j).comp(Base(#1).Base(#1))(i,j)',mim,mf,U)
+
+ The Laplacian stiffness matrix can be evaluated with::
+
+ gf_asm('laplacian',mim, mf, A) or equivalently with:
+
+ gf_asm('volumic','a=data(#2);M(#1,#1)+=sym(comp(Grad(#1).Grad(#1).Base(#2))(:,i,:,i,j).a(j))', mim,mf, A);
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{...} = gf_asm('boundary', int bnum, string expr [, mesh_im mim, mesh_fem mf, data...])</literal></para>
+
+ <para> Generic boundary assembly.
+
+ See the help for gf_asm('volumic').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Mi = gf_asm('interpolation matrix', mesh_fem mf, mesh_fem mfi)</literal></para>
+
+ <para> Build the interpolation matrix from a mesh_fem onto another mesh_fem.
+
+ Return a matrix <literal>Mi</literal>, such that <literal>V = Mi.U</literal> is equal to
+ gf_compute('interpolate_on',mfi). Useful for repeated interpolations.
+ Note that this is just interpolation, no elementary integrations
+ are involved here, and <literal>mfi</literal> has to be lagrangian. In the more
+ general case, you would have to do a L2 projection via the mass
+ matrix.
+
+ <literal>Mi</literal> is a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Me = gf_asm('extrapolation matrix',mesh_fem mf, mesh_fem mfe)</literal></para>
+
+ <para> Build the extrapolation matrix from a mesh_fem onto another mesh_fem.
+
+ Return a matrix <literal>Me</literal>, such that <literal>V = Me.U</literal> is equal to
+ gf_compute('extrapolate_on',mfe). Useful for repeated
+ extrapolations.
+
+ <literal>Me</literal> is a spmat object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_asm('contact with friction Uzawa projection', int bnum, mesh_im mim, mesh_fem mf_u, vec U, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_obstacle, vec obstacle, scalar r [, {scalar coeff | mesh_fem mf_coeff, vec coeff} [, int option[, scalar alpha, vec W]]])</literal></para>
+
+ <para> Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact problems. Projects the term $-(\lambda - r (u_N-g))_-$ on the
+ finite element space of $\lambda$.
+
+ Return a vec object.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_asm('level set normal source term', int bnum, mesh_im mim, mesh_fem mf_u, mesh_fem mf_lambda, vec vec_lambda, mesh_fem mf_levelset, vec levelset)</literal></para>
+
+ <para> Performs an assembly of the source term represented by <literal>vec_lambda</literal>
+ on <literal>mf_lambda</literal> considered to be a component in the direction of the
+ gradient of a levelset function (normal to the levelset) of a vector
+ field defined on <literal>mf_u</literal> on the boundary <literal>bnum</literal>.
+
+ Return a vec object.
+
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_solve">gf_solve</link></member>
-
- <member><link linkend="gf_compute">gf_compute('interpolate
- on')</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_compute.xml b/interface/src/scilab/help/en_US/gf_compute.xml
index f28f68b..1be3830 100644
--- a/interface/src/scilab/help/en_US/gf_compute.xml
+++ b/interface/src/scilab/help/en_US/gf_compute.xml
@@ -9,236 +9,234 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_compute</refname>
-
- <refpurpose>Various computations involving the solution U of the finite
- element problem.</refpurpose>
+ <refpurpose>
+ Various computations involving the solution U to a finite element problem.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-N = gf_compute(mf, U, 'L2 norm', mesh_im MIM [,ivec CVLST])
-N = gf_compute(mf, U, 'H1 semi norm', mesh_im MIM [,CVLST])
-N = gf_compute(mf, U, 'H1 norm', mesh_im MIM [,ivec CVLST])
-N = gf_compute(mf, U, 'H2 semi norm', mesh_im MIM [,CVLST])
-N = gf_compute(mf, U, 'H2 norm', mesh_im MIM [,ivec CVLST])
-DU = gf_compute(mf, U, 'gradient', mesh_fem mfgrad)
-D2U = gf_compute(mf, U, 'hessian', mesh_fem mfhess)
-U2 = gf_compute(mf, U, 'interpolate on', mesh_fem mf2)
-U2 = gf_compute(mf, U, 'interpolate on', mesh_slice sl)
-[U2[,mf2,[,X[,Y[,Z]]]]] = gf_compute(mf,U,'interpolate on Q1 grid',
- {'regular h', hxyz | 'regular N',Nxyz | X[,Y[,Z]]})
-U2 = gf_compute(mf, U, 'extrapolate on', mesh_fem mf2)
-E = gf_compute(mf, U, 'error estimate', mesh_im MIM)
-gf_compute(mf, U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option])
- </synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'L2 norm', mesh_im mim[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'L2 dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 semi norm', mesh_im mim[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 semi dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H1 norm', mesh_im mim[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H2 semi norm', mesh_im mim[, mat CVids])</synopsis>
+ <synopsis>n = gf_compute(mesh_fem MF, vec U, 'H2 norm', mesh_im mim[, mat CVids])</synopsis>
+ <synopsis>DU = gf_compute(mesh_fem MF, vec U, 'gradient', mesh_fem mf_du)</synopsis>
+ <synopsis>HU = gf_compute(mesh_fem MF, vec U, 'hessian', mesh_fem mf_h)</synopsis>
+ <synopsis>UP = gf_compute(mesh_fem MF, vec U, 'eval on triangulated surface', int Nrefine, [vec CVLIST])</synopsis>
+ <synopsis>Ui = gf_compute(mesh_fem MF, vec U, 'interpolate on', {mesh_fem mfi | slice sli | vec pts})</synopsis>
+ <synopsis>Ue = gf_compute(mesh_fem MF, vec U, 'extrapolate on', mesh_fem mfe)</synopsis>
+ <synopsis>E = gf_compute(mesh_fem MF, vec U, 'error estimate', mesh_im mim)</synopsis>
+ <synopsis>E = gf_compute(mesh_fem MF, vec U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>
+ Various computations involving the solution U to a finite element problem.
+</para>
+ </refsection>
- <para>The first two arguments of this function are always mf and U, where U is a field defined on the mesh_fem mf.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>n = gf_compute(MF, U,('L2 norm',MeshIm mim[, mat CVids]) Compute
- the L2 norm of the (real or complex) field <literal>U</literal>. If
- <literal>CVids</literal> is given, the norm will be computed only on
- the listed convexes.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_compute(MF, U,('H1 semi norm',MeshIm mim[, mat CVids])
- Compute the L2 norm of grad(<literal>U</literal>). If
- <literal>CVids</literal> is given, the norm will be computed only on
- the listed convexes.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_compute(MF, U,('H1 norm',MeshIm mim[, mat CVids]) Compute
- the H1 norm of <literal>U</literal>. If <literal>CVids</literal> is
- given, the norm will be computed only on the listed convexes.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_compute(MF, U,('H2 semi norm',MeshIm mim[, mat CVids])
- Compute the L2 norm of D^2(<literal>U</literal>). If
- <literal>CVids</literal> is given, the norm will be computed only on
- the listed convexes.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_compute(MF, U,('H2 norm',MeshIm mim[, mat CVids]) Compute
- the H2 norm of <literal>U</literal>. If <literal>CVids</literal> is
- given, the norm will be computed only on the listed convexes.</para>
- </listitem>
-
- <listitem>
- <para>DU = gf_compute(MF, U,('gradient',MeshFem mf_du) Compute the
- gradient of the field <literal>U</literal> defined on MeshFem
- <literal>mf_du</literal>. The gradient is interpolated on the MeshFem
- <literal>mf_du</literal>, and returned in <literal>DU</literal>. For
- example, if <literal>U</literal> is defined on a P2 MeshFem,
- <literal>DU</literal> should be evaluated on a P1-discontinuous
- MeshFem. <literal>mf</literal> and <literal>mf_du</literal> should
- share the same mesh. <literal>U</literal> may have any number of
- dimensions (i.e. this function is not restricted to the gradient of
- scalar fields, but may also be used for tensor fields). However the
- last dimension of <literal>U</literal> has to be equal to the number
- of dof of <literal>mf</literal>. For example, if <literal>U</literal>
- is a <emphasis>[3x3xNmf]</emphasis> array (where
- <literal>Nmf</literal> is the number of dof of <literal>mf</literal>),
- <literal>DU</literal> will be a <literal>[Nx3x3[xQ]xNmf_du]</literal>
- array, where <literal>N</literal> is the dimension of the mesh,
- <literal>Nmf_du</literal> is the number of dof of
- <literal>mf_du</literal>, and the optional <literal>Q</literal>
- dimension is inserted if <emphasis>Qdim_mf != Qdim_mf_du</emphasis>,
- where <literal>Qdim_mf</literal> is the Qdim of <literal>mf</literal>
- and <literal>Qdim_mf_du</literal> is the Qdim of
- <literal>mf_du</literal>.</para>
- </listitem>
-
- <listitem>
- <para>HU = gf_compute(MF, U,('hessian',MeshFem mf_h) Compute the
- hessian of the field <literal>U</literal> defined on MeshFem
- <literal>mf_h</literal>. See also <emphasis>gf_compute(MF,
- U,('gradient', MeshFem mf_du)</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>Ui = gf_compute(MF, U,('interpolate_on',list(MeshFem mfi | Slice
- sli)) Interpolate a field on another MeshFem or a Slice.</para>
-
- <itemizedlist>
- <listitem>
- <para>Interpolation on another MeshFem <literal>mfi</literal>:
- <literal>mfi</literal> has to be Lagrangian. If
- <literal>mf</literal> and <literal>mfi</literal> share the same
- mesh object, the interpolation will be much faster.</para>
- </listitem>
-
- <listitem>
- <para>Interpolation on a Slice <phrase>sli</phrase>: this is
- similar to interpolation on a refined P1-discontinuous mesh, but
- it is much faster.</para>
- </listitem>
- </itemizedlist>
-
- <para>This can also be used with
- <emphasis>gf_slice('points')</emphasis> to obtain field values at a
- given set of points. See also
- <emphasis>gf_asm('interpolation_matrix')</emphasis></para>
- </listitem>
-
- <listitem>
- <para>Ue = gf_compute(MF, U,('extrapolate_on',MeshFem mfe) Extrapolate
- a field on another MeshFem. If the mesh of <literal>mfe</literal> is
- stricly included in the mesh of <literal>mf</literal>, this function
- does stricly the same job as <emphasis>gf_compute(MF,
- U,('interpolate_on')</emphasis>. However, if the mesh of
- <literal>mfe</literal> is not exactly included in
- <literal>mf</literal> (imagine interpolation between a curved refined
- mesh and a coarse mesh), then values which are slightly outside
- <literal>mf</literal> will be extrapolated. See also
- <emphasis>gf_asm('extrapolation_matrix')</emphasis></para>
- </listitem>
-
- <listitem>
- <para>E = gf_compute(MF, U,('error_estimate',MeshIm mim) Compute an a
- posteriori error estimation. Currently there is only one which is
- available:</para>
-
- <para>for each convex, the jump of the normal derivative is integrated
- on its faces.</para>
- </listitem>
-
- <listitem>
- <para>[U2[,MF2,[,X[,Y[,Z]]]]] = gf_compute(MF,U,'interpolate on Q1
- grid',{'regular h', hxyz | 'regular N',Nxyz |X[,Y[,Z]]} Creates a
- cartesian Q1 mesh fem and interpolates U on it. The returned field U2
- is organized in a matrix such that in can be drawn via the MATLAB
- command 'pcolor'. The first dimension is the Qdim of
- <literal>MF</literal> (i.e. 1 if U is a scalar field). Example
- (<literal>mf_u</literal> is a 2D mesh_fem):</para>
-
- <programlisting role="example"><![CDATA[
-Uq = gf_compute(mf_u, U, 'interpolate on Q1 grid', 'regular h', [.05, .05]);
-pcolor(squeeze(Uq(1,:,:)));
- ]]></programlisting>
- </listitem>
-
- <listitem>
- <para>E = gf_compute(MF, U, 'mesh edges deformation', N [,vec or mat
- CVLIST]) [OBSOLETE FUNCTION! will be removed in a future
- release]</para>
-
- <para>Evaluates the deformation of the mesh caused by the field
- <literal>U</literal> (for a 2D mesh, <literal>U</literal> must be a
- <emphasis>[2 x nb_dof]</emphasis> matrix). <literal>N</literal> is the
- refinment level (N>=2) of the edges. <literal>CVLIST</literal> can
- be used to restrict the computation to the edges of the listed
- convexes (if <literal>CVLIST</literal> is a row vector), or to
- restrict the computations to certain faces of certain convexes when
- <literal>CVLIST</literal> is a two-rows matrix, the first row
- containing convex numbers and the second face numbers.</para>
- </listitem>
-
- <listitem>
- <para>UP = gf_compute(MF, U, 'eval on triangulated surface', int
- Nrefine,[vec CVLIST]) [OBSOLETE FUNCTION! will be removed in a future
- release]</para>
-
- <para>Utility function designed for 2D triangular meshes: returns a
- list of triangles coordinates with interpolated <literal>U</literal>
- values. This can be used for the accurate visualization of data
- defined on a discontinous high order element.</para>
-
- <para>On output, the six first rows of <literal>UP</literal> contains
- the triangle coordinates, and the others rows contain the interpolated
- values of <literal>U</literal> (one for each triangle vertex)
- <literal>CVLIST</literal> may indicate the list of convex number that
- should be consider, if not used then all the mesh convexes will be
- used. <literal>U</literal> should be a row vector.</para>
- </listitem>
-
- <listitem>
- <para>gf_compute(mf, U, 'convect', mesh_fem mf_v, vec V,
- scalar dt, int nt, string option]) Compute a convection
- of <literal>U</literal> with regards to a steady state
- velocity field <literal>V</literal> with a Characteristic-Galerkin method. This
- method is restricted to pure Lagrange fems for U. <literal>mf_v</literal> should represent
- a continuous finite element method. <literal>dt</literal> is the integration time and <literal>nt</literal>
- is the number of integration step on the caracteristics. <literal>option</literal> is an
- option for the part of the boundary where there is a re-entrant convection.
- <literal>option = 'extrapolation'</literal> for an extrapolation on the nearest element
- or <literal>option = 'unchanged'</literal> for a constant value on that boundary.
- This method is rather dissipative, but stable.</para>
- </listitem>
- </itemizedlist>
- </refsection>
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'L2 norm', mesh_im mim[, mat CVids])</literal></para>
- <refsection>
- <title>Examples</title>
+ <para> Compute the L2 norm of the (real or complex) field <literal>U</literal>.
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'L2 dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</literal></para>
+
+ <para> Compute the L2 distance between <literal>U</literal> and <literal>U2</literal>.
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 semi norm', mesh_im mim[, mat CVids])</literal></para>
+
+ <para> Compute the L2 norm of grad(<literal>U</literal>).
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 semi dist', mesh_im mim, mesh_fem mf2, vec U2[, mat CVids])</literal></para>
- <para>Using the error estimate to refine the worst convexes: </para>
- <programlisting role="example"><![CDATA[
-E = gf_compute(mf, U, 'error_estimate', mim);
-gf_mesh_set(m, 'refine', find(E < 1e-3));
- ]]></programlisting>
+ <para> Compute the semi H1 distance between <literal>U</literal> and <literal>U2</literal>.
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H1 norm', mesh_im mim[, mat CVids])</literal></para>
+
+ <para> Compute the H1 norm of <literal>U</literal>.
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H2 semi norm', mesh_im mim[, mat CVids])</literal></para>
+
+ <para> Compute the L2 norm of D^2(<literal>U</literal>).
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_compute(mesh_fem MF, vec U, 'H2 norm', mesh_im mim[, mat CVids])</literal></para>
+
+ <para> Compute the H2 norm of <literal>U</literal>.
+
+ If <literal>CVids</literal> is given, the norm will be computed only on the listed
+ convexes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DU = gf_compute(mesh_fem MF, vec U, 'gradient', mesh_fem mf_du)</literal></para>
+
+ <para> Compute the gradient of the field <literal>U</literal> defined on mesh_fem <literal>mf_du</literal>.
+
+ The gradient is interpolated on the mesh_fem <literal>mf_du</literal>, and returned in
+ <literal>DU</literal>. For example, if <literal>U</literal> is defined on a P2 mesh_fem, <literal>DU</literal> should be
+ evaluated on a P1-discontinuous mesh_fem. <literal>mf</literal> and <literal>mf_du</literal> should
+ share the same mesh.
+
+ <literal>U</literal> may have any number of dimensions (i.e. this function is not
+ restricted to the gradient of scalar fields, but may also be used
+ for tensor fields). However the last dimension of <literal>U</literal> has to be
+ equal to the number of dof of <literal>mf</literal>. For example, if <literal>U</literal> is a
+ [3x3xNmf] array (where Nmf is the number of dof of <literal>mf</literal>), <literal>DU</literal> will
+ be a [Nx3x3[xQ]xNmf_du] array, where N is the dimension of the mesh,
+ Nmf_du is the number of dof of <literal>mf_du</literal>, and the optional Q dimension
+ is inserted if <literal>Qdim_mf != Qdim_mf_du</literal>, where Qdim_mf is the Qdim of
+ <literal>mf</literal> and Qdim_mf_du is the Qdim of <literal>mf_du</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>HU = gf_compute(mesh_fem MF, vec U, 'hessian', mesh_fem mf_h)</literal></para>
+
+ <para> Compute the hessian of the field <literal>U</literal> defined on mesh_fem <literal>mf_h</literal>.
+
+ See also gf_compute('gradient', mesh_fem mf_du).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>UP = gf_compute(mesh_fem MF, vec U, 'eval on triangulated surface', int Nrefine, [vec CVLIST])</literal></para>
+
+ <para> [OBSOLETE FUNCTION! will be removed in a future release]
+ Utility function designed for 2D triangular meshes : returns a list
+ of triangles coordinates with interpolated U values. This can be
+ used for the accurate visualization of data defined on a
+ discontinous high order element. On output, the six first rows of UP
+ contains the triangle coordinates, and the others rows contain the
+ interpolated values of U (one for each triangle vertex) CVLIST may
+ indicate the list of convex number that should be consider, if not
+ used then all the mesh convexes will be used. U should be a row
+ vector.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Ui = gf_compute(mesh_fem MF, vec U, 'interpolate on', {mesh_fem mfi | slice sli | vec pts})</literal></para>
+
+ <para> Interpolate a field on another mesh_fem or a slice or a list of points.
+
+ - Interpolation on another mesh_fem <literal>mfi</literal>:
+ <literal>mfi</literal> has to be Lagrangian. If <literal>mf</literal> and <literal>mfi</literal> share the same
+ mesh object, the interpolation will be much faster.
+ - Interpolation on a slice <literal>sli</literal>:
+ this is similar to interpolation on a refined P1-discontinuous
+ mesh, but it is much faster. This can also be used with
+ gf_slice('points') to obtain field values at a given set of
+ points.
+ - Interpolation on a set of points <literal>pts</literal>
+
+ See also gf_asm('interpolation matrix')
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Ue = gf_compute(mesh_fem MF, vec U, 'extrapolate on', mesh_fem mfe)</literal></para>
+
+ <para> Extrapolate a field on another mesh_fem.
+
+ If the mesh of <literal>mfe</literal> is stricly included in the mesh of <literal>mf</literal>, this
+ function does stricly the same job as gf_compute('interpolate_on').
+ However, if the mesh of <literal>mfe</literal> is not exactly included in <literal>mf</literal>
+ (imagine interpolation between a curved refined mesh and a coarse
+ mesh), then values which are outside <literal>mf</literal> will be
+ extrapolated.
+
+ See also gf_asm('extrapolation matrix')
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_compute(mesh_fem MF, vec U, 'error estimate', mesh_im mim)</literal></para>
+
+ <para> Compute an a posteriori error estimate.
+
+ Currently there is only one which is available: for each convex,
+ the jump of the normal derivative is integrated on its faces.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_compute(mesh_fem MF, vec U, 'convect', mesh_fem mf_v, vec V, scalar dt, int nt[, string option])</literal></para>
+
+ <para> Compute a convection of <literal>U</literal> with regards to a steady state velocity
+ field <literal>V</literal> with a Characteristic-Galerkin method. This
+ method is restricted to pure Lagrange fems for U. <literal>mf_v</literal> should represent
+ a continuous finite element method. <literal>dt</literal> is the integration time and <literal>nt</literal>
+ is the number of integration step on the caracteristics. <literal>option</literal> is an
+ option for the part of the boundary where there is a re-entrant convection.
+ <literal>option = 'extrapolation'</literal> for an extrapolation on the nearest element
+ or <literal>option = 'unchanged'</literal> for a constant value on that boundary.
+ This method is rather dissipative, but stable.
+
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh">gf_mesh</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_cvstruct_get.xml b/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
index 86aa6bf..0943602 100644
--- a/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
+++ b/interface/src/scilab/help/en_US/gf_cvstruct_get.xml
@@ -9,54 +9,105 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_cvstruct_get</refname>
+ <refpurpose> General function for querying information about convex_structure objects.
- <refpurpose>General function for querying information about
- convex_structure objects.</refpurpose>
+ The convex structures are internal structures of getfem++. They do not
+ contain points positions. These structures are recursive, since the faces
+ of a convex structures are convex structures.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I=gf_cvstruct_get(cvstruct cs, 'nbpts')
-int I=gf_cvstruct_get(cvstruct cs, 'dim')
-cvstruct cs=gf_cvstruct_get(cvstruct cs, 'basic structure')
-cvstruct cs=gf_cvstruct_get(cvstruct cs, 'face', int F)
-ivec I=gf_cvstruct_get(cvstruct cs, 'facepts', int F)
-</synopsis>
+ <synopsis>n = gf_cvstruct_get(cvstruct CVS, 'nbpts')</synopsis>
+ <synopsis>d = gf_cvstruct_get(cvstruct CVS, 'dim')</synopsis>
+ <synopsis>cs = gf_cvstruct_get(cvstruct CVS, 'basic structure')</synopsis>
+ <synopsis>cs = gf_cvstruct_get(cvstruct CVS, 'face', int F)</synopsis>
+ <synopsis>I = gf_cvstruct_get(cvstruct CVS, 'facepts', int F)</synopsis>
+ <synopsis>s = gf_cvstruct_get(cvstruct CVS, 'char')</synopsis>
+ <synopsis>gf_cvstruct_get(cvstruct CVS, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about convex_structure objects.
- <para>The convex structures are internal structures of getfem++. They do not contain points positions. These structures are recursive,
- since the faces of a convex structures are convex structures. The dimension is returned by gf_cvstruct_get(cs, 'dim'),
- and the number of points is given by gf_cvstruct_get(cs, 'nbpts'). </para>
- <para>Note that a triangle structure may have 6 points, if it is a structure associated to a 'GT_PK(2,2)' geometric transformation.
- But the canonical 3-noded triangle structure would be returned by gf_cvstruct_get(cs, 'basic structure').
- The structure of the ith face can be obtained with gf_cvstruct_get(cs, 'face', i), and the indices of its points
- are returned by gf_cvstruct_get(cs, 'facepts', i).</para>
+ The convex structures are internal structures of getfem++. They do not
+ contain points positions. These structures are recursive, since the faces
+ of a convex structures are convex structures.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>n = gf_cvstruct_get(cvstruct CVS, 'nbpts')</literal></para>
+
+ <para> Get the number of points of the convex structure.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>d = gf_cvstruct_get(cvstruct CVS, 'dim')</literal></para>
+
+ <para> Get the dimension of the convex structure.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>cs = gf_cvstruct_get(cvstruct CVS, 'basic structure')</literal></para>
+
+ <para> Get the simplest convex structure.
+
+ For example, the 'basic structure' of the 6-node triangle, is the
+ canonical 3-noded triangle.
+ </para>
+ </listitem>
- <para>n = gf_cvstruct_get(cs,'nbpts'): Get the number of points of the
- convex structure.</para>
+ <listitem>
+ <para><literal>cs = gf_cvstruct_get(cvstruct CVS, 'face', int F)</literal></para>
- <para>d = gf_cvstruct_get(cs,'dim'): Get the dimension of the convex
- structure</para>
+ <para> Return the convex structure of the face <literal>F</literal>.
+ </para>
+ </listitem>
- <para>cs = gf_cvstruct_get(cs,'basic structure'): Get the simplest convex
- structure. For example, the 'basic structure' of the 6-node triangle, is
- the canonical 3-noded triangle.</para>
+ <listitem>
+ <para><literal>I = gf_cvstruct_get(cvstruct CVS, 'facepts', int F)</literal></para>
- <para>I = gf_cvstruct_get(cs,'facepts',int F): Return the list of point
- indices for the face `F`.</para>
+ <para> Return the list of point indices for the face <literal>F</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_cvstruct_get(cvstruct CVS, 'char')</literal></para>
+
+ <para> Output a string description of the cvstruct.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_cvstruct_get(cvstruct CVS, 'display')</literal></para>
+
+ <para> displays a short summary for a cvstruct object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_geotrans">gf_geotrans</link></member>
- <member><link linkend="gf_mesh_get">gf_mesh_get(M,'cvstruct')</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
+
+ <refsection>
+ <title>Authors</title>
+ <para>Y. Collette</para>
+ </refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_delete.xml b/interface/src/scilab/help/en_US/gf_delete.xml
index 69f57f9..962007e 100644
--- a/interface/src/scilab/help/en_US/gf_delete.xml
+++ b/interface/src/scilab/help/en_US/gf_delete.xml
@@ -9,41 +9,64 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_delete</refname>
+ <refpurpose> Delete an existing getfem object from memory (mesh, mesh_fem, etc.).
- <refpurpose>Delete an existing getfem object from memory</refpurpose>
+ SEE ALSO:
+ gf_workspace, gf_mesh, gf_mesh_fem.
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_delete(hobj I,[hobj J,hobj K,...])
- </synopsis>
+ <synopsis>gf_delete(I[, J, K,...])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Delete an existing getfem object from memory (mesh, mesh_fem, etc.).
- <para>gf_delete(hobj I,[hobj J, hobj K,...]) : delete an existing getfem object from memory. I should be a descriptor given by gf_mesh(), gf_mesh_im(), gf_slice() etc.</para>
- <para>Note that if another object uses I, then object I will be deleted only when both have been asked for deletion.</para>
- <para>Only objects listed in the output of gf_workspace('stats') can be deleted (for example gf_fem objects cannot be destroyed).</para>
- <para>You may also use gf_workspace('clear all') to erase everything at once.</para>
- <para>remark: instead of passing a list of handles, you may pass an array of object handles. </para>
+ SEE ALSO:
+ gf_workspace, gf_mesh, gf_mesh_fem.
+ </para>
</refsection>
<refsection>
- <title>See Also</title>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>gf_delete(I[, J, K,...])</literal></para>
+
+ <para>
+ I should be a descriptor given by gf_mesh(),
+ gf_mesh_im(), gf_slice() etc.
+
+ Note that if another object uses I, then object I will be deleted only
+ when both have been asked for deletion.
+
+ Only objects listed in the output of gf_workspace('stats') can be
+ deleted (for example gf_fem objects cannot be destroyed).
+
+ You may also use gf_workspace('clear all') to erase everything at
+ once.
+
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </refsection>
+ <refsection>
+ <title>See Also</title>
<simplelist type="inline">
- <member><link linkend="gf_workspace">gf_workspace</link></member>
- <member><link linkend="gf_mesh">gf_mesh</link></member>
- <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_eltm.xml b/interface/src/scilab/help/en_US/gf_eltm.xml
index ccfd837..e5c537d 100644
--- a/interface/src/scilab/help/en_US/gf_eltm.xml
+++ b/interface/src/scilab/help/en_US/gf_eltm.xml
@@ -9,83 +9,114 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_eltm</refname>
-
- <refpurpose>get a descriptor</refpurpose>
+ <refpurpose>
+ This object represents a type of elementary matrix. In order to obtain a
+ numerical value of these matrices, see gf_mesh_im_get(mesh_im MI, 'eltm').
+
+ If you have very particular assembling needs, or if you just want to check
+ the content of an elementary matrix, this function might be useful. But
+ the generic assembly abilities of gf_asm(...) should suit most needs.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>ELTM = gf_eltm(elt_matrix_type, args..)</synopsis>
+ <synopsis>E = gf_eltm('base', fem FEM)</synopsis>
+ <synopsis>E = gf_eltm('grad', fem FEM)</synopsis>
+ <synopsis>E = gf_eltm('hessian', fem FEM)</synopsis>
+ <synopsis>E = gf_eltm('normal')</synopsis>
+ <synopsis>E = gf_eltm('grad_geotrans')</synopsis>
+ <synopsis>E = gf_eltm('grad_geotrans_inv')</synopsis>
+ <synopsis>E = gf_eltm('product', eltm A, eltm B)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for eltm objects.</para>
- <itemizedlist>
- <listitem>
- <para>gf_eltm('base', Fem FEM) return a descriptor for the integration
- of shape functions on elements, using the Fem <literal>FEM</literal>.
- </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('grad', Fem FEM) return a descriptor for the integration
- of the gradient of shape functions on elements, using the Fem
- <literal>FEM</literal>. </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('hessian', Fem FEM) return a descriptor for the
- integration of the hessian of shape functions on elements, using the
- Fem <literal>FEM</literal>. </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('normal') return a descriptor for the unit normal of
- convex faces. </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('grad_geotrans') return a descriptor to the gradient
- matrix of the geometric transformation. </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('grad_geotrans_inv') return a descriptor to the inverse
- of the gradient matrix of the geometric transformation (this is rarely
- used). </para>
- </listitem>
-
- <listitem>
- <para>gf_eltm('product', Eltm A, Eltm B) return a descriptor for the
- integration of the tensorial product of elementary matrices
- <literal>A</literal> and <literal>B</literal>. In order to obtain a
- numerical value of theses matrices, see
- <emphasis>gf_mesh_im_get(MIM,('eltm').</emphasis></para>
- </listitem>
- </itemizedlist>
+ <para>
+ This object represents a type of elementary matrix. In order to obtain a
+ numerical value of these matrices, see gf_mesh_im_get(mesh_im MI, 'eltm').
+
+ If you have very particular assembling needs, or if you just want to check
+ the content of an elementary matrix, this function might be useful. But
+ the generic assembly abilities of gf_asm(...) should suit most needs.
+</para>
</refsection>
<refsection>
- <title>Examples</title>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>E = gf_eltm('base', fem FEM)</literal></para>
+
+ <para> return a descriptor for the integration of shape functions on
+ elements, using the fem <literal>FEM</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('grad', fem FEM)</literal></para>
+
+ <para> return a descriptor for the integration of the gradient of shape
+ functions on elements, using the fem <literal>FEM</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('hessian', fem FEM)</literal></para>
+
+ <para> return a descriptor for the integration of the hessian of shape
+ functions on elements, using the fem <literal>FEM</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('normal')</literal></para>
- <programlisting role="example">
- Add an example here
- </programlisting>
+ <para> return a descriptor for the unit normal of convex faces.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('grad_geotrans')</literal></para>
+
+ <para> return a descriptor to the gradient matrix of the geometric
+ transformation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('grad_geotrans_inv')</literal></para>
+
+ <para> return a descriptor to the inverse of the gradient matrix of the
+ geometric transformation (this is rarely used).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>E = gf_eltm('product', eltm A, eltm B)</literal></para>
+
+ <para> return a descriptor for the integration of the tensorial product of
+ elementary matrices <literal>A</literal> and <literal>B</literal>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_fem.xml b/interface/src/scilab/help/en_US/gf_fem.xml
index a20e225..694a933 100644
--- a/interface/src/scilab/help/en_US/gf_fem.xml
+++ b/interface/src/scilab/help/en_US/gf_fem.xml
@@ -9,204 +9,126 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_fem</refname>
-
- <refpurpose>Returns a handle F to one of the various Finite Elements
- Method defined in Getfem.</refpurpose>
+ <refpurpose> This object represents a finite element method on a reference element.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>F=gf_fem(string FEM_NAME) </synopsis>
+ <synopsis>F = gf_fem('interpolated_fem', mesh_fem mf, mesh_im mim, [ivec blocked_dof])</synopsis>
+ <synopsis>F = gf_fem(string fem_name)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for fem objects.</para>
- <para>The fem_name should contain a description of the finite element method. Please refer to the getfem++ manual
- (especially <link linkend="http://www-gmm.insa-toulouse.fr/getfem/doc">the description of finite element and integration methods</link>)
- for a complete reference. </para>
-
- <para>Here is a list of some of them:</para>
-
- <itemizedlist>
- <listitem>
- <para>FEM_PK(n,k) classical Lagrange element Pk on a simplex of
- dimension <literal>n</literal>.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_DISCONTINUOUS(N,K[,alpha]) discontinuous Lagrange element
- Pk on a simplex of dimension <literal>n</literal>.</para>
- </listitem>
-
- <listitem>
- <para>FEM_QK(n,k) classical Lagrange element Qk on quadrangles,
- hexahedrons etc.</para>
- </listitem>
-
- <listitem>
- <para>FEM_QK_DISCONTINUOUS(n,k[,alpha]) discontinuous Lagrange element
- Qk on quadrangles, hexahedrons etc.</para>
- </listitem>
-
- <listitem>
- <para>FEM_Q2_INCOMPLETE incomplete 2D Q2 element with 8 dof
- (serendipity Quad 8 element).</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_PRISM(n,k) classical Lagrange element Pk on a
- prism.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_PRISM_DISCONTINUOUS(n,k[,alpha]) classical discontinuous
- Lagrange element Pk on a prism.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_WITH_CUBIC_BUBBLE(n,k) classical Lagrange element Pk on a
- simplex with an additional volumic bubble function.</para>
- </listitem>
-
- <listitem>
- <para>FEM_P1_NONCONFORMING non-conforming P1 method on a
- triangle.</para>
- </listitem>
-
- <listitem>
- <para>FEM_P1_BUBBLE_FACE(n) P1 method on a simplex with an additional
- bubble function on face 0.</para>
- </listitem>
-
- <listitem>
- <para>FEM_P1_BUBBLE_FACE_LAG P1 method on a simplex with an additional
- lagrange dof on face 0.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_HIERARCHICAL(n,k) PK element with a hierarchical
- basis.</para>
- </listitem>
-
- <listitem>
- <para>FEM_QK_HIERARCHICAL(n,k) QK element with a hierarchical
- basis</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_PRISM_HIERARCHICAL(n,k) PK element on a prism with a
- hierarchical basis.</para>
- </listitem>
-
- <listitem>
- <para>FEM_STRUCTURED_COMPOSITE(FEM,k) Composite fem on a grid with
- <literal>k</literal> divisions.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_HIERARCHICAL_COMPOSITE(n,k,s) Pk composite element on a
- grid with <literal>s</literal> subdivisions and with a hierarchical
- basis.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PK_FULL_HIERARCHICAL_COMPOSITE(n,k,s) Pk composite element
- with <literal>s</literal> subdivisions and a hierarchical basis on
- both degree and subdivision.</para>
- </listitem>
-
- <listitem>
- <para>FEM_PRODUCT(FEM1,FEM2) tensorial product of two polynomial
- elements.</para>
- </listitem>
-
- <listitem>
- <para>FEM_HERMITE(n) Hermite element P3 on a simplex of dimension `n =
- 1, 2, 3`.</para>
- </listitem>
-
- <listitem>
- <para>FEM_ARGYRIS Argyris element P5 on the triangle.</para>
- </listitem>
-
- <listitem>
- <para>FEM_HCT_TRIANGLE Hsieh-Clough-Tocher element on the triangle
- (composite P3 element which is C^1), should be used with
- IM_HCT_COMPOSITE() integration method.</para>
- </listitem>
-
- <listitem>
- <para>FEM_QUADC1_COMPOSITE Quadrilateral element, composite P3 element
- and C^1 (16 dof).</para>
- </listitem>
-
- <listitem>
- <para>FEM_REDUCED_QUADC1_COMPOSITE Quadrilateral element, composite P3
- element and C^1 (12 dof).</para>
- </listitem>
-
- <listitem>
- <para>FEM_RT0(n) Raviart-Thomas element of order 0 on a simplex of
- dimension <literal>n</literal>.</para>
- </listitem>
-
- <listitem>
- <para>FEM_NEDELEC(n) Nedelec edge element of order 0 on a simplex of
- dimension <literal>n</literal>.</para>
- </listitem>
- </itemizedlist>
-
- <para>Of course, you have to ensure that the selected fem is compatible
- with the geometric transformation: a Pk fem has no meaning on a
- quadrangle.</para>
-
- <itemizedlist>
- <listitem>
- <para>Fem = gf_fem('interpolated_fem', MeshFem mf, MeshIm mim, [ivec
- blocked_dof]) Build a special Fem which is interpolated from another
- MeshFem. Using this special finite element, it is possible to
- interpolate a given MeshFem <literal>mf</literal> on another mesh,
- given the integration method <literal>mim</literal> that will be used
- on this mesh. Note that this finite element may be quite slow, and
- eats much memory.</para>
- </listitem>
- </itemizedlist>
+ <para> This object represents a finite element method on a reference element.
+</para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <para>To get a fem of degree 2 on a quadrangle: </para>
+ <title>Command list</title>
- <programlisting role="example"><![CDATA[
-fem = gf_fem('FEM_QK(2,2)');
-or
-fem = gf_fem('FEM_PRODUCT(FEM_PK(1,1),FEM_PK(1,1))');
- ]]></programlisting>
+ <itemizedlist>
+ <listitem>
+ <para><literal>F = gf_fem('interpolated_fem', mesh_fem mf, mesh_im mim, [ivec blocked_dof])</literal></para>
+
+ <para> Build a special fem which is interpolated from another mesh_fem.
+
+ Using this special finite element, it is possible to interpolate a given
+ mesh_fem <literal>mf</literal> on another mesh, given the integration method <literal>mim</literal> that will
+ be used on this mesh.
+
+ Note that this finite element may be quite slow, and eats much
+ memory.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>F = gf_fem(string fem_name)</literal></para>
+
+ <para> The <literal>fem_name</literal> should contain a description of the finite element
+ method. Please refer to the getfem++ manual (especially the
+ description of finite element and integration methods) for a complete
+ reference. Here is a list of some of them:
+
+ - FEM_PK(n,k) :
+ classical Lagrange element Pk on a simplex of dimension <literal>n</literal>.
+ - FEM_PK_DISCONTINUOUS(n,k[,alpha]) :
+ discontinuous Lagrange element Pk on a simplex of dimension <literal>n</literal>.
+ - FEM_QK(n,k) :
+ classical Lagrange element Qk on quadrangles, hexahedrons etc.
+ - FEM_QK_DISCONTINUOUS(n,k[,alpha]) :
+ discontinuous Lagrange element Qk on quadrangles, hexahedrons etc.
+ - FEM_Q2_INCOMPLETE :
+ incomplete 2D Q2 element with 8 dof (serendipity Quad 8 element).
+ - FEM_PK_PRISM(n,k) :
+ classical Lagrange element Pk on a prism of dimension <literal>n</literal>.
+ - FEM_PK_PRISM_DISCONTINUOUS(n,k[,alpha]) :
+ classical discontinuous Lagrange element Pk on a prism.
+ - FEM_PK_WITH_CUBIC_BUBBLE(n,k) :
+ classical Lagrange element Pk on a simplex with an additional
+ volumic bubble function.
+ - FEM_P1_NONCONFORMING :
+ non-conforming P1 method on a triangle.
+ - FEM_P1_BUBBLE_FACE(n) :
+ P1 method on a simplex with an additional bubble function on face 0.
+ - FEM_P1_BUBBLE_FACE_LAG :
+ P1 method on a simplex with an additional lagrange dof on face 0.
+ - FEM_PK_HIERARCHICAL(n,k) :
+ PK element with a hierarchical basis.
+ - FEM_QK_HIERARCHICAL(n,k) :
+ QK element with a hierarchical basis
+ - FEM_PK_PRISM_HIERARCHICAL(n,k) :
+ PK element on a prism with a hierarchical basis.
+ - FEM_STRUCTURED_COMPOSITE(fem f,k) :
+ Composite fem <literal>f</literal> on a grid with <literal>k</literal> divisions.
+ - FEM_PK_HIERARCHICAL_COMPOSITE(n,k,s) :
+ Pk composite element on a grid with <literal>s</literal> subdivisions and with a
+ hierarchical basis.
+ - FEM_PK_FULL_HIERARCHICAL_COMPOSITE(n,k,s) :
+ Pk composite element with <literal>s</literal> subdivisions and a hierarchical basis
+ on both degree and subdivision.
+ - FEM_PRODUCT(A,B) :
+ tensorial product of two polynomial elements.
+ - FEM_HERMITE(n) :
+ Hermite element P3 on a simplex of dimension <literal>n = 1, 2, 3</literal>.
+ - FEM_ARGYRIS :
+ Argyris element P5 on the triangle.
+ - FEM_HCT_TRIANGLE :
+ Hsieh-Clough-Tocher element on the triangle (composite P3 element
+ which is C1), should be used with IM_HCT_COMPOSITE() integration
+ method.
+ - FEM_QUADC1_COMPOSITE :
+ Quadrilateral element, composite P3 element and C1 (16 dof).
+ - FEM_REDUCED_QUADC1_COMPOSITE :
+ Quadrilateral element, composite P3 element and C1 (12 dof).
+ - FEM_RT0(n) :
+ Raviart-Thomas element of order 0 on a simplex of dimension <literal>n</literal>.
+ - FEM_NEDELEC(n) :
+ Nedelec edge element of order 0 on a simplex of dimension <literal>n</literal>.
+
+ Of course, you have to ensure that the selected fem is compatible with
+ the geometric transformation: a Pk fem has no meaning on a quadrangle.
+
+ </para>
+ </listitem>
- <para>The scilab function sprintf might be useful if you need to build the PK fem with k and n as arguments: </para>
-
- <programlisting role="example"><![CDATA[
-fem = gf_fem(sprintf('FEM_PK(%d,%d)', k, n));
- ]]></programlisting>
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_fem_get">gf_fem_get</link></member>
- <member><link linkend="gf_integ">gf_integ</link></member>
- <member><link linkend="gf_mesh_fem_set">gf_mesh_fem_set(mesh_fem, 'fem', fem)</link></member>
- <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get('fem')</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_fem_get.xml b/interface/src/scilab/help/en_US/gf_fem_get.xml
index 89c854d..16b1c27 100644
--- a/interface/src/scilab/help/en_US/gf_fem_get.xml
+++ b/interface/src/scilab/help/en_US/gf_fem_get.xml
@@ -9,166 +9,178 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_fem_get</refname>
-
- <refpurpose> General function for querying information about FEM
- objects.</refpurpose>
+ <refpurpose> General function for querying information about FEM objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I = gf_fem_get(fem F,'nbdof')
-int I = gf_fem_get(fem F,'dim')
-int I = gf_fem_get(fem F,'target_dim')
-mat P = gf_fem_get(fem F,'pts')
-int I = gf_fem_get(fem F,'is_equivalent')
-int I = gf_fem_get(fem F,'is_lagrange')
-int I = gf_fem_get(fem F,'is_polynomial')
-int I = gf_fem_get(fem F,'estimated_degree')
-mat V = gf_fem_get(fem F,'base_value', vec X)
-mat V = gf_fem_get(fem F,'grad_base_value', vec X)
-mat V = gf_fem_get(fem F,'hess_base_value', vec X)
-string S = gf_fem_get(fem F,'poly_str')
-string S = gf_fem_get(fem F,'char')
- </synopsis>
+ <synopsis>n = gf_fem_get(fem F, 'nbdof'[, int cv])</synopsis>
+ <synopsis>d = gf_fem_get(fem F, 'dim')</synopsis>
+ <synopsis>td = gf_fem_get(fem F, 'target_dim')</synopsis>
+ <synopsis>P = gf_fem_get(fem F, 'pts'[, int cv])</synopsis>
+ <synopsis>b = gf_fem_get(fem F, 'is_equivalent')</synopsis>
+ <synopsis>b = gf_fem_get(fem F, 'is_lagrange')</synopsis>
+ <synopsis>b = gf_fem_get(fem F, 'is_polynomial')</synopsis>
+ <synopsis>d = gf_fem_get(fem F, 'estimated_degree')</synopsis>
+ <synopsis>E = gf_fem_get(fem F, 'base_value',mat p)</synopsis>
+ <synopsis>ED = gf_fem_get(fem F, 'grad_base_value',mat p)</synopsis>
+ <synopsis>EH = gf_fem_get(fem F, 'hess_base_value',mat p)</synopsis>
+ <synopsis>gf_fem_get(fem F, 'poly_str')</synopsis>
+ <synopsis>string = gf_fem_get(fem F, 'char')</synopsis>
+ <synopsis>gf_fem_get(fem F, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about FEM objects.
+</para>
+ </refsection>
- <para>The number of degrees of freedom of a specific fem F are returned by gf_fem_get(F,'nbdof'),
- while its dimension (i.e. the dimension of the reference convex) is given by gf_fem_get(F,'dim').</para>
- <para>The target dimension, i.e. the dimension of the target space (denoted Q in the introduction to the finite element kernel)
- is returned by gf_fem_get(F,'target dim') (it is always 1 except for vector FEM).</para>
- <para>The geometrical nodes (on the reference convex) associated with each degree of freedom of the fem is given in the columns of
- gf_fem_get(F,'pts').</para>
- <para>gf_fem_get(F,'is equivalent'), gf_fem_get(F,'is lagrange'), or gf_fem_get(F,'is polynomial') gives some important properties of
- a FEM (a polynomial fem is a necessary condition for an exact integration method, and a interpolation a function of a Lagrangian fem is easy).</para>
- <para>gf_fem_get(F,'estimated_degree') : return an estimation of the polynomial degree of a fem (this is an estimation for fem which
- are not polynomials).</para>
- <para>gf_fem_get(F,'base_value',X) evaluate the values of all basis functions of the FEM at point X (X is supposed to be in the reference convex!).
- gf_fem_get(F,'grad_base_value',X) and gf_fem_get(F,'hess_base_value',X) evaluate respectively the first
- and second derivative of the basis functions.</para>
- <para>gf_fem_get(F, 'char') return the canonical name of the FEM in getfem, and gf_fem_get(F, 'poly_str') return the polynomial expression of its basis functions in the reference convex (of course this will fail on non-polynomial FEMs). </para>
-
- <para></para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>n = gf_fem_get(fem,'nbdof'[, int cv]) Return the number of dof for the
- Fem. Some specific Fem (for example 'interpolated_fem') may require a
- convex number <literal>cv</literal> to give their result. In most of
- the case, you can omit this convex number.</para>
- </listitem>
-
- <listitem>
- <para>d = gf_fem_get(fem,'dim') Return the dimension (dimension of the
- reference convex) of the Fem.</para>
- </listitem>
-
- <listitem>
- <para>td = gf_fem_get(fem,'target_dim') Return the dimension of the target
- space. The target space dimension is usually 1, except for vector Fem
- (none of them has been implemented in getfem++ for now).</para>
- </listitem>
-
- <listitem>
- <para>P = gf_fem_get(fem,'pts'[, int cv]) Get the location of the dof on the
- reference element. Some specific Fem may require a convex number
- <literal>cv</literal> to give their result (for example
- 'interpolated_fem'). In most of the case, you can omit this convex
- number.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_fem_get(fem,'is_equivalent') Return 0 if the Fem is not
- equivalent. Equivalent Fem are evaluated on the reference convex. This
- is the case of most classical Fem's.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_fem_get(fem,'is_lagrange') Return 0 if the Fem is not of
- Lagrange type.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_fem_get(fem,'is_polynomial') Return 0 if the basis functions are
- not polynomials.</para>
- </listitem>
-
- <listitem>
- <para>d = gf_fem_get(fem,'estimated_degree') Return an estimation of the
- polynomial degree of the Fem. This is an estimation for fem which are
- not polynomials.</para>
- </listitem>
-
- <listitem>
- <para>E = gf_fem_get(fem,'base_value',mat p) Evaluate all basis functions of
- the FEM at point <literal>p</literal>. <literal>p</literal> is
- supposed to be in the reference convex!</para>
- </listitem>
-
- <listitem>
- <para>EH = gf_fem_get(fem,'hess_base_value',mat p) Evaluate the Hessian of
- all base functions of the Fem at point <literal>p</literal>.
- <literal>p</literal> is supposed to be in the reference
- convex!.</para>
- </listitem>
-
- <listitem>
- <para>gf_fem_get(fem,'poly_str') Return the polynomial expressions of its
- basis functions in the reference convex. The result is expressed as a
- list of strings. Of course this will fail on non-polynomial
- Fem's.</para>
- </listitem>
-
- <listitem>
- <para>str = gf_fem_get(fem,'char') Ouput a (unique) string representation of
- the Fem. This can be used to perform comparisons between two different
- Fem objects.</para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><literal>n = gf_fem_get(fem F, 'nbdof'[, int cv])</literal></para>
- <para></para>
- </refsection>
+ <para> Return the number of dof for the fem.
- <refsection>
- <title>Examples</title>
+ Some specific fem (for example 'interpolated_fem') may require a
+ convex number <literal>cv</literal> to give their result. In most of the case, you
+ can omit this convex number.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>d = gf_fem_get(fem F, 'dim')</literal></para>
+
+ <para> Return the dimension (dimension of the reference convex) of the fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>td = gf_fem_get(fem F, 'target_dim')</literal></para>
+
+ <para> Return the dimension of the target space.
+
+ The target space dimension is usually 1, except for vector fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>P = gf_fem_get(fem F, 'pts'[, int cv])</literal></para>
+
+ <para> Get the location of the dof on the reference element.
+
+ Some specific fem may require a convex number <literal>cv</literal> to give their
+ result (for example 'interpolated_fem'). In most of the case, you
+ can omit this convex number.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_fem_get(fem F, 'is_equivalent')</literal></para>
+
+ <para> Return 0 if the fem is not equivalent.
+
+ Equivalent fem are evaluated on the reference convex. This is
+ the case of most classical fem's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_fem_get(fem F, 'is_lagrange')</literal></para>
+
+ <para> Return 0 if the fem is not of Lagrange type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_fem_get(fem F, 'is_polynomial')</literal></para>
+
+ <para> Return 0 if the basis functions are not polynomials.
+ </para>
+ </listitem>
- <para>Plotting the basis functions of the P5 fem on a segment:</para>
+ <listitem>
+ <para><literal>d = gf_fem_get(fem F, 'estimated_degree')</literal></para>
- <programlisting role="example"><![CDATA[
-f = gf_fem('FEM_PK(1,5)');
-n = 100;
-M = zeros(gf_fem_get(f,'nbdof'),n);
-for i=1:n,
- M(:,i)=gf_fem_get(f,'base_value',(i-1)/(n-1));
-end
-plot((0:n-1)/n,M);
- ]]></programlisting>
+ <para> Return an estimation of the polynomial degree of the fem.
- <para><imagedata fileref="../fig/gf_fem_get_fig_1.png" /></para>
+ This is an estimation for fem which are not polynomials.
+ </para>
+ </listitem>
- <para>Viewing the basis function of the Argyris FEM: </para>
+ <listitem>
+ <para><literal>E = gf_fem_get(fem F, 'base_value',mat p)</literal></para>
- <programlisting role="example"><![CDATA[
-f=gf_fem('FEM_ARGYRIS');
-gf_fem_get(f, 'poly_str')
- ]]></programlisting>
+ <para> Evaluate all basis functions of the FEM at point <literal>p</literal>.
+
+ <literal>p</literal> is supposed to be in the reference convex!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ED = gf_fem_get(fem F, 'grad_base_value',mat p)</literal></para>
+
+ <para> Evaluate the gradient of all base functions of the fem at point <literal>p</literal>.
+
+ <literal>p</literal> is supposed to be in the reference convex!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>EH = gf_fem_get(fem F, 'hess_base_value',mat p)</literal></para>
+
+ <para> Evaluate the Hessian of all base functions of the fem at point <literal>p</literal>.
+
+ <literal>p</literal> is supposed to be in the reference convex!.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_fem_get(fem F, 'poly_str')</literal></para>
+
+ <para> Return the polynomial expressions of its basis functions in
+ the reference convex.
+
+ The result is expressed as a cell array of
+ strings. Of course this will fail on non-polynomial fem's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>string = gf_fem_get(fem F, 'char')</literal></para>
+
+ <para> Ouput a (unique) string representation of the fem.
+
+ This can be used to perform comparisons between two different fem
+ objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_fem_get(fem F, 'display')</literal></para>
+
+ <para> displays a short summary for a fem object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_fem">gf_fem</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_geotrans.xml b/interface/src/scilab/help/en_US/gf_geotrans.xml
index 7629f76..73f1810 100644
--- a/interface/src/scilab/help/en_US/gf_geotrans.xml
+++ b/interface/src/scilab/help/en_US/gf_geotrans.xml
@@ -9,93 +9,66 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_geotrans</refname>
-
- <refpurpose>Return the handle of a geometric transformation object</refpurpose>
+ <refpurpose> The geometric transformation must be used when you are building a custom
+ mesh convex by convex (see the add_convex() function of mesh): it also
+ defines the kind of convex (triangle, hexahedron, prism, etc..)
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>I = gf_geotrans(name) </synopsis>
+ <synopsis>GT = gf_geotrans(string name)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for geotrans objects.</para>
- <para>The geometric transformation must be used when you are building a custom mesh convex by convex
- (see the 'add convex' sub-command of gf_mesh_set): it also defines the kind of convex (triangle, hexahedron, prism, etc..).</para>
- <para>The name argument contains the specification of the geometric transformation as a string, which may be:</para>
-
- <itemizedlist>
- <listitem>
- <para>GT_PK(n,k) Transformation on simplexes, dim
- <literal>n</literal>, degree <literal>k</literal>.</para>
- </listitem>
-
- <listitem>
- <para>GT_QK(n,k) Transformation on parallelepipeds, dim
- <literal>n</literal>, degree <literal>k</literal>.</para>
- </listitem>
-
- <listitem>
- <para>GT_PRISM(n,k) Transformation on prisms, dim
- <literal>n</literal>, degree <literal>k</literal>.</para>
- </listitem>
-
- <listitem>
- <para>GT_PRODUCT(A,B) Tensorial product of two transformations.</para>
- </listitem>
-
- <listitem>
- <para>GT_LINEAR_PRODUCT(A,B) Linear tensorial product of two
- transformations</para>
- </listitem>
- </itemizedlist>
-
- <para>Geometric transformations of an existing mesh can be obtained with gf_mesh_get(M,'geotrans').</para>
+ <para> The geometric transformation must be used when you are building a custom
+ mesh convex by convex (see the add_convex() function of mesh): it also
+ defines the kind of convex (triangle, hexahedron, prism, etc..)
+ </para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <para>In order to get the geometric transformation for a prism of dimension 3, you could use</para>
+ <title>Command list</title>
- <programlisting role="example"><![CDATA[
-gt = gf_geotrans('GT_PRISM(3,1)')
-or
-gt = gf_geotrans('GT_PRODUCT(GT_PK(2,1),GT_PK(1,1))')
- ]]></programlisting>
-
- <para>If you want the geometric transformation for a curved triangle, you might choose </para>
-
- <programlisting role="example"><![CDATA[
-gt = gf_geotrans('GT_PK(2,2)') // 6-noded triangle
- ]]></programlisting>
-
- <para>If you want to use a cartesian mesh, then it is preferable to use</para>
-
- <programlisting role="example"><![CDATA[
-gt = gf_geotrans('GT_LINEAR_PRODUCT(GT_PK(1,1), GT_PK(1,1))')
-instead of gf_geotrans('GT_QK(2,1)')
-or gf_geotrans('GT_PRODUCT(GT_PK(1,1), GT_PK(1,1))'),
- ]]></programlisting>
+ <itemizedlist>
+ <listitem>
+ <para><literal>GT = gf_geotrans(string name)</literal></para>
+
+ <para>
+The name argument contains the specification of the geometric transformation
+as a string, which may be:
+
+ - GT_PK(n,k) :
+ Transformation on simplexes, dim <literal>n</literal>, degree <literal>k</literal>.
+ - GT_QK(n,k) :
+ Transformation on parallelepipeds, dim <literal>n</literal>, degree <literal>k</literal>.
+ - GT_PRISM(n,k) :
+ Transformation on prisms, dim <literal>n</literal>, degree <literal>k</literal>.
+ - GT_PRODUCT(A,B) :
+ Tensorial product of two transformations.
+ - GT_LINEAR_PRODUCT(geotrans gt1,geotrans gt2) :
+ Linear tensorial product of two transformations
+
+ </para>
+ </listitem>
- <para>since the geometric transformation for parallelepipeds is linear, and getfem++ can take advantage of it
- (exact integration method, direct inversion of the geometrical transformation,...).</para>
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_set">gf_mesh_set(M,'add convex')</link></member>
- <member><link linkend="gf_mesh_get">gf_mesh_get(M,'geotrans')</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_geotrans_get.xml b/interface/src/scilab/help/en_US/gf_geotrans_get.xml
index 1d8ba4b..6171906 100644
--- a/interface/src/scilab/help/en_US/gf_geotrans_get.xml
+++ b/interface/src/scilab/help/en_US/gf_geotrans_get.xml
@@ -9,110 +9,118 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_geotrans_get</refname>
-
- <refpurpose>General function for querying information about geometric
- transformations objects.</refpurpose>
+ <refpurpose> General function for querying information about geometric transformations
+ objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I = gf_geotrans_get(geotrans GT, 'dim')
-int I = gf_geotrans_get(geotrans GT, 'is_linear')
-int n = gf_geotrans_get(geotrans GT, 'nbpts')
-mat P = gf_geotrans_get(geotrans GT, 'pts')
-mat N = gf_geotrans_get(geotrans GT, 'normals')
-mat Pts2 = gf_geotrans_get(geotrans GT, 'transform', G, Pts)
-string s = gf_geotrans_get(geotrans GT, 'char')
-</synopsis>
+ <synopsis>d = gf_geotrans_get(geotrans GT, 'dim')</synopsis>
+ <synopsis>b = gf_geotrans_get(geotrans GT, 'is_linear')</synopsis>
+ <synopsis>n = gf_geotrans_get(geotrans GT, 'nbpts')</synopsis>
+ <synopsis>P = gf_geotrans_get(geotrans GT, 'pts')</synopsis>
+ <synopsis>N = gf_geotrans_get(geotrans GT, 'normals')</synopsis>
+ <synopsis>Pt = gf_geotrans_get(geotrans GT, 'transform',mat G, mat Pr)</synopsis>
+ <synopsis>s = gf_geotrans_get(geotrans GT, 'char')</synopsis>
+ <synopsis>gf_geotrans_get(geotrans GT, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
-
- <itemizedlist>
- <listitem>
- <para>d = gf_geotrans_get(GT,'dim'): Get the dimension of the GeoTrans.
- This is the dimension of the source space, i.e. the dimension of the
- reference convex.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_geotrans_get(GT,'is_linear'): Return 0 if the GeoTrans is
- not linear.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_geotrans_get(GT,'nbpts'): Return the number of points of
- the GeoTrans.</para>
- </listitem>
-
- <listitem>
- <para>P = gf_geotrans_get(GT,'pts'): Return the reference convex points
- of the GeoTrans. The points are stored in the columns of the output
- matrix.</para>
- </listitem>
-
- <listitem>
- <para>N = gf_geotrans_get(GT,'normals'): Get the normals for each face
- of the reference convex of the GeoTrans. The normals are stored in the
- columns of the output matrix.</para>
- </listitem>
-
- <listitem>
- <para>Po = gf_geotrans_get(GT,'poly_str'): Return the GeoTrans
- expressed as polynomials The result is expressed as a list of
- strings.</para>
- </listitem>
-
- <listitem>
- <para>Pt = gf_geotrans_get(GT,'transform',mat G, mat Pr): Apply the
- GeoTrans to a set of points. <literal>G</literal> is the set of
- vertices of the real convex, <literal>Pr</literal> is the set of
- points (in the reference convex) that are to be transformed. The
- corresponding set of points in the real convex is returned.</para>
- </listitem>
-
- <listitem>
- <para>s = gf_geotrans_get(GT,'char'): Output a (unique) string
- representation of the GeoTrans. This can be used to perform
- comparisons between two different GeoTrans objects.</para>
- </listitem>
- </itemizedlist>
+ <para> General function for querying information about geometric transformations
+ objects.
+</para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <programlisting role="example"><![CDATA[
---> gt=gf_geotrans('GT_PK(2,1)'); gf_geotrans_get(gt,'pts')
-ans =
- 0 1 0
- 0 0 1
---> gt=gf_geotrans('GT_QK(2,2)'); gf_geotrans_get(gt,'pts')
-ans =
- 0 0.5 1 0 0.5 1 0 0.5 1
- 0 0 0 0.5 0.5 0.5 1 1 1
---> gf_geotrans_get(gt,'char')
-ans =
-GT_QK(2,2)
- ]]></programlisting>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>d = gf_geotrans_get(geotrans GT, 'dim')</literal></para>
+
+ <para> Get the dimension of the geotrans.
+
+ This is the dimension of the source space, i.e. the dimension of
+ the reference convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_geotrans_get(geotrans GT, 'is_linear')</literal></para>
+
+ <para> Return 0 if the geotrans is not linear.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_geotrans_get(geotrans GT, 'nbpts')</literal></para>
+
+ <para> Return the number of points of the geotrans.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>P = gf_geotrans_get(geotrans GT, 'pts')</literal></para>
+
+ <para> Return the reference convex points of the geotrans.
+
+ The points are stored in the columns of the output matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>N = gf_geotrans_get(geotrans GT, 'normals')</literal></para>
+
+ <para> Get the normals for each face of the reference convex of the geotrans.
+
+ The normals are stored in the columns of the output matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Pt = gf_geotrans_get(geotrans GT, 'transform',mat G, mat Pr)</literal></para>
+
+ <para> Apply the geotrans to a set of points.
+
+ <literal>G</literal> is the set of vertices of the real convex, <literal>Pr</literal> is the set
+ of points (in the reference convex) that are to be transformed.
+ The corresponding set of points in the real convex is returned.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_geotrans_get(geotrans GT, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the geotrans.
+
+ This can be used to perform comparisons between two
+ different geotrans objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_geotrans_get(geotrans GT, 'display')</literal></para>
+
+ <para> displays a short summary for a geotrans object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_geotrans">gf_geotrans</link></member>
- <member><link linkend="gf_mesh_set">gf_mesh_set(M,'add convex')</link></member>
- <member><link linkend="gf_mesh_get">gf_mesh_get(M,'geotrans')</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_global_function.xml b/interface/src/scilab/help/en_US/gf_global_function.xml
index 8f5680c..f735967 100644
--- a/interface/src/scilab/help/en_US/gf_global_function.xml
+++ b/interface/src/scilab/help/en_US/gf_global_function.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_global_function"
- xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_global_function" xml:lang="en"
+ xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,89 +9,94 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_global_function</refname>
+ <refpurpose> Global function object is represented by three functions:
- <refpurpose>General constructor for global function object.</refpurpose>
+ * The function <literal>val</literal>.
+ * The function gradient <literal>grad</literal>.
+ * The function Hessian <literal>hess</literal>.
+
+ this type of function is used as local and global enrichment function. The
+ global function Hessian is an optional parameter (only for fourth order
+ derivative problems). </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
- gf = gf_global_function('cut_off', int fn, scal r, scal r1, scal r0)
- gf = gf_global_function('crack', int fn)
- gf = gf_global_function('parser', string val[, string grad[, string hess]])
- gf = gf_global_function('product', gl f1, gl f2)
- gf = gf_global_function('add', gl f1, gl f2)
- </synopsis>
+ <synopsis>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1, scalar r0)</synopsis>
+ <synopsis>GF = gf_global_function('crack', int fn)</synopsis>
+ <synopsis>GF = gf_global_function('parser', string val[, string grad[, string hess]])</synopsis>
+ <synopsis>GF = gf_global_function('product', global_function F, global_function G)</synopsis>
+ <synopsis>GF = gf_global_function('add', global_function gf1, global_function gf2)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for global_function objects.</para>
+
+ <para> Global function object is represented by three functions:
+
+ * The function <literal>val</literal>.
+ * The function gradient <literal>grad</literal>.
+ * The function Hessian <literal>hess</literal>.
+
+ this type of function is used as local and global enrichment function. The
+ global function Hessian is an optional parameter (only for fourth order
+ derivative problems). </para>
+ </refsection>
- <para>Global function object is represented by three functions:</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>The global function <emphasis>val</emphasis>.</para>
- </listitem>
+ <listitem>
+ <para><literal>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1, scalar r0)</literal></para>
- <listitem>
- <para>The global function gradient <emphasis>grad</emphasis>.</para>
- </listitem>
+ <para> Create a cutoff global function.
+ </para>
+ </listitem>
- <listitem>
- <para>The global function Hessian <emphasis>hess</emphasis>.</para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><literal>GF = gf_global_function('crack', int fn)</literal></para>
- <para>this type of function is used as local and global enrichment
- function. The global function Hessian is an optional parameter (only for
- fourth order derivative problems).</para>
+ <para> Create a near-tip asymptotic global function for modelling cracks.
+ </para>
+ </listitem>
- <para>General constructor for global function object. Returns a getfem
- handle to the newly created global function object.</para>
+ <listitem>
+ <para><literal>GF = gf_global_function('parser', string val[, string grad[, string hess]])</literal></para>
- <itemizedlist>
- <listitem>
- <para>GF = gf_global_function('cutoff', int fn, scalar r, scalar r1,
- scalar r0) Create a cutoff global function.</para>
- </listitem>
-
- <listitem>
- <para>GF = gf_global_function('crack', int fn) Create a near-tip
- asymptotic global function for modelling cracks.</para>
- </listitem>
-
- <listitem>
- <para>GF = gf_global_function('parser', string val[, string grad[,
- string hess]]) Create a global function from strings
- <emphasis>val</emphasis>, <emphasis>grad</emphasis> and
- <emphasis>hess</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>GF = gf_global_function('product', globalfunction F,
- globalfunction G) Create a product of two global functions.</para>
- </listitem>
-
- <listitem>
- <para>GF = gf_global_function('add', gl f1, gl f2) Create a add of two global functions.</para>
- </listitem>
+ <para> Create a global function from strings <literal>val</literal>, <literal>grad</literal> and <literal>hess</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>GF = gf_global_function('product', global_function F, global_function G)</literal></para>
+
+ <para> Create a product of two global functions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>GF = gf_global_function('add', global_function gf1, global_function gf2)</literal></para>
+
+ <para> Create a add of two global functions.
+ </para>
+ </listitem>
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_global_function_get">gf_global_function_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_global_function_get.xml b/interface/src/scilab/help/en_US/gf_global_function_get.xml
index ca0f6c2..a241ee6 100644
--- a/interface/src/scilab/help/en_US/gf_global_function_get.xml
+++ b/interface/src/scilab/help/en_US/gf_global_function_get.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_global_function_get"
- xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_global_function_get" xml:lang="en"
+ xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,51 +9,89 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_global_function_get</refname>
-
- <refpurpose> General function for querying information about global_function objects.</refpurpose>
+ <refpurpose> General function for querying information about global_function objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
- mat VALs = gf_global_function('val', mat PTs)
- mat GRADs = gf_global_function('grad', mat PTs)
- mat HESSs = gf_global_function('hess', mat PTs)
- </synopsis>
+ <synopsis>VALs = gf_global_function_get(global_function GF, 'val',mat PTs)</synopsis>
+ <synopsis>GRADs = gf_global_function_get(global_function GF, 'grad',mat PTs)</synopsis>
+ <synopsis>HESSs = gf_global_function_get(global_function GF, 'hess',mat PTs)</synopsis>
+ <synopsis>s = gf_global_function_get(global_function GF, 'char')</synopsis>
+ <synopsis>gf_global_function_get(global_function GF, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about global_function objects.
+</para>
+ </refsection>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>mat VALs = gf_global_function('val', mat PTs) Return `val`
- function evaluation in `PTs` (column points).</para>
- </listitem>
- <listitem>
- <para>mat GRADs = gf_global_function('grad', mat PTs) Return
- `val` function evaluation in `PTs` (column points).</para>
- </listitem>
- <listitem>
- <para>mat HESSs = gf_global_function('hess', mat PTs) Return
- `val` function evaluation in `PTs` (column points).</para>
- </listitem>
+ <listitem>
+ <para><literal>VALs = gf_global_function_get(global_function GF, 'val',mat PTs)</literal></para>
+
+ <para> Return <literal>val</literal> function evaluation in <literal>PTs</literal> (column points).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>GRADs = gf_global_function_get(global_function GF, 'grad',mat PTs)</literal></para>
+
+ <para> Return <literal>grad</literal> function evaluation in <literal>PTs</literal> (column points).
+
+ On return, each column of <literal>GRADs</literal> is of the
+ form [Gx,Gy].
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>HESSs = gf_global_function_get(global_function GF, 'hess',mat PTs)</literal></para>
+
+ <para> Return <literal>hess</literal> function evaluation in <literal>PTs</literal> (column points).
+
+ On return, each column of <literal>HESSs</literal> is of the
+ form [Hxx,Hxy,Hyx,Hyy].
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_global_function_get(global_function GF, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the global_function.
+
+ This can be used to perform comparisons between two
+ different global_function objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_global_function_get(global_function GF, 'display')</literal></para>
+
+ <para> displays a short summary for a global_function object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_global_function">gf_global_function</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_integ.xml b/interface/src/scilab/help/en_US/gf_integ.xml
index 6e3c59a..074ff61 100644
--- a/interface/src/scilab/help/en_US/gf_integ.xml
+++ b/interface/src/scilab/help/en_US/gf_integ.xml
@@ -9,130 +9,97 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_integ</refname>
-
- <refpurpose>General function for obtaining handles to various integrations methods on convexes
- (used when the elementary matrices are built).</refpurpose>
+ <refpurpose> General object for obtaining handles to various integrations methods on
+ convexes (used when the elementary matrices are built).
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>gf_integ(integ_name)</synopsis>
+ <synopsis>I = gf_integ(string method)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for integ objects.</para>
- <para>Here is a list of some integration methods defined in getfem++ (see
- the <link linkend = "http://www-gmm.insa-toulouse.fr/getfem/doc">description of finite element and integration methods</link> for a complete
- reference):</para>
-
- <itemizedlist>
- <listitem>
- <para>IM_EXACT_SIMPLEX(n) Exact integration on simplices (works only
- with linear geometric transformations and PK Fem's).</para>
- </listitem>
-
- <listitem>
- <para>IM_PRODUCT(A,B) Product of two integration methods.</para>
- </listitem>
-
- <listitem>
- <para>IM_EXACT_PARALLELEPIPED(n) Exact integration on
- parallelepipeds.</para>
- </listitem>
-
- <listitem>
- <para>IM_EXACT_PRISM(n) Exact integration on prisms.</para>
- </listitem>
-
- <listitem>
- <para>IM_GAUSS1D(k) Gauss method on the segment, order
- `k=1,3,...99`.</para>
- </listitem>
-
- <listitem>
- <para>IM_NC(n,k) Newton-Cotes approximative integration on simplexes,
- order `k`.</para>
- </listitem>
-
- <listitem>
- <para>IM_NC_PARALLELEPIPED(n,k) Product of Newton-Cotes integration on
- parallelepipeds.</para>
- </listitem>
-
- <listitem>
- <para>IM_NC_PRISM(n,k) Product of Newton-Cotes integration on
- prisms.</para>
- </listitem>
-
- <listitem>
- <para>IM_GAUSS_PARALLELEPIPED(n,k) Product of Gauss1D integration on
- parallelepipeds.</para>
- </listitem>
-
- <listitem>
- <para>IM_TRIANGLE(k) Gauss methods on triangles
- `k=1,3,5,6,7,8,9,10,13,17,19`.</para>
- </listitem>
-
- <listitem>
- <para>IM_QUAD(k) Gauss methods on quadrilaterons `k=2, 3, 5, .. 17`.
- Note that IM_GAUSS_PARALLELEPIPED should be prefered for QK
- Fem's.</para>
- </listitem>
-
- <listitem>
- <para>IM_TETRAHEDRON(k) Gauss methods on tetrahedrons `k=1, 2, 3, 5, 6
- or 8`.</para>
- </listitem>
-
- <listitem>
- <para>IM_SIMPLEX4D(3) Gauss method on a 4-dimensional simplex.</para>
- </listitem>
-
- <listitem>
- <para>IM_STRUCTURED_COMPOSITE(im,k) Composite method on a grid with
- `k` divisions.</para>
- </listitem>
-
- <listitem>
- <para>IM_HCT_COMPOSITE(im) Composite integration suited to the HCT
- composite finite element.</para>
- </listitem>
- </itemizedlist>
+ <para> General object for obtaining handles to various integrations methods on
+ convexes (used when the elementary matrices are built).
+</para>
+ </refsection>
- <para>Example:</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_integ('IM_PRODUCT(IM_GAUSS1D(5),IM_GAUSS1D(5))') is the same
- as:</para>
- </listitem>
-
- <listitem>
- <para>gf_integ('IM_GAUSS_PARALLELEPIPED(2,5)')</para>
- </listitem>
- </itemizedlist>
+ <listitem>
+ <para><literal>I = gf_integ(string method)</literal></para>
+
+ <para> Here is a list of some integration methods defined in getfem++ (see the
+ description of finite element and integration methods for a complete
+ reference):
+
+ - IM_EXACT_SIMPLEX(n) :
+ Exact integration on simplices (works only with linear geometric
+ transformations and PK fem's).
+ - IM_PRODUCT(A,B) :
+ Product of two integration methods.
+ - IM_EXACT_PARALLELEPIPED(n) :
+ Exact integration on parallelepipeds.
+ - IM_EXACT_PRISM(n) :
+ Exact integration on prisms.
+ - IM_GAUSS1D(k) :
+ Gauss method on the segment, order <literal>k=1,3,...,99</literal>.
+ - IM_NC(n,k) :
+ Newton-Cotes approximative integration on simplexes, order <literal>k</literal>.
+ - IM_NC_PARALLELEPIPED(n,k) :
+ Product of Newton-Cotes integration on parallelepipeds.
+ - IM_NC_PRISM(n,k) :
+ Product of Newton-Cotes integration on prisms.
+ - IM_GAUSS_PARALLELEPIPED(n,k) :
+ Product of Gauss1D integration on parallelepipeds.
+ - IM_TRIANGLE(k) :
+ Gauss methods on triangles <literal>k=1,3,5,6,7,8,9,10,13,17,19</literal>.
+ - IM_QUAD(k) :
+ Gauss methods on quadrilaterons <literal>k=2,3,5, ...,17</literal>. Note that
+ IM_GAUSS_PARALLELEPIPED should be prefered for QK fem's.
+ - IM_TETRAHEDRON(k) :
+ Gauss methods on tetrahedrons <literal>k=1,2,3,5,6 or 8</literal>.
+ - IM_SIMPLEX4D(3) :
+ Gauss method on a 4-dimensional simplex.
+ - IM_STRUCTURED_COMPOSITE(im,k) :
+ Composite method on a grid with <literal>k</literal> divisions.
+ - IM_HCT_COMPOSITE(im) :
+ Composite integration suited to the HCT composite finite element.
+
+ Example:
+
+ - I = gf_integ('IM_PRODUCT(IM_GAUSS1D(5),IM_GAUSS1D(5))')
+
+ is the same as:
+
+ - I = gf_integ('IM_GAUSS_PARALLELEPIPED(2,5)')
+
+ Note that 'exact integration' should be avoided in general, since they
+ only apply to linear geometric transformations, are quite slow, and
+ subject to numerical stability problems for high degree fem's.
+ </para>
+ </listitem>
- <para>Note that 'exact integration' should be avoided in general, since
- they only apply to linear geometric transformations, are quite slow, and
- subject to numerical stability problems for high degree Fem's.</para>
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_integ_get">gf_integ_get</link></member>
- <member><link linkend="gf_fem">gf_fem</link></member>
- <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_integ_get.xml b/interface/src/scilab/help/en_US/gf_integ_get.xml
index ed882f0..172a025 100644
--- a/interface/src/scilab/help/en_US/gf_integ_get.xml
+++ b/interface/src/scilab/help/en_US/gf_integ_get.xml
@@ -9,91 +9,132 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_integ_get</refname>
-
- <refpurpose>Gives access to various internal informations of an Integration Method handle IM.</refpurpose>
+ <refpurpose> General function for querying information about integration method objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I = gf_integ_get(IM,'is_exact')
-int I = gf_integ_get(IM,'dim')
-int I = gf_integ_get(IM,'nbpts')
-mat gf_integ_get(IM,'pts')
-vec gf_integ_get(IM,'coeffs')
-mat gf_integ_get(IM,'face_pts', int F)
-vec gf_integ_get(IM,'face_coeffs',int F)
-string S=gf_integ_get(IM,'char')
- </synopsis>
+ <synopsis>b = gf_integ_get(integ I, 'is_exact')</synopsis>
+ <synopsis>d = gf_integ_get(integ I, 'dim')</synopsis>
+ <synopsis>n = gf_integ_get(integ I, 'nbpts')</synopsis>
+ <synopsis>Pp = gf_integ_get(integ I, 'pts')</synopsis>
+ <synopsis>Pf = gf_integ_get(integ I, 'face_pts',F)</synopsis>
+ <synopsis>Cp = gf_integ_get(integ I, 'coeffs')</synopsis>
+ <synopsis>Cf = gf_integ_get(integ I, 'face_coeffs',F)</synopsis>
+ <synopsis>s = gf_integ_get(integ I, 'char')</synopsis>
+ <synopsis>gf_integ_get(integ I, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about integration method objects.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>b = gf_integ_get(im,'is_exact') Return 0 if the integration is an
- approximate one.</para>
- </listitem>
-
- <listitem>
- <para>d = gf_integ_get(im,'dim') Return the dimension of the reference
- convex of the method.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_integ_get(im,'nbpts') Return the total number of integration
- points. Count the points for the volume integration, and points for
- surface integration on each face of the reference convex.</para>
-
- <para>Only for approximate methods, this has no meaning for exact
- integration methods!</para>
- </listitem>
-
- <listitem>
- <para>Pf = gf_integ_get(im,'face_pts',F) Return the list of integration
- points for a face.</para>
-
- <para>Only for approximate methods, this has no meaning for exact
- integration methods!</para>
- </listitem>
-
- <listitem>
- <para>Cp = gf_integ_get(im,'coeffs') Returns the coefficients associated to
- each integration point.</para>
-
- <para>Only for approximate methods, this has no meaning for exact
- integration methods!</para>
- </listitem>
-
- <listitem>
- <para>Cf = gf_integ_get(im,'face_coeffs',F) Returns the coefficients
- associated to each integration of a face.</para>
-
- <para>Only for approximate methods, this has no meaning for exact
- integration methods!</para>
- </listitem>
-
- <listitem>
- <para>s = gf_integ_get(im,'char') Ouput a (unique) string representation of
- the integration method. This can be used to comparisons between two
- different Integ objects.</para>
- </listitem>
+ <listitem>
+ <para><literal>b = gf_integ_get(integ I, 'is_exact')</literal></para>
+
+ <para> Return 0 if the integration is an approximate one.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>d = gf_integ_get(integ I, 'dim')</literal></para>
+
+ <para> Return the dimension of the reference convex of
+ the method.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_integ_get(integ I, 'nbpts')</literal></para>
+
+ <para> Return the total number of integration points.
+
+ Count the points for the volume integration, and points for
+ surface integration on each face of the reference convex.
+
+ Only for approximate methods, this has no meaning for exact
+ integration methods!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Pp = gf_integ_get(integ I, 'pts')</literal></para>
+
+ <para> Return the list of integration points
+
+ Only for approximate methods, this has no meaning for exact
+ integration methods!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Pf = gf_integ_get(integ I, 'face_pts',F)</literal></para>
+
+ <para> Return the list of integration points for a face.
+
+ Only for approximate methods, this has no meaning for exact
+ integration methods!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Cp = gf_integ_get(integ I, 'coeffs')</literal></para>
+
+ <para> Returns the coefficients associated to each integration point.
+
+ Only for approximate methods, this has no meaning for exact
+ integration methods!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Cf = gf_integ_get(integ I, 'face_coeffs',F)</literal></para>
+
+ <para> Returns the coefficients associated to each integration of a face.
+
+ Only for approximate methods, this has no meaning for exact
+ integration methods!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_integ_get(integ I, 'char')</literal></para>
+
+ <para> Ouput a (unique) string representation of the integration method.
+
+ This can be used to comparisons between two different integ
+ objects.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_integ_get(integ I, 'display')</literal></para>
+
+ <para> displays a short summary for a integ object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_integ">gf_integ</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset.xml b/interface/src/scilab/help/en_US/gf_levelset.xml
index 7ac4725..c769512 100644
--- a/interface/src/scilab/help/en_US/gf_levelset.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset.xml
@@ -9,68 +9,80 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_levelset</refname>
+ <refpurpose>
+ The level-set object is represented by a primary level-set and optionally
+ a secondary level-set used to represent fractures (if p(x) is the primary
+ level-set function and s(x) is the secondary level-set, the crack is
+ defined by <latex style="text"><![CDATA[p(x)=0]]></latex> and <latex style="text"><![CDATA[s(x)\leq0]]></latex> : the role of the secondary is to determine
+ the crack front/tip).
- <refpurpose></refpurpose>
+ note:
+
+ All tools listed below need the package qhull installed on your
+ system. This package is widely available. It computes convex hull and
+ delaunay triangulations in arbitrary dimension.
+
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>LevelSet = gf_levelset(...)</synopsis>
+ <synopsis>LS = gf_levelset(mesh m, int d[, string 'ws'| string f1[, string f2 | string 'ws']])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for levelset objects.</para>
+
+ <para>
+ The level-set object is represented by a primary level-set and optionally
+ a secondary level-set used to represent fractures (if p(x) is the primary
+ level-set function and s(x) is the secondary level-set, the crack is
+ defined by <latex style="text"><![CDATA[p(x)=0]]></latex> and <latex style="text"><![CDATA[s(x)\leq0]]></latex> : the role of the secondary is to determine
+ the crack front/tip).
+
+ note:
- <para>The level-set object is represented by a primary level-set and
- optionally a secondary level-set used to represent fractures (if p(x) is
- the primary level-set function and s(x) is the secondary level-set, the
- crack is defined by p(x)=0 and s(x)<=0: the role of the secondary is
- stop the crack).</para>
+ All tools listed below need the package qhull installed on your
+ system. This package is widely available. It computes convex hull and
+ delaunay triangulations in arbitrary dimension.
+
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_levelset(Mesh m, int d) Create a LevelSet object on a Mesh m
- represented by a primary function defined on a lagrange Fem of degree
- d.</para>
- </listitem>
-
- <listitem>
- <para>gf_levelset(Mesh m, int d, string poly1) Create a LevelSet
- object on a Mesh m represented by a primary function defined by the
- polynomial expression poly1 on a lagrange Fem of degree d.</para>
- </listitem>
-
- <listitem>
- <para>gf_levelset(Mesh m, int d, 'with_secondary' [, string poly2])
- Create a LevelSet object on a Mesh m represented by a primary function
- defined by the polynomial expression poly1 and a secondary function,
- both on a lagrange Fem of degree d.</para>
- </listitem>
-
- <listitem>
- <para>gf_levelset(Mesh m, int d, string poly1, string poly2) Create a
- LevelSet object on a Mesh m represented by a primary function defined
- by the polynomial expression poly1 and a secondary function defined by
- the polynomial expression poly2, both on a lagrange Fem of degree
- d.</para>
- </listitem>
+ <listitem>
+ <para><literal>LS = gf_levelset(mesh m, int d[, string 'ws'| string f1[, string f2 | string 'ws']])</literal></para>
+
+ <para> Create a levelset object on a mesh represented by a primary function
+ (and optional secondary function, both) defined on a lagrange mesh_fem of
+ degree <literal>d</literal>.
+
+ If <literal>ws</literal> (with secondary) is set; this levelset is represented by a
+ primary function and a secondary function. If <literal>f1</literal> is set; the primary
+ function is defined by that expression. If <literal>f2</literal> is set; this levelset
+ is represented by a primary function and a secondary function defined
+ by these expressions.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_levelset_set">gf_levelset_set</link></member>
-
- <member><link linkend="gf_levelset_get">gf_levelset_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset_get.xml b/interface/src/scilab/help/en_US/gf_levelset_get.xml
index 537b0df..3394492 100644
--- a/interface/src/scilab/help/en_US/gf_levelset_get.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset_get.xml
@@ -9,64 +9,95 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_levelset_get</refname>
-
- <refpurpose>General function for querying information about LEVELSET
- objects.</refpurpose>
+ <refpurpose> General function for querying information about LEVELSET objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>I = gf_levelset_get(LS, ...)</synopsis>
+ <synopsis>V = gf_levelset_get(levelset LS, 'values', int nls)</synopsis>
+ <synopsis>d = gf_levelset_get(levelset LS, 'degree')</synopsis>
+ <synopsis>mf = gf_levelset_get(levelset LS, 'mf')</synopsis>
+ <synopsis>z = gf_levelset_get(levelset LS, 'memsize')</synopsis>
+ <synopsis>s = gf_levelset_get(levelset LS, 'char')</synopsis>
+ <synopsis>gf_levelset_get(levelset LS, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about LEVELSET objects.
+</para>
+ </refsection>
- <para>General function for querying information about LEVELSET
- objects.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>V = gf_levelset_get(LS,'values',int nls) Return the vector of
- dof for <literal>nls</literal> funtion. If <literal>nls</literal> is
- 0, the method return the vector of dof for the primary level-set
- funtion. If <literal>nls</literal> is 1, the method return the vector
- of dof for the secondary level-set function (if any).</para>
- </listitem>
-
- <listitem>
- <para>V = gf_levelset_get(LS,'values',int nls) Return the vector of
- dof for <literal>nls</literal> funtion. If <literal>nls</literal> is
- 0, the method return the vector of dof for the primary level-set
- funtion. If <literal>nls</literal> is 1, the method return the vector
- of dof for the secondary level-set function (if any).</para>
- </listitem>
-
- <listitem>
- <para>mf = gf_levelset_get(LS,'mf') Return a reference on the MeshFem
- object.</para>
- </listitem>
-
- <listitem>
- <para>z = gf_levelset_get(LS,'memsize') Return the amount of memory
- (in bytes) used by the level-set.</para>
- </listitem>
+ <listitem>
+ <para><literal>V = gf_levelset_get(levelset LS, 'values', int nls)</literal></para>
+
+ <para> Return the vector of dof for <literal>nls</literal> funtion.
+
+ If <literal>nls</literal> is 0, the method return the vector of dof for the primary
+ level-set funtion. If <literal>nls</literal> is 1, the method return the vector of
+ dof for the secondary level-set function (if any).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>d = gf_levelset_get(levelset LS, 'degree')</literal></para>
+
+ <para> Return the degree of lagrange representation.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>mf = gf_levelset_get(levelset LS, 'mf')</literal></para>
+
+ <para> Return a reference on the mesh_fem object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_levelset_get(levelset LS, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the level-set.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_levelset_get(levelset LS, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the levelset.
+
+ This can be used to perform comparisons between two
+ different levelset objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_levelset_get(levelset LS, 'display')</literal></para>
+
+ <para> displays a short summary for a levelset.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_levelset">gf_levelset</link></member>
- <member><link linkend="gf_levelset_set">gf_levelset_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_levelset_set.xml b/interface/src/scilab/help/en_US/gf_levelset_set.xml
index 6b7552b..dc363f7 100644
--- a/interface/src/scilab/help/en_US/gf_levelset_set.xml
+++ b/interface/src/scilab/help/en_US/gf_levelset_set.xml
@@ -9,47 +9,58 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_levelset_set</refname>
-
- <refpurpose>General function for modification of LEVELSET
- objects.</refpurpose>
+ <refpurpose> General function for modification of LEVELSET objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>I = gf_levelset_set(LS, ...) </synopsis>
+ <synopsis>gf_levelset_set(levelset LS, 'values', {mat v1|string func_1}[, mat v2|string func_2])</synopsis>
+ <synopsis>gf_levelset_set(levelset LS, 'simplify'[, scalar eps=0.01])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for modification of LEVELSET objects.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>gf_levelset_set(levelset LS, 'values', {mat v1|string func_1}[, mat v2|string func_2])</literal></para>
+
+ <para> Set values of the vector of dof for the level-set functions.
- <para>General function for modification of LEVELSET objects.</para>
+ Set the primary function with the vector of dof <literal>v1</literal> (or the expression
+ <literal>func_1</literal>) and the secondary function (if any) with the vector of dof
+ <literal>v2</literal> (or the expression <literal>func_2</literal>)
+ </para>
+ </listitem>
- <para>gf_levelset_set(LS,'values',list(mat v1|string poly1)[, list(mat
- v2|string poly2)]) Set values of the vector of dof for the level-set
- functions. Set the primary function with the vector of dof
- <literal>v1</literal> (or the polynomial expression
- <literal>poly1</literal>) and the secondary function (if any) with the
- vector of dof <literal>v2</literal> (or the polynomial expression
- poly2).</para>
+ <listitem>
+ <para><literal>gf_levelset_set(levelset LS, 'simplify'[, scalar eps=0.01])</literal></para>
- <para>gf_levelset_set(LS,'simplify'[scalar eps=0.01]) Simplify dof of
- level-set optionally with the parameter <literal>eps</literal>.</para>
+ <para> Simplify dof of level-set optionally with the parameter <literal>eps</literal>.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_levelset">gf_levelset</link></member>
-
- <member><link linkend="gf_levelset_get">gf_levelset_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_linsolve.xml b/interface/src/scilab/help/en_US/gf_linsolve.xml
index 172b2ec..85bfaec 100644
--- a/interface/src/scilab/help/en_US/gf_linsolve.xml
+++ b/interface/src/scilab/help/en_US/gf_linsolve.xml
@@ -9,71 +9,87 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_linsolve</refname>
-
- <refpurpose>The linear solver</refpurpose>
+ <refpurpose> Various linear system solvers.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_linsolve('gmres', spmat M, vec b [, int restart=50][, precond P][, 'noisy'][,'res', r][,'maxiter', n])
-gf_linsolve('cg', spmat M, vec b [, precond P][, 'noisy'][,'res', r][,'maxiter', n])
-gf_linsolve('bicgstab', spmat M, vec b [, precond P][, 'noisy'][,'res', r][,'maxiter', n])[U,cond] = gf_linsolve('lu'|'superlu', spmat M, vec b [, precond P])
-</synopsis>
+ <synopsis>X = gf_linsolve('gmres', spmat M, vec b[, int restart][, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+ <synopsis>X = gf_linsolve('cg', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+ <synopsis>X = gf_linsolve('bicgstab', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</synopsis>
+ <synopsis>{U, cond} = gf_linsolve('lu', spmat M, vec b)</synopsis>
+ <synopsis>{U, cond} = gf_linsolve('superlu', spmat M, vec b)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Various linear system solvers.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>X = gf_linsolve('gmres',Spmat M, vec b[, int restart][, Precond
- P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
- b</emphasis> with the generalized minimum residuals method. Optionally
- using <literal>P</literal> as preconditioner. The default value of the
- restart parameter is 50.</para>
- </listitem>
-
- <listitem>
- <para>X = gf_linsolve('cg',Spmat M, vec b [, Precond
- P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
- b</emphasis> with the conjugated gradient method. Optionally using
- <literal>P</literal> as preconditioner.</para>
- </listitem>
-
- <listitem>
- <para>X = gf_linsolve('bicgstab',Spmat M, vec b [, Precond
- P][,'noisy'][,'res', r][,'maxiter', n]) Solve <emphasis>M.X =
- b</emphasis> with the bi-conjugated gradient stabilized method.
- Optionally using <literal>P</literal> as a preconditioner.</para>
- </listitem>
-
- <listitem>
- <para>list(U, cond) = gf_linsolve('lu',Spmat M, vec b) Alias for
- gf_linsolve('superlu',...)</para>
- </listitem>
-
- <listitem>
- <para>list(U, cond) = gf_linsolve('superlu',Spmat M, vec b) Solve
- <emphasis>M.U = b</emphasis> apply the <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> solver (sparse LU
- factorization). The condition number estimate <literal>cond</literal> is returned with the solution <literal>U</literal>.</para>
- </listitem>
+ <listitem>
+ <para><literal>X = gf_linsolve('gmres', spmat M, vec b[, int restart][, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+ <para> Solve <literal>M.X = b</literal> with the generalized minimum residuals method.
+
+ Optionally using <literal>P</literal> as preconditioner. The default value of the
+ restart parameter is 50.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>X = gf_linsolve('cg', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+ <para> Solve <literal>M.X = b</literal> with the conjugated gradient method.
+
+ Optionally using <literal>P</literal> as preconditioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>X = gf_linsolve('bicgstab', spmat M, vec b [, precond P][,'noisy'][,'res', r][,'maxiter', n])</literal></para>
+
+ <para> Solve <literal>M.X = b</literal> with the bi-conjugated gradient stabilized method.
+
+ Optionally using <literal>P</literal> as a preconditioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{U, cond} = gf_linsolve('lu', spmat M, vec b)</literal></para>
+
+ <para> Alias for gf_linsolve('superlu',...)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{U, cond} = gf_linsolve('superlu', spmat M, vec b)</literal></para>
+
+ <para> Solve <literal>M.U = b</literal> apply the SuperLU solver (sparse LU factorization).
+
+ The condition number estimate <literal>cond</literal> is returned with the solution <literal>U</literal>.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_precond_get">gf_precond_get</link></member>
- <member><link linkend="gf_precond">gf_precond</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick.xml b/interface/src/scilab/help/en_US/gf_mdbrick.xml
index 55dadb3..cc479fa 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick.xml
@@ -9,312 +9,359 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdbrick</refname>
-
- <refpurpose>General constructor for mdbrick object. Returns a getfem
- handle to the newly created object.</refpurpose>
+ <refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mdbrick('constraint', mdbrick parent, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet on normal component', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('dirichlet on normal derivative', mdbrick parent, int BNUM, mesh_fem MFMULT, string CTYPE [, int numfem])
-gf_mdbrick('generalized dirichlet', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('source term', mdbrick parent, [, int BNUM=-1[, int numfem]])
-gf_mdbrick('normal source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('normal derivative source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('neumann KirchhoffLove source term', mdbrick parent, int BNUM [, int numfem])
-gf_mdbrick('qu term', mdbrick parent, [, int BNUM [, int numfem]])
-gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u [,'real'|'complex'])
-gf_mdbrick('generic elliptic', mesh_im MIM, mesh_fem mfu [,'scalar'|'matrix'|'tensor'][,'real'|'complex'])
-gf_mdbrick('helmholtz', mesh_im MIM, mesh_fem mfu [,'real'|'complex'])
-gf_mdbrick('isotropic linearized elasticity', mesh_im MIM, mesh_fem mfu)
-gf_mdbrick('linear incompressibility term', mdbrick parent, mesh_fem mf_p [, int numfem])
-gf_mdbrick('nonlinear elasticity', mesh_im MIM, mesh_fem mfu, string lawname)
-gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick parent, mesh_fem mf_p [, int numfem])
-gf_mdbrick('small deformations plasticity', mesh_im MIM, mesh_fem mfu, scalar THRESHOLD)
-gf_mdbrick('bilaplacian', mesh_im MIM, mesh_fem mfu, ['Kirchhoff-Love'])
-gf_mdbrick('isotropic_linearized_plate', mesh_im MIM, mesh_im MIMSUB, mesh_fem MF_UT, mesh_fem MF_U3, mesh_fem MF_THETA, scalar EPSILON)
-gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im MIM, mesh_fem MF_UT, mesh_fem MF_U3, mesh_fem MF_THETA, scalar EPSILON)
-gf_mdbrick('plate_source_term', mdbrick parent, [, int BNUM=-1[, int numfem]])
-gf_mdbrick('plate_simple_support', mdbrick parent, int BNUM, string CTYPE [, int numfem])
-gf_mdbrick('plate_clamped_support', mdbrick parent, int BNUM, string CTYPE[, int numfem])
-gf_mdbrick('plate_closing', mdbrick parent [, int numfem])
- </synopsis>
+ <synopsis>B = gf_mdbrick('constraint', mdbrick pb, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('dirichlet', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('dirichlet on normal component', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('dirichlet on normal derivative', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('generalized dirichlet', mdbrick pb, int bnum[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('source term', mdbrick pb[, int bnum=-1[, int nfem]])</synopsis>
+ <synopsis>B = gf_mdbrick('normal source term', mdbrick pb, int bnum[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('normal derivative source term', mdbrick parent, int bnum[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('neumann KirchhoffLove source term', mdbrick pb, int bnum[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('qu term', mdbrick pb[, int bnum[, int nfem]])</synopsis>
+ <synopsis>B = gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u[, 'real'|'complex'])</synopsis>
+ <synopsis>B = gf_mdbrick('generic elliptic', mesh_im mim, mesh_fem mfu[, 'scalar'|'matrix'|'tensor'][, 'real'|'complex'])</synopsis>
+ <synopsis>B = gf_mdbrick('helmholtz', mesh_im mim, mesh_fem mfu[, 'real'|'complex'])</synopsis>
+ <synopsis>B = gf_mdbrick('isotropic linearized elasticity', mesh_im mim, mesh_fem mfu)</synopsis>
+ <synopsis>B = gf_mdbrick('linear incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('nonlinear elasticity', mesh_im mim, mesh_fem mfu, string law)</synopsis>
+ <synopsis>B = gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('small deformations plasticity', mesh_im mim, mesh_fem mfu, scalar THRESHOLD)</synopsis>
+ <synopsis>B = gf_mdbrick('dynamic', mdbrick pb, scalar rho[, int numfem])</synopsis>
+ <synopsis>B = gf_mdbrick('bilaplacian', mesh_im mim, mesh_fem mfu[, 'Kirchhoff-Love'])</synopsis>
+ <synopsis>B = gf_mdbrick('navier stokes', mesh_im mim, mesh_fem mfu, mesh_fem mfp)</synopsis>
+ <synopsis>B = gf_mdbrick('isotropic_linearized_plate', mesh_im mim, mesh_im mims, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</synopsis>
+ <synopsis>B = gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im mim, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</synopsis>
+ <synopsis>B = gf_mdbrick('plate_source_term', mdbrick pb[, int bnum=-1[, int nfem]])</synopsis>
+ <synopsis>B = gf_mdbrick('plate_simple_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('plate_clamped_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</synopsis>
+ <synopsis>B = gf_mdbrick('plate_closing', mdbrick pb[, int nfem])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mdbrick objects.</para>
- <para>Many of the bricks take a "numfem" optional parameter, which is the
- meshfem number in the stack of parent bricks (by default numfem=0, i.e. it
- refers to the first meshfem in the stack of bricks).</para>
+ <para></para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>B = gf_mdbrick('constraint', MdBrick pb, string CTYPE[, int
- nfem]) Build a generic constraint brick. It may be useful in some
- situations, such as the Stokes problem where the pressure is defined
- modulo a constant. In such a situation, this brick can be used to add
- an additional constraint on the pressure value.</para>
-
- <para><literal>CTYPE</literal> has to be chosen among 'augmented',
- 'penalized', and 'eliminated'. The constraint can be specified with
- gf_mdbrick_set(b,constraints'). Note that Dirichlet bricks (except the
- 'generalized Dirichlet' one) are also specializations of the
- 'constraint' brick.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('dirichlet', MdBrick pb, int bnum, MeshFem mf_m,
- string CTYPE[, int nfem]) Build a Dirichlet condition brick which
- impose the value of a field along a mesh boundary. The
- <literal>bnum</literal> parameter selects on which mesh region the
- Dirichlet condition is imposed. <literal>CTYPE</literal> has to be
- chosen among 'augmented', 'penalized', and 'eliminated'. The
- <literal>mf_m</literal> may generally be taken as the MeshFem of the
- unknown, but for 'augmented' Dirichlet conditions, you may have to
- respect the Inf-Sup condition and choose an adequate MeshFem.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('dirichlet on normal component', MdBrick pb, int
- bnum, MeshFem mf_m, string CTYPE[, int nfem]) Build a Dirichlet
- condition brick which imposes the value of the normal component of a
- vector field.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('dirichlet on normal derivative', MdBrick pb, int
- bnum, MeshFem mf_m, string CTYPE[, int nfem]) Build a Dirichlet
- condition brick which imposes the value of the normal derivative of
- the unknown.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('generalized dirichlet', MdBrick pb, int bnum[,
- int nfem]) This is the "old" Dirichlet brick of getfem. This brick can
- be used to impose general Dirichlet conditions <emphasis>h(x)u(x) =
- r(x)</emphasis>, however it may have some issues with elaborated Fem's
- (such as Argyris, etc). It should be avoided when possible.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('source term', MdBrick pb[, int bnum=-1[, int
- nfem]]) Add a boundary or volumic source term ( \int B.v ). If
- <literal>bnum</literal> is omitted (or set to -1) , the brick adds a
- volumic source term on the whole mesh. For <literal>bnum</literal>
- >= 0, the source term is imposed on the mesh region
- <literal>bnum</literal>. Use gf_mdbrick_set(b,'param','source
- term',mf,B) to set the source term field. The source term is expected
- as a vector field of size <literal>Q</literal> (with <emphasis>Q =
- qdim</emphasis>).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('normal source term', MdBrick pb, int bnum[, int
- nfem]) Add a boundary source term ( \int (Bn).v ). The source term is
- imposed on the mesh region <literal>bnum</literal> (which of course is
- not allowed to be a volumic region, only boundary regions are
- allowed). Use gf_mdbrick_set(b,'param','source term',mf,B) to set the
- source term field. The source term <literal>B</literal> is expected as
- tensor field of size <emphasis>QxN</emphasis> (with <emphasis>Q =
- qdim, N = mesh dim</emphasis>). </para>
-
- <para>For example, if you consider an elasticity problem, this brick
- may be used to impose a force on the boundary with
- <literal>B</literal> as the stress tensor.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('normal derivative source term', MdBrick parent,
- int bnum[, int nfem]) Add a boundary source term ( \int (\partial_n
- B).v ). The source term is imposed on the mesh region
- <literal>bnum</literal>. Use gf_mdbrick_set(b,'param','source
- term',mf,B) to set the source term field, which is expected as a
- vector field of size <literal>Q</literal> (with <emphasis>Q =
- qdim</emphasis>).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('neumann KirchhoffLove source term', MdBrick pb,
- int bnum[, int nfem]) Add a boundary source term for neumann
- Kirchhoff-Love plate problems. Should be used with the Kirchhoff-Love
- flavour of the bilaplacian brick.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('qu term', MdBrick pb[, int bnum[, int nfem]])
- Update the tangent matrix with a \int (Qu).v term. The
- <emphasis>Q(x)</emphasis> parameter is a matrix field of size qdim x
- qdim. An example of use is for the "iku" part of Robin boundary
- conditions \partial_n u + iku = ...</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('mass matrix', MeshIm mim, MeshFem mf_u[,
- 'real'|'complex']) Build a mass-matrix brick.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('generic elliptic', MeshIm mim, MeshFem mfu[,
- 'scalar'|'matrix'|'tensor'][, 'real'|'complex']) Setup a generic
- elliptic problem. <emphasis></emphasis></para>
-
- <para><emphasis>a(x)*grad(U).grad(V)</emphasis></para>
-
- <para>The brick parameter <literal>a</literal> may be a scalar field,
- a matrix field, or a tensor field (default is scalar).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('helmholtz', MeshIm mim, MeshFem mfu[,
- 'real'|'complex']) Setup a Helmholtz problem. The brick has one
- parameter, 'wave_number'.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('isotropic linearized elasticity', MeshIm mim,
- MeshFem mfu) Setup a linear elasticity problem. The brick has two
- scalar parameter, 'lambda' and 'mu' (the Lame coefficients).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('linear incompressibility term', MdBrick pb,
- MeshFem mfp[, int nfem]) Add an incompressibily constraint (div u =
- 0).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('nonlinear elasticity', MeshIm mim, MeshFem mfu,
- string law) Setup a nonlinear elasticity (large deformations)
- problem.</para>
-
- <para>The material <literal>law</literal> can be chosen among:</para>
-
- <itemizedlist>
- <listitem>
- <para>'SaintVenant Kirchhoff'<par> Linearized material
- law.</para>
- </listitem>
-
- <listitem>
- <para>'Mooney Rivlin' To be used with the nonlinear
- incompressibily term.</para>
- </listitem>
-
- <listitem>
- <para>'Ciarlet Geymonat'</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('nonlinear elasticity incompressibility term',
- MdBrick pb, MeshFem mfp[, int nfem]) Add an incompressibily constraint
- to a large strain elasticity problem.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('small deformations plasticity', MeshIm mim,
- MeshFem mfu, scalar THRESHOLD) Setup a plasticity problem (with small
- deformations). The <literal>THRESHOLD</literal> parameter is the
- maximum value of the Von Mises stress before 'plastification' of the
- material.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('dynamic', MdBrick pb, scalar rho[, int numfem])
- Dynamic brick. This brick is not ready.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('bilaplacian', MeshIm mim, MeshFem mfu[,
- 'Kirchhoff-Love']) Setup a bilaplacian problem. If the
- 'Kirchhoff-Love' option is specified, the Kirchhoff-Love plate model
- is used.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('navier stokes', MeshIm mim, MeshFem mfu, MeshFem
- mfp) Setup a Navier-Stokes problem (this brick is not ready, do not
- use it).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('isotropic_linearized_plate', MeshIm mim, MeshIm
- mims, MeshFem mfut, MeshFem mfu3, MeshFem mftheta, scalar eps) Setup a
- linear plate model brick. For moderately thick plates, using the
- Reissner-Mindlin model. <literal>eps</literal> is the plate thinkness,
- the MeshFem <literal>mfut</literal> and <literal>mfu3</literal> are
- used respectively for the membrane displacement and the transverse
- displacement of the plate. The MeshFem <literal>mftheta</literal> is
- the rotation of the normal ("section rotations"). The second
- integration method <literal>mims</literal> can be chosen equal to
- <literal>mim</literal>, or different if you want to perform
- sub-integration on the transverse shear term (mitc4 projection). This
- brick has two parameters "lambda" and "mu" (the Lame
- coefficients)</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('mixed_isotropic_linearized_plate', MeshIm mim,
- MeshFem mfut, MeshFem mfu3, MeshFem mftheta, scalar eps) Setup a mixed
- linear plate model brick. For thin plates, using Kirchhoff-Love model.
- For a non-mixed version, use the bilaplacian brick.</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('plate_source_term', MdBrick pb[, int bnum=-1[,
- int nfem]]) Add a boundary or a volumic source term to a plate
- problem. This brick has two parameters: "B" is the displacement (ut
- and u3) source term, "M" is the moment source term (i.e. the source
- term on the rotation of the normal).</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('plate_simple_support', MdBrick pb, int bnum,
- string CTYPE[, int nfem]) Add a "simple support" boundary condition to
- a plate problem. Homogeneous Dirichlet condition on the displacement,
- free rotation. <literal>CTYPE</literal> specifies how the constraint
- is enforced ('penalized', 'augmented' or 'eliminated').</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('plate_clamped_support', MdBrick pb, int bnum,
- string CTYPE[, int nfem]) Add a "clamped support" boundary condition
- to a plate problem. Homogeneous Dirichlet condition on the
- displacement and on the rotation. <literal>CTYPE</literal> specifies
- how the constraint is enforced ('penalized', 'augmented' or
- 'eliminated').</para>
- </listitem>
-
- <listitem>
- <para>B = gf_mdbrick('plate_closing', MdBrick pb[, int nfem]) Add a
- free edges condition for the mixed plate model brick. This brick is
- required when the mixed linearized plate brick is used. It must be
- inserted after all other boundary conditions (the reason is that the
- brick has to inspect all other boundary conditions to determine the
- number of disconnected boundary parts which are free edges).</para>
- </listitem>
+ <listitem>
+ <para><literal>B = gf_mdbrick('constraint', mdbrick pb, string CTYPE[, int nfem])</literal></para>
+
+ <para> Build a generic constraint brick.
+
+ It may be useful in some situations, such as the Stokes problem
+ where the pressure is defined modulo a constant. In such a
+ situation, this brick can be used to add an additional constraint
+ on the pressure value.
+ <literal>CTYPE</literal> has to be chosen among 'augmented', 'penalized', and
+ 'eliminated'. The constraint can be specified with
+ gf_mdbrick_set(mdbrick MDB, 'constraints'). Note that Dirichlet bricks (except
+ the 'generalized Dirichlet' one) are also specializations of
+ the 'constraint' brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('dirichlet', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+ <para> Build a Dirichlet condition brick which impose the value of a field along a mesh boundary.
+
+ The <literal>bnum</literal> parameter selects on which mesh region the Dirichlet
+ condition is imposed. <literal>CTYPE</literal> has to be chosen among 'augmented',
+ 'penalized', and 'eliminated'. The <literal>mf_m</literal> may generally be taken
+ as the mesh_fem of the unknown, but for 'augmented' Dirichlet
+ conditions, you may have to respect the Inf-Sup condition and
+ choose an adequate mesh_fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('dirichlet on normal component', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+ <para> Build a Dirichlet condition brick which imposes the value of the normal component of a vector field.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('dirichlet on normal derivative', mdbrick pb, int bnum, mesh_fem mf_m, string CTYPE[, int nfem])</literal></para>
+
+ <para> Build a Dirichlet condition brick which imposes the value of the normal derivative of the unknown.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('generalized dirichlet', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+ <para> This is the "old" Dirichlet brick of getfem.
+
+ This brick can be used to impose general Dirichlet conditions
+ <literal>h(x)u(x) = r(x)</literal>, however it may have some issues with elaborated
+ fem's (such as Argyris, etc). It should be avoided when possible.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('source term', mdbrick pb[, int bnum=-1[, int nfem]])</literal></para>
+
+ <para> Add a boundary or volumic source term ( \int B.v ).
+
+ If <literal>bnum</literal> is omitted (or set to -1) , the brick adds a volumic
+ source term on the whole mesh. For <literal>bnum</literal> >= 0, the source term is
+ imposed on the mesh region <literal>bnum</literal>. Use gf_mdbrick_set(mdbrick MDB, 'param','source
+ term',mf,B) to set the source term field. The source term is
+ expected as a vector field of size Q (with Q = qdim).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('normal source term', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+ <para> Add a boundary source term ( \int (Bn).v ).
+
+ The source term is imposed on the mesh region <literal>bnum</literal> (which of course
+ is not allowed to be a volumic region, only boundary regions are
+ allowed). Use gf_mdbrick_set(mdbrick MDB, 'param','source term',mf,B) to set the
+ source term field. The source term B is expected as tensor field
+ of size QxN (with Q = qdim, N = mesh dim). For example, if you
+ consider an elasticity problem, this brick may be used to impose
+ a force on the boundary with B as the stress tensor.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('normal derivative source term', mdbrick parent, int bnum[, int nfem])</literal></para>
+
+ <para> Add a boundary source term ( \int (\partial_n B).v ).
+
+ The source term is imposed on the mesh region <literal>bnum</literal>. Use
+ gf_mdbrick_set(mdbrick MDB, 'param','source term',mf,B) to set the source term
+ field, which is expected as a vector field of size Q (with Q =
+ qdim).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('neumann KirchhoffLove source term', mdbrick pb, int bnum[, int nfem])</literal></para>
+
+ <para> Add a boundary source term for neumann Kirchhoff-Love plate problems.
+
+ Should be used with the Kirchhoff-Love flavour of the bilaplacian
+ brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('qu term', mdbrick pb[, int bnum[, int nfem]])</literal></para>
+
+ <para> Update the tangent matrix with a \int (Qu).v term.
+
+ The Q(x) parameter is a matrix field of size qdim x qdim. An example
+ of use is for the "iku" part of Robin boundary conditions
+ \partial_n u + iku = ...
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('mass matrix', mesh_im mim, mesh_fem mf_u[, 'real'|'complex'])</literal></para>
+
+ <para> Build a mass-matrix brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('generic elliptic', mesh_im mim, mesh_fem mfu[, 'scalar'|'matrix'|'tensor'][, 'real'|'complex'])</literal></para>
+
+ <para> Setup a generic elliptic problem.
+
+ a(x)*grad(U).grad(V)
+
+ The brick parameter <literal>a</literal> may be a scalar field, a matrix field, or
+ a tensor field (default is scalar).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('helmholtz', mesh_im mim, mesh_fem mfu[, 'real'|'complex'])</literal></para>
+
+ <para> Setup a Helmholtz problem.
+
+ The brick has one parameter, 'wave_number'.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('isotropic linearized elasticity', mesh_im mim, mesh_fem mfu)</literal></para>
+
+ <para> Setup a linear elasticity problem.
+
+ The brick has two scalar parameter, 'lambda' and 'mu' (the Lame
+ coefficients).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('linear incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</literal></para>
+
+ <para> Add an incompressibily constraint (div u = 0).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('nonlinear elasticity', mesh_im mim, mesh_fem mfu, string law)</literal></para>
+
+ <para> Setup a nonlinear elasticity (large deformations) problem.
+
+ The material <literal>law</literal> can be chosen among:
+
+ - 'SaintVenant Kirchhoff' :
+ Linearized material law.
+ - 'Mooney Rivlin' :
+ To be used with the nonlinear incompressibily term.
+ - 'Ciarlet Geymonat'
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('nonlinear elasticity incompressibility term', mdbrick pb, mesh_fem mfp[, int nfem])</literal></para>
+
+ <para> Add an incompressibily constraint to a large strain elasticity problem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('small deformations plasticity', mesh_im mim, mesh_fem mfu, scalar THRESHOLD)</literal></para>
+
+ <para> Setup a plasticity problem (with small deformations).
+
+ The <literal>THRESHOLD</literal> parameter is the maximum value of the Von Mises
+ stress before 'plastification' of the material.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('dynamic', mdbrick pb, scalar rho[, int numfem])</literal></para>
+
+ <para> Dynamic brick. This brick is not fully working.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('bilaplacian', mesh_im mim, mesh_fem mfu[, 'Kirchhoff-Love'])</literal></para>
+
+ <para> Setup a bilaplacian problem.
+
+ If the 'Kirchhoff-Love' option is specified, the Kirchhoff-Love
+ plate model is used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('navier stokes', mesh_im mim, mesh_fem mfu, mesh_fem mfp)</literal></para>
+
+ <para> Setup a Navier-Stokes problem (this brick is not ready, do not use it).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('isotropic_linearized_plate', mesh_im mim, mesh_im mims, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</literal></para>
+
+ <para> Setup a linear plate model brick.
+
+ For moderately thick plates, using the Reissner-Mindlin model.
+ <literal>eps</literal> is the plate thinkness, the mesh_fem <literal>mfut</literal> and <literal>mfu3</literal> are used
+ respectively for the membrane displacement and the transverse
+ displacement of the plate. The mesh_fem <literal>mftheta</literal> is the rotation of
+ the normal ("section rotations").
+
+ The second integration method <literal>mims</literal> can be chosen equal to
+ <literal>mim</literal>, or different if you want to perform sub-integration on
+ the transverse shear term (mitc4 projection).
+
+ This brick has two parameters "lambda" and "mu" (the Lame
+ coefficients)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('mixed_isotropic_linearized_plate', mesh_im mim, mesh_fem mfut, mesh_fem mfu3, mesh_fem mftheta, scalar eps)</literal></para>
+
+ <para> Setup a mixed linear plate model brick.
+
+ For thin plates, using Kirchhoff-Love model. For a non-mixed version,
+ use the bilaplacian brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('plate_source_term', mdbrick pb[, int bnum=-1[, int nfem]])</literal></para>
+
+ <para> Add a boundary or a volumic source term to a plate problem.
+
+ This brick has two parameters: "B" is the displacement (ut and u3)
+ source term, "M" is the moment source term (i.e. the source term
+ on the rotation of the normal).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('plate_simple_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</literal></para>
+
+ <para> Add a "simple support" boundary condition to a plate problem.
+
+ Homogeneous Dirichlet condition on the displacement, free rotation.
+ <literal>CTYPE</literal> specifies how the constraint is enforced ('penalized',
+ 'augmented' or 'eliminated').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('plate_clamped_support', mdbrick pb, int bnum, string CTYPE[, int nfem])</literal></para>
+
+ <para> Add a "clamped support" boundary condition to a plate problem.
+
+ Homogeneous Dirichlet condition on the displacement and on the
+ rotation. <literal>CTYPE</literal> specifies how the constraint is enforced
+ ('penalized', 'augmented' or 'eliminated').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>B = gf_mdbrick('plate_closing', mdbrick pb[, int nfem])</literal></para>
+
+ <para> Add a free edges condition for the mixed plate model brick.
+
+ This brick is required when the mixed linearized plate brick is
+ used. It must be inserted after all other boundary conditions
+ (the reason is that the brick has to inspect all other boundary
+ conditions to determine the number of disconnected boundary parts
+ which are free edges).
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdbrick_set">gf_mdbrick_set</link></member>
- <member><link linkend="gf_mdbrick_get">gf_mdbrick_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick_get.xml b/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
index 5a3b2c7..42a386f 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick_get.xml
@@ -9,170 +9,225 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdbrick_get</refname>
-
- <refpurpose>Get information from a brick, or launch the
- solver.</refpurpose>
+ <refpurpose> Get information from a brick, or launch the solver.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int n = gf_mdbrick_get(b,'nbdof')
-int n = gf_mdbrick_get(b, 'dim')
-int gf_mdbrick_get(b, 'is_linear')
-int gf_mdbrick_get(b, 'is_symmetric')
-int gf_mdbrick_get(b, 'is_coercive')
-int gf_mdbrick_get(b, 'is_complex')
-ivec I=gf_mdbrick_get(b, 'mixed_variables')
-string gf_mdbrick_get(b, 'subclass')
-LST=gf_mdbrick_get(b, 'param_list')
-vec gf_mdbrick_get(b,'param', string parameter_name)
-gf_mdbrick_get(b,'solve', mdstate mds [,...])
-vec VM=gf_mdbrick_get(b, 'von_mises', mdstate mds, mesh_fem MFVM)
-vec VM=gf_mdbrick_get(b, 'tresca', mdstate mds, mesh_fem MFVM)
- </synopsis>
+ <synopsis>n = gf_mdbrick_get(mdbrick MDB, 'nbdof')</synopsis>
+ <synopsis>d = gf_mdbrick_get(mdbrick MDB, 'dim')</synopsis>
+ <synopsis>n = gf_mdbrick_get(mdbrick MDB, 'nb_constraints')</synopsis>
+ <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_linear')</synopsis>
+ <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_symmetric')</synopsis>
+ <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_coercive')</synopsis>
+ <synopsis>b = gf_mdbrick_get(mdbrick MDB, 'is_complex')</synopsis>
+ <synopsis>I = gf_mdbrick_get(mdbrick MDB, 'mixed_variables')</synopsis>
+ <synopsis>gf_mdbrick_get(mdbrick MDB, 'subclass')</synopsis>
+ <synopsis>gf_mdbrick_get(mdbrick MDB, 'param_list')</synopsis>
+ <synopsis>gf_mdbrick_get(mdbrick MDB, 'param', string parameter_name)</synopsis>
+ <synopsis>gf_mdbrick_get(mdbrick MDB, 'solve',mdstate mds[,...])</synopsis>
+ <synopsis>VM = gf_mdbrick_get(mdbrick MDB, 'von mises', mdstate mds, mesh_fem mfvm)</synopsis>
+ <synopsis>T = gf_mdbrick_get(mdbrick MDB, 'tresca', mdstate mds, mesh_fem mft)</synopsis>
+ <synopsis>z = gf_mdbrick_get(mdbrick MDB, 'memsize')</synopsis>
+ <synopsis>s = gf_mdbrick_get(mdbrick MDB, 'char')</synopsis>
+ <synopsis>gf_mdbrick_get(mdbrick MDB, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Get information from a brick, or launch the solver.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>n = gf_mdbrick_get(b,'nbdof') : Get the total number of dof of the
- current problem. This is the sum of the brick specific dof plus the
- dof of the parent bricks.</para>
- </listitem>
-
- <listitem>
- <para>d = gf_mdbrick_get(b,'dim') : Get the dimension of the main mesh
- (2 for a 2D mesh, etc).</para>
- </listitem>
-
- <listitem>
- <para>n = gf_mdbrick_get(b,'nb_constraints') : Get the total number of
- dof constraints of the current problem. This is the sum of the brick
- specific dof constraints plus the dof constraints of the parent
- bricks.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_mdbrick_get(b,'is_linear') : Return true if the problem is
- linear.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_mdbrick_get(b,'is_symmetric') : Return true if the problem
- is symmetric.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_mdbrick_get(b,'is_coercive') : Return true if the problem
- is coercive.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_mdbrick_get(b,'is_complex') : Return true if the problem
- uses complex numbers.</para>
- </listitem>
-
- <listitem>
- <para>I = gf_mdbrick_get(b,'mixed_variables') : Identify the indices of
- mixed variables (typically the pressure, etc.) in the tangent
- matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_get(b,'subclass') : Get the typename of the
- brick.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_get(b,'param_list') : Get the list of parameters names.
- Each brick embeds a number of parameters (the Lame coefficients for
- the linearized elasticity brick, the wave number for the Helmholtz
- brick,...), described as a (scalar, or vector, tensor etc) field on a
- mesh_fem. You can read/change the parameter values with
- gf_mdbrick_get(b,'param') and gf_mdbrick_set(b,'param').</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_get(b,'param',string parameter_name) : Get the
- parameter value. When the parameter has been assigned a specific
- MeshFem, it is returned as a large array (the last dimension being the
- MeshFem dof). When no MeshFem has been assigned, the parameter is
- considered to be constant over the mesh.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_get(b,'solve',MdState mds[,...]) : Run the standard
- getfem solver. Note that you should be able to use your own solver if
- you want (it is possible to obtain the tangent matrix and its right
- hand side with the gf_mdstate_get(mds,'tangent matrix') etc.).</para>
-
- <para>Various options can be specified:</para>
-
- <itemizedlist>
- <listitem>
- <para>'noisy' or 'very noisy' the solver will display some
- information showing the progress (residual values etc.).</para>
- </listitem>
-
- <listitem>
- <para>'max_iter', <literal>NIT</literal> set the maximum
- iterations numbers.</para>
- </listitem>
-
- <listitem>
- <para>'max_res', <literal>RES</literal> set the target residual
- value.</para>
- </listitem>
-
- <listitem>
- <para>'lsolver', <literal>SOLVERNAME</literal> select explicitely
- the solver used for the linear systems (the default value is
- 'auto', which lets getfem choose itself). Possible values are
- 'superlu', 'mumps' (if supported), 'cg/ildlt', 'gmres/ilu' and
- 'gmres/ilut'.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>VM = gf_mdbrick_get(b,'von mises',MdState mds, MeshFem mfvm) :
- Compute the Von Mises stress on the MeshFem <literal>mfvm</literal>.
- Only available on bricks where it has a meaning: linearized
- elasticity, plasticity, nonlinear elasticity. Note that in 2D it is
- not the "real" Von Mises (which should take into account the 'plane
- stress' or 'plane strain' aspect), but a pure 2D Von Mises. </para>
- </listitem>
-
- <listitem>
- <para>T = gf_mdbrick_get(b,'tresca',MdState mds, MeshFem mft) : Compute
- the Tresca stress criterion on the MeshFem <literal>mft</literal>.
- Only available on bricks where it has a meaning: linearized
- elasticity, plasticity, nonlinear elasticity.</para>
- </listitem>
-
- <listitem>
- <para>z = gf_mdbrick_get(b,'memsize') : Return the amount of memory (in
- bytes) used by the model brick.</para>
- </listitem>
+ <listitem>
+ <para><literal>n = gf_mdbrick_get(mdbrick MDB, 'nbdof')</literal></para>
+
+ <para> Get the total number of dof of the current problem.
+
+ This is the sum of the brick specific dof plus the dof of the
+ parent bricks.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>d = gf_mdbrick_get(mdbrick MDB, 'dim')</literal></para>
+
+ <para> Get the dimension of the main mesh (2 for a 2D mesh, etc).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_mdbrick_get(mdbrick MDB, 'nb_constraints')</literal></para>
+
+ <para> Get the total number of dof constraints of the current problem.
+
+ This is the sum of the brick specific dof constraints plus the
+ dof constraints of the parent bricks.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_linear')</literal></para>
+
+ <para> Return true if the problem is linear.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_symmetric')</literal></para>
+
+ <para> Return true if the problem is symmetric.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_coercive')</literal></para>
+
+ <para> Return true if the problem is coercive.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_mdbrick_get(mdbrick MDB, 'is_complex')</literal></para>
+
+ <para> Return true if the problem uses complex numbers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>I = gf_mdbrick_get(mdbrick MDB, 'mixed_variables')</literal></para>
+
+ <para> Identify the indices of mixed variables (typically the pressure,
+ etc.) in the tangent matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_get(mdbrick MDB, 'subclass')</literal></para>
+
+ <para> Get the typename of the brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_get(mdbrick MDB, 'param_list')</literal></para>
+
+ <para> Get the list of parameters names.
+
+ Each brick embeds a number of parameters (the Lame coefficients
+ for the linearized elasticity brick, the wave number for the
+ Helmholtz brick,...), described as a (scalar, or vector, tensor
+ etc) field on a mesh_fem. You can read/change the parameter values
+ with gf_mdbrick_get(mdbrick MDB, 'param') and gf_mdbrick_set(mdbrick MDB, 'param').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_get(mdbrick MDB, 'param', string parameter_name)</literal></para>
+
+ <para> Get the parameter value.
+
+ When the parameter has been assigned a specific mesh_fem, it is returned
+ as a large array (the last dimension being the mesh_fem dof). When no
+ mesh_fem has been assigned, the parameter is considered to be constant
+ over the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_get(mdbrick MDB, 'solve',mdstate mds[,...])</literal></para>
+
+ <para> Run the standard getfem solver.
+
+ Note that you should be able to use your own solver if you want
+ (it is possible to obtain the tangent matrix and its right hand
+ side with the gf_mdstate_get(mdstate MDS, 'tangent matrix') etc.).
+
+ Various options can be specified:
+
+ - 'noisy' or 'very noisy'
+ the solver will display some information showing the progress
+ (residual values etc.).
+ - 'max_iter', NIT
+ set the maximum iterations numbers.
+ - 'max_res', RES
+ set the target residual value.
+ - 'lsolver', SOLVERNAME
+ select explicitely the solver used for the linear systems (the
+ default value is 'auto', which lets getfem choose itself).
+ Possible values are 'superlu', 'mumps' (if supported),
+ 'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>VM = gf_mdbrick_get(mdbrick MDB, 'von mises', mdstate mds, mesh_fem mfvm)</literal></para>
+
+ <para> Compute the Von Mises stress on the mesh_fem <literal>mfvm</literal>.
+
+ Only available on bricks where it has a meaning: linearized
+ elasticity, plasticity, nonlinear elasticity. Note that in 2D
+ it is not the "real" Von Mises (which should take into account
+ the 'plane stress' or 'plane strain' aspect), but a pure 2D Von
+ Mises.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>T = gf_mdbrick_get(mdbrick MDB, 'tresca', mdstate mds, mesh_fem mft)</literal></para>
+
+ <para> Compute the Tresca stress criterion on the mesh_fem <literal>mft</literal>.
+
+ Only available on bricks where it has a meaning: linearized
+ elasticity, plasticity, nonlinear elasticity.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_mdbrick_get(mdbrick MDB, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the model brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_mdbrick_get(mdbrick MDB, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the mdbrick.
+
+ This can be used to perform comparisons between two
+ different mdbrick objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_get(mdbrick MDB, 'display')</literal></para>
+
+ <para> displays a short summary for a mdbrick.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdbrick_get">gf_mdbrick_set</link></member>
- <member><link linkend="gf_mdbrick">gf_mdbrick</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdbrick_set.xml b/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
index f02ad64..aa2c625 100644
--- a/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mdbrick_set.xml
@@ -9,73 +9,88 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdbrick_set</refname>
-
- <refpurpose>Modify a model brick object.</refpurpose>
+ <refpurpose> Modify a model brick object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mdbrick_set(b,'param', string name, mesh_fem MF,V | V)
-gf_mdbrick_set(b,'constraints', spmat H, vec R)
-gf_mdbrick_set(b,'constraints_rhs', spmat H, vec R)
-gf_mdbrick_set(b,'penalization_coef', scalar eps)
- </synopsis>
+ <synopsis>gf_mdbrick_set(mdbrick MDB, 'param', string name, {mesh_fem mf,V | V})</synopsis>
+ <synopsis>gf_mdbrick_set(mdbrick MDB, 'penalization_epsilon', scalar eps)</synopsis>
+ <synopsis>gf_mdbrick_set(mdbrick MDB, 'constraints', mat H, vec R)</synopsis>
+ <synopsis>gf_mdbrick_set(mdbrick MDB, 'constraints_rhs', mat H, vec R)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Modify a model brick object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mdbrick_set(b,'param',string name,list(MeshFem mf,V | V)) :
- Change the value of a brick parameter. <literal>name</literal> is the
- name of the parameter. <literal>V</literal> should contain the new
- parameter value (vector or float). If a MeshFem is given,
- <literal>V</literal> should hold the field values over that MeshFem
- (i.e. its last dimension should be gf_meshfem_get(mf,'nbdof') or 1 for
- constant field).</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_set(b,'penalization_epsilon',scalar eps) : Change the
- penalization coefficient of a constraint brick. This is only
- applicable to the bricks which inherit from the constraint brick, such
- as the Dirichlet ones. And of course it is not effective when the
- constraint is enforced via direct elimination or via Lagrange
- multipliers. The default value of <literal>eps</literal> is
- 1e-9.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_set(b,'constraints',mat H, vec R) : Set the constraints
- imposed by a constraint brick. This is only applicable to the bricks
- which inherit from the constraint brick, such as the Dirichlet ones.
- Imposes <emphasis>H.U=R</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdbrick_set(b,'constraints_rhs',mat H, vec R) : Set the right
- hand side of the constraints imposed by a constraint brick. This is
- only applicable to the bricks which inherit from the constraint brick,
- such as the Dirichlet ones.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mdbrick_set(mdbrick MDB, 'param', string name, {mesh_fem mf,V | V})</literal></para>
+
+ <para> Change the value of a brick parameter.
+
+ <literal>name</literal> is the name of the parameter. <literal>V</literal> should contain the
+ new parameter value (vector or float). If a mesh_fem is given,
+ <literal>V</literal> should hold the field values over that mesh_fem (i.e. its
+ last dimension should be gf_mesh_fem_get(mesh_fem MF, 'nbdof') or 1 for
+ constant field).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_set(mdbrick MDB, 'penalization_epsilon', scalar eps)</literal></para>
+
+ <para> Change the penalization coefficient of a constraint brick.
+
+ This is only applicable to the bricks which inherit from the
+ constraint brick, such as the Dirichlet ones. And of course it
+ is not effective when the constraint is enforced via direct
+ elimination or via Lagrange multipliers. The default value of
+ <literal>eps</literal> is 1e-9.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_set(mdbrick MDB, 'constraints', mat H, vec R)</literal></para>
+
+ <para> Set the constraints imposed by a constraint brick.
+
+ This is only applicable to the bricks which inherit from the
+ constraint brick, such as the Dirichlet ones. Imposes <literal>H.U=R</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdbrick_set(mdbrick MDB, 'constraints_rhs', mat H, vec R)</literal></para>
+
+ <para> Set the right hand side of the constraints imposed by a constraint brick.
+
+ This is only applicable to the bricks which inherit from the
+ constraint brick, such as the Dirichlet ones.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdbrick_get">gf_mdbrick_get</link></member>
- <member><link linkend="gf_mdbrick">gf_mdbrick</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate.xml b/interface/src/scilab/help/en_US/gf_mdstate.xml
index 5a8c29a..234f249 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate.xml
@@ -9,56 +9,80 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdstate</refname>
+ <refpurpose> A model state is an object which store the state data for a chain of model
+ bricks. This includes the global tangent matrix, the right hand side and
+ the constraints.
- <refpurpose>General constructor for mdstate objects. Return a getfem
- handle to the newly created object.</refpurpose>
+ This object is now deprecated and replaced by the model object.
+
+ There are two sorts of model states, the <literal>real</literal> and the <literal>complex</literal> models
+ states.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>M = gf_mdstate('complex' | 'real')</synopsis>
+ <synopsis>MDS = gf_mdstate('real')</synopsis>
+ <synopsis>MDS = gf_mdstate('complex')</synopsis>
+ <synopsis>MDS = gf_mdstate(mdbrick B)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mdstate objects.</para>
+
+ <para> A model state is an object which store the state data for a chain of model
+ bricks. This includes the global tangent matrix, the right hand side and
+ the constraints.
+
+ This object is now deprecated and replaced by the model object.
+
+ There are two sorts of model states, the <literal>real</literal> and the <literal>complex</literal> models
+ states.
+</para>
+ </refsection>
- <para> "Model State" variables store the state data for a set of model
- bricks. This includes the global tangent matrix, the right hand side and
- the constraints. There are two sorts of model states, the "real" and the
- "complex" models states.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>MDS = gf_mdstate('real') Build a model state for real
- unknowns.</para>
- </listitem>
-
- <listitem>
- <para>MDS = gf_mdstate('complex') Build a model state for complex
- unknowns.</para>
- </listitem>
-
- <listitem>
- <para>MDS = gf_mdstate('.mdbrick',MdBrick B) Build a modelstate for
- the brick <literal>B</literal>. Selects the real or complex state from
- the complexity of <literal>B</literal>.</para>
- </listitem>
+ <listitem>
+ <para><literal>MDS = gf_mdstate('real')</literal></para>
+
+ <para> Build a model state for real unknowns.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MDS = gf_mdstate('complex')</literal></para>
+
+ <para> Build a model state for complex unknowns.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MDS = gf_mdstate(mdbrick B)</literal></para>
+
+ <para> Build a modelstate for the brick <literal>B</literal>.
+
+ Selects the real or complex state from the complexity of <literal>B</literal>.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdstate_get">gf_mdstate_get</link></member>
- <member><link linkend="gf_mdstate_set">gf_mdstate_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate_get.xml b/interface/src/scilab/help/en_US/gf_mdstate_get.xml
index a016143..5462e59 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate_get.xml
@@ -9,95 +9,140 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdstate_get</refname>
-
- <refpurpose>Get information from a model state object.</refpurpose>
+ <refpurpose> Get information from a model state object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mdstate_get(mds,'is_complex')
-gf_mdstate_get(mds,'tangent_matrix')
-gf_mdstate_get(mds,'constraints_matrix')
-gf_mdstate_get(mds,'reduced_tangent_matrix')
-gf_mdstate_get(mds,'constraints_nullspace')
-gf_mdstate_get(mds,'state')
-gf_mdstate_get(mds,'residual')
-gf_mdstate_get(mds,'reduced_residual')
-gf_mdstate_get(mds,'unreduce', vec U)
-gf_mdstate_get(mds,'memsize')
- </synopsis>
+ <synopsis>b = gf_mdstate_get(mdstate MDS, 'is_complex')</synopsis>
+ <synopsis>T = gf_mdstate_get(mdstate MDS, 'tangent_matrix')</synopsis>
+ <synopsis>C = gf_mdstate_get(mdstate MDS, 'constraints_matrix')</synopsis>
+ <synopsis>A = gf_mdstate_get(mdstate MDS, 'reduced_tangent_matrix')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'constraints_nullspace')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'state')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'residual')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'reduced_residual')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'unreduce', vec U)</synopsis>
+ <synopsis>z = gf_mdstate_get(mdstate MDS, 'memsize')</synopsis>
+ <synopsis>s = gf_mdstate_get(mdstate MDS, 'char')</synopsis>
+ <synopsis>gf_mdstate_get(mdstate MDS, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Get information from a model state object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>b = gf_mdstate_get(mds,'is_complex') : Return 0 is the model state
- is real, 1 if it is complex.</para>
- </listitem>
-
- <listitem>
- <para>T = gf_mdstate_get(mds,tangent_matrix') : Return the tangent
- matrix stored in the model state.</para>
- </listitem>
-
- <listitem>
- <para>C = gf_mdstate_get(mds,'constraints_matrix') : Return the
- constraints matrix stored in the model state.</para>
- </listitem>
-
- <listitem>
- <para>A = gf_mdstate_get(mds,'reduced_tangent_matrix') : Return the
- reduced tangent matrix (i.e. the tangent matrix after elimination of
- the constraints).</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_get(mds,'constraints_nullspace') : Return the nullspace
- of the constraints matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_get(mds,'state') : Return the vector of unknowns, which
- contains the solution after gf_mdbrick_get(mdb,'solve').</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_get(mds,'residual') : Return the residual.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_get(mds,'reduced_residual') : Return the residual on
- the reduced system.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_get(mds,'unreduce',vec U) : Reinsert the constraint
- eliminated from the system.</para>
- </listitem>
-
- <listitem>
- <para>z = gf_mdstate_get(mds,'memsize') : Return the amount of memory
- (in bytes) used by the model state.</para>
- </listitem>
+ <listitem>
+ <para><literal>b = gf_mdstate_get(mdstate MDS, 'is_complex')</literal></para>
+
+ <para> Return 0 is the model state is real, 1 if it is complex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>T = gf_mdstate_get(mdstate MDS, 'tangent_matrix')</literal></para>
+
+ <para> Return the tangent matrix stored in the model state.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>C = gf_mdstate_get(mdstate MDS, 'constraints_matrix')</literal></para>
+
+ <para> Return the constraints matrix stored in the model state.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_mdstate_get(mdstate MDS, 'reduced_tangent_matrix')</literal></para>
+
+ <para> Return the reduced tangent matrix (i.e. the tangent matrix after
+ elimination of the constraints).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'constraints_nullspace')</literal></para>
+
+ <para> Return the nullspace of the constraints matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'state')</literal></para>
+
+ <para> Return the vector of unknowns, which contains the solution after gf_mdbrick_get(mdbrick MDB, 'solve').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'residual')</literal></para>
+
+ <para> Return the residual.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'reduced_residual')</literal></para>
+
+ <para> Return the residual on the reduced system.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'unreduce', vec U)</literal></para>
+
+ <para> Reinsert the constraint eliminated from the system.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_mdstate_get(mdstate MDS, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the model state.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_mdstate_get(mdstate MDS, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the mdstate.
+
+ This can be used to perform comparisons between two
+ different mdstate objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_get(mdstate MDS, 'display')</literal></para>
+
+ <para> displays a short summary for a mdstate.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdstate_set">gf_mdstate_set</link></member>
- <member><link linkend="gf_mdstate">gf_mdstate</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mdstate_set.xml b/interface/src/scilab/help/en_US/gf_mdstate_set.xml
index 8f30801..75ab81b 100644
--- a/interface/src/scilab/help/en_US/gf_mdstate_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mdstate_set.xml
@@ -9,70 +9,86 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mdstate_set</refname>
-
- <refpurpose>Modify a model state object.</refpurpose>
+ <refpurpose> Modify a model state object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mdstate_set(mds,'compute_reduced_system')
-gf_mdstate_set(mds,'compute_reduced_residual')
-gf_mdstate_set(mds,'compute_residual', mdbrick B)
-gf_mdstate_set(mds,'compute_tangent_matrix', mdbrick B)
-gf_mdstate_set(mds,'state', vec U)
-gf_mdstate_set(mds,'clear')
- </synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'compute_reduced_system')</synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'compute_reduced_residual')</synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'compute_residual', mdbrick B)</synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'compute_tangent_matrix', mdbrick B)</synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'state', vec U)</synopsis>
+ <synopsis>gf_mdstate_set(mdstate MDS, 'clear')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Modify a model state object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mdstate_set(mds,'compute_reduced_system') Compute the reduced
- system from the tangent matrix and constraints.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_set(mds,'compute_reduced_residual') Compute the
- reduced residual from the residual and constraints.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_set(mds,'compute_residual',MdBrick B) Compute the
- residual for the brick <literal>B</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_set(mds,'compute_tangent_matrix',MdBrick B) Update
- the tangent matrix from the brick <literal>B</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_set(mds,'state',vec U) Update the internal state with
- the vector <literal>U</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mdstate_set(mds,'clear') Clear the model state.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'compute_reduced_system')</literal></para>
+
+ <para> Compute the reduced system from the tangent matrix and constraints.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'compute_reduced_residual')</literal></para>
+
+ <para> Compute the reduced residual from the residual and constraints.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'compute_residual', mdbrick B)</literal></para>
+
+ <para> Compute the residual for the brick <literal>B</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'compute_tangent_matrix', mdbrick B)</literal></para>
+
+ <para> Update the tangent matrix from the brick <literal>B</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'state', vec U)</literal></para>
+
+ <para> Update the internal state with the vector <literal>U</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mdstate_set(mdstate MDS, 'clear')</literal></para>
+
+ <para> Clear the model state.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mdstate_get">gf_mdstate_get</link></member>
- <member><link linkend="gf_mdstate">gf_mdstate</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh.xml b/interface/src/scilab/help/en_US/gf_mesh.xml
index 6a9d7fe..05023a7 100644
--- a/interface/src/scilab/help/en_US/gf_mesh.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh.xml
@@ -9,144 +9,211 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh</refname>
+ <refpurpose> This object is able to store any element in any dimension even if you mix
+ elements with different dimensions.
- <refpurpose>General constructor for mesh object.</refpurpose>
+
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-M = gf_mesh('empty', int dim)
-M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])
-M = gf_mesh('triangles grid', vec X, vec Y)
-M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,.., ]][, 'degree', int K]['noised'])
-M = gf_mesh('curved', const_mesh M0, vec F)
-M = gf_mesh('prismatic', const_mesh M0, int K)
-M = gf_mesh('pt2D', mat p, imat t[, int n])
-M = gf_mesh('ptND', mat p, imat t)
-M = gf_mesh('load', string filename)
-M = gf_mesh('from string', string s)
-M = gf_mesh('import', string format, string filename)
-M = gf_mesh('clone', const_mesh M0)
- </synopsis>
+ <synopsis>M = gf_mesh('empty', int dim)</synopsis>
+ <synopsis>M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])</synopsis>
+ <synopsis>M = gf_mesh('cartesian Q1', vec X, vec Y[, vec Z,..])</synopsis>
+ <synopsis>M = gf_mesh('triangles grid', vec X, vec Y)</synopsis>
+ <synopsis>M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,...]]['degree', int k]['noised'])</synopsis>
+ <synopsis>M = gf_mesh('curved', mesh m, vec F)</synopsis>
+ <synopsis>M = gf_mesh('prismatic', mesh m, int nl)</synopsis>
+ <synopsis>M = gf_mesh('pt2D', mat P, imat T[, int n])</synopsis>
+ <synopsis>M = gf_mesh('ptND', mat P, imat T)</synopsis>
+ <synopsis>M = gf_mesh('load', string filename)</synopsis>
+ <synopsis>M = gf_mesh('from string', string s)</synopsis>
+ <synopsis>M = gf_mesh('import', string format, string filename)</synopsis>
+ <synopsis>M = gf_mesh('clone', mesh m2)</synopsis>
+ <synopsis>M = gf_mesh('generate', mesher_object mo, scalar h[, int K = 1[, mat vertices]])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mesh objects.</para>
- <para>The function gf_mesh creates a new mesh object. The gf_mesh version returns a matlab structure, which can be manipulated with
- gf_mesh_get(M,...) and gf_mesh_set(M,...).</para>
- <para>The first argument specifies the kind of operation which will create the mesh. The returned value, M, is an identifier (of type uint32)
- to the new object.</para>
+ <para> This object is able to store any element in any dimension even if you mix
+ elements with different dimensions.
- <itemizedlist>
- <listitem>
- <para>gf_mesh('empty', dim) : return a new empty mesh, whose nodes have dim coordinates.
- This mesh can be later populated with e.g. gf_mesh_set('add convex',...).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('cartesian', X[, Y,...]) : can be used to build quickly a cartesian mesh (with a linear geometric transformation,
- see gf_geotrans. The vectors X,Y,...contain the vertices coordinates along each axis. The regular numbering of points
- and convexes is guaranteed by this functions</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('triangles grid', X, Y) : create a regular 2D mesh, similar to a cartesian grid where each rectangle is split in two triangles.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('regular simplices', X, ...) : is a generalization to arbitrary dimensions of the triangles grid.
- For example, gf_mesh('regular simplices',0:10, 0:10, 'degree', 2, 'noised') will build a mesh of quadratic triangles (of irregular shape).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('curved', M0, F) : build a curved (n+1)-dimensions mesh from a n-dimensions mesh M0: the new mesh has one additional dimension.
- The additional coordinate is given by the vector F. This can be used to obtain meshes for shells.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('prismatic', M0, K) : extrude a prismatic mesh M from a mesh M0. In the additional dimension there are K layers of elements
- stacked in the range [0..1].</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('pt2D', p, t[, n]) : build quickly a planar mesh from a points array p and a triangulation t. This can be used to convert
- a pdetool mesh exported in variables p and t into a getfem++ mesh M. n is optional and is a zone number. If n is specified only triangle
- belonging to the zone number n are created in the mesh. The points array p is assumed to be a 2Ãnpoints matrix, and the triangles
- array should be a 3Ãnbtri matrix, or a 4Ãnbtri if a zone number is used.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('ptND', p, t[, n]) : this is a more general form of 'pt2d'. It builds a simplex mesh from a given triangulation.
- The dimension of the mesh will be the number of rows of p, and the dimension of the simplexes will be the number of rows of t.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('load', filename) : load a mesh from a getfem++ mesh file (which may have been created by gf_mesh_get(M,'save',filename).
- gf_mesh('from string', s) is very similar, but the mesh is loaded from a string instead of a file.
- The content of this string may be set by s=gf_mesh_get(M,'char').</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('import', format, filename) import a mesh from a file. For the moment, only three formats are supported:</para>
- <itemizedlist>
- <listitem>
- <para> mesh objects created with gmsh (GPL meshing/post processing tool) : gf_mesh('import', 'gmsh', filename).
- Note that gmsh meshes always use 3D points, even for planar meshes.
- However, you can remove the z-component of the planar mesh with
- gf_mesh_set(m, 'transform', [1 0 0; 0 1 0]).
- Use gf_mesh('import', 'gmshv2', filename) for gmsh file-format version 2.0.</para>
- </listitem>
- <listitem>
- <para> mesh objects created with GiD (only limited version is free, but it is able to generate quadratic elements) :
- gf_mesh('import', 'gid', filename).</para>
- </listitem>
- <listitem>
- <para> 2D triangular meshes from emc2, saved with the am_fmt format : gf_mesh('import', 'am_fmt', filename). </para>
- </listitem>
- </itemizedlist>
- <para>Support for other file-formats should be quickly available.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh('clone', M0) : return a copy of the mesh M0. Note that m = gf_mesh('clone', m0) is different from doing m = m0
- since in the latter case, m and m0 still refer the same getfem mesh object! </para>
- </listitem>
- </itemizedlist>
+
+</para>
</refsection>
<refsection>
- <title>Examples</title>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>M = gf_mesh('empty', int dim)</literal></para>
+
+ <para> Create a new empty mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('cartesian', vec X[, vec Y[, vec Z,..]])</literal></para>
+
+ <para> Build quickly a regular mesh of quadrangles, cubes, etc.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('cartesian Q1', vec X, vec Y[, vec Z,..])</literal></para>
+
+ <para> Build quickly a regular mesh of quadrangles, cubes, etc. with
+ Q1 elements.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('triangles grid', vec X, vec Y)</literal></para>
+
+ <para> Build quickly a regular mesh of triangles.
+
+ This is a very limited and somehow deprecated function (See also
+ <literal></literal>gf_mesh('ptND')<literal></literal>, <literal></literal>gf_mesh('regular simplices')<literal></literal> and
+ <literal></literal>gf_mesh('cartesian')<literal></literal>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('regular simplices', vec X[, vec Y[, vec Z,...]]['degree', int k]['noised'])</literal></para>
+
+ <para> Mesh a n-dimensionnal parallelepipeded with simplices (triangles,
+ tetrahedrons etc) .
+
+ The optional degree may be used to build meshes with non linear
+ geometric transformations.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('curved', mesh m, vec F)</literal></para>
+
+ <para> Build a curved (n+1)-dimensions mesh from a n-dimensions mesh <literal>m</literal>.
+
+ The points of the new mesh have one additional coordinate, given by
+ the vector <literal>F</literal>. This can be used to obtain meshes for shells. <literal>m</literal> may
+ be a mesh_fem object, in that case its linked mesh will be used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('prismatic', mesh m, int nl)</literal></para>
+
+ <para> Extrude a prismatic mesh <literal>M</literal> from a mesh <literal>m</literal>.
+
+ In the additional dimension there are <literal>nl</literal> layers of elements built
+ from <literal></literal>0<literal></literal> to <literal></literal>1<literal></literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('pt2D', mat P, imat T[, int n])</literal></para>
- <para>Building a small 5Ã3 cartesian mesh: </para>
+ <para> Build a mesh from a 2D triangulation.
- <programlisting role="example"><![CDATA[
-m = gf_mesh('cartesian',[0:.2:1], [0:3])
- ]]></programlisting>
+ Each column of <literal>P</literal> contains a point coordinate, and each column of <literal>T</literal>
+ contains the point indices of a triangle. <literal>n</literal> is optional and is a
+ zone number. If <literal>n</literal> is specified then only the zone number <literal>n</literal> is
+ converted (in that case, <literal>T</literal> is expected to have 4 rows, the fourth
+ containing these zone numbers).
- <para>Making a curved mesh with z=x^2+y^2: </para>
+
+ </para>
+ </listitem>
- <programlisting role="example"><![CDATA[
-pts = gf_mesh_get(m, 'pts coords');
-V = pts(1,:).^2 + pts(2,:)^2;
-m2 = gf_mesh('curved', m, V);
- ]]></programlisting>
+ <listitem>
+ <para><literal>M = gf_mesh('ptND', mat P, imat T)</literal></para>
+
+ <para> Build a mesh from a n-dimensional "triangulation".
+
+ Similar function to 'pt2D', for building simplexes meshes from a
+ triangulation given in <literal>T</literal>, and a list of points given in <literal>P</literal>. The
+ dimension of the mesh will be the number of rows of <literal>P</literal>, and the
+ dimension of the simplexes will be the number of rows of <literal>T</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('load', string filename)</literal></para>
+
+ <para> Load a mesh from a getfem++ ascii mesh file.
+
+ See also <literal></literal>gf_mesh_get(mesh M, 'save', string filename)<literal></literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('from string', string s)</literal></para>
+
+ <para> Load a mesh from a string description.
+
+ For example, a string returned by <literal></literal>gf_mesh_get(mesh M, 'char')<literal></literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('import', string format, string filename)</literal></para>
+
+ <para> Import a mesh.
+
+ <literal>format</literal> may be:
+
+ - 'gmsh' for a mesh created with <literal>Gmsh</literal>
+ - 'gid' for a mesh created with <literal>GiD</literal>
+ - 'am_fmt' for a mesh created with <literal>EMC2</literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('clone', mesh m2)</literal></para>
+
+ <para> Create a copy of a mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh('generate', mesher_object mo, scalar h[, int K = 1[, mat vertices]])</literal></para>
+
+ <para> Call the (very) experimental mesher of Getfem on the geometry
+ represented by <literal>mo</literal>. please control the conformity of the produced mesh.
+ You can add the mesher by adding a priori vertices in the array
+ <literal>vertices</literal> which should be of size <literal></literal>n x m<literal></literal> where <literal></literal>n<literal></literal> n is the
+ dimension of the mesh and <literal></literal>m<literal></literal> the number of points. <literal>h</literal> is
+ approximate diameter of the elements. <literal>K</literal> is the degree of the
+ mesh ( > 1 for curved boundaries). The mesher try to optimize the
+ quality of the elements. This operation may be time consuming.
+ Note that if the mesh generation fails, because of some random
+ procedure used, it will not give necessarily the same result due
+ to random procedures used.
+ The messages send to the console by the mesh generation can be
+ desactivated using <literal>gf_util('trace level', 2)</literal>. More information
+ can be obtained by <literal>gf_util('trace level', 4)</literal>.
+
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
- <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem.xml b/interface/src/scilab/help/en_US/gf_mesh_fem.xml
index f5c63e2..20f7062 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem.xml
@@ -9,114 +9,125 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_fem</refname>
-
- <refpurpose>General constructor for mesh_fem objects (Finite Element basis
- functions on a mesh).</refpurpose>
+ <refpurpose> This object represents a finite element method defined on a whole mesh.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-mesh_fem MF = gf_mesh_fem(mesh M [, int Qdim=1])
-mesh_fem MF[,M] = gf_mesh_fem('load', string filename[,mesh M])
-mesh_fem MF[,M] = gf_mesh_fem('from string', string S [,mesh M])
-mesh_fem MF = gf_mesh_fem('clone', mesh_fem MF0)
-mesh_fem MF = gf_mesh_fem('partial', mesh_fem mf, vec DOFs[, vec RCVs])
-mesh_fem MF = gf_mesh_fem('global function', mesh m, level_set ls, [gl F1,...][, int Qdim_m])
- </synopsis>
+ <synopsis>MF = gf_mesh_fem('load', string fname[, mesh m])</synopsis>
+ <synopsis>MF = gf_mesh_fem('from string', string s[, mesh m])</synopsis>
+ <synopsis>MF = gf_mesh_fem('clone', mesh_fem mf)</synopsis>
+ <synopsis>MF = gf_mesh_fem('sum', mesh_fem mf1, mesh_fem mf2[, mesh_fem mf3[, ...]])</synopsis>
+ <synopsis>MF = gf_mesh_fem('levelset', mesh_levelset mls, mesh_fem mf)</synopsis>
+ <synopsis>MF = gf_mesh_fem('global function', mesh m, levelset ls, {global_function GF1,...}[, int Qdim_m])</synopsis>
+ <synopsis>MF = gf_mesh_fem('partial', mesh_fem mf, ivec DOFs[, ivec RCVs])</synopsis>
+ <synopsis>MF = gf_mesh_fem(mesh m[, int Qdim_m=1[, int Qdim_n=1]])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mesh_fem objects.</para>
+
+ <para> This object represents a finite element method defined on a whole mesh.
+</para>
+ </refsection>
- <para>This function creates a mesh_fem object. These objects hold the finite element basis functions on a mesh :
- a finite element is assigned to each convex of the mesh, and the mesh_fem takes care of connecting them across the convexes
- and enumerating the degrees of freedom.</para>
- <para>gf_mesh_fem(M,Qdim) creates a new mesh_fem object linked to the mesh M. mesh_fem objects can be used everywhere a const_mesh object
- is required (its linked mesh is automatically used). The argument Qdim specifies the dimension of the unknown on this mesh.
- If the unknown is a scalar field, then Qdim=1, if it is a 2D vector field then Qdim=2 etc...:
- this is independent of the mesh dimension.</para>
- <para>The load command can restore a previously saved mesh_fem object. If you don't specify the mesh argument, it is assumed that the mesh
- was saved in the same file that the mesh_fem (with gf_mesh_fem_get(mf, 'save with mesh')). The 'from string' command is very similar,
- but loads the object from a string instead of a file.</para>
- <para>And finally, it is possible to build a copy of a mesh_fem object with the gf_mesh_fem('clone', MF0) command
- (see also the gf_mesh('clone') command).</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_fem('load', string fname[, Mesh m]) Load a MeshFem from
- a file. If the mesh <literal>m</literal> is not supplied (this kind of
- file does not store the mesh), then it is read from the file
- <literal>fname</literal> and its descriptor is returned as the second
- output argument.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('from string', string [, mesh M]) Create a MeshFem
- object from its string description. See also
- gf_mesh_fem_get(mf,'char')</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('clone', MeshFem mf2) Create a copy of a
- MeshFem.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('sum', MeshFem mf1, MeshFem mf2[, MeshFem mf3[,
- ...]]) Create a MeshFem that combines two (or more) MeshFem's. All
- MeshFem must share the same mesh (see gf_fem('interpolated_fem') to
- map a MeshFem onto another). After that, you should not modify the FEM
- of <literal>mf1</literal>, <literal>mf2</literal> etc.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('levelset', MeshFem mf, LevelSet ls) Create a
- MeshFem that is conformal to implicit surfaces defined by
- LevelSet's.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('partial', MeshFem mf, vec DOFs[,vec RCVs]) Build a
- restricted MeshFem by keeping only a subset of the degrees of freedom
- of <literal>mf</literal>. If <literal>RCVs</literal> is given, no FEM
- will be put on the convexes listed in <literal>RCVs</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('.mesh', Mesh m[, int Qdim=1]) Build a new MeshFem
- object. The <literal>Qdim</literal> parameter is optional.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem('partial', mesh_fem mf, vec DOFs[, vec
- RCVs]) creates a special restricted mesh_fem by keeping only a
- subset of the degrees of freedom of a pre-existing mesh_fem
- `mf`.</para>
- <para>If `RCVs` is given, no FEM will be put on the convexes
- listed in `RCVs`.</para>
- </listitem>
- <listitem>
- <para>gf_mesh_fem('global function', mesh m, level_set ls, [gl
- F1,...][, int Qdim_m]) Create a mesh_fem whose base functions are
- global function given by the user.</para>
- </listitem>
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('load', string fname[, mesh m])</literal></para>
+
+ <para> Load a mesh_fem from a file.
+
+ If the mesh <literal>m</literal> is not supplied (this kind of file does not store the
+ mesh), then it is read from the file <literal>fname</literal> and its descriptor is
+ returned as the second output argument.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('from string', string s[, mesh m])</literal></para>
+
+ <para> Create a mesh_fem object from its string description.
+
+ See also <literal></literal>gf_mesh_fem_get(mesh_fem MF, 'char')<literal></literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('clone', mesh_fem mf)</literal></para>
+
+ <para> Create a copy of a mesh_fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('sum', mesh_fem mf1, mesh_fem mf2[, mesh_fem mf3[, ...]])</literal></para>
+
+ <para> Create a mesh_fem that combines two (or more) mesh_fem's.
+
+ All mesh_fem must share the same mesh (see
+ <literal></literal>gf_fem('interpolated_fem')<literal></literal> to map a mesh_fem onto another).
+
+ After that, you should not modify the FEM of <literal>mf1</literal>, <literal>mf2</literal> etc.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('levelset', mesh_levelset mls, mesh_fem mf)</literal></para>
+
+ <para> Create a mesh_fem that is conformal to implicit surfaces defined in
+ mesh_levelset.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('global function', mesh m, levelset ls, {global_function GF1,...}[, int Qdim_m])</literal></para>
+
+ <para> Create a mesh_fem whose base functions are global function given by the
+ user in the system of coordinate defined by the iso-values of the two
+ level-set function of <literal>ls</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem('partial', mesh_fem mf, ivec DOFs[, ivec RCVs])</literal></para>
+
+ <para> Build a restricted mesh_fem by keeping only a subset of the degrees of
+ freedom of <literal>mf</literal>.
+
+ If <literal>RCVs</literal> is given, no FEM will be put on the convexes listed in
+ <literal>RCVs</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MF = gf_mesh_fem(mesh m[, int Qdim_m=1[, int Qdim_n=1]])</literal></para>
+
+ <para> Build a new mesh_fem object.
+
+ <literal>Qdim_m</literal> and <literal>Qdim_n</literal> parameters are optionals. Returns the handle of
+ the created object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
-
+
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_fem_set">gf_mesh_fem_set</link></member>
- <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml b/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
index 79e977b..b423d91 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
@@ -9,348 +9,446 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_fem_get</refname>
-
- <refpurpose>General function for inquiry about mesh_fem
- objects.</refpurpose>
+ <refpurpose> General function for inquiry about mesh_fem objects.
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int N = gf_mesh_fem_get(MF, 'nbdof')
-int N = gf_mesh_fem_get(MF, 'nb basic dof')
-ivec DOF = gf_mesh_fem_get(MF, 'basic dof from cv', ivec CVLST)
-ivec [DOF,CV2DOF] = gf_mesh_fem_get(MF, 'basic dof from cvid', [ivec CVLST])
-ivec DOF = gf_mesh_fem_get(MF, 'non conformal basic dof' [, ivec CVLST])
-fem FEMLST[, ivec CV2F] = gf_mesh_fem_get(MF, 'fem' [, ivec CVLST])
-ivec CVLST = gf_mesh_fem_get(MF, 'convex_index')
-int N = gf_mesh_fem_get(MF, 'qdim')
-ivec I = gf_mesh_fem_get(MF, {'is_lagrangian' | 'is_equivalent' | 'is_polynomial'}
- [, ivec CVLST])
-int N = gf_mesh_fem_get(MF, 'is_reduced')
-spmat R = gf_mesh_fem_get(MF, 'reduction_matrix')
-spmat R = gf_mesh_fem_get(MF, 'extension_matrix')
-ivec DOFLST = gf_mesh_fem_get(MF, 'basic dof on region', ivec rlist)
-ivec DOFLST = gf_mesh_fem_get(MF, 'dof on region', ivec rlist)
-mat DOF_XY = gf_mesh_fem_get(MF, 'basic dof nodes'[, ivec DOFLST])
-ivec DOFP = gf_mesh_fem_get(MF, 'dof partition')
-vec U = gf_mesh_fem_get(MF, 'interpolate convex data', vec Ucv)
-gf_mesh_fem_get(MF, 'save', string filename, ['with mesh'])
-gf_mesh_fem_get(MF,'export_to_vtk', filename, ... ['ascii'], U, 'name'...)
-gf_mesh_fem_get(MF,'export_to_dx', filename, ... ['as', mesh_name][,'edges']['serie',serie_name][,'ascii'][,'append'], U, 'name'...)
-string S=gf_mesh_fem_get(M, 'char' [,'with mesh'])
-mesh M=gf_mesh_fem_get(MF, 'linked mesh')
-vec U=gf_mesh_fem_get(MF, 'eval', expr [,ivec DOFLST])
-M=gf_mesh_fem_get(MF, 'memsize')
- </synopsis>
+ <synopsis>n = gf_mesh_fem_get(mesh_fem MF, 'nbdof')</synopsis>
+ <synopsis>n = gf_mesh_fem_get(mesh_fem MF, 'nb basic dof')</synopsis>
+ <synopsis>DOF = gf_mesh_fem_get(mesh_fem MF, 'dof from cv',mat CVids)</synopsis>
+ <synopsis>DOF = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv',mat CVids)</synopsis>
+ <synopsis>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'dof from cvid'[, mat CVids])</synopsis>
+ <synopsis>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid'[, mat CVids])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'non conformal dof'[, mat CVids])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof'[, mat CVids])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'qdim')</synopsis>
+ <synopsis>{FEMs, CV2F} = gf_mesh_fem_get(mesh_fem MF, 'fem'[, mat CVids])</synopsis>
+ <synopsis>CVs = gf_mesh_fem_get(mesh_fem MF, 'convex_index')</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian'[, mat CVids])</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_equivalent'[, mat CVids])</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_polynomial'[, mat CVids])</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'is_reduced')</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'reduction matrix')</synopsis>
+ <synopsis>bB = gf_mesh_fem_get(mesh_fem MF, 'extension matrix')</synopsis>
+ <synopsis>DOFs = gf_mesh_fem_get(mesh_fem MF, 'basic dof on region',mat Rs)</synopsis>
+ <synopsis>DOFs = gf_mesh_fem_get(mesh_fem MF, 'dof on region',mat Rs)</synopsis>
+ <synopsis>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'dof nodes'[, mat DOFids])</synopsis>
+ <synopsis>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes'[, mat DOFids])</synopsis>
+ <synopsis>DOFP = gf_mesh_fem_get(mesh_fem MF, 'dof partition')</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'save',string filename[, string opt])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'char'[, string opt])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'display')</synopsis>
+ <synopsis>m = gf_mesh_fem_get(mesh_fem MF, 'linked mesh')</synopsis>
+ <synopsis>m = gf_mesh_fem_get(mesh_fem MF, 'mesh')</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to vtk',string filename, ... ['ascii'], U, 'name'...)</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to dx',string filename, ...['as', string mesh_name][,'edges']['serie',string serie_name][,'ascii'][,'append'], U, 'name'...)</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'export to pos',string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf2], mat U2, string nameU2,...]])</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'dof_from_im',mesh_im mim[, int p])</synopsis>
+ <synopsis>U = gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data',mat Ucv)</synopsis>
+ <synopsis>z = gf_mesh_fem_get(mesh_fem MF, 'memsize')</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'has_linked_mesh_levelset')</synopsis>
+ <synopsis>gf_mesh_fem_get(mesh_fem MF, 'linked_mesh_levelset')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
-
- <itemizedlist>
- <listitem>
- <para>n = gf_mesh_fem_get(MF,'nbdof') Return the number of degrees of
- freedom (dof) of the MeshFem.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_mesh_fem_get(MF,'nb basic dof') Return the number of
- basic degrees of freedom (dof) of the MeshFem.</para>
- </listitem>
-
- <listitem>
- <para>DOF = gf_mesh_fem_get(MF,'dof from cv',mat CVids) Deprecated
- function. Use gf_mesh_fem_get(MF,'basic dof from cv') instead.</para>
- </listitem>
-
- <listitem>
- <para>DOF = gf_mesh_fem_get(MF,'basic dof from cv',mat CVids) Return
- the dof of the convexes listed in <literal>CVids</literal>. </para>
-
- <para>WARNING: the Degree of Freedom might be returned in ANY order,
- do not use this function in your assembly routines. Use 'basic dof
- from cvid' instead, if you want to be able to map a convex number with
- its associated degrees of freedom. One can also get the list of basic
- dof on a set on convex faces, by indicating on the second row of
- <literal>CVids</literal> the faces numbers (with respect to the convex
- number on the first row).</para>
- </listitem>
-
- <listitem>
- <para>DOF = gf_mesh_fem_get(MF,'dof from cvid'[, mat CVids])
- Deprecated function. Use gf_mesh_fem_get(MF,'basic dof from cvid')
- instead.</para>
- </listitem>
-
- <listitem>
- <para>list(DOFs, IDx) = gf_mesh_fem_get(MF,'basic dof from cvid'[, mat
- CVids]) Return the degrees of freedom attached to each convex of the
- mesh. If <literal>CVids</literal> is omitted, all the convexes will be
- considered (equivalent to <emphasis>CVids = 1 ... gf_mesh_get(M,'max
- cvid')</emphasis>). <literal>IDx</literal> is a Scilab row vector,
- <emphasis>length(IDx) = length(CVids)+1</emphasis>.
- <literal>DOFs</literal> is a Scilab row vector containing the
- concatenated list of dof of each convex in <literal>CVids</literal>.
- Each entry of <literal>IDx</literal> is the position of the
- corresponding convex point list in <literal>DOFs</literal>. Hence, for
- example, the list of points of the second convex is
- <emphasis>DOFs(IDx(2):IDx(3)-1)</emphasis>. If
- <literal>CVids</literal> contains convex #id which do not exist in the
- mesh, their point list will be empty.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'non conformal dof'[, mat CVids]) Deprecated
- function. Use gf_mesh_fem_get(MF,'non conformal basic dof')
- instead.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'non conformal basic dof'[, mat CVids])
- Return partially linked degrees of freedom. Return the basic dof
- located on the border of a convex and which belong to only one convex,
- except the ones which are located on the border of the mesh. For
- example, if the convex 'a' and 'b' share a common face, 'a' has a P1
- FEM, and 'b' has a P2 FEM, then the basic dof on the middle of the
- face will be returned by this function (this can be useful when
- searching the interfaces between classical FEM and hierarchical
- FEM).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'qdim') Return the dimension Q of the field
- interpolated by the MeshFem. By default, Q=1 (scalar field). This has
- an impact on the dof numbering.</para>
- </listitem>
-
- <listitem>
- <para>list(FEMs, CV2F) = gf_mesh_fem_get(MF,'fem'[, mat CVids]) Return
- a list of FEM used by the MeshFem. <literal>FEMs</literal> is an array
- of all Fem objects found in the convexes given in
- <literal>CVids</literal>. If <literal>CV2F</literal> was supplied as
- an output argument, it contains, for each convex listed in
- <literal>CVids</literal>, the index of its correspounding FEM in
- <literal>FEMs</literal>. Convexes which are not part of the mesh, or
- convexes which do not have any FEM have their correspounding entry in
- <literal>CV2F</literal> set to -1.</para>
- </listitem>
-
- <listitem>
- <para>CVs = gf_mesh_fem_get(MF,'convex_index') Return the list of
- convexes who have a FEM.</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'is_lagrangian'[, mat CVids]) Test if
- the MeshFem is Lagrangian. Lagrangian means that each base function
- <emphasis>Phi[i]</emphasis> is such that <emphasis>Phi[i](P[j]) =
- delta(i,j)</emphasis>, where <emphasis>P[j]</emphasis> is the dof
- location of the jth base function, and <emphasis>delta(i,j) = 1 if
- i==j, else 0</emphasis>.</para>
-
- <para>If <literal>CVids</literal> is omitted, it returns 1 if all
- convexes in the mesh are Lagrangian. If <literal>CVids</literal> is
- used, it returns the convex indices (with respect to
- <literal>CVids</literal>) which are Lagrangian.</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'is_equivalent'[, mat CVids]) Test if
- the MeshFem is equivalent. See
- gf_mesh_fem_get(MF,'is_lagrangian')</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'is_polynomial'[, mat CVids]) Test if
- all base functions are polynomials. See
- gf_mesh_fem_get(MF,'is_lagrangian')</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'is_reduced') Return 1 if the optional
- reduction matrix is applied to the dofs.</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'reduction matrix') Return the optional
- reduction matrix.</para>
- </listitem>
-
- <listitem>
- <para>bB = gf_mesh_fem_get(MF,'extension matrix') Return the optional
- extension matrix.</para>
- </listitem>
-
- <listitem>
- <para>DOFs = gf_mesh_fem_get(MF,'basic dof on region',mat Rs) Return
- the list of basic dof (before the optional reduction) lying on one of
- the mesh regions listed in <literal>Rs</literal>. More precisely, this
- function returns the basic dof whose support is non-null on one of
- regions whose #ids are listed in <literal>Rs</literal> (note that for
- boundary regions, some dof nodes may not lie exactly on the boundary,
- for example the dof of Pk(n,0) lies on the center of the convex, but
- the base function in not null on the convex border).</para>
- </listitem>
-
- <listitem>
- <para>DOFs = gf_mesh_fem_get(MF,'dof on region',mat Rs) Return the
- list of dof (after the optional reduction) lying on one of the mesh
- regions listed in <literal>Rs</literal>. More precisely, this function
- returns the basic dof whose support is non-null on one of regions
- whose #ids are listed in `Rs` (note that for boundary regions, some
- dof nodes may not lie exactly on the boundary, for example the dof of
- Pk(n,0) lies on the center of the convex, but the base function in not
- null on the convex border). For a reduced mesh_fem a dof is lying on a
- region if its potential corresponding shape function is nonzero on
- this region. The extension matrix is used to make the correspondance
- between basic and reduced dofs.</para>
- </listitem>
-
- <listitem>
- <para>DOFpts = gf_mesh_fem_get(MF,'dof nodes'[, mat DOFids])
- Deprecated function. Use gf_mesh_fem_get(MF,'basic dof nodes')
- instead.</para>
- </listitem>
-
- <listitem>
- <para>DOFpts = gf_mesh_fem_get(MF,'basic dof nodes'[, mat DOFids]) Get
- location of basic degrees of freedom. Return the list of interpolation
- points for the specified dof #IDs in `DOFids` (if `DOFids` is omitted,
- all basic dof are considered).</para>
- </listitem>
-
- <listitem>
- <para>DOFP = gf_mesh_fem_get(MF,'dof partition') Get the
- 'dof_partition' array. Return the array which associates an integer
- (the partition number) to each convex of the MeshFem. By default, it
- is an all-zero array. The degrees of freedom of each convex of the
- MeshFem are connected only to the dof of neighbouring convexes which
- have the same partition number, hence it is possible to create
- partially discontinuous MeshFem very easily.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'save',string filename[, string opt]) Save a
- MeshFem in a text file (and optionaly its linked mesh object if
- <literal>opt</literal> is the string 'with_mesh').</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'char'[, string opt]) Output a string
- description of the MeshFem. By default, it does not include the
- description of the linked mesh object, except if
- <literal>opt</literal> is 'with_mesh'.</para>
- </listitem>
-
- <listitem>
- <para>m = gf_mesh_fem_get(MF,'linked mesh') Return a reference to the
- Mesh object linked to `mf`.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'export to vtk',string filename, ...
- ['ascii'], U, 'name'...) Export a MeshFem and some fields to a vtk
- file. The FEM and geometric transformations will be mapped to order 1
- or 2 isoparametric Pk (or Qk) FEMs (as VTK does not handle higher
- order elements). If you need to represent high-order FEMs or
- high-order geometric transformations, you should consider
- gf_slice_get(sl,'export to vtk').</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'export to dx',string filename, ...['as',
- string mesh_name][,'edges']['serie',string
- serie_name][,'ascii'][,'append'], U, 'name'...) Export a MeshFem and
- some fields to an OpenDX file. This function will fail if the MeshFem
- mixes different convex types (i.e. quads and triangles), or if OpenDX
- does not handle a specific element type (i.e. prism connections are
- not known by OpenDX). The FEM will be mapped to order 1 Pk (or Qk)
- FEMs. If you need to represent high-order FEMs or high-order geometric
- transformations, you should consider gf_slice_get(sl,'export to
- dx').</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'export to pos',string filename[, mat U1,
- string nameU1[, mat U2, string nameU2,...]) Export a MeshFem and some
- fields to a pos file. The FEM and geometric transformations will be
- mapped to order 1 isoparametric Pk (or Qk) FEMs (as GMSH does not
- handle higher order elements).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'dof_from_im',MeshIm mim[, int p]) Return a
- selection of dof who contribute significantly to the mass-matrix that
- would be computed with <literal>mf</literal> and the integration
- method <literal>mim</literal>. <literal>p</literal> represents the
- dimension on what the integration method operates (default <emphasis>p
- = mesh dimension</emphasis>). </para>
-
- <para>IMPORTANT: you still have to set a valid integration method on
- the convexes which are not crosses by the levelset!</para>
- </listitem>
-
- <listitem>
- <para>U = gf_mesh_fem_get(MF,'interpolate_convex_data',mat Ucv)
- Interpolate data given on each convex of the mesh to the MeshFem dof.
- The MeshFem has to be lagrangian, and should be discontinuous
- (typically a FEM_PK(N,0) or FEM_QK(N,0) should be used). The last
- dimension of the input vector Ucv should have gf_mesh_get(M,'max
- cvid') elements. </para>
-
- <para>Example of use: gf_mesh_fem_get(MF,'interpolate_convex_data',
- gf_mesh_get(M,'quality'))</para>
- </listitem>
-
- <listitem>
- <para>z = gf_mesh_fem_get(MF,'memsize') Return the amount of memory
- (in bytes) used by the mesh_fem object. The result does not take into
- account the linked mesh object.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'has_linked_mesh_levelset') ???.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_get(MF,'linked_mesh_levelset') ???</para>
- </listitem>
- </itemizedlist>
+ <para> General function for inquiry about mesh_fem objects.
+ </para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <programlisting role="example">
-cvid=gf_mesh_get(mf,'cvid');
-[f,c2f]=gf_mesh_fem_get(mf, 'fem');
-sf = list()
-for i=1:size(f), sf(i)=gf_fem_get('char',f(i)); end;
-for i=1:size(c2f),
- disp(sprintf('the fem of convex %d is %s', cvid(i),sf(i)));
-end
-
-U1=gf_mesh_fem_get_eval(mf,1)
-U2=gf_mesh_fem_get_eval(mf,[1;0]) // output has two rows
-U3=gf_mesh_fem_get_eval(mf,[1 0]) // output has one row, only valid if qdim(mf)==2
-U4=gf_mesh_fem_get_eval(mf,list('x';'y.*z';4;myfunctionofxyz))
- </programlisting>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>n = gf_mesh_fem_get(mesh_fem MF, 'nbdof')</literal></para>
+
+ <para> Return the number of degrees of freedom (dof) of the mesh_fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_mesh_fem_get(mesh_fem MF, 'nb basic dof')</literal></para>
+
+ <para> Return the number of basic degrees of freedom (dof) of the mesh_fem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOF = gf_mesh_fem_get(mesh_fem MF, 'dof from cv',mat CVids)</literal></para>
+
+ <para> Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv') instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOF = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cv',mat CVids)</literal></para>
+
+ <para> Return the dof of the convexes listed in <literal>CVids</literal>.
+
+ WARNING: the Degree of Freedom might be returned in ANY order, do
+ not use this function in your assembly routines. Use 'basic dof from cvid'
+ instead, if you want to be able to map a convex number with its
+ associated degrees of freedom.
+
+ One can also get the list of basic dof on a set on convex faces, by
+ indicating on the second row of <literal>CVids</literal> the faces numbers (with
+ respect to the convex number on the first row).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'dof from cvid'[, mat CVids])</literal></para>
+
+ <para> Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid') instead.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{DOFs, IDx} = gf_mesh_fem_get(mesh_fem MF, 'basic dof from cvid'[, mat CVids])</literal></para>
+
+ <para> Return the degrees of freedom attached to each convex of the mesh.
+
+ If <literal>CVids</literal> is omitted, all the convexes will be considered (equivalent
+ to <literal>CVids = 1 ... gf_mesh_get(mesh M, 'max cvid')</literal>).
+
+ <literal>IDx</literal> is a vector, <literal>length(IDx) = length(CVids)+1</literal>.
+ <literal>DOFs</literal> is a vector containing the concatenated list
+ of dof of each convex in <literal>CVids</literal>. Each entry of <literal>IDx</literal> is the position
+ of the corresponding convex point list in <literal>DOFs</literal>. Hence, for example,
+ the list of points of the second convex is DOFs(IDx(2):IDx(3)-1).
+
+ If <literal>CVids</literal> contains convex #id which do not exist in the mesh, their
+ point list will be empty.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'non conformal dof'[, mat CVids])</literal></para>
+
+ <para> Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof') instead.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'non conformal basic dof'[, mat CVids])</literal></para>
+
+ <para> Return partially linked degrees of freedom.
+
+ Return the basic dof located on the border of a convex and which belong
+ to only one convex, except the ones which are located on the border
+ of the mesh. For example, if the convex 'a' and 'b' share a common
+ face, 'a' has a P1 FEM, and 'b' has a P2 FEM, then the basic dof on the
+ middle of the face will be returned by this function (this can be
+ useful when searching the interfaces between classical FEM and
+ hierarchical FEM).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'qdim')</literal></para>
+
+ <para> Return the dimension Q of the field interpolated by the mesh_fem.
+
+ By default, Q=1 (scalar field). This has an impact on the dof numbering.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{FEMs, CV2F} = gf_mesh_fem_get(mesh_fem MF, 'fem'[, mat CVids])</literal></para>
+
+ <para> Return a list of FEM used by the mesh_fem.
+
+ <literal>FEMs</literal> is an array of all fem objects found in the convexes
+ given in <literal>CVids</literal>. If <literal>CV2F</literal> was supplied as an output argument,
+ it contains, for each convex listed in <literal>CVids</literal>, the index of its
+ correspounding FEM in <literal>FEMs</literal>.
+
+ Convexes which are not part of the mesh, or convexes which do not
+ have any FEM have their correspounding entry in <literal>CV2F</literal> set to -1.
+
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVs = gf_mesh_fem_get(mesh_fem MF, 'convex_index')</literal></para>
+
+ <para> Return the list of convexes who have a FEM.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian'[, mat CVids])</literal></para>
+
+ <para> Test if the mesh_fem is Lagrangian.
+
+ Lagrangian means that each base function Phi[i] is such that
+ Phi[i](P[j]) = delta(i,j), where P[j] is the dof location of
+ the jth base function, and delta(i,j) = 1 if i==j, else 0.
+
+ If <literal>CVids</literal> is omitted, it returns 1 if all convexes in the mesh
+ are Lagrangian. If <literal>CVids</literal> is used, it returns the convex indices
+ (with respect to <literal>CVids</literal>) which are Lagrangian.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_equivalent'[, mat CVids])</literal></para>
+
+ <para> Test if the mesh_fem is equivalent.
+
+ See gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian')
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_polynomial'[, mat CVids])</literal></para>
+
+ <para> Test if all base functions are polynomials.
+
+ See gf_mesh_fem_get(mesh_fem MF, 'is_lagrangian')
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'is_reduced')</literal></para>
+
+ <para> Return 1 if the optional reduction matrix is applied to the dofs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'reduction matrix')</literal></para>
+
+ <para> Return the optional reduction matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>bB = gf_mesh_fem_get(mesh_fem MF, 'extension matrix')</literal></para>
+
+ <para> Return the optional extension matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOFs = gf_mesh_fem_get(mesh_fem MF, 'basic dof on region',mat Rs)</literal></para>
+
+ <para> Return the list of basic dof (before the optional reduction) lying on one
+ of the mesh regions listed in <literal>Rs</literal>.
+
+ More precisely, this function returns the basic dof whose support is
+ non-null on one of regions whose #ids are listed in <literal>Rs</literal> (note
+ that for boundary regions, some dof nodes may not lie exactly
+ on the boundary, for example the dof of Pk(n,0) lies on the center
+ of the convex, but the base function in not null on the convex
+ border).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOFs = gf_mesh_fem_get(mesh_fem MF, 'dof on region',mat Rs)</literal></para>
+
+ <para> Return the list of dof (after the optional reduction) lying on one
+ of the mesh regions listed in <literal>Rs</literal>.
+
+ More precisely, this function returns the basic dof whose support is
+ non-null on one of regions whose #ids are listed in <literal>Rs</literal> (note
+ that for boundary regions, some dof nodes may not lie exactly
+ on the boundary, for example the dof of Pk(n,0) lies on the center
+ of the convex, but the base function in not null on the convex
+ border).
+
+ For a reduced mesh_fem
+ a dof is lying on a region if its potential corresponding shape
+ function is nonzero on this region. The extension matrix is used
+ to make the correspondance between basic and reduced dofs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'dof nodes'[, mat DOFids])</literal></para>
+
+ <para> Deprecated function. Use gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes') instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOFpts = gf_mesh_fem_get(mesh_fem MF, 'basic dof nodes'[, mat DOFids])</literal></para>
+
+ <para> Get location of basic degrees of freedom.
+
+ Return the list of interpolation points for the specified
+ dof #IDs in <literal>DOFids</literal> (if <literal>DOFids</literal> is omitted, all basic dof are
+ considered).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>DOFP = gf_mesh_fem_get(mesh_fem MF, 'dof partition')</literal></para>
+
+ <para> Get the 'dof_partition' array.
+
+ Return the array which associates an integer (the partition number)
+ to each convex of the mesh_fem. By default, it is an all-zero array.
+ The degrees of freedom of each convex of the mesh_fem are connected
+ only to the dof of neighbouring convexes which have the same
+ partition number, hence it is possible to create partially
+ discontinuous mesh_fem very easily.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'save',string filename[, string opt])</literal></para>
+
+ <para> Save a mesh_fem in a text file (and optionaly its linked mesh object
+ if <literal>opt</literal> is the string 'with_mesh').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'char'[, string opt])</literal></para>
+
+ <para> Output a string description of the mesh_fem.
+
+ By default, it does not include the description of the linked mesh
+ object, except if <literal>opt</literal> is 'with_mesh'.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'display')</literal></para>
+
+ <para> displays a short summary for a mesh_fem object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_mesh_fem_get(mesh_fem MF, 'linked mesh')</literal></para>
+
+ <para> Return a reference to the mesh object linked to <literal>mf</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_mesh_fem_get(mesh_fem MF, 'mesh')</literal></para>
+
+ <para> Return a reference to the mesh object linked to <literal>mf</literal>.
+ (identical to gf_mesh_get(mesh M, 'linked mesh'))
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to vtk',string filename, ... ['ascii'], U, 'name'...)</literal></para>
+
+ <para> Export a mesh_fem and some fields to a vtk file.
+
+ The FEM and geometric transformations will be mapped to order 1
+ or 2 isoparametric Pk (or Qk) FEMs (as VTK does not handle higher
+ order elements). If you need to represent high-order FEMs or
+ high-order geometric transformations, you should consider
+ gf_slice_get(slice S, 'export to vtk').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to dx',string filename, ...['as', string mesh_name][,'edges']['serie',string serie_name][,'ascii'][,'append'], U, 'name'...)</literal></para>
+
+ <para> Export a mesh_fem and some fields to an OpenDX file.
+
+ This function will fail if the mesh_fem mixes different convex types
+ (i.e. quads and triangles), or if OpenDX does not handle a specific
+ element type (i.e. prism connections are not known by OpenDX).
+
+ The FEM will be mapped to order 1 Pk (or Qk) FEMs. If you need to
+ represent high-order FEMs or high-order geometric transformations,
+ you should consider gf_slice_get(slice S, 'export to dx').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'export to pos',string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf2], mat U2, string nameU2,...]])</literal></para>
+
+ <para> Export a mesh_fem and some fields to a pos file.
+
+ The FEM and geometric transformations will be mapped to order 1
+ isoparametric Pk (or Qk) FEMs (as GMSH does not handle higher
+ order elements).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'dof_from_im',mesh_im mim[, int p])</literal></para>
+
+ <para> Return a selection of dof who contribute significantly to the
+ mass-matrix that would be computed with <literal>mf</literal> and the integration
+ method <literal>mim</literal>.
+
+ <literal>p</literal> represents the dimension on what the integration method
+ operates (default <literal>p = mesh dimension</literal>).
+
+ IMPORTANT: you still have to set a valid integration method on
+ the convexes which are not crosses by the levelset!
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>U = gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data',mat Ucv)</literal></para>
+
+ <para>
+ Interpolate data given on each convex of the mesh to the mesh_fem dof.
+ The mesh_fem has to be lagrangian, and should be discontinuous (typically
+ a FEM_PK(N,0) or FEM_QK(N,0) should be used).
+
+ The last dimension of the input vector Ucv should have
+ gf_mesh_get(mesh M, 'max cvid') elements.
+
+ Example of use: gf_mesh_fem_get(mesh_fem MF, 'interpolate_convex_data', gf_mesh_get(mesh M, 'quality'))
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_mesh_fem_get(mesh_fem MF, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the mesh_fem object.
+
+ The result does not take into account the linked mesh object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'has_linked_mesh_levelset')</literal></para>
+
+ <para> Is a mesh_fem_level_set or not.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_get(mesh_fem MF, 'linked_mesh_levelset')</literal></para>
+
+ <para> if it is a mesh_fem_level_set gives the linked mesh_level_set.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
- <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml b/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
index 4aa9e69..556be91 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
@@ -9,113 +9,137 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_fem_set</refname>
-
- <refpurpose>General function for modifying mesh_fem objects.</refpurpose>
+ <refpurpose> General function for modifying mesh_fem objects.
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mesh_fem_set(MF, 'fem', fem fem [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'classical fem', fem fem, int K [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'classical discontinuous fem', fem fem, int K [, ivec CVIDX])
-gf_mesh_fem_set(MF, 'qdim', int Qdim)
-gf_mesh_fem_set(MF, 'reduction', int s)
-gf_mesh_fem_set(MF, 'reduction matrices', spmat R, spmat E)
-gf_mesh_fem_set(MF, 'dof partition', ivec DOFP)
-gf_mesh_fem_set(MF, 'set partial', ivec DOFs[, ivec RCVs])
- </synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'fem', fem f[, ivec CVids])</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'classical fem', int k[, ivec CVids])</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'classical discontinuous fem', int K[, @tscalar alpha[, ivec CVIDX]])</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'qdim', int Q)</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduction matrices', mat R, mat E)</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduction', int s)</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'reduce meshfem', mat RM)</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'dof partition', ivec DOFP)</synopsis>
+ <synopsis>gf_mesh_fem_set(mesh_fem MF, 'set partial', ivec DOFs[, ivec RCVs])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for modifying mesh_fem objects.
+ </para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_fem_set(MF,'fem',Fem f[, vec CVids]) Set the Finite
- Element Method. Assign a FEM <literal>f</literal> to all convexes
- whose #ids are listed in <literal>CVids</literal>. If
- <literal>CVids</literal> is not given, the integration is assigned to
- all convexes. See the help of gf_fem to obtain a list of available FEM
- methods.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'classical fem',int k[, vec CVids]) Assign a
- classical (Lagrange polynomial) fem of order <literal>k</literal> to
- the MeshFem. Uses FEM_PK for simplexes, FEM_QK for parallelepipeds
- etc.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'classical discontinuous fem',int K, [int
- IM_DEGREE [,vec CVIDX]]) Assigns a classical (Lagrange polynomial)
- discontinuous fem or order K. Similar to gf_mesh_fem_set(MF,'classical
- fem') except that FEM_PK_DISCONTINUOUS is used.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'qdim',int Q) Change the <literal>Q</literal>
- dimension of the field that is interpolated by the MeshFem.
- <emphasis>Q = 1</emphasis> means that the MeshFem describes a scalar
- field, <emphasis>Q = N</emphasis> means that the MeshFem describes a
- vector field of dimension N.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'reduction matrices',mat R,mat E) Set the
- reduction and extension matrices and valid their use.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'reduction',int s) Set or unset the use of
- the reduction/extension matrices.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_fem_set(MF,'dof partition',vec DOFP) Change the
- 'dof_partition' array. <literal>DOFP</literal> is a vector holding a
- integer value for each convex of the MeshFem. See
- gf_mesh_fem_get(MF,'dof partition') for a description of "dof
- partition".</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'fem', fem f[, ivec CVids])</literal></para>
+
+ <para> Set the Finite Element Method.
- <listitem>
- <para>gf_mesh_fem_set(MF, 'set partial', ivec DOFs[, ivec
- RCVs]) Can only be applied to a partial mesh_fem.
- Change the subset of the degrees of freedom of `mf`.</para>
- <para>If `RCVs` is given, no FEM will be put on the convexes
- listed in `RCVs`.</para>
- </listitem>
+ Assign a FEM <literal>f</literal> to all convexes whose #ids are listed in <literal>CVids</literal>.
+ If <literal>CVids</literal> is not given, the integration is assigned to all convexes.
+
+ See the help of gf_fem to obtain a list of available FEM methods.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'classical fem', int k[, ivec CVids])</literal></para>
+
+ <para> Assign a classical (Lagrange polynomial) fem of order <literal>k</literal> to the mesh_fem.
+
+ Uses FEM_PK for simplexes, FEM_QK for parallelepipeds etc.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'classical discontinuous fem', int K[, @tscalar alpha[, ivec CVIDX]])</literal></para>
+
+ <para> Assigns a classical (Lagrange polynomial) discontinuous fem or order K.
+
+ Similar to gf_mesh_fem_set(mesh_fem MF, 'classical fem') except that
+ FEM_PK_DISCONTINUOUS is used. Param <literal>alpha</literal> the node inset,
+ <latex style="text"><![CDATA[0 \leq alpha < 1]]></latex>, where 0 implies usual dof nodes, greater values
+ move the nodes toward the center of gravity, and 1 means that all
+ degrees of freedom collapse on the center of gravity.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'qdim', int Q)</literal></para>
+
+ <para> Change the <literal>Q</literal> dimension of the field that is interpolated by the mesh_fem.
+
+ <literal>Q = 1</literal> means that the mesh_fem describes a scalar field, <literal>Q = N</literal> means
+ that the mesh_fem describes a vector field of dimension N.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduction matrices', mat R, mat E)</literal></para>
+
+ <para> Set the reduction and extension matrices and valid their use.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduction', int s)</literal></para>
+
+ <para> Set or unset the use of the reduction/extension matrices.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'reduce meshfem', mat RM)</literal></para>
+
+ <para> Set reduction mesh fem
+ This function selects the degrees of freedom of the finite element
+ method by selecting a set of independent vectors of the matrix RM.
+ The numer of columns of RM should corresponds to the number of degrees
+ of fredoom of the finite element method.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'dof partition', ivec DOFP)</literal></para>
+
+ <para> Change the 'dof_partition' array.
+
+ <literal>DOFP</literal> is a vector holding a integer value for each convex of the mesh_fem.
+ See gf_mesh_fem_get(mesh_fem MF, 'dof partition') for a description of "dof partition".
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_fem_set(mesh_fem MF, 'set partial', ivec DOFs[, ivec RCVs])</literal></para>
+
+ <para> Can only be applied to a partial mesh_fem. Change the subset of the
+ degrees of freedom of <literal>mf</literal>.
+
+ If <literal>RCVs</literal> is given, no FEM will be put on the convexes listed
+ in <literal>RCVs</literal>.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
-
- <refsection>
- <title>Examples</title>
-
- <para>Building a discontinuous mesh_fem mfdu to compute the gradient DU of a field U defined on a mesh_fem mf: </para>
- <programlisting role="example"><![CDATA[
-mfdu = gf_mesh_fem(m);
-// use polynomials of degree 2, and no integration method
-gf_mesh_fem_set(mfdu,'classical discontinuous fem',2);
-DU = gf_compute(mf,U,'gradient',mfdu);
- ]]></programlisting>
- </refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_fem_get">gf_mesh_fem_get</link></member>
- <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
- <member><link linkend="gf_fem">gf_fem</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_get.xml b/interface/src/scilab/help/en_US/gf_mesh_get.xml
index cf83eaa..9c0919f 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_get.xml
@@ -9,229 +9,495 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_get</refname>
-
- <refpurpose>General mesh inquiry function. As this function does not modify the mesh object, a mesh_fem object handle can be used instead of a mesh handle.</refpurpose>
+ <refpurpose> General mesh inquiry function. All these functions accept also a
+ mesh_fem argument instead of a mesh M (in that case, the mesh_fem
+ linked mesh will be used).
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I = gf_mesh_get(M, 'dim')
-int N = gf_mesh_get(M, 'nbpts')
-int N = gf_mesh_get(M, 'nbcvs')
-mat PT = gf_mesh_get(M, 'pts'[, ivec PIDLST])
-ivec PTID = gf_mesh_get(M, 'pid')
-ivec CVID = gf_mesh_get(M, 'cvid')
-int I = gf_mesh_get(M, 'max pid')
-int I = gf_mesh_get(M, 'max cvid')
-[ivec PID,ivec IDX] = gf_mesh_get(M, 'pid from cvid'[,ivec CVLST])
-ivec V = gf_mesh_get(M, 'pid from coords', mat PT)
-ivec V = gf_mesh_get(M, 'cvid from pid', ivec PTID)
-ivec V = gf_mesh_get(M, 'orphaned pid')
-ivec V = gf_mesh_get(M, 'faces from pid', ivec PTID)
-imat CVFACELST = gf_mesh_get(M, 'faces from cvid', ivec CVLST[, 'merge'])
-imat CVFACELST = gf_mesh_get(M, 'outer faces' [, ivec CVLST])
-ivec BLST = gf_mesh_get(M, 'regions')
-imat CVFLST = gf_mesh_get(M, 'region', int rnum)
-mat E[,vec C] = gf_mesh_get(M, 'edges' [, ivec CVLST][,'merge'])
-mat E[,vec C] = gf_mesh_get(M, 'curved edges', int N, [, ivec CVLST])
-mat T = gf_mesh_get(M, 'triangulated surface', int N, [, ivec CVLST])
-mat N = gf_mesh_get(M, 'normal of face', int CV, int F[, int FPTNUM])
-mat N = gf_mesh_get(M, 'normal of faces', imat CVFLST)
-vec Q = gf_mesh_get(M, 'quality',[CVLST])
-vec A = gf_mesh_get(M, 'convex area',[CVLST])
-cvstruct CVS[, CV2STRUC] = gf_mesh_get(M, 'cvstruct',[CVLST])
-geotrans GT[, GT2STRUC] = gf_mesh_get(M, 'geotrans',[CVLST])
-gf_mesh_get(M, 'save', string FILENAME)
-string s = gf_mesh_get(M, 'char')
-gf_mesh_get(M,'export_to_vtk', filename, ... [,'ascii'][,'quality'])
-gf_mesh_get(M,'export_to_dx', filename, ...[,'ascii'][,'append'][,'as', name,[,'serie', serie_name]][,'edges'])
-int m = gf_mesh_get(M, 'memsize')
-</synopsis>
+ <synopsis>d = gf_mesh_get(mesh M, 'dim')</synopsis>
+ <synopsis>np = gf_mesh_get(mesh M, 'nbpts')</synopsis>
+ <synopsis>nc = gf_mesh_get(mesh M, 'nbcvs')</synopsis>
+ <synopsis>P = gf_mesh_get(mesh M, 'pts'[, ivec PIDs])</synopsis>
+ <synopsis>Pid = gf_mesh_get(mesh M, 'pid')</synopsis>
+ <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in faces', imat CVFIDs)</synopsis>
+ <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in cvids', imat CVIDs)</synopsis>
+ <synopsis>PIDs = gf_mesh_get(mesh M, 'pid in regions', imat RIDs)</synopsis>
+ <synopsis>PIDs = gf_mesh_get(mesh M, 'pid from coords', mat PTS[, scalar radius=0])</synopsis>
+ <synopsis>{Pid, IDx} = gf_mesh_get(mesh M, 'pid from cvid'[, imat CVIDs])</synopsis>
+ <synopsis>{Pts, IDx} = gf_mesh_get(mesh M, 'pts from cvid'[, imat CVIDs])</synopsis>
+ <synopsis>CVid = gf_mesh_get(mesh M, 'cvid')</synopsis>
+ <synopsis>m = gf_mesh_get(mesh M, 'max pid')</synopsis>
+ <synopsis>m = gf_mesh_get(mesh M, 'max cvid')</synopsis>
+ <synopsis>[E,C] = gf_mesh_get(mesh M, 'edges' [, CVLST][, 'merge'])</synopsis>
+ <synopsis>[E,C] = gf_mesh_get(mesh M, 'curved edges', int N [, CVLST])</synopsis>
+ <synopsis>PIDs = gf_mesh_get(mesh M, 'orphaned pid')</synopsis>
+ <synopsis>CVIDs = gf_mesh_get(mesh M, 'cvid from pid', ivec PIDs[, bool share=False])</synopsis>
+ <synopsis>CVFIDs = gf_mesh_get(mesh M, 'faces from pid', ivec PIDs)</synopsis>
+ <synopsis>CVFIDs = gf_mesh_get(mesh M, 'outer faces'[, CVIDs])</synopsis>
+ <synopsis>CVFIDs = gf_mesh_get(mesh M, 'faces from cvid'[, ivec CVIDs][, 'merge'])</synopsis>
+ <synopsis>[mat T] = gf_mesh_get(mesh M, 'triangulated surface', int Nrefine [,CVLIST])</synopsis>
+ <synopsis>N = gf_mesh_get(mesh M, 'normal of face', int cv, int f[, int nfpt])</synopsis>
+ <synopsis>N = gf_mesh_get(mesh M, 'normal of faces', imat CVFIDs)</synopsis>
+ <synopsis>Q = gf_mesh_get(mesh M, 'quality'[, ivec CVIDs])</synopsis>
+ <synopsis>A = gf_mesh_get(mesh M, 'convex area'[, ivec CVIDs])</synopsis>
+ <synopsis>A = gf_mesh_get(mesh M, 'convex radius'[, ivec CVIDs])</synopsis>
+ <synopsis>{S, CV2S} = gf_mesh_get(mesh M, 'cvstruct'[, ivec CVIDs])</synopsis>
+ <synopsis>{GT, CV2GT} = gf_mesh_get(mesh M, 'geotrans'[, ivec CVIDs])</synopsis>
+ <synopsis>RIDs = gf_mesh_get(mesh M, 'boundaries')</synopsis>
+ <synopsis>RIDs = gf_mesh_get(mesh M, 'regions')</synopsis>
+ <synopsis>RIDs = gf_mesh_get(mesh M, 'boundary')</synopsis>
+ <synopsis>CVFIDs = gf_mesh_get(mesh M, 'region', ivec RIDs)</synopsis>
+ <synopsis>gf_mesh_get(mesh M, 'save', string filename)</synopsis>
+ <synopsis>s = gf_mesh_get(mesh M, 'char')</synopsis>
+ <synopsis>gf_mesh_get(mesh M, 'export to vtk', string filename, ... [,'ascii'][,'quality'])</synopsis>
+ <synopsis>gf_mesh_get(mesh M, 'export to dx', string filename, ... [,'ascii'][,'append'][,'as',string name,[,'serie',string serie_name]][,'edges'])</synopsis>
+ <synopsis>gf_mesh_get(mesh M, 'export to pos', string filename[, string name])</synopsis>
+ <synopsis>z = gf_mesh_get(mesh M, 'memsize')</synopsis>
+ <synopsis>gf_mesh_get(mesh M, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General mesh inquiry function. All these functions accept also a
+ mesh_fem argument instead of a mesh M (in that case, the mesh_fem
+ linked mesh will be used).
+</para>
+ </refsection>
- <para>General mesh inquiry function. All these functions accept also a
- mesh_fem argument instead of a mesh M (in that case, the mesh_fem linked
- mesh will be used). </para>
-
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_get(M, 'dim') : return the dimension of the mesh (2 for a planar mesh, etc...).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'nbpts') : return the number of points of the mesh. Please note that these points might not be numbered from 1 to N.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'nbcvs') : return the number of convexes of the mesh. Please note that these convexes might not be numbered from 1 to N.</para>
- </listitem>
-
- <listitem>
- <para>PT = gf_mesh_get(M, 'pts' [, PIDLST]) : return the list of point coordinates of the mesh M, each point being stored in a column of PT.
- If PIDLST is specified, only those points are listed. Otherwise, PT will have gf_mesh_get(M, 'max pid') rows, which might be greater
- than gf_mesh_get(M, 'nbpts') (if you destroyed some convexes or points in the mesh for example).
- The columns corresponding to inexistent points will be filled with NaN. You can use gf_mesh_get(M, 'pid') to filter such invalid points.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'pid') : return the list of point numbers stored in M (their numbering is not supposed to be contiguous
- from 1 to gf_mesh_get(M,'nbpts'), especially if you destroyed some convexes) in a row vector.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'cvid') : return the list of convex numbers composing M (their numbering is not supposed to be contiguous
- from 1 to gf_mesh_get('nbcvs'), especially if you destroyed some convexes) in a row vector.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'max pid') : return the highest point ID in the mesh (this is the same value as MAX(gf_mesh_get(M, 'pts id')),
- but it won't be equal to gf_mesh_get(M, 'nbpts') if some points have been destroyed and the mesh was not "repacked"
- with gf_mesh_set(M, 'optimize structure')).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'max cvid') : return the maximum ID of all convexes in the mesh (see 'max pid').</para>
- </listitem>
-
- <listitem>
- <para>[PID,IDX]=gf_mesh_get(M, 'pid from cvid'[, CVLST]) : can be used in order to find the points of the convexes listed in CVLST
- (if not used, then the points of all convexes will be returned, which is equivalent to CVLST=1:gf_mesh_get(M,'max cvid')).
- Since the convexes might have different number of points, the result is stored as an indirect sparse array: IDX is a row vector,
- which length is equal to length(CVLST)+1, and PID is a row vector containing the concatenated list of points of each convex in cvlst.
- Each entry of IDX is the position of the corresponding convex point list in PID.
- For example, the list of points of the second convex is PID(IDX(2):IDX(3)-1).</para>
- <para>If you specified convex numbers which do not exist in CVLST, their point list will be empty.</para>
- </listitem>
-
- <listitem>
- <para>V=gf_mesh_get(M, 'pid from coords', PT) : can be used to retrieve the point indices from their coordinates.
- PT is an array containing a list of these point coordinates. On return, V is a row vector containing the id of the points which
- are part of the mesh, and -1 for those which where not found in the mesh (a small error of about 1e-6 is allowed
- in the coordinates - this might be important if your mesh is very small!).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'cvid from pid', PTID) : return the list of convexes that share the points numbers given in PTID in a row vector
- (possibly empty).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'faces from pid', PTID) : return the list of convexes faces of which every vertex is in PTID.
- On return, the first row of V contains the convex number, and the second row contains the face number.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'faces from cvid', CVLST,[ 'merge']) : return the list of convex faces from a list of convex numbers,
- and optionally merges the common faces of two convexes from CVLST.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'outer faces' [, CVLST]) : return the list of faces which are not shared by two convexes
- (i.e. the faces on the boundary of the mesh). The search can be restricted to the optional argument CVLST.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'regions') : return the list of valid regions (created with gf_mesh_set(M,'region')).
- Regions are sets of convexes and/or convexes faces, stored in the mesh, and refered by a simple region number.
- They are typically used for the application of boundary conditions.</para>
- </listitem>
-
- <listitem>
- <para>CVFLST=gf_mesh_get(M, 'region', rnum) : return the list of faces on the boundary rnum. On output, the first row of CVFLST
- contains the convex numbers, and the second row contains the face numbers (0 when the whole convex is is the region).
- See also gf_mesh_fem_get(MF, 'basic dof on region').</para>
- </listitem>
-
- <listitem>
- <para>E=gf_mesh_get(M, 'edges' [, CVLST][, 'merge']) : warning This function has been obsoleted by mesh slice objects </para>
- </listitem>
-
- <listitem>
- <para>E=gf_mesh_get(M, 'curved edges', N, [, CVLST]) : warning This function has been obsoleted by mesh slice objects</para>
- </listitem>
-
- <listitem>
- <para>T=gf_mesh_get(M, 'triangulated surface', N, [, CVLST]) : warning This function has been obsoleted by mesh slice objects</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'normal of face', CV, F[, FPTNUM]) and</para>
- <para>gf_mesh_get(M, 'normal of faces', CVFLST) : evaluates the normal of convex faces. The first form returns the normal of convex
- CV for its face F, evaluated at the FPTNUMth point of the face. If FPTNUM is not specified, then the normal is evaluated at each
- geometrical node of the face. The second form returns the normal for a set of faces of convex, each normal being computed at the
- center of the face (CVFLST is supposed to contain convex numbers at its first row and convex face number in its second row).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'quality',[CVLST]) : return an estimate of the convex quality (in a finite element sense).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'convex area',[CVLST]) : return an estimate the convex areas.</para>
- </listitem>
-
- <listitem>
- <para>[CVS,CV2STRUC]=gf_mesh_get(M, 'cvstruct',[CVLST]) : return an array of all the convex structure used in the mesh
- (optionally restricted to the convexes of CVLST), and a second optional output vector CV2STRUCT which maps the convexes indices
- in CVLST to the indice of its structure in CVS.</para>
- </listitem>
-
- <listitem>
- <para>[GT,GT2STRUCT]=gf_mesh_get(M, 'geotrans',[CVLST]) : return an array of the geometric transformations
- (similar to gf_mesh_get(M, 'cvstruct').</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'save', filename) : save the mesh object to an ASCII file. This mesh can be restored later with
- gf_mesh('load', filename). You may also use gf_mesh_get(M, 'char') to obtain a string description of the mesh M, that
- can be saved to files, or restored with gf_mesh('from string').</para>
- </listitem>
+ <listitem>
+ <para><literal>d = gf_mesh_get(mesh M, 'dim')</literal></para>
+
+ <para> Get the dimension of the mesh (2 for a 2D mesh, etc).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>np = gf_mesh_get(mesh M, 'nbpts')</literal></para>
+
+ <para> Get the number of points of the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>nc = gf_mesh_get(mesh M, 'nbcvs')</literal></para>
+
+ <para> Get the number of convexes of the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>P = gf_mesh_get(mesh M, 'pts'[, ivec PIDs])</literal></para>
+
+ <para> Return the list of point coordinates of the mesh.
+
+ Each column of the returned matrix contains the coordinates of one
+ point. If the optional argument <literal>PIDs</literal> was given, only the points
+ whose #id is listed in this vector are returned. Otherwise, the
+ returned matrix will have gf_mesh_get(mesh M, 'max_pid') columns, which might
+ be greater than gf_mesh_get(mesh M, 'nbpts') (if some points of the mesh have
+ been destroyed and no call to gf_mesh_set(mesh M, 'optimize structure') have
+ been issued). The columns corresponding to deleted points will be
+ filled with NaN. You can use gf_mesh_get(mesh M, 'pid') to filter such invalid
+ points.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Pid = gf_mesh_get(mesh M, 'pid')</literal></para>
+
+ <para> Return the list of points #id of the mesh.
+
+ Note that their numbering is not supposed to be contiguous from
+ 1 to gf_mesh_get(mesh M, 'nbpts'),
+ especially if some points have been removed from the mesh. You
+ can use gf_mesh_set(mesh M, 'optimize_structure') to enforce a contiguous
+ numbering.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in faces', imat CVFIDs)</literal></para>
+
+ <para> Search point #id listed in <literal>CVFIDs</literal>.
+
+ <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+ and the second lists face numbers. On return, <literal>PIDs</literal> is a
+ vector containing points #id.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in cvids', imat CVIDs)</literal></para>
+
+ <para> Search point #id listed in <literal>CVIDs</literal>.
- <listitem>
- <para>gf_mesh_get(M,'export_to_vtk', filename, ... [,'ascii'][,'quality']) : export a mesh to a VTK file.
- If 'quality' is specified, an estimation of the quality of each convex will be written to the file
- (see gf_slice_get('export_to_vtk') for more details).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M,'export_to_dx', filename, ...[,'ascii'] [,'append'] [,'as', name,[,'serie', serie_name]][,'edges']) : export a mesh
- to an OpenDX file (see gf_slice_get('export_to_dx') for more details).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_get(M, 'memsize') : return the amount of memory (in bytes) used by the mesh object.</para>
- </listitem>
- </itemizedlist>
+ <literal>PIDs</literal> is a vector containing points #id.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_get(mesh M, 'pid in regions', imat RIDs)</literal></para>
+
+ <para> Search point #id listed in <literal>RIDs</literal>.
+
+ <literal>PIDs</literal> is a vector containing points #id.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_get(mesh M, 'pid from coords', mat PTS[, scalar radius=0])</literal></para>
+
+ <para> Search point #id whose coordinates are listed in <literal>PTS</literal>.
+
+ <literal>PTS</literal> is an array containing a list of point coordinates. On
+ return, <literal>PIDs</literal> is a vector containing points
+ #id for each point found in <literal>eps</literal> range, and -1 for those
+ which where not found in the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{Pid, IDx} = gf_mesh_get(mesh M, 'pid from cvid'[, imat CVIDs])</literal></para>
+
+ <para> Return the points attached to each convex of the mesh.
+
+ If <literal>CVIDs</literal> is omitted, all the convexes will be considered
+ (equivalent to <literal>CVIDs = gf_mesh_get(mesh M, 'max cvid')</literal>). <literal>IDx</literal> is a
+ vector, length(IDx) = length(CVIDs)+1. <literal>Pid</literal> is a
+ vector containing the concatenated list of #id of
+ points of each convex in <literal>CVIDs</literal>. Each entry of <literal>IDx</literal> is the
+ position of the corresponding convex point list in <literal>Pid</literal>. Hence,
+ for example, the list of #id of points of the second convex is
+ Pid(IDx(2):IDx(3)-1).
+
+ If <literal>CVIDs</literal> contains convex #id which do not exist in the mesh,
+ their point list will be empty.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{Pts, IDx} = gf_mesh_get(mesh M, 'pts from cvid'[, imat CVIDs])</literal></para>
+
+ <para> Search point listed in <literal>CVID</literal>.
+
+ If <literal>CVIDs</literal> is omitted, all the convexes will be considered
+ (equivalent to <literal>CVIDs = gf_mesh_get(mesh M, 'max cvid')</literal>). <literal>IDx</literal> is a
+ vector, length(IDx) = length(CVIDs)+1. <literal>Pts</literal> is a
+ vector containing the concatenated list of points
+ of each convex in <literal>CVIDs</literal>. Each entry of <literal>IDx</literal> is the position
+ of the corresponding convex point list in <literal>Pts</literal>. Hence, for
+ example, the list of points of the second convex is
+ Pts(:,IDx(2):IDx(3)-1).
+
+ If <literal>CVIDs</literal> contains convex #id which do not exist in the mesh,
+ their point list will be empty.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVid = gf_mesh_get(mesh M, 'cvid')</literal></para>
+
+ <para> Return the list of all convex #id.
+
+ Note that their numbering is not supposed to be contiguous from
+ 1 to gf_mesh_get(mesh M, 'nbcvs'),
+ especially if some points have been removed from the mesh. You
+ can use gf_mesh_set(mesh M, 'optimize_structure') to enforce a contiguous
+ numbering.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_mesh_get(mesh M, 'max pid')</literal></para>
+
+ <para> Return the maximum #id of all points in the mesh (see 'max cvid').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_mesh_get(mesh M, 'max cvid')</literal></para>
+
+ <para> Return the maximum #id of all convexes in the mesh (see 'max pid').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>[E,C] = gf_mesh_get(mesh M, 'edges' [, CVLST][, 'merge'])</literal></para>
+
+ <para> [OBSOLETE FUNCTION! will be removed in a future release]
+
+ Return the list of edges of mesh M for the convexes listed in the
+ row vector CVLST. E is a 2 x nb_edges matrix containing point
+ indices. If CVLST is omitted, then the edges of all convexes are
+ returned. If CVLST has two rows then the first row is supposed to
+ contain convex numbers, and the second face numbers, of which the
+ edges will be returned. If 'merge' is indicated, all common
+ edges of convexes are merged in a single edge. If the optional
+ output argument C is specified, it will contain the convex number
+ associated with each edge.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>[E,C] = gf_mesh_get(mesh M, 'curved edges', int N [, CVLST])</literal></para>
+
+ <para> [OBSOLETE FUNCTION! will be removed in a future release]
+
+ More sophisticated version of gf_mesh_get(mesh M, 'edges') designed for
+ curved elements. This one will return N (N>=2) points of the
+ (curved) edges. With N==2, this is equivalent to
+ gf_mesh_get(mesh M, 'edges'). Since the points are no more always part of
+ the mesh, their coordinates are returned instead of points
+ number, in the array E which is a [ mesh_dim x 2 x nb_edges ]
+ array. If the optional output argument C is specified, it will
+ contain the convex number associated with each edge.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_get(mesh M, 'orphaned pid')</literal></para>
+
+ <para> Search point #id which are not linked to a convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVIDs = gf_mesh_get(mesh M, 'cvid from pid', ivec PIDs[, bool share=False])</literal></para>
+
+ <para> Search convex #ids related with the point #ids given in <literal>PIDs</literal>.
+
+ If <literal>share=False</literal>, search convex whose vertex #ids are in <literal>PIDs</literal>.
+ If <literal>share=True</literal>, search convex #ids that share the point #ids
+ given in <literal>PIDs</literal>. <literal>CVIDs</literal> is a vector (possibly
+ empty).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVFIDs = gf_mesh_get(mesh M, 'faces from pid', ivec PIDs)</literal></para>
+
+ <para> Return the convex faces whose vertex #ids are in <literal>PIDs</literal>.
+
+ <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+ and the second lists face numbers (local number in the convex).
+ For a convex face to be returned, EACH of its points have to be
+ listed in <literal>PIDs</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVFIDs = gf_mesh_get(mesh M, 'outer faces'[, CVIDs])</literal></para>
- </refsection>
+ <para> Return the faces which are not shared by two convexes.
+
+ <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+ and the second lists face numbers (local number in the convex).
+ If <literal>CVIDs</literal> is not given, all convexes are considered, and it
+ basically returns the mesh boundary. If <literal>CVIDs</literal> is given, it
+ returns the boundary of the convex set whose #ids are listed
+ in <literal>CVIDs</literal>.
+ </para>
+ </listitem>
- <refsection>
- <title>Examples</title>
+ <listitem>
+ <para><literal>CVFIDs = gf_mesh_get(mesh M, 'faces from cvid'[, ivec CVIDs][, 'merge'])</literal></para>
+
+ <para> Return a list of convexes faces from a list of convex #id.
+
+ <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+ and the second lists face numbers (local number in the convex).
+ If <literal>CVIDs</literal> is not given, all convexes are considered. The optional
+ argument 'merge' merges faces shared by the convex of <literal>CVIDs</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>[mat T] = gf_mesh_get(mesh M, 'triangulated surface', int Nrefine [,CVLIST])</literal></para>
+
+ <para> [DEPRECATED FUNCTION! will be removed in a future release]
+
+ Similar function to gf_mesh_get(mesh M, 'curved edges') : split (if
+ necessary, i.e. if the geometric transformation if non-linear)
+ each face into sub-triangles and return their coordinates in T
+ (see also gf_compute('eval on P1 tri mesh'))
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>N = gf_mesh_get(mesh M, 'normal of face', int cv, int f[, int nfpt])</literal></para>
+
+ <para> Evaluates the normal of convex <literal>cv</literal>, face <literal>f</literal> at the <literal>nfpt</literal> point of the face.
+
+ If <literal>nfpt</literal> is not specified, then the normal is evaluated at each
+ geometrical node of the face.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>N = gf_mesh_get(mesh M, 'normal of faces', imat CVFIDs)</literal></para>
+
+ <para> Evaluates (at face centers) the normals of convexes.
+
+ <literal>CVFIDs</literal> is supposed a two-rows matrix, the first row lists convex
+ #ids, and the second lists face numbers (local number in the convex).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Q = gf_mesh_get(mesh M, 'quality'[, ivec CVIDs])</literal></para>
+
+ <para> Return an estimation of the quality of each convex (<latex style="text"><![CDATA[0 \leq Q \leq 1]]></latex>).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_mesh_get(mesh M, 'convex area'[, ivec CVIDs])</literal></para>
+
+ <para> Return an estimate of the area of each convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_mesh_get(mesh M, 'convex radius'[, ivec CVIDs])</literal></para>
- <programlisting role="example">
- Add an example here
- </programlisting>
+ <para> Return an estimate of the radius of each convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{S, CV2S} = gf_mesh_get(mesh M, 'cvstruct'[, ivec CVIDs])</literal></para>
+
+ <para> Return an array of the convex structures.
+
+ If <literal>CVIDs</literal> is not given, all convexes are considered. Each convex
+ structure is listed once in <literal>S</literal>, and <literal>CV2S</literal> maps the convexes
+ indice in <literal>CVIDs</literal> to the indice of its structure in <literal>S</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{GT, CV2GT} = gf_mesh_get(mesh M, 'geotrans'[, ivec CVIDs])</literal></para>
+
+ <para> Returns an array of the geometric transformations.
+
+ See also gf_mesh_get(mesh M, 'cvstruct').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>RIDs = gf_mesh_get(mesh M, 'boundaries')</literal></para>
+
+ <para> DEPRECATED FUNCTION. Use 'regions' instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>RIDs = gf_mesh_get(mesh M, 'regions')</literal></para>
+
+ <para> Return the list of valid regions stored in the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>RIDs = gf_mesh_get(mesh M, 'boundary')</literal></para>
+
+ <para> DEPRECATED FUNCTION. Use 'region' instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVFIDs = gf_mesh_get(mesh M, 'region', ivec RIDs)</literal></para>
+
+ <para> Return the list of convexes/faces on the regions <literal>RIDs</literal>.
+
+ <literal>CVFIDs</literal> is a two-rows matrix, the first row lists convex #ids,
+ and the second lists face numbers (local number in the convex).
+ (and 0 when the whole convex is in the
+ regions).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_get(mesh M, 'save', string filename)</literal></para>
+
+ <para> Save the mesh object to an ascii file.
+
+ This mesh can be restored with gf_mesh('load', filename).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_mesh_get(mesh M, 'char')</literal></para>
+
+ <para> Output a string description of the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_get(mesh M, 'export to vtk', string filename, ... [,'ascii'][,'quality'])</literal></para>
+
+ <para> Exports a mesh to a VTK file .
+
+ If 'quality' is specified, an estimation of the quality of each
+ convex will be written to the file.
+
+ See also gf_mesh_fem_get(mesh_fem MF, 'export to vtk'), gf_slice_get(slice S, 'export to vtk').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_get(mesh M, 'export to dx', string filename, ... [,'ascii'][,'append'][,'as',string name,[,'serie',string serie_name]][,'edges'])</literal></para>
+
+ <para> Exports a mesh to an OpenDX file.
+
+ See also gf_mesh_fem_get(mesh_fem MF, 'export to dx'), gf_slice_get(slice S, 'export to dx').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_get(mesh M, 'export to pos', string filename[, string name])</literal></para>
+
+ <para> Exports a mesh to a POS file .
+
+ See also gf_mesh_fem_get(mesh_fem MF, 'export to pos'), gf_slice_get(slice S, 'export to pos').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_mesh_get(mesh M, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_get(mesh M, 'display')</literal></para>
+
+ <para> displays a short summary for a mesh object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_set">gf_mesh_set</link></member>
- <member><link linkend="gf_mesh">gf_mesh</link></member>
- <member><link linkend="gf_plot_mesh">gf_plot_mesh</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im.xml b/interface/src/scilab/help/en_US/gf_mesh_im.xml
index 0003b10..9664bcf 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im.xml
@@ -9,81 +9,103 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_im</refname>
-
- <refpurpose>General constructor for MeshIm object (integration methods on
- a mesh).</refpurpose>
+ <refpurpose> This object represents an integration method defined on a whole mesh (an
+ potentialy on its boundaries).
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-mesh_im MIM = gf_mesh_im(mesh M [, { integ | int }])
-mesh_im MIM[,M] = gf_mesh_im('load', string filename[,mesh M])
-mesh_im MIM[,M] = gf_mesh_im('from string', string S [,mesh M])
-mesh_im MIM = gf_mesh_im('clone', mesh_im MIM0)
- </synopsis>
+ <synopsis>MIM = gf_mesh_im('load', string fname[, mesh m])</synopsis>
+ <synopsis>MIM = gf_mesh_im('from string', string s[, mesh m])</synopsis>
+ <synopsis>MIM = gf_mesh_im('clone', mesh_im mim)</synopsis>
+ <synopsis>MIM = gf_mesh_im('levelset', mesh_levelset mls, string where, integ im[, integ im_tip[, integ im_set]])</synopsis>
+ <synopsis>MIM = gf_mesh_im(mesh m, [{integ im|int im_degree}])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mesh_im objects.</para>
+
+ <para> This object represents an integration method defined on a whole mesh (an
+ potentialy on its boundaries).
+</para>
+ </refsection>
- <para>General constructor for MeshIm object (integration methods on a
- mesh). </para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_im(mesh m[list(integ im|int im_degree)]) : Return a getfem handle to the newly created MeshIm object. For
- convenience, optional arguments ('im' or 'im_degree') can be provided, in that case a call to gf_mesh_im_set(mim, 'integ', ..)
- is issued with these arguments.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im('load', string fname[, Mesh m]) : Load a MeshIm from a
- file. If the mesh <literal>m</literal> is not supplied (this kind of
- file does not store the mesh), then it is read from the file and its
- descriptor is returned as the second output argument.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im('from string', string s[, mesh M]) : Create a MeshIm
- object from its string description. See also
- gf_mesh_im_get(mim,'char')</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im('clone', MeshIm mim2) : Create a copy of a
- MeshIm.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im('levelset', LevelSet ls, string where, Integ im[, Integ im_tip]) : Build an integration method conformal to a partition
- defined implicitely by a levelset. The <literal>where</literal> argument define the domain of integration with respect to the
- levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and 'BOUNDARY'.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im('.mesh',Mesh m, [list(Integ im|int im_degree)]) : Build
- a new MeshIm object. For convenience, optional arguments
- (<literal>im</literal> or <literal>im_degree</literal>) can be
- provided, in that case a call to MeshIm.integ() is issued with these
- arguments.</para>
- </listitem>
+ <listitem>
+ <para><literal>MIM = gf_mesh_im('load', string fname[, mesh m])</literal></para>
+
+ <para> Load a mesh_im from a file.
+
+ If the mesh <literal>m</literal> is not supplied (this kind of file does not store the
+ mesh), then it is read from the file and its descriptor is returned as
+ the second output argument.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MIM = gf_mesh_im('from string', string s[, mesh m])</literal></para>
+
+ <para> Create a mesh_im object from its string description.
+
+ See also <literal></literal>gf_mesh_im_get(mesh_im MI, 'char')<literal></literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MIM = gf_mesh_im('clone', mesh_im mim)</literal></para>
+
+ <para> Create a copy of a mesh_im.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MIM = gf_mesh_im('levelset', mesh_levelset mls, string where, integ im[, integ im_tip[, integ im_set]])</literal></para>
+
+ <para> Build an integration method conformal to a partition defined
+ implicitely by a levelset.
+
+ The <literal>where</literal> argument define the domain of integration with respect to
+ the levelset, it has to be chosen among 'ALL', 'INSIDE', 'OUTSIDE' and
+ 'BOUNDARY'.
+
+ CAUTION: this integration method will be defined only on the element
+ cut by the level-set. For the 'ALL', 'INSIDE' and 'OUTSIDE' options
+ it is mandatory to use the method <literal></literal>gf_mesh_im_set(mesh_im MI, 'integ')<literal></literal> to define
+ the integration method on the remaining elements.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MIM = gf_mesh_im(mesh m, [{integ im|int im_degree}])</literal></para>
+
+ <para> Build a new mesh_im object.
+
+ For convenience, optional arguments (<literal>im</literal> or <literal>im_degree</literal>) can be
+ provided, in that case a call to <literal></literal>gf_mesh_im_get(mesh_im MI, 'integ')<literal></literal> is issued
+ with these arguments.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_im_set">gf_mesh_im_set</link></member>
- <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im_get.xml b/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
index c7c7668..fa6eada 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im_get.xml
@@ -9,117 +9,145 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_im_get</refname>
-
- <refpurpose>General function extracting information from mesh_im
- objects.</refpurpose>
+ <refpurpose> General function extracting information from mesh_im objects.
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-string IMLST[, ivec CV2IM] = gf_mesh_im_get(MIM, 'integ' [, ivec CVLST])
-ivec CVLST = gf_mesh_im_get(MIM, 'convex_index')
-mat M = gf_mesh_fem_get(MIM, 'eltm', eltm MET, int CV [, int FACE])
-gf_mesh_im_get(MIM, 'save', string filename, ['with mesh'])
-string S=gf_mesh_im_get(M, 'char' [,'with mesh'])
-mesh M=gf_mesh_im_get(MIM, 'linked mesh')
-M=gf_mesh_im_get(MIM, 'memsize')
- </synopsis>
+ <synopsis>{I, CV2I} = gf_mesh_im_get(mesh_im MI, 'integ'[, mat CVids])</synopsis>
+ <synopsis>CVids = gf_mesh_im_get(mesh_im MI, 'convex_index')</synopsis>
+ <synopsis>M = gf_mesh_im_get(mesh_im MI, 'eltm', eltm em, int cv [, int f])</synopsis>
+ <synopsis>Ip = gf_mesh_im_get(mesh_im MI, 'im_nodes'[, mat CVids])</synopsis>
+ <synopsis>gf_mesh_im_get(mesh_im MI, 'save',string filename[, 'with mesh'])</synopsis>
+ <synopsis>gf_mesh_im_get(mesh_im MI, 'char'[,'with mesh'])</synopsis>
+ <synopsis>gf_mesh_im_get(mesh_im MI, 'display')</synopsis>
+ <synopsis>m = gf_mesh_im_get(mesh_im MI, 'linked mesh')</synopsis>
+ <synopsis>z = gf_mesh_im_get(mesh_im MI, 'memsize')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
-
- <itemizedlist>
- <listitem>
- <para>list(I, CV2I) = gf_mesh_im_get(mim,'integ'[, mat CVids]) Return
- a list of integration methods used by the MeshIm. <literal>I</literal>
- is an array of all Integ objects found in the convexes given in
- <literal>CVids</literal>. If <literal>CV2I</literal> was supplied as
- an output argument, it contains, for each convex listed in
- <literal>CVids</literal>, the index of its correspounding integration
- method in <literal>I</literal>. Convexes which are not part of the
- mesh, or convexes which do not have any integration method have their
- correspounding entry in <literal>CV2I</literal> set to -1.</para>
- </listitem>
-
- <listitem>
- <para>CVids = gf_mesh_im_get(mim,'convex_index') Return the list of
- convexes who have a integration method. Convexes who have the dummy
- IM_NONE method are not listed.</para>
- </listitem>
-
- <listitem>
- <para>M = gf_mesh_im_get(mim,'eltm',Eltm em, int cv [int f]) Return
- the elementary matrix (or tensor) integrated on the convex
- <literal>cv</literal>. </para>
-
- <para>**WARNING** Be sure that the fem used for the construction of
- <literal>em</literal> is compatible with the fem assigned to element
- <literal>cv</literal> ! This is not checked by the function ! If the
- argument <literal>f</literal> is given, then the elementary tensor is
- integrated on the face <literal>f</literal> of <literal>cv</literal>
- instead of the whole convex.</para>
- </listitem>
-
- <listitem>
- <para>Ip = gf_mesh_im_get(mim,'im_nodes'[, mat CVids]) Return the
- coordinates of the integration points, with their weights.
- <literal>CVids</literal> may be a list of convexes, or a list of
- convex faces, such as returned by gf_mesh_get(M,'region')</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im_get(mim,'save',string filename[, 'with mesh']) Saves
- a MeshIm in a text file (and optionaly its linked mesh object).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_im_get(mim,'char'[,'with mesh']) Output a string
- description of the MeshIm. By default, it does not include the
- description of the linked Mesh object.</para>
- </listitem>
-
- <listitem>
- <para>m = gf_mesh_im_get(mim,'linked mesh') Returns a reference to the
- Mesh object linked to <literal>mim</literal>.</para>
- </listitem>
-
- <listitem>
- <para>z = gf_mesh_im_get(mim,'memsize') Return the amount of memory
- (in bytes) used by the MeshIm object. The result does not take into
- account the linked Mesh object.</para>
- </listitem>
- </itemizedlist>
+ <para> General function extracting information from mesh_im objects.
+ </para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <programlisting role="example"><![CDATA[
-cvid = gf_mesh_get(mim,'cvid');
-[f,c2f] = gf_mesh_im_get(mim, 'integ');
-sf = list();
-for i=1:size(f), sf(i)=gf_integ_get('char',f(i)); end;
-for i=1:size(c2f)
- disp(sprintf('the integration of convex %d is %s', cvid(i),sf(i)));
-end
- ]]></programlisting>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>{I, CV2I} = gf_mesh_im_get(mesh_im MI, 'integ'[, mat CVids])</literal></para>
+
+ <para> Return a list of integration methods used by the mesh_im.
+
+ <literal>I</literal> is an array of all integ objects found in the convexes
+ given in <literal>CVids</literal>. If <literal>CV2I</literal> was supplied as an output argument, it
+ contains, for each convex listed in <literal>CVids</literal>, the index of its
+ correspounding integration method in <literal>I</literal>.
+
+ Convexes which are not part of the mesh, or convexes which do
+ not have any integration method have their correspounding entry
+ in <literal>CV2I</literal> set to -1.
+
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVids = gf_mesh_im_get(mesh_im MI, 'convex_index')</literal></para>
+
+ <para> Return the list of convexes who have a integration method.
+
+ Convexes who have the dummy IM_NONE method are not listed.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_mesh_im_get(mesh_im MI, 'eltm', eltm em, int cv [, int f])</literal></para>
+
+ <para> Return the elementary matrix (or tensor) integrated on the convex <literal>cv</literal>.
+
+ **WARNING**
+
+ Be sure that the fem used for the construction of <literal>em</literal> is compatible
+ with the fem assigned to element <literal>cv</literal> ! This is not checked by the
+ function ! If the argument <literal>f</literal> is given, then the elementary tensor
+ is integrated on the face <literal>f</literal> of <literal>cv</literal> instead of the whole convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Ip = gf_mesh_im_get(mesh_im MI, 'im_nodes'[, mat CVids])</literal></para>
+
+ <para> Return the coordinates of the integration points, with their weights.
+
+ <literal>CVids</literal> may be a list of convexes, or a list of convex faces, such
+ as returned by gf_mesh_get(mesh M, 'region')
+
+ **WARNING**
+
+ Convexes which are not part of the mesh, or convexes which
+ do not have an approximate integration method don't have
+ their correspounding entry (this has no meaning for exact
+ integration methods!).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_im_get(mesh_im MI, 'save',string filename[, 'with mesh'])</literal></para>
+
+ <para> Saves a mesh_im in a text file (and optionaly its linked mesh object).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_im_get(mesh_im MI, 'char'[,'with mesh'])</literal></para>
+
+ <para> Output a string description of the mesh_im.
+
+ By default, it does not include the description of the linked
+ mesh object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_im_get(mesh_im MI, 'display')</literal></para>
+
+ <para> displays a short summary for a mesh_im object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_mesh_im_get(mesh_im MI, 'linked mesh')</literal></para>
+
+ <para> Returns a reference to the mesh object linked to <literal>mim</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_mesh_im_get(mesh_im MI, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the mesh_im object.
+
+ The result does not take into account the linked mesh object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_im_set">gf_mesh_im_set</link></member>
- <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_im_set.xml b/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
index a9bc19d..da922e5 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_im_set.xml
@@ -9,66 +9,65 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_im_set</refname>
-
- <refpurpose>General function for modifying mesh_im objects</refpurpose>
+ <refpurpose> General function for modifying mesh_im objects
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_mesh_im_set(MIM, 'integ', { integ im | int IMDEGREE }, [, ivec CVIDX])
-gf_mesh_im_set(MIM, 'adapt')
- </synopsis>
+ <synopsis>gf_mesh_im_set(mesh_im MI, 'integ',{integ im|int im_degree}[, ivec CVids])</synopsis>
+ <synopsis>gf_mesh_im_set(mesh_im MI, 'adapt')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for modifying mesh_im objects
+ </para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_im_set(MIM, 'integ', im [, CVIDX]) : set im as the integration method for all the convexes listed in CVIDX in the
- mesh linked to MF. If CVIDX is not used, the im is assigned to all convexes.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mesh_im_set(mesh_im MI, 'integ',{integ im|int im_degree}[, ivec CVids])</literal></para>
- <listitem>
- <para>gf_mesh_im_set(MIM, 'integ', IM_DEGREE [, CVIDX]) :
- assign a classical approximate integration method
- of order at least IM_DEGREE on the listed convexes.
- If IM_DEGREE=-1, then the dummy integration method 'IM_NONE' is used. </para>
- </listitem>
+ <para> Set the integration method.
- <listitem>
- <para>gf_mesh_im_set(MIM, 'adapt') For a mesh_im levelset object only. Adapt the integration methods to a
- change of the levelset function.</para>
- </listitem>
- </itemizedlist>
- </refsection>
+ Assign an integration method to all convexes whose #ids are
+ listed in <literal>CVids</literal>. If <literal>CVids</literal> is not given, the integration is
+ assigned to all convexes. It is possible to assign a specific
+ integration method with an integration method handle <literal>im</literal> obtained
+ via gf_integ('IM_SOMETHING'), or to let getfem choose a suitable
+ integration method with <literal>im_degree</literal> (choosen such that polynomials
+ of <latex style="text"><![CDATA[\text{degree} \leq \text{im\_degree}]]></latex> are exactly integrated.
+ If <literal>im_degree=-1</literal>, then the dummy integration method IM_NONE will
+ be used.)
+ </para>
+ </listitem>
- <refsection>
- <title>Examples</title>
+ <listitem>
+ <para><literal>gf_mesh_im_set(mesh_im MI, 'adapt')</literal></para>
+
+ <para> For a mesh_im levelset object only. Adapt the integration methods to a
+ change of the levelset function.
+ </para>
+ </listitem>
- <programlisting role="example"><![CDATA[
-mim = gf_mesh_im(m);
-// set an integration method of order 5 on all convexes
-gf_mesh_im_set(mim,'integ',5);
-// change the integration for convexes 5 6 9
-gf_mesh_im_set(mim,'integ',gf_integ('IM_TRIANGLE(13)'),[6 5 9]);
- ]]></programlisting>
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_im_get">gf_mesh_im_get</link></member>
- <member><link linkend="gf_mesh_im">gf_mesh_im</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
index 1100fb8..7b4f3f3 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset.xml
@@ -9,42 +9,54 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_levelset</refname>
-
- <refpurpose>Manage level sets.</refpurpose>
+ <refpurpose> General constructor for mesh_levelset objects. The role of this object is
+ to provide a mesh cut by a certain number of level_set. This object is
+ used to build conformal integration method (object mim and enriched finite
+ element methods (Xfem)).
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>gf_mesh_levelset('.mesh', Mesh m)</synopsis>
+ <synopsis>MLS = gf_mesh_levelset(mesh m)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for mesh_levelset objects.</para>
+
+ <para> General constructor for mesh_levelset objects. The role of this object is
+ to provide a mesh cut by a certain number of level_set. This object is
+ used to build conformal integration method (object mim and enriched finite
+ element methods (Xfem)).
+ </para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para> gf_mesh_levelset('.mesh', Mesh m) Build a new MeshLevelSet
- object from a Mesh object.</para>
- </listitem>
+ <listitem>
+ <para><literal>MLS = gf_mesh_levelset(mesh m)</literal></para>
+
+ <para> Build a new mesh_levelset object from a mesh and returns its handle.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link
- linkend="gf_mesh_levelset_get">gf_mesh_levelset_get</link></member>
-
- <member><link
- linkend="gf_mesh_levelset_set">gf_mesh_levelset_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
index 0311a2c..37628a2 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_get"
- xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_get" xml:lang="en"
+ xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,59 +9,108 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_levelset_get</refname>
-
- <refpurpose>General function for querying information about MESHLEVELSET
- objects.</refpurpose>
+ <refpurpose> General function for querying information about mesh_levelset objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>I = gf_mesh_levelset_get(MLS, ...)</synopsis>
+ <synopsis>M = gf_mesh_levelset_get(mesh_levelset MLS, 'cut_mesh')</synopsis>
+ <synopsis>LM = gf_mesh_levelset_get(mesh_levelset MLS, 'linked_mesh')</synopsis>
+ <synopsis>nbls = gf_mesh_levelset_get(mesh_levelset MLS, 'nb_ls')</synopsis>
+ <synopsis>LS = gf_mesh_levelset_get(mesh_levelset MLS, 'levelsets')</synopsis>
+ <synopsis>CVIDs = gf_mesh_levelset_get(mesh_levelset MLS, 'crack_tip_convexes')</synopsis>
+ <synopsis>SIZE = gf_mesh_levelset_get(mesh_levelset MLS, 'memsize')</synopsis>
+ <synopsis>s = gf_mesh_levelset_get(mesh_levelset MLS, 'char')</synopsis>
+ <synopsis>gf_mesh_levelset_get(mesh_levelset MLS, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about mesh_levelset objects.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>M = gf_mesh_levelset_get(MLS,'cut_mesh')</para>
- </listitem>
-
- <listitem>
- <para>LM = gf_mesh_levelset_get(MLS,'linked_mesh')</para>
- </listitem>
-
- <listitem>
- <para>LS = gf_mesh_levelset_get(MLS,'levelsets')</para>
- </listitem>
-
- <listitem>
- <para>CC = gf_mesh_levelset_get(MLS,'crack_tip_convexes')</para>
- </listitem>
-
- <listitem>
- <para>CC = gf_mesh_levelset_get(MLS,'memsize') Return the amount of
- memory (in bytes) used by the mesh-level-set.</para>
- </listitem>
+ <listitem>
+ <para><literal>M = gf_mesh_levelset_get(mesh_levelset MLS, 'cut_mesh')</literal></para>
+
+ <para> Return a mesh cut by the linked levelset's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>LM = gf_mesh_levelset_get(mesh_levelset MLS, 'linked_mesh')</literal></para>
+
+ <para> Return a reference to the linked mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>nbls = gf_mesh_levelset_get(mesh_levelset MLS, 'nb_ls')</literal></para>
+
+ <para> Return the number of linked levelset's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>LS = gf_mesh_levelset_get(mesh_levelset MLS, 'levelsets')</literal></para>
+
+ <para> Return a list of references to the linked levelset's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVIDs = gf_mesh_levelset_get(mesh_levelset MLS, 'crack_tip_convexes')</literal></para>
+
+ <para> Return the list of convex #id's of the linked mesh on
+ which have a tip of any linked levelset's.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SIZE = gf_mesh_levelset_get(mesh_levelset MLS, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the mesh_levelset.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_mesh_levelset_get(mesh_levelset MLS, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the mesh_levelsetn.
+
+ This can be used to perform comparisons between two
+ different mesh_levelset objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_levelset_get(mesh_levelset MLS, 'display')</literal></para>
+
+ <para> displays a short summary for a mesh_levelset object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link
- linkend="gf_mesh_levelset">gf_mesh_levelset</link></member>
-
- <member><link
- linkend="gf_mesh_levelset_set">gf_mesh_levelset_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml b/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
index c756257..0c7ad9a 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_set"
- xml:lang="en" xmlns="http://docbook.org/ns/docbook"
+<refentry version="5.0-subset Scilab" xml:id="gf_mesh_levelset_set" xml:lang="en"
+ xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
@@ -9,50 +9,75 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_levelset_set</refname>
-
- <refpurpose>General function for modification of MESHLEVELSET
- objects.</refpurpose>
+ <refpurpose> General function for modification of mesh_levelset objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>gf_mesh_levelset_set(MLS, ...)</synopsis>
+ <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'add', levelset ls)</synopsis>
+ <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'sup', levelset ls)</synopsis>
+ <synopsis>gf_mesh_levelset_set(mesh_levelset MLS, 'adapt')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for modification of mesh_levelset objects.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_mesh_levelset_set(MLS,'add',arg1)</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'add', levelset ls)</literal></para>
+
+ <para> Add a link to the levelset <literal>ls</literal>.
+
+ Only a reference is kept, no copy is done. In order to indicate
+ that the linked mesh is cut by a levelset one has to call this
+ method, where <literal>ls</literal> is an levelset object. An arbitrary number of
+ levelset can be added.
+
+ **WARNING**
+
+ The mesh of <literal>ls</literal> and the linked mesh must be the same.
+ </para>
+ </listitem>
- <listitem>
- <para>gf_mesh_levelset_set(MLS,'delete',arg1)</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'sup', levelset ls)</literal></para>
+
+ <para> Remove a link to the levelset <literal>ls</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_levelset_set(mesh_levelset MLS, 'adapt')</literal></para>
+
+ <para> Do all the work (cut the convexes with the levelsets).
+
+ To initialice the mesh_levelset object or to actualize it when the
+ value of any levelset function is modified, one has to call
+ this method.
+ </para>
+ </listitem>
- <listitem>
- <para>gf_mesh_levelset_set(MLS,'adapt')</para>
- </listitem>
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link
- linkend="gf_mesh_levelset_get">gf_mesh_levelset_get</link></member>
-
- <member><link
- linkend="gf_mesh_levelset">gf_mesh_levelset</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_mesh_set.xml b/interface/src/scilab/help/en_US/gf_mesh_set.xml
index 738293f..b8ef093 100644
--- a/interface/src/scilab/help/en_US/gf_mesh_set.xml
+++ b/interface/src/scilab/help/en_US/gf_mesh_set.xml
@@ -9,169 +9,234 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_mesh_set</refname>
-
- <refpurpose>General function for modification of a mesh
- object.</refpurpose>
+ <refpurpose> General function for modification of a mesh object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-ivec IDX = gf_mesh_set(M, 'add point', mat PT)
-gf_mesh_set(M, 'del point', ivec IDX)
-vec IDX = gf_mesh_set(M, 'add convex', geotrans GT,mat CVPTS)
-gf_mesh_set(M, 'del convex', ivec IDX)
-gf_mesh_set(M, 'del convex of dim', ivec DIM)
-gf_mesh_set(M, 'region', int bnum, imat CVFLST)
-gf_mesh_set(M, 'region intersect', int R1, int R2)
-gf_mesh_set(M, 'region merge', int R1, int R2)
-gf_mesh_set(M, 'region substract', int R1, int R2)
-gf_mesh_set(M, 'delete region', ivec blst)
-gf_mesh_set(M, 'translate', vec V)
-gf_mesh_set(M, 'transform', mat T)
-gf_mesh_set(M, 'merge', const_mesh M2)
-gf_mesh_set(M, 'optimize structure')
-gf_mesh_set(M 'refine' [, mat CVLST])
-</synopsis>
+ <synopsis>PIDs = gf_mesh_set(mesh M, 'pts', mat PTS)</synopsis>
+ <synopsis>PIDs = gf_mesh_set(mesh M, 'add point', mat PTS)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'del point', ivec PIDs)</synopsis>
+ <synopsis>CVIDs = gf_mesh_set(mesh M, 'add convex', geotrans GT, mat PTS)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'del convex', mat CVIDs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'del convex of dim', ivec DIMs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'translate', vec V)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'transform', mat T)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'boundary', int rnum, mat CVFIDs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'region', int rnum, mat CVFIDs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'region intersect', int r1, int r2)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'region merge', int r1, int r2)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'region substract', int r1, int r2)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'delete boundary', int rnum, mat CVFIDs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'delete region', ivec RIDs)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'merge', mesh m2)</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'optimize structure')</synopsis>
+ <synopsis>gf_mesh_set(mesh M, 'refine'[, ivec CVIDs])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for modification of a mesh object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>PIDs = gf_mesh_set(M,'pts',mat PTS) Replace the coordinates of
- the mesh points with those given in <literal>PTS</literal>.</para>
- </listitem>
-
- <listitem>
- <para>PIDs = gf_mesh_set(M,'add point',mat PTS) Insert new points in
- the mesh and return their #ids. <literal>PTS</literal> should be an n
- x m matrix , where <literal>n</literal> is the mesh dimension, and
- <literal>m</literal> is the number of points that will be added to the
- mesh. On output, <literal>PIDs</literal> contains the point #ids of
- these new points.</para>
-
- <para>Remark: if some points are already part of the mesh (with a
- small tolerance of approximately 1e-8), they won't be inserted again,
- and <literal>PIDs</literal> will contain the previously assigned #ids
- of these points.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'del point',vec PIDs) Removes one or more points
- from the mesh. <literal>PIDs</literal> should contain the point #ids,
- such as the one returned by the 'add point' command.</para>
- </listitem>
-
- <listitem>
- <para>CVIDs = gf_mesh_set(M,'add convex',GeoTrans GT, mat PTS) Add a
- new convex into the mesh. The convex structure (triangle, prism,...)
- is given by <phrase>GT</phrase> (obtained with gf_geotrans('...')),
- and its points are given by the columns of <literal>PTS</literal>. On
- return, <literal>CVIDs</literal> contains the convex #ids.
- <literal>PTS</literal> might be a 3-dimensional array in order to
- insert more than one convex (or a two dimensional array correctly
- shaped according to Fortran ordering).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'del convex',mat CVIDs) Remove one or more
- convexes from the mesh. <literal>CVIDs</literal> should contain the
- convexes #ids, such as the ones returned by the 'add convex'
- command.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'del convex of dim',vec DIMs) Remove all convexes
- of dimension listed in <literal>DIMs</literal>. </para>
-
- <para>For example; gf_mesh_set(M,'del convex of dim', [1,2]) remove
- all line segments, triangles and quadrangles.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'translate',vec V) Translates each point of the
- mesh from <literal>V</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'transform',mat T) Applies the matrix
- <literal>T</literal> to each point of the mesh. Note that
- <literal>T</literal> is not required to be a N x N matrix (with
- <emphasis>N = gf_mesh_get(M,'dim')</emphasis>). Hence it is possible
- to transform a 2D mesh into a 3D one (and reciprocally).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'region',int rnum, mat CVFIDs) Assigns the region
- number <literal>rnum</literal> to the convex faces stored in each
- column of the matrix <literal>CVFIDs</literal>. The first row of
- <literal>CVFIDs</literal> contains a convex #ids, and the second row
- contains a face number in the convex (or 0 for the whole convex
- (regions are usually used to store a list of convex faces, but you may
- also use them to store a list of convexes).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'region intersect',int r1, int r2) Replace the
- region number <literal>r1</literal> with its intersection with region
- number <literal>r2</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'region merge',int r1, int r2) Merge region number
- <literal>r2</literal> into region number <literal>r1</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'region substract',int r1, int r2) Replace the
- region number <literal>r1</literal> with its difference with region
- number <literal>r2</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'delete region',vec RIDs) Remove the regions whose
- #ids are listed in <literal>RIDs</literal></para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'merge',Mesh m2) Merge with the Mesh
- <literal>m2</literal>. Overlapping points won't be duplicated. If
- <literal>m2</literal> is a MeshFem object, its linked mesh will be
- used.</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'optimize structure') Reset point and convex
- numbering. After optimisation, the points (resp. convexes) will be
- consecutively numbered from 1 to gf_mesh_get(M,'max pid') (resp.
- gf_mesh_get(M,'max cvid')).</para>
- </listitem>
-
- <listitem>
- <para>gf_mesh_set(M,'refine'[, vec CVIDs]) Use a Bank strategy for
- mesh refinement. If <literal>CVIDs</literal> is not given, the whole
- mesh is refined. Note that the regions, and the finite element methods
- and integration methods of the MeshFem and MeshIm objects linked to
- this mesh will be automagically refined.</para>
- </listitem>
+ <listitem>
+ <para><literal>PIDs = gf_mesh_set(mesh M, 'pts', mat PTS)</literal></para>
+
+ <para> Replace the coordinates of the mesh points with those given in <literal>PTS</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PIDs = gf_mesh_set(mesh M, 'add point', mat PTS)</literal></para>
+
+ <para> Insert new points in the mesh and return their #ids.
+
+ <literal>PTS</literal> should be an <literal></literal>nxm<literal></literal> matrix , where <literal></literal>n<literal></literal> is the mesh
+ dimension, and <literal></literal>m<literal></literal> is the number of points that will be
+ added to the mesh. On output, <literal>PIDs</literal> contains the point #ids
+ of these new points.
+
+ Remark: if some points are already part of the mesh (with a small
+ tolerance of approximately <literal></literal>1e-8<literal></literal>), they won't be inserted again,
+ and <literal>PIDs</literal> will contain the previously assigned #ids of these
+ points.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'del point', ivec PIDs)</literal></para>
+
+ <para> Removes one or more points from the mesh.
+
+ <literal>PIDs</literal> should contain the point #ids, such as the one returned by
+ the 'add point' command.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVIDs = gf_mesh_set(mesh M, 'add convex', geotrans GT, mat PTS)</literal></para>
+
+ <para> Add a new convex into the mesh.
+
+ The convex structure (triangle, prism,...) is given by <literal>GT</literal>
+ (obtained with gf_geotrans('...')), and its points are given by
+ the columns of <literal>PTS</literal>. On return, <literal>CVIDs</literal> contains the convex #ids.
+ <literal>PTS</literal> might be a 3-dimensional array in order to insert more than
+ one convex (or a two dimensional array correctly shaped according
+ to Fortran ordering).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'del convex', mat CVIDs)</literal></para>
+
+ <para> Remove one or more convexes from the mesh.
+
+ <literal>CVIDs</literal> should contain the convexes #ids, such as the ones
+ returned by the 'add convex' command.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'del convex of dim', ivec DIMs)</literal></para>
+
+ <para> Remove all convexes of dimension listed in <literal>DIMs</literal>.
+
+ For example; <literal></literal>gf_mesh_set(mesh M, 'del convex of dim', [1,2])<literal></literal> remove
+ all line segments, triangles and quadrangles.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'translate', vec V)</literal></para>
+
+ <para> Translates each point of the mesh from <literal>V</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'transform', mat T)</literal></para>
+
+ <para> Applies the matrix <literal>T</literal> to each point of the mesh.
+
+ Note that <literal>T</literal> is not required to be a <literal></literal>NxN<literal></literal> matrix (with
+ <literal></literal>N = gf_mesh_get(mesh M, 'dim')<literal></literal>). Hence it is possible to transform
+ a 2D mesh into a 3D one (and reciprocally).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'boundary', int rnum, mat CVFIDs)</literal></para>
+
+ <para> DEPRECATED FUNCTION. Use 'region' instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'region', int rnum, mat CVFIDs)</literal></para>
+
+ <para> Assigns the region number <literal>rnum</literal> to the convex faces (or convexes)
+ stored in each column of the matrix <literal>CVFIDs</literal>.
+
+ The first row of <literal>CVFIDs</literal> contains a convex #ids, and the second row
+ contains a face number in the convex (or 0
+ for the whole convex (regions are usually used to store a list of
+ convex faces, but you may also use them to store a list of convexes).
+
+ If a vector is provided (or a one row matrix) the region will represent
+ the corresponding set of convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'region intersect', int r1, int r2)</literal></para>
+
+ <para> Replace the region number <literal>r1</literal> with its intersection with region number <literal>r2</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'region merge', int r1, int r2)</literal></para>
+
+ <para> Merge region number <literal>r2</literal> into region number <literal>r1</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'region substract', int r1, int r2)</literal></para>
+
+ <para> Replace the region number <literal>r1</literal> with its difference with region
+ number <literal>r2</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'delete boundary', int rnum, mat CVFIDs)</literal></para>
+
+ <para> DEPRECATED FUNCTION. Use 'delete region' instead.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'delete region', ivec RIDs)</literal></para>
+
+ <para> Remove the regions whose #ids are listed in <literal>RIDs</literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'merge', mesh m2)</literal></para>
+
+ <para> Merge with the mesh <literal>m2</literal>.
+
+ Overlapping points won't be duplicated. If <literal>m2</literal> is a mesh_fem object,
+ its linked mesh will be used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'optimize structure')</literal></para>
+
+ <para> Reset point and convex numbering.
+
+ After optimisation, the points (resp. convexes) will
+ be consecutively numbered from 1 to gf_mesh_get(mesh M, 'max pid')
+ (resp. gf_mesh_get(mesh M, 'max cvid')).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_mesh_set(mesh M, 'refine'[, ivec CVIDs])</literal></para>
+
+ <para> Use a Bank strategy for mesh refinement.
+
+ If <literal>CVIDs</literal> is not given, the whole mesh is refined. Note
+ that the regions, and the finite element methods and
+ integration methods of the mesh_fem and mesh_im objects linked
+ to this mesh will be automagically refined.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_mesh_get">gf_mesh_get</link></member>
- <member><link linkend="gf_mesh">gf_mesh</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model.xml b/interface/src/scilab/help/en_US/gf_model.xml
index 8e735ac..a549f89 100644
--- a/interface/src/scilab/help/en_US/gf_model.xml
+++ b/interface/src/scilab/help/en_US/gf_model.xml
@@ -9,58 +9,66 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_model</refname>
+ <refpurpose> model variables store the variables and the state data and the
+ description of a model. This includes the global tangent matrix, the right
+ hand side and the constraints. There are two kinds of models, the <literal>real</literal>
+ and the <literal>complex</literal> models.
- <refpurpose>General constructor for model objects. Return a getfem handle
- to the newly created object.</refpurpose>
+ model object is the evolution for getfem++ 4.0 of the mdstate object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-mds=gf_model('real')
-mds=gf_model('complex')
- </synopsis>
+ <synopsis>MD = gf_model('real')</synopsis>
+ <synopsis>MD = gf_model('complex')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for model objects.</para>
- <para>General constructor for model objects. Return a getfem handle to the
- newly created object.</para>
+ <para> model variables store the variables and the state data and the
+ description of a model. This includes the global tangent matrix, the right
+ hand side and the constraints. There are two kinds of models, the <literal>real</literal>
+ and the <literal>complex</literal> models.
- <para>"Model" variables store the variables and the state data and the
- description of a model. This includes the global tangent matrix, the right
- hand side and the constraints. </para>
+ model object is the evolution for getfem++ 4.0 of the mdstate object.
+</para>
+ </refsection>
- <para>There are two kinds of models, the "real" and the "complex" models.
- "Model" object is the evolution for Getfem++ 4.0 of the "MdState" object.
- </para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>MDS = gf_model('real') Build a model for real unknowns.</para>
- </listitem>
+ <listitem>
+ <para><literal>MD = gf_model('real')</literal></para>
+
+ <para> Build a model for real unknowns.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MD = gf_model('complex')</literal></para>
+
+ <para> Build a model for complex unknowns.
+ </para>
+ </listitem>
- <listitem>
- <para>MDS = gf_model('complex') Build a model for complex
- unknowns.</para>
- </listitem>
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_model_set">gf_model_set</link></member>
- <member><link linkend="gf_model_get">gf_model_get</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model_get.xml b/interface/src/scilab/help/en_US/gf_model_get.xml
index 62e9537..46395dc 100644
--- a/interface/src/scilab/help/en_US/gf_model_get.xml
+++ b/interface/src/scilab/help/en_US/gf_model_get.xml
@@ -9,145 +9,335 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_model_get</refname>
-
- <refpurpose>Get information from a model object.</refpurpose>
+ <refpurpose> Get information from a model object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-b=gf_model_get(md,'is_complex')
-M=gf_model_get(md,'tangent_matrix')
-V=gf_model_get(md,'rhs')
-gf_model_get(md,'listvar')
-gf_model_get(md,'listbricks')
-size=gf_model_get(md,'memsize')
-V=gf_model_get(md,'variable', string name[, int niter])
-name=gf_model_get(md,'mult varname Dirichlet', int ind_brick)
-V=gf_model_get(md,'from variables')
-gf_model_get(md,'assembly'[, string option])
-gf_model_get(md,'solve' [,...])
-V = gf_model_get(md,'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])
- </synopsis>
+ <synopsis>b = gf_model_get(model M, 'is_complex')</synopsis>
+ <synopsis>T = gf_model_get(model M, 'nbdof')</synopsis>
+ <synopsis>T = gf_model_get(model M, 'tangent_matrix')</synopsis>
+ <synopsis>gf_model_get(model M, 'rhs')</synopsis>
+ <synopsis>gf_model_get(model M, 'brick term rhs', int ind_brick[, int ind_term, int sym, int ind_iter])</synopsis>
+ <synopsis>z = gf_model_get(model M, 'memsize')</synopsis>
+ <synopsis>gf_model_get(model M, 'listvar')</synopsis>
+ <synopsis>gf_model_get(model M, 'listbricks')</synopsis>
+ <synopsis>V = gf_model_get(model M, 'variable', string name[, int niter])</synopsis>
+ <synopsis>V = gf_model_get(model M, 'mesh fem of variable', string name)</synopsis>
+ <synopsis>name = gf_model_get(model M, 'mult varname Dirichlet', int ind_brick)</synopsis>
+ <synopsis>I = gf_model_get(model M, 'interval of variable', string varname)</synopsis>
+ <synopsis>V = gf_model_get(model M, 'from variables')</synopsis>
+ <synopsis>gf_model_get(model M, 'assembly'[, string option])</synopsis>
+ <synopsis>{nbit, converged} = gf_model_get(model M, 'solve'[, ...])</synopsis>
+ <synopsis>gf_model_get(model M, 'test tangent matrix'[, scalar EPS[, int NB[, scalar scale]]])</synopsis>
+ <synopsis>V = gf_model_get(model M, 'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])</synopsis>
+ <synopsis>V = gf_model_get(model M, 'compute Von Mises or Tresca', string varname, string lawname, string dataname, mesh_fem mf_vm[, string version])</synopsis>
+ <synopsis>V = gf_model_get(model M, 'compute second Piola Kirchhoff tensor', string varname, string lawname, string dataname, mesh_fem mf_sigma)</synopsis>
+ <synopsis>V = gf_model_get(model M, 'compute plasticity Von Mises or Tresca', string datasigma, mesh_fem mf_vm[, string version])</synopsis>
+ <synopsis>gf_model_get(model M, 'compute plasticity constraints', mesh_im mim, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</synopsis>
+ <synopsis>V = gf_model_get(model M, 'compute plastic part', mesh_im mim, mesh_fem mf_pl, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</synopsis>
+ <synopsis>M = gf_model_get(model M, 'matrix term', int ind_brick, int ind_term)</synopsis>
+ <synopsis>s = gf_model_get(model M, 'char')</synopsis>
+ <synopsis>gf_model_get(model M, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Get information from a model object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>b = gf_model_get(mds,'is_complex') Return 0 is the model is
- real, 1 if it is complex.</para>
- </listitem>
-
- <listitem>
- <para>T = gf_model_get(mds,'tangent_matrix') Return the tangent matrix
- stored in the model .</para>
- </listitem>
-
- <listitem>
- <para>gf_model_get(mds,'rhs') Return the right hand side of the
- tangent problem.</para>
- </listitem>
-
- <listitem>
- <para>z = gf_model_get(mds,'memsize') Return a rough approximation of
- the amount of memory (in bytes) used by the model.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_get(mds,'listvar') print to the output the list of
- variables and constants of the model.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_get(mds,'listbricks') print to the output the list of
- bricks of the model.</para>
- </listitem>
-
- <listitem>
- <para>V = gf_model_get(mds,'variable', string name[, int niter]) Gives
- the value of a variable or data.</para>
- </listitem>
-
- <listitem>
- <para>name = gf_model_get(mds,'mult varname Dirichlet', int ind_brick)
- Gives the name of the multiplier variable for a Dirichlet brick. If
- the brick is not a Dirichlet condition with multiplier brick, this
- function has an undefined behavior</para>
- </listitem>
-
- <listitem>
- <para>V = gf_model_get(mds,'from variables') Return the vector of all
- the degrees of freedom of the model consisting of the concatenation of
- the variables of the model (usefull to solve your problem with you own
- solver).</para>
- </listitem>
-
- <listitem>
- <para>gf_model_get(mds,'assembly'[, string option]) Assembly of the
- tangent system taking into account the terms from all bricks.
- <literal>option</literal>, if specified, should be 'build all', 'build
- rhs' or 'build matrix'. The default is to build the whole tangent
- linear system (matrix and rhs). This function is usefull to solve your
- problem with you own solver.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_get(mds,'solve'[,...]) Run the standard getfem solver.
- Note that you should be able to use your own solver if you want (it is
- possible to obtain the tangent matrix and its right hand side with the
- gf_model_get(mds,'tangent matrix') etc.).</para>
-
- <para>Various options can be specified: </para>
-
- <itemizedlist>
- <listitem>
- <para>'noisy' or 'very noisy' the solver will display some
- information showing the progress (residual values etc.).</para>
- </listitem>
-
- <listitem>
- <para>'max_iter', NIT set the maximum iterations numbers.</para>
- </listitem>
-
- <listitem>
- <para>'max_res', RES set the target residual value.</para>
- </listitem>
-
- <listitem>
- <para>- 'lsolver', SOLVERNAME select explicitely the solver used
- for the linear systems (the default value is 'auto', which lets
- getfem choose itself). Possible values are 'superlu', 'mumps' (if
- supported), 'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>V = gf_model_get(mds,'compute isotropic linearized Von Mises or
- Tresca', string varname, string dataname_lambda, string dataname_mu,
- MeshFem mf_vm[, string version]) Compute the Von-Mises stress or the
- Tresca stress of a field (only valid for isotropic linearized
- elasticity in 3D). `version` should be 'Von Mises' or 'Tresca' ('Von
- Mises' is the default).</para>
- </listitem>
+ <listitem>
+ <para><literal>b = gf_model_get(model M, 'is_complex')</literal></para>
+
+ <para> Return 0 is the model is real, 1 if it is complex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>T = gf_model_get(model M, 'nbdof')</literal></para>
+
+ <para> Return the total number of degrees of freedom of the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>T = gf_model_get(model M, 'tangent_matrix')</literal></para>
+
+ <para> Return the tangent matrix stored in the model .
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'rhs')</literal></para>
+
+ <para> Return the right hand side of the tangent problem.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'brick term rhs', int ind_brick[, int ind_term, int sym, int ind_iter])</literal></para>
+
+ <para> Gives the access to the part of the right hand side of a term
+ of a particular nonlinear brick. Does not account of the eventual
+ time dispatcher. An assembly of the rhs has to be done first.
+ <literal>ind_brick</literal> is the brick index. <literal>ind_term</literal> is the index of the
+ term inside the brick (default value : 1).
+ <literal>sym</literal> is to access to the second right hand side of for symmetric
+ terms acting on two different variables (default is 0).
+ <literal>ind_iter</literal> is the iteration number when time dispatchers are
+ used (default is 1).
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_model_get(model M, 'memsize')</literal></para>
+
+ <para> Return a rough approximation of the amount of memory (in bytes) used by
+ the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'listvar')</literal></para>
+
+ <para> print to the output the list of variables and constants of the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'listbricks')</literal></para>
+
+ <para> print to the output the list of bricks of the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'variable', string name[, int niter])</literal></para>
+
+ <para> Gives the value of a variable or data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'mesh fem of variable', string name)</literal></para>
+
+ <para> Gives access to the <literal>mesh_fem</literal> of a variable or data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>name = gf_model_get(model M, 'mult varname Dirichlet', int ind_brick)</literal></para>
+
+ <para> Gives the name of the multiplier variable for a Dirichlet brick.
+ If the brick is not a Dirichlet condition with multiplier brick,
+ this function has an undefined behavior
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>I = gf_model_get(model M, 'interval of variable', string varname)</literal></para>
+
+ <para> Gives the interval of the variable <literal>varname</literal> in the linear system of
+ the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'from variables')</literal></para>
+
+ <para> Return the vector of all the degrees of freedom of the model consisting
+ of the concatenation of the variables of the model (useful
+ to solve your problem with you own solver).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'assembly'[, string option])</literal></para>
+
+ <para> Assembly of the tangent system taking into account the terms
+ from all bricks. <literal>option</literal>, if specified, should be 'build_all',
+ 'build_rhs', 'build_matrix' or 'pseudo_potential' (in that case,
+ the pseudo_potential is returned).
+ The default is to build the whole
+ tangent linear system (matrix and rhs). This function is useful
+ to solve your problem with you own solver.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{nbit, converged} = gf_model_get(model M, 'solve'[, ...])</literal></para>
+
+ <para> Run the standard getfem solver.
+
+ Note that you should be able to use your own solver if you want
+ (it is possible to obtain the tangent matrix and its right hand
+ side with the gf_model_get(model M, 'tangent matrix') etc.).
+
+ Various options can be specified:
+
+ - 'noisy' or 'very_noisy'
+ the solver will display some information showing the progress
+ (residual values etc.).
+ - 'max_iter', int NIT
+ set the maximum iterations numbers.
+ - 'max_res', @float RES
+ set the target residual value.
+ - 'diverged_res', @float RES
+ set the threshold value of the residual beyond which the iterative
+ method is considered to diverge (default is 1e200).
+ - 'lsolver', string SOLVER_NAME
+ select explicitely the solver used for the linear systems (the
+ default value is 'auto', which lets getfem choose itself).
+ Possible values are 'superlu', 'mumps' (if supported),
+ 'cg/ildlt', 'gmres/ilu' and 'gmres/ilut'.
+ - 'lsearch', string LINE_SEARCH_NAME
+ select explicitely the line search method used for the linear systems (the
+ default value is 'default').
+ Possible values are 'simplest', 'systematic', 'quadratic' or 'basic'.
+ - 'with pseudo potential'
+ for nonlinear problems, the criterion of the line search will
+ be a pseudo potential instead of the residual. Still experimental since
+ not all bricks define a pseudo potential.
+
+ Return the number of iterations, if a iterative method is used.
+
+ Note that it is possible to disable some variables
+ (see gf_model_set(model M, 'disable variable') ) in order to
+ solve the problem only with respect to a subset of variables (the
+ disabled variables are the considered as data) for instance to
+ replace the global Newton strategy with a fixed point one.
+
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'test tangent matrix'[, scalar EPS[, int NB[, scalar scale]]])</literal></para>
+
+ <para> Test the consistency of the tangent matrix in some random positions
+ and random directions (useful to test newly created bricks).
+ <literal>EPS</literal> is the value of the small parameter for the finite difference
+ computation of the derivative is the random direction (default is 1E-6).
+ <literal>NN</literal> is the number of tests (default is 100). <literal>scale</literal> is a parameter
+ for the random position (default is 1). Each dof od the random
+ position is chosen in the range [-scale, scale].
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'compute isotropic linearized Von Mises or Tresca', string varname, string dataname_lambda, string dataname_mu, mesh_fem mf_vm[, string version])</literal></para>
+
+ <para> Compute the Von-Mises stress or the Tresca stress of a field (only
+ valid for isotropic linearized elasticity in 3D). <literal>version</literal> should
+ be 'Von_Mises' or 'Tresca' ('Von_Mises' is the default).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'compute Von Mises or Tresca', string varname, string lawname, string dataname, mesh_fem mf_vm[, string version])</literal></para>
+
+ <para> Compute on <literal>mf_vm</literal> the Von-Mises stress or the Tresca stress of a field
+ for nonlinear elasticity in 3D. <literal>lawname</literal> is the constitutive law which
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+ depends on the law. It could be a short vector of constant values or a
+ vector field described on a finite element method for variable coefficients.
+ <literal>version</literal> should be 'Von_Mises' or 'Tresca' ('Von_Mises' is the default).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'compute second Piola Kirchhoff tensor', string varname, string lawname, string dataname, mesh_fem mf_sigma)</literal></para>
+
+ <para> Compute on <literal>mf_sigma</literal> the second Piola Kirchhoff stress tensor of a field
+ for nonlinear elasticity in 3D. <literal>lawname</literal> is the constitutive law which
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin' or 'Ciarlet Geymonat'.
+ <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+ depends on the law. It could be a short vector of constant values or a
+ vector field described on a finite element method for variable
+ coefficients.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'compute plasticity Von Mises or Tresca', string datasigma, mesh_fem mf_vm[, string version])</literal></para>
+
+ <para> Compute on <literal>mf_vm</literal> the Von-Mises or the Tresca stress of a field for plasticity and return it into the vector V.
+ <literal>datasigma</literal> is a vector which contains the stress constraints values supported by the mesh.
+ <literal>version</literal> should be 'Von_Mises' or 'Tresca' ('Von_Mises' is the default).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'compute plasticity constraints', mesh_im mim, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</literal></para>
+
+ <para> Compute and save the stress constraints sigma for other hypothetical iterations.
+ 'mim' is the integration method to use for the computation.
+ 'varname' is the main variable of the problem.
+ 'projname' is the type of projection to use. For the moment it could only be 'Von Mises' or 'VM'.
+ 'datalambda' and 'datamu' are the Lame coefficients of the material.
+ 'datasigma' is a vector which will contains the new stress constraints values.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_model_get(model M, 'compute plastic part', mesh_im mim, mesh_fem mf_pl, string varname, string projname, string datalambda, string datamu, string datathreshold, string datasigma)</literal></para>
+
+ <para> Compute on <literal>mf_pl</literal> the plastic part and return it into the vector V.
+ <literal>datasigma</literal> is a vector which contains the stress constraints values supported by the mesh.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>M = gf_model_get(model M, 'matrix term', int ind_brick, int ind_term)</literal></para>
+
+ <para> Gives the matrix term ind_term of the brick ind_brick if it exists
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_model_get(model M, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the model.
+
+ This can be used to perform comparisons between two
+ different model objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_get(model M, 'display')</literal></para>
+
+ <para> displays a short summary for a model object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_model">gf_model</link></member>
- <member><link linkend="gf_model_set">gf_model_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_model_set.xml b/interface/src/scilab/help/en_US/gf_model_set.xml
index 8a23b40..560c618 100644
--- a/interface/src/scilab/help/en_US/gf_model_set.xml
+++ b/interface/src/scilab/help/en_US/gf_model_set.xml
@@ -9,600 +9,1129 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_model_set</refname>
-
- <refpurpose>Modify a model object.</refpurpose>
+ <refpurpose> Modifies a model object.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_model_set(md,'variable', vec U[, int niter])
-gf_model_set(md,'clear')
-gf_model_set(md,'add fem variable', string name, mesh_fem mf[, int niter])
-gf_model_set(md,'add variable' string name, int size[, int niter])
-gf_model_set(md,'resize variable' string name, int size)
-gf_model_set(md,'add fem data', string name, mesh_fem mf[, int niter])
-gf_model_set(md,'add initialized fem data', string name, mesh_fem mf, vec V)
-gf_model_set(md,'add data', string name, mesh_fem mf, vec V)
-gf_model_set(md,'add initialized data', string name, vec V)
-gf_model_set(md,'add multiplier', string name, mesh_fem mf, mesh_im mim, string primalname, int region[, int niter])
-gf_model_set(md,'to variables', vec V)
-ind_brick=gf_model_set(md,'add Laplacian brick', mesh_im mim, string varname[, int region])
-ind_brick=gf_model_set(md,'add generic elliptic brick', mesh_im mim, string varname[, int region])
-ind_brick=gf_model_set(md,'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname ]])
-ind_brick=gf_model_set(md,'add normal source term brick', mesh_im mim, string varname, string dataname, int region)
-ind_brick=gf_model_set(md,'add Dirichlet condition with multiplier', mesh_im mim, string varname, mult_description, int region[, string dataname ])
-ind_brick=gf_model_set(md,'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname ])
-ind_brick=gf_model_set(md,'add generalized Dirichlet condition with multiplier', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)
-ind_brick=gf_model_set(md,'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname)
-gf_model_set(md,'change penalization coeff', int ind_brick, scalar coeff)
-ind_brick=gf_model_set(md,'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])
-ind_brick=gf_model_set(md,'add Fourier Robin brick', mesh_im mim, string varname[, string dataname, int region)
-ind_brick=gf_model_set(md,'add constraint with penalization', string varname, scalar coeff, mat B, vec L)
-ind_brick=gf_model_set(md,'add constraint with multipliers, string varname, string multname, mat B, vec L)
-ind_brick=gf_model_set(md,'add explicit matrix', string varname1, string varname2, mat B[, int issymmetric[, int iscoercive]])
-ind_brick=gf_model_set(md,'add explicit rhs', string varname, vec L)
-gf_model_set(md,'set private matrix', int indbrick, mat B)
-gf_model_set(md,'set private rhs', int indbrick, vec L)
-gf_model_set(md,'disable bricks', ivec indbricks)
-gf_model_set(md,'unable bricks', ivec indbricks)
-ind_brick=gf_model_set(md,'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])
-ind_brick=gf_model_set(md,'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])
-ind_brick=gf_model_set(md,'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])
-ind_brick=gf_model_set(md,'add basic d on dt brick', mesh_im mim, string varnameU, string dataname_dt[, string dataname_rho[, int region]])
-ind_brick=gf_model_set(md,'add basic d2 on dt2 brick', mesh_im mim, string varnameU, string varnameV, string dataname_dt, string dataname_alpha[, string dataname_rho[, int region]])
-gf_model_set(md,'add theta method dispatcher', ivec bricks_indices, string theta)
-gf_model_set(md,'add midpoint dispatcher', ivec bricks_indices)
-gf_model_set(md,'velocity update for order two theta method', string varnameU, string datanameV, string dataname_dt, string dataname_theta)
-gf_model_set(md,'velocity update for Newmark scheme', int id2dt2_brick, string varnameU, string datanameV, string dataname_dt, string dataname_twobeta, string dataname_gamma)
-gf_model_set(md,'first iter')
-gf_model_set(md,'next iter')
-ind_brick=gf_model_set(md,'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, mat BN[, mat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]]])
-gf_model_set(md,'contact brick set BN', int indbrick, mat BN)
-gf_model_set(md,'contact brick set BT', int indbrick, mat BT)
-ind_brick=gf_model_set(md, 'add contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle, [, int symmetrized])
- </synopsis>
+ <synopsis>gf_model_set(model M, 'clear')</synopsis>
+ <synopsis>gf_model_set(model M, 'add fem variable', string name, mesh_fem mf[, int niter])</synopsis>
+ <synopsis>gf_model_set(model M, 'add variable', string name, int size[, int niter])</synopsis>
+ <synopsis>gf_model_set(model M, 'resize variable', string name, int size)</synopsis>
+ <synopsis>gf_model_set(model M, 'add multiplier', string name, mesh_fem mf, string primalname[, int niter])</synopsis>
+ <synopsis>gf_model_set(model M, 'add fem data', string name, mesh_fem mf[, int qdim[, int niter]])</synopsis>
+ <synopsis>gf_model_set(model M, 'add initialized fem data', string name, mesh_fem mf, vec V)</synopsis>
+ <synopsis>gf_model_set(model M, 'add data', string name, int size[, int niter])</synopsis>
+ <synopsis>gf_model_set(model M, 'add initialized data', string name, vec V)</synopsis>
+ <synopsis>gf_model_set(model M, 'variable', string name, vec V[, int niter])</synopsis>
+ <synopsis>gf_model_set(model M, 'to variables', vec V)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Laplacian brick', mesh_im mim, string varname[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add generic elliptic brick', mesh_im mim, string varname, string dataname[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal source term brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add generalized Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname[, mesh_fem mf_mult])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with multipliers', string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with given multipliers', string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add pointwise constraints with penalization', string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])</synopsis>
+ <synopsis>gf_model_set(model M, 'change penalization coeff', int ind_brick, scalar coeff)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Fourier Robin brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add basic nonlinear brick', mesh_im mim, string varname, string f, string dfdu[, string dataname, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add constraint with multipliers', string varname, string multname, spmat B, vec L)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add constraint with penalization', string varname, scalar coeff, spmat B, vec L)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add explicit matrix', string varname1, string varname2, spmat B[, int issymmetric[, int iscoercive]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add explicit rhs', string varname, vec L)</synopsis>
+ <synopsis>gf_model_set(model M, 'set private matrix', int indbrick, spmat B)</synopsis>
+ <synopsis>gf_model_set(model M, 'set private rhs', int indbrick, vec B)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add nonlinear elasticity brick', mesh_im mim, string varname, string constitutive_law, string dataname[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add elastoplasticity brick', mesh_im mim ,string projname, string varname, string datalambda, string datamu, string datathreshold, string datasigma[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add nonlinear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add bilaplacian brick', mesh_im mim, string varname, string dataname [, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Kirchhoff-Love plate brick', mesh_im mim, string varname, string dataname_D, string dataname_nu [, int region])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal derivative source term brick', mesh_im mim, string varname, string dataname, int region)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Kirchhoff-Love Neumann term brick', mesh_im mim, string varname, string dataname_M, string dataname_divM, int region)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region [, string dataname, int R_must_be_derivated])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region [, string dataname, int R_must_be_derivated])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add basic d on dt brick', mesh_im mim, string varnameU, string dataname_dt[, string dataname_rho[, int region]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add basic d2 on dt2 brick', mesh_im mim, string varnameU, string datanameV, string dataname_dt, string dataname_alpha,[, string dataname_rho[, int region]])</synopsis>
+ <synopsis>gf_model_set(model M, 'add theta method dispatcher', ivec bricks_indices, string theta)</synopsis>
+ <synopsis>gf_model_set(model M, 'add midpoint dispatcher', ivec bricks_indices)</synopsis>
+ <synopsis>gf_model_set(model M, 'velocity update for order two theta method', string varnameU, string datanameV, string dataname_dt, string dataname_theta)</synopsis>
+ <synopsis>gf_model_set(model M, 'velocity update for Newmark scheme', int id2dt2_brick, string varnameU, string datanameV, string dataname_dt, string dataname_twobeta, string dataname_alpha)</synopsis>
+ <synopsis>gf_model_set(model M, 'disable bricks', ivec bricks_indices)</synopsis>
+ <synopsis>gf_model_set(model M, 'enable bricks', ivec bricks_indices)</synopsis>
+ <synopsis>gf_model_set(model M, 'disable variable', string varname)</synopsis>
+ <synopsis>gf_model_set(model M, 'enable variable', string varname)</synopsis>
+ <synopsis>gf_model_set(model M, 'first iter')</synopsis>
+ <synopsis>gf_model_set(model M, 'next iter')</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, spmat BN[, spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])</synopsis>
+ <synopsis>gf_model_set(model M, 'contact brick set BN', int indbrick, spmat BN)</synopsis>
+ <synopsis>gf_model_set(model M, 'contact brick set BT', int indbrick, spmat BT)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add nodal contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[, int augmented_version])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add integral contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add penalized contact with rigid obstacle brick', mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff], int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add Nitsche contact with rigid obstacle brick', mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r, string dataname_friction_coeff, string dataname_lambda, string dataname_mu, int region)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add nodal contact between nonmatching meshes brick', mesh_im mim1[, mesh_im mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2, int augmented_version])</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add integral large sliding contact brick', mesh_im mim, string varname_u, string multname, string dataname_r, string dataname_fr, int rg)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add boundary to large sliding contact brick', int indbrick, mesh_im mim, string varname_u, string multname, int rg)</synopsis>
+ <synopsis>ind = gf_model_set(model M, 'add rigid obstacle to large sliding contact brick', int indbrick, string obs)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Modifies a model object.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_model_set(mds,'clear') Clear the model.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add fem variable', string name, MeshFem mf[,
- int niter]) Add a variable to the model linked to a MeshFem.
- <literal>name</literal> is the variable name and
- <literal>niter</literal> is the optional number of copy of the
- variable for time integration schemes.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add variable', string name, int size[, int
- niter]) Add a variable to the model of constant size.
- <literal>name</literal> is the variable name and
- <literal>niter</literal> is the optional number of copy of the
- variable for time integration schemes.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(md,'resize variable', string name, int
- size) : Resize a fixed size variable of the model. <literal>name</literal>
- is the variable name, <literal>size</literal> is the new
- fixed size.
- </para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add multiplier', string name, MeshFem mf,
- string primalname[, int niter]) Add a particular variable linked to a
- fem being a multiplier with respect to a primal variable. The dof will
- be filtered with the gmm::range_basis function applied on the terms of
- the model which link the multiplier and the primal variable. This in
- order to retain only linearly independant constraints on the primal
- variable. Optimized for boundary multipliers. niter is the number of
- version of the data stored, for time integration schemes.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add fem data', string name, MeshFem mf[, int
- qdim, int niter]) Add a data to the model linked to a MeshFem.
- <literal>name</literal> is the data name, <literal>qdim</literal> is
- the optional dimension of the data over the MeshFem and
- <literal>niter</literal> is the optional number of copy of the data
- for time integration schemes.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add initialized fem data', string name,
- MeshFem mf, vec V) Add a data to the model linked to a MeshFem.
- <literal>name</literal> is the data name. The data is initiakized with
- <literal>V</literal>. The data can be a scalar or vector field.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add data', string name, int size[, int niter])
- Add a data to the model of constant size. <literal>name</literal> is
- the data name and <literal>niter</literal> is the optional number of
- copy of the data for time integration schemes.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add initialized data', string name, V) Add a
- fixed size data to the model linked to a MeshFem.
- <literal>name</literal> is the data name, <literal>V</literal> is the
- value of the data.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'variable', string name, vec V[, int niter])
- Set the value of a variable or data.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'to variables', vec V) Set the value of the
- variables of the model with the vector <literal>V</literal>.
- Typically, the vector <literal>V</literal> results of the solve of the
- tangent linear system (usefull to solve your problem with you own
- solver).</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add Laplacian brick', mesh_im mim, string
- varname[, int region]) add a Laplacian term to the model relatively to
- the variable <literal>varname</literal>. If this is a vector valued
- variable, the Laplacian term is added componentwise.
- <literal>region</literal> is an optional mesh region on which the term
- is added. If it is not specified, it is added on the whole
- mesh.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add generic elliptic brick', mesh_im mim,
- string varname, string dataname[, int region]) add a generic elliptic
- term to the model relatively to the variable
- <literal>varname</literal>. The shape of the elliptic term depends
- both on the variable and the data. This corresponds to a term
- <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_model_set_eq1.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation> where <literal>a</literal> is the data and
- <literal>u</literal> the variable. The data can be a scalar, a matrix
- or an order four tensor. The variable can be vector valued or not. If
- the data is a scalar or a matrix and the variable is vector valued
- then the term is added componentwise. An order four tensor data is
- allowed for vector valued variable only. The data can be constant or
- describbed on a fem. Of course, when the data is a tensor describe on
- a finite element method (a tensor field) the data can be a huge
- vector. The components of the matrix/tensor have to be stored with the
- fortran order (columnwise) in the data vector (compatibility with
- blas). The symmetry of the given matrix/tensor is not verified (but
- assumed). If this is a vector valued variable, the Laplacian term is
- added componentwise. <literal>region</literal> is an optional mesh
- region on which the term is added. If it is not specified, it is added
- on the whole mesh.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add source term brick', mesh_im mim,
- string varname, string dataname[, int region]) add a source term to
- the model relatively to the variable <literal>varname</literal>. The
- source term is represented by the data <literal>dataname</literal>
- which could be constant or described on a fem.
- <literal>region</literal> is an optional mesh region on which the term
- is added. An additional optional data
- <literal>directdataname</literal> can be provided. The corresponding
- data vector will be directly added to the right hand side without
- assembly.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add normal source term brick', mesh_im
- mim, string varname, string dataname[, int region]) add a source term
- on the variable <literal>varname</literal> on a boundary
- <literal>region</literal>. The source term is represented by the data
- <literal>dataname</literal> which could be constant or described on a
- fem. A scalar product with the outward normal unit vector to the
- boundary is performed. The main aim of this brick is to represent a
- Neumann condition with a vector data without performing the scalar
- product with the normal as a pre-processing.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add Dirichlet condition with
- multipliers', mesh_im mim, string varname, mult_description, int
- region[, string dataname]) Add a Dirichlet condition on the variable
- <literal>varname</literal> and the mesh region
- <literal>region</literal>. This region should be a boundary. The
- Dirichlet condition is prescribed with a multiplier variable described
- by <literal>mult_description</literal>. If
- <literal>mult_description</literal> is a string this is assumed to be
- the variable name correpsonding to the multiplier (which should be
- first declared as a multiplier variable on the mesh region in the
- model). If it is a finite element method (mesh_fem object) then a
- multiplier variable will be added to the model and build on this
- finite element method (it will be restricted to the mesh region
- <literal>region</literal> and eventually some conflicting dofs with
- some other multiplier variables will be suppressed). If it is an
- integer, then a multiplier variable will be added to the model and
- build on a classical finite element of degree that integer.
- <literal>dataname</literal> is the optional right hand side of the
- Dirichlet condition. It could be constant or described on a fem;
- scalar or vector valued, depending on the variable on which the
- Dirichlet condition is prescribed. Return the brick index in the
- model.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add Dirichlet condition with
- penalization', mesh_im mim, string varname, scalar coeff, int region[,
- string dataname]) Add a Dirichlet condition on the variable
- <literal>varname</literal> and the mesh region
- <literal>region</literal>. This region should be a boundary. The
- Dirichlet condition is prescribed with penalization. The penalization
- coefficient is intially <literal>coeff</literal> and will be added to
- the data of the model. <literal>dataname</literal> is the optional
- right hand side of the Dirichlet condition. It could be constant or
- described on a fem; scalar or vector valued, depending on the variable
- on which the Dirichlet condition is prescribed. Return the brick index
- in the model.</para>
- </listitem>
-
- <listitem>
- <para>ind_brick=gf_model_set(md,'add generalized Dirichlet
- condition with multiplier', mesh_im mim, string varname,
- string multname | mesh_fem mf_mult | int degree, int region,
- string dataname, string Hname) : Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
- region <literal>region</literal>. This version is for vector
- field. It prescribes a condition $Hu = r$
- where <literal>H</literal> is a matrix field. The region
- should be a boundary. The Dirichlet condition is prescribed with a multiplier variable which can be either
- directly given by <literal>multname</literal> (should be first declared as a multiplier
- variable on the mesh region in the model) or added by the function and
- buld on the given finite element method <literal>mf_mult</literal> (it will be restricted to
- the mesh region <literal>region</literal> and eventually some conflicting dofs with some
- other multiplier variables will be suppressed) or added by the function and
- build on a standard finite element method of degree <literal>degree</literal>.
- <literal>dataname</literal> is the optional right hand side of the Dirichlet condition. It could be constant or
- described on a fem; scalar or vector valued, depending on the variable
- on which the Dirichlet condition is prescribed. <literal>Hname</literal> is the data
- corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
- or described on a scalar fem. Return the brick index in the model.</para>
- </listitem>
-
- <listitem>
- <para>ind_brick=gf_model_set(md,'add generalized Dirichlet
- condition with penalization', mesh_im mim, string varname,
- scalar coeff, int region, string dataname, string Hname) : Add
- a Dirichlet condition on the
- variable <literal>varname</literal> and the mesh
- region <literal>region</literal>. This version is for vector field.
- It prescribes a condition $Hu = r$ where <literal>H</literal>
- is a matrix field. The region should be a boundary. The Dirichlet
- condition is prescribed with penalization. The penalization coefficient
- is intially <literal>coeff</literal> and will be added to the data of
- the model. <literal>dataname</literal> is the optional
- right hand side of the Dirichlet condition. It could be constant or
- described on a fem; scalar or vector valued, depending on the variable
- on which the Dirichlet condition is prescribed. <literal>Hname</literal> is the data
- corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
- or described on a scalar fem. Return the brick index in the model.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'change penalization coeff', int ind_brick,
- scalar coeff) Change the penalization coefficient of a Dirichlet
- condition with penalization brick. If the brick is not of this kind,
- this function has an undefined behavior.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add Helmholtz brick', mesh_im mim, string
- varname, string dataname[, int region]) add a Helmholtz term to the
- model relatively to the variable <literal>varname</literal>.
- <literal>dataname</literal> should contain the wave number.
- <literal>region</literal> is an optional mesh region on which the term
- is added. If it is not specified, it is added on the whole
- mesh.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add Fourier Robin brick', mesh_im mim,
- string varname, string dataname, int region) add a Fourier-Robin term
- to the model relatively to the variable <literal>varname</literal>.
- this corresponds to a weak term of the form <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_model_set_eq2.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>. <phrase>dataname</phrase> should contain the
- parameter <literal>q</literal> of the Fourier-Robin condition.
- <literal>region</literal> is the mesh region on which the term is
- added.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add constraint with multipliers', string
- varname, string multname, mat B, vec L) Add an additional explicit
- constraint on the variable <literal>varname</literal> thank to a
- multiplier <literal>multname</literal> peviously added to the model
- (should be a fixed size variable). The constraint is
- <emphasis>BU=L</emphasis> with <literal>B</literal> being a
- rectangular sparse matrix. It is possible to change the constraint at
- any time whith the methods gf_model_set(mds,'set private matrix') and
- gf_model_set(mds,'set private rhs')</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add constraint with penalization',
- string varname, scalar coeff, mat B, vec L) Add an additional explicit
- penalized constraint on the variable <literal>varname</literal>. The
- constraint is BU=L with <literal>B</literal> being a rectangular
- sparse matrix. Be aware that <literal>B</literal> should not contain a
- palin row, otherwise the whole tangent matrix will be plain. It is
- possible to change the constraint at any time whith the methods
- gf_model_set(mds,'set private matrix') and gf_model_set(mds,'set
- private rhs'). The method gf_model_set(mds,'change penalization
- coeff') can be used.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add explicit matrix', string varname1,
- string varname2, mat B[, int issymmetric[, int iscoercive]]) Add a
- brick reprenting an explicit matrix to be added to the tangent linear
- system relatively to the variables 'varname1' and 'varname2'. The
- given matrix should have has many rows as the dimension of 'varname1'
- and as many columns as the dimension of 'varname2'. If the two
- variables are different and if <literal>issymmetric</literal> is set
- to 1 then the transpose of the matrix is also added to the tangent
- system (default is 0). set <literal>iscoercive</literal> to 1 if the
- term does not affect the coercivity of the tangent system (default is
- 0). The matrix can be changed by the command gf_model_set(mds,'set
- private matrix').</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add explicit rhs', string varname, vec
- L) Add a brick reprenting an explicit right hand side to be added to
- the right hand side of the tangent linear system relatively to the
- variable 'varname'. The given rhs should have the same size than the
- dimension of <literal>varname</literal>. The rhs can be changed by the
- command gf_model_set(mds,'set private rhs').</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'set private matrix', int indbrick, mat B) For
- some specific bricks having an internal sparse matrix (explicit
- bricks: 'constraint brick' and 'explicit matrix brick'), set this
- matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'set private rhs', int indbrick, vec B) For
- some specific bricks having an internal right hand side vector
- (explicit bricks: 'constraint brick' and 'explicit rhs brick'), set
- this rhs.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add isotropic linearized elasticity
- brick', mesh_im mim, string varname, string dataname_lambda, string
- dataname_mu[, int region]) add an isotropic linearized elasticity term
- to the model relatively to the variable <literal>varname</literal>.
- <literal>dataname_lambda</literal> and <literal>dataname_mu</literal>
- should contain the Lamé coefficients. <literal>region</literal> is an
- optional mesh region on which the term is added. If it is not
- specified, it is added on the whole mesh.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add linear incompressibility brick',
- mesh_im mim, string varname, string multname_pressure[, int region[,
- string dataname_coeff]]) add an linear incompressibility condition on
- <literal>variable</literal>. <literal>multname_pressure</literal> is a
- variable which represent the pressure. Be aware that an inf-sup
- condition between the finite element method describing the rpressure
- and the primal variable has to be satisfied. <literal>region</literal>
- is an optional mesh region on which the term is added. If it is not
- specified, it is added on the whole mesh.
- <literal>dataname_coeff</literal> is an optional penalization
- coefficient for nearly incompressible elasticity for instance. In this
- case, it is the inverse of the Lamé coefficient lambda.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add mass brick', mesh_im mim, string
- varname[, string dataname_rho[, int region]]) add mass term to the
- model relatively to the variable <literal>varname</literal>. If
- specified, the data <literal>dataname_rho</literal> should contain the
- density (1 if omitted). <literal>region</literal> is an optional mesh
- region on which the term is added. If it is not specified, it is added
- on the whole mesh.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add basic d on dt brick', mesh_im mim,
- string varnameU, string dataname_dt[, string dataname_rho[, int
- region]]) Add the standard discretization of a first order time
- derivative on <literal>varnameU</literal>. The parameter rho is the
- density which could be omitted (the defaul value is 1). This brick
- should be used in addition to a time dispatcher for the other
- terms.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'add basic d2 on dt2 brick', mesh_im mim,
- string varnameU, string datanameV, string dataname_dt, string
- dataname_alpha,[, string dataname_rho[, int region]]) Add the standard
- discretization of a second order time derivative on
- <literal>varnameU</literal>. <literal>datanameV</literal> is a data
- represented on the same finite element method as U which represents
- the time derivative of U. The parameter <literal>rho</literal> is the
- density which could be omitted (the defaul value is 1). This brick
- should be used in addition to a time dispatcher for the other terms.
- The time derivative <literal>v</literal> of the variable
- <literal>u</literal> is preferably computed as a post-traitement which
- depends on each scheme. The parameter
- <literal>dataname_alpha</literal> depends on the time integration
- scheme.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add theta method dispatcher', vec
- bricks_indices, string theta) Add a theta-method time dispatcher to a
- list of bricks. For instance, a matrix term <literal>K</literal> will
- be replaced by <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_model_set_eq3.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'add midpoint dispatcher', vec bricks_indices)
- Add a midpoint time dispatcher to a list of bricks. For instance, a
- nonlinear term K(U) will be replaced by <inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/gf_model_set_eq4.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation>.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'velocity update for order two theta method',
- string varnameU, string datanameV, string dataname_dt, string
- dataname_theta) Function which udpate the velocity
- v<superscript>n+1</superscript> after the computation of the
- displacement u<superscript>n+1</superscript> and before the next
- iteration. Specific for theta-method and when the velocity is included
- in the data of the model.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'velocity update for Newmark scheme', int
- id2dt2_brick, string varnameU, string datanameV, string dataname_dt,
- string dataname_twobeta, string dataname_alpha) Function which udpate
- the velocity v<superscript>n+1</superscript> after the computation of
- the displacement u<superscript>n+1</superscript> and before the next
- iteration. Specific for Newmark scheme and when the velocity is
- included in the data of the model. This version inverts the mass
- matrix by a conjugate gradient.</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'disable bricks', vec bricks_indices) Disable a
- brick (the brick will no longer participate to the building of the
- tangent linear system).</para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(mds,'unable bricks', vec bricks_indices) Unable a
- disabled brick.</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'first iter') To be executed before the
- first iteration of a time integration scheme</para>
- </listitem>
-
- <listitem>
- <para>ind = gf_model_set(mds,'next iter') To be executed at the end of
- each iteration of a time integration scheme.</para>
- </listitem>
-
- <listitem>
- <para>
- ind_brick=gf_model_set(md,'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, mat BN[, mat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int symmetrized]]]) :
- Add a contact with or without friction brick to the model.
- If U is the vector of degrees of freedom on which the unilateral constraint is applied,
- the matrix <literal>BN</literal> have to be such that this constraint is defined by
- <![CDATA[B_N U \le 0]]>. A friction condition can be considered by adding the three
- parameters <literal>multname_t</literal>, <literal>BT</literal> and <literal>dataname_friction_coeff</literal>. In this case,
- the tangential displacement is <![CDATA[B_T U]]> and the matrix <literal>BT</literal> should have as
- many rows as <literal>BN</literal> multiplied by <![CDATA[d-1]]> where <![CDATA[d]]> is the domain dimension.
- In this case also, <literal>dataname_friction_coeff</literal> is a data which represents the
- coefficient of friction. It can be a scalar or a vector representing a
- value on each contact condition. The unilateral constraint is prescribed thank to a multiplier
- <literal>multname_n</literal> whose dimension should be equal to the number of rows of
- <literal>BN</literal>. If a friction condition is added, it is prescribed with a
- multiplier <literal>multname_t</literal> whose dimension should be equal to the number
- of rows of <literal>BT</literal>. The augmentation parameter <literal>r</literal> should be chosen in a range of
- acceptabe values (see Getfem user documentation). <literal>dataname_gap</literal> is an
- optional parameter representing the initial gap. It can be a single value
- or a vector of value. <literal>dataname_alpha</literal> is an optional homogenization
- parameter for the augmentation parameter (see Getfem user documentation). The parameter <literal>symmetrized</literal> indicates
- that the symmetry of the tangent matrix will be kept or not (except for
- the part representing the coupling between contact and friction which cannot be symmetrized).
- </para>
- </listitem>
-
- <listitem>
- <para>gf_model_set(md,'contact brick set BN', int indbrick, mat BN) :
- Can be used to set the BN matrix of a basic contact/friction
- brick.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_model_set(model M, 'clear')</literal></para>
+
+ <para> Clear the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add fem variable', string name, mesh_fem mf[, int niter])</literal></para>
+
+ <para> Add a variable to the model linked to a mesh_fem. <literal>name</literal> is the variable
+ name and <literal>niter</literal> is the optional number of version of the data stored,
+ for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add variable', string name, int size[, int niter])</literal></para>
+
+ <para> Add a variable to the model of constant size. <literal>name</literal> is the variable
+ name and <literal>niter</literal> is the optional number of version of the data stored,
+ for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'resize variable', string name, int size)</literal></para>
+
+ <para> Resize a constant size variable of the model. <literal>name</literal> is the variable
+ name.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add multiplier', string name, mesh_fem mf, string primalname[, int niter])</literal></para>
+
+ <para> Add a particular variable linked to a fem being a multiplier with
+ respect to a primal variable. The dof will be filtered with the
+ <literal></literal>gmm::range_basis<literal></literal> function applied on the terms of the model
+ which link the multiplier and the primal variable. This in order to
+ retain only linearly independant constraints on the primal variable.
+ Optimized for boundary multipliers. <literal>niter</literal> is the optional number
+ of version of the data stored, for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add fem data', string name, mesh_fem mf[, int qdim[, int niter]])</literal></para>
+
+ <para> Add a data to the model linked to a mesh_fem. <literal>name</literal> is the data name,
+ <literal>qdim</literal> is the optional dimension of the data over the mesh_fem and
+ <literal>niter</literal> is the optional number of version of the data stored,
+ for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add initialized fem data', string name, mesh_fem mf, vec V)</literal></para>
+
+ <para> Add a data to the model linked to a mesh_fem. <literal>name</literal> is the data name.
+ The data is initiakized with <literal>V</literal>. The data can be a scalar or vector
+ field.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add data', string name, int size[, int niter])</literal></para>
+
+ <para> Add a data to the model of constant size. <literal>name</literal> is the data name
+ and <literal>niter</literal> is the optional number of version of the data stored,
+ for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add initialized data', string name, vec V)</literal></para>
+
+ <para> Add a fixed size data to the model linked to a mesh_fem.
+ <literal>name</literal> is the data name and <literal>V</literal> is the value of the data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'variable', string name, vec V[, int niter])</literal></para>
+
+ <para> Set the value of a variable or data. <literal>name</literal> is the data name
+ and <literal>niter</literal> is the optional number of version of the data stored,
+ for time integration schemes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'to variables', vec V)</literal></para>
+
+ <para> Set the value of the variables of the model with the vector <literal>V</literal>.
+ Typically, the vector <literal>V</literal> results of the solve of the tangent
+ linear system (useful to solve your problem with you own solver).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Laplacian brick', mesh_im mim, string varname[, int region])</literal></para>
+
+ <para> Add a Laplacian term to the model relatively to the variable <literal>varname</literal>
+ (in fact with a minus : <latex style="text"><![CDATA[-\text{div}(\nabla u)]]></latex>).
+ If this is a vector valued variable, the Laplacian term is added
+ componentwise. <literal>region</literal> is an optional mesh region on which the term
+ is added. If it is not specified, it is added on the whole mesh. Return
+ the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add generic elliptic brick', mesh_im mim, string varname, string dataname[, int region])</literal></para>
+
+ <para> Add a generic elliptic term to the model relatively to the variable <literal>varname</literal>.
+ The shape of the elliptic term depends both on the variable and the data.
+ This corresponds to a term
+ <latex style="text"><![CDATA[-\text{div}(a\nabla u)]]></latex>
+ where <latex style="text"><![CDATA[a]]></latex> is the data and <latex style="text"><![CDATA[u]]></latex> the variable. The data can be a scalar,
+ a matrix or an order four tensor. The variable can be vector valued or
+ not. If the data is a scalar or a matrix and the variable is vector
+ valued then the term is added componentwise. An order four tensor data
+ is allowed for vector valued variable only. The data can be constant or
+ describbed on a fem. Of course, when the data is a tensor describe on a
+ finite element method (a tensor field) the data can be a huge vector.
+ The components of the matrix/tensor have to be stored with the fortran
+ order (columnwise) in the data vector (compatibility with blas). The
+ symmetry of the given matrix/tensor is not verified (but assumed). If
+ this is a vector valued variable, the elliptic term is added
+ componentwise. <literal>region</literal> is an optional mesh region on which the term is
+ added. If it is not specified, it is added on the whole mesh. Return the
+ brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add source term brick', mesh_im mim, string varname, string dataname[, int region[, string directdataname]])</literal></para>
+
+ <para> Add a source term to the model relatively to the variable <literal>varname</literal>.
+ The source term is represented by the data <literal>dataname</literal> which could be
+ constant or described on a fem. <literal>region</literal> is an optional mesh region
+ on which the term is added. An additional optional data <literal>directdataname</literal>
+ can be provided. The corresponding data vector will be directly added
+ to the right hand side without assembly. Return the brick index in the
+ model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal source term brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+ <para> Add a source term on the variable <literal>varname</literal> on a boundary <literal>region</literal>.
+ This region should be a boundary. The source term is represented by the
+ data <literal>dataname</literal> which could be constant or described on a fem. A scalar
+ product with the outward normal unit vector to the boundary is performed.
+ The main aim of this brick is to represent a Neumann condition with a
+ vector data without performing the scalar product with the normal as a
+ pre-processing. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</literal></para>
+
+ <para> Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable described by
+ <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region <literal>region</literal> and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. <literal>dataname</literal> is the optional right hand side of the
+ Dirichlet condition. It could be constant or described on a fem; scalar
+ or vector valued, depending on the variable on which the Dirichlet
+ condition is prescribed. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</literal></para>
+
+ <para> Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is initially <literal>coeff</literal> and will be added to the data of the model.
+ <literal>dataname</literal> is the optional right hand side of the Dirichlet condition.
+ It could be constant or described on a fem; scalar or vector valued,
+ depending on the variable on which the Dirichlet condition is prescribed.
+ <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region[, string dataname])</literal></para>
+
+ <para> Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable described by
+ <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region <literal>region</literal> and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. <literal>dataname</literal> is the optional right hand side of the
+ Dirichlet condition. It could be constant or described on a fem; scalar
+ or vector valued, depending on the variable on which the Dirichlet
+ condition is prescribed (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region[, string dataname, mesh_fem mf_mult])</literal></para>
+
+ <para> Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is initially <literal>coeff</literal> and will be added to the data of the model.
+ <literal>dataname</literal> is the optional right hand side of the Dirichlet condition.
+ It could be constant or described on a fem; scalar or vector valued,
+ depending on the variable on which the Dirichlet condition is prescribed
+ (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add generalized Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region, string dataname, string Hname)</literal></para>
+
+ <para> Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This version is for vector field.
+ It prescribes a condition <latex style="text"><![CDATA[Hu = r]]></latex>
+ where <literal>H</literal> is a matrix field. The region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable described by
+ <literal>mult_description</literal>. If <literal>mult_description</literal> is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region <literal>region</literal> and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. <literal>dataname</literal> is the right hand side of the
+ Dirichlet condition. It could be constant or described on a fem; scalar
+ or vector valued, depending on the variable on which the Dirichlet
+ condition is prescribed. <literal>Hname</literal> is the data
+ corresponding to the matrix field <literal>H</literal>.
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add generalized Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region, string dataname, string Hname[, mesh_fem mf_mult])</literal></para>
+
+ <para> Add a Dirichlet condition on the variable <literal>varname</literal> and the mesh
+ region <literal>region</literal>. This version is for vector field.
+ It prescribes a condition <latex style="text"><![CDATA[Hu = r]]></latex>
+ where <literal>H</literal> is a matrix field.
+ The region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is intially <literal>coeff</literal> and will be added to the data of the model.
+ <literal>dataname</literal> is the right hand side of the Dirichlet condition.
+ It could be constant or described on a fem; scalar or vector valued,
+ depending on the variable on which the Dirichlet condition is prescribed.
+ <literal>Hname</literal> is the data
+ corresponding to the matrix field <literal>H</literal>. It has to be a constant matrix
+ or described on a scalar fem.
+ <literal>mf_mult</literal> is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with multipliers', string varname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+ <para> Add some pointwise constraints on the variable <literal>varname</literal> using
+ multiplier. The multiplier variable is automatically added to the model.
+ The conditions are prescribed on a set of points given in the data
+ <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with given multipliers', string varname, string multname, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+ <para> Add some pointwise constraints on the variable <literal>varname</literal> using a given
+ multiplier <literal>multname</literal>.
+ The conditions are prescribed on a set of points given in the data
+ <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+ of the mesh.
+ The multiplier variable should be a fixed size variable of size the
+ number of points.
+ If the variable represents a vector field, one has to give the data
+ <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add pointwise constraints with penalization', string varname, scalar coeff, string dataname_pt[, string dataname_unitv] [, string dataname_val])</literal></para>
+
+ <para> Add some pointwise constraints on the variable <literal>varname</literal> thanks to
+ a penalization. The penalization coefficient is initially
+ <literal>penalization_coeff</literal> and will be added to the data of the model.
+ The conditions are prescribed on a set of points given in the data
+ <literal>dataname_pt</literal> whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, one has to give the data
+ <literal>dataname_unitv</literal> which represents a vector of dimension the number of
+ points times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data <literal>dataname_val</literal> is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ Returns the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'change penalization coeff', int ind_brick, scalar coeff)</literal></para>
+
+ <para> Change the penalization coefficient of a Dirichlet condition with
+ penalization brick. If the brick is not of this kind, this
+ function has an undefined behavior.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Helmholtz brick', mesh_im mim, string varname, string dataname[, int region])</literal></para>
+
+ <para> Add a Helmholtz term to the model relatively to the variable <literal>varname</literal>.
+ <literal>dataname</literal> should contain the wave number. <literal>region</literal> is an optional mesh
+ region on which the term is added. If it is not specified, it is added
+ on the whole mesh. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Fourier Robin brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+ <para> Add a Fourier-Robin term to the model relatively to the variable
+ <literal>varname</literal>. This corresponds to a weak term of the form
+ <latex style="text"><![CDATA[\int (qu).v]]></latex>. <literal>dataname</literal>
+ should contain the parameter <latex style="text"><![CDATA[q]]></latex> of
+ the Fourier-Robin condition. <literal>region</literal> is the mesh region on which
+ the term is added. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add basic nonlinear brick', mesh_im mim, string varname, string f, string dfdu[, string dataname, int region])</literal></para>
+
+ <para> Add a brick representing a scalar term <latex style="text"><![CDATA[f(u)]]></latex> to the left-hand
+ side of the model. In the weak form, one adds <latex style="text"><![CDATA[+\int f(u)v]]></latex>.
+ The function <latex style="text"><![CDATA[f]]></latex> may optionally depend on <latex style="text"><![CDATA[\lambda]]></latex>, i.e.,
+ <latex style="text"><![CDATA[f(u)=f(u,\lambda)]]></latex>.
+ <literal>f</literal> and <literal>dfdu</literal> should contain the expressions for
+ <latex style="text"><![CDATA[f(u)]]></latex> and <latex style="text"><![CDATA[\frac{df}{du}(u)]]></latex>, respectively.
+ <literal>dataname</literal> represents the optional real scalar parameter <latex style="text"><![CDATA[\lambda]]></latex>
+ in the model. <literal>region</literal> is an optional mesh region on which the term is
+ added. If it is not specified, the term is added on the whole mesh.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add constraint with multipliers', string varname, string multname, spmat B, vec L)</literal></para>
+
+ <para> Add an additional explicit constraint on the variable <literal>varname</literal> thank to
+ a multiplier <literal>multname</literal> peviously added to the model (should be a fixed
+ size variable). The constraint is <latex style="text"><![CDATA[BU=L]]></latex>
+ with <literal>B</literal> being a rectangular sparse matrix. It is possible to change
+ the constraint at any time whith the methods gf_model_set(model M, 'set private matrix')
+ and gf_model_set(model M, 'set private rhs'). Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add constraint with penalization', string varname, scalar coeff, spmat B, vec L)</literal></para>
+
+ <para> Add an additional explicit penalized constraint on the variable <literal>varname</literal>.
+ The constraint is :math<literal>BU=L</literal> with <literal>B</literal> being a rectangular sparse matrix.
+ Be aware that <literal>B</literal> should not contain a palin row, otherwise the whole
+ tangent matrix will be plain. It is possible to change the constraint
+ at any time whith the methods gf_model_set(model M, 'set private matrix')
+ and gf_model_set(model M, 'set private rhs'). The method
+ gf_model_set(model M, 'change penalization coeff') can be used. Return the brick
+ index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add explicit matrix', string varname1, string varname2, spmat B[, int issymmetric[, int iscoercive]])</literal></para>
+
+ <para> Add a brick representing an explicit matrix to be added to the tangent
+ linear system relatively to the variables <literal>varname1</literal> and <literal>varname2</literal>.
+ The given matrix should have has many rows as the dimension of
+ <literal>varname1</literal> and as many columns as the dimension of <literal>varname2</literal>.
+ If the two variables are different and if <literal>issymmetric</literal> is set to 1
+ then the transpose of the matrix is also added to the tangent system
+ (default is 0). Set <literal>iscoercive</literal> to 1 if the term does not affect the
+ coercivity of the tangent system (default is 0). The matrix can be
+ changed by the command gf_model_set(model M, 'set private matrix'). Return the
+ brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add explicit rhs', string varname, vec L)</literal></para>
+
+ <para> Add a brick representing an explicit right hand side to be added to
+ the right hand side of the tangent linear system relatively to the
+ variable <literal>varname</literal>. The given rhs should have the same size than the
+ dimension of <literal>varname</literal>. The rhs can be changed by the command
+ gf_model_set(model M, 'set private rhs'). Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'set private matrix', int indbrick, spmat B)</literal></para>
+
+ <para> For some specific bricks having an internal sparse matrix
+ (explicit bricks: 'constraint brick' and 'explicit matrix brick'),
+ set this matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'set private rhs', int indbrick, vec B)</literal></para>
+
+ <para> For some specific bricks having an internal right hand side vector
+ (explicit bricks: 'constraint brick' and 'explicit rhs brick'),
+ set this rhs.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add isotropic linearized elasticity brick', mesh_im mim, string varname, string dataname_lambda, string dataname_mu[, int region])</literal></para>
+
+ <para> Add an isotropic linearized elasticity term to the model relatively to
+ the variable <literal>varname</literal>. <literal>dataname_lambda</literal> and <literal>dataname_mu</literal> should
+ contain the Lame coefficients. <literal>region</literal> is an optional mesh region
+ on which the term is added. If it is not specified, it is added
+ on the whole mesh. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add linear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region[, string dataname_coeff]])</literal></para>
+
+ <para> Add an linear incompressibility condition on <literal>variable</literal>. <literal>multname_pressure</literal>
+ is a variable which represent the pressure. Be aware that an inf-sup
+ condition between the finite element method describing the pressure and the
+ primal variable has to be satisfied. <literal>region</literal> is an optional mesh region on
+ which the term is added. If it is not specified, it is added on the whole mesh.
+ <literal>dataname_coeff</literal> is an optional penalization coefficient for nearly
+ incompressible elasticity for instance. In this case, it is the inverse
+ of the Lame coefficient <latex style="text"><![CDATA[\lambda]]></latex>. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add nonlinear elasticity brick', mesh_im mim, string varname, string constitutive_law, string dataname[, int region])</literal></para>
+
+ <para> Add a nonlinear elasticity term to the model relatively to the
+ variable <literal>varname</literal>. <literal>lawname</literal> is the constitutive law which
+ could be 'SaintVenant Kirchhoff', 'Mooney Rivlin', 'Ciarlet Geymonat'
+ or 'generalized Blatz Ko'.
+ IMPORTANT : if the variable is defined on a 2D mesh, the plane strain
+ approximation is automatically used.
+ <literal>dataname</literal> is a vector of parameters for the constitutive law. Its length
+ depends on the law. It could be a short vector of constant values or a
+ vector field described on a finite element method for variable
+ coefficients. <literal>region</literal> is an optional mesh region on which the term
+ is added. If it is not specified, it is added on the whole mesh. Return the
+ brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add elastoplasticity brick', mesh_im mim ,string projname, string varname, string datalambda, string datamu, string datathreshold, string datasigma[, int region])</literal></para>
+
+ <para> Add a nonlinear elastoplastic term to the model relatively to the
+ variable <literal>varname</literal>, in small deformations, for an isotropic material
+ and for a quasistatic model. <literal>projname</literal> is the type of projection that
+ we want to use. For the moment, only the Von Mises projection is
+ computing that we could entering 'VM' or 'Von Mises'.
+ <literal>datasigma</literal> is the variable representing the constraints on the material.
+ Be carefull that <literal>varname</literal> and <literal>datasigma</literal> are composed of two iterates
+ for the time scheme needed for the Newton algorithm used.
+ Moreover, the finite element method on which <literal>varname</literal> is described
+ is an K ordered mesh_fem, the <literal>datasigma</literal> one have to be at least
+ an K-1 ordered mesh_fem.
+ <literal>datalambda</literal> and <literal>datamu</literal> are the Lame coefficients of the studied
+ material.
+ <literal>datathreshold</literal> is the plasticity threshold of the material.
+ The three last variable could be constants or described on the
+ same finite element method.
+ <literal>region</literal> is an optional mesh region on which the term is added.
+ If it is not specified, it is added on the whole mesh.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add nonlinear incompressibility brick', mesh_im mim, string varname, string multname_pressure[, int region])</literal></para>
+
+ <para> Add an nonlinear incompressibility condition on <literal>variable</literal> (for large
+ strain elasticity). <literal>multname_pressure</literal>
+ is a variable which represent the pressure. Be aware that an inf-sup
+ condition between the finite element method describing the pressure and the
+ primal variable has to be satisfied. <literal>region</literal> is an optional mesh region on
+ which the term is added. If it is not specified, it is added on the
+ whole mesh. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add bilaplacian brick', mesh_im mim, string varname, string dataname [, int region])</literal></para>
+
+ <para> Add a bilaplacian brick on the variable
+ <literal>varname</literal> and on the mesh region <literal>region</literal>.
+ This represent a term <latex style="text"><![CDATA[\Delta(D \Delta u)]]></latex>.
+ where <latex style="text"><![CDATA[D(x)]]></latex> is a coefficient determined by <literal>dataname</literal> which
+ could be constant or described on a f.e.m. The corresponding weak form
+ is <latex style="text"><![CDATA[\int D(x)\Delta u(x) \Delta v(x) dx]]></latex>.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Kirchhoff-Love plate brick', mesh_im mim, string varname, string dataname_D, string dataname_nu [, int region])</literal></para>
+
+ <para> Add a bilaplacian brick on the variable
+ <literal>varname</literal> and on the mesh region <literal>region</literal>.
+ This represent a term <latex style="text"><![CDATA[\Delta(D \Delta u)]]></latex> where <latex style="text"><![CDATA[D(x)]]></latex>
+ is a the flexion modulus determined by <literal>dataname_D</literal>. The term is
+ integrated by part following a Kirchhoff-Love plate model
+ with <literal>dataname_nu</literal> the poisson ratio.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal derivative source term brick', mesh_im mim, string varname, string dataname, int region)</literal></para>
+
+ <para> Add a normal derivative source term brick
+ <latex style="text"><![CDATA[F = \int b.\partial_n v]]></latex> on the variable <literal>varname</literal> and the
+ mesh region <literal>region</literal>.
+
+ Update the right hand side of the linear system.
+ <literal>dataname</literal> represents <literal>b</literal> and <literal>varname</literal> represents <literal>v</literal>.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Kirchhoff-Love Neumann term brick', mesh_im mim, string varname, string dataname_M, string dataname_divM, int region)</literal></para>
+
+ <para> Add a Neumann term brick for Kirchhoff-Love model
+ on the variable <literal>varname</literal> and the mesh region <literal>region</literal>.
+ <literal>dataname_M</literal> represents the bending moment tensor and <literal>dataname_divM</literal>
+ its divergence.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with multipliers', mesh_im mim, string varname, mult_description, int region [, string dataname, int R_must_be_derivated])</literal></para>
+
+ <para> Add a Dirichlet condition on the normal derivative of the variable
+ <literal>varname</literal> and on the mesh region <literal>region</literal> (which should be a boundary.
+ The general form is
+ <latex style="text"><![CDATA[\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v]]></latex>
+ where <latex style="text"><![CDATA[r(x)]]></latex> is
+ the right hand side for the Dirichlet condition (0 for
+ homogeneous conditions) and <latex style="text"><![CDATA[v]]></latex> is in a space of multipliers
+ defined by <literal>mult_description</literal>.
+ If <literal>mult_description</literal> is a string this is assumed
+ to be the variable name corresponding to the multiplier (which should be
+ first declared as a multiplier variable on the mesh region in the model).
+ If it is a finite element method (mesh_fem object) then a multiplier
+ variable will be added to the model and build on this finite element
+ method (it will be restricted to the mesh region <literal>region</literal> and eventually
+ some conflicting dofs with some other multiplier variables will be
+ suppressed). If it is an integer, then a multiplier variable will be
+ added to the model and build on a classical finite element of degree
+ that integer. <literal>dataname</literal> is an optional parameter which represents
+ the right hand side of the Dirichlet condition.
+ If <literal>R_must_be_derivated</literal> is set to <literal>true</literal> then the normal
+ derivative of <literal>dataname</literal> is considered.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add normal derivative Dirichlet condition with penalization', mesh_im mim, string varname, scalar coeff, int region [, string dataname, int R_must_be_derivated])</literal></para>
+
+ <para> Add a Dirichlet condition on the normal derivative of the variable
+ <literal>varname</literal> and on the mesh region <literal>region</literal> (which should be a boundary.
+ The general form is
+ <latex style="text"><![CDATA[\int \partial_n u(x)v(x) = \int r(x)v(x) \forall v]]></latex>
+ where <latex style="text"><![CDATA[r(x)]]></latex> is
+ the right hand side for the Dirichlet condition (0 for
+ homogeneous conditions).
+ The penalization coefficient
+ is initially <literal>coeff</literal> and will be added to the data of the model.
+ It can be changed with the command gf_model_set(model M, 'change penalization coeff').
+ <literal>dataname</literal> is an optional parameter which represents
+ the right hand side of the Dirichlet condition.
+ If <literal>R_must_be_derivated</literal> is set to <literal>true</literal> then the normal
+ derivative of <literal>dataname</literal> is considered.
+ Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add mass brick', mesh_im mim, string varname[, string dataname_rho[, int region]])</literal></para>
+
+ <para> Add mass term to the model relatively to the variable <literal>varname</literal>.
+ If specified, the data <literal>dataname_rho</literal> should contain the
+ density (1 if omitted). <literal>region</literal> is an optional mesh region on
+ which the term is added. If it is not specified, it
+ is added on the whole mesh. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add basic d on dt brick', mesh_im mim, string varnameU, string dataname_dt[, string dataname_rho[, int region]])</literal></para>
+
+ <para> Add the standard discretization of a first order time derivative on
+ <literal>varnameU</literal>. The parameter <literal>dataname_rho</literal> is the density which could
+ be omitted (the defaul value is 1). This brick should be used in
+ addition to a time dispatcher for the other terms. Return the brick
+ index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add basic d2 on dt2 brick', mesh_im mim, string varnameU, string datanameV, string dataname_dt, string dataname_alpha,[, string dataname_rho[, int region]])</literal></para>
+
+ <para> Add the standard discretization of a second order time derivative
+ on <literal>varnameU</literal>. <literal>datanameV</literal> is a data represented on the same finite
+ element method as U which represents the time derivative of U. The
+ parameter <literal>dataname_rho</literal> is the density which could be omitted (the defaul
+ value is 1). This brick should be used in addition to a time dispatcher for
+ the other terms. The time derivative <latex style="text"><![CDATA[v]]></latex> of the
+ variable <latex style="text"><![CDATA[u]]></latex> is preferably computed as a
+ post-traitement which depends on each scheme. The parameter <literal>dataname_alpha</literal>
+ depends on the time integration scheme. Return the brick index in the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add theta method dispatcher', ivec bricks_indices, string theta)</literal></para>
+
+ <para> Add a theta-method time dispatcher to a list of bricks. For instance,
+ a matrix term <latex style="text"><![CDATA[K]]></latex> will be replaced by
+ <latex style="text"><![CDATA[\theta K U^{n+1} + (1-\theta) K U^{n}]]></latex>.
- <listitem>
- <para>gf_model_set(md,'contact brick set BT', int indbrick, mat BT) :
- Can be used to set the BT matrix of a basic contact with
- friction brick.</para>
- </listitem>
-
- <listitem>
- <para>
- ind_brick=gf_model_set(md, 'add contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle, [, int symmetrized]) :
- Add a contact with or without friction condition with a rigid obstacle
- to the model. The condition is applied on the variable <literal>varname_u</literal>
- on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
- be described with the string `obstacle` being a signed distance to
- the obstacle. This string should be an expression where the coordinates
- are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
- obstacle correspond to <![CDATA[z <= 0]]>, the corresponding signed distance will
- be simply 'z'. <literal>multname_n</literal> should be a fixed size variable whose size is
- the number of degrees of freedom on boundary <literal>region</literal>. It represent the
- contact equivalent nodal forces. In order to add a friction condition
- one has to add the <literal>multname_t</literal> and <literal>dataname_friction_coeff</literal> parameters.
- <literal>multname_t</literal> should be a fixed size variable whose size is
- the number of degrees of freedom on boundary <literal>region</literal> multiplied by <![CDATA[d-1]]>
- where <![CDATA[d]]> is the domain dimension. It represent the friction equivalent nodal forces.
- The augmentation parameter <literal>r</literal> should be chosen in a
- range of acceptabe values (close to the Young modulus of the elastic
- body, see Getfem user documentation). <literal>dataname_friction_coeff</literal> is
- the friction coefficient. It could be a scalar or a vector of values
- representing the friction coefficient on each contact node. The
- parameter <literal>symmetrized</literal> indicates that the symmetry of the tangent
- matrix will be kept or not. Basically, this brick compute the matrix BN
- and the vectors gap and alpha and call the basic contact brick.
- </para>
- </listitem>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'add midpoint dispatcher', ivec bricks_indices)</literal></para>
+
+ <para> Add a midpoint time dispatcher to a list of bricks. For instance, a
+ nonlinear term <latex style="text"><![CDATA[K(U)]]></latex> will be replaced by
+ <latex style="text"><![CDATA[K((U^{n+1} + U^{n})/2)]]></latex>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'velocity update for order two theta method', string varnameU, string datanameV, string dataname_dt, string dataname_theta)</literal></para>
+
+ <para> Function which udpate the velocity <latex style="text"><![CDATA[v^{n+1}]]></latex> after
+ the computation of the displacement <latex style="text"><![CDATA[u^{n+1}]]></latex> and
+ before the next iteration. Specific for theta-method and when the velocity is
+ included in the data of the model.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'velocity update for Newmark scheme', int id2dt2_brick, string varnameU, string datanameV, string dataname_dt, string dataname_twobeta, string dataname_alpha)</literal></para>
+
+ <para> Function which udpate the velocity
+ <latex style="text"><![CDATA[v^{n+1}]]></latex> after
+ the computation of the displacement
+ <latex style="text"><![CDATA[u^{n+1}]]></latex> and
+ before the next iteration. Specific for Newmark scheme
+ and when the velocity is
+ included in the data of the model.*
+ This version inverts the mass matrix by a
+ conjugate gradient.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'disable bricks', ivec bricks_indices)</literal></para>
+
+ <para> Disable a brick (the brick will no longer participate to the
+ building of the tangent linear system).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'enable bricks', ivec bricks_indices)</literal></para>
+
+ <para> Enable a disabled brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'disable variable', string varname)</literal></para>
+
+ <para> Disable a variable for a solve. The next solve will operate only on
+ the remaining variables. This allows to solve separately different
+ parts of a model. If there is a strong coupling of the variables,
+ a fixed point strategy can the be used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'enable variable', string varname)</literal></para>
+
+ <para> Enable a disabled variable.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'first iter')</literal></para>
+
+ <para> To be executed before the first iteration of a time integration
+ scheme.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'next iter')</literal></para>
+
+ <para> To be executed at the end of each iteration of a time
+ integration scheme.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add basic contact brick', string varname_u, string multname_n[, string multname_t], string dataname_r, spmat BN[, spmat BT, string dataname_friction_coeff][, string dataname_gap[, string dataname_alpha[, int augmented_version]])</literal></para>
+
+ <para>
+ Add a contact with or without friction brick to the model.
+ If U is the vector
+ of degrees of freedom on which the unilateral constraint is applied,
+ the matrix <literal>BN</literal> have to be such that this constraint is defined by
+ <latex style="text"><![CDATA[B_N U \le 0]]></latex>. A friction condition can be considered by adding
+ the three parameters <literal>multname_t</literal>, <literal>BT</literal> and <literal>dataname_friction_coeff</literal>.
+ In this case, the tangential displacement is <latex style="text"><![CDATA[B_T U]]></latex> and
+ the matrix <literal>BT</literal> should have as many rows as <literal>BN</literal> multiplied by
+ <latex style="text"><![CDATA[d-1]]></latex> where <latex style="text"><![CDATA[d]]></latex> is the domain dimension.
+ In this case also, <literal>dataname_friction_coeff</literal> is a data which represents
+ the coefficient of friction. It can be a scalar or a vector representing a
+ value on each contact condition. The unilateral constraint is prescribed
+ thank to a multiplier
+ <literal>multname_n</literal> whose dimension should be equal to the number of rows of
+ <literal>BN</literal>. If a friction condition is added, it is prescribed with a
+ multiplier <literal>multname_t</literal> whose dimension should be equal to the number
+ of rows of <literal>BT</literal>. The augmentation parameter <literal>r</literal> should be chosen in
+ a range of
+ acceptabe values (see Getfem user documentation). <literal>dataname_gap</literal> is an
+ optional parameter representing the initial gap. It can be a single value
+ or a vector of value. <literal>dataname_alpha</literal> is an optional homogenization
+ parameter for the augmentation parameter
+ (see Getfem user documentation). The parameter <literal>augmented_version</literal>
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction), 3 for the symmetric
+ one with an additional term, 4 for the new unsymmetric method,
+ 5 for the new unsymmetric method with De Saxce projection.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'contact brick set BN', int indbrick, spmat BN)</literal></para>
+
+ <para> Can be used to set the BN matrix of a basic contact/friction brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_model_set(model M, 'contact brick set BT', int indbrick, spmat BT)</literal></para>
+
+ <para> Can be used to set the BT matrix of a basic contact with
+ friction brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add nodal contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname_n[, string multname_t], string dataname_r[, string dataname_friction_coeff], int region, string obstacle[, int augmented_version])</literal></para>
+
+ <para>
+ Add a contact with or without friction condition with a rigid obstacle
+ to the model. The condition is applied on the variable <literal>varname_u</literal>
+ on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+ be described with the string <literal>obstacle</literal> being a signed distance to
+ the obstacle. This string should be an expression where the coordinates
+ are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+ obstacle correspond to <latex style="text"><![CDATA[z \le 0]]></latex>, the corresponding signed distance
+ will be simply "z". <literal>multname_n</literal> should be a fixed size variable whose size
+ is the number of degrees of freedom on boundary <literal>region</literal>. It represents the
+ contact equivalent nodal forces. In order to add a friction condition
+ one has to add the <literal>multname_t</literal> and <literal>dataname_friction_coeff</literal> parameters.
+ <literal>multname_t</literal> should be a fixed size variable whose size is
+ the number of degrees of freedom on boundary <literal>region</literal> multiplied by
+ <latex style="text"><![CDATA[d-1]]></latex> where <latex style="text"><![CDATA[d]]></latex> is the domain dimension. It represents
+ the friction equivalent nodal forces.
+ The augmentation parameter <literal>r</literal> should be chosen in a
+ range of acceptabe values (close to the Young modulus of the elastic
+ body, see Getfem user documentation). <literal>dataname_friction_coeff</literal> is
+ the friction coefficient. It could be a scalar or a vector of values
+ representing the friction coefficient on each contact node.
+ The parameter <literal>augmented_version</literal>
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
+ Basically, this brick compute the matrix BN
+ and the vectors gap and alpha and calls the basic contact brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add integral contact with rigid obstacle brick', mesh_im mim, string varname_u, string multname, string dataname_obstacle, string dataname_r [, string dataname_friction_coeff], int region [, int option [, string dataname_alpha [, string dataname_wt [, string dataname_gamma [, string dataname_vt]]]]])</literal></para>
+
+ <para>
+ Add a contact with or without friction condition with a rigid obstacle
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of the
+ Newton iterations should be more or less independent of the mesh size.
+ The condition is applied on the variable <literal>varname_u</literal>
+ on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+ be described with the data <literal>dataname_obstacle</literal> being a signed distance
+ to the obstacle (interpolated on a finite element method).
+ <literal>multname</literal> should be a fem variable representing the contact stress.
+ An inf-sup condition between <literal>multname</literal> and <literal>varname_u</literal> is required.
+ The augmentation parameter <literal>dataname_r</literal> should be chosen in a
+ range of acceptable values. <literal>dataname_friction_coeff</literal> is the friction
+ coefficient which could be constant or defined on a finite element
+ method.
+ Possible values for <literal>option</literal> is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ <literal>dataname_alpha</literal> and <literal>dataname_wt</literal> are optional parameters to solve
+ evolutionary friction problems. <literal>dataname_gamma</literal> and <literal>dataname_vt</literal>
+ represent optional data for adding a parameter-dependent sliding
+ velocity to the friction condition.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add penalized contact with rigid obstacle brick', mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r [, string dataname_coeff,] int region [, int option, string dataname_lambda, [, string dataname_alpha [, string dataname_wt]]])</literal></para>
+
+ <para>
+ Adds a penalized contact with or without friction condition with a
+ rigid obstacle to the model.
+ The condition is applied on the variable <literal>varname_u</literal>
+ on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+ be described with the data <literal>dataname_obstacle</literal> being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ The penalization parameter <literal>dataname_r</literal> should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ <literal>dataname_lambda</literal> is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add Nitsche contact with rigid obstacle brick', mesh_im mim, string varname_u, string dataname_obstacle, string dataname_r, string dataname_friction_coeff, string dataname_lambda, string dataname_mu, int region)</literal></para>
+
+ <para>
+ Add a contact with friction condition with a rigid obstacle
+ to the model with Nitsche strategy (no multiplier) in an integral way.
+ This is an experimental brick, which works only for linear homogeneous
+ isotropic elasticity.
+ The condition is applied on the variable <literal>varname_u</literal>
+ on the boundary corresponding to <literal>region</literal>. The rigid obstacle should
+ be described with the data <literal>dataname_obstacle</literal> being a signed distance
+ to the obstacle (interpolated on a finite element method).
+ The Nitsche parameter <literal>dataname_r</literal> should be chosen in a
+ range of acceptable values. <literal>dataname_friction_coeff</literal> is the friction
+ coefficient which could be constant or defined on a finite element
+ method. <literal>dataname_lambda</literal> and <literal>dataname_mu</literal> are the Lame coefficients.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add nodal contact between nonmatching meshes brick', mesh_im mim1[, mesh_im mim2], string varname_u1[, string varname_u2], string multname_n[, string multname_t], string dataname_r[, string dataname_fr], int rg1, int rg2[, int slave1, int slave2, int augmented_version])</literal></para>
+
+ <para>
+ Add a contact with or without friction condition between two faces of
+ one or two elastic bodies. The condition is applied on the variable
+ <literal>varname_u1</literal> or the variables <literal>varname_u1</literal> and <literal>varname_u2</literal> depending
+ if a single or two distinct displacement fields are given. Integers
+ <literal>rg1</literal> and <literal>rg2</literal> represent the regions expected to come in contact with
+ each other. In the single displacement variable case the regions defined
+ in both <literal>rg1</literal> and <literal>rg2</literal> refer to the variable <literal>varname_u1</literal>. In the case
+ of two displacement variables, <literal>rg1</literal> refers to <literal>varname_u1</literal> and <literal>rg2</literal>
+ refers to <literal>varname_u2</literal>. <literal>multname_n</literal> should be a fixed size variable
+ whose size is the number of degrees of freedom on those regions among
+ the ones defined in <literal>rg1</literal> and <literal>rg2</literal> which are characterized as "slaves".
+ It represents the contact equivalent nodal normal forces. <literal>multname_t</literal>
+ should be a fixed size variable whose size corresponds to the size of
+ <literal>multname_n</literal> multiplied by qdim - 1 . It represents the contact
+ equivalent nodal tangent (frictional) forces. The augmentation parameter
+ <literal>r</literal> should be chosen in a range of acceptabe values (close to the Young
+ modulus of the elastic body, see Getfem user documentation). The
+ friction coefficient stored in the parameter <literal>fr</literal> is either a single
+ value or a vector of the same size as <literal>multname_n</literal>. The optional
+ parameters <literal>slave1</literal> and <literal>slave2</literal> declare if the regions defined in <literal>rg1</literal>
+ and <literal>rg2</literal> are correspondingly considered as "slaves". By default
+ <literal>slave1</literal> is true and <literal>slave2</literal> is false, i.e. <literal>rg1</literal> contains the slave
+ surfaces, while 'rg2' the master surfaces. Preferrably only one of
+ <literal>slave1</literal> and <literal>slave2</literal> is set to true. The parameter <literal>augmented_version</literal>
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one (except for
+ the coupling between contact and Coulomb friction),
+ 3 for the new unsymmetric method.
+ Basically, this brick computes the matrices BN and BT and the vectors
+ gap and alpha and calls the basic contact brick.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add integral large sliding contact brick', mesh_im mim, string varname_u, string multname, string dataname_r, string dataname_fr, int rg)</literal></para>
+
+ <para> (still experimental brick)
+ Add a large sliding contact with friction brick to the model.
+ This brick is able to deal with auto-contact, contact between
+ several deformable bodies and contact with rigid obstacles.
+ The condition is applied on the variable <literal>varname_u</literal> on the
+ boundary corresponding to <literal>region</literal>. <literal>dataname_r</literal> is the augmentation
+ parameter of the augmented Lagrangian. <literal>dataname_friction_coeff</literal>
+ is the friction coefficient. <literal>mim</literal> is an integration method on the
+ boundary. <literal>varname_u</literal> is the variable on which the contact condition
+ will be prescribed (should be of displacement type). <literal>multname</literal> is
+ a multiplier defined on the boundary which will represent the contact
+ force. If no additional boundary or rigid
+ obstacle is added, only auto-contact will be detected. Use
+ <literal>add_boundary_to_large_sliding_contact_brick</literal> and
+ <literal>add_rigid_obstacle_to_large_sliding_contact_brick</literal> to add contact
+ boundaries and rigid obstacles.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add boundary to large sliding contact brick', int indbrick, mesh_im mim, string varname_u, string multname, int rg)</literal></para>
+
+ <para> Add a contact boundary to an existing large sliding contact brick.
+ <literal>indbrick</literal> is the brick index.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ind = gf_model_set(model M, 'add rigid obstacle to large sliding contact brick', int indbrick, string obs)</literal></para>
+
+ <para> Add a rigid obstacle to an existing large sliding contact brick.
+ <literal>indbrick</literal> is the brick index, <literal>obs</literal> is the expression of a
+ function which should be closed to a signed distance to the obstacle.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_model_get">gf_model_get</link></member>
-
- <member><link linkend="gf_model">gf_model</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_plot_1D.xml b/interface/src/scilab/help/en_US/gf_plot_1D.xml
index 1c2fe08..a8b8f83 100644
--- a/interface/src/scilab/help/en_US/gf_plot_1D.xml
+++ b/interface/src/scilab/help/en_US/gf_plot_1D.xml
@@ -10,7 +10,7 @@
<refnamediv>
<refname>gf_plot_1D</refname>
- <refpurpose>This function plots a 1D finite elements field.</refpurpose>
+ <refpurpose>This function plots a 1D finite element field.</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -22,28 +22,27 @@
<refsection>
<title>Description</title>
- <para>This function plots a 1D finite elements field.</para>
+ <para>This function plots a 1D finite element field.</para>
- <para>The options are specified as pairs of 'option name'/'option
+ <para>Available options are specified as pairs of 'option name'/'option
value':</para>
<itemizedlist>
<listitem>
- <para>'style', 'bo-' : the line style and dof marker style (same //
- syntax as in the matlab command 'plot').</para>
+ <para>'style', 'bo-': line style and dof marker style (same //
+ syntax as in the Scilab command 'plot');</para>
</listitem>
<listitem>
- <para>'color', [] : override the line color.</para>
+ <para>'color', '': override line color (by a given color name);</para>
</listitem>
<listitem>
- <para>'dof_color', [1,0,0] : color of the markers for the degrees of
- freedom.</para>
+ <para>'dof_color', '': overrride color of dof markers;</para>
</listitem>
<listitem>
- <para>'width', 2 : line width. </para>
+ <para>'width', 2: line width. </para>
</listitem>
</itemizedlist>
</refsection>
diff --git a/interface/src/scilab/help/en_US/gf_plot_mesh.xml b/interface/src/scilab/help/en_US/gf_plot_mesh.xml
index b21df9b..b0b1749 100644
--- a/interface/src/scilab/help/en_US/gf_plot_mesh.xml
+++ b/interface/src/scilab/help/en_US/gf_plot_mesh.xml
@@ -105,7 +105,7 @@
<title>Examples</title>
<para>Displaying a donut (meshed with quadratic tetrahedrons) created with
- <link linkend="http://gid.cimne.upc.es/">GiD</link>:</para>
+ <ulink url="http://gid.cimne.upc.es/">GiD</ulink>:</para>
<programlisting role="example">
// the mesh is in the demos directory of the distribution
diff --git a/interface/src/scilab/help/en_US/gf_poly.xml b/interface/src/scilab/help/en_US/gf_poly.xml
index 2fd5c6b..e061b0e 100644
--- a/interface/src/scilab/help/en_US/gf_poly.xml
+++ b/interface/src/scilab/help/en_US/gf_poly.xml
@@ -9,40 +9,58 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_poly</refname>
-
- <refpurpose>Performs various operations on the polynom</refpurpose>
+ <refpurpose>
+ Performs various operations on the polynom POLY.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>gf_poly(operation, poly [,args])</synopsis>
+ <synopsis>gf_poly(poly P, 'print')</synopsis>
+ <synopsis>gf_poly(poly P, 'product')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>
+ Performs various operations on the polynom POLY.
+</para>
+ </refsection>
- <para>Performs various operations on the polynom
- <literal>poly</literal>.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_poly('print', p) Prints the content of P.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_poly(poly P, 'print')</literal></para>
+
+ <para> Prints the content of P.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_poly(poly P, 'product')</literal></para>
+
+ <para> To be done ... !
+
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_integ">gf_integ</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_precond.xml b/interface/src/scilab/help/en_US/gf_precond.xml
index 79b1ef6..cf6e9ee 100644
--- a/interface/src/scilab/help/en_US/gf_precond.xml
+++ b/interface/src/scilab/help/en_US/gf_precond.xml
@@ -9,97 +9,127 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_precond</refname>
-
- <refpurpose>Create a preconditioner</refpurpose>
+ <refpurpose> The preconditioners may store REAL or COMPLEX values. They accept getfem
+ sparse matrices and Matlab sparse matrices.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_precond('identity')
-gf_precond('cidentity')
-gf_precond('diagonal', vec D)
-gf_precond('ildlt', spmat M)
-gf_precond('ilu', spmat M)
-gf_precond('ildltt', spmat M [, int fillin [, scalar threshold]])
-gf_precond('ilut', spmat M [, int fillin [, scalar threshold]])gf_precond('superlu', spmat M)
- </synopsis>
+ <synopsis>PC = gf_precond('identity')</synopsis>
+ <synopsis>PC = gf_precond('cidentity')</synopsis>
+ <synopsis>PC = gf_precond('diagonal', vec D)</synopsis>
+ <synopsis>PC = gf_precond('ildlt', spmat m)</synopsis>
+ <synopsis>PC = gf_precond('ilu', spmat m)</synopsis>
+ <synopsis>PC = gf_precond('ildltt', spmat m[, int fillin[, scalar threshold]])</synopsis>
+ <synopsis>PC = gf_precond('ilut', spmat m[, int fillin[, scalar threshold]])</synopsis>
+ <synopsis>PC = gf_precond('superlu', spmat m)</synopsis>
+ <synopsis>PC = gf_precond('spmat', spmat m)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for precond objects.</para>
+
+ <para> The preconditioners may store REAL or COMPLEX values. They accept getfem
+ sparse matrices and Matlab sparse matrices.
+</para>
+ </refsection>
- <para>The preconditioners may store REAL or COMPLEX values. They accept
- getfem sparse matrices and Scilab sparse matrices.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_precond('identity') Create a REAL identity
- precondioner.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('cidentity') Create a COMPLEX identity
- preconditioner.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('diagonal', vec D) Create a diagonal
- precondioner.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('ildlt', Spmat m) Create an ILDLT (Cholesky)
- preconditioner for the (symmetric) sparse matrix `m`. This
- preconditioner has the same sparsity pattern than `m` (no
- fill-in).</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('ilu', Spmat m) Create an ILU (Incomplete LU)
- preconditioner for the sparse matrix `m`. This preconditioner has the
- same sparsity pattern than `m` (no fill-in).</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('ildltt', Spmat m[, int fillin[, scalar threshold]])
- Create an ILDLT (Cholesky with filling) preconditioner for the
- (symmetric) sparse matrix `m`. The preconditioner may add at most
- `fillin` additional non-zero entries on each line. The default value
- for `fillin` is 10, and the default threshold is1e-7.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('ilut', Spmat m[, int fillin[, scalar threshold]])
- Create an ILUT (Incomplete LU with filling) preconditioner for the
- sparse matrix `m`. The preconditioner may add at most `fillin`
- additional non-zero entries on each line. The default value for
- `fillin` is 10, and the default threshold is 1e-7.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond('superlu', Spmat m) Uses <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> to build an exact
- factorization of the sparse matrix `m`. This preconditioner is only available if the getfem-interface was built with
- <link linkend="http://crd.lbl.gov/~xiaoye/SuperLU/">SuperLU</link> support</para>
-
- <para>Note that LU factorization is likely to eat all your memory for 3D problems.</para>
- </listitem>
+ <listitem>
+ <para><literal>PC = gf_precond('identity')</literal></para>
+
+ <para> Create a REAL identity precondioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('cidentity')</literal></para>
+
+ <para> Create a COMPLEX identity precondioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('diagonal', vec D)</literal></para>
+
+ <para> Create a diagonal precondioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('ildlt', spmat m)</literal></para>
+
+ <para> Create an ILDLT (Cholesky) preconditioner for the (symmetric) sparse
+ matrix <literal>m</literal>. This preconditioner has the same sparsity pattern than <literal>m</literal>
+ (no fill-in).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('ilu', spmat m)</literal></para>
+
+ <para> Create an ILU (Incomplete LU) preconditioner for the sparse
+ matrix <literal>m</literal>. This preconditioner has the same sparsity pattern
+ than <literal>m</literal> (no fill-in).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('ildltt', spmat m[, int fillin[, scalar threshold]])</literal></para>
+
+ <para> Create an ILDLTT (Cholesky with filling) preconditioner for the
+ (symmetric) sparse matrix <literal>m</literal>. The preconditioner may add at most
+ <literal>fillin</literal> additional non-zero entries on each line. The default value
+ for <literal>fillin</literal> is 10, and the default threshold is1e-7.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('ilut', spmat m[, int fillin[, scalar threshold]])</literal></para>
+
+ <para> Create an ILUT (Incomplete LU with filling) preconditioner for the
+ sparse matrix <literal>m</literal>. The preconditioner may add at most <literal>fillin</literal>
+ additional non-zero entries on each line. The default value for
+ <literal>fillin</literal> is 10, and the default threshold is 1e-7.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('superlu', spmat m)</literal></para>
+
+ <para> Uses SuperLU to build an exact factorization of the sparse matrix <literal>m</literal>.
+ This preconditioner is only available if the getfem-interface was
+ built with SuperLU support. Note that LU factorization is likely to
+ eat all your memory for 3D problems.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>PC = gf_precond('spmat', spmat m)</literal></para>
+
+ <para> Preconditionner given explicitely by a sparse matrix.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_precond_get">gf_precond_get</link></member>
- <member><link linkend="gf_linsolve">gf_linsolve</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_precond_get.xml b/interface/src/scilab/help/en_US/gf_precond_get.xml
index e5a6266..2a2562c 100644
--- a/interface/src/scilab/help/en_US/gf_precond_get.xml
+++ b/interface/src/scilab/help/en_US/gf_precond_get.xml
@@ -9,78 +9,99 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_precond_get</refname>
-
- <refpurpose>get informations related to the preconditioner</refpurpose>
+ <refpurpose> General function for querying information about precond objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-vec PV=gf_precond_get(P,'mult', vec V)
-vec tPV=gf_precond_get(P,'tmult', vec V)
-string S=gf_precond_get(P,'type')
-ivec gf_precond_get('size')
-int gf_precond_get(P,'is_complex')string S=gf_precond_get(P,'info')
- </synopsis>
+ <synopsis>gf_precond_get(precond P, 'mult', vec V)</synopsis>
+ <synopsis>gf_precond_get(precond P, 'tmult', vec V)</synopsis>
+ <synopsis>gf_precond_get(precond P, 'type')</synopsis>
+ <synopsis>gf_precond_get(precond P, 'size')</synopsis>
+ <synopsis>gf_precond_get(precond P, 'is_complex')</synopsis>
+ <synopsis>s = gf_precond_get(precond P, 'char')</synopsis>
+ <synopsis>gf_precond_get(precond P, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
-
- <itemizedlist>
- <listitem>
- <para>gf_precond_get(P,'mult',vec V) Apply the preconditioner to the
- supplied vector.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond_get(P,'tmult',vec V) Apply the transposed
- preconditioner to the supplied vector.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond_get(P,'type') Return a string describing the type of
- the preconditioner ('ilu', 'ildlt',..).</para>
- </listitem>
-
- <listitem>
- <para>gf_precond_get(P,'size') Return the dimensions of the
- preconditioner.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond_get(P,'is_complex') Return 1 if the preconditioner
- stores complex values.</para>
- </listitem>
-
- <listitem>
- <para>gf_precond_get(P,'info') Return a short informative string about
- the preconditioner.</para>
- </listitem>
- </itemizedlist>
+ <para> General function for querying information about precond objects.
+</para>
</refsection>
<refsection>
- <title>Examples</title>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'mult', vec V)</literal></para>
+
+ <para> Apply the preconditioner to the supplied vector.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'tmult', vec V)</literal></para>
+
+ <para> Apply the transposed preconditioner to the supplied vector.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'type')</literal></para>
+
+ <para> Return a string describing the type of the preconditioner ('ilu', 'ildlt',..).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'size')</literal></para>
- <programlisting role="example">
- Add an example here
- </programlisting>
+ <para> Return the dimensions of the preconditioner.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'is_complex')</literal></para>
+
+ <para> Return 1 if the preconditioner stores complex values.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_precond_get(precond P, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the precond.
+
+ This can be used to perform comparisons between two
+ different precond objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_precond_get(precond P, 'display')</literal></para>
+
+ <para> displays a short summary for a precond object.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_precond">gf_precond</link></member>
- <member><link linkend="gf_linsolve">gf_linsolve</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice.xml b/interface/src/scilab/help/en_US/gf_slice.xml
index efbffd8..37a1f5d 100644
--- a/interface/src/scilab/help/en_US/gf_slice.xml
+++ b/interface/src/scilab/help/en_US/gf_slice.xml
@@ -9,205 +9,177 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_slice</refname>
+ <refpurpose> Creation of a mesh slice. Mesh slices are very similar to a
+ P1-discontinuous mesh_fem on which interpolation is very fast. The slice is
+ built from a mesh object, and a description of the slicing operation, for
+ example::
- <refpurpose>Mesh slice creation.</refpurpose>
+ sl = gf_slice({'planar',+1,[0;0],[1;0]}, m, 5);
+
+ cuts the original mesh with the half space {y>0}. Each convex of the
+ original mesh <literal>m</literal> is simplexified (for example a quadrangle is splitted
+ into 2 triangles), and each simplex is refined 5 times.
+
+ Slicing operations can be:
+
+ * cutting with a plane, a sphere or a cylinder
+ * intersection or union of slices
+ * isovalues surfaces/volumes
+ * "points", "streamlines" (see below)
+
+ If the first argument is a mesh_fem <literal>mf</literal> instead of a mesh, and if it is
+ followed by a <literal>mf</literal>-field <literal>u</literal>, then the deformation <literal>u</literal> will be applied to the
+ mesh before the slicing operation.
+
+ The first argument can also be a slice.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-sl = gf_slice(sliceop, mesh M, int REFINE [, CVFLST])
-sl = gf_slice(sliceop, mesh_fem MF, vec U, int REFINE [, CVFLST])
-sl = gf_slice(sliceop, slice SL)
-sl = gf_slice('streamlines', mesh_fem MF, vec U, mat SEEDS)
-sl = gf_slice('points', mesh M, mat PTS)
- </synopsis>
+ <synopsis>sl = gf_slice(sliceop, {slice sl|{mesh m| mesh_fem mf, vec U}, int refine}[, mat CVfids])</synopsis>
+ <synopsis>sl = gf_slice('streamlines', mesh_fem mf, mat U, mat S)</synopsis>
+ <synopsis>sl = gf_slice('points', mesh m, mat Pts)</synopsis>
+ <synopsis>sl = gf_slice('load', string filename[, mesh m])</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for slice objects.</para>
+
+ <para> Creation of a mesh slice. Mesh slices are very similar to a
+ P1-discontinuous mesh_fem on which interpolation is very fast. The slice is
+ built from a mesh object, and a description of the slicing operation, for
+ example::
+
+ sl = gf_slice({'planar',+1,[0;0],[1;0]}, m, 5);
- <para>Creation of a mesh slice. Mesh slices are very similar to a
- P1-discontinuous mesh_fem on which interpolation is very fast. The slice
- is built from a mesh object, and a description of the slicing operation,
- for example,</para>
+ cuts the original mesh with the half space {y>0}. Each convex of the
+ original mesh <literal>m</literal> is simplexified (for example a quadrangle is splitted
+ into 2 triangles), and each simplex is refined 5 times.
- <programlisting role="example"><![CDATA[
-sl = gf_slice(list('planar',+1,[0;0],[1;0]), m, 5);
- ]]></programlisting>
+ Slicing operations can be:
- <para>cuts the original mesh with the half space [y>0]. Each convex of
- the original mesh m is simplexified (for example a quadrangle is splitted
- into 2 triangles), and each simplex is refined 5 times.</para>
+ * cutting with a plane, a sphere or a cylinder
+ * intersection or union of slices
+ * isovalues surfaces/volumes
+ * "points", "streamlines" (see below)
- <para>Slicing operations can be:</para>
+ If the first argument is a mesh_fem <literal>mf</literal> instead of a mesh, and if it is
+ followed by a <literal>mf</literal>-field <literal>u</literal>, then the deformation <literal>u</literal> will be applied to the
+ mesh before the slicing operation.
+
+ The first argument can also be a slice.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>cutting with a plane, a sphere or a cylinder</para>
- </listitem>
+ <listitem>
+ <para><literal>sl = gf_slice(sliceop, {slice sl|{mesh m| mesh_fem mf, vec U}, int refine}[, mat CVfids])</literal></para>
- <listitem>
- <para>intersection or union of slices</para>
- </listitem>
+ <para> Create a slice using <literal>sliceop</literal> operation.
- <listitem>
- <para>isovalues surfaces/volumes</para>
- </listitem>
+ <literal>sliceop</literal> operation is specified with Scilab CELL arrays (i.e. with braces) . The first element is the
+ name of the operation, followed the slicing options:
- <listitem>
- <para>"points", "streamlines" (see below)</para>
- </listitem>
- </itemizedlist>
+ * {'none'} :
+ Does not cut the mesh.
- <para>If the first argument is a mesh_fem mf instead of a mesh, and if it
- is followed by a field <literal>U</literal> (with <emphasis>size(U,1) ==
- gf_mesh_fem_get(mf,U)</emphasis>), then the deformation
- <literal>U</literal> will be applied to the mesh before the slicing
- operation.</para>
+ * {'planar', int orient, vec p, vec n} :
+ Planar cut. <literal>p</literal> and <literal>n</literal> define a half-space, <literal>p</literal> being a point belong to
+ the boundary of the half-space, and <literal>n</literal> being its normal. If <literal>orient</literal> is
+ equal to -1 (resp. 0, +1), then the slicing operation will cut the mesh
+ with the "interior" (resp. "boundary", "exterior") of the half-space.
+ <literal>orient</literal> may also be set to +2 which means that the mesh will be sliced,
+ but both the outer and inner parts will be kept.
- <para>The first argument can also be a slice.</para>
+ * {'ball', int orient, vec c, scalar r} :
+ Cut with a ball of center <literal>c</literal> and radius <literal>r</literal>.
- <para>Slicing operations:</para>
+ * {'cylinder', int orient, vec p1, vec p2, scalar r} :
+ Cut with a cylinder whose axis is the line <literal>(p1, p2)</literal> and whose radius
+ is <literal>r</literal>.
- <para>Always specifiy them between braces (i.e. in a cell array). The
- first argument is the name of the operation, followed the slicing
- options.</para>
+ * {'isovalues', int orient, mesh_fem mf, vec U, scalar s} :
+ Cut using the isosurface of the field <literal>U</literal> (defined on the mesh_fem <literal>mf</literal>).
+ The result is the set <literal>{x such that <latex style="text"><![CDATA[U(x) \leq s]]></latex>}</literal> or <literal>{x such that
+ </literal>U<literal>(x)=</literal>s<literal>}</literal> or <literal>{x such that </literal>U<literal>(x) >= </literal>s<literal>}</literal> depending on the value of
+ <literal>orient</literal>.
- <itemizedlist>
- <listitem>
- <para>list('none'): Does not cut the mesh.</para>
- </listitem>
-
- <listitem>
- <para>list('planar', orient, p, n): Planar cut. <literal>p</literal>
- and <literal>n</literal> define a half-space, <literal>p</literal>
- being a point belong to the boundary of the half-space, and n being
- its normal. If <literal>orient</literal> is equal to -1 (resp. 0, +1),
- then the slicing operation will cut the mesh with the "interior"
- (resp. "boundary", "exterior") of the half-space.
- <literal>Orient</literal> may also be set to +2 which means that the
- mesh will be sliced, but both the outer and inner parts will be
- kept.</para>
- </listitem>
-
- <listitem>
- <para>list('ball', orient, c, r): Cut with a ball of center
- <literal>c</literal> and radius <literal>r</literal>.</para>
- </listitem>
-
- <listitem>
- <para>list('cylinder', orient, p1, p2, r): Cut with a cylinder whose
- axis is the line (p1,p2) and whose radius is r.</para>
- </listitem>
-
- <listitem>
- <para>list('isovalues',orient, mesh_fem MF, vec U, scalar V): Cut
- using the isosurface of the field <literal>U</literal> (defined on the
- mesh_fem <literal>MF</literal>). The result is the set <emphasis>{x
- such that U(x) <= V} or {x such that U(x) == V} or {x such that
- U(x) <= V}</emphasis> depending on the value of
- <literal>ORIENT</literal>.</para>
- </listitem>
-
- <listitem>
- <para>list('boundary'[, SLICEOP]): Return the boundary of the result
- of <literal>SLICEOP</literal>, where <literal>SLICEOP</literal> is any
- slicing operation. If <literal>SLICEOP</literal> is not specified,
- then the whole mesh is considered (i.e. it is equivalent to
- list('boundary',list('none'))).</para>
- </listitem>
-
- <listitem>
- <para>list('explode', coef): Build an 'exploded' view of the mesh:
- each convex is shrinked (<emphasis>0 <coef <= 1</emphasis>). In
- the case of 3D convexes, only their faces are kept.</para>
- </listitem>
-
- <listitem>
- <para>list('union', SLICEOP1, SLICEOP2),</para>
- </listitem>
-
- <listitem>
- <para>list('intersection', SLICEOP1, SLICEOP2),</para>
- </listitem>
-
- <listitem>
- <para>list('comp', SLICEOP),</para>
- </listitem>
-
- <listitem>
- <para>list('diff', SLICEOP1, SLICEOP2): Boolean operations: returns
- the union,intersection,complementary or difference of slicing
- operations.</para>
- </listitem>
-
- <listitem>
- <para>list('mesh', MESH): Build a slice which is the intersection of
- the sliced mesh with another mesh. The slice is such that all of its
- simplexes are stricly contained into a convex of each mesh.</para>
- </listitem>
- </itemizedlist>
+ * {'boundary'[, SLICEOP]} :
+ Return the boundary of the result of SLICEOP, where SLICEOP is any
+ slicing operation. If SLICEOP is not specified, then the whole mesh is
+ considered (i.e. it is equivalent to {'boundary',{'none'}}).
+ * {'explode', mat Coef} :
+ Build an 'exploded' view of the mesh: each convex is shrinked (<latex style="text"><![CDATA[0 <
+ \text{Coef} \leq 1]]></latex>). In the case of 3D convexes, only their faces are kept.
- <para>SPECIAL SLICES:</para>
+ * {'union', SLICEOP1, SLICEOP2} :
+ Returns the union of slicing operations.
- <para>There are also some special calls to gf_slice:</para>
+ * {'intersection', SLICEOP1, SLICEOP2} :
+ Returns the intersection of slicing operations, for example::
- <itemizedlist>
- <listitem>
- <para>gf_slice('streamlines',mf, U, mat SEEDS): compute streamlines of
- the (vector) field <literal>U</literal>, with seed points given by the
- columns of <literal>SEEDS</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_slice('points', m, mat PTS): return the "slice" composed of
- points given by the columns of <literal>PTS</literal> (useful for
- interpolation on a given set of sparse points, see
- <emphasis>gf_compute(mf,U,'interpolate on',sl)</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>gf_slice('load', filename [,m]): load the slice (and its
- linked_mesh if it is not given as an argument) from a text
- file.</para>
- </listitem>
- </itemizedlist>
- </refsection>
+ sl = gf_slice({intersection',{'planar',+1,[0;0;0],[0;0;1]},
+ {'isovalues',-1,mf2,u2,0}},mf,u,5)
- <refsection>
- <title>Examples</title>
+ * {'comp', SLICEOP} :
+ Returns the complementary of slicing operations.
+
+ * {'diff', SLICEOP1, SLICEOP2} :
+ Returns the difference of slicing operations.
+
+ * {'mesh', mesh m} :
+ Build a slice which is the intersection of the sliced mesh with another
+ mesh. The slice is such that all of its simplexes are stricly contained
+ into a convex of each mesh.
+
+ </para>
+ </listitem>
- <para>Apply the deformation given by mf,U on the mesh, then slice it with the z+ half-space, and keep only the part where U2(x) > 0. </para>
+ <listitem>
+ <para><literal>sl = gf_slice('streamlines', mesh_fem mf, mat U, mat S)</literal></para>
- <programlisting role="example"><![CDATA[
-sl = gf_slice(list(intersection',list('planar',+1,[0;0;0],[0;0;1]),list('isovalues',-1,mf2,U2,0)),mf,U,5);
- ]]></programlisting>
+ <para> Compute streamlines of the (vector) field <literal>U</literal>, with seed points given
+ by the columns of <literal>S</literal>.
+ </para>
+ </listitem>
- <para>view the convex quality of a 2D or 3D mesh m:</para>
-
- <programlisting role="example"><![CDATA[
-gf_plot_slice(gf_slice(list('explode', 0.7), m, 2), 'convex_data', gf_mesh_get(m,'quality'));
- ]]></programlisting>
+ <listitem>
+ <para><literal>sl = gf_slice('points', mesh m, mat Pts)</literal></para>
- <para>See the gf_plot_slice usage example for more slices. </para>
+ <para> Return the "slice" composed of points given by the columns of <literal>Pts</literal>
+ (useful for interpolation on a given set of sparse points, see
+ <literal></literal>gf_compute('interpolate on',sl)<literal></literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>sl = gf_slice('load', string filename[, mesh m])</literal></para>
+
+ <para> Load the slice (and its linked mesh if it is not given as an argument)
+ from a text file.
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_slice_get">gf_slice_get</link></member>
- <member><link linkend="gf_slice_set">gf_slice_set</link></member>
- <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice_get.xml b/interface/src/scilab/help/en_US/gf_slice_get.xml
index 69a232d..866a6c4 100644
--- a/interface/src/scilab/help/en_US/gf_slice_get.xml
+++ b/interface/src/scilab/help/en_US/gf_slice_get.xml
@@ -9,213 +9,253 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_slice_get</refname>
-
- <refpurpose>Get informations related to mesh slices</refpurpose>
+ <refpurpose> General function for querying information about slice objects.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-int I = gf_slice_get(sl, 'dim')
-scalar I = gf_slice_get(sl, 'area')
-ivec cvlst = gf_slice_get(sl, 'cvs')
-int n = gf_slice_get(sl, 'nbpts')
-mat P = gf_slice_get(sl, 'pts')
-ivec NS = gf_slice_get(sl, 'nbsplxs')
-int NS = gf_slice_get(sl, 'nbsplxs',int dim)
-[imat S, ivec CV2SPLX] = gf_slice_get(sl, 'splxs', int dim)
-mat E = gf_slice_get(sl, 'edges')
-[mat P, ivec E1, ivec E2] = gf_slice_get(sl, 'edges')
-vec Usl=gf_slice_get(sl, 'interpolate_convex_data', Ucv)
-mesh m = gf_slice_get(sl, 'linked mesh')
-gf_slice_get(sl,'export_to_vtk', filename ... [, 'ascii'][, 'edges'],...)
-gf_slice_get(sl,'export_to_pov', filename, ...)
-gf_slice_get(sl,'export_to_dx', filename, ...[, 'ascii'][, 'edges'][, 'append'])int ms=gf_slice_get(sl, 'memsize')
- </synopsis>
+ <synopsis>d = gf_slice_get(slice S, 'dim')</synopsis>
+ <synopsis>a = gf_slice_get(slice S, 'area')</synopsis>
+ <synopsis>CVids = gf_slice_get(slice S, 'cvs')</synopsis>
+ <synopsis>n = gf_slice_get(slice S, 'nbpts')</synopsis>
+ <synopsis>ns = gf_slice_get(slice S, 'nbsplxs'[, int dim])</synopsis>
+ <synopsis>P = gf_slice_get(slice S, 'pts')</synopsis>
+ <synopsis>{S, CV2S} = gf_slice_get(slice S, 'splxs',int dim)</synopsis>
+ <synopsis>{P, E1, E2} = gf_slice_get(slice S, 'edges')</synopsis>
+ <synopsis>Usl = gf_slice_get(slice S, 'interpolate_convex_data', mat Ucv)</synopsis>
+ <synopsis>m = gf_slice_get(slice S, 'linked mesh')</synopsis>
+ <synopsis>m = gf_slice_get(slice S, 'mesh')</synopsis>
+ <synopsis>z = gf_slice_get(slice S, 'memsize')</synopsis>
+ <synopsis>gf_slice_get(slice S, 'export to vtk', string filename, ...)</synopsis>
+ <synopsis>gf_slice_get(slice S, 'export to pov', string filename)</synopsis>
+ <synopsis>gf_slice_get(slice S, 'export to dx', string filename, ...)</synopsis>
+ <synopsis>gf_slice_get(slice S, 'export to pos', string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf1], mat U2, string nameU2,...])</synopsis>
+ <synopsis>s = gf_slice_get(slice S, 'char')</synopsis>
+ <synopsis>gf_slice_get(slice S, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> General function for querying information about slice objects.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>d = gf_slice_get(sl,'dim') Return the dimension of the slice (2
- for a 2D mesh, etc..).</para>
- </listitem>
-
- <listitem>
- <para>a = gf_slice_get(sl,'area') Return the area of the slice.</para>
- </listitem>
-
- <listitem>
- <para>CVids = gf_slice_get(sl,'cvs') Return the list of convexes of
- the original mesh contained in the slice.</para>
- </listitem>
-
- <listitem>
- <para>n = gf_slice_get(sl,'nbpts') Return the number of points in the
- slice.</para>
- </listitem>
-
- <listitem>
- <para>ns = gf_slice_get(sl,'nbsplxs'[, int dim]) Return the number of
- simplexes in the slice. Since the slice may contain points (simplexes
- of dim 0), segments (simplexes of dimension 1), triangles etc., the
- result is a vector of size gf_slice_get(sl,'dim')+1 , except if the
- optional argument <literal>dim</literal> is used.</para>
- </listitem>
-
- <listitem>
- <para>P = gf_slice_get(sl,'pts') Return the list of point
- coordinates.</para>
- </listitem>
-
- <listitem>
- <para>list(S, CV2S) = gf_slice_get(sl,'splxs',int dim) Return the list
- of simplexes of dimension <literal>dim</literal>. </para>
-
- <para>On output, S has <emphasis>dim+1</emphasis> rows, each column
- contains the point numbers of a simplex. The vector
- <literal>CV2S</literal> can be used to find the list of simplexes for
- any convex stored in the slice. For example
- <emphasis>S(:,CV2S(4):CV2S(5)-1)</emphasis> gives the list of
- simplexes for the fourth convex.</para>
- </listitem>
-
- <listitem>
- <para>list(P, E1, E2) = gf_slice_get(sl,'edges') Return the edges of
- the linked mesh contained in the slice. <literal>P</literal> contains
- the list of all edge vertices, <literal>E1</literal> contains the
- indices of each mesh edge in <literal>P</literal>, and
- <literal>E2</literal> contains the indices of each "edges" which is on
- the border of the slice. This function is useless except for
- post-processing purposes.</para>
- </listitem>
-
- <listitem>
- <para>Usl = gf_slice_get(sl,'interpolate_convex_data',mat Ucv)
- Interpolate data given on each convex of the mesh to the slice nodes.
- The input array <literal>Ucv</literal> may have any number of
- dimensions, but its last dimension should be equal to
- <emphasis>gf_mesh_get(m,'max cvid')</emphasis>.</para>
-
- <para>Example of use:</para>
-
- <programlisting role="example"><![CDATA[
-gf_slice_get(sl,'interpolate_convex_data', gf_mesh_get(m,'quality'))
- ]]></programlisting>
- </listitem>
-
- <listitem>
- <para> m = gf_slice_get(sl,'linked mesh') Return the mesh on which the
- slice was taken.</para>
- </listitem>
-
- <listitem>
- <para> z = gf_slice_get(sl,'memsize') Return the amount of memory (in
- bytes) used by the slice object.</para>
- </listitem>
-
- <listitem>
- <para> gf_slice_get(sl,'export to vtk',string filename ... [,
- 'ascii'][, 'edges'] ...) Export a slice to VTK. Following the
- <literal>filename</literal>, you may use any of the following
- options:</para>
-
- <itemizedlist>
- <listitem>
- <para>if 'ascii' is not used, the file will contain binary data
- (non portable, but fast).</para>
- </listitem>
-
- <listitem>
- <para>if 'edges' is used, the edges of the original mesh will be
- written instead of the slice content</para>
- </listitem>
- </itemizedlist>
-
- <para>More than one dataset may be written, just list them. Each
- dataset consists of either:</para>
-
- <itemizedlist>
- <listitem>
- <para>a field interpolated on the slice (scalar, vector or
- tensor), followed by an optional name.</para>
- </listitem>
-
- <listitem>
- <para>a mesh_fem and a field, followed by an optional name.</para>
- </listitem>
- </itemizedlist>
-
- <para>Examples:</para>
-
- <programlisting role="example"><![CDATA[
-gf_slice_get(sl,'export to vtk','test.vtk',Usl,'first_dataset', mf, U2, 'second_dataset')
-gf_slice_get(sl,'export to vtk','test.vtk','ascii',mf,U2)
-gf_slice_get(sl,'export to vtk','test.vtk','edges','ascii',Uslice)
- ]]></programlisting>
- </listitem>
-
- <listitem>
- <para>gf_slice_get(sl,'export to pov',string filename, ...) Export a
- the triangles of the slice to POV-RAY.</para>
- </listitem>
-
- <listitem>
- <para> gf_slice_get(sl,'export to dx',string filename, ...) Export a
- slice to OpenDX. Following the file name, you may use any of the
- following options:</para>
-
- <itemizedlist>
- <listitem>
- <para>if 'ascii' is not used, the file will contain binary data
- (non portable, but fast).</para>
- </listitem>
-
- <listitem>
- <para>if 'edges' is used, the edges of the original mesh will be
- written instead of the slice content.</para>
- </listitem>
-
- <listitem>
- <para>if 'append' is used, the opendx file will not be
- overwritten, and the new data will be added at the end of the
- file.</para>
- </listitem>
- </itemizedlist>
-
- <para>More than one dataset may be written, just list them. Each
- dataset consists of either:</para>
-
- <itemizedlist>
- <listitem>
- <para>a field interpolated on the slice (scalar, vector or
- tensor), followed by an optional name.</para>
- </listitem>
-
- <listitem>
- <para>a mesh_fem and a field, followed by an optional name.</para>
- </listitem>
- </itemizedlist>
- </listitem>
+ <listitem>
+ <para><literal>d = gf_slice_get(slice S, 'dim')</literal></para>
+
+ <para> Return the dimension of the slice (2 for a 2D mesh, etc..).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>a = gf_slice_get(slice S, 'area')</literal></para>
+
+ <para> Return the area of the slice.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>CVids = gf_slice_get(slice S, 'cvs')</literal></para>
+
+ <para> Return the list of convexes of the original mesh contained in the slice.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>n = gf_slice_get(slice S, 'nbpts')</literal></para>
+
+ <para> Return the number of points in the slice.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>ns = gf_slice_get(slice S, 'nbsplxs'[, int dim])</literal></para>
+
+ <para> Return the number of simplexes in the slice.
+
+ Since the slice may contain points (simplexes of dim 0), segments
+ (simplexes of dimension 1), triangles etc., the result is a vector
+ of size gf_slice_get(slice S, 'dim')+1, except if the optional argument <literal>dim</literal>
+ is used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>P = gf_slice_get(slice S, 'pts')</literal></para>
+
+ <para> Return the list of point coordinates.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{S, CV2S} = gf_slice_get(slice S, 'splxs',int dim)</literal></para>
+
+ <para> Return the list of simplexes of dimension <literal>dim</literal>.
+
+ On output, S has 'dim+1' rows, each column contains the point
+ numbers of a simplex. The vector <literal>CV2S</literal> can be used to find the
+ list of simplexes for any convex stored in the slice. For example
+ 'S(:,CV2S(4):CV2S(5)-1)'
+ gives the list of simplexes for the fourth convex.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{P, E1, E2} = gf_slice_get(slice S, 'edges')</literal></para>
+
+ <para> Return the edges of the linked mesh contained in the slice.
+
+ <literal>P</literal> contains the list of all edge vertices, <literal>E1</literal> contains
+ the indices of each mesh edge in <literal>P</literal>, and <literal>E2</literal> contains the
+ indices of each "edges" which is on the border of the slice.
+ This function is useless except for post-processing purposes.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Usl = gf_slice_get(slice S, 'interpolate_convex_data', mat Ucv)</literal></para>
+
+ <para> Interpolate data given on each convex of the mesh to the slice nodes.
+
+ The input array <literal>Ucv</literal> may have any number of dimensions, but its
+ last dimension should be equal to gf_mesh_get(mesh M, 'max cvid').
+
+ Example of use: gf_slice_get(slice S, 'interpolate_convex_data', gf_mesh_get(mesh M, 'quality')).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_slice_get(slice S, 'linked mesh')</literal></para>
+
+ <para> Return the mesh on which the slice was taken.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>m = gf_slice_get(slice S, 'mesh')</literal></para>
+
+ <para> Return the mesh on which the slice was taken
+ (identical to 'linked mesh')
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>z = gf_slice_get(slice S, 'memsize')</literal></para>
+
+ <para> Return the amount of memory (in bytes) used by the slice object.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_slice_get(slice S, 'export to vtk', string filename, ...)</literal></para>
+
+ <para> Export a slice to VTK.
+
+ Following the <literal>filename</literal>, you may use any of the following options:
+
+ - if 'ascii' is not used, the file will contain binary data
+ (non portable, but fast).
+ - if 'edges' is used, the edges of the original mesh will be
+ written instead of the slice content.
+
+ More than one dataset may be written, just list them. Each dataset
+ consists of either:
+
+ - a field interpolated on the slice (scalar, vector or tensor),
+ followed by an optional name.
+ - a mesh_fem and a field, followed by an optional name.
+
+ Examples:
+
+ - gf_slice_get(slice S, 'export to vtk', 'test.vtk', Usl, 'first_dataset', mf,
+ U2, 'second_dataset')
+ - gf_slice_get(slice S, 'export to vtk', 'test.vtk', 'ascii', mf,U2)
+ - gf_slice_get(slice S, 'export to vtk', 'test.vtk', 'edges', 'ascii', Uslice)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_slice_get(slice S, 'export to pov', string filename)</literal></para>
+
+ <para> Export a the triangles of the slice to POV-RAY.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_slice_get(slice S, 'export to dx', string filename, ...)</literal></para>
+
+ <para> Export a slice to OpenDX.
+
+ Following the <literal>filename</literal>, you may use any of the following
+ options:
+
+ - if 'ascii' is not used, the file will contain binary data
+ (non portable, but fast).
+ - if 'edges' is used, the edges of the original mesh will be
+ written instead of the slice content.
+ - if 'append' is used, the opendx file will not be overwritten,
+ and the new data will be added at the end of the file.
+
+ More than one dataset may be written, just list them. Each dataset
+ consists of either:
+
+ - a field interpolated on the slice (scalar, vector or tensor),
+ followed by an optional name.
+ - a mesh_fem and a field, followed by an optional name.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_slice_get(slice S, 'export to pos', string filename[, string name][[,mesh_fem mf1], mat U1, string nameU1[[,mesh_fem mf1], mat U2, string nameU2,...])</literal></para>
+
+ <para> Export a slice to Gmsh.
+
+ More than one dataset may be written, just list them.
+ Each dataset consists of either:
+
+ - a field interpolated on the slice (scalar, vector or tensor).
+ - a mesh_fem and a field.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_slice_get(slice S, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the slice.
+
+ This can be used to perform comparisons between two
+ different slice objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_slice_get(slice S, 'display')</literal></para>
+
+ <para> displays a short summary for a slice object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_slice_get">gf_slice_get</link></member>
- <member><link linkend="gf_slice">gf_slice</link></member>
- <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_slice_set.xml b/interface/src/scilab/help/en_US/gf_slice_set.xml
index 476d7d4..1b10e35 100644
--- a/interface/src/scilab/help/en_US/gf_slice_set.xml
+++ b/interface/src/scilab/help/en_US/gf_slice_set.xml
@@ -9,46 +9,51 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_slice_set</refname>
-
- <refpurpose>Edition of mesh slices.</refpurpose>
+ <refpurpose> Edition of mesh slices.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_slice_set(mesh_slice sl, 'pts', mat P)
- </synopsis>
+ <synopsis>gf_slice_set(slice S, 'pts', mat P)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Edition of mesh slices.
+</para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_slice_set(SL,('pts',mat P) : Replace the points of the slice.
- The new points <literal>P</literal> are stored in the columns the
- matrix. Note that you can use the function to apply a deformation to a
- slice, or to change the dimension of the slice (the number of rows of
- <literal>P</literal> is not required to be equal to
- <emphasis>gf_slice_get(SL,('dim'))</emphasis>.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_slice_set(slice S, 'pts', mat P)</literal></para>
+
+ <para> Replace the points of the slice.
+
+ The new points <literal>P</literal> are stored in the columns the matrix. Note that
+ you can use the function to apply a deformation to a slice, or to
+ change the dimension of the slice (the number of rows of <literal>P</literal> is not
+ required to be equal to gf_slice_get(slice S, 'dim')).
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_slice_get">gf_slice_get</link></member>
- <member><link linkend="gf_slice">gf_slice</link></member>
- <member><link linkend="gf_plot_slice">gf_plot_slice</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat.xml b/interface/src/scilab/help/en_US/gf_spmat.xml
index 3fdcccf..17bf8a0 100644
--- a/interface/src/scilab/help/en_US/gf_spmat.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat.xml
@@ -9,137 +9,138 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_spmat</refname>
-
- <refpurpose>Sparse matrix manipulation</refpurpose>
+ <refpurpose> Create a new sparse matrix in getfem++ format. These sparse matrix can be stored as CSC (compressed column
+ sparse), which is the format used by Matlab, or they can be stored as WSC
+ (internal format to getfem). The CSC matrices are not writable (it would
+ be very inefficient), but they are optimized for multiplication with
+ vectors, and memory usage. The WSC are writable, they are very fast with
+ respect to random read/write operation. However their memory overhead is
+ higher than CSC matrices, and they are a little bit slower for
+ matrix-vector multiplications.
+
+ By default, all newly created matrices are build as WSC matrices. This can
+ be changed later with <literal></literal>gf_spmat_set(spmat S, 'to_csc',...)<literal></literal>, or may be changed
+ automatically by getfem (for example <literal></literal>gf_linsolve()<literal></literal> converts the
+ matrices to CSC).
+
+ The matrices may store REAL or COMPLEX values.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-M=gf_spmat('empty', int m [, int n])
-M=gf_spmat('identity', int n)
-M=gf_spmat('copy', spmat K [,ivec I [, ivec J]])
-M=gf_spmat('mult', spmat A, spmat B)
-M=gf_spmat('add', spmat A, spmat B)
-M=gf_spmat('harwell-boeing', string filename)M=gf_spmat('matrix-market', string filename)
- </synopsis>
+ <synopsis>SM = gf_spmat('empty', int m [, int n])</synopsis>
+ <synopsis>SM = gf_spmat('copy', mat K [, I [, J]])</synopsis>
+ <synopsis>SM = gf_spmat('identity', int n)</synopsis>
+ <synopsis>SM = gf_spmat('mult', spmat A, spmat B)</synopsis>
+ <synopsis>SM = gf_spmat('add', spmat A, spmat B)</synopsis>
+ <synopsis>SM = gf_spmat('diag', mat D [, ivec E [, int n [,int m]]])</synopsis>
+ <synopsis>SM = gf_spmat('load','hb'|'harwell-boeing'|'mm'|'matrix-market', string filename)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para>General constructor for spmat objects.</para>
+
+ <para> Create a new sparse matrix in getfem++ format. These sparse matrix can be stored as CSC (compressed column
+ sparse), which is the format used by Matlab, or they can be stored as WSC
+ (internal format to getfem). The CSC matrices are not writable (it would
+ be very inefficient), but they are optimized for multiplication with
+ vectors, and memory usage. The WSC are writable, they are very fast with
+ respect to random read/write operation. However their memory overhead is
+ higher than CSC matrices, and they are a little bit slower for
+ matrix-vector multiplications.
+
+ By default, all newly created matrices are build as WSC matrices. This can
+ be changed later with <literal></literal>gf_spmat_set(spmat S, 'to_csc',...)<literal></literal>, or may be changed
+ automatically by getfem (for example <literal></literal>gf_linsolve()<literal></literal> converts the
+ matrices to CSC).
+
+ The matrices may store REAL or COMPLEX values.
+</para>
+ </refsection>
- <para>These sparse matrix can be stored as CSC (compressed column sparse),
- which is the format used by Matlab, or they can be stored as WSC (internal
- format to getfem). The CSC matrices are not writable (it would be very
- inefficient), but they are optimized for multiplication with vectors, and
- memory usage. The WSC are writable, they are very fast with respect to
- random read/write operation. However their memory overhead is higher than
- CSC matrices, and they are a little bit slower for matrix-vector
- multiplications. By default, all newly created matrices are build as WSC
- matrices. This can be changed later with
- <emphasis>gf_spmat_set(M,('to_csc',...)</emphasis>, or may be changed
- automatically by getfem (for example gf_linsolve() converts the matrices
- to CSC). The matrices may store REAL or COMPLEX values. </para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_spmat('empty', int m [, int n]) Create a new empty (i.e. full
- of zeros) sparse matrix, of dimensions <emphasis>m x n</emphasis>. If
- <literal>n</literal> is omitted, the matrix dimension is <emphasis>m x
- m</emphasis>. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('copy', mat K [, list I [, list J]]) Duplicate a matrix
- <literal>K</literal> (which might be a Spmat). If (index)
- <literal>I</literal> and/or <literal>J</literal> are given, the matrix
- will be a submatrix of <literal>K</literal>. </para>
-
- <para>For example: <emphasis>M = gf_spmat('copy',
- gf_spmat('empty',50,50), range(40), [6, 7, 8, 3, 10])</emphasis> will
- return a 40x5 matrix. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('identity', int n) Create a <emphasis>n x n</emphasis>
- identity matrix. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('mult', SpMat A, SpMat B) Create a sparse matrix as the
- product of the sparse matrices <literal>A</literal> and
- <literal>B</literal>. It requires that <literal>A</literal> and
- <literal>B</literal> be both real or both complex, you may have to use
- <emphasis>gf_spmat_set(M,('to_complex') </emphasis></para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('add', SpMat A, SpMat B) Create a sparse matrix as the
- sum of the sparse matrices <literal>A</literal> and
- <literal>B</literal>. Adding a real matrix with a complex matrix is
- possible. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,('diag', mat D [, ivec E [, int n [,int m]]])
- Create a diagonal matrix. If <literal>E</literal> is given,
- <literal>D</literal> might be a matrix and each column of
- <literal>E</literal> will contain the sub-diagonal number that will be
- filled with the corresponding column of <literal>D</literal>. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('load','hb'|'harwell-boeing', string filename) Read a
- sparse matrix from an Harwell-Boeing file. </para>
- </listitem>
-
- <listitem>
- <para>gf_spmat('load','mm'|'matrix-market', filename) Read a sparse
- matrix from a Matrix-Market file.</para>
- </listitem>
- </itemizedlist>
- </refsection>
+ <listitem>
+ <para><literal>SM = gf_spmat('empty', int m [, int n])</literal></para>
- <refsection>
- <title>Examples</title>
-
- <programlisting role="example"><![CDATA[
-// TEST EMPTY COPY FULL
-A = gf_spmat('empty', 5,6);
-B = gf_spmat('empty', 11111);
-C = gf_spmat('copy', A);
-C = sprand(50,50,.1); C(2,2)=1+2*%i; I = 1:40; J = [6 7 8 3 10];
-D = gf_spmat('copy', C, I, J);
-DD = gf_spmat_get(D,'full');
-
-// TEST MULT
-A = gf_spmat('identity', 11111);
-C = gf_spmat('mult',A,B);
-n = gf_spmat_get(C,'nnz'); assert('n==0');
-C = gf_spmat('mult',A,A);
-n = gf_spmat_get(C,'nnz'); assert('n==11111');
-M1 = sprand(50,43,.1);
-M2 = sprand(43,14,.3);
-C = gf_spmat('mult',M1,M2);
-C = gf_spmat_get(C, 'full');
-P = full(M1*M2);
- ]]></programlisting>
+ <para> Create a new empty (i.e. full of zeros) sparse matrix, of dimensions
+ <literal>m x n</literal>. If <literal>n</literal> is omitted, the matrix dimension is <literal>m x m</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('copy', mat K [, I [, J]])</literal></para>
+
+ <para> Duplicate a matrix <literal>K</literal> (which might be a spmat). If index <literal>I</literal> and/or <literal>J</literal> are given, the matrix will
+ be a submatrix of <literal>K</literal>. For example::
+
+
+ m = gf_spmat('copy', sprand(50,50,.1), 1:40, [6 7 8 3 10])
+
+
+ will return a 40x5 matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('identity', int n)</literal></para>
+
+ <para> Create a <literal>n x n</literal> identity matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('mult', spmat A, spmat B)</literal></para>
+
+ <para> Create a sparse matrix as the product of the sparse matrices <literal>A</literal> and
+ <literal>B</literal>. It requires that <literal>A</literal> and <literal>B</literal> be both real or both complex, you
+ may have to use <literal></literal>gf_spmat_set(spmat S, 'to_complex')<literal></literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('add', spmat A, spmat B)</literal></para>
+
+ <para> Create a sparse matrix as the sum of the sparse matrices <literal>A</literal> and <literal>B</literal>.
+ Adding a real matrix with a complex matrix is possible.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('diag', mat D [, ivec E [, int n [,int m]]])</literal></para>
+
+ <para> Create a diagonal matrix. If <literal>E</literal> is given, <literal>D</literal> might be a matrix and
+ each column of <literal>E</literal> will contain the sub-diagonal number that will be
+ filled with the corresponding column of <literal>D</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>SM = gf_spmat('load','hb'|'harwell-boeing'|'mm'|'matrix-market', string filename)</literal></para>
+
+ <para> Read a sparse matrix from an Harwell-Boeing or a Matrix-Market file
+ .
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_spmat_get">gf_spmat_get</link></member>
- <member><link linkend="gf_spmat_set">gf_spmat_set</link></member>
- <member><link linkend="gf_util">gf_util</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat_get.xml b/interface/src/scilab/help/en_US/gf_spmat_get.xml
index 5f03a03..c7fab87 100644
--- a/interface/src/scilab/help/en_US/gf_spmat_get.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat_get.xml
@@ -9,136 +9,181 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_spmat_get</refname>
-
- <refpurpose>General getfem sparse matrix inquiry function.</refpurpose>
+ <refpurpose></refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-ivec gf_spmat_get(M,'size')
-int gf_spmat_get(M,'nnz')
-int gf_spmat_get(M,'is_complex')
-string S=gf_spmat_get(M,'storage')
-mat fM=gf_spmat_get(M,'full'[,I [,J]])
-vec tMV=gf_spmat_get(M,'mult', V)
-vec MV=gf_spmat_get(M,'tmult', V)
-vec D=gf_spmat_get(M,'diag'[, E])
-[ivec JC,ivec IR]=gf_spmat_get(M,'csc_ind')
-[vec V]=gf_spmat_get(M,'csc_val')
-[spmat N, vec U0]=gf_spmat_get(H,'dirichlet_nullspace', @vec R)
-string S=gf_spmat_get(sl,'info')gf_spmat_get(sl,'save', string format, string filename)
- </synopsis>
+ <synopsis>n = gf_spmat_get(spmat S, 'nnz')</synopsis>
+ <synopsis>Sm = gf_spmat_get(spmat S, 'full'[, list I[, list J]])</synopsis>
+ <synopsis>MV = gf_spmat_get(spmat S, 'mult', vec V)</synopsis>
+ <synopsis>MtV = gf_spmat_get(spmat S, 'tmult', vec V)</synopsis>
+ <synopsis>D = gf_spmat_get(spmat S, 'diag'[, list E])</synopsis>
+ <synopsis>s = gf_spmat_get(spmat S, 'storage')</synopsis>
+ <synopsis>{ni,nj} = gf_spmat_get(spmat S, 'size')</synopsis>
+ <synopsis>b = gf_spmat_get(spmat S, 'is_complex')</synopsis>
+ <synopsis>{JC, IR} = gf_spmat_get(spmat S, 'csc_ind')</synopsis>
+ <synopsis>V = gf_spmat_get(spmat S, 'csc_val')</synopsis>
+ <synopsis>{N, U0} = gf_spmat_get(spmat S, 'dirichlet nullspace', vec R)</synopsis>
+ <synopsis>gf_spmat_get(spmat S, 'save', string format, string filename)</synopsis>
+ <synopsis>s = gf_spmat_get(spmat S, 'char')</synopsis>
+ <synopsis>gf_spmat_get(spmat S, 'display')</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para></para>
+ </refsection>
- <para> General getfem sparse matrix inquiry function. M might also be a
- native matlab sparse matrix.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>n = gf_spmat_get(M,'nnz') Return the number of non-null values
- stored in the sparse matrix</para>
- </listitem>
-
- <listitem>
- <para>Sm = gf_spmat_get(M,'full'[, list I[, list J]]) Return a full
- (sub-)matrix. The optional arguments <literal>I</literal> and
- <literal>J</literal>, are the sub-intervals for the rows and columns
- that are to be extracted.</para>
- </listitem>
-
- <listitem>
- <para>MV = gf_spmat_get(M,'mult',vec V) Product of the sparse matrix
- <literal>M</literal> with a vector <literal>V</literal>. For
- matrix-matrix multiplications, see gf_spmat('mult').</para>
- </listitem>
-
- <listitem>
- <para>MtV = gf_spmat_get(M,'tmult',vec V) Product of
- <literal>M</literal> transposed (conjugated if M is complex) with the
- vector V.</para>
- </listitem>
-
- <listitem>
- <para>D = gf_spmat_get(M,'diag'[, list E]) Return the diagonal of
- <literal>M</literal> as a vector. If <literal>E</literal> is used,
- return the sub-diagonals whose ranks are given in
- <literal>E</literal>.</para>
- </listitem>
-
- <listitem>
- <para>s = gf_spmat_get(M,'storage') Return the storage type currently
- used for the matrix. The storage is returned as a string, either 'CSC'
- or 'WSC'.</para>
- </listitem>
-
- <listitem>
- <para>list(ni,nj) = gf_spmat_get(M,'size') Return a vector where
- <literal>ni</literal> and <literal>nj</literal> are the dimensions of
- the matrix.</para>
- </listitem>
-
- <listitem>
- <para>b = gf_spmat_get(M,'is_complex') Return 1 if the matrix contains
- complex values.</para>
- </listitem>
-
- <listitem>
- <para>list(JC, IR) = gf_spmat_get(M,'csc_ind') Return the two usual
- index arrays of CSC storage. If <literal>M</literal> is not stored as
- a CSC matrix, it is converted into CSC.</para>
- </listitem>
-
- <listitem>
- <para>V = gf_spmat_get(M,'csc_val') Return the array of values of all
- non-zero entries of <literal>M</literal>. If <literal>M</literal> is
- not stored as a CSC matrix, it is converted into CSC.</para>
- </listitem>
-
- <listitem>
- <para>list(N, U0) = gf_spmat_get(M,'dirichlet nullspace',vec R) Solve
- the dirichlet conditions <emphasis>M.U=R</emphasis>. A solution
- <literal>U0</literal> which has a minimum L2-norm is returned, with a
- sparse matrix <literal>N</literal> containing an orthogonal basis of
- the kernel of the (assembled) constraints matrix <literal>M</literal>
- (hence, the PDE linear system should be solved on this subspace):
- </para>
-
- <para>the initial problem <emphasis>K.U = B</emphasis> with
- constraints <emphasis>M.U = R</emphasis> is replaced by
- <emphasis>(N'.K.N).UU = N'.B</emphasis> with <emphasis>U = N.UU +
- U0</emphasis></para>
- </listitem>
-
- <listitem>
- <para>s = gf_spmat_get(M,'info') Return a string contains a short
- summary on the sparse matrix (dimensions, filling, ...).</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_get(M,'save',string format, string filename) Export the
- sparse matrix. the format of the file may be 'hb' for Harwell-Boeing,
- or 'mm' for Matrix-Market.</para>
- </listitem>
+ <listitem>
+ <para><literal>n = gf_spmat_get(spmat S, 'nnz')</literal></para>
+
+ <para> Return the number of non-null values stored in the sparse matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Sm = gf_spmat_get(spmat S, 'full'[, list I[, list J]])</literal></para>
+
+ <para> Return a full (sub-)matrix.
+
+ The optional arguments <literal>I</literal> and <literal>J</literal>, are the sub-intervals for the
+ rows and columns that are to be extracted.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MV = gf_spmat_get(spmat S, 'mult', vec V)</literal></para>
+
+ <para> Product of the sparse matrix <literal>M</literal> with a vector <literal>V</literal>.
+
+ For matrix-matrix multiplications, see gf_spmat('mult').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>MtV = gf_spmat_get(spmat S, 'tmult', vec V)</literal></para>
+
+ <para> Product of <literal>M</literal> transposed (conjugated if <literal>M</literal> is complex) with the
+ vector <literal>V</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>D = gf_spmat_get(spmat S, 'diag'[, list E])</literal></para>
+
+ <para> Return the diagonal of <literal>M</literal> as a vector.
+
+ If <literal>E</literal> is used, return the sub-diagonals whose ranks are given in E.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_spmat_get(spmat S, 'storage')</literal></para>
+
+ <para> Return the storage type currently used for the matrix.
+
+ The storage is returned as a string, either 'CSC' or 'WSC'.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{ni,nj} = gf_spmat_get(spmat S, 'size')</literal></para>
+
+ <para> Return a vector where <literal>ni</literal> and <literal>nj</literal> are the dimensions of the matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>b = gf_spmat_get(spmat S, 'is_complex')</literal></para>
+
+ <para> Return 1 if the matrix contains complex values.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{JC, IR} = gf_spmat_get(spmat S, 'csc_ind')</literal></para>
+
+ <para> Return the two usual index arrays of CSC storage.
+
+ If <literal>M</literal> is not stored as a CSC matrix, it is converted into CSC.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>V = gf_spmat_get(spmat S, 'csc_val')</literal></para>
+
+ <para> Return the array of values of all non-zero entries of <literal>M</literal>.
+
+ If <literal>M</literal> is not stored as a CSC matrix, it is converted into CSC.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>{N, U0} = gf_spmat_get(spmat S, 'dirichlet nullspace', vec R)</literal></para>
+
+ <para> Solve the dirichlet conditions <literal>M.U=R</literal>.
+
+ A solution <literal>U0</literal> which has a minimum L2-norm is returned, with a
+ sparse matrix <literal>N</literal> containing an orthogonal basis of the kernel of
+ the (assembled) constraints matrix <literal>M</literal> (hence, the PDE linear system
+ should be solved on this subspace): the initial problem
+
+ <literal>K.U = B</literal> with constraints <literal>M.U = R</literal>
+
+ is replaced by
+
+ <literal>(N'.K.N).UU = N'.B</literal> with <literal>U = N.UU + U0</literal>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_get(spmat S, 'save', string format, string filename)</literal></para>
+
+ <para> Export the sparse matrix.
+
+ the format of the file may be 'hb' for Harwell-Boeing, or 'mm'
+ for Matrix-Market.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>s = gf_spmat_get(spmat S, 'char')</literal></para>
+
+ <para> Output a (unique) string representation of the spmat.
+
+ This can be used to perform comparisons between two
+ different spmat objects.
+ This function is to be completed.
+
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_get(spmat S, 'display')</literal></para>
+
+ <para> displays a short summary for a spmat object.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_spmat">gf_spmat</link></member>
- <member><link linkend="gf_spmat_set">gf_spmat_set</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_spmat_set.xml b/interface/src/scilab/help/en_US/gf_spmat_set.xml
index 9e1a6f5..cc2f292 100644
--- a/interface/src/scilab/help/en_US/gf_spmat_set.xml
+++ b/interface/src/scilab/help/en_US/gf_spmat_set.xml
@@ -9,107 +9,141 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_spmat_set</refname>
-
- <refpurpose>Modification of the content of a getfem sparse
- matrix.</refpurpose>
+ <refpurpose> Modification of the content of a getfem sparse matrix.
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_spmat_set(M,'clear'[, I[, J]])
-gf_spmat_set(M,'scale', V)
-gf_spmat_set(M,'transpose')
-gf_spmat_set(M,'conjugate')
-gf_spmat_set(M,'transconj')
-gf_spmat_set(M,'to_csc')
-gf_spmat_set(M,'to_wsc')
-gf_spmat_set(M,'to_complex')
-gf_spmat_set(M,'diag', mat D [, ivec E])
-gf_spmat_set(M,'assign', ivec I, ivec J, V)gf_spmat_set(M,'add', I, J, V)
- </synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'clear'[, list I[, list J]])</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'scale', scalar v)</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'transpose')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'conjugate')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'transconj')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'to_csc')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'to_wsc')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'to_complex')</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'diag', mat D [, ivec E])</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'assign', ivec I, ivec J, mat V)</synopsis>
+ <synopsis>gf_spmat_set(spmat S, 'add', ivec I, ivec J, mat V)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Modification of the content of a getfem sparse matrix.
+ </para>
+ </refsection>
+
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_spmat_set(M,'clear'[, list I[, list J]]) Erase the non-zero
- entries of the matrix. The optional arguments <literal>I</literal> and
- <literal>J</literal> may be specified to clear a sub-matrix instead of
- the entire matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'scale',scalar v) Multiplies the matrix by a
- scalar value `v`.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'transpose') Transpose the matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'conjugate') Conjugate each element of the
- matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'transconj') Transpose and conjugate the
- matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'to_csc') Convert the matrix to CSC storage. CSC
- storage is recommended for matrix-vector multiplications.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'to_wsc') Convert the matrix to WSC storage. Read
- and write operation are quite fast with WSC storage.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'to_wsc') Convert the matrix to WSC storage. Read
- and write operation are quite fast with WSC storage.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'diag',mat D [, ivec E]) Change the diagonal (or
- sub-diagonals) of the matrix. If <literal>E</literal> is given,
- <literal>D</literal> might be a matrix and each column of
- <literal>E</literal> will contain the sub-diagonal number that will be
- filled with the corresponding column of <literal>D</literal>.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'assign',ivec I, ivec J, mat V) Copy
- <literal>V</literal> into the sub-matrix 'M(I,J)'.
- <literal>V</literal> might be a sparse matrix or a full matrix.</para>
- </listitem>
-
- <listitem>
- <para>gf_spmat_set(M,'add',ivec I, ivec J, mat V) Add
- <literal>V</literal> to the sub-matrix 'M(I,J)'. <literal>V</literal>
- might be a sparse matrix or a full matrix.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'clear'[, list I[, list J]])</literal></para>
+
+ <para> Erase the non-zero entries of the matrix.
+
+ The optional arguments <literal>I</literal> and <literal>J</literal> may be specified to clear a
+ sub-matrix instead of the entire matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'scale', scalar v)</literal></para>
+
+ <para> Multiplies the matrix by a scalar value <literal>v</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'transpose')</literal></para>
+
+ <para> Transpose the matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'conjugate')</literal></para>
+
+ <para> Conjugate each element of the matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'transconj')</literal></para>
+
+ <para> Transpose and conjugate the matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'to_csc')</literal></para>
+
+ <para> Convert the matrix to CSC storage.
+
+ CSC storage is recommended for matrix-vector multiplications.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'to_wsc')</literal></para>
+
+ <para> Convert the matrix to WSC storage.
+
+ Read and write operation are quite fast with WSC storage.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'to_complex')</literal></para>
+
+ <para> Store complex numbers.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'diag', mat D [, ivec E])</literal></para>
+
+ <para> Change the diagonal (or sub-diagonals) of the matrix.
+
+ If <literal>E</literal> is given, <literal>D</literal> might be a matrix and each column of <literal>E</literal> will
+ contain the sub-diagonal number that will be filled with the
+ corresponding column of <literal>D</literal>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'assign', ivec I, ivec J, mat V)</literal></para>
+
+ <para> Copy V into the sub-matrix 'M(I,J)'.
+
+ <literal>V</literal> might be a sparse matrix or a full matrix.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_spmat_set(spmat S, 'add', ivec I, ivec J, mat V)</literal></para>
+
+ <para> Add <literal>V</literal> to the sub-matrix 'M(I,J)'.
+
+ <literal>V</literal> might be a sparse matrix or a full matrix.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_spmat_get">gf_spmat_get</link></member>
- <member><link linkend="gf_spmat">gf_spmat</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_util.xml b/interface/src/scilab/help/en_US/gf_util.xml
index e86289e..2f7126d 100644
--- a/interface/src/scilab/help/en_US/gf_util.xml
+++ b/interface/src/scilab/help/en_US/gf_util.xml
@@ -9,56 +9,78 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_util</refname>
-
- <refpurpose>Performs various operations which do not fit elsewhere.</refpurpose>
+ <refpurpose> Performs various operations which do not fit elsewhere.
+</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_util('save matrix',string fmt, string filename, spmat A)
-A = gf_util('load matrix',string fmt, string filename)
-gf_util('trace level', int level)
-gf_util('warning level', int level)
-</synopsis>
+ <synopsis>gf_util('save matrix', string FMT, string FILENAME, mat A)</synopsis>
+ <synopsis>A = gf_util('load matrix', string FMT, string FILENAME)</synopsis>
+ <synopsis>tl = gf_util('trace level' [, int level])</synopsis>
+ <synopsis>tl = gf_util('warning level', int level)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Performs various operations which do not fit elsewhere.
+</para>
+ </refsection>
- <para>Performs various operations which do not fit elsewhere.</para>
+ <refsection>
+ <title>Command list</title>
<itemizedlist>
- <listitem>
- <para>gf_util('save matrix', string FMT, string FILENAME, spmat A):
- Exports a sparse matrix into the file named FILENAME, using
- Harwell-Boeing (FMT='hb') or Matrix-Market (FMT='mm')
- formatting.</para>
- </listitem>
-
- <listitem>
- <para>A = gf_util('load matrix', string FMT, string FILENAME): Imports
- a sparse matrix from a file.</para>
- </listitem>
-
- <listitem>
- <para>gf_util('trace_level',int level): Set the verbosity of some
- getfem++ routines. Typically the messages printed by the model bricks,
- 0 means no trace message (default is 3).</para>
- </listitem>
-
- <listitem>
- <para>gf_util('warning_level',int level): Filter the less important
- warnings displayed by getfem. 0 means no warnings, default level is
- 3.</para>
- </listitem>
+ <listitem>
+ <para><literal>gf_util('save matrix', string FMT, string FILENAME, mat A)</literal></para>
+
+ <para> Exports a sparse matrix into the file named FILENAME, using
+ Harwell-Boeing (FMT='hb') or Matrix-Market (FMT='mm') formatting.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>A = gf_util('load matrix', string FMT, string FILENAME)</literal></para>
+
+ <para> Imports a sparse matrix from a file.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>tl = gf_util('trace level' [, int level])</literal></para>
+
+ <para> Set the verbosity of some getfem++ routines.
+
+ Typically the messages printed by the model bricks, 0 means no
+ trace message (default is 3). if no level is given,
+ the current trace level is returned.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>tl = gf_util('warning level', int level)</literal></para>
+
+ <para> Filter the less important warnings displayed by getfem.
+
+ 0 means no warnings, default level is 3. if no level is given,
+ the current warning level is returned.
+ </para>
+ </listitem>
+
</itemizedlist>
</refsection>
<refsection>
- <title>Authors</title>
+ <title>See Also</title>
+ <simplelist type="inline">
+ <member><link linkend="getfem_types">getfem types</link></member>
+ </simplelist>
+ </refsection>
+ <refsection>
+ <title>Authors</title>
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/gf_workspace.xml b/interface/src/scilab/help/en_US/gf_workspace.xml
index 3bf577f..e23b924 100644
--- a/interface/src/scilab/help/en_US/gf_workspace.xml
+++ b/interface/src/scilab/help/en_US/gf_workspace.xml
@@ -9,123 +9,138 @@
xmlns:db="http://docbook.org/ns/docbook">
<refnamediv>
<refname>gf_workspace</refname>
+ <refpurpose> Getfem workspace management function.
- <refpurpose>Getfem workspace management function.</refpurpose>
+ Getfem uses its own workspaces in Matlab, independently of the
+ matlab workspaces (this is due to some limitations in the memory
+ management of matlab objects). By default, all getfem variables
+ belong to the root getfem workspace. A function can create its own
+ workspace by invoking gf_workspace('push') at its beginning. When
+ exiting, this function MUST invoke gf_workspace('pop') (you can
+ use matlab exceptions handling to do this cleanly when the
+ function exits on an error).
+
+ </refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Calling Sequence</title>
- <synopsis>
-gf_workspace('push')
-gf_workspace('pop' [,hobj i, hobj j,..])
-gf_workspace('stat')
-gf_workspace('stats')
-gf_workspace('keep', hobj i[,hobj j, hobj k..])
-gf_workspace('clear')
-gf_workspace('clear all')
-gf_workspace('class name', hobj i)
- </synopsis>
+ <synopsis>gf_workspace('push')</synopsis>
+ <synopsis>gf_workspace('pop', [,i,j, ...])</synopsis>
+ <synopsis>gf_workspace('stat')</synopsis>
+ <synopsis>gf_workspace('stats')</synopsis>
+ <synopsis>gf_workspace('keep', i[,j,k...])</synopsis>
+ <synopsis>gf_workspace('keep all')</synopsis>
+ <synopsis>gf_workspace('clear')</synopsis>
+ <synopsis>gf_workspace('clear all')</synopsis>
+ <synopsis>gf_workspace('class name', i)</synopsis>
</refsynopsisdiv>
<refsection>
<title>Description</title>
+ <para> Getfem workspace management function.
- <para>Getfem uses its own workspaces in Scilab, independently of the
- scilab workspaces (this is due to some limitations in the memory
- management of scilab objects). By default, all getfem variables belong to
- the root getfem workspace. A function can create its own workspace by
- invoking gf_workspace('push') at its beginning. When exiting, this
- function MUST invoke gf_workspace('pop') (you can use scilab exceptions
- handling to do this cleanly when the function exits on an error).</para>
+ Getfem uses its own workspaces in Matlab, independently of the
+ matlab workspaces (this is due to some limitations in the memory
+ management of matlab objects). By default, all getfem variables
+ belong to the root getfem workspace. A function can create its own
+ workspace by invoking gf_workspace('push') at its beginning. When
+ exiting, this function MUST invoke gf_workspace('pop') (you can
+ use matlab exceptions handling to do this cleanly when the
+ function exits on an error).
- <itemizedlist>
- <listitem>
- <para>gf_workspace('push'): Create a new temporary workspace on
- the workspace stack.</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('pop' [,i,j,..]): Leave the current
- workspace, destroying all getfem objects belonging to it, except
- the one listed after 'pop', and the ones moved to parent
- workspace by gf_workspace('keep').</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('stat'): Print informations about variables
- in current workspace.</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('stats'): Print informations about all getfem
- variables.</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('keep', i[,j,k..]): prevent the listed
- variables i from being deleted when gf_workspace("pop") will be
- called by moving this variable in the parent workspace.</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('clear'): Clear the current workspace.</para>
- </listitem>
-
- <listitem>
- <para>gf_workspace('clear all'): Clear every workspace, and
- returns to the main workspace (you should not need this
- command).</para>
- </listitem>
-
- <listitem>
- <para>S=gf_workspace('class name', i): Return the class name of
- object i (if I is a mesh handle, it return gfMesh etc..)</para>
- </listitem>
- </itemizedlist>
+ </para>
</refsection>
<refsection>
- <title>Examples</title>
-
- <para>If you want to create getfem-matlab object within one of your own m-files, you should follow this template in order to avoid memory leaks.</para>
-
- <programlisting role="example"><![CDATA[
-// First example
-function [a]=foo(x,y,z)
-gf_workspace('push');
-try
- ... // some work here ...
- a = gf_mesh_fem(m); // create a getfem++ object
- b = gf_mesh(x);
- gf_workspace('keep', a); // b will be automatically destroyed at the 'pop'
- ... // other work...
-catch
- gf_workspace('pop'); // cleanup before error
- error(lasterror);
-end
-gf_workspace('pop');
-endfunction
-
-// Second example
-m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
-gf_workspace('stats');
- ]]></programlisting>
+ <title>Command list</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><literal>gf_workspace('push')</literal></para>
+
+ <para> Create a new temporary workspace on the workspace stack.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('pop', [,i,j, ...])</literal></para>
+
+ <para> Leave the current workspace, destroying all getfem objects
+ belonging to it, except the one listed after 'pop', and the ones
+ moved to parent workspace by gf_workspace('keep').
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('stat')</literal></para>
+
+ <para> Print informations about variables in current workspace.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('stats')</literal></para>
+
+ <para> Print informations about all getfem variables.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('keep', i[,j,k...])</literal></para>
+
+ <para> prevent the listed variables from being deleted when
+ gf_workspace("pop") will be called by moving these variables in the
+ parent workspace.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('keep all')</literal></para>
+
+ <para> prevent all variables from being deleted when
+ gf_workspace("pop") will be called by moving the variables in the
+ parent workspace.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('clear')</literal></para>
+
+ <para> Clear the current workspace.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('clear all')</literal></para>
+
+ <para> Clear every workspace, and returns to the main workspace (you
+ should not need this command).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><literal>gf_workspace('class name', i)</literal></para>
+
+ <para> Return the class name of object i (if I is a mesh handle, it
+ return gfMesh etc..)
+ </para>
+ </listitem>
+
+ </itemizedlist>
</refsection>
<refsection>
<title>See Also</title>
-
<simplelist type="inline">
- <member><link linkend="gf_delete">gf_delete</link></member>
- <member><link linkend="gf_mesh">gf_mesh</link></member>
- <member><link linkend="gf_mesh_fem">gf_mesh_fem</link></member>
+ <member><link linkend="getfem_types">getfem types</link></member>
</simplelist>
</refsection>
<refsection>
<title>Authors</title>
-
<para>Y. Collette</para>
</refsection>
+
</refentry>
diff --git a/interface/src/scilab/help/en_US/preliminary.xml b/interface/src/scilab/help/en_US/preliminary.xml
index 192db33..f52b64d 100644
--- a/interface/src/scilab/help/en_US/preliminary.xml
+++ b/interface/src/scilab/help/en_US/preliminary.xml
@@ -86,13 +86,7 @@
of the PDE. But most PDEs involve various coefficients, for
example:</para>
- <para><inlineequation>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="../mml/preliminary_eq1.mml" />
- </imageobject>
- </inlinemediaobject>
- </inlineequation></para>
+ <para><latex align="center"><![CDATA[\nabla\cdot\left(\lambda\left(x\right)\nabla u\right)=f\left(x\right)]]></latex></para>
<para>Hence one has to define a FEM for the main unknown u, but also for
the data λ(x) and f(x) if they are not constant. In order to interpolate
diff --git a/interface/src/scilab/help/en_US/sparses/sp_luinc.xml b/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
index 7e1661d..92e976a 100644
--- a/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
+++ b/interface/src/scilab/help/en_US/sparses/sp_luinc.xml
@@ -91,7 +91,7 @@
<member><link linkend="sp_cgs">sp_cgs</link></member>
<member><link linkend="sp_cgne">sp_sgne</link></member>
<member><link linkend="sp_gmres">sp_gmres</link></member>
- <member><link linkend="sp_mcgr">sp_mcgr</link></member>
+ <member><link linkend="sp_mgcr">sp_mgcr</link></member>
<member><link linkend="sp_chsolve">sp_chsolve</link></member>
<member><link linkend="sp_lusolve">sp_lusolve</link></member>
</simplelist>
diff --git a/interface/src/scilab/jar/scilab_en_US_help.jar b/interface/src/scilab/jar/scilab_en_US_help.jar
index 9ad9343..3bfa848 100644
Binary files a/interface/src/scilab/jar/scilab_en_US_help.jar and b/interface/src/scilab/jar/scilab_en_US_help.jar differ
diff --git a/interface/src/scilab/jar/scilab_fr_FR_help.jar b/interface/src/scilab/jar/scilab_fr_FR_help.jar
deleted file mode 100644
index 5f3eabb..0000000
Binary files a/interface/src/scilab/jar/scilab_fr_FR_help.jar and /dev/null differ
diff --git a/interface/src/scilab/loader.sce b/interface/src/scilab/loader.sce
index 525a433..d995d5c 100644
--- a/interface/src/scilab/loader.sce
+++ b/interface/src/scilab/loader.sce
@@ -1,15 +1,10 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder.sce: Please, do not edit this file
-//
+
try
- v = getversion('scilab');
+ getversion("scilab");
catch
- warning('Scilab 5.0 or more is required.');
- return;
+ error("Scilab 5.0 or more is required.");
end;
-// ====================================================================
-root_tlbx = get_absolute_file_path('loader.sce');
-exec(root_tlbx+'etc/'+'sci_getfem.start');
-// ====================================================================
-clear root_tlbx;
-// ====================================================================
+
+exec(get_absolute_file_path("loader.sce")+"etc/"+"sci_getfem.start");
diff --git a/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci b/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
index 50a6366..1125272 100644
--- a/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
+++ b/interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
@@ -72,7 +72,8 @@ if typeof(_what)=='list' then
x = xpos;
y = ypos;
z = zpos;
- X(i,dof+j-1) = eval(_what(i)(j));
+ //X(i,dof+j-1) = eval(_what(i)(j));
+ X(i,dof+j-1) = evstr(_what(i)(j));
elseif ((typeof(_what(i)(j))=='function')|(typeof(_what(i)(j))=='fptr')) then
X(i,dof+j-1) = feval(xpos,ypos,zpos,_what(i)(j));
else
diff --git a/interface/src/scilab/macros/gf_plot_1D.sci b/interface/src/scilab/macros/gf_plot_1D.sci
index b4b1388..31abdc1 100644
--- a/interface/src/scilab/macros/gf_plot_1D.sci
+++ b/interface/src/scilab/macros/gf_plot_1D.sci
@@ -1,12 +1,12 @@
function [hline, hdof] = gf_plot_1D(mf,U, varargin)
// function h=gf_plot_1D(mf,U,...)
-// this function plots a 1D finite elements field.
+// this function plots a 1D finite element field.
//
-// The options are specified as pairs of 'option name'/'option value'
-// 'style', 'bo-' : the line style and dof marker style (same
-// syntax as in the matlab command 'plot').
-// 'color', [] : override the line color.
-// 'dof_color', [1,0,0] : color of the markers for the degrees of freedom.
+// Available options are specified as pairs of 'option name'/'option value'
+// 'style', 'bo-' : line style and dof marker style (same
+// syntax as in the Scilab command 'plot');
+// 'color', '' : override line color (by a given color name);
+// 'dof_color', '' : override color of dof markers;
// 'width', 2 : line width.
opts = build_options_list(varargin(:));
@@ -27,20 +27,23 @@ endfunction
function [hline, hdof] = gf_plot_1D_aux(mf, U, opts)
[opt_style,err] = get_param(opts,'style','bo-');
-[opt_dof_marker,err] = get_param(opts,'dof_marker','');
+[opt_color,err] = get_param(opts,'color','');
+[opt_dof_color,err] = get_param(opts,'dof_color','');
[opt_width,err] = get_param(opts,'width',2);
-[opt_dof_color,err] = get_param(opts,'dof_color',[1 0 0]);
-// try to remove markers from the line style
+// remove eventual markers from the line style
s = opt_style;
opt_style = '';
opt_dof_marker = '';
-for i=s
- if (isempty(strindex('ox+*sdv^<>ph',i))) then
- opt_style = [opt_style i];
- else
- opt_dof_marker = i;
+for i = 1:length(s)
+ if (isempty(strindex('ox+*.sdv^<>p', part(s, i)))) then
+ opt_style = opt_style + part(s, i);
+ elseif i == 1 then
+ opt_dof_marker = part(s, i);
+ elseif '-.' == part(s, [i-1,i]) then
+ opt_style = opt_style + '.';
+ else opt_dof_marker = part(s, i);
end
end
@@ -56,25 +59,36 @@ else
REFINE = 2;
end
-m = gf_mesh_fem_get(mf, 'linked_mesh');
-sl = gf_slice(list('none'),m, REFINE);
+m = gf_mesh_fem_get(mf, 'linked_mesh');
+sl = gf_slice(list('none'),m, REFINE);
Usl = gf_compute(mf,U,'interpolate on', sl);
-D = unique(gf_mesh_fem_get(mf, 'dof nodes'));
+D = unique(gf_mesh_fem_get(mf, 'basic dof nodes'));
slD = gf_slice('points', m, D);
-UD = gf_compute(mf,U,'interpolate on',slD);
+UD = gf_compute(mf,U,'interpolate on',slD);
X = gf_slice_get(sl, 'pts');
Y = Usl;
plot(X, Y, opt_style);
hline = gce();
hline.children.thickness = opt_width;
-if (~isempty(opt_color)) then
- hline.children.line_style = opt_color;
+if (~isempty(opt_color)) then
+ hline.children.foreground = color(opt_color);
end
hdof = [];
if (~isempty(opt_dof_marker)) then
- hdof = plot2d(gf_slice_get(slD, 'pts'), UD, opt_dof_marker); // opt_dof_marker must be < 0
+ // add color to the marker if it is given in opt_style
+ for i = 1:length(opt_style)
+ if (~isempty(strindex('rgbcmykw', part(opt_style, i)))) then
+ opt_dof_marker = part(s, i) + opt_dof_marker;
+ end
+ end
+
+ plot(gf_slice_get(slD, 'pts'), UD, opt_dof_marker);
+ hdof = gce();
+ if (~isempty(opt_color)) then
+ hdof.children.mark_foreground = color(opt_dof_color);
+ end
end
endfunction
diff --git a/interface/src/scilab/macros/gf_plot_mesh.sci b/interface/src/scilab/macros/gf_plot_mesh.sci
index ee0336d..5816f70 100644
--- a/interface/src/scilab/macros/gf_plot_mesh.sci
+++ b/interface/src/scilab/macros/gf_plot_mesh.sci
@@ -149,18 +149,22 @@ if (mdim > 3) then error('sorry, only mesh of dimension <= 3 allowed'); end;
disp('plotting mesh...');
if (mdim <= 2) then
if (ison(o_edges)) then
+ drawlater;
plot(X, Y);
hmesh = gce();
hmesh.children(:).thickness = o_edges_width;
hmesh.children(:).line_style = 0; // Continous lines
- hmesh.children(:).foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+ hmesh.children(:).foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+ drawnow;
end
for bnum=1:length(o_boundaries),
+ drawlater;
plot(bedge(bnum)(:,:,1), bedge(bnum)(:,:,2));
hbound(bnum) = gce();
hbound(bnum).children(:).thickness = 2;
hbound(bnum).children(:).line_style = 0; // Continous lines
hbound(bnum).children(:).foreground = 5;
+ drawnow;
end
if (ison(o_vertices)) then
xstring(PXY(1,PID)+ecart(1), PXY(2,PID)+ecart(2), string(double(PID)));
@@ -189,18 +193,22 @@ if (mdim > 3) then error('sorry, only mesh of dimension <= 3 allowed'); end;
end
else
if (ison(o_edges)) then
+ drawlater;
plot3d(X, Y, Z); // 'Color',o_edges_color,'LineWidth',o_edges_width
hmesh = gce();
hmesh.thickness = o_edges_width;
//hmesh.children(:).line_style = 0; // Continuous line
- hmesh.foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+ hmesh.foreground = color(round(255*o_edges_color(1)),round(255*o_edges_color(2)),round(255*o_edges_color(3)));
+ drawnow;
end
for bnum=1:length(o_boundaries),
+ drawlater;
plot3d(bedge(bnum)(:,:,1), bedge(bnum)(:,:,2), bedge(bnum)(:,:,3)); // 'Color','red','LineWidth',2);
hbound(bnum) = gce();
- hbound(bnum).children(:).thickness = 2;
- hbound(bnum).children(:).line_style = 0; // Continuous line
- hbound(bnum).children(:).foreground = 5; // Red
+ hbound(bnum).thickness = 2;
+ hbound(bnum).line_style = 0; // Continuous line
+ hbound(bnum).foreground = 5; // Red
+ drawnow;
end
if (ison(o_vertices)) then
for i=1:length(PID)
diff --git a/interface/src/scilab/macros/gf_solve.sci b/interface/src/scilab/macros/gf_solve.sci
index 2cb1ddb..b55876a 100644
--- a/interface/src/scilab/macros/gf_solve.sci
+++ b/interface/src/scilab/macros/gf_solve.sci
@@ -307,14 +307,14 @@ function [U,P] = do_solve_stokes_cg3(K,B,Fu,Fp)
nu = size(K,2);
np = size(B,2);
-disp('solve stokes usawa cholinc');
+disp('solve stokes uzawa cholinc');
//[pcB] = sp_cholinc(K,'0'); YC: '0' option ??
[pcB] = sp_cholinc(K);
pcBt = pcB';
-disp('solve stokes usawa first pcg');
+disp('solve stokes uzawa first pcg');
P = zeros(np,1);
U = pcg(K,Fu - B*P,1e-6,100,pcBt,pcB); // YC: ??
-disp('solve stokes usawa : got U');
+disp('solve stokes uzawa : got U');
for k=1:10000,
r = Fp - B'*U;
res = norm(r);
diff --git a/interface/src/scilab/macros/overload/%objid_e.sci b/interface/src/scilab/macros/overload/%objid_e.sci
index eb01af1..d4b3176 100644
--- a/interface/src/scilab/macros/overload/%objid_e.sci
+++ b/interface/src/scilab/macros/overload/%objid_e.sci
@@ -8,57 +8,63 @@ function varargout = %objid_e(varargin)
select gf_obj('cid')
case 0 then
+ // gfContStruct
+ varargout = gf_cont_struct_get(gf_obj,other_param);
+ case 1 then
// gfCvStruct
varargout = gf_cvstruct_get(gf_obj,other_param);
- case 1 then
+ case 2 then
// gfEltm
// No gf_eltm_get function
- case 2 then
+ case 3 then
// gfFem
varargout = gf_fem_get(gf_obj,other_param);
- case 3 then
+ case 4 then
// gfGeoTrans
varargout = gf_geotrans_get(gf_obj,other_param);
- case 4 then
+ case 5 then
// gfGlobalFunction
varargout = gf_global_function_get(gf_obj,other_param);
- case 5 then
+ case 6 then
// gfInteg
varargout = gf_integ_get(gf_obj,other_param);
- case 6 then
+ case 7 then
// gfLevelSet
varargout = gf_levelset_get(gf_obj,other_param);
- case 7 then
+ case 8 then
// gfMdBrick
varargout = gf_mdbrick_get(gf_obj,other_param);
- case 8 then
+ case 9 then
// gfMdState
varargout = gf_mdstate_get(gf_obj,other_param);
- case 9 then
+ case 10 then
// gfMesh
varargout = gf_mesh_get(gf_obj,other_param);
- case 10 then
+ case 11 then
// gfMeshFem
varargout = gf_mesh_fem_get(gf_obj,other_param);
- case 11 then
+ case 12 then
// gfMeshIm
varargout = gf_mesh_im_get(gf_obj,other_param);
- case 12 then
+ case 13 then
// gfMeshLevelSet
varargout = gf_mesh_levelset_get(gf_obj,other_param);
- case 13 then
+ case 14 then
+ // gfMesherObject
+ varargout = gf_mesher_object_get(gf_obj,other_param);
+ case 15 then
// gfModel
varargout = gf_model_get(gf_obj,other_param);
- case 14 then
+ case 16 then
// gfPrecond
varargout = gf_precond_get(gf_obj,other_param);
- case 15 then
+ case 17 then
// gfSlice
varargout = gf_slice_get(gf_obj,other_param);
- case 16 then
+ case 18 then
// gfSpmat
varargout = gf_spmat_get(gf_obj,other_param);
- case 17 then
+ case 19 then
// gfPoly
// No gf_poly_get function
else
diff --git a/interface/src/scilab/macros/overload/%objid_get.sci b/interface/src/scilab/macros/overload/%objid_get.sci
index 878f58c..b2e8bfc 100644
--- a/interface/src/scilab/macros/overload/%objid_get.sci
+++ b/interface/src/scilab/macros/overload/%objid_get.sci
@@ -8,57 +8,63 @@ function varargout = %objid_get(varargin)
select gf_obj('cid')
case 0 then
+ // gfContStruct
+ varargout = gf_cont_struct_get(gf_obj,other_param(:));
+ case 1 then
// gfCvStruct
varargout = gf_cvstruct_get(gf_obj,other_param(:));
- case 1 then
+ case 2 then
// gfEltm
// No gf_eltm_get function
- case 2 then
+ case 3 then
// gfFem
varargout = gf_fem_get(gf_obj,other_param(:));
- case 3 then
+ case 4 then
// gfGeoTrans
varargout = gf_geotrans_get(gf_obj,other_param(:));
- case 4 then
+ case 5 then
// gfGlobalFunction
varargout = gf_global_function_get(gf_obj,other_param(:));
- case 5 then
+ case 6 then
// gfInteg
varargout = gf_integ_get(gf_obj,other_param(:));
- case 6 then
+ case 7 then
// gfLevelSet
varargout = gf_levelset_get(gf_obj,other_param(:));
- case 7 then
+ case 8 then
// gfMdBrick
varargout = gf_mdbrick_get(gf_obj,other_param(:));
- case 8 then
+ case 9 then
// gfMdState
varargout = gf_mdstate_get(gf_obj,other_param(:));
- case 9 then
+ case 10 then
// gfMesh
varargout = gf_mesh_get(gf_obj,other_param(:));
- case 10 then
+ case 11 then
// gfMeshFem
varargout = gf_mesh_fem_get(gf_obj,other_param(:));
- case 11 then
+ case 12 then
// gfMeshIm
varargout = gf_mesh_im_get(gf_obj,other_param(:));
- case 12 then
+ case 13 then
// gfMeshLevelSet
varargout = gf_mesh_levelset_get(gf_obj,other_param(:));
- case 13 then
+ case 14 then
+ // gfMesherObject
+ varargout = gf_mesher_object_get(gf_obj,other_param(:));
+ case 15 then
// gfModel
varargout = gf_model_get(gf_obj,other_param(:));
- case 14 then
+ case 16 then
// gfPrecond
varargout = gf_precond_get(gf_obj,other_param(:));
- case 15 then
+ case 17 then
// gfSlice
varargout = gf_slice_get(gf_obj,other_param(:));
- case 16 then
+ case 18 then
// gfSpmat
varargout = gf_spmat_get(gf_obj,other_param(:));
- case 17 then
+ case 19 then
// gfPoly
// No gf_poly_get function
else
diff --git a/interface/src/scilab/macros/overload/%objid_set.sci b/interface/src/scilab/macros/overload/%objid_set.sci
index 56e90dc..7cbf9f2 100644
--- a/interface/src/scilab/macros/overload/%objid_set.sci
+++ b/interface/src/scilab/macros/overload/%objid_set.sci
@@ -7,57 +7,63 @@ function %objid_set(varargin)
select gf_obj('cid')
case 0 then
+ // gfContStruct
+ // No gf_cont_struct_set function
+ case 1 then
// gfCvStruct
// No gf_cvstruct_set function
- case 1 then
+ case 2 then
// gfEltm
// No gf_eltm_set function
- case 2 then
+ case 3 then
// gfFem
// No gf_fem_set function
- case 3 then
+ case 4 then
// gfGeoTrans
// No gf_geotrans_set function
- case 4 then
+ case 5 then
// gfGlobalFunction
// No gf_global_function_set function
- case 5 then
+ case 6 then
// gfInteg
// No gf_integ_set function
- case 6 then
+ case 7 then
// gfLevelSet
gf_levelset_set(gf_obj,other_param(:));
- case 7 then
+ case 8 then
// gfMdBrick
gf_mdbrick_set(gf_obj,other_param(:));
- case 8 then
+ case 9 then
// gfMdState
gf_mdstate_set(gf_obj,other_param(:));
- case 9 then
+ case 10 then
// gfMesh
gf_mesh_set(gf_obj,other_param(:));
- case 10 then
+ case 11 then
// gfMeshFem
gf_mesh_fem_set(gf_obj,other_param(:));
- case 11 then
+ case 12 then
// gfMeshIm
gf_mesh_im_set(gf_obj,other_param(:));
- case 12 then
+ case 13 then
// gfMeshLevelSet
gf_mesh_levelset_set(gf_obj,other_param(:));
- case 13 then
+ case 14 then
+ // gfMesherObject
+ // No gf_mesher_object_set function
+ case 15 then
// gfModel
gf_model_set(gf_obj,other_param(:));
- case 14 then
+ case 16 then
// gfPrecond
// No gf_precond_set function
- case 15 then
+ case 17 then
// gfSlice
gf_slice_set(gf_obj,other_param(:));
- case 16 then
+ case 18 then
// gfSpmat
gf_spmat_set(gf_obj,other_param(:));
- case 17 then
+ case 19 then
// gfPoly
// No gf_poly_set function
else
diff --git a/interface/src/scilab/macros/overload/gf_typeof.sci b/interface/src/scilab/macros/overload/gf_typeof.sci
index 944de77..8826df6 100644
--- a/interface/src/scilab/macros/overload/gf_typeof.sci
+++ b/interface/src/scilab/macros/overload/gf_typeof.sci
@@ -10,40 +10,44 @@ function res = gf_typeof(gf_var)
select gf_var('cid')
case 0 then
- res = 'gfCvStruct';
+ res = 'gfContStruct';
case 1 then
- res = 'gfEltm';
+ res = 'gfCvStruct';
case 2 then
- res = 'gfFem';
+ res = 'gfEltm';
case 3 then
- res = 'gfGeoTrans';
+ res = 'gfFem';
case 4 then
- res = 'gfGlobalFunction';
+ res = 'gfGeoTrans';
case 5 then
- res = 'gfInteg';
+ res = 'gfGlobalFunction';
case 6 then
- res = 'gfLevelSet';
+ res = 'gfInteg';
case 7 then
- res = 'gfMdBrick';
+ res = 'gfLevelSet';
case 8 then
- res = 'gfMdState';
+ res = 'gfMdBrick';
case 9 then
- res = 'gfMesh';
+ res = 'gfMdState';
case 10 then
- res = 'gfMeshFem';
+ res = 'gfMesh';
case 11 then
- res = 'gfMeshIm';
+ res = 'gfMeshFem';
case 12 then
- res = 'gfMeshLevelSet';
+ res = 'gfMeshIm';
case 13 then
- res = 'gfModel';
+ res = 'gfMeshLevelSet';
case 14 then
- res = 'gfPrecond';
+ res = 'gfMesherObject';
case 15 then
- res = 'gfSlice';
+ res = 'gfModel';
case 16 then
- res = 'gfSpmat';
+ res = 'gfPrecond';
case 17 then
+ res = 'gfSlice';
+ case 18 then
+ res = 'gfSpmat';
+ case 19 then
res = 'gfPoly';
else
error('wrong object ID');
diff --git a/interface/src/scilab/macros/overload/init_gf_types.sce b/interface/src/scilab/macros/overload/init_gf_types.sce
index 64d4953..bb18f69 100644
--- a/interface/src/scilab/macros/overload/init_gf_types.sce
+++ b/interface/src/scilab/macros/overload/init_gf_types.sce
@@ -16,4 +16,6 @@ gfSpmat = gf_spmat;
gfPrecond = gf_precond;
gfLevelSet = gf_levelset;
gfMeshLevelSet = gf_mesh_levelset;
+gfMesherObject = gf_mesher_object;
+gfContStruct = gf_cont_struct;
gfGlobalFunction = gf_global_function;
diff --git a/interface/src/scilab/readme.txt b/interface/src/scilab/readme.txt
index 05c4a2b..0ad580b 100644
--- a/interface/src/scilab/readme.txt
+++ b/interface/src/scilab/readme.txt
@@ -1,6 +1,6 @@
readme.txt of the scilab getfem interface
-To compile this interface, you will need to work with the scilab-5.2.0
+To compile this interface, you will need to work with the scilab-5.2.2
version or the scilab-master version (the version in the git
repository) because this interface uses the new interface api.
@@ -28,4 +28,33 @@ You can try to launch a demo (be careful, there is a lot of work needed before t
- cd demos
- exec demo_static_contact.sce;
-Y. Collette (ycollet at freesurf dot fr)
+
+* Some hints for the compilation of this toolbox under windows.
+
+For the compilation of the toolbox under windows:
+- compile getfem + getfem interface using the visual studio 2010 project.
+ copy the lib files (from msvc2010/Release) into scilab/src/win32 or
+ src/win64
+ If you plan to add support for qhull and muparser in the windows
+ library, you must add:
+ - for qhull:
+ - GETFEM_HAVE_QHULL_QHULL_H in the preprocessor
+ - the path to the include where we can find qhull/qhull.h
+ - for muparser:
+ - GETFEM_HAVE_MUPARSER_H in the preprocessor
+ - the path to the include where we can find muParser.h
+
+- download and compile statically qhull using visual studio 2010.
+ copy libqhull.lib into scilab/src/win32 ou src/win64
+
+- download and compile statically muparser using visual studio 2010.
+ copy libmuparser.lib into scilab/src/win32 ou src/win64
+
+Now, you can go into the scilab directory.
+Launch Scilab and do:
+
+exec builder.sce;
+
+Best regards,
+
+Y. Collette (ycollette dot nospam at free dot fr)
diff --git a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
index 87288a6..f234524 100644
--- a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
+++ b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce
@@ -5,82 +5,132 @@
// ====================================================================
sci_getfem_path = get_absolute_file_path('builder_gateway_c.sce');
-getfem_path = '/home/renard/goulp/source++/getfem';
+getfem_path = '/home/renard/temp/getfem-4.2';
-Table = ['gf_util', 'sci_gf_scilab'; ...
+// Functions extracted from getfem_interface.cc
+
+Table = ['gf_workspace', 'sci_gf_scilab'; ...
+ 'gf_delete', 'sci_gf_scilab'; ...
+ 'gf_undelete', 'sci_gf_scilab'; ...
+ 'gf_eltm', 'sci_gf_scilab'; ...
+ 'gf_geotrans', 'sci_gf_scilab'; ...
+ 'gf_geotrans_get', 'sci_gf_scilab'; ...
+ 'gf_integ', 'sci_gf_scilab'; ...
+ 'gf_integ_get', 'sci_gf_scilab'; ...
+ 'gf_global_function', 'sci_gf_scilab'; ...
+ 'gf_global_function_get', 'sci_gf_scilab'; ...
+ 'gf_fem', 'sci_gf_scilab'; ...
+ 'gf_fem_get', 'sci_gf_scilab'; ...
'gf_cvstruct_get', 'sci_gf_scilab'; ...
- 'gf_geotrans', 'sci_gf_scilab'; ...
- 'gf_geotrans_get', 'sci_gf_scilab'; ...
- 'gf_compute', 'sci_gf_scilab'; ...
- 'gf_mesh_fem', 'sci_gf_scilab'; ...
- 'gf_mesh_fem_set', 'sci_gf_scilab'; ...
- 'gf_mesh_fem_get', 'sci_gf_scilab'; ...
- 'gf_mesh_im', 'sci_gf_scilab'; ...
- 'gf_mesh_im_set', 'sci_gf_scilab'; ...
- 'gf_mesh_im_get', 'sci_gf_scilab'; ...
- 'gf_eltm', 'sci_gf_scilab'; ...
- 'gf_mesh', 'sci_gf_scilab'; ...
- 'gf_mesh_set', 'sci_gf_scilab'; ...
- 'gf_mesh_get', 'sci_gf_scilab'; ...
- 'gf_mdbrick', 'sci_gf_scilab'; ...
- 'gf_mdbrick_get', 'sci_gf_scilab'; ...
- 'gf_mdbrick_set', 'sci_gf_scilab'; ...
- 'gf_mdstate', 'sci_gf_scilab'; ...
- 'gf_mdstate_get', 'sci_gf_scilab'; ...
- 'gf_mdstate_set', 'sci_gf_scilab'; ...
- 'gf_model', 'sci_gf_scilab'; ...
- 'gf_model_get', 'sci_gf_scilab'; ...
- 'gf_model_set', 'sci_gf_scilab'; ...
- 'gf_slice', 'sci_gf_scilab'; ...
- 'gf_slice_get', 'sci_gf_scilab'; ...
- 'gf_slice_set', 'sci_gf_scilab'; ...
- 'gf_levelset', 'sci_gf_scilab'; ...
- 'gf_levelset_get', 'sci_gf_scilab'; ...
- 'gf_levelset_set', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset_get', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset_set', 'sci_gf_scilab'; ...
- 'gf_precond', 'sci_gf_scilab'; ...
- 'gf_precond_get', 'sci_gf_scilab'; ...
- 'gf_linsolve', 'sci_gf_scilab'; ...
- 'gf_spmat', 'sci_gf_scilab'; ...
- 'gf_spmat_set', 'sci_gf_scilab'; ...
- 'gf_spmat_get', 'sci_gf_scilab'; ...
- 'gf_asm', 'sci_gf_scilab'; ...
- 'gf_fem', 'sci_gf_scilab'; ...
- 'gf_fem_get', 'sci_gf_scilab'; ...
- 'gf_integ', 'sci_gf_scilab'; ...
- 'gf_integ_get', 'sci_gf_scilab'; ...
- 'gf_workspace', 'sci_gf_scilab'; ...
- 'gf_delete', 'sci_gf_scilab'; ...
- 'gf_undelete', 'sci_gf_scilab'; ...
- 'gf_global_function', 'sci_gf_scilab'; ...
- 'gf_global_function_get', 'sci_gf_scilab'; ...
- 'sp_luinc', 'sci_spluinc'; ...
- 'sp_lu', 'sci_splu'; ...
- 'sp_lusolve', 'sci_splusolve'; ...
- 'sp_cholinc', 'sci_spcholinc'; ...
- 'sp_chol', 'sci_spchol'; ...
- 'sp_chsolve', 'sci_spchsolve'; ...
- 'sp_cgne', 'sci_spcgne'; ...
- 'sp_cgs', 'sci_spcgs'; ...
- 'sp_gmres', 'sci_spgmres'; ...
- 'sp_mgcr', 'sci_spmgcr'];
-
-Files = ['gfm_common.c','gfm_scilab.c','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
+ 'gf_mesher_object', 'sci_gf_scilab'; ...
+ 'gf_mesher_object_get', 'sci_gf_scilab'; ...
+ 'gf_mesh', 'sci_gf_scilab'; ...
+ 'gf_mesh_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_im', 'sci_gf_scilab'; ...
+ 'gf_mesh_im_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_im_set', 'sci_gf_scilab'; ...
+ 'gf_mdbrick', 'sci_gf_scilab'; ...
+ 'gf_mdbrick_get', 'sci_gf_scilab'; ...
+ 'gf_mdbrick_set', 'sci_gf_scilab'; ...
+ 'gf_mdstate', 'sci_gf_scilab'; ...
+ 'gf_mdstate_get', 'sci_gf_scilab'; ...
+ 'gf_mdstate_set', 'sci_gf_scilab'; ...
+ 'gf_model', 'sci_gf_scilab'; ...
+ 'gf_model_get', 'sci_gf_scilab'; ...
+ 'gf_model_set', 'sci_gf_scilab'; ...
+ 'gf_slice', 'sci_gf_scilab'; ...
+ 'gf_slice_get', 'sci_gf_scilab'; ...
+ 'gf_slice_set', 'sci_gf_scilab'; ...
+ 'gf_levelset', 'sci_gf_scilab'; ...
+ 'gf_levelset_get', 'sci_gf_scilab'; ...
+ 'gf_levelset_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset_set', 'sci_gf_scilab'; ...
+ 'gf_asm', 'sci_gf_scilab'; ...
+ 'gf_compute', 'sci_gf_scilab'; ...
+ 'gf_precond', 'sci_gf_scilab'; ...
+ 'gf_precond_get', 'sci_gf_scilab'; ...
+ 'gf_spmat', 'sci_gf_scilab'; ...
+ 'gf_spmat_get', 'sci_gf_scilab'; ...
+ 'gf_spmat_set', 'sci_gf_scilab'; ...
+ 'gf_linsolve', 'sci_gf_scilab'; ...
+ 'gf_util', 'sci_gf_scilab'; ...
+ 'gf_exit', 'sci_gf_scilab'; ...
+ 'gf_cont_struct_get', 'sci_gf_scilab'; ...
+ 'gf_cont_struct', 'sci_gf_scilab'];
+
+// Special functions added for matlab compatibility
+
+Table = [Table; ...
+ 'sp_luinc', 'sci_spluinc'; ...
+ 'sp_lu', 'sci_splu'; ...
+ 'sp_lusolve', 'sci_splusolve'; ...
+ 'sp_cholinc', 'sci_spcholinc'; ...
+ 'sp_chol', 'sci_spchol'; ...
+ 'sp_chsolve', 'sci_spchsolve'; ...
+ 'sp_cgne', 'sci_spcgne'; ...
+ 'sp_cgs', 'sci_spcgs'; ...
+ 'sp_gmres', 'sci_spgmres'; ...
+ 'sp_mgcr', 'sci_spmgcr'];
+
+Files = ['gfm_common.c','gfm_scilab.cpp','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
'sci_cgne.c','sci_cgs.c','sci_gmres.c','sci_mgcr.c','sci_spchsolve.c','sci_splusolve.c'];
+
Libraries = ['../../src/c/libsp_get'];
-cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
-cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
-cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+if getos()=='Windows' then
+ getfem_path = pwd() + '\..\..\..\';
+
+ cflags = ' /I' + sci_getfem_path + ' /I' + sci_getfem_path + '/../../src/c';
+ cflags = cflags + ' /I' + getfem_path + '/interface/src/' + ' /I' + getfem_path + '/src/getfem';
+ cflags = cflags + ' /I' + SCI + '/../../include/scilab'; // For the binary distribution
+ cflags = cflags + ' /D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+ ldflags = getfem_path + 'msvc2010\Release\libgetfemint.lib ';
+ ldflags = ldflags + getfem_path + 'msvc2010\Release\libgetfem.lib ';
+ ldflags = ldflags + getfem_path + 'msvc2010\Release\superlu.lib ';
+ if (isfile(getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib')) then
+ ldflags = ldflags + getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib ';
+ end
+ if (isfile(getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib')) then
+ ldflags = ldflags + getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib ';
+ end
+
+ // Under windows, scilab ships only sparse_f.dll
+ // We need first to recreate the lib part
+
+ // * Here are the mingw commands necessary to produce this lib library:
+ // echo EXPORT > sparse_f.def
+ // nm sparse_f.dll | grep 'T_' | sed 's/.* T _//' > sparse_f.def
+ // dll_tool --def sparse_f.def --dllname sparse_f.dll --outputfile sparse_f.lib
+ // * Here are the visual commands necessary to produce this lib library:
+ // dumpbin /exports sparse_f.dll > sparse_f.def
+ // Edit sparse_f.def, add 'EXPORTS' on the first line and remove all the
+ // cryptic symbols except the symbol name.
+ // Now produce the lib file: lib /def:sparse_f.def /OUT:sparse_f.lib
+
+ ldflags = ldflags + ' ' + SCI + '/bin/sparse_f.lib';
+
+ // ldflags = ldflags + ' /NODEFAULTLIB:LIBCMT';
+else
+ cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
+ cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
+ cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+ cflags = cflags + ' -D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+ ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
+end
-ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
-if ~isempty('-lqhull') then
+if ~isempty('-lqhull') & getos()~='Windows' then
ldflags = ldflags + ' -L/usr/lib -lqhull';
end
-if ~isempty('-lmuparser') then
+if ~isempty('-lmuparser') & getos()~='Windows' then
ldflags = ldflags + ' -L/usr/lib -lmuparser';
end
diff --git a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
index 9fed859..eb8a95d 100644
--- a/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
+++ b/interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
@@ -7,80 +7,130 @@
sci_getfem_path = get_absolute_file_path('builder_gateway_c.sce');
getfem_path = '@GETFEM_INTERFACE_PATH@';
-Table = ['gf_util', 'sci_gf_scilab'; ...
+// Functions extracted from getfem_interface.cc
+
+Table = ['gf_workspace', 'sci_gf_scilab'; ...
+ 'gf_delete', 'sci_gf_scilab'; ...
+ 'gf_undelete', 'sci_gf_scilab'; ...
+ 'gf_eltm', 'sci_gf_scilab'; ...
+ 'gf_geotrans', 'sci_gf_scilab'; ...
+ 'gf_geotrans_get', 'sci_gf_scilab'; ...
+ 'gf_integ', 'sci_gf_scilab'; ...
+ 'gf_integ_get', 'sci_gf_scilab'; ...
+ 'gf_global_function', 'sci_gf_scilab'; ...
+ 'gf_global_function_get', 'sci_gf_scilab'; ...
+ 'gf_fem', 'sci_gf_scilab'; ...
+ 'gf_fem_get', 'sci_gf_scilab'; ...
'gf_cvstruct_get', 'sci_gf_scilab'; ...
- 'gf_geotrans', 'sci_gf_scilab'; ...
- 'gf_geotrans_get', 'sci_gf_scilab'; ...
- 'gf_compute', 'sci_gf_scilab'; ...
- 'gf_mesh_fem', 'sci_gf_scilab'; ...
- 'gf_mesh_fem_set', 'sci_gf_scilab'; ...
- 'gf_mesh_fem_get', 'sci_gf_scilab'; ...
- 'gf_mesh_im', 'sci_gf_scilab'; ...
- 'gf_mesh_im_set', 'sci_gf_scilab'; ...
- 'gf_mesh_im_get', 'sci_gf_scilab'; ...
- 'gf_eltm', 'sci_gf_scilab'; ...
- 'gf_mesh', 'sci_gf_scilab'; ...
- 'gf_mesh_set', 'sci_gf_scilab'; ...
- 'gf_mesh_get', 'sci_gf_scilab'; ...
- 'gf_mdbrick', 'sci_gf_scilab'; ...
- 'gf_mdbrick_get', 'sci_gf_scilab'; ...
- 'gf_mdbrick_set', 'sci_gf_scilab'; ...
- 'gf_mdstate', 'sci_gf_scilab'; ...
- 'gf_mdstate_get', 'sci_gf_scilab'; ...
- 'gf_mdstate_set', 'sci_gf_scilab'; ...
- 'gf_model', 'sci_gf_scilab'; ...
- 'gf_model_get', 'sci_gf_scilab'; ...
- 'gf_model_set', 'sci_gf_scilab'; ...
- 'gf_slice', 'sci_gf_scilab'; ...
- 'gf_slice_get', 'sci_gf_scilab'; ...
- 'gf_slice_set', 'sci_gf_scilab'; ...
- 'gf_levelset', 'sci_gf_scilab'; ...
- 'gf_levelset_get', 'sci_gf_scilab'; ...
- 'gf_levelset_set', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset_get', 'sci_gf_scilab'; ...
- 'gf_mesh_levelset_set', 'sci_gf_scilab'; ...
- 'gf_precond', 'sci_gf_scilab'; ...
- 'gf_precond_get', 'sci_gf_scilab'; ...
- 'gf_linsolve', 'sci_gf_scilab'; ...
- 'gf_spmat', 'sci_gf_scilab'; ...
- 'gf_spmat_set', 'sci_gf_scilab'; ...
- 'gf_spmat_get', 'sci_gf_scilab'; ...
- 'gf_asm', 'sci_gf_scilab'; ...
- 'gf_fem', 'sci_gf_scilab'; ...
- 'gf_fem_get', 'sci_gf_scilab'; ...
- 'gf_integ', 'sci_gf_scilab'; ...
- 'gf_integ_get', 'sci_gf_scilab'; ...
- 'gf_workspace', 'sci_gf_scilab'; ...
- 'gf_delete', 'sci_gf_scilab'; ...
- 'gf_undelete', 'sci_gf_scilab'; ...
- 'gf_global_function', 'sci_gf_scilab'; ...
- 'gf_global_function_get', 'sci_gf_scilab'; ...
- 'sp_luinc', 'sci_spluinc'; ...
- 'sp_lu', 'sci_splu'; ...
- 'sp_lusolve', 'sci_splusolve'; ...
- 'sp_cholinc', 'sci_spcholinc'; ...
- 'sp_chol', 'sci_spchol'; ...
- 'sp_chsolve', 'sci_spchsolve'; ...
- 'sp_cgne', 'sci_spcgne'; ...
- 'sp_cgs', 'sci_spcgs'; ...
- 'sp_gmres', 'sci_spgmres'; ...
- 'sp_mgcr', 'sci_spmgcr'];
-
-Files = ['gfm_common.c','gfm_scilab.c','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
+ 'gf_mesher_object', 'sci_gf_scilab'; ...
+ 'gf_mesher_object_get', 'sci_gf_scilab'; ...
+ 'gf_mesh', 'sci_gf_scilab'; ...
+ 'gf_mesh_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_fem_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_im', 'sci_gf_scilab'; ...
+ 'gf_mesh_im_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_im_set', 'sci_gf_scilab'; ...
+ 'gf_mdbrick', 'sci_gf_scilab'; ...
+ 'gf_mdbrick_get', 'sci_gf_scilab'; ...
+ 'gf_mdbrick_set', 'sci_gf_scilab'; ...
+ 'gf_mdstate', 'sci_gf_scilab'; ...
+ 'gf_mdstate_get', 'sci_gf_scilab'; ...
+ 'gf_mdstate_set', 'sci_gf_scilab'; ...
+ 'gf_model', 'sci_gf_scilab'; ...
+ 'gf_model_get', 'sci_gf_scilab'; ...
+ 'gf_model_set', 'sci_gf_scilab'; ...
+ 'gf_slice', 'sci_gf_scilab'; ...
+ 'gf_slice_get', 'sci_gf_scilab'; ...
+ 'gf_slice_set', 'sci_gf_scilab'; ...
+ 'gf_levelset', 'sci_gf_scilab'; ...
+ 'gf_levelset_get', 'sci_gf_scilab'; ...
+ 'gf_levelset_set', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset_get', 'sci_gf_scilab'; ...
+ 'gf_mesh_levelset_set', 'sci_gf_scilab'; ...
+ 'gf_asm', 'sci_gf_scilab'; ...
+ 'gf_compute', 'sci_gf_scilab'; ...
+ 'gf_precond', 'sci_gf_scilab'; ...
+ 'gf_precond_get', 'sci_gf_scilab'; ...
+ 'gf_spmat', 'sci_gf_scilab'; ...
+ 'gf_spmat_get', 'sci_gf_scilab'; ...
+ 'gf_spmat_set', 'sci_gf_scilab'; ...
+ 'gf_linsolve', 'sci_gf_scilab'; ...
+ 'gf_util', 'sci_gf_scilab'; ...
+ 'gf_exit', 'sci_gf_scilab'; ...
+ 'gf_cont_struct_get', 'sci_gf_scilab'; ...
+ 'gf_cont_struct', 'sci_gf_scilab'];
+
+// Special functions added for matlab compatibility
+
+Table = [Table; ...
+ 'sp_luinc', 'sci_spluinc'; ...
+ 'sp_lu', 'sci_splu'; ...
+ 'sp_lusolve', 'sci_splusolve'; ...
+ 'sp_cholinc', 'sci_spcholinc'; ...
+ 'sp_chol', 'sci_spchol'; ...
+ 'sp_chsolve', 'sci_spchsolve'; ...
+ 'sp_cgne', 'sci_spcgne'; ...
+ 'sp_cgs', 'sci_spcgs'; ...
+ 'sp_gmres', 'sci_spgmres'; ...
+ 'sp_mgcr', 'sci_spmgcr'];
+
+Files = ['gfm_common.c','gfm_scilab.cpp','sci_spluinc.c','sci_spcholinc.c','sci_splu.c','sci_spchol.c', ...
'sci_cgne.c','sci_cgs.c','sci_gmres.c','sci_mgcr.c','sci_spchsolve.c','sci_splusolve.c'];
+
Libraries = ['../../src/c/libsp_get'];
-cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
-cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
-cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+if getos()=='Windows' then
+ getfem_path = pwd() + '\..\..\..\';
+
+ cflags = ' /I' + sci_getfem_path + ' /I' + sci_getfem_path + '/../../src/c';
+ cflags = cflags + ' /I' + getfem_path + '/interface/src/' + ' /I' + getfem_path + '/src/getfem';
+ cflags = cflags + ' /I' + SCI + '/../../include/scilab'; // For the binary distribution
+ cflags = cflags + ' /D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+ ldflags = getfem_path + 'msvc2010\Release\libgetfemint.lib ';
+ ldflags = ldflags + getfem_path + 'msvc2010\Release\libgetfem.lib ';
+ ldflags = ldflags + getfem_path + 'msvc2010\Release\superlu.lib ';
+ if (isfile(getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib')) then
+ ldflags = ldflags + getfem_path + 'msvc2010\qhull-2011.1\lib\qhullstatic.lib ';
+ end
+ if (isfile(getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib')) then
+ ldflags = ldflags + getfem_path + 'msvc2010\muparser_v134\lib\muparser.lib ';
+ end
+
+ // Under windows, scilab ships only sparse_f.dll
+ // We need first to recreate the lib part
+
+ // * Here are the mingw commands necessary to produce this lib library:
+ // echo EXPORT > sparse_f.def
+ // nm sparse_f.dll | grep 'T_' | sed 's/.* T _//' > sparse_f.def
+ // dll_tool --def sparse_f.def --dllname sparse_f.dll --outputfile sparse_f.lib
+ // * Here are the visual commands necessary to produce this lib library:
+ // dumpbin /exports sparse_f.dll > sparse_f.def
+ // Edit sparse_f.def, add 'EXPORTS' on the first line and remove all the
+ // cryptic symbols except the symbol name.
+ // Now produce the lib file: lib /def:sparse_f.def /OUT:sparse_f.lib
+
+ ldflags = ldflags + ' ' + SCI + '/bin/sparse_f.lib';
+
+ // ldflags = ldflags + ' /NODEFAULTLIB:LIBCMT';
+else
+ cflags = ' -g -I' + sci_getfem_path + ' -I' + sci_getfem_path + ' -I' + sci_getfem_path + '/../../src/c';
+ cflags = cflags + ' -I' + getfem_path + '/interface/src/' + ' -I' + getfem_path + '/src/getfem';
+ cflags = cflags + ' -I' + SCI + '/../../include/scilab'; // For the binary distribution
+ cflags = cflags + ' -D__USE_DEPRECATED_STACK_FUNCTIONS__';
+
+ ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
+end
-ldflags = sci_getfem_path + '/../../../.libs/libgetfemint.a ' + sci_getfem_path + '/../../../../../src/.libs/libgetfem.a';
-if ~isempty('@QHULL_LIBS@') then
+if ~isempty('@QHULL_LIBS@') & getos()~='Windows' then
ldflags = ldflags + ' -L/usr/lib @QHULL_LIBS@';
end
-if ~isempty('@MUPARSER_LIBS@') then
+if ~isempty('@MUPARSER_LIBS@') & getos()~='Windows' then
ldflags = ldflags + ' -L/usr/lib @MUPARSER_LIBS@';
end
diff --git a/interface/src/scilab/sci_gateway/c/cleaner.sce b/interface/src/scilab/sci_gateway/c/cleaner.sce
index c47cb19..19ad36f 100644
--- a/interface/src/scilab/sci_gateway/c/cleaner.sce
+++ b/interface/src/scilab/sci_gateway/c/cleaner.sce
@@ -1,4 +1,4 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder.sce : Please, do not edit this file
// cleaner.sce
// ------------------------------------------------------
diff --git a/interface/src/scilab/sci_gateway/c/gfm_common.c b/interface/src/scilab/sci_gateway/c/gfm_common.c
index 86d97bb..bbb14da 100644
--- a/interface/src/scilab/sci_gateway/c/gfm_common.c
+++ b/interface/src/scilab/sci_gateway/c/gfm_common.c
@@ -1,25 +1,23 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009-2010 Yann Collette
-
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <assert.h>
#include <signal.h>
@@ -30,13 +28,7 @@
#include <Scierror.h>
#include <sciprint.h>
#include <MALLOC.h>
-#include <api_common.h>
-#include <api_string.h>
-#include <api_double.h>
-#include <api_int.h>
-#include <api_sparse.h>
-#include <api_list.h>
-#include <api_boolean.h>
+#include <api_scilab.h>
#include "gfm_common.h"
@@ -48,8 +40,8 @@
#define USE_SPT
// a function to transpose a sparse matrix. From modules/sparse/src/fortran
-void C2F(spt)(int * m, int * n, int * nel, int * it, int * ptr, double * A_R, double * A_I,
- int * A_mnel, int * A_icol, double * At_R, double * At_I, int * At_mnel, int * At_icol);
+extern void C2F(spt)(int * m, int * n, int * nel, int * it, int * ptr, double * A_R, double * A_I,
+ int * A_mnel, int * A_icol, double * At_R, double * At_I, int * At_mnel, int * At_icol);
const char * sci_ClassID2string(sci_types id)
@@ -87,8 +79,20 @@ const char * sci_ClassID2string(sci_types id)
int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
{
SciErr _SciErr;
- StrCtx _StrCtx;
int i, n = 0, var_type = 0;
+ int * item_address = NULL;
+ int pirow, picol, *pilen = NULL, *pilistaddress, size_pistring = 0, nbitem;
+ int * nbitemrow = NULL, * picolpos = NULL;
+ char ** pstStrings = NULL, ** pstData = NULL;
+ double * pdblDataID = NULL, * pdblDataCID = NULL;
+ int * pintDims = NULL, * ptr = NULL;
+ double * pdblDims = NULL, * pdblDataReal = NULL, * pdblDataImag = NULL;
+ int piPrecision, * p_item_address = NULL;
+ int * piData32 = NULL, * piBool = NULL;
+ unsigned int * puiData32 = NULL;
+ int is_complex;
+ int tmp_cnt, tmp_cnt2;
+ double * tmp_dblDataReal = NULL, * tmp_dblDataImag = NULL;
#ifdef DEBUG
int _picol, _pirow;
@@ -109,7 +113,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_list\n");
#endif
- int i;
_SciErr = getListItemNumber(pvApiCtx,sci_x,&n); CHECK_ERROR_API_SCILAB;
@@ -120,7 +123,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
for(i=0; i<n; ++i)
{
t->storage.gfi_storage_u.data_cell.data_cell_val[i] = MALLOC(1*sizeof(gfi_array));
- int * item_address = NULL;
_SciErr = getListItemAddress(pvApiCtx,sci_x,i+1,&item_address); CHECK_ERROR_API_SCILAB;
#ifdef DEBUG
_SciErr = getVarType(pvApiCtx,item_address,&var_type); CHECK_ERROR_API_SCILAB;
@@ -142,11 +144,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with mlist\n");
#endif
- int pirow, picol, *pilen, *pilistaddress, size_pistring = 0;
- char ** pstStrings;
- double * pdblDataID, * pdblDataCID;
- int * pintDims;
- double * pdblDims;
_SciErr = getListItemNumber(pvApiCtx,sci_x,&n); CHECK_ERROR_API_SCILAB;
_SciErr = getMatrixOfStringInList(pvApiCtx,sci_x,1,&pirow,&picol,NULL,NULL); CHECK_ERROR_API_SCILAB;
@@ -198,7 +195,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
}
else if (strcmp(pstStrings[0],"hm")==0)
{
- int piPrecision, ret, * p_item_address;
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with hypermat\n");
#endif
@@ -272,8 +268,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
if (piPrecision==SCI_INT32)
{
- int * piData32;
-
t->storage.type = GFI_INT32;
_SciErr = getMatrixOfInteger32(pvApiCtx,sci_x,&pirow,&picol,&piData32); CHECK_ERROR_API_SCILAB;
@@ -283,8 +277,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
}
else if (piPrecision==SCI_UINT32)
{
- unsigned int * puiData32;
-
t->storage.type = GFI_UINT32;
_SciErr = getMatrixOfUnsignedInteger32(pvApiCtx,sci_x,&pirow,&picol,&puiData32); CHECK_ERROR_API_SCILAB;
@@ -321,9 +313,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_strings\n");
#endif
- int picol, pirow;
- int * pilen = NULL;
- char ** pstData = NULL;
t->storage.type = GFI_CHAR;
@@ -371,7 +360,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_ints\n");
#endif
- int piPrecision;
_SciErr = getMatrixOfIntegerPrecision(pvApiCtx,sci_x,&piPrecision); CHECK_ERROR_API_SCILAB;
#ifdef DEBUG
@@ -386,8 +374,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
if (piPrecision==SCI_INT32)
{
t->storage.type = GFI_INT32;
- int pirow, picol;
- int * piData32;
_SciErr = getMatrixOfInteger32(pvApiCtx,sci_x,&pirow,&picol,&piData32); CHECK_ERROR_API_SCILAB;
#ifdef DEBUG
@@ -409,8 +395,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
else
{
t->storage.type = GFI_UINT32;
- int pirow, picol;
- unsigned int * puiData32;
_SciErr = getMatrixOfUnsignedInteger32(pvApiCtx,sci_x,&pirow,&picol,&puiData32); CHECK_ERROR_API_SCILAB;
@@ -437,8 +421,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_boolean\n");
#endif
- int pirow, picol;
- int * piBool;
t->storage.type = GFI_INT32;
@@ -467,9 +449,7 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_matrix\n");
#endif
- int is_complex = isVarComplex(pvApiCtx,sci_x);
- int pirow, picol;
- double * pdblDataReal, * pdblDataImag;
+ is_complex = isVarComplex(pvApiCtx,sci_x);
t->storage.type = GFI_DOUBLE;
t->storage.gfi_storage_u.data_double.is_complex = is_complex;
@@ -519,13 +499,7 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef DEBUG
sciprint("sci_array_to_gfi_array: dealing with sci_sparse\n");
#endif
- int is_complex = isVarComplex(pvApiCtx,sci_x);
- int pirow, picol, nbitem;
- double * pdblDataReal, * pdblDataImag;
- int * nbitemrow, * picolpos, * offset;
- int j, k, Index;
- int * ptr;
- int tmp_cnt, tmp_cnt2;
+ is_complex = isVarComplex(pvApiCtx,sci_x);
t->storage.type = GFI_SPARSE;
t->storage.gfi_storage_u.sp.is_complex = is_complex;
@@ -647,7 +621,6 @@ int sci_array_to_gfi_array(int * sci_x, gfi_array *t)
#ifdef USE_SPT
sciprint("DEBUG: testing the new method - complex\n");
- double * tmp_dblDataReal, * tmp_dblDataImag;
ptr = (int *)MALLOC(picol*sizeof(int));
tmp_dblDataReal = (double *)MALLOC(nbitem*sizeof(double));
@@ -754,26 +727,39 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
// - addCellToCell, addStringToCell, etc.. pour gérer les listes imbriquées
SciErr _SciErr;
- int *m_var, var_type;
- StrCtx _StrCtx;
-
- assert(t);
+ int * m_var = NULL, var_type;
/* Scilab represent scalars as an array of size one */
/* while gfi_array represents "scalar" values with 0-dimension array */
int ndim = (t->dim.dim_len == 0 ? 1 : t->dim.dim_len);
static const int one = 1;
- const int *dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
+ const int * dim = (t->dim.dim_len == 0 ? &one : (const int *)t->dim.dim_val);
+ int is_hypermat = 0;
+ int nrow, ncol, nb_item, pi_precision;
+ int pirow, picol, nbitem, * pi_col_pos = NULL, * nb_item_row = NULL;
+ int * nb_item_row_tmp = NULL, * pi_col_pos_tmp = NULL, * pilen = NULL;
+ int * dims = NULL;
+ unsigned int * entries = NULL;
+ int nb_elem = 1;
+ double * pr = NULL, * pi = NULL;
+ int i, j;
+ double * pdblDataReal = NULL, * pdblDataImag = NULL, * pdblDataReal_tmp = NULL, * pdblDataImag_tmp = NULL;
+ double * dbl_entries = NULL;
+ double * entries_pr = NULL, * entries_pi = NULL;
+ int iscomplex;
+ int * ptr = NULL, * m_content = NULL, * piData32 = NULL;
+ char ** pstStrings = NULL;
+ double * pdblReal = NULL, * pdblImag = NULL;
+ unsigned int * puiData32 = NULL;
+ int * piBool = NULL;
+
+ assert(t);
switch (t->storage.type)
{
case GFI_UINT32:
{
- int is_hypermat = 0;
- int nrow, ncol, i;
- int pirow, picol;
-
if (ndim==1)
{
nrow = dim[0];
@@ -799,10 +785,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
}
else
{
- char *fields[] = {"hm","dims","entries"};
- int * dims;
- unsigned int * entries;
- int nb_elem = 1;
+ const char * const fields[] = {"hm","dims","entries"};
+ nb_elem = 1;
_SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
_SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -829,9 +813,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
break;
case GFI_INT32:
{
- int is_hypermat = 0;
- int nrow, ncol, i;
- int pirow, picol;
+ is_hypermat = 0;
if (ndim==1)
{
@@ -858,10 +840,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
}
else
{
- char *fields[] = {"hm","dims","entries"};
- int * dims;
- double * entries;
- int nb_elem = 1;
+ const char * const fields[] = {"hm","dims","entries"};
+ nb_elem = 1;
_SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
_SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -873,15 +853,15 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
nb_elem *= (int)t->dim.dim_val[i];
}
- entries = (double *)MALLOC(nb_elem*sizeof(double));
- for(i=0;i<nb_elem;i++) entries[i] = (double)t->storage.gfi_storage_u.data_int32.data_int32_val[i];
+ dbl_entries = (double *)MALLOC(nb_elem*sizeof(double));
+ for(i=0;i<nb_elem;i++) dbl_entries[i] = (double)t->storage.gfi_storage_u.data_int32.data_int32_val[i];
// Add a vector to the 'dims' field -> a row vector
_SciErr = createMatrixOfInteger32InList(pvApiCtx,ivar, m_var, 2, 1, t->dim.dim_len, dims); CHECK_ERROR_API_SCILAB;
// Add a vector to the 'entries' field -> a column vector
- _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, entries); CHECK_ERROR_API_SCILAB;
+ _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, dbl_entries); CHECK_ERROR_API_SCILAB;
- if (entries) FREE(entries);
+ if (entries) FREE(dbl_entries);
if (dims) FREE(dims);
}
}
@@ -893,9 +873,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
sciprint("ndim = %d ivar = %d\n", ndim, ivar);
sciprint("dim[0] = %d\n", dim[0]);
#endif
- int i, nrow, ncol;
- double *pr, *pi;
- int is_hypermat = 0;
+ is_hypermat = 0;
if (ndim==1)
{
@@ -929,7 +907,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#ifdef DEBUG
sciprint("DEBUG: array is complex\n");
#endif
- double *pr, *pi; int i;
pr = (double *)MALLOC(nrow*ncol*sizeof(double));
pi = (double *)MALLOC(nrow*ncol*sizeof(double));
@@ -951,9 +928,8 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#ifdef DEBUG
sciprint("DEBUG: array is hypermat\n");
#endif
- char *fields[] = {"hm","dims","entries"};
- int * dims;
- int nb_elem = 1;
+ const char * const fields[] = {"hm","dims","entries"};
+ nb_elem = 1;
_SciErr = createMList(pvApiCtx,ivar,3,&m_var); CHECK_ERROR_API_SCILAB;
_SciErr = createMatrixOfStringInList(pvApiCtx,ivar, m_var, 1, 1, 3, fields); CHECK_ERROR_API_SCILAB;
@@ -967,15 +943,14 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
if (!gfi_array_is_complex(t))
{
- double * entries;
- entries = (double *)MALLOC(nb_elem*sizeof(double));
- for(i=0;i<nb_elem;i++) entries[i] = t->storage.gfi_storage_u.data_double.data_double_val[i];
+ dbl_entries = (double *)MALLOC(nb_elem*sizeof(double));
+ for(i=0;i<nb_elem;i++) dbl_entries[i] = t->storage.gfi_storage_u.data_double.data_double_val[i];
// Add a vector to the 'dims' field -> a row vector
_SciErr = createMatrixOfInteger32InList(pvApiCtx,ivar, m_var, 2, 1, t->dim.dim_len, dims); CHECK_ERROR_API_SCILAB;
// Add a vector to the 'entries' field -> a column vector
- _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, entries); CHECK_ERROR_API_SCILAB;
+ _SciErr = createMatrixOfDoubleInList(pvApiCtx,ivar, m_var, 3, nb_elem, 1, dbl_entries); CHECK_ERROR_API_SCILAB;
if (entries) FREE(entries);
#ifdef DEBUG
@@ -984,8 +959,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
}
else
{
- double * entries_pr, *entries_pi;
-
entries_pr = (double *)MALLOC(nb_elem*sizeof(double));
entries_pi = (double *)MALLOC(nb_elem*sizeof(double));
for(i=0;i<nb_elem;i++)
@@ -1026,8 +999,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
break;
case GFI_CELL:
{
- unsigned int i, nb_item;
- int * m_content;
#ifdef DEBUG
sciprint("gfi_array_to_sci_array: create from a GFI_CELL\n");
sciprint("ndim = %d ivar = %d\n", dim[0],ivar);
@@ -1070,8 +1041,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_strings\n");
sciprint("add element %d to position %d\n", i, ivar);
#endif
- int pirow, picol, *pilen, j;
- char ** pstStrings;
// Get the matrix of strings from the gfi_array
_SciErr = getMatrixOfString(pvApiCtx,m_content, &pirow, &picol, NULL, NULL); CHECK_ERROR_API_SCILAB;
@@ -1105,10 +1074,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#endif
// UINT32 + INT32
{
- int pi_precision, pirow, picol;
- int * piData32;
- unsigned int * puiData32;
-
_SciErr = getMatrixOfIntegerPrecision(pvApiCtx,m_content,&pi_precision); CHECK_ERROR_API_SCILAB;
if ((pi_precision!=SCI_INT32)&&(pi_precision!=SCI_UINT32))
{
@@ -1134,8 +1099,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#ifdef DEBUG
sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_boolean\n");
#endif
- int pirow, picol;
- int * piBool;
_SciErr = getMatrixOfBoolean(pvApiCtx,m_content, &pirow, &picol, &piBool); CHECK_ERROR_API_SCILAB;
_SciErr = createMatrixOfBooleanInList(pvApiCtx,ivar, m_var, i+1, pirow, picol, piBool); CHECK_ERROR_API_SCILAB;
@@ -1146,9 +1109,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#ifdef DEBUG
sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_matrix\n");
#endif
- int pirow, picol;
- double * pdblReal, * pdblImag;
-
if (isVarComplex(pvApiCtx,m_content))
{
_SciErr = getComplexMatrixOfDouble(pvApiCtx,m_content, &pirow, &picol, &pdblReal, &pdblImag); CHECK_ERROR_API_SCILAB;
@@ -1166,9 +1126,6 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
#ifdef DEBUG
sciprint("gfi_array_to_sci_array: create from a GFI_CELL - sci_sparse\n");
#endif
- int pirow, picol, nbitem, * nb_item_row, * pi_col_pos;
- double * pdblReal, * pdblImag;
-
if (isVarComplex(pvApiCtx,m_content))
{
_SciErr = getComplexSparseMatrix(pvApiCtx,m_content, &pirow, &picol, &nbitem, &nb_item_row, &pi_col_pos, &pdblReal, &pdblImag); CHECK_ERROR_API_SCILAB;
@@ -1214,11 +1171,7 @@ int gfi_array_to_sci_array(gfi_array *t, int ivar)
break;
case GFI_SPARSE:
{
- int picol, pirow, nbitem, * pi_col_pos, * nb_item_row, * nb_item_row_tmp, * pi_col_pos_tmp;
- int i, j, k, nnz, Index;
- double * pdblDataReal, * pdblDataImag, * pdblDataReal_tmp, * pdblDataImag_tmp;
- int iscomplex = gfi_array_is_complex(t);
- int * ptr;
+ iscomplex = gfi_array_is_complex(t);
nbitem = t->storage.gfi_storage_u.sp.ir.ir_len;
pirow = t->dim.dim_val[0];
diff --git a/interface/src/scilab/sci_gateway/c/gfm_common.h b/interface/src/scilab/sci_gateway/c/gfm_common.h
index 1d79602..26bcb31 100644
--- a/interface/src/scilab/sci_gateway/c/gfm_common.h
+++ b/interface/src/scilab/sci_gateway/c/gfm_common.h
@@ -1,34 +1,33 @@
/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009 Yann Collette
-
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- As a special exception, you may use this file as part of a free software
- library without restriction. Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License. This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-
- ========================================================================*/
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GFM_COMMON_H
#define GFM_COMMON_H
diff --git a/interface/src/scilab/sci_gateway/c/gfm_scilab.c b/interface/src/scilab/sci_gateway/c/gfm_scilab.c
deleted file mode 100644
index 53dd659..0000000
--- a/interface/src/scilab/sci_gateway/c/gfm_scilab.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* -*- c++ -*- (enables emacs c++ mode) */
-/*========================================================================
-
- Copyright (C) 2009 Yann Collette
-
- This file is a part of GETFEM++
-
- Getfem++ is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
- USA.
-
- ========================================================================*/
-
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <time.h>
-
-#include <stack-c.h>
-#include <sciprint.h>
-#include <Scierror.h>
-#include <api_common.h>
-#include <MALLOC.h>
-
-#include "gfm_common.h"
-#include "gfi_array.h"
-#include "getfem_interface.h"
-
-//#define DEBUG_TIMER
-//#define DEBUG
-//#define DEBUG2
-
-gfi_output * call_getfem_interface(char *funname, gfi_array_list in, int nlhs)
-{
- static gfi_output result;
- gfi_array **pin = NULL;
- gfi_array **pout = NULL;
- char *errmsg = 0, *infomsg = 0;
- unsigned int i;
-
-#ifdef DEBUG2
- sciprint("call_getfem_interface: len = %d \n",in.arg.arg_len);
- for(i=0;i<in.arg.arg_len;i++)
- {
- sciprint("element %d: \n",i);
- gfi_array_print(&in.arg.arg_val[i]);
- }
-#endif
-
- pin = gfi_calloc(in.arg.arg_len, sizeof(gfi_array*));
- for (i=0; i < in.arg.arg_len; ++i)
- {
- pin[i] = &in.arg.arg_val[i];
- }
-
-#ifdef DEBUG
- sciprint("call_getfem_interface: funname = %s len = %d\n",funname, in.arg.arg_len);
-#endif
-
- errmsg = getfem_interface_main(SCILAB_INTERFACE, funname, in.arg.arg_len, (const gfi_array **)pin, &nlhs, &pout, &infomsg, 1);
-
-#ifdef DEBUG
- sciprint("call_getfem_interface: end of getfem_interface_main, nlhs = %d infomsg = %s\n",nlhs,infomsg);
-#endif
-
- result.infomsg = infomsg;
- if (errmsg)
- {
- result.status = GFI_STATUS_ERROR;
- result.gfi_output_u.errmsg = errmsg;
- }
- else
- {
- result.status = GFI_STATUS_OK;
- result.gfi_output_u.output.arg.arg_len = nlhs;
- result.gfi_output_u.output.arg.arg_val = gfi_calloc(nlhs, sizeof(gfi_array));
- for(i=0; i<nlhs; ++i)
- {
- assert(pout[i]);
- result.gfi_output_u.output.arg.arg_val[i] = *pout[i];
- gfi_free(pout[i]);
- }
- if (pout) gfi_free(pout);
- }
- gfi_free(pin);
-
- return &result;
-}
-
-char *current_scilab_function = NULL;
-
-void sigint_callback(int sig)
-{
- char *s = current_scilab_function; if (!s) s = "doh!!";
- fprintf(stderr, "*** CTRL-C hit during execution of the getfem_scilab function: gf_%s...\n" \
- "You will gain control as soon as the current operation is finished ***\n" \
- "If you want to abort immediatly the current operation, hit CTRL-C again\n" \
- "In that case, you will have to restart getfem_scilab:\n", s);
- set_cancel_flag(1);
- assert(handle_getfem_callback() == 1);
-}
-
-int sci_gf_scilab(char * fname)
-{
- gfi_output * out = NULL;
- gfi_array_list * in = NULL;
- gfi_array_list * outl = NULL;
- int ** ptr_param = NULL;
- int * sci_x = NULL;
- int picol, pirow, var_type;
- unsigned int i;
- SciErr _SciErr;
- StrCtx _StrCtx;
- clock_t time_start, time_end;
-
- set_cancel_flag(0);
- set_superlu_callback(is_cancel_flag_set);
-
-#ifdef DEBUG
- sciprint("sci_gf_scilab: Rhs = %d Lhs = %d\n", Rhs, Lhs);
-#endif
-
- ptr_param = (int **)MALLOC((Rhs+1)*sizeof(int *));
- for(i=1;i<=Rhs;i++)
- {
-#ifdef DEBUG
- sciprint("sci_gf_scilab: i = %d Rhs = %d\n", i, Rhs);
-#endif
- _SciErr = getVarAddressFromPosition(&_StrCtx,i,ptr_param+i);
-#ifdef DEBUG
- _SciErr = getVarDimension(&_StrCtx,ptr_param[i],&pirow,&picol);
- _SciErr = getVarType(&_StrCtx,ptr_param[i],&var_type);
- sciprint("sci_gf_scilab: position %d - address %d - type %d - dimension %d %d\n", i, ptr_param[i],var_type,pirow,picol);
-#endif
- }
-
-#ifdef DEBUG
- sciprint("sci_gf_scilab: list of parameters built\n", i, Rhs);
-#endif
-
-#ifdef DEBUG_TIMER
- sciprint("DEBUG_TIMER: before build_gfi_array_list\n");
- time_start = clock()/CLOCKS_PER_SEC;
-#endif
-
- in = build_gfi_array_list(Rhs, ptr_param);
-
-#ifdef DEBUG_TIMER
- time_end = clock()/CLOCKS_PER_SEC;
- sciprint("DEBUG_TIMER: after build_gfi_array_list: %f\n", (double)(time_end - time_start));
- time_start = time_end;
-#endif
-
- if (!in)
- {
- Scierror(999,"%s: a problem occured while reading arguments.\n",fname);
- return 0;
- }
-#ifdef DEBUG
- sciprint("sci_gf_scilab: end of build_gfi_array_list\n");
-#endif
-
- install_custom_sigint(sigint_callback);
-
-#ifdef DEBUG
- sciprint("sci_gf_scilab: fname = %s - calling call_getfem_interface with %s\n",fname, &fname[3]);
-#endif
-
- out = call_getfem_interface(&fname[3], *in, Lhs);
-
- // We now remove all the allocated memory for the input parameters
- // This memory is allocated in gfm_common.c
- if (in)
- {
- for(i=0;i<in->arg.arg_len;i++)
- gfi_array_destroy(&in->arg.arg_val[i]);
- gfi_free(in->arg.arg_val);
- gfi_free(in);
- }
-
-#ifdef DEBUG_TIMER
- time_end = clock()/CLOCKS_PER_SEC;
- sciprint("DEBUG_TIMER: after call_getfem_interface: %f\n",(double)(time_end - time_start));
- time_start = time_end;
-#endif
-
-#ifdef DEBUG
- sciprint("sci_gf_scilab: end of call_getfem_interface\n");
-#endif
-
- remove_custom_sigint(out->status == GFI_STATUS_OK);
-
- if (out == NULL)
- {
- sciprint("%s: could not connect to getfem_scilab server...\n",fname);
- LhsVar(1) = 0;
- }
- else
- {
- if (out->infomsg)
- {
- sciprint("%s: message:\n%s\n",fname,out->infomsg);
- }
-
- if (out->status == GFI_STATUS_OK)
- {
- outl = &out->gfi_output_u.output;
- for(i=0; i<outl->arg.arg_len; ++i)
- {
-#ifdef DEBUG
- sciprint("sci_gf_scilab: processing output argument %d / %d\n", i, outl->arg.arg_len);
- sciprint("storage type = %d\n", outl->arg.arg_val[i].storage.type);
- sciprint("output position: LhsVar(%d) = %d\n", i+1, Rhs+1+i);
-#endif
- sci_x = gfi_array_to_sci_array(&outl->arg.arg_val[i],Rhs+1+i);
- LhsVar(i+1) = Rhs+1+i;
- if (&outl->arg.arg_val[i]) gfi_array_destroy(&outl->arg.arg_val[i]);
- }
-
- gfi_free(outl->arg.arg_val);
- }
- else
- {
- Scierror(999,"%s: %s\n", fname,out->gfi_output_u.errmsg);
- LhsVar(1) = 0;
- }
- }
-
-#ifdef DEBUG_TIMER
- time_end = clock()/CLOCKS_PER_SEC;
- sciprint("DEBUG_TIMER: after gfi_array_to_sci_array: %f\n", (double)(time_end - time_start));
-#endif
-
- if (ptr_param) FREE(ptr_param);
-
- return 0;
-}
diff --git a/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp b/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp
new file mode 100644
index 0000000..15a1b9d
--- /dev/null
+++ b/interface/src/scilab/sci_gateway/c/gfm_scilab.cpp
@@ -0,0 +1,264 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <time.h>
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+extern "C" {
+#include <stack-c.h>
+#include <sciprint.h>
+#include <Scierror.h>
+#include <api_scilab.h>
+#include <MALLOC.h>
+}
+
+extern "C" {
+#include "gfm_common.h"
+}
+
+#include "gfi_array.h"
+#include "getfem_interface.h"
+
+#ifndef _MSCVER
+#include "stream_redirect.h"
+#endif
+
+//#define DEBUG_TIMER
+//#define DEBUG
+//#define DEBUG2
+
+extern "C" int handle_getfem_callback();
+extern "C" void set_superlu_callback(int (*cb)());
+
+gfi_output * call_getfem_interface(char *funname, gfi_array_list in, int nlhs)
+{
+ static gfi_output result;
+ gfi_array **pin = NULL;
+ gfi_array **pout = NULL;
+ char *errmsg = 0, *infomsg = 0;
+ int i;
+
+#ifdef DEBUG2
+ sciprint("call_getfem_interface: len = %d \n",in.arg.arg_len);
+ for(i=0;i<in.arg.arg_len;i++)
+ {
+ sciprint("element %d: \n",i);
+ gfi_array_print(&in.arg.arg_val[i]);
+ }
+#endif
+
+ pin = (gfi_array **)gfi_calloc(in.arg.arg_len, sizeof(gfi_array*));
+ for (i=0; i < in.arg.arg_len; ++i)
+ {
+ pin[i] = &in.arg.arg_val[i];
+ }
+
+#ifdef DEBUG
+ sciprint("call_getfem_interface: funname = %s len = %d\n",funname, in.arg.arg_len);
+#endif
+
+ errmsg = getfem_interface_main(SCILAB_INTERFACE, funname, in.arg.arg_len, (const gfi_array **)pin, &nlhs, &pout, &infomsg, 1);
+
+#ifdef DEBUG
+ sciprint("call_getfem_interface: end of getfem_interface_main, nlhs = %d infomsg = %s\n",nlhs,infomsg);
+#endif
+
+ result.infomsg = infomsg;
+ if (errmsg)
+ {
+ result.status = GFI_STATUS_ERROR;
+ result.gfi_output_u.errmsg = errmsg;
+ }
+ else
+ {
+ result.status = GFI_STATUS_OK;
+ result.gfi_output_u.output.arg.arg_len = nlhs;
+ result.gfi_output_u.output.arg.arg_val = (gfi_array *)gfi_calloc(nlhs, sizeof(gfi_array));
+ for(i=0; i<nlhs; ++i)
+ {
+ assert(pout[i]);
+ result.gfi_output_u.output.arg.arg_val[i] = *pout[i];
+ gfi_free(pout[i]);
+ }
+ if (pout) gfi_free(pout);
+ }
+ gfi_free(pin);
+
+ return &result;
+}
+
+char *current_scilab_function = NULL;
+
+void sigint_callback(int sig)
+{
+ const char * s = current_scilab_function; if (!s) s = "doh!!";
+ fprintf(stderr, "*** CTRL-C hit during execution of the getfem_scilab function: gf_%s...\n" \
+ "You will gain control as soon as the current operation is finished ***\n" \
+ "If you want to abort immediatly the current operation, hit CTRL-C again\n" \
+ "In that case, you will have to restart getfem_scilab:\n", s);
+ set_cancel_flag(1);
+ assert(handle_getfem_callback() == 1);
+}
+
+extern "C" int sci_gf_scilab(char * fname)
+{
+ gfi_output * out = NULL;
+ gfi_array_list * in = NULL;
+ gfi_array_list * outl = NULL;
+ int ** ptr_param = NULL;
+ int sci_x;
+ unsigned int i;
+ SciErr _SciErr;
+#ifdef DEBUG_TIMER
+ clock_t time_start, time_end;
+#endif
+#ifndef _MSCVER
+ ScilabStream scicout(std::cout);
+ ScilabStream scicerr(std::cerr);
+#endif
+ set_cancel_flag(0);
+ set_superlu_callback(is_cancel_flag_set);
+
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: Rhs = %d Lhs = %d\n", Rhs, Lhs);
+#endif
+
+ ptr_param = (int **)MALLOC((Rhs+1)*sizeof(int *));
+ for(i=1;i<=Rhs;i++)
+ {
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: i = %d Rhs = %d\n", i, Rhs);
+#endif
+ _SciErr = getVarAddressFromPosition(pvApiCtx,i,ptr_param+i);
+#ifdef DEBUG
+ _SciErr = getVarDimension(pvApiCtx,ptr_param[i],&pirow,&picol);
+ _SciErr = getVarType(pvApiCtx,ptr_param[i],&var_type);
+ sciprint("sci_gf_scilab: position %d - address %d - type %d - dimension %d %d\n", i, ptr_param[i],var_type,pirow,picol);
+#endif
+ }
+
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: list of parameters built\n", i, Rhs);
+#endif
+
+#ifdef DEBUG_TIMER
+ sciprint("DEBUG_TIMER: before build_gfi_array_list\n");
+ time_start = clock()/CLOCKS_PER_SEC;
+#endif
+
+ in = build_gfi_array_list(Rhs, ptr_param);
+
+#ifdef DEBUG_TIMER
+ time_end = clock()/CLOCKS_PER_SEC;
+ sciprint("DEBUG_TIMER: after build_gfi_array_list: %f\n", (double)(time_end - time_start));
+ time_start = time_end;
+#endif
+
+ if (!in)
+ {
+ Scierror(999,"%s: a problem occured while reading arguments.\n",fname);
+ return 0;
+ }
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: end of build_gfi_array_list\n");
+#endif
+
+ install_custom_sigint(sigint_callback);
+
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: fname = %s - calling call_getfem_interface with %s\n",fname, &fname[3]);
+#endif
+
+ out = call_getfem_interface(&fname[3], *in, Lhs);
+
+ // We now remove all the allocated memory for the input parameters
+ // This memory is allocated in gfm_common.c
+ if (in)
+ {
+ for(i=0;i<in->arg.arg_len;i++)
+ gfi_array_destroy(&in->arg.arg_val[i]);
+ gfi_free(in->arg.arg_val);
+ gfi_free(in);
+ }
+
+#ifdef DEBUG_TIMER
+ time_end = clock()/CLOCKS_PER_SEC;
+ sciprint("DEBUG_TIMER: after call_getfem_interface: %f\n",(double)(time_end - time_start));
+ time_start = time_end;
+#endif
+
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: end of call_getfem_interface\n");
+#endif
+
+ remove_custom_sigint(out->status == GFI_STATUS_OK);
+
+ if (out == NULL)
+ {
+ sciprint("%s: could not connect to getfem_scilab server...\n",fname);
+ LhsVar(1) = 0;
+ }
+ else
+ {
+ if (out->infomsg)
+ {
+ sciprint("%s: message:\n%s\n",fname,out->infomsg);
+ }
+
+ if (out->status == GFI_STATUS_OK)
+ {
+ outl = &out->gfi_output_u.output;
+ for(i=0; i<outl->arg.arg_len; ++i)
+ {
+#ifdef DEBUG
+ sciprint("sci_gf_scilab: processing output argument %d / %d\n", i, outl->arg.arg_len);
+ sciprint("storage type = %d\n", outl->arg.arg_val[i].storage.type);
+ sciprint("output position: LhsVar(%d) = %d\n", i+1, Rhs+1+i);
+#endif
+ sci_x = gfi_array_to_sci_array(&outl->arg.arg_val[i],Rhs+1+i);
+ LhsVar(i+1) = Rhs+1+i;
+ if (&outl->arg.arg_val[i]) gfi_array_destroy(&outl->arg.arg_val[i]);
+ }
+
+ gfi_free(outl->arg.arg_val);
+ }
+ else
+ {
+ Scierror(999,"%s: %s\n", fname,out->gfi_output_u.errmsg);
+ LhsVar(1) = 0;
+ }
+ }
+
+#ifdef DEBUG_TIMER
+ time_end = clock()/CLOCKS_PER_SEC;
+ sciprint("DEBUG_TIMER: after gfi_array_to_sci_array: %f\n", (double)(time_end - time_start));
+#endif
+
+ if (ptr_param) FREE(ptr_param);
+
+ return 0;
+}
diff --git a/interface/src/scilab/sci_gateway/c/libscigetfem_c.c b/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
index d9e79ae..965f0e3 100644
--- a/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
+++ b/interface/src/scilab/sci_gateway/c/libscigetfem_c.c
@@ -1,6 +1,7 @@
#include <mex.h>
#include <sci_gateway.h>
#include <api_scilab.h>
+#include <MALLOC.h>
static int direct_gateway(char *fname,void F(void)) { F();return 0;};
extern Gatefunc sci_gf_scilab;
extern Gatefunc sci_gf_scilab;
@@ -51,6 +52,11 @@ extern Gatefunc sci_gf_scilab;
extern Gatefunc sci_gf_scilab;
extern Gatefunc sci_gf_scilab;
extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
+extern Gatefunc sci_gf_scilab;
extern Gatefunc sci_spluinc;
extern Gatefunc sci_splu;
extern Gatefunc sci_splusolve;
@@ -62,21 +68,30 @@ extern Gatefunc sci_spcgs;
extern Gatefunc sci_spgmres;
extern Gatefunc sci_spmgcr;
static GenericTable Tab[]={
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_util"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cvstruct_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_workspace"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_delete"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_undelete"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_eltm"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_geotrans"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_geotrans_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_compute"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cvstruct_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesher_object"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesher_object_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_fem_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_eltm"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_set"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_im_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick_get"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mdbrick_set"},
@@ -95,22 +110,18 @@ static GenericTable Tab[]={
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset_get"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_mesh_levelset_set"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_asm"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_compute"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_precond"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_precond_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_linsolve"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_set"},
{(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_asm"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_fem_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_integ_get"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_workspace"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_delete"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_undelete"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function"},
- {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_global_function_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_spmat_set"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_linsolve"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_util"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_exit"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cont_struct_get"},
+ {(Myinterfun)sci_gateway,sci_gf_scilab,"gf_cont_struct"},
{(Myinterfun)sci_gateway,sci_spluinc,"sp_luinc"},
{(Myinterfun)sci_gateway,sci_splu,"sp_lu"},
{(Myinterfun)sci_gateway,sci_splusolve,"sp_lusolve"},
@@ -128,6 +139,10 @@ int C2F(libscigetfem_c)()
Rhs = Max(0, Rhs);
if (*(Tab[Fin-1].f) != NULL)
{
+ if(pvApiCtx == NULL)
+ {
+ pvApiCtx = (StrCtx*)MALLOC(sizeof(StrCtx));
+ }
pvApiCtx->pstName = (char*)Tab[Fin-1].name;
(*(Tab[Fin-1].f))(Tab[Fin-1].name,Tab[Fin-1].F);
}
diff --git a/interface/src/scilab/sci_gateway/c/loader.sce b/interface/src/scilab/sci_gateway/c/loader.sce
index 5a06390..7ae366c 100644
--- a/interface/src/scilab/sci_gateway/c/loader.sce
+++ b/interface/src/scilab/sci_gateway/c/loader.sce
@@ -1,71 +1,85 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder.sce : Please, do not edit this file
+// ----------------------------------------------------------------------------
//
-libscigetfem_c_path = get_file_path('loader.sce');
-link(libscigetfem_c_path+'/../../src/c/libsp_get.so');
-list_functions = [ 'gf_util';
- 'gf_cvstruct_get';
- 'gf_geotrans';
- 'gf_geotrans_get';
- 'gf_compute';
- 'gf_mesh_fem';
- 'gf_mesh_fem_set';
- 'gf_mesh_fem_get';
- 'gf_mesh_im';
- 'gf_mesh_im_set';
- 'gf_mesh_im_get';
- 'gf_eltm';
- 'gf_mesh';
- 'gf_mesh_set';
- 'gf_mesh_get';
- 'gf_mdbrick';
- 'gf_mdbrick_get';
- 'gf_mdbrick_set';
- 'gf_mdstate';
- 'gf_mdstate_get';
- 'gf_mdstate_set';
- 'gf_model';
- 'gf_model_get';
- 'gf_model_set';
- 'gf_slice';
- 'gf_slice_get';
- 'gf_slice_set';
- 'gf_levelset';
- 'gf_levelset_get';
- 'gf_levelset_set';
- 'gf_mesh_levelset';
- 'gf_mesh_levelset_get';
- 'gf_mesh_levelset_set';
- 'gf_precond';
- 'gf_precond_get';
- 'gf_linsolve';
- 'gf_spmat';
- 'gf_spmat_set';
- 'gf_spmat_get';
- 'gf_asm';
- 'gf_fem';
- 'gf_fem_get';
- 'gf_integ';
- 'gf_integ_get';
- 'gf_workspace';
- 'gf_delete';
- 'gf_undelete';
- 'gf_global_function';
- 'gf_global_function_get';
- 'sp_luinc';
- 'sp_lu';
- 'sp_lusolve';
- 'sp_cholinc';
- 'sp_chol';
- 'sp_chsolve';
- 'sp_cgne';
- 'sp_cgs';
- 'sp_gmres';
- 'sp_mgcr';
+libscigetfem_c_path = get_absolute_file_path('loader.sce');
+//
+// ulink previous function with same name
+[bOK, ilib] = c_link('libscigetfem_c');
+if bOK then
+ ulink(ilib);
+end
+//
+link(libscigetfem_c_path + filesep() + '../../src/c/libsp_get' + getdynlibext());
+list_functions = [ 'gf_workspace';
+ 'gf_delete';
+ 'gf_undelete';
+ 'gf_eltm';
+ 'gf_geotrans';
+ 'gf_geotrans_get';
+ 'gf_integ';
+ 'gf_integ_get';
+ 'gf_global_function';
+ 'gf_global_function_get';
+ 'gf_fem';
+ 'gf_fem_get';
+ 'gf_cvstruct_get';
+ 'gf_mesher_object';
+ 'gf_mesher_object_get';
+ 'gf_mesh';
+ 'gf_mesh_get';
+ 'gf_mesh_set';
+ 'gf_mesh_fem';
+ 'gf_mesh_fem_get';
+ 'gf_mesh_fem_set';
+ 'gf_mesh_im';
+ 'gf_mesh_im_get';
+ 'gf_mesh_im_set';
+ 'gf_mdbrick';
+ 'gf_mdbrick_get';
+ 'gf_mdbrick_set';
+ 'gf_mdstate';
+ 'gf_mdstate_get';
+ 'gf_mdstate_set';
+ 'gf_model';
+ 'gf_model_get';
+ 'gf_model_set';
+ 'gf_slice';
+ 'gf_slice_get';
+ 'gf_slice_set';
+ 'gf_levelset';
+ 'gf_levelset_get';
+ 'gf_levelset_set';
+ 'gf_mesh_levelset';
+ 'gf_mesh_levelset_get';
+ 'gf_mesh_levelset_set';
+ 'gf_asm';
+ 'gf_compute';
+ 'gf_precond';
+ 'gf_precond_get';
+ 'gf_spmat';
+ 'gf_spmat_get';
+ 'gf_spmat_set';
+ 'gf_linsolve';
+ 'gf_util';
+ 'gf_exit';
+ 'gf_cont_struct_get';
+ 'gf_cont_struct';
+ 'sp_luinc';
+ 'sp_lu';
+ 'sp_lusolve';
+ 'sp_cholinc';
+ 'sp_chol';
+ 'sp_chsolve';
+ 'sp_cgne';
+ 'sp_cgs';
+ 'sp_gmres';
+ 'sp_mgcr';
];
-addinter(libscigetfem_c_path+'/libscigetfem_c.so','libscigetfem_c',list_functions);
+addinter(libscigetfem_c_path + filesep() + 'libscigetfem_c' + getdynlibext(), 'libscigetfem_c', list_functions);
// remove temp. variables on stack
clear libscigetfem_c_path;
+clear bOK;
+clear ilib;
clear list_functions;
-clear get_file_path;
-// ------------------------------------------------------
+// ----------------------------------------------------------------------------
diff --git a/interface/src/scilab/sci_gateway/c/sci_cgne.c b/interface/src/scilab/sci_gateway/c/sci_cgne.c
index f636c5f..c354d57 100644
--- a/interface/src/scilab/sci_gateway/c/sci_cgne.c
+++ b/interface/src/scilab/sci_gateway/c/sci_cgne.c
@@ -1,16 +1,36 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <stdio.h>
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <iter.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
// x = cgs(A,b)
// cgs(A,b,tol)
@@ -40,49 +60,48 @@
int sci_spcgne(char * fname)
{
// [x,[iter]] = pmgcr(A,b,tol,[maxit,[k,[B,[x0]]]])
- int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
- double * A_pdbl_real;
- int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
- double * B_pdbl_real;
- int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
- double * b_pdbl_real;
- int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
- double * tol_pdbl_real;
- int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
- double * maxit_pdbl_real;
- int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
- double * x0_pdbl_real;
- int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
- double * xsol_pdbl_real;
- int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
- double * iter_pdbl_real;
+ int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+ double * A_pdbl_real = NULL;
+ int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+ double * B_pdbl_real = NULL;
+ int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+ double * b_pdbl_real = NULL;
+ int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+ double * tol_pdbl_real = NULL;
+ int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+ double * maxit_pdbl_real = NULL;
+ int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+ double * x0_pdbl_real = NULL;
+ int xsol_pi_nb_rows, xsol_pi_nb_cols;
+ double * xsol_pdbl_real = NULL;
+ int iter_pi_nb_rows, iter_pi_nb_cols;
+ double * iter_pdbl_real = NULL;
SciErr _SciErr;
- StrCtx _StrCtx;
int var_type;
SPMAT * A = NULL, * B = NULL;
VEC * b = NULL, * x0 = NULL, * xsol = NULL;
- int Index, steps, i, j, k;
+ int Index, steps, i, j;
CheckRhs(3,7);
CheckLhs(1,2);
// Get A
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
- _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,A_pi_address))
+ if (isVarComplex(pvApiCtx,A_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
&A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
// Convert Scilab sparse into SPMAT
@@ -98,8 +117,8 @@ int sci_spcgne(char * fname)
}
// Get b
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
// Convert Scilab vector into VEC
b = v_get(b_pi_nb_rows);
@@ -109,34 +128,34 @@ int sci_spcgne(char * fname)
}
// Get tol
- _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
// Get optional maxit
if (Rhs>=4)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
}
// Get optional B
if (Rhs>=5)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,5,&B_pi_address);
- _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,5,&B_pi_address);
+ _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,B_pi_address))
+ if (isVarComplex(pvApiCtx,B_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
// Convert SPMAT into Scilab sparse
@@ -155,8 +174,8 @@ int sci_spcgne(char * fname)
// Get optional x0
if (Rhs>=6)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
// Convert Scilab vector into VEC
x0 = v_get(x0_pi_nb_rows);
@@ -176,7 +195,7 @@ int sci_spcgne(char * fname)
memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
xsol_pi_nb_rows = b_pi_nb_rows;
xsol_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
if (xsol_pdbl_real) FREE(xsol_pdbl_real);
LhsVar(1) = Rhs+1;
@@ -187,7 +206,7 @@ int sci_spcgne(char * fname)
*iter_pdbl_real = (double)steps;
iter_pi_nb_rows = 1;
iter_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
if (iter_pdbl_real) FREE(iter_pdbl_real);
LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_cgs.c b/interface/src/scilab/sci_gateway/c/sci_cgs.c
index 8c0e4c0..94995ad 100644
--- a/interface/src/scilab/sci_gateway/c/sci_cgs.c
+++ b/interface/src/scilab/sci_gateway/c/sci_cgs.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
#include <stdio.h>
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <iter.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
// x = cgs(A,b)
// cgs(A,b,tol)
@@ -40,26 +61,25 @@
int sci_spcgs(char * fname)
{
// [x,flag,[relres,[iter,[resvec]]]] = cgs(A,b,tol,[maxit,[M,[x0]]])
- int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
- double * A_pdbl_real;
- int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
- double * b_pdbl_real;
- int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
- double * tol_pdbl_real;
- int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
- double * maxit_pdbl_real;
- int * M_pi_address, M_pi_nb_rows, M_pi_nb_cols, M_pi_nb_items, * M_pi_nb_items_row, * M_pi_col_pos;
- double * M_pdbl_real;
- int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
- double * x0_pdbl_real;
- int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
- double * xsol_pdbl_real;
- int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
- double * iter_pdbl_real;
- int * resvec_pi_address, resvec_pi_nb_rows, resvec_pi_nb_cols;
- double * resvec_pdbl_real;
+ int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+ double * A_pdbl_real = NULL;
+ int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+ double * b_pdbl_real = NULL;
+ int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+ double * tol_pdbl_real = NULL;
+ int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+ double * maxit_pdbl_real = NULL;
+ int * M_pi_address = NULL, M_pi_nb_rows, M_pi_nb_cols, M_pi_nb_items, * M_pi_nb_items_row = NULL, * M_pi_col_pos = NULL;
+ double * M_pdbl_real = NULL;
+ int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+ double * x0_pdbl_real = NULL;
+ int xsol_pi_nb_rows, xsol_pi_nb_cols;
+ double * xsol_pdbl_real = NULL;
+ int iter_pi_nb_rows, iter_pi_nb_cols;
+ double * iter_pdbl_real = NULL;
+ int resvec_pi_nb_rows, resvec_pi_nb_cols;
+ double * resvec_pdbl_real = NULL;
SciErr _SciErr;
- StrCtx _StrCtx;
int var_type;
SPMAT * A = NULL;
VEC * b = NULL, * x0 = NULL, * r0 = NULL, * xsol = NULL;
@@ -70,22 +90,22 @@ int sci_spcgs(char * fname)
CheckLhs(1,5);
// Get A
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
- _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,A_pi_address))
+ if (isVarComplex(pvApiCtx,A_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
&A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
// Convert Scilab sparse into SPMAT
@@ -101,8 +121,8 @@ int sci_spcgs(char * fname)
}
// Get b
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
// Convert Scilab vector into VEC
b = v_get(b_pi_nb_rows);
@@ -114,34 +134,34 @@ int sci_spcgs(char * fname)
}
// Get tol
- _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
// Get optional maxit
if (Rhs>=4)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
}
// Get optional M
if (Rhs>=5)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,5,&M_pi_address);
- _SciErr = getVarType(&_StrCtx,M_pi_address,&var_type);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,5,&M_pi_address);
+ _SciErr = getVarType(pvApiCtx,M_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,M_pi_address))
+ if (isVarComplex(pvApiCtx,M_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,M_pi_address, &M_pi_nb_rows, &M_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,M_pi_address, &M_pi_nb_rows, &M_pi_nb_cols,
&M_pi_nb_items, &M_pi_nb_items_row, &M_pi_col_pos, &M_pdbl_real);
// Convert SPMAT into Scilab sparse
@@ -160,8 +180,8 @@ int sci_spcgs(char * fname)
// Get optional x0
if (Rhs>=6)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
// Convert Scilab vector into VEC
x0 = v_get(x0_pi_nb_rows);
@@ -180,6 +200,7 @@ int sci_spcgs(char * fname)
}
// call iter_spcgs method.
+
catchall(xsol = iter_spcgs(A, M, b, r0, *tol_pdbl_real, x0, (int)*maxit_pdbl_real, &steps),
Scierror(999,"%s: an error (%d) occured.\n",fname,_err_num); return 0);
@@ -188,7 +209,7 @@ int sci_spcgs(char * fname)
memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
xsol_pi_nb_rows = b_pi_nb_rows;
xsol_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
if (xsol_pdbl_real) FREE(xsol_pdbl_real);
LhsVar(1) = Rhs+1;
@@ -199,7 +220,7 @@ int sci_spcgs(char * fname)
*iter_pdbl_real = (double)steps;
iter_pi_nb_rows = 1;
iter_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
if (iter_pdbl_real) FREE(iter_pdbl_real);
LhsVar(2) = Rhs+2;
@@ -211,7 +232,7 @@ int sci_spcgs(char * fname)
memcpy(resvec_pdbl_real,r0->ve,b_pi_nb_rows*sizeof(double));
resvec_pi_nb_rows = b_pi_nb_rows;
resvec_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+3, resvec_pi_nb_rows, resvec_pi_nb_cols, resvec_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+3, resvec_pi_nb_rows, resvec_pi_nb_cols, resvec_pdbl_real);
if (resvec_pdbl_real) FREE(resvec_pdbl_real);
LhsVar(3) = Rhs+3;
diff --git a/interface/src/scilab/sci_gateway/c/sci_gmres.c b/interface/src/scilab/sci_gateway/c/sci_gmres.c
index 2ba0182..f6fe4de 100644
--- a/interface/src/scilab/sci_gateway/c/sci_gmres.c
+++ b/interface/src/scilab/sci_gateway/c/sci_gmres.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
#include <stdio.h>
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <iter.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
// x = cgs(A,b)
// cgs(A,b,tol)
@@ -34,51 +55,50 @@
int sci_spgmres(char * fname)
{
// [x,[iter]] = gmres(A,b,tol,[maxit,[k,[B,[x0]]]])
- int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
- double * A_pdbl_real;
- int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
- double * B_pdbl_real;
- int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
- double * b_pdbl_real;
- int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
- double * tol_pdbl_real;
- int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
- double * maxit_pdbl_real;
- int * k_pi_address, k_pi_nb_rows, k_pi_nb_cols;
- double * k_pdbl_real;
- int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
- double * x0_pdbl_real;
- int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
- double * xsol_pdbl_real;
- int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
- double * iter_pdbl_real;
+ int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+ double * A_pdbl_real = NULL;
+ int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+ double * B_pdbl_real = NULL;
+ int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+ double * b_pdbl_real = NULL;
+ int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+ double * tol_pdbl_real = NULL;
+ int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+ double * maxit_pdbl_real = NULL;
+ int * k_pi_address = NULL, k_pi_nb_rows, k_pi_nb_cols;
+ double * k_pdbl_real = NULL;
+ int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+ double * x0_pdbl_real = NULL;
+ int xsol_pi_nb_rows, xsol_pi_nb_cols;
+ double * xsol_pdbl_real = NULL;
+ int iter_pi_nb_rows, iter_pi_nb_cols;
+ double * iter_pdbl_real = NULL;
SciErr _SciErr;
- StrCtx _StrCtx;
int var_type;
SPMAT * A = NULL, * B = NULL;
VEC * b = NULL, * x0 = NULL, * xsol = NULL;
- int Index, steps, i, j, k;
+ int Index, steps, i, j, k = 0;
CheckRhs(3,7);
CheckLhs(1,2);
// Get A
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
- _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,A_pi_address))
+ if (isVarComplex(pvApiCtx,A_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
&A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
// Convert Scilab sparse into SPMAT
@@ -94,8 +114,8 @@ int sci_spgmres(char * fname)
}
// Get b
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
// Convert Scilab vector into VEC
b = v_get(b_pi_nb_rows);
@@ -105,41 +125,41 @@ int sci_spgmres(char * fname)
}
// Get tol
- _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
// Get optional maxit
if (Rhs>=4)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
}
// Get optional k
if (Rhs>=5)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,5,&k_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,5,&k_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
}
// Get optional B
if (Rhs>=5)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,5,&B_pi_address);
- _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,5,&B_pi_address);
+ _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,B_pi_address))
+ if (isVarComplex(pvApiCtx,B_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
// Convert SPMAT into Scilab sparse
@@ -158,8 +178,8 @@ int sci_spgmres(char * fname)
// Get optional x0
if (Rhs>=6)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,6,&x0_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,6,&x0_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
// Convert Scilab vector into VEC
x0 = v_get(x0_pi_nb_rows);
@@ -179,7 +199,7 @@ int sci_spgmres(char * fname)
memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
xsol_pi_nb_rows = b_pi_nb_rows;
xsol_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
if (xsol_pdbl_real) FREE(xsol_pdbl_real);
LhsVar(1) = Rhs+1;
@@ -190,7 +210,7 @@ int sci_spgmres(char * fname)
*iter_pdbl_real = (double)steps;
iter_pi_nb_rows = 1;
iter_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
if (iter_pdbl_real) FREE(iter_pdbl_real);
LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_mgcr.c b/interface/src/scilab/sci_gateway/c/sci_mgcr.c
index c975490..a1457ae 100644
--- a/interface/src/scilab/sci_gateway/c/sci_mgcr.c
+++ b/interface/src/scilab/sci_gateway/c/sci_mgcr.c
@@ -1,16 +1,37 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
#include <stdio.h>
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <iter.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
// x = cgs(A,b)
// cgs(A,b,tol)
@@ -34,51 +55,50 @@
int sci_spmgcr(char * fname)
{
// [x,[iter]] = pmgcr(A,b,tol,[maxit,[k,[B,[x0]]]])
- int * A_pi_address, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row, * A_pi_col_pos;
- double * A_pdbl_real;
- int * B_pi_address, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row, * B_pi_col_pos;
- double * B_pdbl_real;
- int * b_pi_address, b_pi_nb_rows, b_pi_nb_cols;
- double * b_pdbl_real;
- int * tol_pi_address, tol_pi_nb_rows, tol_pi_nb_cols;
- double * tol_pdbl_real;
- int * maxit_pi_address, maxit_pi_nb_rows, maxit_pi_nb_cols;
- double * maxit_pdbl_real;
- int * k_pi_address, k_pi_nb_rows, k_pi_nb_cols;
- double * k_pdbl_real;
- int * x0_pi_address, x0_pi_nb_rows, x0_pi_nb_cols;
- double * x0_pdbl_real;
- int * xsol_pi_address, xsol_pi_nb_rows, xsol_pi_nb_cols;
- double * xsol_pdbl_real;
- int * iter_pi_address, iter_pi_nb_rows, iter_pi_nb_cols;
- double * iter_pdbl_real;
+ int * A_pi_address = NULL, A_pi_nb_rows, A_pi_nb_cols, A_pi_nb_items, * A_pi_nb_items_row = NULL, * A_pi_col_pos = NULL;
+ double * A_pdbl_real = NULL;
+ int * B_pi_address = NULL, B_pi_nb_rows, B_pi_nb_cols, B_pi_nb_items, * B_pi_nb_items_row = NULL, * B_pi_col_pos = NULL;
+ double * B_pdbl_real = NULL;
+ int * b_pi_address = NULL, b_pi_nb_rows, b_pi_nb_cols;
+ double * b_pdbl_real = NULL;
+ int * tol_pi_address = NULL, tol_pi_nb_rows, tol_pi_nb_cols;
+ double * tol_pdbl_real = NULL;
+ int * maxit_pi_address = NULL, maxit_pi_nb_rows, maxit_pi_nb_cols;
+ double * maxit_pdbl_real = NULL;
+ int * k_pi_address = NULL, k_pi_nb_rows, k_pi_nb_cols;
+ double * k_pdbl_real = NULL;
+ int * x0_pi_address = NULL, x0_pi_nb_rows, x0_pi_nb_cols;
+ double * x0_pdbl_real = NULL;
+ int xsol_pi_nb_rows, xsol_pi_nb_cols;
+ double * xsol_pdbl_real = NULL;
+ int iter_pi_nb_rows, iter_pi_nb_cols;
+ double * iter_pdbl_real = NULL;
SciErr _SciErr;
- StrCtx _StrCtx;
int var_type;
SPMAT * A = NULL, * B = NULL;
VEC * b = NULL, * x0 = NULL, * xsol = NULL;
- int Index, steps, i, j, k;
+ int Index, steps, i, j, k = 0;
CheckRhs(3,7);
CheckLhs(1,2);
// Get A
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&A_pi_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&A_pi_address);
- _SciErr = getVarType(&_StrCtx,A_pi_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,A_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,A_pi_address))
+ if (isVarComplex(pvApiCtx,A_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,A_pi_address, &A_pi_nb_rows, &A_pi_nb_cols,
&A_pi_nb_items, &A_pi_nb_items_row, &A_pi_col_pos, &A_pdbl_real);
// Convert Scilab sparse into SPMAT
@@ -94,8 +114,8 @@ int sci_spmgcr(char * fname)
}
// Get b
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&b_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&b_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,b_pi_address, &b_pi_nb_rows, &b_pi_nb_cols, &b_pdbl_real);
// Convert Scilab vector into VEC
b = v_get(b_pi_nb_rows);
@@ -105,41 +125,41 @@ int sci_spmgcr(char * fname)
}
// Get tol
- _SciErr = getVarAddressFromPosition(&_StrCtx,3,&tol_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,3,&tol_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,tol_pi_address, &tol_pi_nb_rows, &tol_pi_nb_cols, &tol_pdbl_real);
// Get optional maxit
if (Rhs>=4)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,4,&maxit_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,4,&maxit_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,maxit_pi_address, &maxit_pi_nb_rows, &maxit_pi_nb_cols, &maxit_pdbl_real);
}
// Get optional k
if (Rhs>=5)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,5,&k_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,5,&k_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,k_pi_address, &k_pi_nb_rows, &k_pi_nb_cols, &k_pdbl_real);
}
// Get optional B
if (Rhs>=6)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,6,&B_pi_address);
- _SciErr = getVarType(&_StrCtx,B_pi_address,&var_type);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,6,&B_pi_address);
+ _SciErr = getVarType(pvApiCtx,B_pi_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,B_pi_address))
+ if (isVarComplex(pvApiCtx,B_pi_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,B_pi_address, &B_pi_nb_rows, &B_pi_nb_cols,
&B_pi_nb_items, &B_pi_nb_items_row, &B_pi_col_pos, &B_pdbl_real);
// Convert SPMAT into Scilab sparse
@@ -158,8 +178,8 @@ int sci_spmgcr(char * fname)
// Get optional x0
if (Rhs>=7)
{
- _SciErr = getVarAddressFromPosition(&_StrCtx,7,&x0_pi_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,7,&x0_pi_address);
+ _SciErr = getMatrixOfDouble(pvApiCtx,x0_pi_address, &x0_pi_nb_rows, &x0_pi_nb_cols, &x0_pdbl_real);
// Convert Scilab vector into VEC
x0 = v_get(x0_pi_nb_rows);
@@ -178,7 +198,7 @@ int sci_spmgcr(char * fname)
memcpy(xsol_pdbl_real,xsol->ve,b_pi_nb_rows*sizeof(double));
xsol_pi_nb_rows = b_pi_nb_rows;
xsol_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, xsol_pi_nb_rows, xsol_pi_nb_cols, xsol_pdbl_real);
if (xsol_pdbl_real) FREE(xsol_pdbl_real);
LhsVar(1) = Rhs+1;
@@ -189,7 +209,7 @@ int sci_spmgcr(char * fname)
*iter_pdbl_real = (double)steps;
iter_pi_nb_rows = 1;
iter_pi_nb_cols = 1;
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+2, iter_pi_nb_rows, iter_pi_nb_cols, iter_pdbl_real);
if (iter_pdbl_real) FREE(iter_pdbl_real);
LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spchol.c b/interface/src/scilab/sci_gateway/c/sci_spchol.c
index 1b297e2..9ae3d81 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spchol.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spchol.c
@@ -1,13 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yann Collette.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+#include <api_scilab.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
int sci_spchol(char * fname)
{
@@ -17,35 +38,33 @@ int sci_spchol(char * fname)
int * p_in_spmat_col_pos = NULL;
double * p_in_spmat_val = NULL;
SPMAT * A = NULL;
- int Index, i, j, res;
+ int Index, i, j;
int * p_out_spmat_item_row = NULL;
int * p_out_spmat_col_pos = NULL;
double * p_out_spmat_val = NULL;
- double value, alpha = 1.0;
int nnz = 0, var_type;
SciErr _SciErr;
- StrCtx _StrCtx;
CheckRhs(1,1);
CheckLhs(1,1);
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,p_in_spmat_address))
+ if (isVarComplex(pvApiCtx,p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
///////////////////////////////
@@ -92,7 +111,7 @@ int sci_spchol(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spcholinc.c b/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
index b76bd08..472cd56 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spcholinc.c
@@ -1,14 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
#include <sciprint.h>
+#include <Scierror.h>
#include <sparse2.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
int sci_spcholinc(char * fname)
{
@@ -18,39 +38,39 @@ int sci_spcholinc(char * fname)
int * p_in_spmat_col_pos = NULL;
double * p_in_spmat_val = NULL;
SPMAT * A = NULL;
- int Index, i, j, res;
+ int Index, i, j;
int * p_out_spmat_item_row = NULL;
int * p_out_spmat_col_pos = NULL;
double * p_out_spmat_val = NULL;
- double value, alpha = 1.0;
int nnz = 0, var_type;
SciErr _SciErr;
- StrCtx _StrCtx;
CheckRhs(1,1);
CheckLhs(1,1);
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,p_in_spmat_address))
+ if (isVarComplex(pvApiCtx,p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
+#ifdef DEBUG
sciprint("DEBUG: %d, %d\n",p_in_spmat_nb_rows, p_in_spmat_nb_cols);
+#endif
///////////////////////////////
// Proceed the factorization //
@@ -96,7 +116,7 @@ int sci_spcholinc(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spchsolve.c b/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
index 3c257da..e1743bb 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spchsolve.c
@@ -1,8 +1,29 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <string.h>
@@ -19,43 +40,39 @@ int sci_spchsolve(char * fname)
int p_in_b_nb_rows, p_in_b_nb_cols;
double * p_in_b_dbl_matrix = NULL;
int * p_in_b_dbl_address = NULL;
- int p_out_x_nb_rows, p_out_x_nb_cols;
double * p_out_x_dbl_matrix = NULL;
- int * p_out_x_dbl_address = NULL;
SPMAT * A = NULL;
VEC * vB = NULL, * vOut = NULL;
- int Index, i, j, res;
- double value, alpha = 1.0;
+ int Index, i, j;
SciErr _SciErr;
- StrCtx _StrCtx;
- int nnz = 0, var_type;
+ int var_type;
CheckRhs(1,2);
CheckLhs(1,1);
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx, 1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx, 1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,p_in_spmat_address))
+ if (isVarComplex(pvApiCtx,p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
// Second, get b
- _SciErr = getVarAddressFromPosition(&_StrCtx, 2, &p_in_b_dbl_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx, 2, &p_in_b_dbl_address);
- _SciErr = getMatrixOfDouble(&_StrCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
+ _SciErr = getMatrixOfDouble(pvApiCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
////////////////////////////
// Proceed the resolution //
@@ -88,7 +105,7 @@ int sci_spchsolve(char * fname)
p_out_x_dbl_matrix = (double *)MALLOC(p_in_b_nb_rows*sizeof(double));
memcpy(p_out_x_dbl_matrix,vOut->ve,p_in_b_nb_rows*sizeof(double));
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/c/sci_splu.c b/interface/src/scilab/sci_gateway/c/sci_splu.c
index 77d785f..9e438c5 100644
--- a/interface/src/scilab/sci_gateway/c/sci_splu.c
+++ b/interface/src/scilab/sci_gateway/c/sci_splu.c
@@ -1,15 +1,35 @@
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <stdio.h>
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
-#include <sparse2.h>
-#include <err.h>
+#include "sparse2.h"
+#include "err.h"
-#define DEBUG
+//#define DEBUG
int sci_splu(char * fname)
{
@@ -23,44 +43,43 @@ int sci_splu(char * fname)
int * p_in_dbl_address = NULL;
SPMAT * A = NULL;
PERM * pivot = NULL;
- int Index, i, j, res;
+ int Index, i, j;
int * p_out_spmat_item_row = NULL;
int * p_out_spmat_col_pos = NULL;
double * p_out_spmat_val = NULL;
- double value, alpha = 1.0;
+ double alpha = 1.0;
int nnz = 0, var_type;
SciErr _SciErr;
- StrCtx _StrCtx;
CheckRhs(1,2);
CheckLhs(1,3);
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx,p_in_spmat_address))
+ if (isVarComplex(pvApiCtx,p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
if (Rhs==2)
{
// Second, get the alpha parameter
// First, access to the input variable (a matrix of doubles)
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&p_in_dbl_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&p_in_dbl_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
+ _SciErr = getMatrixOfDouble(pvApiCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
alpha = *p_in_dbl_matrix;
}
@@ -113,7 +132,7 @@ int sci_splu(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(1) = Rhs+1;
@@ -138,7 +157,7 @@ int sci_splu(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(2) = Rhs+2;
@@ -155,7 +174,7 @@ int sci_splu(char * fname)
p_out_spmat_val[i] = 1.0;
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+3, p_in_spmat_nb_rows, p_in_spmat_nb_cols, p_in_spmat_nb_rows,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+3, p_in_spmat_nb_rows, p_in_spmat_nb_cols, p_in_spmat_nb_rows,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(3) = Rhs+3;
diff --git a/interface/src/scilab/sci_gateway/c/sci_spluinc.c b/interface/src/scilab/sci_gateway/c/sci_spluinc.c
index 5f58b45..6bd48af 100644
--- a/interface/src/scilab/sci_gateway/c/sci_spluinc.c
+++ b/interface/src/scilab/sci_gateway/c/sci_spluinc.c
@@ -1,13 +1,34 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
-#include <MALLOC.h>
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <api_scilab.h>
#include <stack-c.h>
+#include <MALLOC.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <err.h>
-#define DEBUG
+//#define DEBUG
int sci_spluinc(char * fname)
{
@@ -20,14 +41,13 @@ int sci_spluinc(char * fname)
double * p_in_dbl_matrix = NULL;
int * p_in_dbl_address = NULL;
SPMAT * A = NULL;
- int Index, i, j, res;
+ int Index, i, j;
int * p_out_spmat_item_row = NULL;
int * p_out_spmat_col_pos = NULL;
double * p_out_spmat_val = NULL;
- double value, alpha = 1.0;
+ double alpha = 1.0;
int nnz = 0, var_type;
SciErr _SciErr;
- StrCtx _StrCtx;
CheckRhs(1,2);
CheckLhs(1,2);
@@ -38,9 +58,9 @@ int sci_spluinc(char * fname)
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx,1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx,p_in_spmat_address,&var_type);
+ _SciErr = getVarType(pvApiCtx,p_in_spmat_address,&var_type);
if (var_type!=sci_sparse)
{
@@ -48,22 +68,22 @@ int sci_spluinc(char * fname)
return 0;
}
- if (isVarComplex(&_StrCtx,p_in_spmat_address))
+ if (isVarComplex(pvApiCtx,p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx,p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
if (Rhs==2)
{
// Second, get the alpha parameter
// First, access to the input variable (a matrix of doubles)
- _SciErr = getVarAddressFromPosition(&_StrCtx,2,&p_in_dbl_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx,2,&p_in_dbl_address);
- _SciErr = getMatrixOfDouble(&_StrCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
+ _SciErr = getMatrixOfDouble(pvApiCtx,p_in_dbl_address, &p_in_dbl_nb_rows, &p_in_dbl_nb_cols, &p_in_dbl_matrix);
alpha = *p_in_dbl_matrix;
}
@@ -120,7 +140,7 @@ int sci_spluinc(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+1, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(1) = Rhs+1;
@@ -145,7 +165,7 @@ int sci_spluinc(char * fname)
}
}
- _SciErr = createSparseMatrix(&_StrCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
+ _SciErr = createSparseMatrix(pvApiCtx,Rhs+2, p_in_spmat_nb_rows, p_in_spmat_nb_cols, Index,
p_out_spmat_item_row, p_out_spmat_col_pos, p_out_spmat_val);
LhsVar(2) = Rhs+2;
diff --git a/interface/src/scilab/sci_gateway/c/sci_splusolve.c b/interface/src/scilab/sci_gateway/c/sci_splusolve.c
index d7ee8f3..caa49c2 100644
--- a/interface/src/scilab/sci_gateway/c/sci_splusolve.c
+++ b/interface/src/scilab/sci_gateway/c/sci_splusolve.c
@@ -1,8 +1,29 @@
-#include <api_common.h>
-#include <api_sparse.h>
-#include <api_double.h>
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yann Collette
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include <api_scilab.h>
#include <MALLOC.h>
#include <stack-c.h>
+#include <Scierror.h>
+#include <sciprint.h>
#include <sparse2.h>
#include <err.h>
@@ -19,44 +40,40 @@ int sci_splusolve(char * fname)
int p_in_b_nb_rows, p_in_b_nb_cols;
double * p_in_b_dbl_matrix = NULL;
int * p_in_b_dbl_address = NULL;
- int p_out_x_nb_rows, p_out_x_nb_cols;
double * p_out_x_dbl_matrix = NULL;
- int * p_out_x_dbl_address = NULL;
SPMAT * A = NULL;
VEC * vB = NULL, * vOut = NULL;
PERM * pivot = NULL;
- int Index, i, j, res;
- double value, alpha = 1.0;
+ int Index, i, j;
SciErr _SciErr;
- StrCtx _StrCtx;
- int nnz = 0, var_type;
+ int var_type;
CheckRhs(1,2);
CheckLhs(1,1);
// First, access to the input variable (a matrix of strings)
- _SciErr = getVarAddressFromPosition(&_StrCtx, 1,&p_in_spmat_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx, 1,&p_in_spmat_address);
- _SciErr = getVarType(&_StrCtx, p_in_spmat_address, &var_type);
+ _SciErr = getVarType(pvApiCtx, p_in_spmat_address, &var_type);
if (var_type!=sci_sparse)
{
Scierror(999,"%s: wrong parameter, a sparse matrix is needed\n",fname);
return 0;
}
- if (isVarComplex(&_StrCtx, p_in_spmat_address))
+ if (isVarComplex(pvApiCtx, p_in_spmat_address))
{
Scierror(999,"%s: wrong parameter, a real sparse matrix is needed\n",fname);
return 0;
}
- _SciErr = getSparseMatrix(&_StrCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
+ _SciErr = getSparseMatrix(pvApiCtx, p_in_spmat_address, &p_in_spmat_nb_rows, &p_in_spmat_nb_cols,
&p_in_spmat_nb_items, &p_in_spmat_items_row, &p_in_spmat_col_pos, &p_in_spmat_val);
// Second, get b
- _SciErr = getVarAddressFromPosition(&_StrCtx, 2, &p_in_b_dbl_address);
+ _SciErr = getVarAddressFromPosition(pvApiCtx, 2, &p_in_b_dbl_address);
- _SciErr = getMatrixOfDouble(&_StrCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
+ _SciErr = getMatrixOfDouble(pvApiCtx, p_in_b_dbl_address, &p_in_b_nb_rows, &p_in_b_nb_cols, &p_in_b_dbl_matrix);
////////////////////////////
// Proceed the resolution //
@@ -92,7 +109,7 @@ int sci_splusolve(char * fname)
p_out_x_dbl_matrix = (double *)MALLOC(p_in_b_nb_rows*sizeof(double));
memcpy(p_out_x_dbl_matrix,vOut->ve,p_in_b_nb_rows*sizeof(double));
- _SciErr = createMatrixOfDouble(&_StrCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
+ _SciErr = createMatrixOfDouble(pvApiCtx, Rhs+1, p_in_b_nb_rows, p_in_b_nb_cols, p_out_x_dbl_matrix);
LhsVar(1) = Rhs+1;
diff --git a/interface/src/scilab/sci_gateway/cleaner_gateway.sce b/interface/src/scilab/sci_gateway/cleaner_gateway.sce
index 030d761..a245907 100644
--- a/interface/src/scilab/sci_gateway/cleaner_gateway.sce
+++ b/interface/src/scilab/sci_gateway/cleaner_gateway.sce
@@ -1,18 +1,15 @@
-// This file is released into the public domain
-// Generated by cleaner_gateway.sce: Please, do not edit this file
-//
-sci_gateway_dir = get_absolute_file_path('cleaner_gateway.sce');
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
+// Generated by builder_gateway.sce: Please, do not edit this file
+
+sci_gateway_dir = get_absolute_file_path("cleaner_gateway.sce");
current_dir = pwd();
chdir(sci_gateway_dir);
-if ( isdir('c') ) then
- chdir('c');
- exec('cleaner.sce');
- mdelete('cleaner.sce');
+if ( isdir("c") ) then
+ chdir("c");
+ exec("cleaner.sce");
+ mdelete("cleaner.sce");
end
chdir(current_dir);
-// ====================================================================
-clear sci_gateway_dir;
-clear current_dir;
-// ====================================================================
+clear sci_gateway_dir current_dir;
diff --git a/interface/src/scilab/sci_gateway/loader_gateway.sce b/interface/src/scilab/sci_gateway/loader_gateway.sce
index cfae727..e3e7807 100644
--- a/interface/src/scilab/sci_gateway/loader_gateway.sce
+++ b/interface/src/scilab/sci_gateway/loader_gateway.sce
@@ -1,28 +1,24 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder_gateway.sce: Please, do not edit this file
-//
try
- v = getversion('scilab');
+ v = getversion("scilab");
catch
- v = [ 5 0 ]; // or older
+ v = [ 5 0 ]; // or older
end
-if (v(1) <= 5) & (v(2) < 2) then
- // new API in scilab 5.2
- error(gettext('Scilab 5.2 or more is required.'));
+if (v(1) <= 5) & (v(2) < 3) then
+ // new API in scilab 5.3
+ error(gettext("Scilab 5.3 or more is required."));
end
-sci_gateway_dir = get_absolute_file_path('loader_gateway.sce');
+sci_gateway_dir = get_absolute_file_path("loader_gateway.sce");
current_dir = pwd();
chdir(sci_gateway_dir);
-if ( isdir('c') ) then
- chdir('c');
- exec('loader.sce');
+if ( isdir("c") ) then
+ chdir("c");
+ exec("loader.sce");
end
chdir(current_dir);
-// ====================================================================
-clear sci_gateway_dir;
-clear current_dir;
-// ====================================================================
+clear sci_gateway_dir current_dir v;
diff --git a/interface/src/scilab/sci_getfem.iss b/interface/src/scilab/sci_getfem.iss
index a7d14df..b9bea25 100644
--- a/interface/src/scilab/sci_getfem.iss
+++ b/interface/src/scilab/sci_getfem.iss
@@ -1,48 +1,50 @@
-;##############################################################################################################
-; Script d'installation Inno Setup (5.2.2) pour scilab
-; Allan CORNET
-; Version TRUNK
-; This file is released into the public domain
-;##############################################################################################################
-;--------------------------------------------------------------------------------------------------------------
-; toolbox_skeleton
-;--------------------------------------------------------------------------------------------------------------
-#define TOOLBOX_SKELETON "toolbox_skeleton"
-;
-Source: contrib\{#TOOLBOX_SKELETON}\builder.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\toolbox_skeleton_redist.iss; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\changelog.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\license.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\readme.txt; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}; Components: {#COMPN_TOOLBOX_SKELETON}
-;
-Source: contrib\{#TOOLBOX_SKELETON}\demos\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\demos; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\etc\toolbox_skeleton.quit; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\etc; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\etc\toolbox_skeleton.start; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\etc; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\builder_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help; Components: {#COMPN_TOOLBOX_SKELETON}
-
-Source: contrib\{#TOOLBOX_SKELETON}\help\en_US\build_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\en_US; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\en_US\*.xml; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\en_US; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\fr_FR\build_help.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\fr_FR; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\help\fr_FR\*.xml; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\help\fr_FR; Components: {#COMPN_TOOLBOX_SKELETON}
-;
-;Source: contrib\{#TOOLBOX_SKELETON}\includes\*.h; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\includes
-;Source: contrib\{#TOOLBOX_SKELETON}\locales\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\locales
-;
-Source: contrib\{#TOOLBOX_SKELETON}\macros\buildmacros.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\macros; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\macros\*.sci; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\macros; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\builder_gateway.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\builder_gateway_c.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\sci_csum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\c\sci_csub.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp\sci_cpp_find.cxx; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp\builder_gateway_cpp.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\cpp; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran\builder_gateway_fortran.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran\sci_fsum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\sci_gateway\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\builder_src.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\builder_c.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\csum.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\c\csub.c; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\c; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\fortran\builder_fortran.sce; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\src\fortran\fsum.f; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\src\fortran; Components: {#COMPN_TOOLBOX_SKELETON}
-Source: contrib\{#TOOLBOX_SKELETON}\tests\*.*; DestDir: {app}\contrib\{#TOOLBOX_SKELETON}\tests; Flags: recursesubdirs; Components: {#COMPN_TOOLBOX_SKELETON}
-;--------------------------------------------------------------------------------------------------------------
+;##############################################################################################################
+; Inno Setup Install script for SciGetFem Module
+; http://www.jrsoftware.org/isinfo.php
+; Yann COLLETTE
+; This file is released into the public domain
+;##############################################################################################################
+; modify this path where is sciglpk directory
+#define BinariesSourcePath "E:\Scilab\toolboxes\getfem\interface\src\scilab"
+;
+#define SCIGETFEM_Module_version "3914"
+#define CurrentYear "2011"
+#define SCIGETFEM_ModuleDirFilename "scigetfem-rev3914"
+;##############################################################################################################
+[Setup]
+; Debut Données de base à renseigner suivant version
+SourceDir={#BinariesSourcePath}
+AppName=SciGetFem Module
+AppVerName=SciGetFem Module version rev3914
+DefaultDirName={pf}/{#SCIGETFEM_ModuleDirFilename}
+InfoAfterfile=readme.txt
+LicenseFile=license.txt
+WindowVisible=true
+AppPublisher=Home
+BackColorDirection=lefttoright
+AppCopyright=Copyright © {#CurrentYear}
+Compression=lzma/max
+InternalCompressLevel=normal
+SolidCompression=true
+VersionInfoVersion={#SCIGETFEM_Module_version}
+VersionInfoCompany=Home
+;##############################################################################################################
+[Files]
+; Add here files that you want to add
+Source: loader.sce; DestDir: {app}
+Source: license.txt; DestDir: {app}
+Source: readme.txt; DestDir: {app}
+Source: etc\sci_getfem.quit; DestDir: {app}\etc
+Source: etc\sci_getfem.start; DestDir: {app}\etc
+Source: sci_gateway\loader_gateway.sce; DestDir: {app}\sci_gateway
+Source: sci_gateway\c\loader.sce; DestDir: {app}\sci_gateway\c
+Source: sci_gateway\c\*.dll; DestDir: {app}\sci_gateway\c
+Source: macros\*.*; DestDir: {app}\macros;
+Source: macros\overload\*.*; DestDir: {app}\macros\overload;
+Source: demos\*.*; DestDir: {app}\demos;
+Source: demos\data\*.*; DestDir: {app}\demos\data;
+Source: jar\*.*; DestDir: {app}\jar
+Source: src\c\loader.sce; DestDir: {app}\src\c
+Source: src\c\*.dll; DestDir: {app}\src\c
+;
+;##############################################################################################################
diff --git a/interface/src/scilab/src/c/DOC/tutorial.txt b/interface/src/scilab/src/c/DOC/tutorial.txt
index 1b21492..69d27cd 100644
--- a/interface/src/scilab/src/c/DOC/tutorial.txt
+++ b/interface/src/scilab/src/c/DOC/tutorial.txt
@@ -705,7 +705,7 @@ to the screen.
Some of the most common routines have variants that take a variable
number of arguments. These are the routines .._get_vars(), .._resize_vars()
-and .._free_vars(). These correspond to the the basic routines .._get(),
+and .._free_vars(). These correspond to the basic routines .._get(),
.._resize() and .._free() respectively. Also there is the
mem_stat_reg_vars() routine which registers a list of static workspace
variables. This corresponds to mem_stat_reg_list() for a single variable.
diff --git a/interface/src/scilab/src/c/MACHINES/Cray/machine.h b/interface/src/scilab/src/c/MACHINES/Cray/machine.h
index d64beb4..90e6e5c 100644
--- a/interface/src/scilab/src/c/MACHINES/Cray/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/Cray/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* machine.h. Generated automatically by configure. */
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
/* This is for use with "configure" -- if you are not using configure
then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/MACHINES/GCC/machine.h b/interface/src/scilab/src/c/MACHINES/GCC/machine.h
index a3ab270..f3c12ae 100644
--- a/interface/src/scilab/src/c/MACHINES/GCC/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/GCC/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* machine.h. Generated automatically by configure. */
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
diff --git a/interface/src/scilab/src/c/MACHINES/Linux/machine.h b/interface/src/scilab/src/c/MACHINES/Linux/machine.h
index c78684b..94d5156 100644
--- a/interface/src/scilab/src/c/MACHINES/Linux/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/Linux/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* machine.h. Generated automatically by configure. */
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
diff --git a/interface/src/scilab/src/c/MACHINES/RS6000/machine.h b/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
index b3bbf0b..bbafaf2 100644
--- a/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/RS6000/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* Note special macros: ANSI_C (ANSI C syntax)
SEGMENTED (segmented memory machine e.g. MS-DOS)
diff --git a/interface/src/scilab/src/c/MACHINES/SGI/machine.h b/interface/src/scilab/src/c/MACHINES/SGI/machine.h
index 1a35754..437913d 100644
--- a/interface/src/scilab/src/c/MACHINES/SGI/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/SGI/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* machine.h. Generated automatically by configure. */
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
/* This is for use with "configure" -- if you are not using configure
then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/MACHINES/SPARC/machine.h b/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
index a62657c..82b7a47 100644
--- a/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
+++ b/interface/src/scilab/src/c/MACHINES/SPARC/machine.h
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* Note special macros: ANSI_C (ANSI C syntax)
SEGMENTED (segmented memory machine e.g. MS-DOS)
diff --git a/interface/src/scilab/src/c/README b/interface/src/scilab/src/c/README
index cfd3256..1941354 100644
--- a/interface/src/scilab/src/c/README
+++ b/interface/src/scilab/src/c/README
@@ -81,7 +81,7 @@ files: meschach[01234].shar (which contain the library itself),
meschach0.shar (which contains basic documentation and machine dependent
files for a number of machines). Of the meschach[1234].shar files, only
meschach[12].shar are needed for the basic Meschach library; the third
-.shar file contains the sparse matrix routines, and the the fourth contains
+.shar file contains the sparse matrix routines, and the fourth contains
the routines for complex numbers, vectors and matrices. There is also a
README file that you should get from meschach0.shar.
@@ -257,12 +257,12 @@ into a library. Consult your local compiler's manual for details of how to
do this.
When compiling programs/routines that use Meschach, you will need to
-have access the the header files in the INCLUDE directory. The INCLUDE
+have access to the header files in the INCLUDE directory. The INCLUDE
directory's contents can be copied to the directory where the
programs/routines are compiled.
The files in the DOC directory form a very brief form of documentation
-on the the library routines in Meschach. See the printed documentation for
+on the library routines in Meschach. See the printed documentation for
more comprehensive documentation of the Meschach routines. This can be
obtained from the authors via email.
diff --git a/interface/src/scilab/src/c/builder_c.sce b/interface/src/scilab/src/c/builder_c.sce
index 67b0a28..4fa565a 100644
--- a/interface/src/scilab/src/c/builder_c.sce
+++ b/interface/src/scilab/src/c/builder_c.sce
@@ -18,11 +18,17 @@ Files = ['bdfactor.c','hessen.c','machine.c','spchfctr.c', ...
'zfunc.c','zhsehldr.c','zmatio.c','zmemory.c','zschur.c', ...
'zgivens.c','zlufctr.c','zmatlab.c','znorm.c','zsolve.c'];
Symbols = ['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne', ...
- 'iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor'];
+ 'iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor','spLUfactor',...
+ 'spLUsolve','v_set_val','v_free','sp_free','v_get','restart'];
libs = [];
ldflags = '';
-cflags = '-I' + sparsecomp_path + ' -I' + sparsecomp_path + '/MACHINES/GCC';
+
+if getos()=='Windows' then
+ cflags = '/I' + sparsecomp_path + ' /I' + sparsecomp_path + '/MACHINES/GCC /DHAVE_CONFIG_H';
+else
+ cflags = '-I' + sparsecomp_path + ' -I' + sparsecomp_path + '/MACHINES/GCC -DHAVE_CONFIG_H';
+end
tbx_build_src(Symbols, Files, 'c', sparsecomp_path, libs, ldflags, cflags);
diff --git a/interface/src/scilab/src/c/cleaner.sce b/interface/src/scilab/src/c/cleaner.sce
index 3f248d7..e43f6dd 100644
--- a/interface/src/scilab/src/c/cleaner.sce
+++ b/interface/src/scilab/src/c/cleaner.sce
@@ -1,4 +1,4 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder.sce : Please, do not edit this file
// cleaner.sce
// ------------------------------------------------------
diff --git a/interface/src/scilab/src/c/err.c b/interface/src/scilab/src/c/err.c
index c625d18..00347ac 100644
--- a/interface/src/scilab/src/c/err.c
+++ b/interface/src/scilab/src/c/err.c
@@ -31,7 +31,7 @@
Ported to Pyramid 9810 late 1987
*/
-static char rcsid[] = "$Id: err.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: err.c 3865 2011-11-02 06:38:43Z ycollet $";
#include <stdio.h>
#include <setjmp.h>
@@ -102,8 +102,11 @@ static char *warn_mesg[] = {
#define MAX_ERRS 100
+#ifdef _MSC_VER
+jmp_buf __declspec(dllexport) restart;
+#else
jmp_buf restart;
-
+#endif
/* array of pointers to lists of errors */
diff --git a/interface/src/scilab/src/c/err.h b/interface/src/scilab/src/c/err.h
index 7b2659a..e2288c2 100644
--- a/interface/src/scilab/src/c/err.h
+++ b/interface/src/scilab/src/c/err.h
@@ -26,7 +26,7 @@
/* err.h 28/09/1993 */
-/* RCS id: $Id: err.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: err.h 3885 2011-11-08 20:05:30Z ycollet $ */
#ifndef ERRHEADER
@@ -38,8 +38,15 @@
/* Error recovery */
-extern jmp_buf restart;
-
+#ifdef _MSC_VER
+#ifdef DLLIMPORT
+jmp_buf __declspec(dllimport) restart;
+#else
+jmp_buf __declspec(dllexport) restart;
+#endif
+#else
+extern jmp_buf restart;
+#endif
/* max. # of error lists */
#define ERR_LIST_MAX_LEN 10
diff --git a/interface/src/scilab/src/c/loader.sce b/interface/src/scilab/src/c/loader.sce
index 40ba75e..4b70767 100644
--- a/interface/src/scilab/src/c/loader.sce
+++ b/interface/src/scilab/src/c/loader.sce
@@ -1,23 +1,103 @@
-// This file is released into the public domain
+// This file is released under the 3-clause BSD license. See COPYING-BSD.
// Generated by builder.sce : Please, do not edit this file
+// ----------------------------------------------------------------------------
//
-
sp_get_path = get_absolute_file_path('loader.sce');
-
+//
// ulink previous function with same name
-[bOK,ilib] = c_link('sp_get');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('sp_set_val');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spICHfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('sp_col_access');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spILUfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spcgne');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spcgs');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spgmres');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('iter_spmgcr');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spCHfactor');if (bOK) then ulink(ilib),end
-[bOK,ilib] = c_link('spILUfactor');if (bOK) then ulink(ilib),end
-link(sp_get_path+'libsp_get'+getdynlibext(),['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne','iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor'],'c');
+[bOK, ilib] = c_link('sp_get');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_set_val');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spICHfactor');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_col_access');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spILUfactor');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spcgne');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spcgs');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spgmres');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('iter_spmgcr');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spCHfactor');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spILUfactor');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spLUfactor');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('spLUsolve');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_set_val');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_free');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('sp_free');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('v_get');
+if bOK then
+ ulink(ilib);
+end
+//
+[bOK, ilib] = c_link('restart');
+if bOK then
+ ulink(ilib);
+end
+//
+link(sp_get_path + 'libsp_get' + getdynlibext(), ['sp_get','sp_set_val','spICHfactor','sp_col_access','spILUfactor','iter_spcgne','iter_spcgs','iter_spgmres','iter_spmgcr','spCHfactor','spILUfactor','spLUfactor','spLUsolve','v_set_val','v_free','sp_free','v_get','restart'],'c');
// remove temp. variables on stack
clear sp_get_path;
-clear get_file_path;
-// ------------------------------------------------------
+clear bOK;
+clear ilib;
+// ----------------------------------------------------------------------------
diff --git a/interface/src/scilab/src/c/machine.h b/interface/src/scilab/src/c/machine.h
index 88533b5..dcf786a 100644
--- a/interface/src/scilab/src/c/machine.h
+++ b/interface/src/scilab/src/c/machine.h
@@ -1,8 +1,31 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* machine.h. Generated automatically by configure. */
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
-/* RCS id: $Id: machine.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: machine.h 4050 2012-02-26 13:04:17Z renard $ */
/* This is for use with "configure" -- if you are not using configure
then use machine.van for the "vanilla" version of machine.h */
diff --git a/interface/src/scilab/src/c/machine.h.in b/interface/src/scilab/src/c/machine.h.in
index 4f4efb6..e205f15 100644
--- a/interface/src/scilab/src/c/machine.h.in
+++ b/interface/src/scilab/src/c/machine.h.in
@@ -1,3 +1,26 @@
+/**************************************************************************
+**
+** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
+**
+** Meschach Library
+**
+** This Meschach Library is provided "as is" without any express
+** or implied warranty of any kind with respect to this software.
+** In particular the authors shall not be liable for any direct,
+** indirect, special, incidental or consequential damages arising
+** in any way from use of the software.
+**
+** Everyone is granted permission to copy, modify and redistribute this
+** Meschach Library, provided:
+** 1. All copies contain this copyright notice.
+** 2. All modified copies shall carry a notice stating who
+** made the last modification and the date of such modification.
+** 3. No charge is made for this software or works derived from it.
+** This clause shall not be construed as constraining other software
+** distributed on the same medium as this software, nor is a
+** distribution fee considered a charge.
+**
+***************************************************************************/
/* Any machine specific stuff goes here */
/* Add details necessary for your own installation here! */
diff --git a/interface/src/scilab/src/c/matop.c b/interface/src/scilab/src/c/matop.c
index df20bd4..da414ad 100644
--- a/interface/src/scilab/src/c/matop.c
+++ b/interface/src/scilab/src/c/matop.c
@@ -30,12 +30,11 @@
#include <stdio.h>
#include "matrix.h"
-static char rcsid[] = "$Id: matop.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: matop.c 3865 2011-11-02 06:38:43Z ycollet $";
/* m_add -- matrix addition -- may be in-situ */
-MAT *m_add(mat1,mat2,out)
-MAT *mat1,*mat2,*out;
+MAT * m_add(MAT * mat1, MAT * mat2, MAT * out)
{
u_int m,n,i;
@@ -59,8 +58,7 @@ MAT *mat1,*mat2,*out;
}
/* m_sub -- matrix subtraction -- may be in-situ */
-MAT *m_sub(mat1,mat2,out)
-MAT *mat1,*mat2,*out;
+MAT * m_sub(MAT * mat1, MAT * mat2, MAT * out)
{
u_int m,n,i;
@@ -84,23 +82,21 @@ MAT *mat1,*mat2,*out;
}
/* m_mlt -- matrix-matrix multiplication */
-MAT *m_mlt(A,B,OUT)
-MAT *A,*B,*OUT;
-{
+MAT * m_mlt(MAT * A, MAT * B, MAT * out) {
u_int i, /* j, */ k, m, n, p;
- Real **A_v, **B_v /*, *B_row, *OUT_row, sum, tmp */;
+ Real **A_v, **B_v /*, *B_row, *out_row, sum, tmp */;
if ( A==(MAT *)NULL || B==(MAT *)NULL )
error(E_NULL,"m_mlt");
if ( A->n != B->m )
error(E_SIZES,"m_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"m_mlt");
m = A->m; n = A->n; p = B->n;
A_v = A->me; B_v = B->me;
- if ( OUT==(MAT *)NULL || OUT->m != A->m || OUT->n != B->n )
- OUT = m_resize(OUT,A->m,B->n);
+ if ( out==(MAT *)NULL || out->m != A->m || out->n != B->n )
+ out = m_resize(out,A->m,B->n);
/****************************************************************
for ( i=0; i<m; i++ )
@@ -109,101 +105,97 @@ MAT *A,*B,*OUT;
sum = 0.0;
for ( k=0; k<n; k++ )
sum += A_v[i][k]*B_v[k][j];
- OUT->me[i][j] = sum;
+ out->me[i][j] = sum;
}
****************************************************************/
- m_zero(OUT);
+ m_zero(out);
for ( i=0; i<m; i++ )
for ( k=0; k<n; k++ )
{
if ( A_v[i][k] != 0.0 )
- __mltadd__(OUT->me[i],B_v[k],A_v[i][k],(int)p);
+ __mltadd__(out->me[i],B_v[k],A_v[i][k],(int)p);
/**************************************************
- B_row = B_v[k]; OUT_row = OUT->me[i];
+ B_row = B_v[k]; out_row = out->me[i];
for ( j=0; j<p; j++ )
- (*OUT_row++) += tmp*(*B_row++);
+ (*out_row++) += tmp*(*B_row++);
**************************************************/
}
- return OUT;
+ return out;
}
/* mmtr_mlt -- matrix-matrix transposed multiplication
- -- A.B^T is returned, and stored in OUT */
-MAT *mmtr_mlt(A,B,OUT)
-MAT *A, *B, *OUT;
+ -- A.B^T is returned, and stored in out */
+MAT *mmtr_mlt(MAT * A, MAT * B, MAT * out)
{
int i, j, limit;
/* Real *A_row, *B_row, sum; */
if ( ! A || ! B )
error(E_NULL,"mmtr_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"mmtr_mlt");
if ( A->n != B->n )
error(E_SIZES,"mmtr_mlt");
- if ( ! OUT || OUT->m != A->m || OUT->n != B->m )
- OUT = m_resize(OUT,A->m,B->m);
+ if ( ! out || out->m != A->m || out->n != B->m )
+ out = m_resize(out,A->m,B->m);
limit = A->n;
for ( i = 0; i < A->m; i++ )
for ( j = 0; j < B->m; j++ )
{
- OUT->me[i][j] = __ip__(A->me[i],B->me[j],(int)limit);
+ out->me[i][j] = __ip__(A->me[i],B->me[j],(int)limit);
/**************************************************
sum = 0.0;
A_row = A->me[i];
B_row = B->me[j];
for ( k = 0; k < limit; k++ )
sum += (*A_row++)*(*B_row++);
- OUT->me[i][j] = sum;
+ out->me[i][j] = sum;
**************************************************/
}
- return OUT;
+ return out;
}
/* mtrm_mlt -- matrix transposed-matrix multiplication
- -- A^T.B is returned, result stored in OUT */
-MAT *mtrm_mlt(A,B,OUT)
-MAT *A, *B, *OUT;
+ -- A^T.B is returned, result stored in out */
+MAT * mtrm_mlt(MAT * A, MAT * B, MAT * out)
{
int i, k, limit;
- /* Real *B_row, *OUT_row, multiplier; */
+ /* Real *B_row, *out_row, multiplier; */
if ( ! A || ! B )
error(E_NULL,"mmtr_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"mtrm_mlt");
if ( A->m != B->m )
error(E_SIZES,"mmtr_mlt");
- if ( ! OUT || OUT->m != A->n || OUT->n != B->n )
- OUT = m_resize(OUT,A->n,B->n);
+ if ( ! out || out->m != A->n || out->n != B->n )
+ out = m_resize(out,A->n,B->n);
limit = B->n;
- m_zero(OUT);
+ m_zero(out);
for ( k = 0; k < A->m; k++ )
for ( i = 0; i < A->n; i++ )
{
if ( A->me[k][i] != 0.0 )
- __mltadd__(OUT->me[i],B->me[k],A->me[k][i],(int)limit);
+ __mltadd__(out->me[i],B->me[k],A->me[k][i],(int)limit);
/**************************************************
multiplier = A->me[k][i];
- OUT_row = OUT->me[i];
+ out_row = out->me[i];
B_row = B->me[k];
for ( j = 0; j < limit; j++ )
- *(OUT_row++) += multiplier*(*B_row++);
+ *(out_row++) += multiplier*(*B_row++);
**************************************************/
}
- return OUT;
+ return out;
}
/* mv_mlt -- matrix-vector multiplication
-- Note: b is treated as a column vector */
-VEC *mv_mlt(A,b,out)
-MAT *A;
-VEC *b,*out;
+VEC * mv_mlt(MAT * A, VEC * b, VEC * out)
{
u_int i, m, n;
Real **A_v, *b_v /*, *A_row */;
@@ -237,9 +229,7 @@ VEC *b,*out;
}
/* sm_mlt -- scalar-matrix multiply -- may be in-situ */
-MAT *sm_mlt(scalar,matrix,out)
-double scalar;
-MAT *matrix,*out;
+MAT * sm_mlt(double scalar, MAT * matrix, MAT * out)
{
u_int m,n,i;
@@ -259,9 +249,7 @@ MAT *matrix,*out;
/* vm_mlt -- vector-matrix multiplication
-- Note: b is treated as a row vector */
-VEC *vm_mlt(A,b,out)
-MAT *A;
-VEC *b,*out;
+VEC * vm_mlt(MAT * A, VEC * b, VEC * out)
{
u_int j,m,n;
/* Real sum,**A_v,*b_v; */
@@ -296,8 +284,7 @@ VEC *b,*out;
}
/* m_transp -- transpose matrix */
-MAT *m_transp(in,out)
-MAT *in, *out;
+MAT * m_transp(MAT * in, MAT * out)
{
int i, j;
int in_situ;
@@ -327,9 +314,7 @@ MAT *in, *out;
}
/* swap_rows -- swaps rows i and j of matrix A upto column lim */
-MAT *swap_rows(A,i,j,lo,hi)
-MAT *A;
-int i, j, lo, hi;
+MAT * swap_rows(MAT * A, int i, int j, int lo, int hi)
{
int k;
Real **A_me, tmp;
@@ -352,9 +337,7 @@ int i, j, lo, hi;
}
/* swap_cols -- swap columns i and j of matrix A upto row lim */
-MAT *swap_cols(A,i,j,lo,hi)
-MAT *A;
-int i, j, lo, hi;
+MAT * swap_cols(MAT * A, int i, int j, int lo, int hi)
{
int k;
Real **A_me, tmp;
@@ -379,9 +362,7 @@ int i, j, lo, hi;
/* ms_mltadd -- matrix-scalar multiply and add
-- may be in situ
-- returns out == A1 + s*A2 */
-MAT *ms_mltadd(A1,A2,s,out)
-MAT *A1, *A2, *out;
-double s;
+MAT * ms_mltadd(MAT * A1, MAT * A2, double s, MAT * out)
{
/* register Real *A1_e, *A2_e, *out_e; */
/* register int j; */
@@ -418,10 +399,7 @@ double s;
/* mv_mltadd -- matrix-vector multiply and add
-- may not be in situ
-- returns out == v1 + alpha*A*v2 */
-VEC *mv_mltadd(v1,v2,A,alpha,out)
-VEC *v1, *v2, *out;
-MAT *A;
-double alpha;
+VEC * mv_mltadd(VEC * v1, VEC * v2, MAT * A, double alpha, VEC * out)
{
/* register int j; */
int i, m, n;
@@ -460,10 +438,7 @@ double alpha;
/* vm_mltadd -- vector-matrix multiply and add
-- may not be in situ
-- returns out' == v1' + v2'*A */
-VEC *vm_mltadd(v1,v2,A,alpha,out)
-VEC *v1, *v2, *out;
-MAT *A;
-double alpha;
+VEC * vm_mltadd(VEC * v1, VEC * v2, MAT * A,double alpha, VEC * out)
{
int /* i, */ j, m, n;
Real tmp, /* *A_e, */ *out_ve;
diff --git a/interface/src/scilab/src/c/matrix.h b/interface/src/scilab/src/c/matrix.h
index 39990a3..0b72d50 100644
--- a/interface/src/scilab/src/c/matrix.h
+++ b/interface/src/scilab/src/c/matrix.h
@@ -30,7 +30,7 @@
#ifndef MATRIXH
-/* RCS id: $Id: matrix.h 3690 2010-09-02 09:55:19Z lsaavedr $ */
+/* RCS id: $Id: matrix.h 3911 2011-11-16 17:55:09Z ycollet $ */
#define MATRIXH
@@ -178,8 +178,10 @@ extern BAND *bd_get(int,int,int), *bd_resize(BAND *,int,int,int);
/* free (de-allocate) (band) matrices, vectors, permutations and
integer vectors */
extern int iv_free(IVEC *);
-extern m_free(MAT *),v_free(VEC *),px_free(PERM *);
-extern int bd_free(BAND *);
+extern int m_free(MAT *);
+extern int v_free(VEC *);
+extern int px_free(PERM *);
+extern int bd_free(BAND *);
#endif
diff --git a/interface/src/scilab/src/c/sparse.c b/interface/src/scilab/src/c/sparse.c
index 2f74df3..0c2ceee 100644
--- a/interface/src/scilab/src/c/sparse.c
+++ b/interface/src/scilab/src/c/sparse.c
@@ -34,7 +34,7 @@
#include "sparse.h"
-static char rcsid[] = "$Id: sparse.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: sparse.c 3865 2011-11-02 06:38:43Z ycollet $";
#define MINROWLEN 10
@@ -650,9 +650,9 @@ SPMAT *A;
}
/* sp_copy2 -- copy sparse matrix (type 2)
- -- keeps structure of the OUT matrix */
-SPMAT *sp_copy2(A,OUT)
-SPMAT *A, *OUT;
+ -- keeps structure of the out matrix */
+SPMAT *sp_copy2(A,out)
+SPMAT *A, *out;
{
int i /* , idx, len1, len2 */;
SPROW *r1, *r2;
@@ -661,45 +661,45 @@ SPMAT *A, *OUT;
if ( ! A )
error(E_NULL,"sp_copy2");
- if ( ! OUT )
- OUT = sp_get(A->m,A->n,10);
+ if ( ! out )
+ out = sp_get(A->m,A->n,10);
if ( ! scratch ) {
scratch = sprow_xpd(scratch,MINROWLEN,TYPE_SPROW);
MEM_STAT_REG(scratch,TYPE_SPROW);
}
- if ( OUT->m < A->m )
+ if ( out->m < A->m )
{
if (mem_info_is_on()) {
mem_bytes(TYPE_SPMAT,A->max_m*sizeof(SPROW),
A->m*sizeof(SPROW));
}
- OUT->row = RENEW(OUT->row,A->m,SPROW);
- if ( ! OUT->row )
+ out->row = RENEW(out->row,A->m,SPROW);
+ if ( ! out->row )
error(E_MEM,"sp_copy2");
- for ( i = OUT->m; i < A->m; i++ )
+ for ( i = out->m; i < A->m; i++ )
{
- OUT->row[i].elt = NEW_A(MINROWLEN,row_elt);
- if ( ! OUT->row[i].elt )
+ out->row[i].elt = NEW_A(MINROWLEN,row_elt);
+ if ( ! out->row[i].elt )
error(E_MEM,"sp_copy2");
else if (mem_info_is_on()) {
mem_bytes(TYPE_SPMAT,0,MINROWLEN*sizeof(row_elt));
}
- OUT->row[i].maxlen = MINROWLEN;
- OUT->row[i].len = 0;
+ out->row[i].maxlen = MINROWLEN;
+ out->row[i].len = 0;
}
- OUT->m = A->m;
+ out->m = A->m;
}
- OUT->flag_col = OUT->flag_diag = FALSE;
- /* sp_zero(OUT); */
+ out->flag_col = out->flag_diag = FALSE;
+ /* sp_zero(out); */
for ( i = 0; i < A->m; i++ )
{
- r1 = &(A->row[i]); r2 = &(OUT->row[i]);
+ r1 = &(A->row[i]); r2 = &(out->row[i]);
sprow_copy(r1,r2,scratch,TYPE_SPROW);
if ( r2->maxlen < scratch->len )
sprow_xpd(r2,scratch->len,TYPE_SPMAT);
@@ -716,8 +716,8 @@ SPMAT *A, *OUT;
*******************************************************/
}
- sp_col_access(OUT);
- return OUT;
+ sp_col_access(out);
+ return out;
}
/* sp_resize -- resize a sparse matrix
diff --git a/interface/src/scilab/src/c/spbkp.c b/interface/src/scilab/src/c/spbkp.c
index b1daf69..c5a8320 100644
--- a/interface/src/scilab/src/c/spbkp.c
+++ b/interface/src/scilab/src/c/spbkp.c
@@ -27,11 +27,11 @@
/*
Sparse matrix Bunch--Kaufman--Parlett factorisation and solve
Radical revision started Thu 05th Nov 1992, 09:36:12 AM
- to use Karen George's suggestion of leaving the the row elements unordered
+ to use Karen George's suggestion of leaving the row elements unordered
Radical revision completed Mon 07th Dec 1992, 10:59:57 AM
*/
-static char rcsid[] = "$Id: spbkp.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: spbkp.c 4023 2012-02-15 10:06:09Z logari81 $";
#include <stdio.h>
#include "sparse2.h"
diff --git a/interface/src/scilab/src/c/zfunc.c b/interface/src/scilab/src/c/zfunc.c
index b028347..4531ef0 100644
--- a/interface/src/scilab/src/c/zfunc.c
+++ b/interface/src/scilab/src/c/zfunc.c
@@ -28,10 +28,10 @@
-- if not already defined
*/
-#include "zmatrix.h"
#include <math.h>
+#include "zmatrix.h"
-static char rcsid[] = "$Id: zfunc.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zfunc.c 3916 2011-11-17 17:47:20Z ycollet $";
#ifndef COMPLEX_H
@@ -49,8 +49,7 @@ double real, imag;
#ifndef zneg
/* zneg -- returns negative of z */
-complex zneg(z)
-complex z;
+complex zneg(complex z)
{
z.re = - z.re;
z.im = - z.im;
@@ -61,8 +60,7 @@ complex z;
#ifndef zabs
/* zabs -- returns |z| */
-double zabs(z)
-complex z;
+double zabs(complex z)
{
Real x, y, tmp;
int x_expt, y_expt;
@@ -89,8 +87,7 @@ complex z;
#ifndef zadd
/* zadd -- returns z1+z2 */
-complex zadd(z1,z2)
-complex z1, z2;
+complex zadd(complex z1, complex z2)
{
complex z;
@@ -103,8 +100,7 @@ complex z1, z2;
#ifndef zsub
/* zsub -- returns z1-z2 */
-complex zsub(z1,z2)
-complex z1, z2;
+complex zsub(complex z1, complex z2)
{
complex z;
@@ -117,8 +113,7 @@ complex z1, z2;
#ifndef zmlt
/* zmlt -- returns z1*z2 */
-complex zmlt(z1,z2)
-complex z1, z2;
+complex zmlt(complex z1, complex z2)
{
complex z;
@@ -131,8 +126,7 @@ complex z1, z2;
#ifndef zinv
/* zmlt -- returns 1/z */
-complex zinv(z)
-complex z;
+complex zinv(complex z)
{
Real x, y, tmp;
int x_expt, y_expt;
@@ -162,8 +156,7 @@ complex z;
#ifndef zdiv
/* zdiv -- returns z1/z2 */
-complex zdiv(z1,z2)
-complex z1, z2;
+complex zdiv(complex z1, complex z2)
{
return zmlt(z1,zinv(z2));
}
@@ -171,8 +164,7 @@ complex z1, z2;
#ifndef zsqrt
/* zsqrt -- returns sqrt(z); uses branch with Re sqrt(z) >= 0 */
-complex zsqrt(z)
-complex z;
+complex zsqrt(complex z)
{
complex w; /* == sqrt(z) at end */
Real alpha;
@@ -195,8 +187,7 @@ complex z;
#ifndef zexp
/* zexp -- returns exp(z) */
-complex zexp(z)
-complex z;
+complex zexp(complex z)
{
complex w; /* == exp(z) at end */
Real r;
@@ -211,8 +202,7 @@ complex z;
#ifndef zlog
/* zlog -- returns log(z); uses principal branch with -pi <= Im log(z) <= pi */
-complex zlog(z)
-complex z;
+complex zlog(complex z)
{
complex w; /* == log(z) at end */
@@ -224,8 +214,7 @@ complex z;
#endif
#ifndef zconj
-complex zconj(z)
-complex z;
+complex zconj(complex z)
{
complex w; /* == conj(z) */
diff --git a/interface/src/scilab/src/c/zgivens.c b/interface/src/scilab/src/c/zgivens.c
index f9f786c..29e1a6c 100644
--- a/interface/src/scilab/src/c/zgivens.c
+++ b/interface/src/scilab/src/c/zgivens.c
@@ -35,10 +35,11 @@
static char rcsid[] = "$Id: ";
#include <stdio.h>
-#include "zmatrix.h"
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix.h"
+#include "zmatrix2.h"
+
/*
(Complex) Givens rotation matrix:
[ c -s ]
diff --git a/interface/src/scilab/src/c/zhsehldr.c b/interface/src/scilab/src/c/zhsehldr.c
index 8d0f3ac..fff9e57 100644
--- a/interface/src/scilab/src/c/zhsehldr.c
+++ b/interface/src/scilab/src/c/zhsehldr.c
@@ -34,13 +34,14 @@
Complex version
*/
-static char rcsid[] = "$Id: zhsehldr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zhsehldr.c 3865 2011-11-02 06:38:43Z ycollet $";
#include <stdio.h>
-#include "zmatrix.h"
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix.h"
+#include "zmatrix2.h"
+
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
/* zhhvec -- calulates Householder vector to eliminate all entries after the
diff --git a/interface/src/scilab/src/c/zlufctr.c b/interface/src/scilab/src/c/zlufctr.c
index e1f6cd9..7bf4c53 100644
--- a/interface/src/scilab/src/c/zlufctr.c
+++ b/interface/src/scilab/src/c/zlufctr.c
@@ -28,13 +28,14 @@
Complex version
*/
-static char rcsid[] = "$Id: zlufctr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zlufctr.c 3865 2011-11-02 06:38:43Z ycollet $";
#include <stdio.h>
-#include "zmatrix.h"
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix.h"
+#include "zmatrix2.h"
+
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
diff --git a/interface/src/scilab/src/c/zmachine.c b/interface/src/scilab/src/c/zmachine.c
index a76ee90..0f17b2d 100644
--- a/interface/src/scilab/src/c/zmachine.c
+++ b/interface/src/scilab/src/c/zmachine.c
@@ -31,17 +31,16 @@
full advantage of specialised architectures (pipelining, vector
processors etc).
*/
-static char *rcsid = "$Id: zmachine.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char *rcsid = "$Id: zmachine.c 3865 2011-11-02 06:38:43Z ycollet $";
-#include "machine.h"
-#include "zmatrix.h"
#include <math.h>
+#include "machine.h"
+#include "zmatrix.h"
+
/* __zconj__ -- complex conjugate */
-void __zconj__(zp,len)
-complex *zp;
-int len;
+void __zconj__(complex * zp, int len)
{
int i;
diff --git a/interface/src/scilab/src/c/zmatop.c b/interface/src/scilab/src/c/zmatop.c
index c587c0e..f5b0a46 100644
--- a/interface/src/scilab/src/c/zmatop.c
+++ b/interface/src/scilab/src/c/zmatop.c
@@ -28,7 +28,7 @@
#include <stdio.h>
#include "zmatrix.h"
-static char rcsid[] = "$Id: zmatop.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zmatop.c 3865 2011-11-02 06:38:43Z ycollet $";
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
@@ -90,8 +90,8 @@ ZMAT *mat1,*mat2,*out;
*/
/* zm_mlt -- matrix-matrix multiplication */
-ZMAT *zm_mlt(A,B,OUT)
-ZMAT *A,*B,*OUT;
+ZMAT *zm_mlt(A,B,out)
+ZMAT *A,*B,*out;
{
u_int i, /* j, */ k, m, n, p;
complex **A_v, **B_v /*, *B_row, *OUT_row, sum, tmp */;
@@ -100,13 +100,13 @@ ZMAT *A,*B,*OUT;
error(E_NULL,"zm_mlt");
if ( A->n != B->m )
error(E_SIZES,"zm_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"zm_mlt");
m = A->m; n = A->n; p = B->n;
A_v = A->me; B_v = B->me;
- if ( OUT==ZMNULL || OUT->m != A->m || OUT->n != B->n )
- OUT = zm_resize(OUT,A->m,B->n);
+ if ( out==ZMNULL || out->m != A->m || out->n != B->n )
+ out = zm_resize(out,A->m,B->n);
/****************************************************************
for ( i=0; i<m; i++ )
@@ -115,90 +115,90 @@ ZMAT *A,*B,*OUT;
sum = 0.0;
for ( k=0; k<n; k++ )
sum += A_v[i][k]*B_v[k][j];
- OUT->me[i][j] = sum;
+ out->me[i][j] = sum;
}
****************************************************************/
- zm_zero(OUT);
+ zm_zero(out);
for ( i=0; i<m; i++ )
for ( k=0; k<n; k++ )
{
if ( ! is_zero(A_v[i][k]) )
- __zmltadd__(OUT->me[i],B_v[k],A_v[i][k],(int)p,Z_NOCONJ);
+ __zmltadd__(out->me[i],B_v[k],A_v[i][k],(int)p,Z_NOCONJ);
/**************************************************
- B_row = B_v[k]; OUT_row = OUT->me[i];
+ B_row = B_v[k]; out_row = out->me[i];
for ( j=0; j<p; j++ )
- (*OUT_row++) += tmp*(*B_row++);
+ (*out_row++) += tmp*(*B_row++);
**************************************************/
}
- return OUT;
+ return out;
}
/* zmma_mlt -- matrix-matrix adjoint multiplication
- -- A.B* is returned, and stored in OUT */
-ZMAT *zmma_mlt(A,B,OUT)
-ZMAT *A, *B, *OUT;
+ -- A.B* is returned, and stored in out */
+ZMAT *zmma_mlt(A,B,out)
+ZMAT *A, *B, *out;
{
int i, j, limit;
/* complex *A_row, *B_row, sum; */
if ( ! A || ! B )
error(E_NULL,"zmma_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"zmma_mlt");
if ( A->n != B->n )
error(E_SIZES,"zmma_mlt");
- if ( ! OUT || OUT->m != A->m || OUT->n != B->m )
- OUT = zm_resize(OUT,A->m,B->m);
+ if ( ! out || out->m != A->m || out->n != B->m )
+ out = zm_resize(out,A->m,B->m);
limit = A->n;
for ( i = 0; i < A->m; i++ )
for ( j = 0; j < B->m; j++ )
{
- OUT->me[i][j] = __zip__(B->me[j],A->me[i],(int)limit,Z_CONJ);
+ out->me[i][j] = __zip__(B->me[j],A->me[i],(int)limit,Z_CONJ);
/**************************************************
sum = 0.0;
A_row = A->me[i];
B_row = B->me[j];
for ( k = 0; k < limit; k++ )
sum += (*A_row++)*(*B_row++);
- OUT->me[i][j] = sum;
+ out->me[i][j] = sum;
**************************************************/
}
- return OUT;
+ return out;
}
/* zmam_mlt -- matrix adjoint-matrix multiplication
- -- A*.B is returned, result stored in OUT */
-ZMAT *zmam_mlt(A,B,OUT)
-ZMAT *A, *B, *OUT;
+ -- A*.B is returned, result stored in out */
+ZMAT *zmam_mlt(A,B,out)
+ZMAT *A, *B, *out;
{
int i, k, limit;
- /* complex *B_row, *OUT_row, multiplier; */
+ /* complex *B_row, *out_row, multiplier; */
complex tmp;
if ( ! A || ! B )
error(E_NULL,"zmam_mlt");
- if ( A == OUT || B == OUT )
+ if ( A == out || B == out )
error(E_INSITU,"zmam_mlt");
if ( A->m != B->m )
error(E_SIZES,"zmam_mlt");
- if ( ! OUT || OUT->m != A->n || OUT->n != B->n )
- OUT = zm_resize(OUT,A->n,B->n);
+ if ( ! out || out->m != A->n || out->n != B->n )
+ out = zm_resize(out,A->n,B->n);
limit = B->n;
- zm_zero(OUT);
+ zm_zero(out);
for ( k = 0; k < A->m; k++ )
for ( i = 0; i < A->n; i++ )
{
tmp.re = A->me[k][i].re;
tmp.im = - A->me[k][i].im;
if ( ! is_zero(tmp) )
- __zmltadd__(OUT->me[i],B->me[k],tmp,(int)limit,Z_NOCONJ);
+ __zmltadd__(out->me[i],B->me[k],tmp,(int)limit,Z_NOCONJ);
}
- return OUT;
+ return out;
}
/* zmv_mlt -- matrix-vector multiplication
diff --git a/interface/src/scilab/src/c/zmatrix.h b/interface/src/scilab/src/c/zmatrix.h
index 8eeef59..cc110e1 100644
--- a/interface/src/scilab/src/c/zmatrix.h
+++ b/interface/src/scilab/src/c/zmatrix.h
@@ -31,14 +31,13 @@
#include "matrix.h"
-
- /* Type definitions for complex vectors and matrices */
+/* Type definitions for complex vectors and matrices */
/* complex definition */
typedef struct {
Real re,im;
- } complex;
+ } complex;
/* complex vector definition */
typedef struct {
diff --git a/interface/src/scilab/src/c/zqrfctr.c b/interface/src/scilab/src/c/zqrfctr.c
index a672606..7d2e280 100644
--- a/interface/src/scilab/src/c/zqrfctr.c
+++ b/interface/src/scilab/src/c/zqrfctr.c
@@ -38,13 +38,13 @@
*/
-static char rcsid[] = "$Id: zqrfctr.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zqrfctr.c 3865 2011-11-02 06:38:43Z ycollet $";
#include <stdio.h>
-#include "zmatrix.h"
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix.h"
+#include "zmatrix2.h"
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
diff --git a/interface/src/scilab/src/c/zschur.c b/interface/src/scilab/src/c/zschur.c
index 55c4c74..5158684 100644
--- a/interface/src/scilab/src/c/zschur.c
+++ b/interface/src/scilab/src/c/zschur.c
@@ -32,10 +32,10 @@
#include <stdio.h>
-#include "zmatrix.h"
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix.h"
+#include "zmatrix2.h"
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0)
#define b2s(t_or_f) ((t_or_f) ? "TRUE" : "FALSE")
diff --git a/interface/src/scilab/src/c/zsolve.c b/interface/src/scilab/src/c/zsolve.c
index fccd671..300b8e4 100644
--- a/interface/src/scilab/src/c/zsolve.c
+++ b/interface/src/scilab/src/c/zsolve.c
@@ -29,12 +29,12 @@
Complex case
*/
-static char rcsid[] = "$Id: zsolve.c 3690 2010-09-02 09:55:19Z lsaavedr $";
+static char rcsid[] = "$Id: zsolve.c 3865 2011-11-02 06:38:43Z ycollet $";
#include <stdio.h>
-#include "zmatrix2.h"
#include <math.h>
+#include "zmatrix2.h"
#define is_zero(z) ((z).re == 0.0 && (z).im == 0.0 )
diff --git a/interface/src/scilab/demos/check_all.sce b/interface/src/scilab/tests/unit_tests/check_all.sce
similarity index 100%
rename from interface/src/scilab/demos/check_all.sce
rename to interface/src/scilab/tests/unit_tests/check_all.sce
diff --git a/interface/src/scilab/demos/check_asm.sce b/interface/src/scilab/tests/unit_tests/check_asm.sce
similarity index 100%
rename from interface/src/scilab/demos/check_asm.sce
rename to interface/src/scilab/tests/unit_tests/check_asm.sce
diff --git a/interface/src/scilab/demos/check_bricks.sce b/interface/src/scilab/tests/unit_tests/check_bricks.sce
similarity index 100%
rename from interface/src/scilab/demos/check_bricks.sce
rename to interface/src/scilab/tests/unit_tests/check_bricks.sce
diff --git a/interface/src/scilab/demos/check_fem.sce b/interface/src/scilab/tests/unit_tests/check_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_fem.sce
diff --git a/interface/src/scilab/demos/check_geotrans.sce b/interface/src/scilab/tests/unit_tests/check_geotrans.sce
similarity index 100%
rename from interface/src/scilab/demos/check_geotrans.sce
rename to interface/src/scilab/tests/unit_tests/check_geotrans.sce
diff --git a/interface/src/scilab/demos/check_integ.sce b/interface/src/scilab/tests/unit_tests/check_integ.sce
similarity index 100%
rename from interface/src/scilab/demos/check_integ.sce
rename to interface/src/scilab/tests/unit_tests/check_integ.sce
diff --git a/interface/src/scilab/demos/check_interpolated_fem.sce b/interface/src/scilab/tests/unit_tests/check_interpolated_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_interpolated_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_interpolated_fem.sce
diff --git a/interface/src/scilab/demos/check_levelset.sce b/interface/src/scilab/tests/unit_tests/check_levelset.sce
similarity index 100%
rename from interface/src/scilab/demos/check_levelset.sce
rename to interface/src/scilab/tests/unit_tests/check_levelset.sce
diff --git a/interface/src/scilab/demos/check_mesh_fem.sce b/interface/src/scilab/tests/unit_tests/check_mesh_fem.sce
similarity index 100%
rename from interface/src/scilab/demos/check_mesh_fem.sce
rename to interface/src/scilab/tests/unit_tests/check_mesh_fem.sce
diff --git a/interface/src/scilab/demos/check_oo.sce b/interface/src/scilab/tests/unit_tests/check_oo.sce
similarity index 100%
rename from interface/src/scilab/demos/check_oo.sce
rename to interface/src/scilab/tests/unit_tests/check_oo.sce
diff --git a/interface/src/scilab/demos/check_plot.sce b/interface/src/scilab/tests/unit_tests/check_plot.sce
similarity index 100%
rename from interface/src/scilab/demos/check_plot.sce
rename to interface/src/scilab/tests/unit_tests/check_plot.sce
diff --git a/interface/src/scilab/demos/check_slices.sce b/interface/src/scilab/tests/unit_tests/check_slices.sce
similarity index 100%
rename from interface/src/scilab/demos/check_slices.sce
rename to interface/src/scilab/tests/unit_tests/check_slices.sce
diff --git a/interface/src/scilab/demos/check_solve.sce b/interface/src/scilab/tests/unit_tests/check_solve.sce
similarity index 100%
rename from interface/src/scilab/demos/check_solve.sce
rename to interface/src/scilab/tests/unit_tests/check_solve.sce
diff --git a/interface/src/scilab/demos/check_spmat.sce b/interface/src/scilab/tests/unit_tests/check_spmat.sce
similarity index 100%
rename from interface/src/scilab/demos/check_spmat.sce
rename to interface/src/scilab/tests/unit_tests/check_spmat.sce
diff --git a/interface/src/scilab/demos/check_workspace.sce b/interface/src/scilab/tests/unit_tests/check_workspace.sce
similarity index 100%
rename from interface/src/scilab/demos/check_workspace.sce
rename to interface/src/scilab/tests/unit_tests/check_workspace.sce
diff --git a/interface/src/scilab/demos/test_argyris.sce b/interface/src/scilab/tests/unit_tests/test_argyris.sce
similarity index 100%
rename from interface/src/scilab/demos/test_argyris.sce
rename to interface/src/scilab/tests/unit_tests/test_argyris.sce
diff --git a/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce b/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce
new file mode 100644
index 0000000..b0d25f5
--- /dev/null
+++ b/interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce
@@ -0,0 +1,157 @@
+gf_workspace('clear all');
+
+//
+
+// We try to compute a plasticity problem with a Von Mises crierion
+// For convenience we consider an homogenous Dirichlet condition on the left
+// of the domain and an easy computed Neumann Condition on the right
+
+//
+
+// Initialize used data
+L = 100;
+H = 20;
+lambda = 121150;
+mu = 80769;
+von_mises_threshold = 8000;
+f = [0 -330]';
+t = [0 0.9032 1 1.1 1.3 1.5 1.7 1.74 1.7 1.5 1.3 1.1 1 0.9032 0.7 0.5 0.3 0.1 0];
+
+// Create the mesh
+m = gf_mesh('triangles grid', [0:4:L], [0:2:H]);
+
+// Plotting
+h_graph = scf();
+h_graph.color_map = jetcolormap(256);
+drawlater;
+gf_plot_mesh(m, 'vertices', 'on', 'convexes', 'on');
+drawnow;
+
+// Define used MeshIm
+mim = gf_mesh_im(m); gf_mesh_im_set(mim, 'integ', gf_integ('IM_TRIANGLE(6)')); // Gauss methods on triangles
+
+// Define used MeshFem
+mf_u = gf_mesh_fem(m,2); gf_mesh_fem_set(mf_u, 'fem', gf_fem('FEM_PK(2,2)'));
+mf_data = gf_mesh_fem(m); gf_mesh_fem_set(mf_data, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,0)'));
+mf_sigma = gf_mesh_fem(m,4); gf_mesh_fem_set(mf_sigma, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+mf_err = gf_mesh_fem(m); gf_mesh_fem_set(mf_err, 'fem', gf_fem('FEM_PK(2,0)'));
+mf_vm = gf_mesh_fem(m); gf_mesh_fem_set(mf_vm, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+mf_pl = gf_mesh_fem(m); gf_mesh_fem_set(mf_pl, 'fem', gf_fem('FEM_PK_DISCONTINUOUS(2,1)'));
+
+// Find the border of the domain
+P = gf_mesh_get(m, 'pts');
+pidleft = find(abs(P(1,:))<1e-6); // Retrieve index of points which x near to 0
+pidright = find(abs(P(1,:) - L)<1e-6); // Retrieve index of points which x near to L
+fleft = gf_mesh_get(m, 'faces from pid', pidleft);
+fright = gf_mesh_get(m, 'faces from pid', pidright);
+
+// Decomposed the mesh into 2 regions with different values of Lamé coeff
+CV = gf_mesh_get(m, 'cvid');
+CVbottom = find(CV <= 250); // Retrieve index of convex located at the bottom
+CVtop = find(CV > 250); // Retrieve index of convex located at the top
+
+// Definition of Lame coeff
+lambda(CVbottom) = 121150; // Stell
+lambda(CVtop) = 84605; // Iron
+//lambda(CV) = 84605;
+mu(CVbottom) = 80769; // Stell
+mu(CVtop) = 77839; // Iron
+//mu(CV) = 77839;
+von_mises_threshold(CVbottom) = 7000;
+von_mises_threshold(CVtop) = 8000;
+
+// Assign boundary numbers
+gf_mesh_set(m,'boundary',1,fleft); // for Dirichlet condition
+gf_mesh_set(m,'boundary',2,fright); // for Neumann condition
+
+// Create the model
+md = gf_model('real');
+
+// Declare that u is the unknown of the system on mf_u
+// 2 is the number of version of the data stored, for the time integration scheme
+gf_model_set(md, 'add fem variable', 'u', mf_u, 2);
+
+// Declare that lambda is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'lambda', mf_data, lambda);
+
+// Declare that mu is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'mu', mf_data, mu);
+
+// Declare that von_mises_threshold is a data of the system on mf_data
+gf_model_set(md, 'add initialized fem data', 'von_mises_threshold', mf_data, von_mises_threshold);
+
+// Declare that sigma is a data of the system on mf_sigma
+// 2 is the number of version of the data stored, for the time integration scheme
+gf_model_set(md, 'add fem data', 'sigma', mf_sigma);
+
+// Add plasticity brick on u
+gf_model_set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+
+// Add homogeneous Dirichlet condition to u on the left hand side of the domain
+gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
+
+// Add a source term to the system
+gf_model_set(md,'add initialized fem data', 'VolumicData', mf_data, gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(1)))));
+gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData', 2);
+
+VM = zeros(1,gf_mesh_fem_get(mf_vm, 'nbdof'));
+
+nbstep = size(t,2);
+
+dd = gf_mesh_fem_get(mf_err, 'basic dof from cvid');
+
+h_graph_2 = scf();
+h_graph_2.color_map = jetcolormap(256);
+
+h_graph_3 = scf();
+h_graph_3.color_map = jetcolormap(256);
+
+for step=1:nbstep,
+ if step > 1 then
+ gf_model_set(md, 'variable', 'VolumicData', gf_mesh_fem_get_eval(mf_data, list(list(f(1,1)),list(f(2,1)*t(step)))));
+ end
+
+ // Solve the system
+ gf_model_get(md, 'solve','lsolver', 'superlu', 'lsearch', 'simplest', 'alpha min', 0.8, 'very noisy', 'max_iter', 100, 'max_res', 1e-6);
+
+ // Retrieve the solution U
+ U = gf_model_get(md, 'variable', 'u', 0);
+
+ // Compute new plasticity constraints used to compute
+ // the Von Mises or Tresca stress
+ gf_model_get(md, 'elastoplasticity next iter', mim, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+ plast = gf_model_get(md, 'compute plastic part', mim, mf_pl, 'u', 'VM', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
+
+ // Compute Von Mises or Tresca stress
+ VM = gf_model_get(md, 'compute elastoplasticity Von Mises or Tresca', 'sigma', mf_vm, 'Von Mises');
+
+ scf(h_graph_2);
+ drawlater;
+ clf(h_graph_2);
+ subplot(2,1,1);
+ gf_plot(mf_vm,VM,'deformed_mesh', 'on', 'deformation', U, 'deformation_mf', mf_u, 'refine', 4, 'deformation_scale',1);
+ colorbar(min(VM),max(VM));
+
+ n = t(step);
+ title(['Von Mises criterion for t = ', string(n)]);
+
+ ERR = gf_compute(mf_u, U, 'error estimate', mim);
+ E = ERR; E(dd) = ERR;
+
+ subplot(2,1,2);
+ gf_plot(mf_err, E, 'mesh','on', 'refine', 1);
+ colorbar(min(E),max(E));
+ title('Error estimate');
+ drawnow;
+
+ scf(h_graph_3);
+ drawlater;
+ clf(h_graph_3);
+ gf_plot(mf_pl,plast,'deformed_mesh','on', 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1);
+ colorbar(min(plast),max(plast));
+ n = t(step);
+ title(['Plastification for t = ', string(n)]);
+ drawnow;
+
+ sleep(1000);
+end
diff --git a/interface/tests/Makefile.in b/interface/tests/Makefile.in
index fec864c..4b242da 100644
--- a/interface/tests/Makefile.in
+++ b/interface/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -116,6 +116,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -134,6 +135,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -150,6 +152,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -214,6 +217,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -249,7 +253,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -520,10 +523,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/tests/matlab/Makefile.am b/interface/tests/matlab/Makefile.am
index 2eb87bb..390fadd 100644
--- a/interface/tests/matlab/Makefile.am
+++ b/interface/tests/matlab/Makefile.am
@@ -29,8 +29,10 @@ EXTRA_DIST= \
demo_nonlinear_elasticity.m \
demo_nonlinear_elasticity_anim.m \
demo_plasticity.m \
+ demo_continuation.m \
demo_crack.m \
demo_mortar.m \
+ demo_mesh_generation.m \
demo_topological_optimization.m \
demo_structural_optimization.m \
demo_refine.m \
@@ -41,11 +43,14 @@ EXTRA_DIST= \
demo_stokes_3D_tank_alt.m \
demo_stokes_3D_tank_draw.m \
demo_tripod.m \
+ demo_Navier_Stokes.m \
demo_convection_rotating_cavity.m \
demo_tripod_alt.m \
demo_tripod_slice_anim.m \
demo_fictitious_domains.m \
+ demo_fictitious_domains_laplacian.m \
demo_static_contact.m \
+ demo_large_sliding_contact.m \
demo_wave2D.m \
demo_wave2D_alt.m \
demo_wave_equation.m \
diff --git a/interface/tests/matlab/Makefile.in b/interface/tests/matlab/Makefile.in
index 99f683f..fa07f6d 100644
--- a/interface/tests/matlab/Makefile.in
+++ b/interface/tests/matlab/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -72,6 +72,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(toolboxdir)"
SCRIPTS = $(toolbox_SCRIPTS)
SOURCES =
@@ -143,6 +149,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -161,6 +168,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -177,6 +185,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -241,6 +250,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -276,7 +286,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -319,8 +328,10 @@ EXTRA_DIST = \
demo_nonlinear_elasticity.m \
demo_nonlinear_elasticity_anim.m \
demo_plasticity.m \
+ demo_continuation.m \
demo_crack.m \
demo_mortar.m \
+ demo_mesh_generation.m \
demo_topological_optimization.m \
demo_structural_optimization.m \
demo_refine.m \
@@ -331,11 +342,14 @@ EXTRA_DIST = \
demo_stokes_3D_tank_alt.m \
demo_stokes_3D_tank_draw.m \
demo_tripod.m \
+ demo_Navier_Stokes.m \
demo_convection_rotating_cavity.m \
demo_tripod_alt.m \
demo_tripod_slice_anim.m \
demo_fictitious_domains.m \
+ demo_fictitious_domains_laplacian.m \
demo_static_contact.m \
+ demo_large_sliding_contact.m \
demo_wave2D.m \
demo_wave2D_alt.m \
demo_wave_equation.m \
@@ -418,9 +432,7 @@ uninstall-toolboxSCRIPTS:
@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+ dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -644,14 +656,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -732,10 +745,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/tests/matlab/axrot_matrix.m b/interface/tests/matlab/axrot_matrix.m
old mode 100755
new mode 100644
index c6a1e6b..0072536
--- a/interface/tests/matlab/axrot_matrix.m
+++ b/interface/tests/matlab/axrot_matrix.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2004-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
function R=axrot_matrix(A, B, theta)
n=(B-A); n = n/norm(n);
a=n(1); b=n(2); c=n(3);
@@ -10,4 +27,4 @@ function R=axrot_matrix(A, B, theta)
Ry=eye(4); Ry([1 3],[1 3])=[d -a; a d];
Rz=eye(4); Rz(1:2,1:2)=[cos(theta) sin(theta); -sin(theta) cos(theta)];
R = inv(T)*inv(Rx)*inv(Ry)*Rz*Ry*Rx*T;
-
\ No newline at end of file
+
diff --git a/interface/tests/matlab/check_all.m b/interface/tests/matlab/check_all.m
old mode 100755
new mode 100644
index 0ef0a05..1f042e0
--- a/interface/tests/matlab/check_all.m
+++ b/interface/tests/matlab/check_all.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
errcnt=0;
t = 'check_integ [integration methods] ';
try
diff --git a/interface/tests/matlab/check_asm.m b/interface/tests/matlab/check_asm.m
index 2709549..a41781b 100644
--- a/interface/tests/matlab/check_asm.m
+++ b/interface/tests/matlab/check_asm.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
function check_asm(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_bricks.m b/interface/tests/matlab/check_bricks.m
index f2e8e23..8838c33 100644
--- a/interface/tests/matlab/check_bricks.m
+++ b/interface/tests/matlab/check_bricks.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
function check_bricks(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_fem.m b/interface/tests/matlab/check_fem.m
index 5318def..010a18a 100644
--- a/interface/tests/matlab/check_fem.m
+++ b/interface/tests/matlab/check_fem.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_fem(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_geotrans.m b/interface/tests/matlab/check_geotrans.m
index 177b450..95a832f 100644
--- a/interface/tests/matlab/check_geotrans.m
+++ b/interface/tests/matlab/check_geotrans.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_geotrans(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_integ.m b/interface/tests/matlab/check_integ.m
index 19c3fae..1fd1b1d 100644
--- a/interface/tests/matlab/check_integ.m
+++ b/interface/tests/matlab/check_integ.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_integ(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_mesh_fem.m b/interface/tests/matlab/check_mesh_fem.m
index da7ad02..9c1a316 100644
--- a/interface/tests/matlab/check_mesh_fem.m
+++ b/interface/tests/matlab/check_mesh_fem.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_mesh_fem(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_oo.m b/interface/tests/matlab/check_oo.m
index 607aed6..6825721 100644
--- a/interface/tests/matlab/check_oo.m
+++ b/interface/tests/matlab/check_oo.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_oo(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_plot.m b/interface/tests/matlab/check_plot.m
old mode 100755
new mode 100644
index eb83a1e..a41734f
--- a/interface/tests/matlab/check_plot.m
+++ b/interface/tests/matlab/check_plot.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
gf_workspace('clear all');
m2=gf_mesh('triangles grid',[0:.1:1],[0:.1:1]);
m22=gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/tests/matlab/check_slices.m b/interface/tests/matlab/check_slices.m
index 7204e0f..11fb6fd 100644
--- a/interface/tests/matlab/check_slices.m
+++ b/interface/tests/matlab/check_slices.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_slices(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_solve.m b/interface/tests/matlab/check_solve.m
index 01295fb..824bc26 100644
--- a/interface/tests/matlab/check_solve.m
+++ b/interface/tests/matlab/check_solve.m
@@ -1,3 +1,22 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% deprected functions ...
+
function res=check_solve(iverbose,idebug)
% check: gf_mesh('cartesian_mesh'), gf_mesh('triangles grid'),
% gf_compute('interpolate on Q1 grid')
diff --git a/interface/tests/matlab/check_spmat.m b/interface/tests/matlab/check_spmat.m
index fe194eb..eda57e3 100644
--- a/interface/tests/matlab/check_spmat.m
+++ b/interface/tests/matlab/check_spmat.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_spmat(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/check_workspace.m b/interface/tests/matlab/check_workspace.m
old mode 100755
new mode 100644
index 685ea91..d787ea3
--- a/interface/tests/matlab/check_workspace.m
+++ b/interface/tests/matlab/check_workspace.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
function check_workspace(iverbose,idebug)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/demo_Navier_Stokes.m b/interface/tests/matlab/demo_Navier_Stokes.m
new file mode 100644
index 0000000..6959d26
--- /dev/null
+++ b/interface/tests/matlab/demo_Navier_Stokes.m
@@ -0,0 +1,157 @@
+% Copyright (C) 2011-2012 Mariama Ndiaye, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% Transient Navier-Stokes equation on a driven cavity with two numerical
+% scheme : a projection and a semi-implicite scheme. Without using the
+% bricks.
+%
+% This program is used to check that matlab-getfem is working. This is
+% also a good example of use of GetFEM++.
+%
+
+clear all;
+gf_workspace('clear all');
+NX=20; % Space resoltuion
+Dt=0.02; % Time step
+T = 10; % Time interval
+nu=0.005; % Viscosity
+v = 30; % Driven velocity
+scheme = 1; % 1 : Projection scheme.
+ % 2 : Semi-implicit scheme
+rho = 2; % density
+g = 9.81; % gravity constant
+
+%m=gf_mesh('cartesian', [0:1/NX:1],[0:1/NX:1]);
+m = gf_mesh('triangles grid',[0:1/NX:1],[0:1/NX:1]);
+border = gf_mesh_get(m,'outer faces');
+% mark it as boundary #1
+gf_mesh_set(m, 'boundary', 1, border);
+gf_plot_mesh(m, 'regions', [1]); % the boundary edges appears in red
+
+
+% create mesh_fem objects
+mf_u = gfMeshFem(m,2); % For the velocity.
+mf_p = gfMeshFem(m,1); % For the pressure.
+mf_f = gfMeshFem(m,1); % For the external forces.
+
+%mim=gf_mesh_im(m, gf_integ('IM_GAUSS_PARALLELEPIPED(2, 2)'));
+mim = gf_mesh_im(m, gf_integ('IM_HCT_COMPOSITE(IM_TRIANGLE(13))'));
+
+% assign the fems to all convexes of the mesh_fems
+if (scheme == 1)
+ gf_mesh_fem_set(mf_u,'fem',gf_fem('FEM_PK(2,1)'));
+ gf_mesh_fem_set(mf_p,'fem',gf_fem('FEM_PK(2,1)'));
+ gf_mesh_fem_set(mf_f,'fem',gf_fem('FEM_PK(2,1)'));
+elseif (scheme == 2)
+ gf_mesh_fem_set(mf_u,'fem',gf_fem('FEM_PK(2,2)'));
+ gf_mesh_fem_set(mf_p,'fem',gf_fem('FEM_PK(2,1)'));
+ gf_mesh_fem_set(mf_f,'fem',gf_fem('FEM_PK(2,1)'));
+end;
+
+% Assembly
+
+Fd = [gf_mesh_fem_get(mf_f, 'eval', { 0}); gf_mesh_fem_get(mf_f, 'eval', { rho*g })];
+FD =Fd;
+U = zeros(gf_mesh_fem_get(mf_u, 'nbdof'), 1); % initial condition
+
+M=rho*gf_asm('mass matrix',mim,mf_u) / Dt;
+K=nu*gf_asm('volumic','M(#1,#1)+=comp(vGrad(#1).vGrad(#1))(:,i,j,:,i,j)', mim, mf_u);
+F=gf_asm('volumic source',mim,mf_u,mf_f,Fd); %#1 methode d'elmt fini 1, vBase vecteur de base de methode d'EF 1, vGrad grad vect
+Kp=gf_asm('volumic','M(#1,#1)+=comp(Grad(#1).Grad(#1))(:,i,:,i)', mim, mf_p);
+D=gf_asm('volumic','M(#1,#2)+=comp(Base(#1).vGrad(#2))(:,:,i,i)', mim, mf_p, mf_u);
+B=gf_asm('volumic','M(#1,#2)+=comp(vBase(#1).Grad(#2))(:,i,:,i)', mim, mf_u, mf_p);
+
+% for the vorticity computation
+Mo=gf_asm('mass matrix', mim, mf_f);
+MVo=gf_asm('volumic','t=comp(Base(#1).vGrad(#2));M(#1,#2)+=t(:,:,1,2)-t(:,:,2,1)', mim, mf_f, mf_u);
+
+
+UBOUND = gf_mesh_fem_get(mf_u, 'dof on region', 1);% fournit le numero des dof sur la frontiere
+UNODES = gf_mesh_fem_get(mf_u, 'dof nodes');
+Kp(1, :) = 0; % In order to fix the pressure on a node for scheme 1.
+Kp(1, 1) = 1;
+Ndofu = size(D,2); % Dof number for the velocity
+Ndofp = size(D,1); % Dof number for the pressure
+
+
+for t=0:Dt:T
+
+ if (scheme == 1)
+
+ C=rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(i,j,:,k,j,:,k).a(i)', mim,mf_u, U);
+ A = M + K + C;
+ L = F + M * U;
+
+ for i=UBOUND % Boundary conditions
+ A(i, :) = 0; A(i,i) = 1; L(i) = 0;
+ if (mod(i, 2) == 1)
+ node = UNODES(:, i);
+ if (abs(node(2)-1) < 1e-10 && abs(node(1)-0.5) < 0.499)
+ L(i) = v * node(1) * (1-node(1));
+ end
+ end
+ end;
+ U1_2 = A \ L;
+
+ L2 = -D * U1_2/Dt;
+ L2(1) = 0;
+ P = Kp \ L2 ;
+ U = M \ (M * U1_2 - B * P);
+
+ elseif (scheme == 2)
+
+ C=rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(i,j,:,k,j,:,k).a(i)', mim,mf_u, U);
+ C=C+rho*gf_asm('volumic','a=data(#1);M(#1,#1)+=comp(vBase(#1).vGrad(#1).vBase(#1))(:,i,j,k,k,:,i).a(j)', mim,mf_u, U)/2;
+
+ A = [M+K+C, -D'; -D, zeros(Ndofp)];
+ L = F + M * U;
+
+ for i=UBOUND % Boundary conditions
+ A(i, :) = 0; A(i,i) = 1; L(i) = 0;
+ if (mod(i, 2) == 1)
+ node = UNODES(:, i);
+ if (abs(node(2)-1) < 1e-10 && abs(node(1)-0.5) < 0.499)
+ L(i) = v * node(1) * (1-node(1));
+ end
+ end
+ end;
+
+ A(Ndofu+1, :) = 0; % In order to fix the pressure on a node.
+ A(Ndofu+1, Ndofu+1) = 1;
+
+ UP = A \ [L; zeros(Ndofp,1)];
+ U = UP(1:Ndofu);
+ P = UP(Ndofu+1:Ndofu+Ndofp);
+
+ end;
+
+
+ Vo = Mo \ (MVo * U); % Vorticity projected on mf_f.
+
+ gf_plot(mf_u, U','mesh','off', 'quiver_density', 15, 'quiver_scale', 4);
+ axis([0 1 0 1]);
+ hold on;
+ gf_plot(mf_p,P','refine',1);
+ gf_plot(mf_f,Vo','refine',1,'contour',[-40,-20,-10,10,20,40,80], 'pcolor', 'off');
+ hold off;
+ colorbar; title(sprintf('Quiver plot of U, with color plot of the pressure and vorticity contour lines, t=%g', t));
+ pause(1);
+
+end;
+
+
+
diff --git a/interface/tests/matlab/demo_bilaplacian.m b/interface/tests/matlab/demo_bilaplacian.m
old mode 100755
new mode 100644
index 9874f8f..ca91e16
--- a/interface/tests/matlab/demo_bilaplacian.m
+++ b/interface/tests/matlab/demo_bilaplacian.m
@@ -1,10 +1,29 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
gf_workspace('clear all'); clear all;
N = 2;
-NX=10; NY=10;
-%m=gfMesh('regular simplices',0:1/NX:1, 0:1/NY:1);
-m=gfMesh('cartesian',0:1/NX:1, 0:1/NY:1);
+NX=10; NY=14;
+m=gfMesh('regular simplices',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+% m=gfMesh('cartesian',0:1/NX:1, 0:1/NY:1);
+% m=gfMesh('cartesian',0:0.4/NX:0.4, 0:1.2/NY:1.2);
+
-useKL=0; % use the Kirchhoff-Love plate model, or just a pure
+useKL=1; % use the Kirchhoff-Love plate model, or just a pure
% bilaplacian problem
D=1.0; % Flexion modulus
@@ -15,13 +34,13 @@ if useKL, NU=0.3; end; % poisson ratio (0 <= NU <= 1)
mim=gfMeshIm(m);
mfu=gfMeshFem(m);
mfd=gfMeshFem(m);
-%set(mim, 'integ',gfInteg('IM_TRIANGLE(13)'));
-%set(mfu, 'fem',gfFem('FEM_ARGYRIS'));
-%set(mfd, 'fem',gfFem('FEM_PK(2,5)'));
+set(mim, 'integ',gfInteg('IM_TRIANGLE(13)'));
+set(mfu, 'fem',gfFem('FEM_ARGYRIS'));
+set(mfd, 'fem',gfFem('FEM_PK(2,5)'));
-set(mim, 'integ', gfInteg('IM_GAUSS_PARALLELEPIPED(2,10)'));
-set(mfu, 'fem', gfFem('FEM_REDUCED_QUADC1_COMPOSITE'));
-set(mfd, 'fem', gfFem('FEM_QK(2,3)'));
+% set(mim, 'integ', gfInteg('IM_GAUSS_PARALLELEPIPED(2,10)'));
+% set(mfu, 'fem', gfFem('FEM_REDUCED_QUADC1_COMPOSITE'));
+% set(mfd, 'fem', gfFem('FEM_QK(2,3)'));
flst = get(m, 'outer_faces');
n = get(m, 'normal of faces', flst);
@@ -36,13 +55,13 @@ SIMPLE_SUPPORT_BOUNDARY_NUM=3;
CLAMPED_BOUNDARY_NUM=4;
set(m, 'region', FORCE_BOUNDARY_NUM, fright);
-set(m, 'region', SIMPLE_SUPPORT_BOUNDARY_NUM, [ftop fbottom fleft]);
-set(m, 'region', CLAMPED_BOUNDARY_NUM, [fleft fright]);
+set(m, 'region', SIMPLE_SUPPORT_BOUNDARY_NUM, [fleft ftop fbottom]);
+set(m, 'region', CLAMPED_BOUNDARY_NUM, [fleft ftop fbottom]);
set(m, 'region', MOMENTUM_BOUNDARY_NUM, [ftop fbottom]);
-FT=10.;
+FT=2.;
sol_u=get(mfd, 'eval',{sprintf('sin(%g*(x+y))',FT)});
-sol_f=sol_u*FT*FT*FT*FT*N*N;
+sol_f=sol_u*FT*FT*FT*FT*N*N*D;
sol_lapl_u=-FT*FT*sol_u*N;
if (newbricks) % uses new bricks
@@ -53,7 +72,7 @@ if (newbricks) % uses new bricks
if useKL
gf_model_set(md, 'add initialized data', 'D', [D]);
- gf_model_set(md, 'add initialized data', 'nu', [nu]);
+ gf_model_set(md, 'add initialized data', 'nu', [NU]);
gf_model_set(md, 'add Kirchhoff-Love plate brick', mim, 'u', 'D', 'nu');
M = zeros(N,N, get(mfd,'nbdof'));
else
@@ -63,7 +82,8 @@ if (newbricks) % uses new bricks
end;
gf_model_set(md, 'add initialized fem data', 'VolumicData', mfd, ...
- get(mfd, 'eval', {'1-(x-y).^2'}));
+ get(mfd, 'eval', {'1-(x-y).^2'}));
+
gf_model_set(md, 'add source term brick', mim, 'u', 'VolumicData');
@@ -77,7 +97,7 @@ if (newbricks) % uses new bricks
gf_model_set(md, 'add initialized fem data', 'H', mfd, H);
gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
gf_model_set(md, 'add Kirchhoff-Love Neumann term brick', mim, 'u', ...
- H, F, FORCE_BOUNDARY_NUM);
+ 'H', 'F', FORCE_BOUNDARY_NUM);
else
F = zeros(1, N, get(mfd, 'nbdof'));
gf_model_set(md, 'add initialized fem data', 'F', mfd, F);
@@ -103,7 +123,7 @@ else % uses old bricks
b0 = gfMdBrick('bilaplacian', mim, mfu, 'Kirchhoff-Love');
set(b0, 'param','D', D);
set(b0, 'param','nu', NU);
- M = zeros(N,N, get(mfd,'nbdof'));
+ M = zeros(1, get(mfd,'nbdof'));
else
b0 = gfMdBrick('bilaplacian', mim, mfu);
set(b0, 'param','D', D);
@@ -114,10 +134,10 @@ else % uses old bricks
set(b1, 'param', 'source_term', mfd, get(mfd, 'eval', {'1-(x-y).^2'}));
b2 = gfMdBrick('normal derivative source term',b1,MOMENTUM_BOUNDARY_NUM);
- set(b2, 'param', 'source_term', mfd,M);
+ set(b2, 'param', 'source_term', mfd, M);
if (useKL)
- H = zeros(N, N, get(mfd, 'nbdof'));
+ H = zeros(N*N, get(mfd, 'nbdof'));
F = zeros(N, get(mfd, 'nbdof'));
b3 = gfMdBrick('neumann Kirchhoff-Love source term',b2,FORCE_BOUNDARY_NUM);
set(b3, 'param', 'M', mfd, H);
@@ -145,6 +165,7 @@ end
gf_plot(mfu,U,'mesh','on');
+colorbar;
disp(sprintf('H2 norm of the solution: %g', gf_compute(mfu,U,'H2 norm', mim)));
diff --git a/interface/tests/matlab/demo_continuation.m b/interface/tests/matlab/demo_continuation.m
new file mode 100644
index 0000000..7298c50
--- /dev/null
+++ b/interface/tests/matlab/demo_continuation.m
@@ -0,0 +1,126 @@
+% Copyright (C) 2011-2012 Tomas Ligursky, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% Simple exemple othe f bifurcation problem: -Delta(u) + u = lambda exp(u)
+%
+% This program is used to check that matlab-getfem is working. This is also
+% a good example of use of GetFEM++.
+%
+
+gf_workspace('clear all');
+
+lambda = 0;
+direction = 1;
+nbstep = 80;
+
+maxit = 5;
+thrit = 4;
+minang = 0.993;
+maxres_solve = 1.e-7;
+noisy = 'very_noisy'
+
+h_init = 1e-3;
+h_max = 2e-1;
+h_min = 1e-5;
+
+with_dirichlet = true;
+
+% create a simple cartesian mesh
+m = gf_mesh('cartesian', [0:.1:1]);
+
+% create a mesh_fem of for a field of dimension 1 (i.e. a scalar field)
+mf = gf_mesh_fem(m,1);
+% assign the P1 fem to all convexes of the mesh_fem,
+gf_mesh_fem_set(mf, 'classical fem', 1);
+
+% integration which will be used
+mim = gf_mesh_im(m, 4);
+
+% detect the border of the mesh
+border = gf_mesh_get(m,'outer faces');
+% mark it as boundary #1
+gf_mesh_set(m, 'boundary', 1, border);
+
+% define the model
+md = gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mf);
+gf_model_set(md, 'add Laplacian brick', mim, 'u');
+gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add basic nonlinear brick', mim, 'u', 'u-lambda*exp(u)', '1-lambda*exp(u)', 'lambda');
+if (with_dirichlet)
+ gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf, 1);
+end;
+
+% initialise the continuation
+scfac = 1 / gf_mesh_fem_get(mf, 'nbdof');
+S = gf_cont_struct(md, 'lambda', scfac, 'max_iter', maxit, 'thr_iter', thrit, 'min_ang', minang, 'h_init', h_init, 'h_max', h_max, 'h_min', h_min, noisy);
+
+% compute an initial point
+if (noisy) disp('computing initial point\n'); end
+gf_model_get(md, 'solve', noisy, 'max iter', 100, 'max_res', maxres_solve);
+[T_U, T_lambda, h] = gf_cont_struct_get(S, 'init Moore-Penrose continuation', direction);
+
+U = gf_model_get(md, 'variable', 'u');
+disp('U = '); disp(U); disp(sprintf('lambda = %e\n', lambda));
+disp(sprintf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1))));
+
+U_hist = zeros(1, nbstep + 1); lambda_hist = zeros(1, nbstep + 1);
+U_hist(1) = max(U); lambda_hist(1) = lambda;
+
+figure(1);
+subplot(2,1,1);
+plot(lambda_hist(1), U_hist(1), 'k.');
+xlabel('lambda'); ylabel('max(u)');
+if (with_dirichlet) axis([0 4 0 10]); else axis([0 0.4 0 11]); end
+subplot(2,1,2)
+gf_plot_1D(mf, U, 'style', 'k.-');
+if (with_dirichlet) axis([0 1 0 10]); else axis([0 1 0 11]); end
+xlabel('x'); ylabel('u');
+pause(1);
+
+% continue from the initial point
+for step = 1:nbstep
+ disp(sprintf('\nbeginning of step %d\n', step));
+ [T_U, T_lambda, h] = gf_cont_struct_get(S, 'Moore-Penrose continuation', T_U, T_lambda, h);
+ U = gf_model_get(md, 'variable', 'u');
+ lambda = gf_model_get(md, 'variable', 'lambda');
+ % disp('U = '); disp(U);
+ disp(sprintf('lambda = %e\n', lambda));
+ % disp(sprintf('lambda - U(1) * exp(-U(1)) = %e\n', lambda - U(1) * exp(-U(1))));
+
+ U_hist(step+1) = max(U); lambda_hist(step+1) = lambda;
+
+ subplot(2,1,1);
+ plot(lambda_hist(1:step+1), U_hist(1:step+1), 'k-');
+ hold on;
+ plot(lambda_hist(1:step), U_hist(1:step), 'ko');
+ plot(lambda_hist(step+1), U_hist(step+1), 'k.');
+ hold off;
+ if (with_dirichlet) axis([0 4 0 10]); else axis([0 0.4 0 11]); end
+ xlabel('lambda'); ylabel('max(u)');
+ subplot(2,1,2)
+ gf_plot_1D(mf, U, 'style', 'k.-');
+ if (with_dirichlet) axis([0 1 0 10]); else axis([0 1 0 11]); end
+ xlabel('x'); ylabel('u');
+ pause(0.25);
+ disp(sprintf('end of step n° %d', step)); disp(sprintf(' / %d\n', nbstep));
+end
+
+
+
+% gf_plot(mf,U,'mesh','on','contour',.01:.01:.1);
+% colorbar; title('computed solution');
diff --git a/interface/tests/matlab/demo_convection_rotating_cavity.m b/interface/tests/matlab/demo_convection_rotating_cavity.m
index 82adef0..6b526da 100644
--- a/interface/tests/matlab/demo_convection_rotating_cavity.m
+++ b/interface/tests/matlab/demo_convection_rotating_cavity.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Yves Renard.
%
-% Copyright (C) 2009-2010 Yves Renard.
+% This file is a part of GETFEM++
%
-% This file is a part of GetFEM++
-%
-% GetFEM++ is free software; you can redistribute it and/or modify it
+% Getfem++ is free software; you can redistribute it and/or modify it
% under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation; either version 2.1 of the License, or
-% (at your option) any later version.
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
% You should have received a copy of the GNU Lesser General Public License
% along with this program; if not, write to the Free Software Foundation,
% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/interface/tests/matlab/demo_crack.m b/interface/tests/matlab/demo_crack.m
index 0f24424..862f4d7 100644
--- a/interface/tests/matlab/demo_crack.m
+++ b/interface/tests/matlab/demo_crack.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Luis Saavedra, Yves Renard.
%
-% Copyright (C) 2009 Luis Saavedra, Yves Renard.
+% This file is a part of GETFEM++
%
-% This file is a part of GetFEM++
-%
-% GetFEM++ is free software; you can redistribute it and/or modify it
+% Getfem++ is free software; you can redistribute it and/or modify it
% under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation; either version 2.1 of the License, or
-% (at your option) any later version.
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
% You should have received a copy of the GNU Lesser General Public License
% along with this program; if not, write to the Free Software Foundation,
% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/interface/tests/matlab/demo_fictitious_domains.m b/interface/tests/matlab/demo_fictitious_domains.m
index d8ec126..ad32a7b 100644
--- a/interface/tests/matlab/demo_fictitious_domains.m
+++ b/interface/tests/matlab/demo_fictitious_domains.m
@@ -1,19 +1,37 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
disp('This demo use levelset to impose (weakly) a Dirichlet condition on an');
disp('implicit boundary defined by the zero of the levelset');
%clear all;
gf_workspace('clear all');
-NX=40;
-ls_degree = 2;
+NX=80;
+ls_degree = 1;
m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5);
%m=gfMesh('triangles grid', -.5:(1/NX):.5, -.5:(1/NX):.5);
ls=gf_levelset(m, ls_degree);
-ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
+%ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
mf_ls=gfObject(gf_levelset_get(ls, 'mf'));
-mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
+%mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
P=get(mf_ls, 'basic dof nodes');
x = P(1,:); y = P(2,:);
@@ -24,8 +42,8 @@ ULS=1000*ones(1,numel(x));
rand('state',1);
if 0,
- for ix=1:5,
- for iy=1:5,
+ for ix=1:1,
+ for iy=1:1,
xc = ((ix-1)/4) * 0.8 - 0.4;
yc = ((iy-1)/4) * 0.8 - 0.4;
if (mod(iy,2)==0),
@@ -38,15 +56,15 @@ if 0,
end;
end;
else
- for i=1:8,
- xc = rand() - 0.5;
- yc = rand() - 0.5;
- R = rand() * 0.09 + 0.02;
+ for i=1:1,
+ xc =0.1;% rand() - 0.5;
+ yc =0;% rand() - 0.5;
+ R=0.1;%R = rand() * 0.09 + 0.02;
ULS = min(ULS, ((x - xc).^2 + (y - yc).^2) - R^2);
end;
end;
-set(ls, 'values', ULS);
+gf_levelset_set(ls, 'values', ULS);
ULS2=1000*ones(1,numel(x));
ULS2s=1000*ones(1,numel(x));
@@ -56,21 +74,21 @@ for i=1:1,
theta = pi/3; %pi*rand();
n = [-sin(theta) cos(theta)];
- R = 0.19; %rand() * 0.09 + 0.02;
+ R = 0.1; %rand() * 0.09 + 0.02;
ULS2 = min(ULS2, ((x-xc)*n(1) + (y-yc)*n(2)));
- %ULS2s = min(ULS2s, ((x - xc).^2 + (y - yc).^2) - R^2);
- ULS2s = min(ULS2s, (abs(y - yc)+abs(x-xc) - R));
+ ULS2s = min(ULS2s, ((x - xc).^2 + (y - yc).^2) - R^2);
+ %ULS2s = min(ULS2s, (abs(y - yc)+abs(x-xc) - R));
end;
-set(ls2, 'values', ULS2, ULS2s); %'-y-x+.2'); %, '(y-.2)^2 - 0.04');
+%gf_levelset_set(ls2, 'values', ULS2s, ULS2); %'-y-x+.2'); %, '(y-.2)^2 - 0.04');
mls=gfMeshLevelSet(m);
set(mls, 'add', ls);
-set(mls, 'add', ls2);
+%set(mls, 'add', ls2);
set(mls, 'adapt');
-mim_bound = gfMeshIm('levelset',mls,'boundary(a+b)', gf_integ('IM_TRIANGLE(6)')); %, gf_integ('IM_QUAD(5)'));
-mim = gfMeshIm('levelset',mls,'all(a+b)', gf_integ('IM_TRIANGLE(6)'));
+mim_bound = gfMeshIm('levelset',mls,'boundary', gf_integ('IM_TRIANGLE(6)')); %, gf_integ('IM_QUAD(5)'));
+mim = gfMeshIm('levelset',mls,'all', gf_integ('IM_TRIANGLE(6)'));
set(mim, 'integ', 4);
mfu0=gfMeshFem(m,2); set(mfu0, 'fem', gf_fem('FEM_QK(2,3)'));
@@ -85,9 +103,9 @@ A=gf_asm('volumic','V()+=comp()',mim_bound)
dof_out = get(mfu0, 'dof from im', mim);
cv_out = get(mim, 'convex_index');
-cv_in = setdiff(get(m, 'cvid'), cv_out);
+cv_in = setdiff(gf_mesh_get(m, 'cvid'), cv_out);
-% mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
+mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
md=gf_model('real');
@@ -105,6 +123,7 @@ gf_model_set(md, 'add Dirichlet condition with multipliers', ...
gf_model_get(md, 'solve');
U = gf_model_get(md, 'variable', 'u');
+
VM = gf_model_get(md, 'compute isotropic linearized Von Mises or Tresca', 'u', 'lambda', 'mu', mfdu);
gf_plot(mfdu, VM, 'deformed_mesh', 'on', 'deformation', U, ...
@@ -117,15 +136,14 @@ hold on;
% set(h2{1},'LineWidth',2);
% set(h2{1},'Color','white');
-[h1,h2]=gf_plot(mf_ls, get(ls,'values'), 'contour', 0,'pcolor','off');
+[h1,h2]=gf_plot(mf_ls, gf_levelset_get(ls,'values'), 'contour', 0, 'pcolor','off');
set(h2{1},'LineWidth',1);
set(h2{1},'Color','blue');
-%[h1,h2]=gf_plot(mf_ls2, get(ls2,'values'), 'contour',
-%0,'pcolor','off');
+%[h1,h1]=gf_plot(mf_ls2, gf_levelset_get(ls2,'values'), 'contour',0,'pcolor','off');
-h2=line([xc + R*n(2); xc - R*n(2)],[yc - R*n(1), yc + R*n(1)]);
-set(h2,'LineWidth',1);
-set(h2,'Color','blue');
+%h2=line([xc + R*n(2); xc - R*n(2)],[yc - R*n(1), yc + R*n(1)]);
+%set(h2,'LineWidth',1);
+%set(h2,'Color','blue');
diff --git a/interface/tests/matlab/demo_fictitious_domains_laplacian.m b/interface/tests/matlab/demo_fictitious_domains_laplacian.m
new file mode 100644
index 0000000..e32bedc
--- /dev/null
+++ b/interface/tests/matlab/demo_fictitious_domains_laplacian.m
@@ -0,0 +1,244 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+disp('This demo use levelset to impose (weakly) a Dirichlet condition on a part of an ');
+disp('implicit boundary defined by the zero of the levelset and a Neumann condition on ');
+disp('the remaining part of that boundary. A Poisson problem');
+
+clear all;
+gf_workspace('clear all');
+
+
+
+NX=30
+N = 3
+ls_degree = 1
+R = 0.4;
+
+if (N == 3)
+ m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5, -.5:(1/NX):.5);
+ %m=gf_Mesh('regular simplices', -.5:(1/NX):.5, -.5:(1/NX):.5, -.5:(1/NX):.5);
+ mfu0=gfMeshFem(m,1);
+ mf_mult=gfMeshFem(m,1);
+ set(mfu0, 'fem', gf_fem('FEM_QK(3,1)'))
+ %set(mfu0, 'fem', gf_fem('FEM_PK(3,1)'));
+ set(mf_mult, 'fem', gf_fem('FEM_QK(3,1)'))
+ %set(mf_mult, 'fem', gf_fem('FEM_PK(3,0)'));
+ adapt_im = 'IM_TETRAHEDRON(6)';
+elseif (N == 2)
+ %m=gf_mesh('cartesian', -.5:(1/NX):.5, -.5:(1/NX):.5);
+ m=gfMesh('triangles grid', -.5:(1/NX):.5, -.5:(1/NX):.5);
+ mfu0=gfMeshFem(m,1);
+ mf_mult=gfMeshFem(m,1);
+ set(mfu0, 'fem', gf_fem('FEM_PK(2,3)'));
+ set(mf_mult, 'fem', gf_fem('FEM_PK(2,1)'));
+ adapt_im = 'IM_TRIANGLE(6)'
+else
+ error('Wrong dimension');
+end
+
+ls=gf_levelset(m, ls_degree);
+ls2s=gf_levelset(m, ls_degree, 'with_secondary');
+ls2=gf_LevelSet(m, ls_degree, 'with_secondary');
+
+mf_ls=gfObject(gf_levelset_get(ls, 'mf'));
+mf_ls2=gfObject(gf_levelset_get(ls2, 'mf'));
+P=get(mf_ls, 'basic dof nodes');
+x = P(1,:); y = P(2,:);
+if (N == 3)
+ z = P(3,:);
+else
+ z = 0 * x;
+end
+ULS=1000*ones(1,numel(x));
+ULS2=1000*ones(1,numel(x));
+ULS = min(ULS,((x.^2 + y.^2 + z.^2).^1.5 - R^3));
+%ULS2 = min(ULS,x);
+if (N == 3)
+ ULS2 = min(ULS2,z);%ULS2=-ULS2;
+else
+ ULS2 = min(ULS2,y);%ULS2=-ULS2;
+end
+
+
+gf_levelset_set(ls, 'values', ULS);
+gf_levelset_set(ls2, 'values', ULS, ULS2);
+%gf_levelset_set(lss, 'values', ULS);
+gf_levelset_set(ls2s, 'values', ULS, -ULS2);
+
+mls=gfMeshLevelSet(m);
+set(mls, 'add', ls);
+set(mls, 'add',ls2);
+set(mls, 'adapt');
+
+mls2=gfMeshLevelSet(m);
+set(mls2, 'add', ls);
+set(mls2, 'add',ls2s);
+set(mls2, 'adapt');
+
+
+mim_bounddown = gfMeshIm('levelset',mls,'boundary(b)', gf_integ(adapt_im));
+%mim_bound2 = gfMeshIm('levelset',mls,'boundary(a)', gf_integ(adapt_im));
+mim_boundup = gfMeshIm('levelset',mls2,'boundary(b)', gf_integ(adapt_im));
+mim_int = gfMeshIm('levelset', mls, 'inside(a)', gf_integ(adapt_im));
+set(mim_int, 'integ', 4);
+
+% Some verifications
+A1=gf_asm('volumic','V()+=comp()',mim_bounddown);
+%A2=gf_asm('volumic','V()+=comp()',mim_bound2);
+A2=gf_asm('volumic','V()+=comp()',mim_boundup);
+V =gf_asm('volumic','V()+=comp()',mim_int);
+if (N == 2)
+ disp(sprintf('length : %g should be %g', A1, pi*R));
+ disp(sprintf('length : %g should be %g', A2, 2*pi*R));
+ disp(sprintf('area : %g should be %g', V, pi*R^2));
+else
+ disp(sprintf('area : %g should be %g', A1, 4*pi*R^2/2));
+ disp(sprintf('area : %g should be %g', A2, 4*pi*R^2));
+ disp(sprintf('volume : %g should be %g', V, 4*pi*R^3/3.));
+end
+
+% partial mesh fem
+dof_out = get(mfu0, 'dof from im', mim_int);
+cv_out = get(mim_int, 'convex_index');
+cv_in = setdiff(gf_mesh_get(m, 'cvid'), cv_out);
+mfu = gfMeshFem('partial', mfu0, dof_out, cv_in);
+
+% data
+if (N == 2)
+ Volumic_data = gf_mesh_fem_get(mfu0, 'eval', { '45*sqrt(x.^2+y.^2)' });
+ surface_data = gf_mesh_fem_get(mfu0, 'eval', { '-15*(x.^2+y.^2)' });
+ Sol_U = gf_mesh_fem_get(mfu0, 'eval', { sprintf('5*((%g)^3-(x.^2+y.^2).^1.5)', R) });
+else
+ Volumic_data = gf_mesh_fem_get(mfu0, 'eval', { '60*sqrt(x.^2+y.^2+z.^2)' });
+ surface_data = gf_mesh_fem_get(mfu0, 'eval', { '-15*(x.^2+y.^2+z.^2)' });
+ Sol_U = gf_mesh_fem_get(mfu0, 'eval', { sprintf('5*((%g)^3-(x.^2+y.^2+z.^2).^1.5)', R) });
+end
+
+% getfem model
+
+
+md=gf_model('real');
+gf_model_set(md, 'add fem variable', 'u', mfu);
+gf_model_set(md, 'add Laplacian brick', mim_int, 'u');
+gf_model_set(md, 'add initialized fem data', 'VolumicData', mfu0, Volumic_data);
+gf_model_set(md, 'add source term brick', mim_int, 'u', 'VolumicData');
+
+if 0,
+B2=gf_asm('mass matrix', mim_boundup, mfu0, mfu);
+Rh=gf_spmat_get(B2, 'tmult', surface_data);
+gf_model_set(md, 'add explicit rhs', 'u', Rh);
+else
+
+gf_model_set(md, 'add initialized fem data', 'SurfaceData', mfu0, surface_data);
+gf_model_set(md, 'add source term brick', mim_boundup, 'u', 'SurfaceData');
+
+% gf_model_set(md, 'add initialized fem data', 'SurfaceData', mfu0, surface_data);
+% gf_model_set(md, 'add source term brick', mim_bound2, 'u', 'SurfaceData');
+% gf_model_set(md, 'add initialized fem data', 'SurfaceData2', mfu0, -surface_data);
+% gf_model_set(md, 'add source term brick', mim_bounddown, 'u', 'SurfaceData2');
+end;
+
+%range bases
+BRBB=gf_asm('mass matrix', mim_bounddown, mf_mult, mf_mult);
+gf_mesh_fem_set(mf_mult,'reduce meshfem', BRBB);
+
+gf_model_set(md, 'add fem variable', 'Lambda', mf_mult);
+B=gf_asm('mass matrix', mim_bounddown, mfu, mf_mult);
+gf_model_set(md, 'add explicit matrix', 'u', 'Lambda', B, 1);
+
+% gf_model_set(md, 'add multiplier', 'Lambda', mf_mult, 'u');
+% gf_model_set(md, 'add Dirichlet condition with multipliers', ...
+% mim_bounddown, 'u', 'Lambda', -1);
+
+gf_model_get(md, 'solve');
+U = gf_model_get(md, 'variable', 'u');
+Lambda = gf_model_get(md, 'variable', 'Lambda');
+
+% Comparison with the exaxt solution
+U0=gf_compute(mfu,U,'interpolate on',mfu0);
+ERRL2 = gf_compute(mfu0, U0, 'L2 dist', mim_int, mfu0, Sol_U);
+L2_Error=100*gf_compute(mfu, U, 'L2 dist', mim_int, mfu0, Sol_U)/gf_compute(mfu0, Sol_U,'L2 norm',mim_int);
+ERRH1 = gf_compute(mfu0, U0, 'H1 semi dist', mim_int, mfu0, Sol_U);
+H1_Error=100*gf_compute(mfu, U, 'H1 semi dist', mim_int, mfu0, Sol_U)/gf_compute(mfu0,Sol_U,'H1 norm',mim_int);
+
+%Compute error on the Multiplier
+
+
+map_Error=(abs(U0-Sol_U));
+%LambdaE = gf_mesh_fem_get(mf_mult, 'eval', { '-15*(x.^2+y.^2+z.^2)' });
+BA=gf_asm('mass matrix', mim_bounddown, mf_mult, mf_mult);
+BLS=gf_asm('lsneuman matrix', mim_bounddown, mfu0, mf_mult, ls);
+KA=gf_asm('nlsgrad matrix', mim_bounddown, mfu0, mfu0, ls);
+%ERRL_mult= (Lambda*gf_spmat_get(BA, 'mult',Lambda)+ U0*gf_spmat_get(KA, 'mult',U0) + 2*Lambda*gf_spmat_get(BLS, 'mult',U0))/(U0*gf_spmat_get(KA, 'mult',U0))
+ERRL2_mult= (Lambda*gf_spmat_get(BA, 'mult',Lambda)+ Sol_U*gf_spmat_get(KA, 'mult',Sol_U) + 2*Lambda*gf_spmat_get(BLS, 'mult',Sol_U))/(Sol_U*gf_spmat_get(KA, 'mult',Sol_U));
+L2_error_mult=100* sqrt(abs(ERRL2_mult));
+
+disp(sprintf('L2 norm %g\n H1 error = %g\n L2 norm mult=%g', L2_Error, H1_Error, L2_error_mult));
+
+if (N == 2)
+ figure(1);
+ gf_plot(mfu, U, 'mesh','on', 'refine', 2);
+ xlabel('x'); ylabel('y');
+ title('Displasment solution');
+ figure(2);
+ gf_plot(mfu0, map_Error, 'mesh','on', 'refine', 2);
+ xlabel('x'); ylabel('y');
+ title('Map Error in displacement');
+else
+ % gf_plot(mfu, U, 'mesh','on', 'cvlst', gf_mesh_get(m, 'outer faces'), 'refine', 2);
+ %Plot displasment
+ figure(1);
+ sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',1,[0;0;0],[0;0;1]}}},mfu,3);
+ %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu,1);
+ Usl=gf_compute(mfu,U,'interpolate on', sl);
+ gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Displasment solution');
+
+
+ %plot exact solution
+ figure(2);
+ sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',1,[0;0;0],[0;0;1]}}},mfu0,3);
+ %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu0,10);
+ Usl=gf_compute(mfu0,Sol_U,'interpolate on', sl);
+ gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Exact solution');
+
+ %Plot map eroor on u
+ figure(3);
+ sl=gf_slice({'boundary',{'intersection',{'ball', -1,[0;0;0], R},{'planar',-1,[0;0;0],[0;0;1]}}},mfu0,10);
+ %sl=gf_slice({'boundary',{'intersection',{'ball',-1,[0;0;0],R}}},mfu0,10);
+ Usl=gf_compute(mfu0,map_Error,'interpolate on', sl);
+ gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Map Error in displacement');
+
+
+ %Plot multiplier
+ figure(4);
+ %sl=gf_slice({'boundary',{'intersection',{'ball', 0,[0;0;0], R},{'planar',-1,[0;0;0],[0;0;1]}}},mf_mult,10);
+ sl=gf_slice({'boundary',{'intersection',{'ball',0,[0;0;0],R}}},mf_mult,3);
+ Usl=gf_compute(mf_mult, Lambda,'interpolate on', sl);
+ gf_plot_slice(sl,'mesh_faces','on','mesh','off','data',Usl,'mesh_slice_edges','on');
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Multiplier solution');
+ end
+gf_colormap('chouette');
+
diff --git a/interface/tests/matlab/demo_laplacian.m b/interface/tests/matlab/demo_laplacian.m
index f5e0827..28a5deb 100644
--- a/interface/tests/matlab/demo_laplacian.m
+++ b/interface/tests/matlab/demo_laplacian.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
% trace on;
gf_workspace('clear all');
m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
diff --git a/interface/tests/matlab/demo_laplacian1D.m b/interface/tests/matlab/demo_laplacian1D.m
old mode 100755
new mode 100644
index 10651d6..29ca87e
--- a/interface/tests/matlab/demo_laplacian1D.m
+++ b/interface/tests/matlab/demo_laplacian1D.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
% clears every getfem object
gf_workspace('clear all');
clear pde;
diff --git a/interface/tests/matlab/demo_large_sliding_contact.m b/interface/tests/matlab/demo_large_sliding_contact.m
new file mode 100644
index 0000000..3c6b084
--- /dev/null
+++ b/interface/tests/matlab/demo_large_sliding_contact.m
@@ -0,0 +1,138 @@
+% Copyright (C) 2012-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+gf_workspace('clear all');
+clear all;
+
+lambda = 1.; mu = 1.; % Elasticity parameters
+r = 1.0; % Augmentation parameter
+f_coeff = 1.; % Friction coefficient
+vf = 0.01; % Vertical force
+penalty_parameter = 0.1;
+
+
+mesh1 = gf_mesh('load', '../../../tests/meshes/disc_with_a_hole.mesh');
+mesh2 = gf_mesh('import', 'structured', 'GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]');
+
+N = gf_mesh_get(mesh1, 'dim');
+
+mfu1 = gf_mesh_fem(mesh1, N); gf_mesh_fem_set(mfu1, 'classical fem', 2);
+pre_mflambda1 = gf_mesh_fem(mesh1, N); gf_mesh_fem_set(pre_mflambda1, 'classical fem', 1);
+mfvm1 = gf_mesh_fem(mesh1); gf_mesh_fem_set(mfvm1, 'classical discontinuous fem', 1);
+fb1 = gf_mesh_get(mesh1, 'outer faces');
+CONTACT_BOUNDARY1 = 1;
+gf_mesh_set(mesh1,'boundary', CONTACT_BOUNDARY1, fb1);
+dol1 = gf_mesh_fem_get(pre_mflambda1, 'basic dof on region', CONTACT_BOUNDARY1);
+mflambda1 = gf_mesh_fem('partial', pre_mflambda1, dol1);
+mim1 = gf_mesh_im(mesh1, 4);
+
+
+mfu2 = gf_mesh_fem(mesh2, N); gf_mesh_fem_set(mfu2, 'classical fem', 1);
+pre_mflambda2 = gf_mesh_fem(mesh2, N); gf_mesh_fem_set(pre_mflambda2, 'classical fem', 1);
+mfvm2 = gf_mesh_fem(mesh2); gf_mesh_fem_set(mfvm2, 'classical discontinuous fem', 1);
+fb2 = gf_mesh_get(mesh2, 'outer faces');
+CONTACT_BOUNDARY2 = 2;
+gf_mesh_set(mesh2,'boundary', CONTACT_BOUNDARY2, fb2);
+dol2 = gf_mesh_fem_get(pre_mflambda2, 'basic dof on region', CONTACT_BOUNDARY2);
+mflambda2 = gf_mesh_fem('partial', pre_mflambda2, dol2);
+mim2 = gf_mesh_im(mesh2, 8);
+
+two_bodies = 1;
+
+md=gf_model('real');
+gf_model_set(md, 'add initialized data', 'lambda', lambda);
+gf_model_set(md, 'add initialized data', 'mu', mu);
+
+if (two_bodies)
+ gf_model_set(md, 'add fem variable', 'u1', mfu1);
+ gf_model_set(md, 'add fem variable', 'lambda1', mflambda1);
+ gf_model_set(md, 'add isotropic linearized elasticity brick', mim1, 'u1', 'lambda', 'mu');
+% gf_model_set(md, 'add initialized data', 'cpoints1', [0 0.5 0 1.5 0 0.5 0 1.5]);
+% gf_model_set(md, 'add initialized data', 'cunitv1', [1 0 1 0 0 1 0 1]);
+% gf_model_set(md, 'add initialized data', 'cdata', [0 0 -0.01 -0.01]);
+% gf_model_set(md, 'add pointwise constraints with multipliers', 'u1', 'cpoints1', 'cunitv1', 'cdata');
+ gf_model_set(md, 'add initialized data', 'cpoints1', [0 0.5 0 1.5]);
+ gf_model_set(md, 'add initialized data', 'cunitv1', [1 0 1 0]);
+ gf_model_set(md, 'add initialized data', 'cdata', [0 0]);
+ gf_model_set(md, 'add pointwise constraints with multipliers', 'u1', 'cpoints1', 'cunitv1', 'cdata');
+ gf_model_set(md, 'add initialized data', 'data1', [0 -vf]);
+ gf_model_set(md, 'add source term brick', mim1, 'u1', 'data1');
+ gf_model_set(md, 'add initialized data', 'penalty_param1', [penalty_parameter]);
+ gf_model_set(md, 'add mass brick', mim1, 'u1', 'penalty_param1');
+end;
+
+gf_model_set(md, 'add fem variable', 'u2', mfu2);
+gf_model_set(md, 'add fem variable', 'lambda2', mflambda2);
+gf_model_set(md, 'add isotropic linearized elasticity brick', mim2, 'u2', 'lambda', 'mu');
+gf_model_set(md, 'add initialized data', 'cpoints2', [0 0]);
+gf_model_set(md, 'add initialized data', 'cunitv2', [1 0]);
+gf_model_set(md, 'add pointwise constraints with multipliers', 'u2', 'cpoints2', 'cunitv2');
+gf_model_set(md, 'add initialized data', 'data2', [0 -vf]);
+gf_model_set(md, 'add source term brick', mim2, 'u2', 'data2');
+gf_model_set(md, 'add initialized data', 'penalty_param2', [penalty_parameter]);
+gf_model_set(md, 'add mass brick', mim2, 'u2', 'penalty_param2');
+
+gf_model_set(md, 'add initialized data', 'r', r);
+gf_model_set(md, 'add initialized data', 'f', f_coeff);
+
+indb = gf_model_set(md, 'add integral large sliding contact brick', mim2, 'u2', 'lambda2', 'r', 'f', CONTACT_BOUNDARY2);
+
+if (two_bodies)
+ gf_model_set(md, 'add boundary to large sliding contact brick', indb, mim1, 'u1', 'lambda1', CONTACT_BOUNDARY1);
+end;
+
+gf_model_set(md, 'add rigid obstacle to large sliding contact brick', indb, 'y');
+
+% gf_model_get(md, 'test tangent matrix', 1E-6, 10, 0.00001);
+
+
+
+for i=1:100
+
+
+
+gf_model_get(md, 'solve', 'noisy', 'max_iter', 50, 'max_res', 1e-8); % , 'lsearch', 'simplest');
+
+U2 = gf_model_get(md, 'variable', 'u2');
+VM2 = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+ 'u2', 'lambda', 'mu', mfvm2);
+
+gf_plot(mfvm2,VM2,'mesh','off', 'deformation',U2,'deformation_mf',mfu2,'deformation_scale', 1, 'refine', 8); colorbar;
+
+if (two_bodies)
+ hold on
+ U1 = gf_model_get(md, 'variable', 'u1');
+ VM1 = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
+ 'u1', 'lambda', 'mu', mfvm1);
+ gf_plot(mfvm1,VM1,'mesh','off', 'deformation',U1,'deformation_mf',mfu1,'deformation_scale', 1, 'refine', 8); colorbar;
+ hold off
+end;
+
+axis([-2, 2, -0.2, 3]);
+pause(1);
+
+ vf = vf + 0.001;
+ gf_model_set(md, 'variable', 'data1', [0 -vf]);
+ gf_model_set(md, 'variable', 'data2', [0 -vf]);
+
+end;
+
+
+
+
+
+
diff --git a/interface/tests/matlab/demo_mesh_generation.m b/interface/tests/matlab/demo_mesh_generation.m
new file mode 100644
index 0000000..012414e
--- /dev/null
+++ b/interface/tests/matlab/demo_mesh_generation.m
@@ -0,0 +1,96 @@
+% Copyright (C) 2011-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+%
+% Mesh generation with the experimental meshing procedure of Getfem which
+% uses simple primitives to describe the mesh geometry.
+%
+% This program is used to check that matlab-getfem is working. This is also
+% a good example of use of GetFEM++.
+%
+
+gf_workspace('clear all'); clear all;
+
+N = 2; % dimension of the mesh
+K = 2; % degree of the mesh (for curved boundaries)
+if (N == 1)
+ mo = gf_mesher_object('ball', [0], 2);
+ fixed_vertices = [0];
+ h = 0.5;
+elseif (N == 2)
+ if (1)
+ mo = gf_mesher_object('ball', [0 4], 2);
+ fixed_vertices = [0; 4];
+ h = 0.5;
+ else
+ mo1 = gf_mesher_object('ball', [0 1.1], 1);
+ mo2 = gf_mesher_object('rectangle', [-0.2 1.085], [0.2, 1.115]);
+ mo3 = gf_mesher_object('ball', [0.4 1.1], 0.2);
+ mo4 = gf_mesher_object('ball', [-0.4 1.1], 0.2);
+ mo5 = gf_mesher_object('union', mo2, mo3, mo4);
+ mo = gf_mesher_object('set minus', mo1, mo5);
+ fixed_vertices = [];
+ h = 0.05;
+ end
+elseif (N == 3)
+ if (0)
+ mo1 = gf_mesher_object('ball', [0 0 1], 2);
+ mo2 = gf_mesher_object('ball', [0 0 -1], 2);
+ mo3 = gf_mesher_object('intersect', mo1, mo2);
+ mo4 = gf_mesher_object('ball', [0 0 0], 1.3);
+ mo5 = gf_mesher_object('union', mo4, mo3);
+ mo6 = gf_mesher_object('ball', [-1 0 0], 1);
+ mo = gf_mesher_object('set minus', mo5, mo6);
+ fixed_vertices = []; h = 0.3;
+ elseif (1)
+ alpha = pi/5;
+ L = 20;
+ R = L * tan(alpha) * 0.7;
+ mo1 = gf_mesher_object('cone', [0 0 0], [0 0 1], L, alpha);
+ mo2 = gf_mesher_object('cylinder', [0 0 L], [0, 0, 1], L, R);
+ mo = gf_mesher_object('union', mo1, mo2);
+ fixed_vertices = []; h = 2.1;
+ else
+ mo = gf_mesher_object('ball', [0 0 20], 20);
+ fixed_vertices = []; h = 3;
+ end
+elseif (N == 4)
+ mo = gf_mesher_object('ball', [0 0 0 4], 2);
+ fixed_vertices = [0; 0; 0; 4];
+ h = 1;
+else
+ error('It is not very reasonable to build a mesh in dimension greater than 4 !');
+end;
+
+
+tl = gf_util('trace level');
+% gf_util('trace level', 2); % no trace for mesh generation
+gf_util('trace level', 4); % all traces for mesh generation
+m = gf_mesh('generate', mo, h, K, fixed_vertices);
+gf_util('trace level', tl);
+
+
+if (N <= 2)
+ gf_plot_mesh(m);
+elseif (N == 3)
+ mf=gf_mesh_fem(m, 1);
+ gf_mesh_fem_set(mf, 'classical fem', K);
+ VAL = gf_mesh_fem_get(mf, 'eval', {'x+y+z'});
+ gf_plot(mf, VAL, 'mesh', 'on', 'cvlst', gf_mesh_get(mf,'outer faces'), 'refine', 4);
+ axis on; camlight; gf_colormap('chouette');
+end;
+
+% gf_mesh_get(m, 'save', 'name.mesh');
diff --git a/interface/tests/matlab/demo_mortar.m b/interface/tests/matlab/demo_mortar.m
old mode 100755
new mode 100644
index bbb0a89..aa785a8
--- a/interface/tests/matlab/demo_mortar.m
+++ b/interface/tests/matlab/demo_mortar.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
% do a partition of the mesh into two disjoint areas, and then
% solve the linear elasticity problem with a mortar join on
% the interface between the two areas
diff --git a/interface/tests/matlab/demo_nonlinear_elasticity.m b/interface/tests/matlab/demo_nonlinear_elasticity.m
index d51ba67..e945694 100644
--- a/interface/tests/matlab/demo_nonlinear_elasticity.m
+++ b/interface/tests/matlab/demo_nonlinear_elasticity.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
clear pde;
gf_workspace('clear all');
@@ -168,6 +185,8 @@ for step=1:nbstep,
% full(gf_model_get(md, 'tangent matrix'))
U = gf_model_get(md, 'variable', 'u');
VM = gf_model_get(md, 'compute Von Mises or Tresca', 'u', lawname, 'params', mfdu);
+ % sigma = gf_model_get(md, 'compute second Piola Kirchhoff tensor', 'u', lawname, 'params', mfdu);
+ % sigma
else
gf_MdBrick_set(b3, 'param', 'R', mfd, R);
gf_MdBrick_get(b3, 'solve', mds, 'very noisy', 'max_iter', 100, 'max_res', 1e-5);
diff --git a/interface/tests/matlab/demo_nonlinear_elasticity_anim.m b/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
old mode 100755
new mode 100644
index 706fc43..d7c4239
--- a/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
+++ b/interface/tests/matlab/demo_nonlinear_elasticity_anim.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
% replay all the computations of demo_nonlinear_elasticity.m
load demo_nonlinear_elasticity_U.mat
@@ -31,4 +49,4 @@ for step=1:1:nbstep,
camlight;
axis off;
print(gcf, '-dpng', '-r150', sprintf('torsion%03d',step));
-end;
\ No newline at end of file
+end;
diff --git a/interface/tests/matlab/demo_plasticity.m b/interface/tests/matlab/demo_plasticity.m
index 336e744..c3c5a2b 100644
--- a/interface/tests/matlab/demo_plasticity.m
+++ b/interface/tests/matlab/demo_plasticity.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
clear all
gf_workspace('clear all');
clc
diff --git a/interface/tests/matlab/demo_refine.m b/interface/tests/matlab/demo_refine.m
old mode 100755
new mode 100644
index 4500424..9ca61b9
--- a/interface/tests/matlab/demo_refine.m
+++ b/interface/tests/matlab/demo_refine.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
% Example of automatic refinement of the mesh
% In this example, the refinement will focus on the
% transition between the Dirichlet and the Neumann boundary.
diff --git a/interface/tests/matlab/demo_static_contact.m b/interface/tests/matlab/demo_static_contact.m
index 1ee809f..a619561 100644
--- a/interface/tests/matlab/demo_static_contact.m
+++ b/interface/tests/matlab/demo_static_contact.m
@@ -1,22 +1,22 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Yves Renard.
%
-% Copyright (C) 2009-2010 Yves Renard.
+% This file is a part of GETFEM++
%
-% This file is a part of GetFEM++
-%
-% GetFEM++ is free software; you can redistribute it and/or modify it
+% Getfem++ is free software; you can redistribute it and/or modify it
% under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation; either version 2.1 of the License, or
-% (at your option) any later version.
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
% You should have received a copy of the GNU Lesser General Public License
% along with this program; if not, write to the Free Software Foundation,
% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
%
-% Static equilibrium of an elastic solid in contact with a rigid foundation
+% Static equilibrium of an elastic solid in contact with a rigid foundation.
+% Tests the different contact/friction formulations of Getfem.
%
% This program is used to check that matlab-getfem is working. This is also
% a good example of use of GetFEM++.
@@ -25,95 +25,178 @@
gf_workspace('clear all');
clear all;
-% Import the mesh
-% m=gfMesh('load', '../../../tests/meshes/disc_P2_h2.mesh');
-%m=gf_mesh('load', '../../../tests/meshes/disc_P2_h1.mesh');
- m=gf_Mesh('load', '../../../tests/meshes/disc_P2_h0.5.mesh');
-
-d = gf_mesh_get(m, 'dim');
-
-
-% parameters of the model
-lambda = 1; % Lame coefficient
-mu = 1; % Lame coefficient
-friction_coeff = 0.2; % coefficient of friction
-r = 5; % Augmentation parameter
-version = 1; % 1 : frictionless contact and the basic contact brick
- % 2 : contact with 'static' friction and the basic contact brick
- % 3 : frictionless contact and the contact with a
- % rigid obstacle brick
- % 4 : contact with 'static' friction and the contact with a
- % rigid obstacle brick
+% Import the mesh : disc
+m=gf_mesh('load', '../../../tests/meshes/disc_P2_h4.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h2.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h1.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h0_5.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/disc_P2_h0_3.mesh');
+
+% Import the mesh : sphere
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_8_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_80_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_400_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_2000_elts.mesh');
+% m=gf_mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_16000_elts.mesh');
+
+
+d = gf_mesh_get(m, 'dim'); % Mesh dimension
+
+
+% Parameters of the model
+clambda = 1; % Lame coefficient
+cmu = 1; % Lame coefficient
+friction_coeff = 0.4; % coefficient of friction
+vertical_force = 0.05; % Volumic load in the vertical direction
+r = 1; % Augmentation parameter
+condition_type = 2; % 0 = Explicitely kill horizontal rigid displacements
+ % 1 = Kill rigid displacements using a global penalization
+ % 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6; % Penalization coefficient for the global penalization
if (d == 2)
- obstacle = 'y'; % Signed distance representing the obstacle
+ cpoints = [0, 0]; % constrained points for 2d
+ cunitv = [1, 0]; % corresponding constrained directions for 2d
else
- obstacle = 'z'; % Signed distance representing the obstacle
+ cpoints = [0, 0, 0, 0, 0, 0, 5, 0, 5]; % constrained points for 3d
+ cunitv = [1, 0, 0, 0, 1, 0, 0, 1, 0]; % corresponding constrained directions for 3d
end;
-% Selection of the contact boundary
+niter = 100; % Maximum number of iterations for Newton's algorithm.
+plot_mesh = true;
+version = 1; % 1 : frictionless contact and the basic contact brick
+ % 2 : contact with 'static' Coulomb friction and basic contact brick
+ % 3 : frictionless contact and the contact with a
+ % rigid obstacle brick
+ % 4 : contact with 'static' Coulomb friction and the contact with a
+ % rigid obstacle brick
+ % 5 : frictionless contact and the integral brick
+ % Newton and Alart-Curnier augmented lagrangian,
+ % unsymmetric version
+ % 6 : frictionless contact and the integral brick
+ % Newton and Alart-Curnier augmented lagrangian, symmetric
+ % version.
+ % 7 : frictionless contact and the integral brick
+ % New unsymmetric method.
+ % 9 : frictionless contact and the integral brick : Uzawa
+ % on the Lagrangian augmented by the penalization term.
+ % 10 : contact with 'static' Coulomb friction and the integral brick
+ % Newton and Alart-Curnier augmented lagrangian,
+ % unsymmetric version.
+ % 11 : contact with 'static' Coulomb friction and the integral brick
+ % Newton and Alart-Curnier augmented lagrangian,
+ % nearly symmetric version.
+ % 12 : contact with 'static' Coulomb friction and the integral brick
+ % New unsymmetric method.
+ % 13 : contact with 'static' Coulomb friction and the integral brick
+ % New unsymmetric method with De Saxce projection.
+ % 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+ % on the Lagrangian augmented by the penalization term.
+ % 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+ % coefficient).
+ % Signed distance representing the obstacle
+if (d == 2) obstacle = 'y'; else obstacle = 'z'; end;
+
+% Selection of the contact and Dirichlet boundaries
+GAMMAC = 1; GAMMAD = 2;
+
border = gf_mesh_get(m,'outer faces');
normals = gf_mesh_get(m, 'normal of faces', border);
-contact_boundary=border(:,find(normals(d, :) < 0));
-GAMMAC = 1;
+contact_boundary=border(:, find(normals(d, :) < -0.01));
gf_mesh_set(m, 'region', GAMMAC, contact_boundary);
+contact_boundary=border(:, find(normals(d, :) > 0.01));
+gf_mesh_set(m, 'region', GAMMAD, contact_boundary);
+
-% Plot the mesh
-figure(1);
-gf_plot_mesh(m, 'regions', [GAMMAC]);
-title('Mesh and contact boundary (in red)');
-pause(0.1);
% Finite element methods
-mfu=gf_Mesh_Fem(m, d);
-gf_mesh_fem_set(mfu, 'classical fem', 2);
-mfd=gf_Mesh_Fem(m, 1);
-gf_mesh_fem_set(mfd, 'classical fem', 1);
-mfvm=gf_Mesh_Fem(m, 1);
-gf_mesh_fem_set(mfvm, 'classical discontinuous fem', 1);
-mim=gf_Mesh_Im(m, 4);
+u_degree = 2;
+lambda_degree = 2;
+
+mfu=gf_mesh_fem(m, d);
+gf_mesh_fem_set(mfu, 'classical fem', u_degree);
+mfd=gf_mesh_fem(m, 1);
+gf_mesh_fem_set(mfd, 'classical fem', u_degree);
+mflambda=gf_mesh_fem(m, 1); % used only by versions 5 to 13
+gf_mesh_fem_set(mflambda, 'classical fem', lambda_degree);
+mfvm=gf_mesh_fem(m, 1);
+gf_mesh_fem_set(mfvm, 'classical discontinuous fem', u_degree-1);
+% Integration method
+mim=gf_mesh_im(m, 4);
+if (d == 2)
+ mim_friction=gf_mesh_im(m, ...
+ gf_integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'));
+else
+ mim_friction=gf_mesh_im(m, ...
+ gf_integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)'));
+end;
+
+% Plot the mesh
+if (plot_mesh)
+ figure(1);
+ gf_plot_mesh(m, 'regions', [GAMMAC]);
+ title('Mesh and contact boundary (in red)');
+ pause(0.1);
+end;
% Volumic density of force
nbdofd = gf_mesh_fem_get(mfd, 'nbdof');
nbdofu = gf_mesh_fem_get(mfu, 'nbdof');
F = zeros(nbdofd*d, 1);
-F(d:d:nbdofd*d) = -0.02;
+F(d:d:nbdofd*d) = -vertical_force;
% Elasticity model
md=gf_model('real');
gf_model_set(md, 'add fem variable', 'u', mfu);
-gf_model_set(md, 'add initialized data', 'mu', [mu]);
-gf_model_set(md, 'add initialized data', 'lambda', [lambda]);
+gf_model_set(md, 'add initialized data', 'cmu', [cmu]);
+gf_model_set(md, 'add initialized data', 'clambda', [clambda]);
gf_model_set(md, 'add isotropic linearized elasticity brick', mim, 'u', ...
- 'lambda', 'mu');
+ 'clambda', 'cmu');
gf_model_set(md, 'add initialized fem data', 'volumicload', mfd, F);
gf_model_set(md, 'add source term brick', mim, 'u', 'volumicload');
-% Small penalty term to avoid rigid motion (should be replaced by an explicit
-% treatment of the rigid motion with a constraint matrix)
-gf_model_set(md, 'add initialized data', 'penalty_param', [1E-8]);
-gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+if (condition_type == 2)
+ Ddata = zeros(1, d); Ddata(d) = -5;
+ gf_model_set(md, 'add initialized data', 'Ddata', Ddata);
+ gf_model_set(md, 'add Dirichlet condition with multipliers', mim, 'u', u_degree, GAMMAD, 'Ddata');
+elseif (condition_type == 0)
+ gf_model_set(md, 'add initialized data', 'cpoints', cpoints);
+ gf_model_set(md, 'add initialized data', 'cunitv', cunitv);
+ gf_model_set(md, 'add pointwise constraints with multipliers', 'u', 'cpoints', 'cunitv');
+elseif (condition_type == 1)
+ % Small penalty term to avoid rigid motion (should be replaced by an
+ % explicit treatment of the rigid motion with a constraint matrix)
+ gf_model_set(md, 'add initialized data', 'penalty_param', ...
+ [penalty_parameter]);
+ gf_model_set(md, 'add mass brick', mim, 'u', 'penalty_param');
+end;
% The contact condition
cdof = gf_mesh_fem_get(mfu, 'dof on region', GAMMAC);
nbc = size(cdof, 2) / d;
+if (nbc <= 0)
+ disp('No contact zone');
+ return;
+end;
+
+solved = false;
if (version == 1 || version == 2) % defining the matrices BN and BT by hand
contact_dof = cdof(d:d:nbc*d);
contact_nodes = gf_mesh_fem_get(mfu, 'basic dof nodes', contact_dof);
BN = sparse(nbc, nbdofu);
+ ngap = zeros(nbc, 1);
for i = 1:nbc
BN(i, contact_dof(i)) = -1.0;
- gap(i) = contact_nodes(d, i);
+ ngap(i) = contact_nodes(d, i);
end;
if (version == 2)
BT = sparse(nbc*(d-1), nbdofu);
for i = 1:nbc
- BT(i*(d-1), contact_dof(i)-d+1) = 1.0;
- if (d > 2)
- BT(i*(d-1)+1, contact_dof(i)-d+2) = 1.0;
+ for j = 1:d-1
+ BT(j+(i-1)*(d-1), contact_dof(i)-d+j) = 1.0;
end;
end;
end;
@@ -123,60 +206,174 @@ if (version == 1 || version == 2) % defining the matrices BN and BT by hand
if (version == 2)
gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
gf_model_set(md, 'add initialized data', 'friction_coeff', ...
- [friction_coeff]);
+ [friction_coeff]);
end;
- gf_model_set(md, 'add initialized data', 'gap', gap);
- gf_model_set(md, 'add initialized data', 'alpha', ones(nbc, 1));
+ gf_model_set(md, 'add initialized data', 'ngap', ngap);
+ gf_model_set(md, 'add initialized data', 'alpha', 2*ones(nbc, 1));
if (version == 1)
- gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', BN, ...
- 'gap', 'alpha', 0);
+ gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', 'r', ...
+ BN, 'ngap', 'alpha', 1);
else
gf_model_set(md, 'add basic contact brick', 'u', 'lambda_n', ...
- 'lambda_t', 'r', BN, BT, 'friction_coeff', 'gap', 'alpha', 0);
+ 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
end;
-elseif (version == 3 || version == 4) % BN and BT defined by the contact brick
+elseif (version == 3 || version == 4) % BN and BT defined by contact brick
gf_model_set(md, 'add variable', 'lambda_n', nbc);
gf_model_set(md, 'add initialized data', 'r', [r]);
if (version == 3)
- gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
- 'lambda_n', 'r', GAMMAC, obstacle, 0);
+ gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
+ 'lambda_n', 'r', GAMMAC, obstacle, 1);
else
gf_model_set(md, 'add variable', 'lambda_t', nbc * (d-1));
gf_model_set(md, 'add initialized data', 'friction_coeff', ...
[friction_coeff]);
- gf_model_set(md, 'add contact with rigid obstacle brick', mim, 'u', ...
+ gf_model_set(md, 'add nodal contact with rigid obstacle brick', mim, 'u', ...
'lambda_n', 'lambda_t', 'r', 'friction_coeff', GAMMAC, ...
- obstacle, 0);
+ obstacle, 1);
+ end;
+
+elseif (version >= 5 && version <= 8) % The integral version, Newton
+
+ gf_model_set(md, 'add multiplier', 'lambda_n', mflambda, 'u', mim, GAMMAC);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add integral contact with rigid obstacle brick', ...
+ mim_friction, 'u', 'lambda_n', 'obstacle', 'r', GAMMAC, version-4);
+
+elseif (version == 9) % The integral version, Uzawa on the augmented Lagrangian
+
+
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+ M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+ lambda_n = zeros(1, nbc);
+ gf_model_set(md, 'add initialized fem data', 'lambda_n', mflambda_partial, lambda_n);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', GAMMAC, 2, 'lambda_n');
+
+ for ii=1:100
+ disp(sprintf('iteration %d', ii));
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); % , 'very noisy');
+ U = gf_model_get(md, 'variable', 'u');
+ lambda_n_old = lambda_n;
+ lambda_n = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))';
+ gf_model_set(md, 'variable', 'lambda_n', lambda_n);
+ difff = max(abs(lambda_n-lambda_n_old));
+ disp(sprintf('diff : %g', difff/max(abs(lambda_n))));
+ % pause;
+ if (difff/max(abs(lambda_n)) < penalty_parameter) break; end;
+ end;
+
+ solved = true;
+
+elseif (version >= 10 && version <= 13) % The integral version with friction, Newton
+
+ gf_mesh_fem_set(mflambda, 'qdim', d);
+ gf_model_set(md, 'add multiplier', 'lambda', mflambda, 'u', mim, GAMMAC);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add integral contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9);
+
+elseif (version == 14) % The integral version, Uzawa on the augmented Lagrangian with friction
+
+ gf_mesh_fem_set(mflambda, 'qdim', d);
+ ldof = gf_mesh_fem_get(mflambda, 'dof on region', GAMMAC);
+ mflambda_partial = gf_mesh_fem('partial', mflambda, ldof);
+ nbc = gf_mesh_fem_get(mflambda_partial, 'nbdof');
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ M = gf_asm('mass matrix', mim, mflambda_partial, mflambda_partial, GAMMAC);
+ lambda = zeros(1, nbc);
+ gf_model_set(md, 'add initialized fem data', 'lambda', mflambda_partial, lambda);
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda');
+
+ for ii=1:100
+ disp(sprintf('iteration %d', ii));
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'max_iter', niter); % , 'very noisy');
+ U = gf_model_get(md, 'variable', 'u');
+ lambda_old = lambda;
+ lambda = (M\ gf_asm('integral contact Uzawa projection', GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda, mfd, OBS, r, friction_coeff))';
+ gf_model_set(md, 'variable', 'lambda', lambda);
+ difff = max(abs(lambda-lambda_old));
+ disp(sprintf('diff : %g', difff/max(abs(lambda))));
+ % pause;
+ if (difff/max(abs(lambda)) < penalty_parameter) break; end;
end;
+
+ solved = true;
+elseif (version == 15)
+
+ gf_model_set(md, 'add initialized data', 'r', [r]);
+ gf_model_set(md, 'add initialized data', 'friction_coeff', [friction_coeff]);
+ OBS = gf_mesh_fem_get(mfd, 'eval', { obstacle });
+ gf_model_set(md, 'add initialized fem data', 'obstacle', mfd, OBS);
+ gf_model_set(md, 'add penalized contact with rigid obstacle brick', mim_friction, 'u', ...
+ 'obstacle', 'r', 'friction_coeff', GAMMAC);
+
else
- error('Unexistent version');
+ error('Inexistent version');
end
% Solve the problem
-
-gf_model_get(md, 'solve', 'max_res', 1E-7, 'very noisy', 'max_iter', 100); % , 'with pseudo potential');
-
+if (~solved)
+ gf_model_get(md, 'test tangent matrix', 1e-6, 10, 0.01);
+ gf_model_get(md, 'solve', 'max_res', 1E-9, 'very noisy', 'max_iter', niter); % , 'lsearch', 'simplest'); % , 'with pseudo potential');
+end;
U = gf_model_get(md, 'variable', 'u');
-lambda_n = gf_model_get(md, 'variable', 'lambda_n');
+% lambda_n = gf_model_get(md, 'variable', 'lambda_n');
VM = gf_model_get(md, 'compute_isotropic_linearized_Von_Mises_or_Tresca', ...
- 'u', 'lambda', 'mu', mfvm);
+ 'u', 'clambda', 'cmu', mfvm);
+
% set a custom colormap
% r=[0.7 .7 .7]; l = r(end,:); s=63; s1=20; s2=25; s3=48;s4=55; for i=1:s, c1 = max(min((i-s1)/(s2-s1),1),0);c2 = max(min((i-s3)/(s4-s3),1),0); r(end+1,:)=(1-c2)*((1-c1)*l + c1*[1 0 0]) + c2*[1 .8 .2]; end; colormap(r);
figure(2);
if (d == 3)
- gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
- gf_mesh_get(mfdu,'outer faces'), 'deformation', U, ...
- 'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ c=[0.1;0;20]; x=[1;0;0]; y=[0;1;0]; z=[0;0;1];
+ % Whole boundary
+ % sl2=gf_slice({'boundary',{'none'}}, m, 5);
+ % Slice, 3 planes
+ % sl2=gf_slice({'boundary',{'union',{'planar',+1,c,x},{'planar',+1,c,y},{'planar',+1,c,z}}},m,5);
+ % Slice, 2 planes
+ % sl2=gf_slice({'boundary',{'union',{'planar',+1,c,x},{'planar',+1,c,y}}},m,5);
+ % Slice, 1 plane
+ sl2=gf_slice({'boundary',{'planar',+1,c,x}}, m, 5);
+
+ P=gf_slice_get(sl2,'pts'); dP=gf_compute(mfu,U,'interpolate on',sl2);
+ gf_slice_set(sl2, 'pts', P+dP);
+ VMsl=gf_compute(mfvm,VM,'interpolate on',sl2);
+ set(gcf,'renderer','zbuffer');
+ h=gf_plot_slice(sl2,'mesh','on','mesh_slice_edges','off','data',VMsl);
+ view(-80,-15); axis on; camlight; gf_colormap('chouette');
+ % map=[1:-1/10:0]'*[1 1 1]; colormap(map); % for NB
+
+ % gf_plot(mfvm, VM, 'mesh', 'off', 'cvlst', ...
+ % gf_mesh_get(mfu,'outer faces'), 'deformation', U, ...
+ % 'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ % view(-5,-10); camlight; colormap(map);
+ xlabel('x'); ylabel('y'); zlabel('z');
+ title('Sliced deformed configuration (not really a small deformation of course ...)');
else
gf_plot(mfvm, VM, 'deformed_mesh', 'on', 'deformation', U, ...
'deformation_mf', mfu, 'deformation_scale', 1, 'refine', 8);
+ xlabel('x'); ylabel('y');
+ title('Deformed configuration (not really a small deformation of course ...)');
end;
-title('Deformed configuration (not really a small deformation of course ...)');
colorbar;
pause(0.1);
diff --git a/interface/tests/matlab/demo_stokes_2D_poiseuille.m b/interface/tests/matlab/demo_stokes_2D_poiseuille.m
old mode 100755
new mode 100644
index 5c9621f..e9afd66
--- a/interface/tests/matlab/demo_stokes_2D_poiseuille.m
+++ b/interface/tests/matlab/demo_stokes_2D_poiseuille.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
% this example uses the "old" gf_solve instead of the bricks
% framework..
diff --git a/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m b/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
old mode 100755
new mode 100644
index 17edc6c..a63c1f7
--- a/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
+++ b/interface/tests/matlab/demo_stokes_2D_poiseuille_arc.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
% this example uses the "old" gf_solve instead of the bricks
% framework..
@@ -42,7 +59,7 @@ mfulag=gf_mesh_fem(m,2);
pde.mf_p=gf_mesh_fem(m,1);
pde.mf_d=gf_mesh_fem(m,1);
pde.mim=gf_mesh_im(m, gf_integ('IM_GAUSS_PARALLELEPIPED(2,10)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
% -> if not used, the pression has strange values
gf_mesh_fem_set(pde.mf_u,'fem',fem_u);
gf_mesh_fem_set(pde.mf_p,'fem',fem_u);
diff --git a/interface/tests/matlab/demo_stokes_2D_tube.m b/interface/tests/matlab/demo_stokes_2D_tube.m
old mode 100755
new mode 100644
index 7bc4f28..e127cca
--- a/interface/tests/matlab/demo_stokes_2D_tube.m
+++ b/interface/tests/matlab/demo_stokes_2D_tube.m
@@ -1,5 +1,21 @@
-% this example uses the "old" gf_solve instead of the bricks
-% framework..
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+% this example uses the "old" gf_solve instead of the bricks framework..
gf_workspace('clear all');
disp('2D stokes demonstration on a quadratic mesh');
@@ -19,7 +35,7 @@ mfulag=gf_mesh_fem(m,2);
pde.mf_p=gf_mesh_fem(m,1);
pde.mf_d=gf_mesh_fem(m,1);
pde.mim=gf_mesh_im(m,gf_integ('IM_TRIANGLE(5)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
% -> if not used, the pressure has strange values
gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(2,2)'));
gf_mesh_fem_set(pde.mf_d,'fem',gf_fem('FEM_PK(2,2)'));
diff --git a/interface/tests/matlab/demo_stokes_3D_tank.m b/interface/tests/matlab/demo_stokes_3D_tank.m
index 51ba13c..f50c3c5 100644
--- a/interface/tests/matlab/demo_stokes_3D_tank.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
disp('3D stokes demonstration on a quadratic mesh');
compute=input(' 1:compute the solution\n 0:load a previously computed solution\n ? ');
gf_workspace('clear all');
diff --git a/interface/tests/matlab/demo_stokes_3D_tank_alt.m b/interface/tests/matlab/demo_stokes_3D_tank_alt.m
old mode 100755
new mode 100644
index 3aae8f7..332d4c9
--- a/interface/tests/matlab/demo_stokes_3D_tank_alt.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
% old example, which uses the deprecated gf_solve function
% see demo_stokes_3D_tank.m for a "modern" version
@@ -25,7 +43,7 @@ mfulag=gf_mesh_fem(m,3);
pde.mf_p=gf_mesh_fem(m,1);
pde.mf_d=gf_mesh_fem(m,1);
pde.mim=gf_mesh_im(m, gf_integ('IM_TETRAHEDRON(5)'));
-% this is a good example of the usefullness of the cubic bubble
+% this is a good example of the usefulness of the cubic bubble
% -> if not used, the pression has strange values
%gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK_WITH_CUBIC_BUBBLE(3,2)')
gf_mesh_fem_set(pde.mf_u,'fem',gf_fem('FEM_PK(3,2)'));
diff --git a/interface/tests/matlab/demo_stokes_3D_tank_draw.m b/interface/tests/matlab/demo_stokes_3D_tank_draw.m
old mode 100755
new mode 100644
index e1a0667..e194f33
--- a/interface/tests/matlab/demo_stokes_3D_tank_draw.m
+++ b/interface/tests/matlab/demo_stokes_3D_tank_draw.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
if (exist('U')~=1 | exist('P') ~= 1),
error('run demo_stokes_3D_tank2 first');
end;
@@ -31,4 +48,4 @@ hold on; [a,h]=gf_plot_slice(tsl,'mesh','off','tube_radius',.2,'tube_color','whi
% a nice colormap
caxis([0 .7]);
c=[0 0 1; 0 .5 1; 0 1 .5; 0 1 0; .5 1 0; 1 .5 0; 1 .4 0; 1 0 0; 1 .2 0; 1 .4 0; 1 .6 0; 1 .8 0];
-colormap(c); camlight;
\ No newline at end of file
+colormap(c); camlight;
diff --git a/interface/tests/matlab/demo_structural_optimization.m b/interface/tests/matlab/demo_structural_optimization.m
index d875ba3..54abce4 100644
--- a/interface/tests/matlab/demo_structural_optimization.m
+++ b/interface/tests/matlab/demo_structural_optimization.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Alassane SY, Yves Renard.
%
-% Copyright (C) 2009 Alassane SY, Yves Renard.
+% This file is a part of GETFEM++
%
-% This file is a part of GetFEM++
-%
-% GetFEM++ is free software; you can redistribute it and/or modify it
+% Getfem++ is free software; you can redistribute it and/or modify it
% under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation; either version 2.1 of the License, or
-% (at your option) any later version.
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
% You should have received a copy of the GNU Lesser General Public License
% along with this program; if not, write to the Free Software Foundation,
% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/interface/tests/matlab/demo_topological_optimization.m b/interface/tests/matlab/demo_topological_optimization.m
index a7fa6bb..ef49300 100644
--- a/interface/tests/matlab/demo_topological_optimization.m
+++ b/interface/tests/matlab/demo_topological_optimization.m
@@ -1,17 +1,16 @@
-% Matlab GetFEM++ interface
+% Copyright (C) 2009-2012 Alassane SY, Yves Renard.
%
-% Copyright (C) 2009 Alassane SY, Yves Renard.
+% This file is a part of GETFEM++
%
-% This file is a part of GetFEM++
-%
-% GetFEM++ is free software; you can redistribute it and/or modify it
+% Getfem++ is free software; you can redistribute it and/or modify it
% under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation; either version 2.1 of the License, or
-% (at your option) any later version.
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
-% License for more details.
+% License and GCC Runtime Library Exception for more details.
% You should have received a copy of the GNU Lesser General Public License
% along with this program; if not, write to the Free Software Foundation,
% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/interface/tests/matlab/demo_tripod.m b/interface/tests/matlab/demo_tripod.m
old mode 100755
new mode 100644
index 21a579e..74794a9
--- a/interface/tests/matlab/demo_tripod.m
+++ b/interface/tests/matlab/demo_tripod.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
disp('This demo is an adaption of the original tripod demo')
disp('which uses the new "brick" framework of getfem')
disp('The code is shorter, faster and much more powerful')
diff --git a/interface/tests/matlab/demo_tripod_alt.m b/interface/tests/matlab/demo_tripod_alt.m
old mode 100755
new mode 100644
index 7753062..d9a07aa
--- a/interface/tests/matlab/demo_tripod_alt.m
+++ b/interface/tests/matlab/demo_tripod_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
disp('This is the "legacy" getfem-matlab demonstration')
disp('This demo does not use the model bricks introduced with getfem 2.0')
disp('instead it show how the linear system is built with direct calls')
diff --git a/interface/tests/matlab/demo_tripod_slice_anim.m b/interface/tests/matlab/demo_tripod_slice_anim.m
old mode 100755
new mode 100644
index 06dc60d..6fcce9b
--- a/interface/tests/matlab/demo_tripod_slice_anim.m
+++ b/interface/tests/matlab/demo_tripod_slice_anim.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
disp('this file should be launched after demo_tripod.m as it assumes the tripod mesh and solutions are in memory')
gfObject(m)
diff --git a/interface/tests/matlab/demo_wave2D.m b/interface/tests/matlab/demo_wave2D.m
old mode 100755
new mode 100644
index 224384a..67d7f4d
--- a/interface/tests/matlab/demo_wave2D.m
+++ b/interface/tests/matlab/demo_wave2D.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
gf_workspace('clear all');
disp('2D scalar wave equation (helmholtz) demonstration');
disp(' we present three approaches for the solution of the helmholtz problem')
diff --git a/interface/tests/matlab/demo_wave2D_alt.m b/interface/tests/matlab/demo_wave2D_alt.m
index 1e70ed6..c6a56f1 100644
--- a/interface/tests/matlab/demo_wave2D_alt.m
+++ b/interface/tests/matlab/demo_wave2D_alt.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
gf_workspace('clear all');
disp('2D scalar wave equation (helmholtz) demonstration');
disp('Helmholtz is not handled (for the moment) by gf_solve');
diff --git a/interface/tests/matlab/demo_wave_equation.m b/interface/tests/matlab/demo_wave_equation.m
index 538d9da..60e0e00 100644
--- a/interface/tests/matlab/demo_wave_equation.m
+++ b/interface/tests/matlab/demo_wave_equation.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2008-2012 Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
% Simple demo of a wave equation solved with transient bricks
% trace on;
gf_workspace('clear all');
diff --git a/interface/tests/matlab/private/Makefile.in b/interface/tests/matlab/private/Makefile.in
index ff1e17f..9c27670 100644
--- a/interface/tests/matlab/private/Makefile.in
+++ b/interface/tests/matlab/private/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(toolboxdir)"
SCRIPTS = $(toolbox_SCRIPTS)
SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -320,9 +329,7 @@ uninstall-toolboxSCRIPTS:
@list='$(toolbox_SCRIPTS)'; test -n "$(toolboxdir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(toolboxdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(toolboxdir)" && rm -f $$files
+ dir='$(DESTDIR)$(toolboxdir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -383,10 +390,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/tests/matlab/private/asserterr.m b/interface/tests/matlab/private/asserterr.m
old mode 100755
new mode 100644
index 626e3f1..55d7747
--- a/interface/tests/matlab/private/asserterr.m
+++ b/interface/tests/matlab/private/asserterr.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2003-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
function asserterr(sx)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/private/gfassert.m b/interface/tests/matlab/private/gfassert.m
index b47f022..389057c 100644
--- a/interface/tests/matlab/private/gfassert.m
+++ b/interface/tests/matlab/private/gfassert.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2003-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
function gfassert(sx)
global gverbose;
global gdebug;
diff --git a/interface/tests/matlab/test_argyris.m b/interface/tests/matlab/test_argyris.m
index 402460c..42617a4 100644
--- a/interface/tests/matlab/test_argyris.m
+++ b/interface/tests/matlab/test_argyris.m
@@ -1,3 +1,19 @@
+% Copyright (C) 2005-2012 Yves Renard, Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
if (1) % draw the shape functions
diff --git a/interface/tests/matlab/test_plasticity_new_brick.m b/interface/tests/matlab/test_plasticity_new_brick.m
index 8fd6e43..b6cd754 100644
--- a/interface/tests/matlab/test_plasticity_new_brick.m
+++ b/interface/tests/matlab/test_plasticity_new_brick.m
@@ -1,3 +1,20 @@
+% Copyright (C) 2010-2012 Amandine Cottaz, Yves Renard.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
clear all
gf_workspace('clear all');
clc
@@ -53,10 +70,10 @@ CVtop = find(CV > 250); % Retrieve index of convex located at the top
% Definition of Lame coeff
lambda(CVbottom) = 121150; % Stell
lambda(CVtop) = 84605; % Iron
-%lambda(CV) = 84605;
+%lambda = 121150;
mu(CVbottom) = 80769; %Stell
mu(CVtop) = 77839; % Iron
-%mu(CV) = 77839;
+%mu = 80769;
von_mises_threshold(CVbottom) = 7000;
von_mises_threshold(CVtop) = 8000;
@@ -87,7 +104,7 @@ set(md, 'add fem data', 'sigma', mf_sigma);
% Add plasticity brick on u
set(md, 'add elastoplasticity brick', mim, 'VM', 'u', 'lambda', 'mu', 'von_mises_threshold', 'sigma');
-% Add homogeneous Dirichlet condition to u on the the left hand side of the domain
+% Add homogeneous Dirichlet condition to u on the left hand side of the domain
set(md, 'add Dirichlet condition with multipliers', mim, 'u', mf_u, 1);
% Add a source term to the system
@@ -129,14 +146,14 @@ for step=1:nbstep,
n = t(step);
title(['Von Mises criterion for t = ', num2str(n)]);
- ERR=gf_compute(mf_u,U,'error estimate', mim);
- E=ERR; E(dd)=ERR;
+ %ERR=gf_compute(mf_u,U,'error estimate', mim);
+ %E=ERR; E(dd)=ERR;
subplot(2,1,2);
- gf_plot(mf_err, E, 'mesh','on', 'refine', 1);
- colorbar;
- title('Error estimate');
+ %gf_plot(mf_err, E, 'mesh','on', 'refine', 1);
+ %colorbar;
+ %title('Error estimate');
- figure(3)
+ %figure(3)
gf_plot(mf_pl,plast, 'deformation',U,'deformation_mf',mf_u,'refine', 4, 'deformation_scale',1); % 'deformed_mesh', 'on')
colorbar;
caxis([0 10000]);
diff --git a/interface/tests/matlab/tripod_anim.m b/interface/tests/matlab/tripod_anim.m
index e42ab37..3d5426f 100644
--- a/interface/tests/matlab/tripod_anim.m
+++ b/interface/tests/matlab/tripod_anim.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
% You should run demo_tripod first ...
m=gf_mesh('import','gid','../meshes/tripod.GiD.msh');
% mfu=gfMeshFem('from string', smfu, m);
diff --git a/interface/tests/matlab/tutorial1.m b/interface/tests/matlab/tutorial1.m
old mode 100755
new mode 100644
index 74da6f6..36c20dc
--- a/interface/tests/matlab/tutorial1.m
+++ b/interface/tests/matlab/tutorial1.m
@@ -1,3 +1,21 @@
+% Copyright (C) 2005-2012 Julien Pommier.
+%
+% This file is a part of GETFEM++
+%
+% Getfem++ is free software; you can redistribute it and/or modify it
+% under the terms of the GNU Lesser General Public License as published
+% by the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You should have received a copy of the GNU Lesser General Public License
+% along with this program; if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
m = gf_mesh('cartesian',[0:.1:1],[0:.1:1]);
mf = gf_mesh_fem(m,1); % create a meshfem of for a field of dimension 1 (i.e. a scalar field)
gf_mesh_fem_set(mf,'fem',gf_fem('FEM_QK(2,2)'));
diff --git a/interface/tests/meshes/Makefile.in b/interface/tests/meshes/Makefile.in
index 3d563df..35c2a18 100644
--- a/interface/tests/meshes/Makefile.in
+++ b/interface/tests/meshes/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -71,6 +71,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(meshesdir)"
SCRIPTS = $(meshes_SCRIPTS)
SOURCES =
@@ -100,6 +106,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -118,6 +125,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -134,6 +142,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -198,6 +207,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -233,7 +243,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -325,9 +334,7 @@ uninstall-meshesSCRIPTS:
@list='$(meshes_SCRIPTS)'; test -n "$(meshesdir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
- test -n "$$list" || exit 0; \
- echo " ( cd '$(DESTDIR)$(meshesdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(meshesdir)" && rm -f $$files
+ dir='$(DESTDIR)$(meshesdir)'; $(am__uninstall_files_from_dir)
mostlyclean-libtool:
-rm -f *.lo
@@ -388,10 +395,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/tests/python/Makefile.am b/interface/tests/python/Makefile.am
index 671cff9..f7828cc 100644
--- a/interface/tests/python/Makefile.am
+++ b/interface/tests/python/Makefile.am
@@ -1,19 +1,20 @@
EXTRA_DIST= \
- demo_tripod.py \
- demo_tripod_alt.py \
- demo_plate.py \
check_export.py \
- check_levelset.py \
- getfem_tvtk.py \
- demo_laplacian.py \
- demo_plasticity.py \
- demo_wave.py \
check_global_functions.py \
+ check_levelset.py \
demo_crack.py \
demo_fictitious_domains.py \
+ demo_laplacian.py \
+ demo_mortar.py \
+ demo_plasticity.py \
+ demo_plate.py \
+ demo_static_contact.py \
demo_step_by_step.py \
demo_stokes_3D_tank.py \
demo_stokes_3D_tank_draw.py \
+ demo_tripod.py \
+ demo_tripod_alt.py \
+ demo_wave.py \
getfem_tvtk.py
if BUILDPYTHON
diff --git a/interface/tests/python/Makefile.in b/interface/tests/python/Makefile.in
index f0f695e..24bd2df 100644
--- a/interface/tests/python/Makefile.in
+++ b/interface/tests/python/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -78,6 +78,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -96,6 +97,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -112,6 +114,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -176,6 +179,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -211,7 +215,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -232,21 +235,22 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = \
- demo_tripod.py \
- demo_tripod_alt.py \
- demo_plate.py \
check_export.py \
- check_levelset.py \
- getfem_tvtk.py \
- demo_laplacian.py \
- demo_plasticity.py \
- demo_wave.py \
check_global_functions.py \
+ check_levelset.py \
demo_crack.py \
demo_fictitious_domains.py \
+ demo_laplacian.py \
+ demo_mortar.py \
+ demo_plasticity.py \
+ demo_plate.py \
+ demo_static_contact.py \
demo_step_by_step.py \
demo_stokes_3D_tank.py \
demo_stokes_3D_tank_draw.py \
+ demo_tripod.py \
+ demo_tripod_alt.py \
+ demo_wave.py \
getfem_tvtk.py
@BUILDPYTHON_TRUE at TESTS = \
@@ -388,14 +392,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -444,10 +449,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/interface/tests/python/check_export.py b/interface/tests/python/check_export.py
index b8663fb..9f0eb33 100644
--- a/interface/tests/python/check_export.py
+++ b/interface/tests/python/check_export.py
@@ -24,7 +24,7 @@
This program is used to check that python-getfem is working. This is
also a good example of use of python-getfem..
- $Id: check_export.py 3226 2009-10-14 01:28:01Z lsaavedr $
+ $Id: check_export.py 4035 2012-02-18 12:21:20Z renard $
"""
import getfem as gf
import numpy as np
@@ -70,11 +70,14 @@ m1.export_to_vtk('check_export1.vtk','quality')
mf0.export_to_vtk('check_export2.vtk','ascii')
mf1.export_to_vtk('check_export3.vtk','ascii')
+
+
# DX:
try:
m0.export_to_dx('check_export0.dx')
-except RuntimeError:
- pass
+except RuntimeError as detail:
+ print detail
+
m1.export_to_dx('check_export0.dx','ascii','edges')
m1.export_to_dx('check_export0.dx','ascii','append')
sl.export_to_dx('check_export1.dx','ascii')
diff --git a/interface/tests/python/check_global_functions.py b/interface/tests/python/check_global_functions.py
index b8ffc6b..fc53f48 100644
--- a/interface/tests/python/check_global_functions.py
+++ b/interface/tests/python/check_global_functions.py
@@ -24,7 +24,7 @@
This program is used to check that python-getfem is working. This is
also a good example of use of python-getfem..
- $Id: check_global_functions.py 3468 2010-02-24 20:12:15Z renard $
+ $Id: check_global_functions.py 4035 2012-02-18 12:21:20Z renard $
"""
import numpy as np
import getfem as gf
@@ -79,10 +79,10 @@ if gf.getfem_env('muParser') == '1':
p1 = gf.GlobalFunction('parser','1')
p2 = gf.GlobalFunction('parser','2')
p3 = gf.GlobalFunction('parser','3')
- p00 = gf.GlobalFunction('parser','x','1;0;')
- p11 = gf.GlobalFunction('parser','y','0;1;')
+ p00 = gf.GlobalFunction('parser','x','1;0')
+ p11 = gf.GlobalFunction('parser','y','0;1')
p22 = gf.GlobalFunction('parser','r','x/r;y/r;','y^2/r^3;-x*y/r^3;-x*y/r^3;x^2/r^3')
- p33 = gf.GlobalFunction('parser','theta','-y/(r^2);x/(r^2);','2*x*y/r^4;(y^2-x^2)/r^4;(y^2-x^2)/r^4;-2*x*y/r^4;')
+ p33 = gf.GlobalFunction('parser','theta','-y/(r^2);x/(r^2)','2*x*y/r^4;(y^2-x^2)/r^4;(y^2-x^2)/r^4;-2*x*y/r^4')
mf.export_to_pos('check_global_functions16.pos',p0(PTs),'0')
mf.export_to_pos('check_global_functions17.pos',p1(PTs),'1')
mf.export_to_pos('check_global_functions18.pos',p2(PTs),'2')
diff --git a/interface/tests/python/demo_laplacian.py b/interface/tests/python/demo_laplacian.py
index 72902ad..97f1b1f 100644
--- a/interface/tests/python/demo_laplacian.py
+++ b/interface/tests/python/demo_laplacian.py
@@ -24,7 +24,7 @@
This program is used to check that python-getfem is working. This is
also a good example of use of GetFEM++.
- $Id: demo_laplacian.py 3226 2009-10-14 01:28:01Z lsaavedr $
+ $Id: demo_laplacian.py 3809 2011-09-26 20:38:56Z logari81 $
"""
# import basic modules
import getfem as gf
@@ -67,11 +67,11 @@ m.set_region(DIRICHLET_BOUNDARY_NUM2, ftop)
m.set_region(NEUMANN_BOUNDARY_NUM, fneum)
# interpolate the exact solution (Assuming mfu is a Lagrange fem)
-Ue = mfu.eval('x[1]*(x[1]-1)*x[0]*(x[0]-1)+x[0]*x[0]*x[0]*x[0]*x[0]')
+Ue = mfu.eval('y*(y-1)*x*(x-1)+x*x*x*x*x')
# interpolate the source term
-F1 = mfrhs.eval('-(2*(x[0]*x[0]+x[1]*x[1])-2*x[0]-2*x[1]+20*x[0]*x[0]*x[0])')
-F2 = mfrhs.eval('[x[1]*(x[1]-1)*(2*x[0]-1) + 5*x[0]*x[0]*x[0]*x[0], x[0]*(x[0]-1)*(2*x[1]-1)]')
+F1 = mfrhs.eval('-(2*(x*x+y*y)-2*x-2*y+20*x*x*x)')
+F2 = mfrhs.eval('[y*(y-1)*(2*x-1) + 5*x*x*x*x, x*(x-1)*(2*y-1)]')
# model
md = gf.Model('real')
diff --git a/interface/tests/python/demo_mortar.py b/interface/tests/python/demo_mortar.py
new file mode 100644
index 0000000..27db154
--- /dev/null
+++ b/interface/tests/python/demo_mortar.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+# -*- coding: UTF8 -*-
+# Python GetFEM++ interface
+#
+# Copyright (C) 2011 Yves Renard.
+#
+# This file is a part of GetFEM++
+#
+# GetFEM++ is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 2.1 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 Lesser General Public
+# License for more details.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+############################################################################
+
+""" Elasticity mortar problem test.
+
+ This program is used to check that python-getfem is working. This is
+ also a good example of use of GetFEM++.
+
+ It does a partition of the mesh into two disjoint areas, and then
+ solves the linear elasticity problem with a mortar join on the
+ interface between the two areas
+"""
+
+# import basic modules
+import getfem as gf
+import numpy as np
+
+# Parameters
+NX = 9
+radius = 0.3
+xc = 0.5
+yc = 0.5
+
+# creation of a simple cartesian mesh
+m = gf.Mesh('cartesian', np.arange(0,1+0.5/NX,1./NX), np.arange(0,1+0.5/NX,1./NX))
+
+(pid,idx) = m.pid_from_cvid()
+
+P = m.pts()
+
+is_in_circle = (P[0,:]-xc)**2+(P[1,:]-yc)**2 <= radius**2
+
+areap = np.zeros(idx.size-1)
+for cv in range(idx.size-1):
+ if all(is_in_circle[pid[idx[cv]:idx[cv+1]]]):
+ areap[cv] = 1
+
+mfu = gf.MeshFem(m,2)
+mfd = gf.MeshFem(m,1)
+mfm = gf.MeshFem(m,2)
+mfdu= gf.MeshFem(m)
+
+mim = gf.MeshIm(m,5)
+
+mfu.set_fem(gf.Fem('FEM_QK(2,2)'))
+mfd.set_fem(gf.Fem('FEM_QK(2,1)'))
+mfm.set_fem(gf.Fem('FEM_QK(2,2)'))
+mfdu.set_fem(gf.Fem('FEM_QK_DISCONTINUOUS(2,2)'))
+
+mfu.set_dof_partition(areap)
+
+b_in = m.outer_faces(np.nonzero(areap==1))
+b_out = m.outer_faces(np.nonzero(areap==0))
+b_border = m.outer_faces()
+b_out = np.array(tuple(set(tuple(r) for r in b_out.transpose())-
+ set(tuple(r) for r in b_border.transpose()))).transpose()
+
+fleft = m.faces_from_pid(np.nonzero(abs(P[1])<1e-6))
+fright = m.faces_from_pid(np.nonzero(abs(P[1]-1.)<1e-6))
+
+# assign boundary numbers
+m.set_region(1,fleft)
+m.set_region(2,fright)
+
+MORTAR_BOUNDARY_IN = 40
+MORTAR_BOUNDARY_OUT = 41
+m.set_region(MORTAR_BOUNDARY_IN, b_in)
+m.set_region(MORTAR_BOUNDARY_OUT, b_out)
+
+indm = mfm.basic_dof_on_region(MORTAR_BOUNDARY_OUT)
+expr = 'M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,i)'
+M = gf.asm_boundary(MORTAR_BOUNDARY_IN, expr, mim, mfm, mfu)
+M = M-gf.asm_boundary(MORTAR_BOUNDARY_OUT, expr, mim, mfm, mfu)
+M = gf.Spmat('copy', M, indm, range(M.size()[1]))
+
+
+md = gf.Model('real')
+md.add_fem_variable('u', mfu);
+md.add_initialized_data('lambda', [1])
+md.add_initialized_data('mu', [1])
+md.add_isotropic_linearized_elasticity_brick(mim, 'u', 'lambda', 'mu')
+
+md.add_Dirichlet_condition_with_multipliers(mim, 'u', mfu, 1)
+
+F = mfd.eval('[0,y+2]')
+
+md.add_initialized_fem_data('VolumicData', mfd, F)
+md.add_source_term_brick(mim, 'u', 'VolumicData')
+md.add_variable('mult_spec', indm.size)
+md.add_constraint_with_multipliers('u', 'mult_spec', M, np.zeros(indm.size))
+
+md.solve();
+U = md.get('variable', 'u')
+
+VM = md.compute_isotropic_linearized_Von_Mises_or_Tresca('u', 'lambda', 'mu', mfdu)
+
+mfd.export_to_vtk('mortar.vtk', 'ascii', mfdu, VM, 'Von Mises Stress', mfu, U, 'Displacement')
+
diff --git a/interface/tests/python/demo_plate.py b/interface/tests/python/demo_plate.py
index 26ecaf8..07ee6f0 100644
--- a/interface/tests/python/demo_plate.py
+++ b/interface/tests/python/demo_plate.py
@@ -24,7 +24,7 @@
This program is used to check that python-getfem is working. This is
also a good example of use of GetFEM++.
- $Id: demo_plate.py 3226 2009-10-14 01:28:01Z lsaavedr $
+ $Id: demo_plate.py 3809 2011-09-26 20:38:56Z logari81 $
"""
from getfem import *
from numpy import *
@@ -69,7 +69,7 @@ else:
b0 = MdBrick('mixed_isotropic_linearized_plate',mim,mfut,mfu3,mfth,thickness)
b1 = MdBrick('plate_source_term', b0)
-b1.set('param', 'M', mfd, mfd.eval('[0, x[1]*x[1]/1000]'))
+b1.set('param', 'M', mfd, mfd.eval('[0, y*y/1000]'))
b2 = MdBrick('plate clamped support', b1, CLAMPED_BOUNDARY, 'augmented');
diff --git a/interface/tests/python/demo_static_contact.py b/interface/tests/python/demo_static_contact.py
new file mode 100644
index 0000000..ea589d0
--- /dev/null
+++ b/interface/tests/python/demo_static_contact.py
@@ -0,0 +1,327 @@
+#!/usr/bin/env python
+# -*- coding: UTF8 -*-
+# Python GetFEM++ interface
+#
+# Copyright (C) 2011 Yves Renard.
+#
+# This file is a part of GetFEM++
+#
+# GetFEM++ is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 2.1 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 Lesser General Public
+# License for more details.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+############################################################################
+
+""" Static equilibrium of an elastic solid in contact with a rigid foundation
+
+ This program is used to check that python-getfem is working. This is also
+ a good example of use of GetFEM++.
+"""
+
+import getfem as gf
+import numpy as np
+
+# Import the mesh : disc
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h4.mesh')
+#m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h2.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h1.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h0_5.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/disc_P2_h0_3.mesh')
+
+# Import the mesh : sphere
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_8_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_80_elts.mesh')
+m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_400_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_2000_elts.mesh')
+# m = gf.Mesh('load', '../../../tests/meshes/sphere_with_quadratic_tetra_16000_elts.mesh')
+
+d = m.dim() # Mesh dimension
+
+# Parameters of the model
+clambda = 1. # Lame coefficient
+cmu = 1. # Lame coefficient
+friction_coeff = 0.4 # coefficient of friction
+vertical_force = 0.05 # Volumic load in the vertical direction
+r = 10. # Augmentation parameter
+condition_type = 0 # 0 = Explicitely kill horizontal rigid displacements
+ # 1 = Kill rigid displacements using a global penalization
+ # 2 = Add a Dirichlet condition on the top of the structure
+penalty_parameter = 1E-6 # Penalization coefficient for the global penalization
+
+if d == 2:
+ cpoints = [0, 0] # constrained points for 2d
+ cunitv = [1, 0] # corresponding constrained directions for 2d
+else:
+ cpoints = [0, 0, 0, 0, 0, 0, 5, 0, 5] # constrained points for 3d
+ cunitv = [1, 0, 0, 0, 1, 0, 0, 1, 0] # corresponding constrained directions for 3d
+
+niter = 100 # Maximum number of iterations for Newton's algorithm.
+version = 13 # 1 : frictionless contact and the basic contact brick
+ # 2 : contact with 'static' Coulomb friction and basic contact brick
+ # 3 : frictionless contact and the contact with a
+ # rigid obstacle brick
+ # 4 : contact with 'static' Coulomb friction and the contact with a
+ # rigid obstacle brick
+ # 5 : frictionless contact and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian,
+ # unsymmetric version
+ # 6 : frictionless contact and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian, symmetric
+ # version.
+ # 7 : frictionless contact and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian,
+ # unsymmetric version with an additional augmentation.
+ # 8 : frictionless contact and the integral brick
+ # New unsymmetric method.
+ # 9 : frictionless contact and the integral brick : Uzawa
+ # on the Lagrangian augmented by the penalization term.
+ # 10 : contact with 'static' Coulomb friction and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian,
+ # unsymmetric version.
+ # 11 : contact with 'static' Coulomb friction and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian,
+ # nearly symmetric version.
+ # 12 : contact with 'static' Coulomb friction and the integral brick
+ # Newton and Alart-Curnier augmented lagrangian,
+ # unsymmetric version with an additional augmentation.
+ # 13 : contact with 'static' Coulomb friction and the integral brick
+ # New unsymmetric method.
+ # 14 : contact with 'static' Coulomb friction and the integral brick : Uzawa
+ # on the Lagrangian augmented by the penalization term.
+ # 15 : penalized contact with 'static' Coulomb friction (r is the penalization
+ # coefficient).
+
+# Signed distance representing the obstacle
+if d == 2:
+ obstacle = 'y'
+else:
+ obstacle = 'z'
+
+# Selection of the contact and Dirichlet boundaries
+GAMMAC = 1
+GAMMAD = 2
+
+border = m.outer_faces()
+normals = m.normal_of_faces(border)
+contact_boundary = border[:,np.nonzero(normals[d-1] < -0.01)[0]]
+m.set_region(GAMMAC, contact_boundary)
+contact_boundary = border[:,np.nonzero(normals[d-1] > 0.01)[0]]
+m.set_region(GAMMAD, contact_boundary)
+
+# Finite element methods
+u_degree = 2
+lambda_degree = 2
+
+mfu = gf.MeshFem(m, d)
+mfu.set_classical_fem(u_degree)
+
+mfd = gf.MeshFem(m, 1)
+mfd.set_classical_fem(u_degree)
+
+mflambda = gf.MeshFem(m, 1) # used only by version 5 to 13
+mflambda.set_classical_fem(lambda_degree)
+
+mfvm = gf.MeshFem(m, 1)
+mfvm.set_classical_discontinuous_fem(u_degree-1)
+
+# Integration method
+mim = gf.MeshIm(m, 4)
+if d == 2:
+ mim_friction = gf.MeshIm(m,
+ gf.Integ('IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(4),4)'))
+else:
+ mim_friction = gf.MeshIm(m,
+ gf.Integ('IM_STRUCTURED_COMPOSITE(IM_TETRAHEDRON(5),4)'))
+
+# Volumic density of force
+nbdofd = mfd.nbdof()
+nbdofu = mfu.nbdof()
+F = np.zeros(nbdofd*d)
+F[d-1:nbdofd*d:d] = -vertical_force;
+
+# Elasticity model
+md = gf.Model('real')
+md.add_fem_variable('u', mfu)
+md.add_initialized_data('cmu', [cmu])
+md.add_initialized_data('clambda', [clambda])
+md.add_isotropic_linearized_elasticity_brick(mim, 'u', 'clambda', 'cmu')
+md.add_initialized_fem_data('volumicload', mfd, F)
+md.add_source_term_brick(mim, 'u', 'volumicload')
+
+if condition_type == 2:
+ Ddata = np.zeros(d)
+ Ddata[d-1] = -5
+ md.add_initialized_data('Ddata', Ddata)
+ md.add_Dirichlet_condition_with_multipliers(mim, 'u', u_degree, GAMMAD, 'Ddata')
+elif condition_type == 0:
+ md.add_initialized_data('cpoints', cpoints)
+ md.add_initialized_data('cunitv', cunitv)
+ md.add_pointwise_constraints_with_multipliers('u', 'cpoints', 'cunitv')
+elif condition_type == 1:
+ # Small penalty term to avoid rigid motion (should be replaced by an
+ # explicit treatment of the rigid motion with a constraint matrix)
+ md.add_initialized_data('penalty_param', [penalty_parameter])
+ md.add_mass_brick(mim, 'u', 'penalty_param')
+
+# The contact condition
+
+cdof = mfu.dof_on_region(GAMMAC)
+nbc = cdof.shape[0] / d
+
+solved = False
+if version == 1 or version == 2: # defining the matrices BN and BT by hand
+ contact_dof = cdof[d-1:nbc*d:d]
+ contact_nodes = mfu.basic_dof_nodes(contact_dof)
+ BN = gf.Spmat('empty', nbc, nbdofu)
+ ngap = np.zeros(nbc)
+ for i in range(nbc):
+ BN[i, contact_dof[i]] = -1.
+ ngap[i] = contact_nodes[d-1, i]
+
+ if version == 2:
+ BT = gf.Spmat('empty', nbc*(d-1), nbdofu)
+ for i in range(nbc):
+ for j in range(d-1):
+ BT[j+i*(d-1), contact_dof[i]-d+j+1] = 1.0
+
+ md.add_variable('lambda_n', nbc)
+ md.add_initialized_data('r', [r])
+ if version == 2:
+ md.add_variable('lambda_t', nbc * (d-1))
+ md.add_initialized_data('friction_coeff', [friction_coeff])
+
+ md.add_initialized_data('ngap', ngap)
+ md.add_initialized_data('alpha', np.ones(nbc))
+ if version == 1:
+ md.add_basic_contact_brick('u', 'lambda_n', 'r', BN, 'ngap', 'alpha', 1)
+ else:
+ md.add_basic_contact_brick('u', 'lambda_n', 'lambda_t', 'r', BN, BT, 'friction_coeff', 'ngap', 'alpha', 1);
+
+elif version == 3 or version == 4: # BN and BT defined by the contact brick
+
+ md.add_variable('lambda_n', nbc)
+ md.add_initialized_data('r', [r])
+ if version == 3:
+ md.add_nodal_contact_with_rigid_obstacle_brick(mim, 'u', 'lambda_n', 'r', GAMMAC, obstacle, 1);
+ else:
+ md.add_variable('lambda_t', nbc*(d-1))
+ md.add_initialized_data('friction_coeff', [friction_coeff])
+ md.add_nodal_contact_with_rigid_obstacle_brick(mim, 'u', 'lambda_n', 'lambda_t', 'r',
+ 'friction_coeff', GAMMAC, obstacle, 1)
+
+elif version >= 5 and version <= 8: # The integral version, Newton
+
+ ldof = mflambda.dof_on_region(GAMMAC)
+ mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+ md.add_fem_variable('lambda_n', mflambda_partial)
+ md.add_initialized_data('r', [r])
+ OBS = mfd.eval(obstacle)
+ md.add_initialized_fem_data('obstacle', mfd, OBS)
+ md.add_integral_contact_with_rigid_obstacle_brick(mim_friction, 'u', 'lambda_n',
+ 'obstacle', 'r', GAMMAC, version-4);
+
+elif version == 9: # The integral version, Uzawa on the augmented Lagrangian
+
+ ldof = mflambda.dof_on_region(GAMMAC)
+ mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+ nbc = mflambda_partial.nbdof()
+ M = gf.asm_mass_matrix(mim, mflambda_partial, mflambda_partial, GAMMAC)
+ lambda_n = np.zeros(nbc)
+ md.add_initialized_fem_data('lambda_n', mflambda_partial, lambda_n)
+ md.add_initialized_data('r', [r])
+ OBS = mfd.eval(obstacle) # np.array([mfd.eval(obstacle)])
+ md.add_initialized_fem_data('obstacle', mfd, OBS)
+ md.add_penalized_contact_with_rigid_obstacle_brick \
+ (mim_friction, 'u', 'obstacle', 'r', GAMMAC, 2, 'lambda_n')
+
+ for ii in range(100):
+ print 'iteration %d' % (ii+1)
+ md.solve('max_res', 1E-9, 'max_iter', niter)
+ U = md.get('variable', 'u')
+ lambda_n_old = lambda_n
+ sol = gf.linsolve_superlu(M, gf.asm_integral_contact_Uzawa_projection(GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_n, mfd, OBS, r))
+ lambda_n = sol[0].transpose()
+ md.set_variable('lambda_n', lambda_n)
+ difff = max(abs(lambda_n-lambda_n_old))[0]/max(abs(lambda_n))[0]
+ print 'diff : %g' % difff
+ if difff < penalty_parameter:
+ break
+
+ solved = True
+
+elif version >= 10 and version <= 13: # The integral version with friction, Newton
+
+ mflambda.set_qdim(d);
+ ldof = mflambda.dof_on_region(GAMMAC)
+ mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+ md.add_fem_variable('lambda', mflambda_partial)
+ md.add_initialized_data('r', [r])
+ md.add_initialized_data('friction_coeff', [friction_coeff])
+ OBS = mfd.eval(obstacle)
+ md.add_initialized_fem_data('obstacle', mfd, OBS)
+ md.add_integral_contact_with_rigid_obstacle_brick \
+ (mim_friction, 'u', 'lambda', 'obstacle', 'r', 'friction_coeff', GAMMAC, version-9)
+
+elif version == 14: # The integral version, Uzawa on the augmented Lagrangian with friction
+
+ mflambda.set_qdim(d)
+ ldof = mflambda.dof_on_region(GAMMAC)
+ mflambda_partial = gf.MeshFem('partial', mflambda, ldof)
+ nbc = mflambda_partial.nbdof()
+ md.add_initialized_data('friction_coeff', [friction_coeff])
+ M = gf.asm_mass_matrix(mim, mflambda_partial, mflambda_partial, GAMMAC)
+ lambda_nt = np.zeros(nbc)
+ md.add_initialized_fem_data('lambda', mflambda_partial, lambda_nt)
+ md.add_initialized_data('r', [r])
+ OBS = mfd.eval(obstacle)
+ md.add_initialized_fem_data('obstacle', mfd, OBS)
+ md.add_penalized_contact_with_rigid_obstacle_brick \
+ (mim_friction, 'u', 'obstacle', 'r', 'friction_coeff', GAMMAC, 2, 'lambda')
+
+ for ii in range(100):
+ print 'iteration %d' % (ii+1)
+ md.solve('max_res', 1E-9, 'max_iter', niter)
+ U = md.get('variable', 'u')
+ lambda_nt_old = lambda_nt
+ sol = gf.linsolve_superlu(M,
+ gf.asm_integral_contact_Uzawa_projection(
+ GAMMAC, mim_friction, mfu, U, mflambda_partial, lambda_nt, mfd, OBS, r, friction_coeff))
+ lambda_nt = sol[0].transpose()
+ md.set_variable('lambda', lambda_nt)
+ difff = max(abs(lambda_nt-lambda_nt_old))[0]/max(abs(lambda_nt))[0]
+ print 'diff : %g' % difff
+ if difff < penalty_parameter:
+ break
+
+ solved = True
+
+elif version == 15:
+
+ md.add_initialized_data('r', [r])
+ md.add_initialized_data('friction_coeff', [friction_coeff])
+ OBS = mfd.eval(obstacle)
+ md.add_initialized_fem_data('obstacle', mfd, OBS);
+ md.add_penalized_contact_with_rigid_obstacle_brick \
+ (mim_friction, 'u', 'obstacle', 'r', 'friction_coeff', GAMMAC)
+
+else:
+ print 'Inexistent version'
+
+# Solve the problem
+if not solved:
+ md.solve('max_res', 1E-9, 'very noisy', 'max_iter', niter, 'lsearch', 'default') #, 'with pseudo potential')
+
+U = md.get('variable', 'u')
+# LAMBDA = md.get('variable', 'lambda_n')
+VM = md.compute_isotropic_linearized_Von_Mises_or_Tresca('u', 'clambda', 'cmu', mfvm)
+
+mfd.export_to_vtk('static_contact.vtk', 'ascii', mfvm, VM, 'Von Mises Stress', mfu, U, 'Displacement')
+
diff --git a/interface/tests/python/demo_step_by_step.py b/interface/tests/python/demo_step_by_step.py
index 7451d81..3be92c9 100644
--- a/interface/tests/python/demo_step_by_step.py
+++ b/interface/tests/python/demo_step_by_step.py
@@ -35,7 +35,7 @@ md.add_fem_variable('u', mf)
md.add_Laplacian_brick(mim, 'u');
# add Dirichlet condition
-g = mf.eval('x[0]*(x[0]-1) - x[1]*(x[1]-1)')
+g = mf.eval('x*(x-1) - y*(y-1)')
md.add_initialized_fem_data('DirichletData', mf, g)
md.add_Dirichlet_condition_with_multipliers(mim, 'u', mf, 42, 'DirichletData')
diff --git a/interface/tests/python/demo_wave.py b/interface/tests/python/demo_wave.py
index 019bfb3..53d2381 100644
--- a/interface/tests/python/demo_wave.py
+++ b/interface/tests/python/demo_wave.py
@@ -24,7 +24,7 @@
This program is used to check that python-getfem is working. This is
also a good example of use of GetFEM++.
- $Id: demo_wave.py 3226 2009-10-14 01:28:01Z lsaavedr $
+ $Id: demo_wave.py 3809 2011-09-26 20:38:56Z logari81 $
"""
from numpy import *
from getfem import *
@@ -62,7 +62,7 @@ m.set_region(DIRICHLET_BOUNDARY,fobj)
m.set_region(ROBIN_BOUNDARY,fout)
## Interpolate the exact solution on mfd (assuming it is a Lagrange fem)
-wave_expr = ('cos(%f*x[1]+.2)+complex(0.,1.)*sin(%f*x[1]+.2)' % (k,k));
+wave_expr = ('cos(%f*y+.2)+complex(0.,1.)*sin(%f*y+.2)' % (k,k));
Uinc=mfd.eval(wave_expr,globals(),locals());
## Model Bricks
diff --git a/ltmain.sh b/ltmain.sh
old mode 100755
new mode 100644
index 7ed280b..c2852d8
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4.2
# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# 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.
@@ -32,50 +32,57 @@
#
# 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
-# --tag=TAG use configuration variables from tag TAG
-# -v, --verbose print informational messages (default)
-# --version print version information
-# -h, --help print short or long help message
+# --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
+# 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.
+# 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.2.6b Debian-2.2.6b-2ubuntu1
-# automake: $automake_version
-# autoconf: $autoconf_version
+# 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-1ubuntu1
+# automake: $automake_version
+# autoconf: $autoconf_version
#
# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
-PROGRAM=ltmain.sh
+PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
+VERSION="2.4.2 Debian-2.4.2-1ubuntu1"
TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3337
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +98,15 @@ 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.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
lt_user_locale=
lt_safe_locale=
for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,24 +119,28 @@ do
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"}
-: ${ECHO="echo"}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
: ${MAKE="make"}
: ${MKDIR="mkdir"}
: ${MV="mv -f"}
: ${RM="rm -f"}
-: ${SED="/bin/sed"}
: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
: ${Xsed="$SED -e 1s/^X//"}
@@ -144,6 +160,27 @@ 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:
@@ -158,33 +195,183 @@ basename="s,^.*/,,"
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -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 "X${1}" | $Xsed -e "$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
}
-# Generated shell functions inserted here.
+# 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
-# 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"
+ # 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:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
func_dirname_and_basename "$progpath"
progname=$func_basename_result
-case $progname in
- -*) progname=./$progname ;;
-esac
# Make sure we have an absolute path for reexecution:
case $progpath in
@@ -196,7 +383,7 @@ case $progpath in
;;
*)
save_IFS="$IFS"
- IFS=:
+ IFS=${PATH_SEPARATOR-:}
for progdir in $PATH; do
IFS="$save_IFS"
test -x "$progdir/$progname" && break
@@ -215,6 +402,15 @@ 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.
@@ -243,7 +439,7 @@ opt_warning=:
# name if it has been set yet.
func_echo ()
{
- $ECHO "$progname${mode+: }$mode: $*"
+ $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
}
# func_verbose arg...
@@ -258,18 +454,25 @@ func_verbose ()
:
}
+# 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${mode+: }$mode: "${1+"$@"} 1>&2
+ $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${mode+: }$mode: warning: "${1+"$@"} 1>&2
+ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
# bash bug again:
:
@@ -326,9 +529,9 @@ func_mkdir_p ()
case $my_directory_path in */*) ;; *) break ;; esac
# ...otherwise throw away the child directory and loop
- my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+ my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
done
- my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+ my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
save_mkdir_p_IFS="$IFS"; IFS=':'
for my_dir in $my_dir_list; do
@@ -378,7 +581,7 @@ func_mktempdir ()
func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
fi
- $ECHO "X$my_tmpdir" | $Xsed
+ $ECHO "$my_tmpdir"
}
@@ -392,7 +595,7 @@ func_quote_for_eval ()
{
case $1 in
*[\\\`\"\$]*)
- func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+ func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
*)
func_quote_for_eval_unquoted_result="$1" ;;
esac
@@ -419,7 +622,7 @@ func_quote_for_expand ()
{
case $1 in
*[\\\`\"]*)
- my_arg=`$ECHO "X$1" | $Xsed \
+ my_arg=`$ECHO "$1" | $SED \
-e "$double_quote_subst" -e "$sed_double_backslash"` ;;
*)
my_arg="$1" ;;
@@ -488,15 +691,39 @@ func_show_eval_locale ()
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 ()
{
- $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+ $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/
@@ -509,22 +736,28 @@ func_version ()
# Echo short help message to standard output and exit.
func_usage ()
{
- $SED -n '/^# Usage:/,/# -h/ {
+ $opt_debug
+
+ $SED -n '/^# Usage:/,/^# *.*--help/ {
s/^# //
s/^# *$//
s/\$progname/'$progname'/
p
}' < "$progpath"
- $ECHO
+ echo
$ECHO "run \`$progname --help | more' for full usage"
exit $?
}
-# func_help
-# Echo long help message to standard output and 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'*
@@ -534,11 +767,18 @@ func_help ()
s*\$LTCFLAGS*'"$LTCFLAGS"'*
s*\$LD*'"$LD"'*
s/\$with_gnu_ld/'"$with_gnu_ld"'/
- s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
- s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
p
- }' < "$progpath"
- exit $?
+ d
+ }
+ /^# .* home page:/b print
+ /^# General help using/b print
+ ' < "$progpath"
+ ret=$?
+ if test -z "$1"; then
+ exit $ret
+ fi
}
# func_missing_arg argname
@@ -546,63 +786,106 @@ func_help ()
# exit_cmd.
func_missing_arg ()
{
- func_error "missing argument for $1"
+ $opt_debug
+
+ func_error "missing argument for $1."
exit_cmd=exit
}
-exit_cmd=:
+# 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=:
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X$1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
- # Yippee, $ECHO works!
- :
-else
- # Restart under the correct shell, and then maybe $ECHO will work.
- exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-if test "X$1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<EOF
-$*
-EOF
- exit $EXIT_SUCCESS
-fi
magic="%%%MAGIC variable%%%"
magic_exe="%%%MAGIC EXE variable%%%"
# Global variables.
-# $mode is unset
nonopt=
-execute_dlfiles=
preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
extracted_archives=
extracted_serial=0
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
# 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.
@@ -636,16 +919,16 @@ func_config ()
# Display the features supported by this script.
func_features ()
{
- $ECHO "host: $host"
+ echo "host: $host"
if test "$build_libtool_libs" = yes; then
- $ECHO "enable shared libraries"
+ echo "enable shared libraries"
else
- $ECHO "disable shared libraries"
+ echo "disable shared libraries"
fi
if test "$build_old_libs" = yes; then
- $ECHO "enable static libraries"
+ echo "enable static libraries"
else
- $ECHO "disable static libraries"
+ echo "disable static libraries"
fi
exit $?
@@ -692,117 +975,209 @@ func_enable_tag ()
esac
}
-# Parse options once, thoroughly. This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# 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
- # 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
- # Parse non-mode specific arguments:
- while test "$#" -gt 0; do
+# 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
- --config) func_config ;;
-
- --debug) preserve_args="$preserve_args $opt"
+ --debug|-x) opt_debug='set -x'
func_echo "enabling shell trace mode"
- opt_debug='set -x'
$opt_debug
;;
-
- -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
- execute_dlfiles="$execute_dlfiles $1"
- shift
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
;;
-
- --dry-run | -n) opt_dry_run=: ;;
- --features) func_features ;;
- --finish) mode="finish" ;;
-
- --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
- case $1 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
-
- mode="$1"
+ --config)
+ opt_config=:
+func_config
+ ;;
+ --dlopen|-dlopen)
+ optarg="$1"
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
shift
;;
-
--preserve-dup-deps)
- opt_duplicate_deps=: ;;
-
- --quiet|--silent) preserve_args="$preserve_args $opt"
- opt_silent=:
+ opt_preserve_dup_deps=:
;;
-
- --verbose| -v) preserve_args="$preserve_args $opt"
+ --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"
;;
-
- --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
- preserve_args="$preserve_args $opt $1"
- func_enable_tag "$1" # tagname is set here
+ --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:
- -dlopen=*|--mode=*|--tag=*)
- func_opt_split "$opt"
- set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ --*=*)
+ func_split_long_opt "$opt"
+ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
shift
;;
- -\?|-h) func_usage ;;
- --help) opt_help=: ;;
- --version) func_version ;;
-
- -*) func_fatal_help "unrecognized option \`$opt'" ;;
-
- *) nonopt="$opt"
- break
+ # 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*)
@@ -810,82 +1185,44 @@ func_enable_tag ()
opt_duplicate_compiler_generated_deps=:
;;
*)
- opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
;;
esac
- # Having warned about all mis-specified options, bail out if
- # anything was wrong.
- $exit_cmd $EXIT_FAILURE
-}
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
-# 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
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
fi
- exit $EXIT_MISMATCH
- fi
-}
-
-
-## ----------- ##
-## Main. ##
-## ----------- ##
-
-$opt_help || {
- # Sanity checks first:
- func_check_version_match
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
- if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- func_fatal_configuration "not configured to build any kind of library"
- fi
+ # 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
- test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$opt_mode' for more information."
+ }
- # Darwin sucks
- eval std_shrext=\"$shrext_cmds\"
+ # Bail if the options were screwed
+ $exit_cmd $EXIT_FAILURE
+}
- # Only execute mode is allowed to have -dlopen flags.
- if test -n "$execute_dlfiles" && test "$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=$mode' for more information."
-}
+## ----------- ##
+## Main. ##
+## ----------- ##
# func_lalib_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1287,9 @@ func_ltwrapper_executable_p ()
# temporary ltwrapper_script.
func_ltwrapper_scriptname ()
{
- func_ltwrapper_scriptname_result=""
- if func_ltwrapper_executable_p "$1"; then
- func_dirname_and_basename "$1" "" "."
- func_stripname '' '.exe' "$func_basename_result"
- func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
- fi
+ 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
@@ -1001,6 +1335,37 @@ func_source ()
}
+# 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.
@@ -1013,13 +1378,15 @@ func_infer_tag ()
if test -n "$available_tags" && test -z "$tagname"; then
CC_quoted=
for arg in $CC; do
- func_quote_for_eval "$arg"
- CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ 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 "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+ " $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.
*)
@@ -1030,11 +1397,13 @@ func_infer_tag ()
CC_quoted=
for arg in $CC; do
# Double-quote args containing other shell metacharacters.
- func_quote_for_eval "$arg"
- CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ 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 "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+ " $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.
@@ -1097,6 +1466,486 @@ EOF
}
}
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name 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.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $opt_debug
+ func_convert_core_file_wine_to_w32_result="$1"
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/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 ()
{
@@ -1137,12 +1986,12 @@ func_mode_compile ()
;;
-pie | -fpie | -fPIE)
- pie_flag="$pie_flag $arg"
+ func_append pie_flag " $arg"
continue
;;
-shared | -static | -prefer-pic | -prefer-non-pic)
- later="$later $arg"
+ func_append later " $arg"
continue
;;
@@ -1163,15 +2012,14 @@ func_mode_compile ()
save_ifs="$IFS"; IFS=','
for arg in $args; do
IFS="$save_ifs"
- func_quote_for_eval "$arg"
- lastarg="$lastarg $func_quote_for_eval_result"
+ func_append_quoted lastarg "$arg"
done
IFS="$save_ifs"
func_stripname ' ' '' "$lastarg"
lastarg=$func_stripname_result
# Add the arguments to base_compile.
- base_compile="$base_compile $lastarg"
+ func_append base_compile " $lastarg"
continue
;;
@@ -1187,8 +2035,7 @@ func_mode_compile ()
esac # case $arg_mode
# Aesthetically quote the previous argument.
- func_quote_for_eval "$lastarg"
- base_compile="$base_compile $func_quote_for_eval_result"
+ func_append_quoted base_compile "$lastarg"
done # for arg
case $arg_mode in
@@ -1213,7 +2060,7 @@ func_mode_compile ()
*.[cCFSifmso] | \
*.ada | *.adb | *.ads | *.asm | \
*.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
- *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
func_xform "$libobj"
libobj=$func_xform_result
;;
@@ -1288,7 +2135,7 @@ func_mode_compile ()
# 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
lockfile="$output_obj.lock"
else
output_obj=
@@ -1319,17 +2166,16 @@ compiler."
$opt_dry_run || $RM $removelist
exit $EXIT_FAILURE
fi
- removelist="$removelist $output_obj"
+ func_append removelist " $output_obj"
$ECHO "$srcfile" > "$lockfile"
fi
$opt_dry_run || $RM $removelist
- removelist="$removelist $lockfile"
+ func_append removelist " $lockfile"
trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
- if test -n "$fix_srcfile_path"; then
- eval srcfile=\"$fix_srcfile_path\"
- fi
+ 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
@@ -1349,7 +2195,7 @@ compiler."
if test -z "$output_obj"; then
# Place PIC objects in $objdir
- command="$command -o $lobj"
+ func_append command " -o $lobj"
fi
func_show_eval_locale "$command" \
@@ -1396,11 +2242,11 @@ compiler."
command="$base_compile $qsrcfile $pic_flag"
fi
if test "$compiler_c_o" = yes; then
- command="$command -o $obj"
+ func_append command " -o $obj"
fi
# Suppress compiler output if we already did a PIC compilation.
- command="$command$suppress_output"
+ func_append command "$suppress_output"
func_show_eval_locale "$command" \
'$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
@@ -1445,13 +2291,13 @@ compiler."
}
$opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+ test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
}
func_mode_help ()
{
# We need to display help for each of the modes.
- case $mode in
+ case $opt_mode in
"")
# Generic help is extracted from the usage comments
# at the start of this file.
@@ -1482,10 +2328,11 @@ 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 building PIC objects only
- -prefer-non-pic try to building non-PIC objects only
+ -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.
@@ -1538,7 +2385,7 @@ either the \`install' or \`cp' program.
The following components of INSTALL-COMMAND are treated specially:
- -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+ -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)."
@@ -1558,6 +2405,8 @@ 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)
@@ -1586,6 +2435,11 @@ The following components of LINK-COMMAND are treated specially:
-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.
@@ -1619,18 +2473,44 @@ Otherwise, only FILE itself is deleted using RM."
;;
*)
- func_fatal_help "invalid operation mode \`$mode'"
+ func_fatal_help "invalid operation mode \`$opt_mode'"
;;
esac
- $ECHO
+ echo
$ECHO "Try \`$progname --help' for more information about other modes."
-
- exit $?
}
- # Now that we've collected a possible --mode arg, show help if necessary
- $opt_help && func_mode_help
+# 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...
@@ -1643,13 +2523,16 @@ func_mode_execute ()
func_fatal_help "you must specify a COMMAND"
# Handle -dlopen flags immediately.
- for file in $execute_dlfiles; do
+ 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"
@@ -1671,7 +2554,7 @@ func_mode_execute ()
dir="$func_dirname_result"
if test -f "$dir/$objdir/$dlname"; then
- dir="$dir/$objdir"
+ func_append dir "/$objdir"
else
if test ! -f "$dir/$dlname"; then
func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2595,7 @@ func_mode_execute ()
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
@@ -1728,8 +2611,7 @@ func_mode_execute ()
;;
esac
# Quote arguments (to preserve shell metacharacters).
- func_quote_for_eval "$file"
- args="$args $func_quote_for_eval_result"
+ func_append_quoted args "$file"
done
if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2636,66 @@ func_mode_execute ()
# Display what would be done.
if test -n "$shlibpath_var"; then
eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
- $ECHO "export $shlibpath_var"
+ echo "export $shlibpath_var"
fi
$ECHO "$cmd$args"
exit $EXIT_SUCCESS
fi
}
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
# func_mode_finish arg...
func_mode_finish ()
{
$opt_debug
- libdirs="$nonopt"
+ libs=
+ libdirs=
admincmds=
- if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
- for dir
- do
- libdirs="$libdirs $dir"
- done
+ 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.
@@ -1786,7 +2705,7 @@ func_mode_finish ()
if test -n "$finish_eval"; then
# Do the single finish_eval.
eval cmds=\"$finish_eval\"
- $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
$cmds"
fi
done
@@ -1795,53 +2714,55 @@ func_mode_finish ()
# Exit here if they wanted silent mode.
$opt_silent && exit $EXIT_SUCCESS
- $ECHO "X----------------------------------------------------------------------" | $Xsed
- $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\"
+ 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 " - 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 "X----------------------------------------------------------------------" | $Xsed
+ 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 "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
# func_mode_install arg...
@@ -1852,7 +2773,7 @@ func_mode_install ()
# install_prog (especially on Windows NT).
if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
# Allow the use of GNU shtool's install command.
- $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+ case $nonopt in *shtool*) :;; *) false;; esac; then
# Aesthetically quote it.
func_quote_for_eval "$nonopt"
install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2787,12 @@ func_mode_install ()
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
func_quote_for_eval "$arg"
- install_prog="$install_prog$func_quote_for_eval_result"
+ 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=
@@ -1876,10 +2802,12 @@ func_mode_install ()
install_type=
isdir=no
stripme=
+ no_mode=:
for arg
do
+ arg2=
if test -n "$dest"; then
- files="$files $dest"
+ func_append files " $dest"
dest=$arg
continue
fi
@@ -1887,10 +2815,9 @@ func_mode_install ()
case $arg in
-d) isdir=yes ;;
-f)
- case " $install_prog " in
- *[\\\ /]cp\ *) ;;
- *) prev=$arg ;;
- esac
+ if $install_cp; then :; else
+ prev=$arg
+ fi
;;
-g | -m | -o)
prev=$arg
@@ -1904,6 +2831,10 @@ func_mode_install ()
*)
# 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
@@ -1914,7 +2845,11 @@ func_mode_install ()
# Aesthetically quote the argument.
func_quote_for_eval "$arg"
- install_prog="$install_prog $func_quote_for_eval_result"
+ 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" && \
@@ -1923,6 +2858,13 @@ func_mode_install ()
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"
@@ -1977,10 +2919,13 @@ func_mode_install ()
case $file in
*.$libext)
# Do the static libraries later.
- staticlibs="$staticlibs $file"
+ 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"
@@ -1994,23 +2939,23 @@ func_mode_install ()
if test "X$destdir" = "X$libdir"; then
case "$current_libdirs " in
*" $libdir "*) ;;
- *) current_libdirs="$current_libdirs $libdir" ;;
+ *) func_append current_libdirs " $libdir" ;;
esac
else
# Note the libdir as a future libdir.
case "$future_libdirs " in
*" $libdir "*) ;;
- *) future_libdirs="$future_libdirs $libdir" ;;
+ *) func_append future_libdirs " $libdir" ;;
esac
fi
func_dirname "$file" "/" ""
dir="$func_dirname_result"
- dir="$dir$objdir"
+ 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 "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+ 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
@@ -2023,9 +2968,9 @@ func_mode_install ()
if test -n "$inst_prefix_dir"; then
# Stick the inst_prefix_dir data into the link command.
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
else
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
fi
func_warning "relinking \`$file'"
@@ -2043,7 +2988,7 @@ func_mode_install ()
test -n "$relink_command" && srcname="$realname"T
# Install the shared library and build the symlinks.
- func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
'exit $?'
tstripme="$stripme"
case $host_os in
@@ -2083,7 +3028,7 @@ func_mode_install ()
func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
# Maybe install the static library, too.
- test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
;;
*.lo)
@@ -2183,7 +3128,7 @@ func_mode_install ()
if test -f "$lib"; then
func_source "$lib"
fi
- libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ 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
@@ -2202,7 +3147,7 @@ func_mode_install ()
file="$func_basename_result"
outputname="$tmpdir/$file"
# Replace the output file specification.
- relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
$opt_silent || {
func_quote_for_expand "$relink_command"
@@ -2221,7 +3166,7 @@ func_mode_install ()
}
else
# Install the binary that we compiled earlier.
- file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
fi
fi
@@ -2257,11 +3202,13 @@ func_mode_install ()
# 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 $oldlib" 'exit $?'
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
fi
# Do each command in the postinstall commands.
@@ -2280,7 +3227,7 @@ func_mode_install ()
fi
}
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
# func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3270,22 @@ func_generate_dlsyms ()
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. */\
"
@@ -2332,10 +3295,11 @@ extern \"C\" {
$opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
# Add our own program objects to the symbol list.
- progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
for progfile in $progfiles; do
- func_verbose "extracting global C symbols from \`$progfile'"
- $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ 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
@@ -2371,7 +3335,7 @@ extern \"C\" {
eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
eval '$MV "$nlist"T "$nlist"'
case $host in
- *cygwin | *mingw* | *cegcc* )
+ *cygwin* | *mingw* | *cegcc* )
eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
;;
@@ -2384,10 +3348,52 @@ extern \"C\" {
func_verbose "extracting global C symbols from \`$dlprefile'"
func_basename "$dlprefile"
name="$func_basename_result"
- $opt_dry_run || {
- eval '$ECHO ": $name " >> "$nlist"'
- eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
- }
+ 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 <import library>.
+ $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 || {
@@ -2415,36 +3421,19 @@ extern \"C\" {
if test -f "$nlist"S; then
eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
else
- $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
fi
- $ECHO >> "$output_objdir/$my_dlsyms" "\
+ echo >> "$output_objdir/$my_dlsyms" "\
/* The mapping between symbol names and symbols. */
typedef struct {
const char *name;
void *address;
} lt_dlsymlist;
-"
- case $host in
- *cygwin* | *mingw* | *cegcc* )
- $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
- runtime relocations are performed -- see ld's documentation
- on pseudo-relocs. */"
- lt_dlsym_const= ;;
- *osf5*)
- echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
- lt_dlsym_const= ;;
- *)
- lt_dlsym_const=const ;;
- esac
-
- $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[] =
{\
{ \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3446,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
;;
esac
- $ECHO >> "$output_objdir/$my_dlsyms" "\
+ echo >> "$output_objdir/$my_dlsyms" "\
{0, (void *) 0}
};
@@ -2484,7 +3473,7 @@ static const void *lt_preloaded_setup() {
# 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*)
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
*-*-hpux*)
pic_flag_for_symtable=" $pic_flag" ;;
@@ -2500,7 +3489,7 @@ static const void *lt_preloaded_setup() {
for arg in $LTCFLAGS; do
case $arg in
-pie | -fpie | -fPIE) ;;
- *) symtab_cflags="$symtab_cflags $arg" ;;
+ *) func_append symtab_cflags " $arg" ;;
esac
done
@@ -2515,16 +3504,16 @@ static const void *lt_preloaded_setup() {
case $host in
*cygwin* | *mingw* | *cegcc* )
if test -f "$output_objdir/$my_outputname.def"; then
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 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 "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
fi
;;
*)
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
;;
esac
;;
@@ -2538,8 +3527,8 @@ static const void *lt_preloaded_setup() {
# really was required.
# Nullify the symbol file.
- compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
- finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
fi
}
@@ -2549,6 +3538,7 @@ static const void *lt_preloaded_setup() {
# 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
@@ -2559,9 +3549,11 @@ func_win32_libid ()
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 pe-i386(.*architecture: i386)?' >/dev/null ; then
- win32_nmres=`eval $NM -f posix -A $1 |
+ $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 /{
@@ -2590,6 +3582,131 @@ func_win32_libid ()
$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
@@ -2598,7 +3715,18 @@ func_extract_an_archive ()
$opt_debug
f_ex_an_ar_dir="$1"; shift
f_ex_an_ar_oldlib="$1"
- func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+ 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
@@ -2669,7 +3797,7 @@ func_extract_archives ()
darwin_file=
darwin_files=
for darwin_file in $darwin_filelist; do
- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
$LIPO -create -output "$darwin_file" $darwin_files
done # $darwin_filelist
$RM -rf unfat-$$
@@ -2684,25 +3812,30 @@ func_extract_archives ()
func_extract_an_archive "$my_xdir" "$my_xabs"
;;
esac
- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ 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_part1 [arg=no]
+# 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.
#
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# 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_part1_arg1=no
- if test -n "$1" ; then
- func_emit_wrapper_part1_arg1=$1
- fi
+ func_emit_wrapper_arg1=${1-no}
$ECHO "\
#! $SHELL
@@ -2718,7 +3851,6 @@ func_emit_wrapper_part1 ()
# 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='$sed_quote_subst'
# Be Bourne compatible
@@ -2749,31 +3881,135 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
else
# When we are sourced in execute mode, \$file and \$ECHO are already set.
if test \"\$libtool_execute_magic\" != \"$magic\"; then
- ECHO=\"$qecho\"
- file=\"\$0\"
- # Make sure echo works.
- if test \"X\$1\" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
- elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
- # Yippee, \$ECHO works!
- :
- else
- # Restart under the correct shell, and then maybe \$ECHO will work.
- exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
- fi
- fi\
+ 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 ()
+{
"
- $ECHO "\
+ 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 \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ 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'\`
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
while test -n \"\$file\"; do
- destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
# If there was a directory component, then change thisdir.
if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4019,13 @@ else
esac
fi
- file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
- func_emit_wrapper_part2_arg1=no
- if test -n "$1" ; then
- func_emit_wrapper_part2_arg1=$1
- fi
-
- $ECHO "\
# Usually 'no', except on cygwin/mingw when embedded into
# the cwrapper.
- WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+ 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
@@ -2814,7 +4033,7 @@ func_emit_wrapper_part2 ()
fi
# remove .libs from thisdir
case \"\$thisdir\" in
- *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
$objdir ) thisdir=. ;;
esac
fi
@@ -2869,6 +4088,18 @@ func_emit_wrapper_part2 ()
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 "\
@@ -2877,253 +4108,28 @@ func_emit_wrapper_part2 ()
# 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
export $shlibpath_var
"
fi
- # fixup the dll searchpath if we need to.
- if test -n "$dllsearchpath"; then
- $ECHO "\
- # Add the dll search path components to the executable PATH
- PATH=$dllsearchpath:\$PATH
-"
- fi
-
$ECHO "\
if test \"\$libtool_execute_magic\" != \"$magic\"; then
# Run the actual program with our arguments.
-"
- case $host in
- # Backslashes separate directories on plain windows
- *-*-mingw | *-*-os2* | *-cegcc*)
- $ECHO "\
- exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
- ;;
-
- *)
- $ECHO "\
- exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
- ;;
- esac
- $ECHO "\
- \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
- exit 1
+ 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
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
exit 1
fi
fi\
"
}
-# end: func_emit_wrapper_part2
-
-
-# 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=no
- if test -n "$1" ; then
- func_emit_wrapper_arg1=$1
- fi
-
- # split this up so that func_emit_cwrapperexe_src
- # can call each part independently.
- func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
- func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
-
-
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-# $build $host
-# mingw (msys) mingw [e.g. native]
-# cygwin mingw
-# *nix + wine mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin. Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
- func_to_host_path_result="$1"
- if test -n "$1" ; then
- case $host in
- *mingw* )
- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
- case $build in
- *mingw* ) # actually, msys
- # awkward: cmd appends spaces to result
- lt_sed_strip_trailing_spaces="s/[ ]*\$//"
- func_to_host_path_tmp1=`( cmd //c echo "$1" |\
- $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
- func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
- $SED -e "$lt_sed_naive_backslashify"`
- ;;
- *cygwin* )
- func_to_host_path_tmp1=`cygpath -w "$1"`
- func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
- $SED -e "$lt_sed_naive_backslashify"`
- ;;
- * )
- # Unfortunately, winepath does not exit with a non-zero
- # error code, so we are forced to check the contents of
- # stdout. On the other hand, if the command is not
- # found, the shell will set an exit code of 127 and print
- # *an error message* to stdout. So we must check for both
- # error code of zero AND non-empty stdout, which explains
- # the odd construction:
- func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
- if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
- func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
- $SED -e "$lt_sed_naive_backslashify"`
- else
- # Allow warning below.
- func_to_host_path_result=""
- fi
- ;;
- esac
- if test -z "$func_to_host_path_result" ; then
- func_error "Could not determine host path corresponding to"
- func_error " '$1'"
- func_error "Continuing, but uninstalled executables may not work."
- # Fallback:
- func_to_host_path_result="$1"
- fi
- ;;
- esac
- fi
-}
-# end: func_to_host_path
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-# $build $host
-# mingw (msys) mingw [e.g. native]
-# cygwin mingw
-# *nix + wine mingw
-#
-# 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.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
- func_to_host_pathlist_result="$1"
- if test -n "$1" ; then
- case $host in
- *mingw* )
- lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
- # 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_to_host_pathlist_tmp2="$1"
- # Once set for this call, this variable should not be
- # reassigned. It is used in tha fallback case.
- func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
- $SED -e 's|^:*||' -e 's|:*$||'`
- case $build in
- *mingw* ) # Actually, msys.
- # Awkward: cmd appends spaces to result.
- lt_sed_strip_trailing_spaces="s/[ ]*\$//"
- func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
- $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
- $SED -e "$lt_sed_naive_backslashify"`
- ;;
- *cygwin* )
- func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
- $SED -e "$lt_sed_naive_backslashify"`
- ;;
- * )
- # unfortunately, winepath doesn't convert pathlists
- func_to_host_pathlist_result=""
- func_to_host_pathlist_oldIFS=$IFS
- IFS=:
- for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
- IFS=$func_to_host_pathlist_oldIFS
- if test -n "$func_to_host_pathlist_f" ; then
- func_to_host_path "$func_to_host_pathlist_f"
- if test -n "$func_to_host_path_result" ; then
- if test -z "$func_to_host_pathlist_result" ; then
- func_to_host_pathlist_result="$func_to_host_path_result"
- else
- func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
- fi
- fi
- fi
- IFS=:
- done
- IFS=$func_to_host_pathlist_oldIFS
- ;;
- esac
- if test -z "$func_to_host_pathlist_result" ; then
- func_error "Could not determine the host path(s) corresponding to"
- func_error " '$1'"
- func_error "Continuing, but uninstalled executables may not work."
- # Fallback. This may break if $1 contains DOS-style drive
- # specifications. The fix is not to complicate the expression
- # below, but for the user to provide a working wine installation
- # with winepath so that path translation in the cross-to-mingw
- # case works properly.
- lt_replace_pathsep_nix_to_dos="s|:|;|g"
- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
- $SED -e "$lt_replace_pathsep_nix_to_dos"`
- fi
- # Now, add the leading and trailing path separators back
- case "$1" in
- :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
- ;;
- esac
- case "$1" in
- *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
- ;;
- esac
- ;;
- esac
- fi
-}
-# end: func_to_host_pathlist
# func_emit_cwrapperexe_src
# emit the source code for a wrapper executable on stdout
@@ -3141,31 +4147,23 @@ func_emit_cwrapperexe_src ()
This wrapper executable should never be moved out of the build directory.
If it is, it will not operate correctly.
-
- Currently, it simply execs the wrapper *script* "$SHELL $output",
- but could eventually absorb all of the scripts functionality and
- exec $objdir/$outputname directly.
*/
EOF
cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
#include <stdio.h>
#include <stdlib.h>
#ifdef _MSC_VER
# include <direct.h>
# include <process.h>
# include <io.h>
-# define setmode _setmode
#else
# include <unistd.h>
# include <stdint.h>
# ifdef __CYGWIN__
# include <io.h>
-# define HAVE_SETENV
-# ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-# endif
# endif
#endif
#include <malloc.h>
@@ -3177,6 +4175,44 @@ int setenv (const char *, const char *, int);
#include <fcntl.h>
#include <sys/stat.h>
+/* 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)
@@ -3192,14 +4228,7 @@ int setenv (const char *, const char *, int);
# define S_IXGRP 0
#endif
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-# define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
#ifndef DIR_SEPARATOR
# define DIR_SEPARATOR '/'
# define PATH_SEPARATOR ':'
@@ -3230,10 +4259,6 @@ int setenv (const char *, const char *, int);
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
#endif /* PATH_SEPARATOR_2 */
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
#ifndef FOPEN_WB
# define FOPEN_WB "w"
#endif
@@ -3246,22 +4271,13 @@ int setenv (const char *, const char *, int);
if (stale) { free ((void *) stale); stale = 0; } \
} while (0)
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- (void) vfprintf (stderr, fmt, args);
- va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
#else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
#endif
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
void *xmalloc (size_t num);
char *xstrdup (const char *string);
@@ -3271,41 +4287,27 @@ 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_fatal (const char *message, ...);
+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_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
void lt_update_exe_path (const char *name, const char *value);
void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
- func_emit_wrapper_part1 yes |
- $SED -e 's/\([\\"]\)/\\\1/g' \
- -e 's/^/ "/' -e 's/$/\\n"/'
- echo ";"
- cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
EOF
- func_emit_wrapper_part2 yes |
- $SED -e 's/\([\\"]\)/\\\1/g' \
- -e 's/^/ "/' -e 's/$/\\n"/'
- echo ";"
cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
const char * LIB_PATH_VARNAME = "$shlibpath_var";
EOF
if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
- func_to_host_pathlist "$temp_rpath"
+ func_to_host_path "$temp_rpath"
cat <<EOF
-const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
EOF
else
cat <<"EOF"
@@ -3314,10 +4316,10 @@ EOF
fi
if test -n "$dllsearchpath"; then
- func_to_host_pathlist "$dllsearchpath:"
+ func_to_host_path "$dllsearchpath:"
cat <<EOF
const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
EOF
else
cat <<"EOF"
@@ -3340,24 +4342,10 @@ EOF
cat <<"EOF"
#define LTWRAPPER_OPTION_PREFIX "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
-static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
- /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
- /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
- /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
int
main (int argc, char *argv[])
@@ -3374,10 +4362,13 @@ main (int argc, char *argv[])
int i;
program_name = (char *) xstrdup (base_name (argv[0]));
- LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
- LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+ newargz = XMALLOC (char *, argc + 1);
- /* very simple arg parsing; don't want to rely on getopt */
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
for (i = 1; i < argc; i++)
{
if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4382,57 @@ EOF
esac
cat <<"EOF"
- printf ("%s", script_text_part1);
- printf ("%s", script_text_part2);
+ lt_dump_script (stdout);
return 0;
}
+ if (strcmp (argv[i], debug_opt) == 0)
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
}
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
- newargz = XMALLOC (char *, argc + 1);
tmp_pathspec = find_executable (argv[0]);
if (tmp_pathspec == NULL)
- lt_fatal ("Couldn't find %s", argv[0]);
- LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
- tmp_pathspec));
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
actual_cwrapper_path = chase_symlinks (tmp_pathspec);
- LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
- actual_cwrapper_path));
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
XFREE (tmp_pathspec);
- actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
strendzap (actual_cwrapper_path, actual_cwrapper_name);
/* wrapper name transforms */
@@ -3427,8 +4450,9 @@ EOF
target_name = tmp_pathspec;
tmp_pathspec = 0;
- LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
- target_name));
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
EOF
cat <<EOF
@@ -3478,80 +4502,19 @@ EOF
lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
lt_setenv ("DUALCASE", "1"); /* for MSK sh */
- lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
- newargc=0;
- for (i = 1; i < argc; i++)
- {
- if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
- {
- if (argv[i][env_set_opt_len] == '=')
- {
- const char *p = argv[i] + env_set_opt_len + 1;
- lt_opt_process_env_set (p);
- }
- else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
- {
- lt_opt_process_env_set (argv[++i]); /* don't copy */
- }
- else
- lt_fatal ("%s missing required argument", env_set_opt);
- continue;
- }
- if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
- {
- if (argv[i][env_prepend_opt_len] == '=')
- {
- const char *p = argv[i] + env_prepend_opt_len + 1;
- lt_opt_process_env_prepend (p);
- }
- else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
- {
- lt_opt_process_env_prepend (argv[++i]); /* don't copy */
- }
- else
- lt_fatal ("%s missing required argument", env_prepend_opt);
- continue;
- }
- if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
- {
- if (argv[i][env_append_opt_len] == '=')
- {
- const char *p = argv[i] + env_append_opt_len + 1;
- lt_opt_process_env_append (p);
- }
- else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
- {
- lt_opt_process_env_append (argv[++i]); /* don't copy */
- }
- else
- lt_fatal ("%s missing required argument", env_append_opt);
- continue;
- }
- if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
- {
- /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
- namespace, but it is not one of the ones we know about and
- have already dealt with, above (inluding dump-script), then
- report an error. Otherwise, targets might begin to believe
- they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
- namespace. The first time any user complains about this, we'll
- need to make LTWRAPPER_OPTION_PREFIX a configure-time option
- or a configure.ac-settable value.
- */
- lt_fatal ("Unrecognized option in %s namespace: '%s'",
- ltwrapper_option_prefix, argv[i]);
- }
- /* otherwise ... */
- newargz[++newargc] = xstrdup (argv[i]);
- }
- newargz[++newargc] = NULL;
-
- LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
for (i = 0; i < newargc; i++)
{
- LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
}
EOF
@@ -3560,11 +4523,14 @@ EOF
mingw*)
cat <<"EOF"
/* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
if (rval == -1)
{
/* failed to start process */
- LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
return 127;
}
return rval;
@@ -3586,7 +4552,7 @@ xmalloc (size_t num)
{
void *p = (void *) malloc (num);
if (!p)
- lt_fatal ("Memory exhausted");
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
return p;
}
@@ -3620,8 +4586,8 @@ check_executable (const char *path)
{
struct stat st;
- LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
- path ? (*path ? path : "EMPTY!") : "NULL!"));
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
if ((!path) || (!*path))
return 0;
@@ -3638,8 +4604,8 @@ make_executable (const char *path)
int rval = 0;
struct stat st;
- LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
- path ? (*path ? path : "EMPTY!") : "NULL!"));
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
if ((!path) || (!*path))
return 0;
@@ -3665,8 +4631,8 @@ find_executable (const char *wrapper)
int tmp_len;
char *concat_name;
- LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
- wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
if ((wrapper == NULL) || (*wrapper == '\0'))
return NULL;
@@ -3719,7 +4685,8 @@ find_executable (const char *wrapper)
{
/* empty path: current directory */
if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
tmp_len = strlen (tmp);
concat_name =
XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4711,8 @@ find_executable (const char *wrapper)
}
/* Relative path | not found in path: prepend cwd */
if (getcwd (tmp, LT_PATHMAX) == NULL)
- lt_fatal ("getcwd failed");
+ 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);
@@ -3770,8 +4738,9 @@ chase_symlinks (const char *pathspec)
int has_symlinks = 0;
while (strlen (tmp_pathspec) && !has_symlinks)
{
- LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
- tmp_pathspec));
+ 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)
@@ -3793,8 +4762,9 @@ chase_symlinks (const char *pathspec)
}
else
{
- char *errstr = strerror (errno);
- lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
}
}
XFREE (tmp_pathspec);
@@ -3807,7 +4777,8 @@ chase_symlinks (const char *pathspec)
tmp_pathspec = realpath (pathspec, buf);
if (tmp_pathspec == 0)
{
- lt_fatal ("Could not follow symlinks for %s", pathspec);
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
}
return xstrdup (tmp_pathspec);
#endif
@@ -3833,11 +4804,25 @@ strendzap (char *str, const char *pat)
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 *mode,
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
const char *message, va_list ap)
{
- fprintf (stderr, "%s: %s: ", program_name, mode);
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
vfprintf (stderr, message, ap);
fprintf (stderr, ".\n");
@@ -3846,20 +4831,32 @@ lt_error_core (int exit_status, const char *mode,
}
void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
{
va_list ap;
va_start (ap, message);
- lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ 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)
{
- LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
- (name ? name : "<NULL>"),
- (value ? value : "<NULL>")));
+ 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 */
@@ -3904,95 +4901,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
return new_value;
}
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
- const char *p;
- int len;
- if (!arg || !*arg)
- return 1;
-
- p = strchr (arg, (int)'=');
-
- if (!p)
- return 1;
-
- *value = xstrdup (++p);
-
- len = strlen (arg) - strlen (*value);
- *name = XMALLOC (char, len);
- strncpy (*name, arg, len-1);
- (*name)[len - 1] = '\0';
-
- return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
- char *name = NULL;
- char *value = NULL;
-
- if (lt_split_name_value (arg, &name, &value) != 0)
- {
- XFREE (name);
- XFREE (value);
- lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
- }
-
- lt_setenv (name, value);
- XFREE (name);
- XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
- char *name = NULL;
- char *value = NULL;
- char *new_value = NULL;
-
- if (lt_split_name_value (arg, &name, &value) != 0)
- {
- XFREE (name);
- XFREE (value);
- lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
- }
-
- new_value = lt_extend_str (getenv (name), value, 0);
- lt_setenv (name, new_value);
- XFREE (new_value);
- XFREE (name);
- XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
- char *name = NULL;
- char *value = NULL;
- char *new_value = NULL;
-
- if (lt_split_name_value (arg, &name, &value) != 0)
- {
- XFREE (name);
- XFREE (value);
- lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
- }
-
- new_value = lt_extend_str (getenv (name), value, 1);
- lt_setenv (name, new_value);
- XFREE (new_value);
- XFREE (name);
- XFREE (value);
-}
-
void
lt_update_exe_path (const char *name, const char *value)
{
- LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
- (name ? name : "<NULL>"),
- (value ? value : "<NULL>")));
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
if (name && *name && value && *value)
{
@@ -4011,9 +4925,9 @@ lt_update_exe_path (const char *name, const char *value)
void
lt_update_lib_path (const char *name, const char *value)
{
- LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
- (name ? name : "<NULL>"),
- (value ? value : "<NULL>")));
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
if (name && *name && value && *value)
{
@@ -4023,11 +4937,158 @@ lt_update_lib_path (const char *name, const char *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 ()
{
@@ -4072,6 +5133,7 @@ func_mode_link ()
new_inherited_linker_flags=
avoid_version=no
+ bindir=
dlfiles=
dlprefiles=
dlself=no
@@ -4164,6 +5226,11 @@ func_mode_link ()
esac
case $prev in
+ bindir)
+ bindir="$arg"
+ prev=
+ continue
+ ;;
dlfiles|dlprefiles)
if test "$preload" = no; then
# Add the symbol object into the linking commands.
@@ -4195,9 +5262,9 @@ func_mode_link ()
;;
*)
if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
+ func_append dlfiles " $arg"
else
- dlprefiles="$dlprefiles $arg"
+ func_append dlprefiles " $arg"
fi
prev=
continue
@@ -4221,7 +5288,7 @@ func_mode_link ()
*-*-darwin*)
case "$deplibs " in
*" $qarg.ltframework "*) ;;
- *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
;;
esac
;;
@@ -4240,7 +5307,7 @@ func_mode_link ()
moreargs=
for fil in `cat "$save_arg"`
do
-# moreargs="$moreargs $fil"
+# func_append moreargs " $fil"
arg=$fil
# A libtool-controlled object.
@@ -4269,7 +5336,7 @@ func_mode_link ()
if test "$prev" = dlfiles; then
if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
+ func_append dlfiles " $pic_object"
prev=
continue
else
@@ -4281,7 +5348,7 @@ func_mode_link ()
# CHECK ME: I think I busted this. -Ossama
if test "$prev" = dlprefiles; then
# Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
+ func_append dlprefiles " $pic_object"
prev=
fi
@@ -4351,12 +5418,12 @@ func_mode_link ()
if test "$prev" = rpath; then
case "$rpath " in
*" $arg "*) ;;
- *) rpath="$rpath $arg" ;;
+ *) func_append rpath " $arg" ;;
esac
else
case "$xrpath " in
*" $arg "*) ;;
- *) xrpath="$xrpath $arg" ;;
+ *) func_append xrpath " $arg" ;;
esac
fi
prev=
@@ -4368,28 +5435,28 @@ func_mode_link ()
continue
;;
weak)
- weak_libs="$weak_libs $arg"
+ func_append weak_libs " $arg"
prev=
continue
;;
xcclinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $qarg"
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
prev=
func_append compile_command " $qarg"
func_append finalize_command " $qarg"
continue
;;
xcompiler)
- compiler_flags="$compiler_flags $qarg"
+ func_append compiler_flags " $qarg"
prev=
func_append compile_command " $qarg"
func_append finalize_command " $qarg"
continue
;;
xlinker)
- linker_flags="$linker_flags $qarg"
- compiler_flags="$compiler_flags $wl$qarg"
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
prev=
func_append compile_command " $wl$qarg"
func_append finalize_command " $wl$qarg"
@@ -4425,6 +5492,11 @@ func_mode_link ()
continue
;;
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
-dlopen)
prev=dlfiles
continue
@@ -4475,15 +5547,16 @@ func_mode_link ()
;;
-L*)
- func_stripname '-L' '' "$arg"
- dir=$func_stripname_result
- if test -z "$dir"; then
+ 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]:[\\/]*) ;;
@@ -4495,24 +5568,30 @@ func_mode_link ()
;;
esac
case "$deplibs " in
- *" -L$dir "*) ;;
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
*)
- deplibs="$deplibs -L$dir"
- lib_search_path="$lib_search_path $dir"
+ # 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 "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
case :$dllsearchpath: in
*":$dir:"*) ;;
::) dllsearchpath=$dir;;
- *) dllsearchpath="$dllsearchpath:$dir";;
+ *) func_append dllsearchpath ":$dir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
::) dllsearchpath=$testbindir;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
+ *) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
@@ -4522,7 +5601,7 @@ func_mode_link ()
-l*)
if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
case $host in
- *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
# These systems don't actually have a C or math library (as such)
continue
;;
@@ -4536,7 +5615,7 @@ func_mode_link ()
;;
*-*-rhapsody* | *-*-darwin1.[012])
# Rhapsody C and math libraries are in the System framework
- deplibs="$deplibs System.ltframework"
+ func_append deplibs " System.ltframework"
continue
;;
*-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5635,7 @@ func_mode_link ()
;;
esac
fi
- deplibs="$deplibs $arg"
+ func_append deplibs " $arg"
continue
;;
@@ -4568,21 +5647,22 @@ func_mode_link ()
# 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)
- compiler_flags="$compiler_flags $arg"
+ -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)
- compiler_flags="$compiler_flags $arg"
+ -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 "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
esac
continue
;;
@@ -4649,13 +5729,17 @@ func_mode_link ()
# 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 "*) ;;
- *) xrpath="$xrpath $dir" ;;
+ *) func_append xrpath " $dir" ;;
esac
continue
;;
@@ -4708,8 +5792,8 @@ func_mode_link ()
for flag in $args; do
IFS="$save_ifs"
func_quote_for_eval "$flag"
- arg="$arg $wl$func_quote_for_eval_result"
- compiler_flags="$compiler_flags $func_quote_for_eval_result"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
done
IFS="$save_ifs"
func_stripname ' ' '' "$arg"
@@ -4724,9 +5808,9 @@ func_mode_link ()
for flag in $args; do
IFS="$save_ifs"
func_quote_for_eval "$flag"
- arg="$arg $wl$func_quote_for_eval_result"
- compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
- linker_flags="$linker_flags $func_quote_for_eval_result"
+ 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"
@@ -4754,23 +5838,27 @@ func_mode_link ()
arg="$func_quote_for_eval_result"
;;
- # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
- # -r[0-9][0-9]* specifies the processor on the SGI compiler
- # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
- # +DA*, +DD* enable 64-bit mode on the HP compiler
- # -q* pass through compiler args for the IBM compiler
- # -m*, -t[45]*, -txscale* pass through architecture-specific
- # compiler args for GCC
- # -F/path gives path to uninstalled frameworks, gcc on darwin
- # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
- # @file GCC response files
+ # 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*|@*)
+ -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"
- compiler_flags="$compiler_flags $arg"
+ func_append compiler_flags " $arg"
continue
;;
@@ -4782,7 +5870,7 @@ func_mode_link ()
*.$objext)
# A standard object.
- objs="$objs $arg"
+ func_append objs " $arg"
;;
*.lo)
@@ -4813,7 +5901,7 @@ func_mode_link ()
if test "$prev" = dlfiles; then
if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
- dlfiles="$dlfiles $pic_object"
+ func_append dlfiles " $pic_object"
prev=
continue
else
@@ -4825,7 +5913,7 @@ func_mode_link ()
# CHECK ME: I think I busted this. -Ossama
if test "$prev" = dlprefiles; then
# Preload the old-style object.
- dlprefiles="$dlprefiles $pic_object"
+ func_append dlprefiles " $pic_object"
prev=
fi
@@ -4870,24 +5958,25 @@ func_mode_link ()
*.$libext)
# An archive.
- deplibs="$deplibs $arg"
- old_deplibs="$old_deplibs $arg"
+ 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.
- dlfiles="$dlfiles $arg"
+ func_append dlfiles " $func_resolve_sysroot_result"
prev=
elif test "$prev" = dlprefiles; then
# The library was specified with -dlpreopen.
- dlprefiles="$dlprefiles $arg"
+ func_append dlprefiles " $func_resolve_sysroot_result"
prev=
else
- deplibs="$deplibs $arg"
+ func_append deplibs " $func_resolve_sysroot_result"
fi
continue
;;
@@ -4925,7 +6014,7 @@ func_mode_link ()
if test -n "$shlibpath_var"; then
# get the directories listed in $shlibpath_var
- eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
else
shlib_search_path=
fi
@@ -4934,6 +6023,8 @@ func_mode_link ()
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"
@@ -4954,12 +6045,12 @@ func_mode_link ()
# 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_duplicate_deps ; then
+ if $opt_preserve_dup_deps ; then
case "$libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
- libs="$libs $deplib"
+ func_append libs " $deplib"
done
if test "$linkmode" = lib; then
@@ -4972,9 +6063,9 @@ func_mode_link ()
if $opt_duplicate_compiler_generated_deps; then
for pre_post_dep in $predeps $postdeps; do
case "$pre_post_deps " in
- *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
esac
- pre_post_deps="$pre_post_deps $pre_post_dep"
+ func_append pre_post_deps " $pre_post_dep"
done
fi
pre_post_deps=
@@ -5044,17 +6135,19 @@ func_mode_link ()
for lib in $dlprefiles; do
# Ignore non-libtool-libs
dependency_libs=
+ func_resolve_sysroot "$lib"
case $lib in
- *.la) func_source "$lib" ;;
+ *.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
- deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
case " $weak_libs " in
*" $deplib_base "*) ;;
- *) deplibs="$deplibs $deplib" ;;
+ *) func_append deplibs " $deplib" ;;
esac
done
done
@@ -5070,16 +6163,17 @@ func_mode_link ()
lib=
found=no
case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ -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
- compiler_flags="$compiler_flags $deplib"
+ func_append compiler_flags " $deplib"
if test "$linkmode" = lib ; then
case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
esac
fi
fi
@@ -5164,7 +6258,7 @@ func_mode_link ()
if test "$linkmode" = lib ; then
case "$new_inherited_linker_flags " in
*" $deplib "*) ;;
- * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
esac
fi
fi
@@ -5177,7 +6271,8 @@ func_mode_link ()
test "$pass" = conv && continue
newdependency_libs="$deplib $newdependency_libs"
func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
;;
prog)
if test "$pass" = conv; then
@@ -5191,7 +6286,8 @@ func_mode_link ()
finalize_deplibs="$deplib $finalize_deplibs"
fi
func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
;;
*)
func_warning "\`-L' is ignored for archives/objects"
@@ -5202,17 +6298,21 @@ func_mode_link ()
-R*)
if test "$pass" = link; then
func_stripname '-R' '' "$deplib"
- dir=$func_stripname_result
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
# Make sure the xrpath contains only unique directories.
case "$xrpath " in
*" $dir "*) ;;
- *) xrpath="$xrpath $dir" ;;
+ *) func_append xrpath " $dir" ;;
esac
fi
deplibs="$deplib $deplibs"
continue
;;
- *.la) lib="$deplib" ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
*.$libext)
if test "$pass" = conv; then
deplibs="$deplib $deplibs"
@@ -5230,7 +6330,7 @@ func_mode_link ()
match_pattern*)
set dummy $deplibs_check_method; shift
match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
- if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
| $EGREP "$match_pattern_regex" > /dev/null; then
valid_a_lib=yes
fi
@@ -5240,15 +6340,15 @@ func_mode_link ()
;;
esac
if test "$valid_a_lib" != yes; then
- $ECHO
+ 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."
+ 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
$ECHO "*** Warning: Linking the shared library $output against the"
$ECHO "*** static library $deplib is not portable!"
deplibs="$deplib $deplibs"
@@ -5275,11 +6375,11 @@ func_mode_link ()
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.
- newdlprefiles="$newdlprefiles $deplib"
+ func_append newdlprefiles " $deplib"
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
else
- newdlfiles="$newdlfiles $deplib"
+ func_append newdlfiles " $deplib"
fi
fi
continue
@@ -5321,20 +6421,20 @@ func_mode_link ()
# Convert "-framework foo" to "foo.ltframework"
if test -n "$inherited_linker_flags"; then
- tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ 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 "*) ;;
- *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
esac
done
fi
- dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 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" && dlfiles="$dlfiles $dlopen"
- test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
fi
if test "$pass" = conv; then
@@ -5345,17 +6445,17 @@ func_mode_link ()
func_fatal_error "cannot find name of link library for \`$lib'"
fi
# It is a libtool convenience library, so add in its objects.
- convenience="$convenience $ladir/$objdir/$old_library"
- old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ 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_duplicate_deps ; then
+ if $opt_preserve_dup_deps ; then
case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
- tmp_libs="$tmp_libs $deplib"
+ func_append tmp_libs " $deplib"
done
elif test "$linkmode" != prog && test "$linkmode" != lib; then
func_fatal_error "\`$lib' is not a convenience library"
@@ -5366,9 +6466,15 @@ func_mode_link ()
# Get the name of the library we link against.
linklib=
- for l in $old_library $library_names; do
- linklib="$l"
- done
+ 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
@@ -5385,9 +6491,9 @@ func_mode_link ()
# 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.
- dlprefiles="$dlprefiles $lib $dependency_libs"
+ func_append dlprefiles " $lib $dependency_libs"
else
- newdlfiles="$newdlfiles $lib"
+ func_append newdlfiles " $lib"
fi
continue
fi # $pass = dlopen
@@ -5409,14 +6515,14 @@ func_mode_link ()
# Find the relevant object directory and library name.
if test "X$installed" = Xyes; then
- if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; 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="$libdir"
- absdir="$libdir"
+ dir="$lt_sysroot$libdir"
+ absdir="$lt_sysroot$libdir"
fi
test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
@@ -5424,12 +6530,12 @@ func_mode_link ()
dir="$ladir"
absdir="$abs_ladir"
# Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
+ func_append notinst_path " $abs_ladir"
else
dir="$ladir/$objdir"
absdir="$abs_ladir/$objdir"
# Remove this search path later
- notinst_path="$notinst_path $abs_ladir"
+ func_append notinst_path " $abs_ladir"
fi
fi # $installed = yes
func_stripname 'lib' '.la' "$laname"
@@ -5440,20 +6546,46 @@ func_mode_link ()
if test -z "$libdir" && test "$linkmode" = prog; then
func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
fi
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- newdlprefiles="$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" && \
- dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
- # Otherwise, use the dlname, so that lt_dlopen finds it.
- elif test -n "$dlname"; then
- newdlprefiles="$newdlprefiles $dir/$dlname"
- else
- newdlprefiles="$newdlprefiles $dir/$linklib"
- 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
@@ -5471,7 +6603,7 @@ func_mode_link ()
if test "$linkmode" = prog && test "$pass" != link; then
- newlib_search_path="$newlib_search_path $ladir"
+ func_append newlib_search_path " $ladir"
deplibs="$lib $deplibs"
linkalldeplibs=no
@@ -5484,7 +6616,8 @@ func_mode_link ()
for deplib in $dependency_libs; do
case $deplib in
-L*) func_stripname '-L' '' "$deplib"
- newlib_search_path="$newlib_search_path $func_stripname_result"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
;;
esac
# Need to link against all dependency_libs?
@@ -5495,12 +6628,12 @@ func_mode_link ()
# or/and link against static libraries
newdependency_libs="$deplib $newdependency_libs"
fi
- if $opt_duplicate_deps ; then
+ if $opt_preserve_dup_deps ; then
case "$tmp_libs " in
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
esac
fi
- tmp_libs="$tmp_libs $deplib"
+ func_append tmp_libs " $deplib"
done # for deplib
continue
fi # $linkmode = prog...
@@ -5515,7 +6648,7 @@ func_mode_link ()
# Make sure the rpath contains only unique directories.
case "$temp_rpath:" in
*"$absdir:"*) ;;
- *) temp_rpath="$temp_rpath$absdir:" ;;
+ *) func_append temp_rpath "$absdir:" ;;
esac
fi
@@ -5527,7 +6660,7 @@ func_mode_link ()
*)
case "$compile_rpath " in
*" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ *) func_append compile_rpath " $absdir" ;;
esac
;;
esac
@@ -5536,7 +6669,7 @@ func_mode_link ()
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
@@ -5561,12 +6694,12 @@ func_mode_link ()
case $host in
*cygwin* | *mingw* | *cegcc*)
# No point in relinking DLLs because paths are not encoded
- notinst_deplibs="$notinst_deplibs $lib"
+ func_append notinst_deplibs " $lib"
need_relink=no
;;
*)
if test "$installed" = no; then
- notinst_deplibs="$notinst_deplibs $lib"
+ func_append notinst_deplibs " $lib"
need_relink=yes
fi
;;
@@ -5583,7 +6716,7 @@ func_mode_link ()
fi
done
if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
- $ECHO
+ echo
if test "$linkmode" = prog; then
$ECHO "*** Warning: Linking the executable $output against the loadable module"
else
@@ -5601,7 +6734,7 @@ func_mode_link ()
*)
case "$compile_rpath " in
*" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ *) func_append compile_rpath " $absdir" ;;
esac
;;
esac
@@ -5610,7 +6743,7 @@ func_mode_link ()
*)
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *) func_append finalize_rpath " $libdir" ;;
esac
;;
esac
@@ -5664,7 +6797,7 @@ func_mode_link ()
linklib=$newlib
fi # test -n "$old_archive_from_expsyms_cmds"
- if test "$linkmode" = prog || test "$mode" != relink; then
+ if test "$linkmode" = prog || test "$opt_mode" != relink; then
add_shlibpath=
add_dir=
add=
@@ -5686,9 +6819,9 @@ func_mode_link ()
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"
+ 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
@@ -5715,12 +6848,12 @@ func_mode_link ()
test "$hardcode_direct_absolute" = no; then
add="$dir/$linklib"
elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
+ 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
[\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
@@ -5742,7 +6875,7 @@ func_mode_link ()
if test -n "$add_shlibpath"; then
case :$compile_shlibpath: in
*":$add_shlibpath:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
esac
fi
if test "$linkmode" = prog; then
@@ -5756,13 +6889,13 @@ func_mode_link ()
test "$hardcode_shlibpath_var" = yes; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
esac
fi
fi
fi
- if test "$linkmode" = prog || test "$mode" = relink; then
+ if test "$linkmode" = prog || test "$opt_mode" = relink; then
add_shlibpath=
add_dir=
add=
@@ -5776,7 +6909,7 @@ func_mode_link ()
elif test "$hardcode_shlibpath_var" = yes; then
case :$finalize_shlibpath: in
*":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
esac
add="-l$name"
elif test "$hardcode_automatic" = yes; then
@@ -5793,7 +6926,7 @@ func_mode_link ()
if test -n "$inst_prefix_dir"; then
case $libdir in
[\\/]*)
- add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ func_append add_dir " -L$inst_prefix_dir$libdir"
;;
esac
fi
@@ -5828,21 +6961,21 @@ func_mode_link ()
# Just print a warning and add the library to dependency_libs so
# that the program can be linked against the static library.
- $ECHO
+ 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."
+ 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."
+ 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."
+ 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
@@ -5870,27 +7003,33 @@ func_mode_link ()
temp_xrpath=$func_stripname_result
case " $xrpath " in
*" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
+ *) func_append xrpath " $temp_xrpath";;
esac;;
- *) temp_deplibs="$temp_deplibs $libdir";;
+ *) func_append temp_deplibs " $libdir";;
esac
done
dependency_libs="$temp_deplibs"
fi
- newlib_search_path="$newlib_search_path $absdir"
+ 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"
- if $opt_duplicate_deps ; then
+ 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
- *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
esac
fi
- tmp_libs="$tmp_libs $deplib"
+ func_append tmp_libs " $func_resolve_sysroot_result"
done
if test "$link_all_deplibs" != no; then
@@ -5900,8 +7039,10 @@ func_mode_link ()
case $deplib in
-L*) path="$deplib" ;;
*.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
func_dirname "$deplib" "" "."
- dir="$func_dirname_result"
+ dir=$func_dirname_result
# We need an absolute path.
case $dir in
[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5928,8 +7069,8 @@ func_mode_link ()
if test -z "$darwin_install_name"; then
darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
fi
- compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
- linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ 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
@@ -5962,7 +7103,7 @@ func_mode_link ()
compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
else
- compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
fi
fi
dependency_libs="$newdependency_libs"
@@ -5979,7 +7120,7 @@ func_mode_link ()
for dir in $newlib_search_path; do
case "$lib_search_path " in
*" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir" ;;
+ *) func_append lib_search_path " $dir" ;;
esac
done
newlib_search_path=
@@ -6037,10 +7178,10 @@ func_mode_link ()
-L*)
case " $tmp_libs " in
*" $deplib "*) ;;
- *) tmp_libs="$tmp_libs $deplib" ;;
+ *) func_append tmp_libs " $deplib" ;;
esac
;;
- *) tmp_libs="$tmp_libs $deplib" ;;
+ *) func_append tmp_libs " $deplib" ;;
esac
done
eval $var=\"$tmp_libs\"
@@ -6056,7 +7197,7 @@ func_mode_link ()
;;
esac
if test -n "$i" ; then
- tmp_libs="$tmp_libs $i"
+ func_append tmp_libs " $i"
fi
done
dependency_libs=$tmp_libs
@@ -6097,7 +7238,7 @@ func_mode_link ()
# Now set the variables for building old libraries.
build_libtool_libs=no
oldlibs="$output"
- objs="$objs$old_deplibs"
+ func_append objs "$old_deplibs"
;;
lib)
@@ -6130,10 +7271,10 @@ func_mode_link ()
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
$ECHO "*** Warning: Linking the shared library $output against the non-libtool"
$ECHO "*** objects $objs is not portable!"
- libobjs="$libobjs $objs"
+ func_append libobjs " $objs"
fi
fi
@@ -6192,13 +7333,14 @@ func_mode_link ()
# 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|sunos)
+ freebsd-aout|freebsd-elf|qnx|sunos)
current="$number_major"
revision="$number_minor"
age="0"
@@ -6311,7 +7453,7 @@ func_mode_link ()
versuffix="$major.$revision"
;;
- linux)
+ linux) # correct to gnu/linux during the next big refactor
func_arith $current - $age
major=.$func_arith_result
versuffix="$major.$age.$revision"
@@ -6334,7 +7476,7 @@ func_mode_link ()
done
# Make executables depend on our current version.
- verstring="$verstring:${current}.0"
+ func_append verstring ":${current}.0"
;;
qnx)
@@ -6402,10 +7544,10 @@ func_mode_link ()
fi
func_generate_dlsyms "$libname" "$libname" "yes"
- libobjs="$libobjs $symfileobj"
+ func_append libobjs " $symfileobj"
test "X$libobjs" = "X " && libobjs=
- if test "$mode" != relink; then
+ 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=
@@ -6421,7 +7563,7 @@ func_mode_link ()
continue
fi
fi
- removelist="$removelist $p"
+ func_append removelist " $p"
;;
*) ;;
esac
@@ -6432,27 +7574,28 @@ func_mode_link ()
# Now set the variables for building old libraries.
if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
- oldlibs="$oldlibs $output_objdir/$libname.$libext"
+ func_append oldlibs " $output_objdir/$libname.$libext"
# Transform .lo files to .o files.
- oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ 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 "X$lib_search_path " | $Xsed -e "s% $path % %g"`
- # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
- # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+ # 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
- temp_xrpath="$temp_xrpath -R$libdir"
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
+ *) func_append finalize_rpath " $libdir" ;;
esac
done
if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6466,7 +7609,7 @@ func_mode_link ()
for lib in $old_dlfiles; do
case " $dlprefiles $dlfiles " in
*" $lib "*) ;;
- *) dlfiles="$dlfiles $lib" ;;
+ *) func_append dlfiles " $lib" ;;
esac
done
@@ -6476,19 +7619,19 @@ func_mode_link ()
for lib in $old_dlprefiles; do
case "$dlprefiles " in
*" $lib "*) ;;
- *) dlprefiles="$dlprefiles $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*)
+ *-*-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
- deplibs="$deplibs System.ltframework"
+ func_append deplibs " System.ltframework"
;;
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
@@ -6505,7 +7648,7 @@ func_mode_link ()
*)
# Add libc to deplibs on all other systems if necessary.
if test "$build_libtool_need_lc" = "yes"; then
- deplibs="$deplibs -lc"
+ func_append deplibs " -lc"
fi
;;
esac
@@ -6554,7 +7697,7 @@ EOF
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
i=""
;;
esac
@@ -6565,21 +7708,21 @@ EOF
set dummy $deplib_matches; shift
deplib_match=$1
if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
else
droppeddeps=yes
- $ECHO
+ echo
$ECHO "*** Warning: dynamic linker does not accept needed library $i."
- $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 I believe you do not have"
- $ECHO "*** because a test_compile did reveal that the linker did not use it for"
- $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+ 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 I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
fi
fi
;;
*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
;;
esac
done
@@ -6597,7 +7740,7 @@ EOF
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $i "*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
i=""
;;
esac
@@ -6608,29 +7751,29 @@ EOF
set dummy $deplib_matches; shift
deplib_match=$1
if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
else
droppeddeps=yes
- $ECHO
+ echo
$ECHO "*** Warning: dynamic linker does not accept needed library $i."
- $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 a test_compile did reveal that the linker did not use this one"
- $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+ 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 a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
fi
fi
else
droppeddeps=yes
- $ECHO
+ echo
$ECHO "*** Warning! Library $i is needed by this library but I was not able to"
- $ECHO "*** make it link in! You will probably need to install it or some"
- $ECHO "*** library that it depends on before this library will be fully"
- $ECHO "*** functional. Installing it before continuing would be even better."
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
fi
;;
*)
- newdeplibs="$newdeplibs $i"
+ func_append newdeplibs " $i"
;;
esac
done
@@ -6647,15 +7790,27 @@ EOF
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
;;
esac
fi
if test -n "$a_deplib" ; then
libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ if test "$want_nocaseglob" = yes; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/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 |
@@ -6672,13 +7827,13 @@ EOF
potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
- *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$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
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
break 2
fi
@@ -6687,12 +7842,12 @@ EOF
fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- $ECHO
+ 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"
+ 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
@@ -6703,7 +7858,7 @@ EOF
;;
*)
# Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
;;
esac
done # Gone through all deplibs.
@@ -6719,7 +7874,7 @@ EOF
if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
case " $predeps $postdeps " in
*" $a_deplib "*)
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
;;
esac
@@ -6730,9 +7885,9 @@ EOF
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 \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
$EGREP "$match_pattern_regex" > /dev/null; then
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
a_deplib=""
break 2
fi
@@ -6741,12 +7896,12 @@ EOF
fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- $ECHO
+ 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"
+ 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
@@ -6757,32 +7912,32 @@ EOF
;;
*)
# Add a -L argument.
- newdeplibs="$newdeplibs $a_deplib"
+ func_append newdeplibs " $a_deplib"
;;
esac
done # Gone through all deplibs.
;;
none | unknown | *)
newdeplibs=""
- tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
- -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+ 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 "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
done
fi
- if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
- $GREP . >/dev/null; then
- $ECHO
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
if test "X$deplibs_check_method" = "Xnone"; then
- $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
else
- $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+ echo "*** Warning: inter-library dependencies are not known to be supported."
fi
- $ECHO "*** All declared inter-library dependencies are being dropped."
+ echo "*** All declared inter-library dependencies are being dropped."
droppeddeps=yes
- fi
+ ;;
+ esac
;;
esac
versuffix=$versuffix_save
@@ -6794,23 +7949,23 @@ EOF
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library with the System framework
- newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ 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
+ 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."
+ 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."
+ 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"
@@ -6820,16 +7975,16 @@ EOF
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."
+ 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."
+ 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
@@ -6846,9 +8001,9 @@ EOF
# Time to change all our "foo.ltframework" stuff back to "-framework foo"
case $host in
*-*-darwin*)
- newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ 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
@@ -6861,7 +8016,7 @@ EOF
*)
case " $deplibs " in
*" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
+ func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
@@ -6871,10 +8026,10 @@ EOF
-L*)
case " $new_libs " in
*" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
done
deplibs="$new_libs"
@@ -6886,15 +8041,22 @@ EOF
# 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 "$mode" != relink && rpath="$compile_rpath$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
@@ -6903,18 +8065,18 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- dep_rpath="$dep_rpath $flag"
+ func_append dep_rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
+ *) func_append perm_rpath " $libdir" ;;
esac
fi
done
@@ -6922,17 +8084,13 @@ EOF
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
+ 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
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
fi
@@ -6940,7 +8098,7 @@ EOF
fi
shlibpath="$finalize_shlibpath"
- test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
if test -n "$shlibpath"; then
eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
fi
@@ -6966,18 +8124,18 @@ EOF
linknames=
for link
do
- linknames="$linknames $link"
+ func_append linknames " $link"
done
# Use standard objects if they are pic
- test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ 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"
- delfiles="$delfiles $export_symbols"
+ func_append delfiles " $export_symbols"
fi
orig_export_symbols=
@@ -7008,13 +8166,45 @@ EOF
$opt_dry_run || $RM $export_symbols
cmds=$export_symbols_cmds
save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ for cmd1 in $cmds; do
IFS="$save_ifs"
- eval cmd=\"$cmd\"
- func_len " $cmd"
- len=$func_len_result
- if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ # 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.
@@ -7036,7 +8226,7 @@ EOF
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 "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_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
@@ -7048,7 +8238,7 @@ EOF
# 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
- delfiles="$delfiles $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
@@ -7058,7 +8248,7 @@ EOF
case " $convenience " in
*" $test_deplib "*) ;;
*)
- tmp_deplibs="$tmp_deplibs $test_deplib"
+ func_append tmp_deplibs " $test_deplib"
;;
esac
done
@@ -7078,21 +8268,21 @@ EOF
test "X$libobjs" = "X " && libobjs=
else
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $convenience
- libobjs="$libobjs $func_extract_archives_result"
+ 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\"
- linker_flags="$linker_flags $flag"
+ func_append linker_flags " $flag"
fi
# Make a backup of the uninstalled library when relinking
- if test "$mode" = relink; then
+ if test "$opt_mode" = relink; then
$opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
fi
@@ -7137,7 +8327,8 @@ EOF
save_libobjs=$libobjs
fi
save_output=$output
- output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+ func_basename "$output"
+ output_la=$func_basename_result
# Clear the reloadable object creation command queue and
# initialize k to one.
@@ -7150,13 +8341,16 @@ EOF
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
+ echo 'INPUT (' > $output
for obj in $save_libobjs
do
- $ECHO "$obj" >> $output
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
done
- $ECHO ')' >> $output
- delfiles="$delfiles $output"
+ 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"
@@ -7170,10 +8364,12 @@ EOF
fi
for obj
do
- $ECHO "$obj" >> $output
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
done
- delfiles="$delfiles $output"
- output=$firstobj\"$file_list_spec$output\"
+ 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..."
@@ -7197,17 +8393,19 @@ EOF
# command to the queue.
if test "$k" -eq 1 ; then
# The first file doesn't have a previous command to add.
- eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
else
# All subsequent reloadable object files will link in
# the last one created.
- eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+ 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
+ objlist=" $obj"
func_len " $last_robj"
func_arith $len0 + $func_len_result
len=$func_arith_result
@@ -7217,11 +8415,12 @@ EOF
# reloadable object file. All subsequent reloadable object
# files will link in the last one created.
test -z "$concat_cmds" || concat_cmds=$concat_cmds~
- eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+ 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
- delfiles="$delfiles $output"
+ func_append delfiles " $output"
else
output=
@@ -7255,7 +8454,7 @@ EOF
lt_exit=$?
# Restore the uninstalled library and exit
- if test "$mode" = relink; then
+ if test "$opt_mode" = relink; then
( cd "$output_objdir" && \
$RM "${realname}T" && \
$MV "${realname}U" "$realname" )
@@ -7276,7 +8475,7 @@ EOF
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 "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
fi
if test -n "$orig_export_symbols"; then
@@ -7288,7 +8487,7 @@ EOF
# 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
- delfiles="$delfiles $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
@@ -7329,10 +8528,10 @@ EOF
# Add any objects from preloaded convenience libraries
if test -n "$dlprefiles"; then
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $dlprefiles
- libobjs="$libobjs $func_extract_archives_result"
+ func_append libobjs " $func_extract_archives_result"
test "X$libobjs" = "X " && libobjs=
fi
@@ -7348,7 +8547,7 @@ EOF
lt_exit=$?
# Restore the uninstalled library and exit
- if test "$mode" = relink; then
+ if test "$opt_mode" = relink; then
( cd "$output_objdir" && \
$RM "${realname}T" && \
$MV "${realname}U" "$realname" )
@@ -7360,7 +8559,7 @@ EOF
IFS="$save_ifs"
# Restore the uninstalled library and exit
- if test "$mode" = relink; then
+ 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
@@ -7441,18 +8640,21 @@ EOF
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 "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
else
gentop="$output_objdir/${obj}x"
- generated="$generated $gentop"
+ 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 "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+ 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 $?'
@@ -7512,8 +8714,8 @@ EOF
case $host in
*-*-rhapsody* | *-*-darwin1.[012])
# On Rhapsody replace the C library is the System framework
- compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
- finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
;;
esac
@@ -7524,14 +8726,14 @@ EOF
if test "$tagname" = CXX ; then
case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10.[0123])
- compile_command="$compile_command ${wl}-bind_at_load"
- finalize_command="$finalize_command ${wl}-bind_at_load"
+ 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 "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
- finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
;;
esac
@@ -7545,7 +8747,7 @@ EOF
*)
case " $compile_deplibs " in
*" -L$path/$objdir "*)
- new_libs="$new_libs -L$path/$objdir" ;;
+ func_append new_libs " -L$path/$objdir" ;;
esac
;;
esac
@@ -7555,17 +8757,17 @@ EOF
-L*)
case " $new_libs " in
*" $deplib "*) ;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
;;
- *) new_libs="$new_libs $deplib" ;;
+ *) func_append new_libs " $deplib" ;;
esac
done
compile_deplibs="$new_libs"
- compile_command="$compile_command $compile_deplibs"
- finalize_command="$finalize_command $finalize_deplibs"
+ 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.
@@ -7573,7 +8775,7 @@ EOF
# This is the magic to use -rpath.
case "$finalize_rpath " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir" ;;
+ *) func_append finalize_rpath " $libdir" ;;
esac
done
fi
@@ -7592,18 +8794,18 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
+ func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
- *) perm_rpath="$perm_rpath $libdir" ;;
+ *) func_append perm_rpath " $libdir" ;;
esac
fi
case $host in
@@ -7612,12 +8814,12 @@ EOF
case :$dllsearchpath: in
*":$libdir:"*) ;;
::) dllsearchpath=$libdir;;
- *) dllsearchpath="$dllsearchpath:$libdir";;
+ *) func_append dllsearchpath ":$libdir";;
esac
case :$dllsearchpath: in
*":$testbindir:"*) ;;
::) dllsearchpath=$testbindir;;
- *) dllsearchpath="$dllsearchpath:$testbindir";;
+ *) func_append dllsearchpath ":$testbindir";;
esac
;;
esac
@@ -7643,18 +8845,18 @@ EOF
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
- hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
;;
esac
fi
else
eval flag=\"$hardcode_libdir_flag_spec\"
- rpath="$rpath $flag"
+ func_append rpath " $flag"
fi
elif test -n "$runpath_var"; then
case "$finalize_perm_rpath " in
*" $libdir "*) ;;
- *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
esac
fi
done
@@ -7668,8 +8870,8 @@ EOF
if test -n "$libobjs" && test "$build_old_libs" = yes; then
# Transform all the library objects into standard objects.
- compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
- finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ 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"
@@ -7681,15 +8883,15 @@ EOF
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
;;
- *cegcc)
- # Disable wrappers for cegcc, we are cross compiling anyway.
- wrappers_required=no
- ;;
*)
if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
wrappers_required=no
@@ -7698,13 +8900,19 @@ EOF
esac
if test "$wrappers_required" = no; then
# Replace the output file specification.
- compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ 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}"'
@@ -7727,7 +8935,7 @@ EOF
# We should set the runpath_var.
rpath=
for dir in $perm_rpath; do
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
@@ -7735,7 +8943,7 @@ EOF
# We should set the runpath_var.
rpath=
for dir in $finalize_perm_rpath; do
- rpath="$rpath$dir:"
+ func_append rpath "$dir:"
done
finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
fi
@@ -7745,11 +8953,18 @@ EOF
# 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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ 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
@@ -7764,7 +8979,7 @@ EOF
if test "$fast_install" != no; then
link_command="$finalize_var$compile_command$finalize_rpath"
if test "$fast_install" = yes; then
- relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
else
# fast_install is set to needless
relink_command=
@@ -7776,13 +8991,19 @@ EOF
fi
# Replace the output file specification.
- link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+ 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"
@@ -7800,18 +9021,7 @@ EOF
fi
done
relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
- fi
-
- # Quote $ECHO for shipping.
- if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
- case $progpath in
- [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
- *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
- esac
- qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
- else
- qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
fi
# Only actually do things if not in dry run mode.
@@ -7891,7 +9101,7 @@ EOF
else
oldobjs="$old_deplibs $non_pic_objects"
if test "$preload" = yes && test -f "$symfileobj"; then
- oldobjs="$oldobjs $symfileobj"
+ func_append oldobjs " $symfileobj"
fi
fi
addlibs="$old_convenience"
@@ -7899,10 +9109,10 @@ EOF
if test -n "$addlibs"; then
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $addlibs
- oldobjs="$oldobjs $func_extract_archives_result"
+ func_append oldobjs " $func_extract_archives_result"
fi
# Do each command in the archive commands.
@@ -7913,10 +9123,10 @@ EOF
# Add any objects from preloaded convenience libraries
if test -n "$dlprefiles"; then
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_extract_archives $gentop $dlprefiles
- oldobjs="$oldobjs $func_extract_archives_result"
+ func_append oldobjs " $func_extract_archives_result"
fi
# POSIX demands no paths to be encoded in archives. We have
@@ -7932,9 +9142,9 @@ EOF
done | sort | sort -uc >/dev/null 2>&1); then
:
else
- $ECHO "copying selected object files to avoid basename conflicts..."
+ echo "copying selected object files to avoid basename conflicts..."
gentop="$output_objdir/${outputname}x"
- generated="$generated $gentop"
+ func_append generated " $gentop"
func_mkdir_p "$gentop"
save_oldobjs=$oldobjs
oldobjs=
@@ -7958,18 +9168,30 @@ EOF
esac
done
func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
- oldobjs="$oldobjs $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
;;
- *) oldobjs="$oldobjs $obj" ;;
+ *) 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..."
@@ -8043,7 +9265,7 @@ EOF
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 "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
if test "$hardcode_automatic" = yes ; then
relink_command=
fi
@@ -8063,12 +9285,23 @@ EOF
*.la)
func_basename "$deplib"
name="$func_basename_result"
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ 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"
- newdependency_libs="$newdependency_libs $libdir/$name"
+ 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"
;;
- *) newdependency_libs="$newdependency_libs $deplib" ;;
+ -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"
@@ -8082,9 +9315,9 @@ EOF
eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
test -z "$libdir" && \
func_fatal_error "\`$lib' is not a valid libtool archive"
- newdlfiles="$newdlfiles $libdir/$name"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
;;
- *) newdlfiles="$newdlfiles $lib" ;;
+ *) func_append newdlfiles " $lib" ;;
esac
done
dlfiles="$newdlfiles"
@@ -8101,7 +9334,7 @@ EOF
eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
test -z "$libdir" && \
func_fatal_error "\`$lib' is not a valid libtool archive"
- newdlprefiles="$newdlprefiles $libdir/$name"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
;;
esac
done
@@ -8113,7 +9346,7 @@ EOF
[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
*) abs=`pwd`"/$lib" ;;
esac
- newdlfiles="$newdlfiles $abs"
+ func_append newdlfiles " $abs"
done
dlfiles="$newdlfiles"
newdlprefiles=
@@ -8122,15 +9355,33 @@ EOF
[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
*) abs=`pwd`"/$lib" ;;
esac
- newdlprefiles="$newdlprefiles $abs"
+ 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) tdlname=../bin/$dlname ;;
+ *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
@@ -8189,7 +9440,7 @@ relink_command=\"$relink_command\""
exit $EXIT_SUCCESS
}
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
func_mode_link ${1+"$@"}
@@ -8209,9 +9460,9 @@ func_mode_uninstall ()
for arg
do
case $arg in
- -f) RM="$RM $arg"; rmforce=yes ;;
- -*) RM="$RM $arg" ;;
- *) files="$files $arg" ;;
+ -f) func_append RM " $arg"; rmforce=yes ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
esac
done
@@ -8220,24 +9471,23 @@ func_mode_uninstall ()
rmdirs=
- origobjdir="$objdir"
for file in $files; do
func_dirname "$file" "" "."
dir="$func_dirname_result"
if test "X$dir" = X.; then
- objdir="$origobjdir"
+ odir="$objdir"
else
- objdir="$dir/$origobjdir"
+ odir="$dir/$objdir"
fi
func_basename "$file"
name="$func_basename_result"
- test "$mode" = uninstall && objdir="$dir"
+ test "$opt_mode" = uninstall && odir="$dir"
- # Remember objdir for removal later, being careful to avoid duplicates
- if test "$mode" = clean; then
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test "$opt_mode" = clean; then
case " $rmdirs " in
- *" $objdir "*) ;;
- *) rmdirs="$rmdirs $objdir" ;;
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
esac
fi
@@ -8263,18 +9513,17 @@ func_mode_uninstall ()
# Delete the libtool libraries and symlinks.
for n in $library_names; do
- rmfiles="$rmfiles $objdir/$n"
+ func_append rmfiles " $odir/$n"
done
- test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
- case "$mode" in
+ case "$opt_mode" in
clean)
- case " $library_names " in
- # " " in the beginning catches empty $dlname
+ case " $library_names " in
*" $dlname "*) ;;
- *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
esac
- test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
;;
uninstall)
if test -n "$library_names"; then
@@ -8302,19 +9551,19 @@ func_mode_uninstall ()
# Add PIC object to the list of files to remove.
if test -n "$pic_object" &&
test "$pic_object" != none; then
- rmfiles="$rmfiles $dir/$pic_object"
+ 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
- rmfiles="$rmfiles $dir/$non_pic_object"
+ func_append rmfiles " $dir/$non_pic_object"
fi
fi
;;
*)
- if test "$mode" = clean ; then
+ if test "$opt_mode" = clean ; then
noexename=$name
case $file in
*.exe)
@@ -8324,7 +9573,7 @@ func_mode_uninstall ()
noexename=$func_stripname_result
# $file with .exe has already been added to rmfiles,
# add $file without .exe
- rmfiles="$rmfiles $file"
+ func_append rmfiles " $file"
;;
esac
# Do a test to see if this is a libtool program.
@@ -8333,7 +9582,7 @@ func_mode_uninstall ()
func_ltwrapper_scriptname "$file"
relink_command=
func_source $func_ltwrapper_scriptname_result
- rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
else
relink_command=
func_source $dir/$noexename
@@ -8341,12 +9590,12 @@ func_mode_uninstall ()
# note $name still contains .exe if it was in $file originally
# as does the version of $file that was added into $rmfiles
- rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
if test "$fast_install" = yes && test -n "$relink_command"; then
- rmfiles="$rmfiles $objdir/lt-$name"
+ func_append rmfiles " $odir/lt-$name"
fi
if test "X$noexename" != "X$name" ; then
- rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ func_append rmfiles " $odir/lt-${noexename}.c"
fi
fi
fi
@@ -8354,7 +9603,6 @@ func_mode_uninstall ()
esac
func_show_eval "$RM $rmfiles" 'exit_status=1'
done
- objdir="$origobjdir"
# Try to remove the ${objdir}s in the directories where we deleted files
for dir in $rmdirs; do
@@ -8366,16 +9614,16 @@ func_mode_uninstall ()
exit $exit_status
}
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
func_mode_uninstall ${1+"$@"}
-test -z "$mode" && {
+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 \`$mode'"
+ func_fatal_help "invalid operation mode \`$opt_mode'"
if test -n "$exec_cmd"; then
eval exec "$exec_cmd"
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 55940fb..0da0560 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -76,6 +76,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -94,6 +95,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -110,6 +112,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -174,6 +177,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -209,7 +213,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -320,10 +323,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index a3fee53..828104c 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,7 +1,8 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008 Free Software Foundation, Inc.
+# 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
@@ -10,7 +11,8 @@
m4_define([_LT_COPYING], [dnl
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is part of GNU Libtool.
@@ -37,7 +39,7 @@ m4_define([_LT_COPYING], [dnl
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
])
-# serial 56 LT_INIT
+# serial 57 LT_INIT
# LT_PREREQ(VERSION)
@@ -66,6 +68,7 @@ esac
# ------------------
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
@@ -82,6 +85,8 @@ 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])
@@ -118,7 +123,7 @@ m4_defun([_LT_CC_BASENAME],
*) break;;
esac
done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
])
@@ -138,6 +143,11 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
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
@@ -160,10 +170,13 @@ _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
@@ -179,7 +192,6 @@ fi
_LT_CHECK_OBJDIR
m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
case $host_os in
aix3*)
@@ -193,23 +205,6 @@ aix3*)
;;
esac
-# Sed substitution that helps us do robust quoting. It backslashifies
-# 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'
-
# Global variables:
ofile=libtool
can_build_shared=yes
@@ -250,6 +245,28 @@ _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'
@@ -408,7 +425,7 @@ m4_define([_lt_decl_all_varnames],
# 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 "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
# _LT_CONFIG_STATUS_DECLARATIONS
@@ -418,7 +435,7 @@ m4_define([_LT_CONFIG_STATUS_DECLARE],
# embedded single quotes properly. In configure, this macro expands
# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
#
-# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+# <var>='`$ECHO "$<var>" | $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)])])])
@@ -517,12 +534,20 @@ 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 "X\\\\\$\$var"\` in
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -533,9 +558,9 @@ done
# Double-quote double-evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_dquote_varnames); do
- case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[[\\\\\\\`\\"\\\$]]*)
- eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
;;
*)
eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -543,16 +568,38 @@ for var in lt_decl_all_varnames([[ \
esac
done
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
- lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
- ;;
-esac
-
_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
# ---------
@@ -562,20 +609,11 @@ _LT_OUTPUT_LIBTOOL_INIT
AC_DEFUN([LT_OUTPUT],
[: ${CONFIG_LT=./config.lt}
AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
+lt_cl_silent=false
exec AS_MESSAGE_LOG_FD>>config.log
{
echo
@@ -601,7 +639,7 @@ 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) 2008 Free Software Foundation, Inc.
+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."
@@ -646,15 +684,13 @@ chmod +x "$CONFIG_LT"
# 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.
-if test "$no_create" != yes; then
- 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)
-fi
+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
@@ -717,15 +753,12 @@ _LT_EOF
# 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
-
- _LT_PROG_XSI_SHELLFNS
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
- sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
- || (rm -f "$cfgfile"; exit 1)
+ _LT_PROG_REPLACE_SHELLFNS
- mv -f "$cfgfile" "$ofile" ||
+ mv -f "$cfgfile" "$ofile" ||
(rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
chmod +x "$ofile"
],
@@ -770,6 +803,7 @@ AC_DEFUN([LT_LANG],
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)],
@@ -791,6 +825,31 @@ m4_defun([_LT_LANG],
])# _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],
@@ -821,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_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)])])
@@ -831,11 +894,13 @@ 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
@@ -921,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ # 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
@@ -929,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
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
@@ -940,6 +1012,34 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
[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' ;;
@@ -967,7 +1067,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
else
_lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
fi
- if test "$DSYMUTIL" != ":"; then
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
_lt_dsymutil='~$DSYMUTIL $lib || :'
else
_lt_dsymutil=
@@ -977,8 +1077,8 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
])
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
# Checks for linker and compiler features on darwin
m4_defun([_LT_DARWIN_LINKER_FEATURES],
[
@@ -987,7 +1087,13 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=yes
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
- _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ 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
@@ -995,7 +1101,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
*) _lt_dar_can_shared=$GCC ;;
esac
if test "$_lt_dar_can_shared" = "yes"; then
- output_verbose_link_cmd=echo
+ 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}"
@@ -1011,203 +1117,142 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
fi
])
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _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
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\(.*\)$/\1/
- p
- }
- }'
-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 "$aix_libpath"; then
- aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+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],
-[ifdef([AC_DIVERSION_NOTICE],
- [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
# _LT_PROG_ECHO_BACKSLASH
# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
+# 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],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
- # Remove one level of quotation (which was required for Make).
- ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
- ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
- # Discard the --no-reexec flag, and continue.
- shift
-elif test "X[$]1" = X--fallback-echo; then
- # Avoid inline document here, it may be left over
- :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
- # Yippee, $ECHO works!
- :
+[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
- # Restart under the correct shell.
- exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
- # used as fallback echo
- shift
- cat <<_LT_EOF
-[$]*
-_LT_EOF
- exit 0
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
fi
-# 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
-
-if test -z "$lt_ECHO"; then
- if test "X${echo_test_string+set}" != Xset; then
- # find a string as large as possible, as long as the shell can cope with it
- for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
- # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
- if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
- { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
- then
- break
- fi
- done
- fi
-
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- :
- else
- # The Solaris, AIX, and Digital Unix default echo programs unquote
- # backslashes. This makes it impossible to quote backslashes using
- # echo "$something" | sed 's/\\/\\\\/g'
- #
- # So, first we look for a working echo in the user's PATH.
-
- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
- for dir in $PATH /usr/ucb; do
- IFS="$lt_save_ifs"
- if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
- test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$dir/echo"
- break
- fi
- done
- IFS="$lt_save_ifs"
-
- if test "X$ECHO" = Xecho; then
- # We didn't find a better echo, so look for alternatives.
- if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # This shell has a builtin print -r that does the trick.
- ECHO='print -r'
- elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
- test "X$CONFIG_SHELL" != X/bin/ksh; then
- # If we have ksh, try running configure again with it.
- ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
- export ORIGINAL_CONFIG_SHELL
- CONFIG_SHELL=/bin/ksh
- export CONFIG_SHELL
- exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
- else
- # Try using printf.
- ECHO='printf %s\n'
- if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
- echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- # Cool, printf works
- :
- elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
- export CONFIG_SHELL
- SHELL="$CONFIG_SHELL"
- export SHELL
- ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
- elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
- test "X$echo_testing_string" = 'X\t' &&
- echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
- test "X$echo_testing_string" = "X$echo_test_string"; then
- ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
- else
- # maybe with a smaller string...
- prev=:
-
- for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
- if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
- then
- break
- fi
- prev="$cmd"
- done
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
- if test "$prev" != 'sed 50q "[$]0"'; then
- echo_test_string=`eval $prev`
- export echo_test_string
- exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
- else
- # Oops. We lost completely, so just stick with echo.
- ECHO=echo
- fi
- fi
- fi
- fi
- fi
-fi
+case "$ECHO" in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
- lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
+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" )])])
-AC_SUBST(lt_ECHO)
-])
_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
- [An echo program that does not interpret backslashes])
+_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],
@@ -1236,7 +1281,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ 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
@@ -1329,14 +1374,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
CFLAGS="$SAVE_CFLAGS"
fi
;;
-sparc*-*solaris*)
+*-*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*) LD="${LD-ld} -m elf64_sparc" ;;
+ 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"
@@ -1354,14 +1412,47 @@ 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],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
AC_CHECK_TOOL(STRIP, strip, :)
test -z "$STRIP" && STRIP=:
@@ -1380,18 +1471,27 @@ old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
;;
*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
;;
esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ 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
@@ -1416,15 +1516,15 @@ AC_CACHE_CHECK([$1], [$2],
-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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (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:__oline__: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $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
@@ -1464,7 +1564,7 @@ AC_CACHE_CHECK([$1], [$2],
if test -s conftest.err; then
# Append any errors to the config.log.
cat conftest.err 1>&AS_MESSAGE_LOG_FD
- $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $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
@@ -1527,6 +1627,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
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.
@@ -1552,6 +1657,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
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
@@ -1591,8 +1701,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
# 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"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
- = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ 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`
@@ -1643,7 +1753,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
+[#line $LINENO "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -1684,7 +1794,13 @@ else
# endif
#endif
-void fnord() { int i=42;}
+/* 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);
@@ -1693,7 +1809,11 @@ int main ()
if (self)
{
if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
/* dlclose (self); */
}
else
@@ -1869,16 +1989,16 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (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:__oline__: \$? = $ac_status" >&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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $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
@@ -2037,6 +2157,7 @@ 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],
[], [
@@ -2045,16 +2166,23 @@ if test "$GCC" = yes; then
darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
*) lt_awk_arg="/^libraries:/" ;;
esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ 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 -e 's/;/ /g'`
- else
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
+ 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=
@@ -2067,7 +2195,7 @@ if test "$GCC" = yes; then
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 '
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
BEGIN {RS=" "; FS="/|\n";} {
lt_foo="";
lt_count=0;
@@ -2087,7 +2215,13 @@ BEGIN {RS=" "; FS="/|\n";} {
if (lt_foo != "") { lt_freq[[lt_foo]]++; }
if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
}'`
- sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+ # 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])
@@ -2113,7 +2247,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ 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
@@ -2122,7 +2256,7 @@ aix3*)
;;
aix[[4-9]]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -2175,7 +2309,7 @@ amigaos*)
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=`$ECHO "X$lib" | $Xsed -e '\''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'
+ 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
;;
@@ -2187,7 +2321,7 @@ beos*)
;;
bsdi[[45]]*)
- version_type=linux
+ 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'
@@ -2206,8 +2340,9 @@ cygwin* | mingw* | pw32* | cegcc*)
need_version=no
need_lib_prefix=no
- case $GCC,$host_os in
- yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ 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}`~
@@ -2228,36 +2363,83 @@ cygwin* | mingw* | pw32* | cegcc*)
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="/usr/lib /lib/w32api /lib /usr/local/lib"
+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}'
- sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
- # It is most probably a Windows format PATH printed by
- # mingw gcc, but we are running on Cygwin. Gcc prints its search
- # path with ; separators, and with drive letters. We can handle the
- # drive letters (cygwin fileutils understands them), so leave them,
- # especially as we might pass files found there to a mingw objdump,
- # which wouldn't understand a cygwinified path. Ahh.
- 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
;;
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
- dynamic_linker='Win32 ld.exe'
# FIXME: first we should search . and the directory the executable is in
shlibpath_var=PATH
;;
@@ -2278,7 +2460,7 @@ m4_if([$1], [],[
;;
dgux*)
- version_type=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'
@@ -2286,10 +2468,6 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd1*)
- dynamic_linker=no
- ;;
-
freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
@@ -2297,7 +2475,7 @@ freebsd* | dragonfly*)
objformat=`/usr/bin/objformat`
else
case $host_os in
- freebsd[[123]]*) objformat=aout ;;
+ freebsd[[23]].*) objformat=aout ;;
*) objformat=elf ;;
esac
fi
@@ -2315,7 +2493,7 @@ freebsd* | dragonfly*)
esac
shlibpath_var=LD_LIBRARY_PATH
case $host_os in
- freebsd2*)
+ freebsd2.*)
shlibpath_overrides_runpath=yes
;;
freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2335,12 +2513,26 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=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}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+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
;;
@@ -2386,12 +2578,14 @@ hpux9* | hpux10* | hpux11*)
soname_spec='${libname}${release}${shared_ext}$major'
;;
esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ # 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
+ 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}'
@@ -2407,7 +2601,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -2444,9 +2638,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=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}'
@@ -2454,16 +2648,21 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
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
- 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],
- [shlibpath_overrides_runpath=yes])])
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
+ 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
@@ -2472,7 +2671,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
# 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;/^$/d' | tr '\n' ' '`
+ 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
@@ -2516,7 +2715,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ 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
@@ -2585,7 +2784,7 @@ rdos*)
;;
solaris*)
- version_type=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}'
@@ -2610,7 +2809,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ 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
@@ -2634,7 +2833,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ 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
@@ -2665,7 +2864,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=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}'
@@ -2675,7 +2874,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ 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
@@ -2717,6 +2916,8 @@ _LT_DECL([], [library_names_spec], [1],
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],
@@ -2829,6 +3030,7 @@ 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],
@@ -2950,6 +3152,11 @@ case $reload_flag in
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'
@@ -2958,8 +3165,8 @@ case $host_os in
fi
;;
esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
])# _LT_CMD_RELOAD
@@ -3011,16 +3218,18 @@ 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.
- if ( file / ) >/dev/null 2>&1; then
+ # 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
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ # 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)
+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'
@@ -3050,6 +3259,10 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
case $host_cpu in
@@ -3058,11 +3271,11 @@ hpux10.20* | hpux11*)
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]) shared object file - PA-RISC [0-9].[0-9]']
+ [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_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
@@ -3083,7 +3296,7 @@ irix5* | irix6* | nonstopux*)
lt_cv_deplibs_check_method=pass_all
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3162,6 +3375,21 @@ tpf*)
;;
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
@@ -3169,7 +3397,11 @@ 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"])
+ [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
@@ -3226,8 +3458,20 @@ 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.
- AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
- AC_SUBST([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
@@ -3239,13 +3483,13 @@ _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:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (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:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&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:__oline__: output\"" >&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"
@@ -3260,6 +3504,67 @@ 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
# --------
@@ -3268,7 +3573,7 @@ AC_DEFUN([LT_LIB_M],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
# These system don't have libm, or don't need it
;;
*-ncr-sysv4.3*)
@@ -3296,7 +3601,12 @@ m4_defun([_LT_COMPILER_NO_RTTI],
_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
if test "$GCC" = yes; then
- _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ 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,
@@ -3313,6 +3623,7 @@ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
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
@@ -3380,8 +3691,8 @@ esac
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'"
+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=
@@ -3405,6 +3716,7 @@ for ac_symprfx in "" "_"; do
# 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};"\
@@ -3417,6 +3729,7 @@ for ac_symprfx in "" "_"; do
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
@@ -3438,7 +3751,7 @@ _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
+ 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"
@@ -3450,6 +3763,18 @@ _LT_EOF
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 at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -3461,7 +3786,7 @@ _LT_EOF
cat <<_LT_EOF >> conftest.$ac_ext
/* The mapping between symbol names and symbols. */
-const struct {
+LT@&t at _DLSYM_CONST struct {
const char *name;
void *address;
}
@@ -3487,15 +3812,15 @@ static const void *lt_preloaded_setup() {
_LT_EOF
# Now try linking the two files.
mv conftest.$ac_objext conftstm.$ac_objext
- lt_save_LIBS="$LIBS"
- lt_save_CFLAGS="$CFLAGS"
+ 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_save_LIBS"
- CFLAGS="$lt_save_CFLAGS"
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
else
echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
fi
@@ -3528,6 +3853,13 @@ 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],
@@ -3538,6 +3870,8 @@ _LT_DECL([global_symbol_to_c_name_address],
_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
@@ -3549,7 +3883,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)=
-AC_MSG_CHECKING([for $compiler option to produce PIC])
m4_if([$1], [CXX], [
# C++ specific cases for pic, static, wl, etc.
if test "$GXX" = yes; then
@@ -3600,6 +3933,11 @@ m4_if([$1], [CXX], [
# 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.
@@ -3649,6 +3987,12 @@ m4_if([$1], [CXX], [
;;
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++*)
@@ -3738,8 +4082,8 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
- xlc* | xlC*)
- # IBM XL 8.0 on PPC
+ 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'
@@ -3801,7 +4145,7 @@ m4_if([$1], [CXX], [
;;
solaris*)
case $cc_basename in
- CC*)
+ 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'
@@ -3905,6 +4249,12 @@ m4_if([$1], [CXX], [
_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
@@ -3947,6 +4297,15 @@ m4_if([$1], [CXX], [
_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
@@ -4010,7 +4369,13 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
;;
- pgcc* | pgf77* | pgf90* | pgf95*)
+ 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,'
@@ -4022,25 +4387,40 @@ m4_if([$1], [CXX], [
# All Alpha code is PIC.
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
- xl*)
- # IBM XL C 8.0/Fortran 10.1 on PPC
+ 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,'
;;
- *Sun\ F*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ *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'
- _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
;;
esac
;;
@@ -4072,7 +4452,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
case $cc_basename in
- f77* | f90* | f95*)
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
*)
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -4129,9 +4509,11 @@ case $host_os in
_LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
;;
esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
- [How to pass a linker flag through the compiler])
+
+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.
@@ -4150,6 +4532,8 @@ 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.
#
@@ -4170,6 +4554,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
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
@@ -4178,30 +4563,40 @@ 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")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _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*)
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
- ;;
- linux* | k*bsd*-gnu)
+ 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
- _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
], [
runpath_var=
_LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4216,7 +4611,6 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4261,13 +4655,39 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd*)
with_gnu_ld=no
;;
- linux* | k*bsd*-gnu)
+ 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}'
@@ -4301,11 +4721,12 @@ dnl Note also adjust exclude_expsyms for C++ above.
_LT_TAGVAR(ld_shlibs, $1)=no
cat <<_LT_EOF 1>&2
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** 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
@@ -4341,10 +4762,12 @@ _LT_EOF
# _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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ _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'
@@ -4362,6 +4785,11 @@ _LT_EOF
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
@@ -4387,15 +4815,16 @@ _LT_EOF
if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
&& test "$tmp_diet" = no
then
- tmp_addflag=
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _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*) # 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ 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' ;;
@@ -4406,13 +4835,17 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
_LT_TAGVAR(whole_archive_flag_spec, $1)=
tmp_sharedflag='--shared' ;;
- xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _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
@@ -4428,17 +4861,16 @@ _LT_EOF
fi
case $cc_basename in
- xlf*)
+ 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)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
- _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ _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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
;;
esac
@@ -4452,8 +4884,8 @@ _LT_EOF
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc=
else
- _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'
+ _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
;;
@@ -4471,8 +4903,8 @@ _LT_EOF
_LT_EOF
elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _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'
+ _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
@@ -4518,8 +4950,8 @@ _LT_EOF
*)
if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- _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'
+ _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
@@ -4559,8 +4991,10 @@ _LT_EOF
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")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _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
@@ -4648,9 +5082,9 @@ _LT_EOF
_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an
# empty executable.
- _LT_SYS_MODULE_PATH_AIX
+ _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ _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'
@@ -4659,14 +5093,19 @@ _LT_EOF
else
# Determine the default libpath from the value encoded in an
# empty executable.
- _LT_SYS_MODULE_PATH_AIX
+ _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'
- # Exported symbols can be pulled into shared objects from archives
- _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ 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'
@@ -4698,20 +5137,64 @@ _LT_EOF
# Microsoft Visual C++.
# 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
- # 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 `$ECHO "X$deplibs" | $Xsed -e '\''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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
- _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ 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*)
@@ -4724,10 +5207,6 @@ _LT_EOF
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
;;
- freebsd1*)
- _LT_TAGVAR(ld_shlibs, $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
@@ -4740,7 +5219,7 @@ _LT_EOF
;;
# Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
+ 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
@@ -4749,7 +5228,7 @@ _LT_EOF
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _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
@@ -4757,7 +5236,7 @@ _LT_EOF
hpux9*)
if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ _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
@@ -4772,14 +5251,13 @@ _LT_EOF
;;
hpux10*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ 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_flag_spec_ld, $1)='+b $libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -4791,16 +5269,16 @@ _LT_EOF
;;
hpux11*)
- if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ 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 -fPIC ${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}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -4812,7 +5290,14 @@ _LT_EOF
_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
;;
*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -4840,19 +5325,34 @@ _LT_EOF
irix5* | irix6* | nonstopux*)
if test "$GCC" = yes; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _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.
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
- AC_LINK_IFELSE(int foo(void) {},
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
- )
- LDFLAGS="$save_LDFLAGS"
+ # 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" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ _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'
@@ -4914,17 +5414,17 @@ _LT_EOF
_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(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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _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'
@@ -4934,13 +5434,13 @@ _LT_EOF
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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $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'
@@ -4953,9 +5453,9 @@ _LT_EOF
_LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
if test "$GCC" = yes; then
wlarc='${wl}'
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _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 ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $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"*)
@@ -5131,36 +5631,38 @@ x|xyes)
# 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_MSG_CHECKING([whether -lc should be explicitly linked in])
- $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_TAGVAR(archive_cmds_need_lc, $1)=no
- else
- _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*
- AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+ 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
@@ -5197,9 +5699,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
_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_flag_spec_ld], [1],
- [[If ld is used when linking, 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],
@@ -5225,8 +5724,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
to runtime path list])
_LT_TAGDECL([], [link_all_deplibs], [0],
[Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
- [Fix the shell variable $srcfile for the compiler])
_LT_TAGDECL([], [always_export_symbols], [0],
[Set to "yes" if exported symbols are required])
_LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5237,6 +5734,8 @@ _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
@@ -5330,37 +5829,22 @@ CC="$lt_save_CC"
])# _LT_LANG_C_CONFIG
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-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
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
# _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],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+[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
@@ -5372,7 +5856,6 @@ _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_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -5382,6 +5865,8 @@ _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
@@ -5413,6 +5898,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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
@@ -5430,6 +5916,7 @@ if test "$_lt_caught_CXX_error" != yes; then
fi
test -z "${LDCXX+set}" || LD=$LDCXX
CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
@@ -5451,8 +5938,8 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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(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'
@@ -5484,7 +5971,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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 "\-L"'
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else
GXX=no
@@ -5593,10 +6080,10 @@ if test "$_lt_caught_CXX_error" != yes; then
_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an empty
# executable.
- _LT_SYS_MODULE_PATH_AIX
+ _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ _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'
@@ -5605,14 +6092,19 @@ if test "$_lt_caught_CXX_error" != yes; then
else
# Determine the default libpath from the value encoded in an
# empty executable.
- _LT_SYS_MODULE_PATH_AIX
+ _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'
- # Exported symbols can be pulled into shared objects from archives
- _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ 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.
@@ -5642,28 +6134,75 @@ if test "$_lt_caught_CXX_error" != yes; then
;;
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(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
- ;;
+ 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)
;;
@@ -5686,7 +6225,7 @@ if test "$_lt_caught_CXX_error" != yes; then
esac
;;
- freebsd[[12]]*)
+ freebsd2.*)
# C++ shared libraries reported to be fairly broken before
# switch to ELF
_LT_TAGVAR(ld_shlibs, $1)=no
@@ -5705,6 +6244,11 @@ if test "$_lt_caught_CXX_error" != yes; then
gnu*)
;;
+ 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)=:
@@ -5729,11 +6273,11 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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; $ECHO "X$list" | $Xsed'
+ 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 -fPIC ${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'
+ _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
@@ -5794,7 +6338,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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; $ECHO "X$list" | $Xsed'
+ 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
@@ -5804,10 +6348,10 @@ if test "$_lt_caught_CXX_error" != yes; then
_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 -fPIC ${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}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
;;
*)
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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
@@ -5837,7 +6381,7 @@ if test "$_lt_caught_CXX_error" != yes; then
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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _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
@@ -5848,9 +6392,9 @@ if test "$_lt_caught_CXX_error" != yes; then
*)
if test "$GXX" = yes; then
if test "$with_gnu_ld" = no; then
- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ _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
@@ -5879,7 +6423,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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; $ECHO "X$list" | $Xsed'
+ 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'
@@ -5916,26 +6460,26 @@ if test "$_lt_caught_CXX_error" != yes; then
pgCC* | pgcpp*)
# Portland Group C++ compiler
case `$CC -V` in
- *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+ *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 | $NL2SP`"'
+ 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 | $NL2SP`~
+ $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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ $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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ $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 will use weak symbols
+ *) # 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'
;;
@@ -5943,7 +6487,7 @@ if test "$_lt_caught_CXX_error" != yes; then
_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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _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++
@@ -5962,9 +6506,9 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ 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*)
+ 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'
@@ -5984,13 +6528,13 @@ if test "$_lt_caught_CXX_error" != yes; then
_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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _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='echo'
+ 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
@@ -6059,7 +6603,7 @@ if test "$_lt_caught_CXX_error" != yes; then
_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=echo
+ output_verbose_link_cmd=func_echo_all
else
_LT_TAGVAR(ld_shlibs, $1)=no
fi
@@ -6094,15 +6638,15 @@ if test "$_lt_caught_CXX_error" != yes; then
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" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _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" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _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 "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $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'
;;
@@ -6118,17 +6662,17 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _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 -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${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
@@ -6138,7 +6682,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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 "\-L"'
+ 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
@@ -6174,7 +6718,7 @@ if test "$_lt_caught_CXX_error" != yes; then
solaris*)
case $cc_basename in
- CC*)
+ 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'
@@ -6195,7 +6739,7 @@ if test "$_lt_caught_CXX_error" != yes; then
esac
_LT_TAGVAR(link_all_deplibs, $1)=yes
- output_verbose_link_cmd='echo'
+ 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
@@ -6215,14 +6759,14 @@ if test "$_lt_caught_CXX_error" != yes; then
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 -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _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 -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $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 "\-L"'
+ 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.
@@ -6233,7 +6777,7 @@ if test "$_lt_caught_CXX_error" != yes; then
# 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 "\-L"'
+ 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'
@@ -6287,6 +6831,10 @@ if test "$_lt_caught_CXX_error" != yes; then
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'
@@ -6342,6 +6890,7 @@ if test "$_lt_caught_CXX_error" != yes; then
fi # test -n "$compiler"
CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
LDCXX=$LD
LD=$lt_save_LD
GCC=$lt_save_GCC
@@ -6356,6 +6905,29 @@ 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
@@ -6364,6 +6936,7 @@ AC_LANG_POP
# 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)=
@@ -6413,7 +6986,20 @@ public class foo {
}
};
_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
@@ -6425,7 +7011,7 @@ if AC_TRY_EVAL(ac_compile); then
pre_test_object_deps_done=no
for p in `eval "$output_verbose_link_cmd"`; do
- case $p in
+ case ${prev}${p} in
-L* | -R* | -l*)
# Some compilers place space between "-{L,R}" and the path.
@@ -6434,13 +7020,22 @@ if AC_TRY_EVAL(ac_compile); then
test $p = "-R"; then
prev=$p
continue
- else
- prev=
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 $p in
- -L* | -R*)
+ 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.
@@ -6460,8 +7055,10 @@ if AC_TRY_EVAL(ac_compile); then
_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.
@@ -6497,6 +7094,7 @@ else
fi
$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
# PORTME: override above test on systems where it is broken
m4_if([$1], [CXX],
@@ -6533,7 +7131,7 @@ linux*)
solaris*)
case $cc_basename in
- CC*)
+ 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
@@ -6577,32 +7175,16 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
])# _LT_SYS_HIDDEN_LIBDEPS
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
- _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
# _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_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
+[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)=
@@ -6612,7 +7194,6 @@ _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_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6621,6 +7202,8 @@ _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
@@ -6660,7 +7243,9 @@ if test "$_lt_disable_F77" != yes; then
# 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])
@@ -6714,38 +7299,24 @@ if test "$_lt_disable_F77" != yes; then
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_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
- _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
# _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_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
+[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)=
@@ -6755,7 +7326,6 @@ _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_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6764,6 +7334,8 @@ _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
@@ -6803,7 +7375,9 @@ if test "$_lt_disable_FC" != yes; then
# 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
@@ -6859,7 +7433,8 @@ if test "$_lt_disable_FC" != yes; then
fi # test -n "$compiler"
GCC=$lt_save_GCC
- CC="$lt_save_CC"
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
fi # test "$_lt_disable_FC" != yes
AC_LANG_POP
@@ -6896,10 +7471,12 @@ _LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE
# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+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"
@@ -6909,6 +7486,8 @@ _LT_CC_BASENAME([$compiler])
_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
@@ -6928,10 +7507,82 @@ fi
AC_LANG_RESTORE
GCC=$lt_save_GCC
-CC="$lt_save_CC"
+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
@@ -6963,9 +7614,11 @@ _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])
@@ -6978,7 +7631,8 @@ fi
GCC=$lt_save_GCC
AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
])# _LT_LANG_RC_CONFIG
@@ -6998,6 +7652,13 @@ 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],
@@ -7037,6 +7698,15 @@ _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
# ------------
@@ -7130,8 +7800,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
# Try some XSI features
xsi_shell=no
( _lt_dummy="a/b/c"
- test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
- = c,a/b,, \
+ 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
@@ -7170,208 +7840,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
])# _LT_CHECK_SHELL_FEATURES
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
-
-# 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 ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
-}
-
-# func_basename file
-func_basename ()
-{
- func_basename_result="${1##*/}"
-}
-
-# 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 ()
-{
- case ${1} in
- */*) func_dirname_result="${1%/*}${2}" ;;
- * ) func_dirname_result="${3}" ;;
- esac
- func_basename_result="${1##*/}"
-}
-
-# 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_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}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=${1%%=*}
- func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- case ${1} in
- *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
- *) func_lo2o_result=${1} ;;
- esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=${1%.*}.lo
-}
+# _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=:
+])
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=$(( $[*] ))
-}
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=${#1}
-}
+# _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_EOF
- ;;
- *) # Bourne compatible functions.
- cat << \_LT_EOF >> "$cfgfile"
+ _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}"}])
-# 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 ()
-{
- # Extract subdirectory from the argument.
- func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
- if test "X$func_dirname_result" = "X${1}"; then
- func_dirname_result="${3}"
- else
- func_dirname_result="$func_dirname_result${2}"
- fi
-}
+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+ func_split_long_opt_name=${1%%=*}
+ func_split_long_opt_arg=${1#*=}])
-# func_basename file
-func_basename ()
-{
- func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
+ _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"}])
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac])
-# 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 "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
- *) func_stripname_result=`$ECHO "X${3}" \
- | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
- esac
-}
+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
-# func_opt_split
-func_opt_split ()
-{
- func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
- func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
- func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
- func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
+fi
-# func_arith arithmetic-term...
-func_arith ()
-{
- func_arith_result=`expr "$[@]"`
-}
+if test x"$lt_shell_append" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
- func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
+ _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"])
-_LT_EOF
-esac
+ # 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
-case $lt_shell_append in
- yes)
- cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _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
;;
- *)
- cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
- eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+ *-*-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
;;
- 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
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 34151a3..5d9acd8 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,13 +1,14 @@
# Helper functions for option handling. -*- Autoconf -*-
#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# 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 6 ltoptions.m4
+# 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])])
@@ -125,7 +126,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes
case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
@@ -133,13 +134,13 @@ case $host in
esac
test -z "$AS" && AS=as
-_LT_DECL([], [AS], [0], [Assembler program])dnl
+_LT_DECL([], [AS], [1], [Assembler program])dnl
test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
])# win32-dll
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
@@ -325,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# 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],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
+ [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])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index f3c5309..07a8602 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -7,17 +7,17 @@
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
-# Generated from ltversion.in.
+# @configure_input@
-# serial 3017 ltversion.m4
+# serial 3337 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[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)
])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index 637bb20..c573da9 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,13 +1,13 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
-# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# 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 4 lt~obsolete.m4
+# serial 5 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
@@ -77,7 +77,6 @@ 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_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
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])])
@@ -90,3 +89,10 @@ 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])])
diff --git a/m4/scilab.m4 b/m4/scilab.m4
index 9178c2a..b644695 100644
--- a/m4/scilab.m4
+++ b/m4/scilab.m4
@@ -60,7 +60,7 @@ AC_DEFUN([AC_CHECK_SCILAB],
else
AC_CHECK_PROG([has_scilab],[scilab],[yes],[no], , )
if test x$has_scilab = xno; then
- AC_MSG_ERROR([[Scilab binary program was found in your PATH], your PATH is $PATH])
+ AC_MSG_ERROR([[Scilab binary program was not found in your PATH], your PATH is $PATH])
fi
SCILAB_EXE="scilab"
AC_DEFINE(HAVE_SCILAB)
diff --git a/missing b/missing
index 28055d2..86a8fc3 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,10 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.13; # UTC
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -84,7 +84,6 @@ Supported PROGRAM values:
help2man touch the output file
lex create \`lex.yy.c', if possible, from existing .c
makeinfo touch the output file
- tar try tar, gnutar, gtar, then tar without non-portable flags
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
@@ -122,15 +121,6 @@ case $1 in
# Not GNU programs, they don't have --version.
;;
- tar*)
- if test -n "$run"; then
- echo 1>&2 "ERROR: \`tar' requires --run"
- exit 1
- elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
- exit 1
- fi
- ;;
-
*)
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
# We have it, but it failed.
@@ -226,7 +216,7 @@ WARNING: \`$1' $msg. You should only need it if
\`Bison' from any GNU archive site."
rm -f y.tab.c y.tab.h
if test $# -ne 1; then
- eval LASTARG="\${$#}"
+ eval LASTARG=\${$#}
case $LASTARG in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -256,7 +246,7 @@ WARNING: \`$1' is $msg. You should only need it if
\`Flex' from any GNU archive site."
rm -f lex.yy.c
if test $# -ne 1; then
- eval LASTARG="\${$#}"
+ eval LASTARG=\${$#}
case $LASTARG in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -318,41 +308,6 @@ WARNING: \`$1' is $msg. You should only need it if
touch $file
;;
- tar*)
- shift
-
- # We have already tried tar in the generic part.
- # Look for gnutar/gtar before invocation to avoid ugly error
- # messages.
- if (gnutar --version > /dev/null 2>&1); then
- gnutar "$@" && exit 0
- fi
- if (gtar --version > /dev/null 2>&1); then
- gtar "$@" && exit 0
- fi
- firstarg="$1"
- if shift; then
- case $firstarg in
- *o*)
- firstarg=`echo "$firstarg" | sed s/o//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- case $firstarg in
- *h*)
- firstarg=`echo "$firstarg" | sed s/h//`
- tar "$firstarg" "$@" && exit 0
- ;;
- esac
- fi
-
- echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
- You may want to install GNU tar or Free paxutils, or check the
- command line arguments."
- exit 1
- ;;
-
*)
echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
diff --git a/py-compile b/py-compile
deleted file mode 100755
index 3f9d05b..0000000
--- a/py-compile
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/bin/sh
-# py-compile - Compile a Python program
-
-scriptversion=2009-04-28.21; # UTC
-
-# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 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 <http://www.gnu.org/licenses/>.
-
-# 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 <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-if [ -z "$PYTHON" ]; then
- PYTHON=python
-fi
-
-basedir=
-destdir=
-files=
-while test $# -ne 0; do
- case "$1" in
- --basedir)
- basedir=$2
- if test -z "$basedir"; then
- echo "$0: Missing argument to --basedir." 1>&2
- exit 1
- fi
- shift
- ;;
- --destdir)
- destdir=$2
- if test -z "$destdir"; then
- echo "$0: Missing argument to --destdir." 1>&2
- exit 1
- fi
- shift
- ;;
- -h|--h*)
- cat <<\EOF
-Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
-
-Byte compile some python scripts FILES. Use --destdir to specify any
-leading directory path to the FILES that you don't want to include in the
-byte compiled file. Specify --basedir for any additional path information you
-do want to be shown in the byte compiled file.
-
-Example:
- py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
-
-Report bugs to <bug-automake at gnu.org>.
-EOF
- exit $?
- ;;
- -v|--v*)
- echo "py-compile $scriptversion"
- exit $?
- ;;
- *)
- files="$files $1"
- ;;
- esac
- shift
-done
-
-if test -z "$files"; then
- echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
- exit 1
-fi
-
-# if basedir was given, then it should be prepended to filenames before
-# byte compilation.
-if [ -z "$basedir" ]; then
- pathtrans="path = file"
-else
- pathtrans="path = os.path.join('$basedir', file)"
-fi
-
-# if destdir was given, then it needs to be prepended to the filename to
-# byte compile but not go into the compiled file.
-if [ -z "$destdir" ]; then
- filetrans="filepath = path"
-else
- filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
-fi
-
-$PYTHON -c "
-import sys, os, py_compile
-
-files = '''$files'''
-
-sys.stdout.write('Byte-compiling python modules...\n')
-for file in files.split():
- $pathtrans
- $filetrans
- if not os.path.exists(filepath) or not (len(filepath) >= 3
- and filepath[-3:] == '.py'):
- continue
- sys.stdout.write(file)
- sys.stdout.flush()
- py_compile.compile(filepath, filepath + 'c', path)
-sys.stdout.write('\n')" || exit $?
-
-# this will fail for python < 1.5, but that doesn't matter ...
-$PYTHON -O -c "
-import sys, os, py_compile
-
-files = '''$files'''
-sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n')
-for file in files.split():
- $pathtrans
- $filetrans
- if not os.path.exists(filepath) or not (len(filepath) >= 3
- and filepath[-3:] == '.py'):
- continue
- sys.stdout.write(file)
- sys.stdout.flush()
- py_compile.compile(filepath, filepath + 'o', path)
-sys.stdout.write('\n')" 2>/dev/null || :
-
-# 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:
diff --git a/src/Makefile.am b/src/Makefile.am
index 7e3fed4..480eb0f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -34,7 +34,6 @@ nobase_include_HEADERS = \
gmm/gmm_solver_bicgstab.h \
gmm/gmm_solver_Schwarz_additive.h \
gmm/gmm_solver_bfgs.h \
- gmm/gmm_solver_Newton.h \
gmm/gmm_domain_decomp.h \
gmm/gmm_superlu_interface.h \
gmm/gmm_precond.h \
@@ -101,6 +100,7 @@ nobase_include_HEADERS = \
getfem/getfem_derivatives.h \
getfem/getfem_fem.h \
getfem/getfem_interpolated_fem.h \
+ getfem/getfem_projected_fem.h \
getfem/getfem_mesh_fem_global_function.h \
getfem/getfem_mesh_fem_sum.h \
getfem/getfem_gauss_lobatto_fem_coef.h \
@@ -131,12 +131,16 @@ nobase_include_HEADERS = \
getfem/getfem_models.h \
getfem/getfem_model_solvers.h \
getfem/getfem_linearized_plates.h \
+ getfem/getfem_contact_and_friction_common.h \
+ getfem/getfem_contact_and_friction_nodal.h \
+ getfem/getfem_contact_and_friction_integral.h \
getfem/getfem_Coulomb_friction.h \
getfem/getfem_nonlinear_elasticity.h \
getfem/getfem_fourth_order.h \
getfem/getfem_Navier_Stokes.h \
getfem/getfem_superlu.h \
getfem/getfem_plasticity.h \
+ getfem/getfem_continuation.h \
getfem/getfem_mesher.h \
getfem/getfem_convect.h
@@ -170,6 +174,7 @@ SRC = \
getfem_integration_composite.cc \
getfem_fem.cc \
getfem_interpolated_fem.cc \
+ getfem_projected_fem.cc \
getfem_mesh_fem_global_function.cc \
getfem_Xfem.cc \
getfem_fem_composite.cc \
@@ -197,8 +202,10 @@ SRC = \
getfem_model_solvers.cc \
getfem_fourth_order.cc \
getfem_nonlinear_elasticity.cc \
- getfem_Coulomb_friction.cc \
- getfem_plasticity.cc
+ getfem_contact_and_friction_nodal.cc \
+ getfem_contact_and_friction_integral.cc \
+ getfem_plasticity.cc
+# getfem_enumeration_dof_para.cc
lib_LTLIBRARIES = libgetfem.la
libgetfem_la_SOURCES = $(SRC)
diff --git a/src/Makefile.in b/src/Makefile.in
index 1b64d9d..feb1e32 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -73,6 +73,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
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)$(includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libgetfem_la_DEPENDENCIES =
@@ -87,8 +93,9 @@ am__objects_1 = dal_backtrace.lo dal_bit_vector.lo dal_singleton.lo \
getfem_mesh.lo getfem_mesh_region.lo getfem_context.lo \
getfem_mesh_fem.lo getfem_mesh_im.lo getfem_integration.lo \
getfem_integration_composite.lo getfem_fem.lo \
- getfem_interpolated_fem.lo getfem_mesh_fem_global_function.lo \
- getfem_Xfem.lo getfem_fem_composite.lo getfem_mat_elem.lo \
+ getfem_interpolated_fem.lo getfem_projected_fem.lo \
+ getfem_mesh_fem_global_function.lo getfem_Xfem.lo \
+ getfem_fem_composite.lo getfem_mat_elem.lo \
getfem_mat_elem_type.lo getfem_inter_element.lo \
getfem_level_set.lo getfem_mesh_level_set.lo \
getfem_mesh_im_level_set.lo getfem_mesh_fem_level_set.lo \
@@ -100,7 +107,8 @@ am__objects_1 = dal_backtrace.lo dal_bit_vector.lo dal_singleton.lo \
getfem_assembling_tensors.lo getfem_mesher.lo \
getfem_modeling.lo getfem_models.lo getfem_model_solvers.lo \
getfem_fourth_order.lo getfem_nonlinear_elasticity.lo \
- getfem_Coulomb_friction.lo getfem_plasticity.lo
+ getfem_contact_and_friction_nodal.lo \
+ getfem_contact_and_friction_integral.lo getfem_plasticity.lo
am_libgetfem_la_OBJECTS = $(am__objects_1)
libgetfem_la_OBJECTS = $(am_libgetfem_la_OBJECTS)
libgetfem_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
@@ -149,6 +157,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -167,6 +176,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -183,6 +193,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -247,6 +258,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -282,7 +294,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -338,7 +349,6 @@ nobase_include_HEADERS = \
gmm/gmm_solver_bicgstab.h \
gmm/gmm_solver_Schwarz_additive.h \
gmm/gmm_solver_bfgs.h \
- gmm/gmm_solver_Newton.h \
gmm/gmm_domain_decomp.h \
gmm/gmm_superlu_interface.h \
gmm/gmm_precond.h \
@@ -405,6 +415,7 @@ nobase_include_HEADERS = \
getfem/getfem_derivatives.h \
getfem/getfem_fem.h \
getfem/getfem_interpolated_fem.h \
+ getfem/getfem_projected_fem.h \
getfem/getfem_mesh_fem_global_function.h \
getfem/getfem_mesh_fem_sum.h \
getfem/getfem_gauss_lobatto_fem_coef.h \
@@ -435,12 +446,16 @@ nobase_include_HEADERS = \
getfem/getfem_models.h \
getfem/getfem_model_solvers.h \
getfem/getfem_linearized_plates.h \
+ getfem/getfem_contact_and_friction_common.h \
+ getfem/getfem_contact_and_friction_nodal.h \
+ getfem/getfem_contact_and_friction_integral.h \
getfem/getfem_Coulomb_friction.h \
getfem/getfem_nonlinear_elasticity.h \
getfem/getfem_fourth_order.h \
getfem/getfem_Navier_Stokes.h \
getfem/getfem_superlu.h \
getfem/getfem_plasticity.h \
+ getfem/getfem_continuation.h \
getfem/getfem_mesher.h \
getfem/getfem_convect.h
@@ -474,6 +489,7 @@ SRC = \
getfem_integration_composite.cc \
getfem_fem.cc \
getfem_interpolated_fem.cc \
+ getfem_projected_fem.cc \
getfem_mesh_fem_global_function.cc \
getfem_Xfem.cc \
getfem_fem_composite.cc \
@@ -501,9 +517,11 @@ SRC = \
getfem_model_solvers.cc \
getfem_fourth_order.cc \
getfem_nonlinear_elasticity.cc \
- getfem_Coulomb_friction.cc \
- getfem_plasticity.cc
+ getfem_contact_and_friction_nodal.cc \
+ getfem_contact_and_friction_integral.cc \
+ getfem_plasticity.cc
+# getfem_enumeration_dof_para.cc
lib_LTLIBRARIES = libgetfem.la
libgetfem_la_SOURCES = $(SRC)
libgetfem_la_LDFLAGS = ${LIBTOOL_VERSION_INFO}
@@ -576,7 +594,7 @@ clean-libLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libgetfem.la: $(libgetfem_la_OBJECTS) $(libgetfem_la_DEPENDENCIES)
+libgetfem.la: $(libgetfem_la_OBJECTS) $(libgetfem_la_DEPENDENCIES) $(EXTRA_libgetfem_la_DEPENDENCIES)
$(libgetfem_la_LINK) -rpath $(libdir) $(libgetfem_la_OBJECTS) $(libgetfem_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -604,9 +622,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_bit_vector.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_singleton.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dal_static_stored_objects.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_Coulomb_friction.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_Xfem.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_assembling_tensors.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_contact_and_friction_integral.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_contact_and_friction_nodal.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_context.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_export.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_fem.Plo at am__quote@
@@ -641,6 +660,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_nonlinear_elasticity.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_partial_mesh_fem.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_plasticity.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_projected_fem.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_regular_meshes.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfem_superlu.Plo at am__quote@
@@ -690,9 +710,7 @@ uninstall-nobase_includeHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(includedir)" && rm -f $$files
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -793,10 +811,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/src/bgeot_convex_ref.cc b/src/bgeot_convex_ref.cc
index cb9d9c0..5f0c594 100644
--- a/src/bgeot_convex_ref.cc
+++ b/src/bgeot_convex_ref.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include "getfem/bgeot_convex_ref.h"
@@ -143,14 +143,15 @@ namespace bgeot {
}
scalar_type is_in_face(short_type f, const base_node &pt) const {
// return a null number if pt is in the face of the convex
+ // negative if the point is on the side of the face where the element is
if (pt.size() != cvs->dim())
throw dimension_error
("K_simplex_of_ref_::is_in_face : Dimension does not match");
- if (f > 0) return gmm::abs(pt[f-1]);
+ if (f > 0) return -pt[f-1];
scalar_type e = -1.0;
base_node::const_iterator it = pt.begin(), ite = pt.end();
for (; it != ite; e += *it, ++it) {};
- return gmm::abs(e);
+ return e / sqrt(scalar_type(pt.size()));
}
K_simplex_of_ref_(dim_type NN, short_type KK) {
cvs = simplex_structure(NN, KK);
@@ -310,7 +311,7 @@ namespace bgeot {
scalar_type is_in_face(short_type f, const base_node &pt) const {
const base_node &x0 = (f ? convex<base_node>::points()[f-1]
: convex<base_node>::points().back());
- return gmm::abs(gmm::vect_sp(pt-x0, normals()[f]));
+ return gmm::vect_sp(pt-x0, normals()[f]);
}
equilateral_simplex_of_ref_(size_type N) {
pconvex_ref prev = equilateral_simplex_of_reference(dim_type(N-1));
diff --git a/src/bgeot_convex_ref_simplexified.cc b/src/bgeot_convex_ref_simplexified.cc
old mode 100755
new mode 100644
index e3bb9e6..b0c58a3
--- a/src/bgeot_convex_ref_simplexified.cc
+++ b/src/bgeot_convex_ref_simplexified.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_convex_ref.h"
diff --git a/src/bgeot_convex_structure.cc b/src/bgeot_convex_structure.cc
index 56d95c6..311748f 100644
--- a/src/bgeot_convex_structure.cc
+++ b/src/bgeot_convex_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
diff --git a/src/bgeot_ftool.cc b/src/bgeot_ftool.cc
index 7cf05e6..e4ddc38 100644
--- a/src/bgeot_ftool.cc
+++ b/src/bgeot_ftool.cc
@@ -1,30 +1,32 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_config.h"
#include "getfem/bgeot_ftool.h"
#include <ctype.h>
#include <limits.h>
-#include <unistd.h>
+#ifndef WIN32
+# include <unistd.h>
+#endif
#include <fstream>
#include "gmm/gmm_def.h"
diff --git a/src/bgeot_geometric_trans.cc b/src/bgeot_geometric_trans.cc
index e2ec33e..1f44f5e 100644
--- a/src/bgeot_geometric_trans.cc
+++ b/src/bgeot_geometric_trans.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
@@ -28,18 +28,18 @@
namespace bgeot {
- const base_node& geotrans_interpolation_context::xref() const {
+ const base_node& geotrans_interpolation_context::xref() const {
if (!have_xref()) {
if (pspt_) xref_ = (*pspt_)[ii_];
else GMM_ASSERT1(false, "missing xref");
}
- return xref_;
+ return xref_;
}
const base_node& geotrans_interpolation_context::xreal() const {
if (!have_xreal()) {
if (have_pgp()) {
- xreal_ = pgp_->transform(ii_, G());
+ xreal_ = pgp_->transform(ii_, G());
} else xreal_ = pgt()->transform(xref(),G());
}
return xreal_;
@@ -64,17 +64,17 @@ namespace bgeot {
size_type P = pgt_->structure()->dim();
K_.resize(N(), P);
if (have_pgp()) {
-
- if (&pgp_->grad(ii_) == 0) { cerr << "OULA!! " << ii_ << "\n"; }
- else if (pgp_->grad(ii_).size() == 0) { cerr << "OUCH\n"; }
-
- assert(ii_ < pgp_->get_point_tab().size());
-
- gmm::mult(G(), pgp_->grad(ii_), K_);
+
+ if (&pgp_->grad(ii_) == 0) { cerr << "OULA!! " << ii_ << "\n"; }
+ else if (pgp_->grad(ii_).size() == 0) { cerr << "OUCH\n"; }
+
+ assert(ii_ < pgp_->get_point_tab().size());
+
+ gmm::mult(G(), pgp_->grad(ii_), K_);
} else {
- base_matrix pc(pgt()->nb_points(), P);
- pgt()->poly_vector_grad(xref(), pc);
- gmm::mult(G(),pc,K_);
+ base_matrix pc(pgt()->nb_points(), P);
+ pgt()->poly_vector_grad(xref(), pc);
+ gmm::mult(G(),pc,K_);
}
}
return K_;
@@ -82,18 +82,18 @@ namespace bgeot {
const base_matrix& geotrans_interpolation_context::B() const {
if (!have_B()) {
- GMM_ASSERT1(have_G() && have_pgt(), "unable to compute K\n");
+ GMM_ASSERT1(have_G() && have_pgt(), "unable to compute B\n");
size_type P = pgt_->structure()->dim();
B_.resize(N(), P);
if (P != N()) {
- base_matrix CS(P,P);
- gmm::mult(gmm::transposed(K()), K(), CS);
- // gmm::abs below because on flat convexes determinant could be -1e-27.
- J_ = ::sqrt(gmm::abs(gmm::lu_inverse(CS)));
- gmm::mult(K(), CS, B_);
+ base_matrix CS(P,P);
+ gmm::mult(gmm::transposed(K()), K(), CS);
+ // gmm::abs below because on flat convexes determinant could be -1e-27.
+ J_ = ::sqrt(gmm::abs(gmm::lu_inverse(CS)));
+ gmm::mult(K(), CS, B_);
} else {
- gmm::copy(gmm::transposed(K()), B_);
- J_ = gmm::abs(gmm::lu_inverse(B_));
+ gmm::copy(gmm::transposed(K()), B_);
+ J_ = gmm::abs(gmm::lu_inverse(B_));
}
}
return B_;
@@ -101,49 +101,49 @@ namespace bgeot {
const base_matrix& geotrans_interpolation_context::B3() const {
if (!have_B3()) {
- const base_matrix &BB = B();
+ const base_matrix &BB = B();
size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);
B3_.resize(N_*N_, P*P);
for (short_type i = 0; i < P; ++i)
- for (short_type j = 0; j < P; ++j)
- for (short_type k = 0; k < N_; ++k)
- for (short_type l = 0; l < N_; ++l)
- B3_(k + N_*l, i + P*j) = BB(k, i) * BB(l, j);
+ for (short_type j = 0; j < P; ++j)
+ for (short_type k = 0; k < N_; ++k)
+ for (short_type l = 0; l < N_; ++l)
+ B3_(k + N_*l, i + P*j) = BB(k, i) * BB(l, j);
}
return B3_;
}
const base_matrix& geotrans_interpolation_context::B32() const {
if (!have_B32()) {
- const base_matrix &BB = B();
- size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);
+ const base_matrix &BB = B();
+ size_type P=gmm::mat_ncols(BB), N_=gmm::mat_nrows(BB);
B32_.resize(N_*N_, P);
if (!pgt()->is_linear()) {
- base_matrix B2(P*P, P), Htau(N_, P*P);
- if (have_pgp()) {
- gmm::mult(G(), pgp_->hessian(ii_), Htau);
- } else {
- /* very inefficient of course... */
- base_matrix pc(pgt()->nb_points(), P*P);
- pgt()->poly_vector_hess(xref(), pc);
- gmm::mult(G(), pc, Htau);
- }
- for (short_type i = 0; i < P; ++i)
- for (short_type j = 0; j < P; ++j)
- for (short_type k = 0; k < P; ++k)
- for (short_type l = 0; l < N_; ++l)
- B2(i + P*j, k) += Htau(l, i + P*j) * BB(l,k);
- gmm::mult(B3(), B2, B32_);
+ base_matrix B2(P*P, P), Htau(N_, P*P);
+ if (have_pgp()) {
+ gmm::mult(G(), pgp_->hessian(ii_), Htau);
+ } else {
+ /* very inefficient of course... */
+ base_matrix pc(pgt()->nb_points(), P*P);
+ pgt()->poly_vector_hess(xref(), pc);
+ gmm::mult(G(), pc, Htau);
+ }
+ for (short_type i = 0; i < P; ++i)
+ for (short_type j = 0; j < P; ++j)
+ for (short_type k = 0; k < P; ++k)
+ for (short_type l = 0; l < N_; ++l)
+ B2(i + P*j, k) += Htau(l, i + P*j) * BB(l,k);
+ gmm::mult(B3(), B2, B32_);
} else gmm::clear(B32_);
}
return B32_;
}
-
- void geotrans_interpolation_context::set_ii(size_type ii__) {
+
+ void geotrans_interpolation_context::set_ii(size_type ii__) {
if (ii_ == ii__) return;
if (have_K() && !pgt()->is_linear()) { K_.resize(0,0); }
if (have_B() && !pgt()->is_linear()) { B_.resize(0,0); }
- if (have_B3() && !pgt()->is_linear()) {
+ if (have_B3() && !pgt()->is_linear()) {
B3_.resize(0,0); B32_.resize(0,0); }
xref_.clear(); xreal_.clear();
ii_=ii__; J_ = scalar_type(-1);
@@ -153,7 +153,7 @@ namespace bgeot {
xref_ = P;
if (have_K() && !pgt()->is_linear()) { K_.resize(0,0); }
if (have_B() && !pgt()->is_linear()) { B_.resize(0,0); }
- if (have_B3() && !pgt()->is_linear()) {
+ if (have_B3() && !pgt()->is_linear()) {
B3_.resize(0,0); B32_.resize(0,0); }
xreal_.clear(); ii_ = size_type(-1); J_ = scalar_type(-1); pspt_ = 0;
}
@@ -162,24 +162,24 @@ namespace bgeot {
G_(0), pgt_(0), pgp_(0), pspt_(0), ii_(size_type(-1)), J_(-1) {}
geotrans_interpolation_context::geotrans_interpolation_context
(bgeot::pgeotrans_precomp pgp__, size_type ii__, const base_matrix& G__) :
- G_(&G__), pgt_(pgp__->get_trans()), pgp_(pgp__),
+ G_(&G__), pgt_(pgp__->get_trans()), pgp_(pgp__),
pspt_(&pgp__->get_point_tab()), ii_(ii__), J_(-1) {}
geotrans_interpolation_context::geotrans_interpolation_context
- (bgeot::pgeometric_trans pgt__, bgeot::pstored_point_tab pspt__,
+ (bgeot::pgeometric_trans pgt__, bgeot::pstored_point_tab pspt__,
size_type ii__, const base_matrix& G__) :
- G_(&G__), pgt_(pgt__), pgp_(0),
+ G_(&G__), pgt_(pgt__), pgp_(0),
pspt_(pspt__), ii_(ii__), J_(-1) {}
geotrans_interpolation_context::geotrans_interpolation_context
(bgeot::pgeometric_trans pgt__, const base_node& xref__,
const base_matrix& G__) :
- xref_(xref__), G_(&G__), pgt_(pgt__), pgp_(0), pspt_(0),
+ xref_(xref__), G_(&G__), pgt_(pgt__), pgp_(0), pspt_(0),
ii_(size_type(-1)), J_(-1) {}
-
+
typedef dal::naming_system<geometric_trans>::param_list gt_param_list;
- base_node geometric_trans::transform(const base_node &pt,
- const base_matrix &G) const {
+ base_node geometric_trans::transform(const base_node &pt,
+ const base_matrix &G) const {
size_type N = G.nrows(), k = nb_points();
base_node P(N); base_vector val(k);
poly_vector_val(pt, val);
@@ -197,9 +197,9 @@ namespace bgeot {
for (size_type ip = 0; ip < nb_points(); ++ip) {
bool vertex = true;
for (size_type i = 0; i < cvr->points()[ip].size(); ++i)
- if (gmm::abs(cvr->points()[ip][i]) > 1e-10
- && gmm::abs(cvr->points()[ip][i]-1.0) > 1e-10)
- { vertex = false; break; }
+ if (gmm::abs(cvr->points()[ip][i]) > 1e-10
+ && gmm::abs(cvr->points()[ip][i]-1.0) > 1e-10)
+ { vertex = false; break; }
if (vertex) vertices_.push_back(ip);
}
assert(vertices_.size() >= dim());
@@ -217,33 +217,54 @@ namespace bgeot {
virtual void poly_vector_val(const base_node &pt, base_vector &val) const {
val.resize(nb_points());
for (size_type k = 0; k < nb_points(); ++k)
- val[k] = trans[k].eval(pt.begin());
+ val[k] = trans[k].eval(pt.begin());
+ }
+
+ virtual void poly_vector_val(const base_node &pt, const convex_ind_ct &ind_ct,
+ base_vector &val) const {
+ size_type nb_funcs=ind_ct.size();
+ val.resize(nb_funcs);
+ for (size_type k = 0; k < nb_funcs; ++k)
+ val[k] = trans[ind_ct[k]].eval(pt.begin());
}
virtual void poly_vector_grad(const base_node &pt, base_matrix &pc) const {
FUNC PP;
pc.resize(nb_points(),dim());
for (size_type i = 0; i < nb_points(); ++i)
- for (dim_type n = 0; n < dim(); ++n) {
- PP = trans[i];
- PP.derivative(n);
- pc(i, n) = PP.eval(pt.begin());
- }
+ for (dim_type n = 0; n < dim(); ++n) {
+ PP = trans[i];
+ PP.derivative(n);
+ pc(i, n) = PP.eval(pt.begin());
+ }
+ }
+
+ virtual void poly_vector_grad(const base_node &pt, const convex_ind_ct &ind_ct,
+ base_matrix &pc) const {
+ FUNC PP;
+ size_type nb_funcs=ind_ct.size();
+ pc.resize(nb_funcs,dim());
+ for (size_type i = 0; i < nb_funcs; ++i)
+ for (dim_type n = 0; n < dim(); ++n) {
+ PP = trans[ind_ct[i]];
+ PP.derivative(n);
+ pc(i, n) = PP.eval(pt.begin());
+ }
}
virtual void poly_vector_hess(const base_node &pt, base_matrix &pc) const {
FUNC PP, QP;
pc.resize(nb_points(),dim()*dim());
for (size_type i = 0; i < nb_points(); ++i)
- for (dim_type n = 0; n < dim(); ++n) {
- QP = trans[i]; QP.derivative(n);
- for (dim_type m = 0; m <= n; ++m) {
- PP = QP; PP.derivative(m);
- pc(i, n*dim()+m) = pc(i, m*dim()+n) = PP.eval(pt.begin());
- }
- }
+ for (dim_type n = 0; n < dim(); ++n) {
+ QP = trans[i]; QP.derivative(n);
+ for (dim_type m = 0; m <= n; ++m) {
+ PP = QP; PP.derivative(m);
+ pc(i, n*dim()+m) = pc(i, m*dim()+n) = PP.eval(pt.begin());
+ }
+ }
}
-
+
};
typedef igeometric_trans<base_poly> poly_geometric_trans;
@@ -260,21 +281,21 @@ namespace bgeot {
power_index w(short_type(N+1));
l0.one(); l1.one(); p = l0;
for (short_type nn = 0; nn < N; ++nn) l0 -= base_poly(N, 1, nn);
-
+
w[0] = K;
for (int nn = 1; nn <= N; ++nn) {
- w[nn]=short_type(floor(0.5+(((cvr->points())[i])[nn-1]*double(K))));
- w[0]=short_type(w[0]-w[nn]);
+ w[nn]=short_type(floor(0.5+(((cvr->points())[i])[nn-1]*double(K))));
+ w[0]=short_type(w[0]-w[nn]);
}
-
+
for (short_type nn = 0; nn <= N; ++nn)
- for (short_type j = 0; j < w[nn]; ++j)
- if (nn == 0)
- p *= (l0 * (scalar_type(K) / scalar_type(j+1)))
- - (l1 * (scalar_type(j) / scalar_type(j+1)));
- else
- p *= (base_poly(N, 1, short_type(nn-1)) * (scalar_type(K) / scalar_type(j+1)))
- - (l1 * (scalar_type(j) / scalar_type(j+1)));
+ for (short_type j = 0; j < w[nn]; ++j)
+ if (nn == 0)
+ p *= (l0 * (scalar_type(K) / scalar_type(j+1)))
+ - (l1 * (scalar_type(j) / scalar_type(j+1)));
+ else
+ p *= (base_poly(N, 1, short_type(nn-1)) * (scalar_type(K) / scalar_type(j+1)))
+ - (l1 * (scalar_type(j) / scalar_type(j+1)));
}
simplex_trans_(dim_type nc, short_type k) {
@@ -290,16 +311,16 @@ namespace bgeot {
static pgeometric_trans
PK_gt(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &dependencies) {
+ std::vector<dal::pstatic_stored_object> &dependencies) {
GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
- << params.size() << " should be 2.");
+ << params.size() << " should be 2.");
GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
- "Bad type of parameters");
+ "Bad type of parameters");
int n = int(::floor(params[0].num() + 0.01));
int k = int(::floor(params[1].num() + 0.01));
GMM_ASSERT1(n >= 0 && n < 100 && k >= 0 && k <= 150 &&
- double(n) == params[0].num() && double(k) == params[1].num(),
- "Bad parameters");
+ double(n) == params[0].num() && double(k) == params[1].num(),
+ "Bad parameters");
dependencies.push_back(simplex_of_reference(dim_type(n), dim_type(k)));
return new simplex_trans_(dim_type(n), dim_type(k));
}
@@ -317,33 +338,33 @@ namespace bgeot {
size_type n1 = a->nb_points(), n2 = b->nb_points();
trans.resize(n1 * n2);
for (size_type i1 = 0; i1 < n1; ++i1)
- for (size_type i2 = 0; i2 < n2; ++i2) {
- trans[i1 + i2 * n1] = a->trans[i1];
- trans[i1 + i2 * n1].direct_product(b->trans[i2]);
- }
+ for (size_type i2 = 0; i2 < n2; ++i2) {
+ trans[i1 + i2 * n1] = a->trans[i1];
+ trans[i1 + i2 * n1].direct_product(b->trans[i2]);
+ }
for (size_type i2 = 0; i2 < b->nb_vertices(); ++i2)
- for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
- vertices_.push_back(a->vertices()[i1] + b->vertices()[i2] * n1);
+ for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
+ vertices_.push_back(a->vertices()[i1] + b->vertices()[i2] * n1);
}
};
static pgeometric_trans product_gt(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &dependencies) {
+ std::vector<dal::pstatic_stored_object> &dependencies) {
GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
- << params.size() << " should be 2.");
+ << params.size() << " should be 2.");
GMM_ASSERT1(params[0].type() == 1 && params[1].type() == 1,
- "Bad type of parameters");
+ "Bad type of parameters");
pgeometric_trans a = params[0].method();
pgeometric_trans b = params[1].method();
dependencies.push_back(a); dependencies.push_back(b);
dependencies.push_back(convex_ref_product(a->convex_ref(),
- b->convex_ref()));
+ b->convex_ref()));
const poly_geometric_trans *aa
= dynamic_cast<const poly_geometric_trans *>(a.get());
const poly_geometric_trans *bb
= dynamic_cast<const poly_geometric_trans *>(b.get());
GMM_ASSERT1(aa && bb, "The product of geometric transformations "
- "is only defined for polynomial ones");
+ "is only defined for polynomial ones");
return new cv_pr_t_(aa, bb);
}
@@ -354,7 +375,7 @@ namespace bgeot {
struct cv_pr_tl_ : public poly_geometric_trans {
cv_pr_tl_(const poly_geometric_trans *a, const poly_geometric_trans *b) {
GMM_ASSERT1(a->is_linear() && b->is_linear(),
- "linear product of non-linear transformations");
+ "linear product of non-linear transformations");
cvr = convex_ref_product(a->convex_ref(), b->convex_ref());
is_lin = true;
complexity_ = std::max(a->complexity(), b->complexity());
@@ -369,32 +390,32 @@ namespace bgeot {
= dynamic_cast<const poly_geometric_trans *>(pgt_.get());
for (size_type i = 0; i <= dim(); ++i)
- trans[cvr->structure()->ind_dir_points()[i]]
- = pgt->trans[i];
+ trans[cvr->structure()->ind_dir_points()[i]]
+ = pgt->trans[i];
for (size_type i2 = 0; i2 < b->nb_vertices(); ++i2)
- for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
- vertices_.push_back(a->vertices()[i1]
- + b->vertices()[i2] * a->nb_points());
+ for (size_type i1 = 0; i1 < a->nb_vertices(); ++i1)
+ vertices_.push_back(a->vertices()[i1]
+ + b->vertices()[i2] * a->nb_points());
}
};
static pgeometric_trans linear_product_gt(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &dependencies) {
+ std::vector<dal::pstatic_stored_object> &dependencies) {
GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
- << params.size() << " should be 2.");
+ << params.size() << " should be 2.");
GMM_ASSERT1(params[0].type() == 1 && params[1].type() == 1,
- "Bad type of parameters");
+ "Bad type of parameters");
pgeometric_trans a = params[0].method();
pgeometric_trans b = params[1].method();
dependencies.push_back(a); dependencies.push_back(b);
dependencies.push_back(convex_ref_product(a->convex_ref(),
- b->convex_ref()));
+ b->convex_ref()));
const poly_geometric_trans *aa
= dynamic_cast<const poly_geometric_trans *>(a.get());
const poly_geometric_trans *bb
= dynamic_cast<const poly_geometric_trans *>(b.get());
GMM_ASSERT1(aa && bb, "The product of geometric transformations "
- "is only defined for polynomial ones");
+ "is only defined for polynomial ones");
return new cv_pr_tl_(aa, bb);
}
@@ -403,59 +424,59 @@ namespace bgeot {
/* ******************************************************************** */
static pgeometric_trans QK_gt(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &) {
+ std::vector<dal::pstatic_stored_object> &) {
GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
- << params.size() << " should be 2.");
+ << params.size() << " should be 2.");
GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
- "Bad type of parameters");
+ "Bad type of parameters");
int n = int(::floor(params[0].num() + 0.01));
int k = int(::floor(params[1].num() + 0.01));
GMM_ASSERT1(n > 0 && n < 100 && k >= 0 && k <= 150 &&
- double(n) == params[0].num() && double(k) == params[1].num(),
- "Bad parameters");
+ double(n) == params[0].num() && double(k) == params[1].num(),
+ "Bad parameters");
std::stringstream name;
if (n == 1)
name << "GT_PK(1," << k << ")";
- else
+ else
name << "GT_PRODUCT(GT_QK(" << n-1 << "," << k << "),GT_PK(1,"
- << k << "))";
+ << k << "))";
return geometric_trans_descriptor(name.str());
}
static pgeometric_trans prism_gt(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &) {
+ std::vector<dal::pstatic_stored_object> &) {
GMM_ASSERT1(params.size() == 2, "Bad number of parameters : "
- << params.size() << " should be 2.");
+ << params.size() << " should be 2.");
GMM_ASSERT1(params[0].type() == 0 && params[1].type() == 0,
- "Bad type of parameters");
+ "Bad type of parameters");
int n = int(::floor(params[0].num() + 0.01));
int k = int(::floor(params[1].num() + 0.01));
GMM_ASSERT1(n > 0 && n < 100 && k >= 0 && k <= 150 &&
- double(n) == params[0].num() && double(k) == params[1].num(),
- "Bad parameters");
+ double(n) == params[0].num() && double(k) == params[1].num(),
+ "Bad parameters");
std::stringstream name;
name << "GT_PRODUCT(GT_PK(" << n-1 << "," << k << "),GT_PK(1,"
- << k << "))";
+ << k << "))";
return geometric_trans_descriptor(name.str());
}
static pgeometric_trans linear_qk(gt_param_list ¶ms,
- std::vector<dal::pstatic_stored_object> &) {
+ std::vector<dal::pstatic_stored_object> &) {
GMM_ASSERT1(params.size() == 1, "Bad number of parameters : "
- << params.size() << " should be 1.");
+ << params.size() << " should be 1.");
GMM_ASSERT1(params[0].type() == 0, "Bad type of parameters");
int n = int(::floor(params[0].num() + 0.01));
return parallelepiped_linear_geotrans(n);
}
/* norm of returned vector is the ratio between the face surface on
- the reel element and the face surface on the reference element
+ the real element and the face surface on the reference element
IT IS NOT UNITARY
-
+
pt is the position of the evaluation point on the reference element
*/
base_small_vector compute_normal(const geotrans_interpolation_context& c,
- size_type face) {
+ size_type face) {
GMM_ASSERT1(c.G().ncols() == c.pgt()->nb_points(), "dimensions mismatch");
base_small_vector un(c.N());
gmm::mult(c.B(), c.pgt()->normals()[face], un);
@@ -464,11 +485,11 @@ namespace bgeot {
/*
return the local basis (i.e. the normal in the first column, and the
- tangent vectors in the other columns
+ tangent vectors in the other columns
*/
- base_matrix
+ base_matrix
compute_local_basis(const geotrans_interpolation_context& c,
- size_type face) {
+ size_type face) {
GMM_ASSERT1(c.G().ncols() == c.pgt()->nb_points(), "dimensions mismatch");
base_small_vector up = c.pgt()->normals()[face];
base_small_vector un(c.N());
@@ -477,7 +498,7 @@ namespace bgeot {
base_matrix baseP(P, P);
gmm::copy(gmm::identity_matrix(), baseP);
size_type i0 = 0;
- for (size_type i=1; i < P; ++i)
+ for (size_type i=1; i < P; ++i)
if (gmm::abs(up[i])>gmm::abs(up[i0])) i0=i;
if (i0) gmm::copy(gmm::mat_col(baseP, 0), gmm::mat_col(baseP, i0));
gmm::copy(up, gmm::mat_col(baseP, 0));
@@ -488,13 +509,13 @@ namespace bgeot {
/* modified gram-schmidt */
for (size_type k=0; k < P; ++k) {
for (size_type l=0; l < k; ++l) {
- gmm::add(gmm::scaled(gmm::mat_col(baseN,l),
- -gmm::vect_sp(gmm::mat_col(baseN,l),
- gmm::mat_col(baseN,k))),
- gmm::mat_col(baseN,k));
+ gmm::add(gmm::scaled(gmm::mat_col(baseN,l),
+ -gmm::vect_sp(gmm::mat_col(baseN,l),
+ gmm::mat_col(baseN,k))),
+ gmm::mat_col(baseN,k));
}
gmm::scale(gmm::mat_col(baseN,k),
- 1./gmm::vect_norm2(gmm::mat_col(baseN,k)));
+ 1./gmm::vect_norm2(gmm::mat_col(baseN,k)));
}
/* TODO: for cases where P < N,
complete the basis */
@@ -512,7 +533,7 @@ namespace bgeot {
struct geometric_trans_naming_system
: public dal::naming_system<geometric_trans> {
- geometric_trans_naming_system() :
+ geometric_trans_naming_system() :
dal::naming_system<geometric_trans>("GT") {
add_suffix("PK", PK_gt);
add_suffix("QK", QK_gt);
@@ -522,7 +543,7 @@ namespace bgeot {
add_suffix("LINEAR_QK", linear_qk);
}
};
-
+
pgeometric_trans geometric_trans_descriptor(std::string name) {
size_type i=0;
return dal::singleton<geometric_trans_naming_system>::instance().method(name, i);
@@ -533,7 +554,7 @@ namespace bgeot {
}
/* Fonctions pour la ref. directe. */
-
+
pgeometric_trans simplex_geotrans(size_type n, short_type k) {
static pgeometric_trans pgt = 0;
static size_type d = size_type(-2);
@@ -564,8 +585,8 @@ namespace bgeot {
switch (dim) {
case 1: return "GT_PK(1,1)";
default: return std::string("GT_LINEAR_PRODUCT(")
- + name_of_linear_qk_trans(dim-1)
- + std::string(",GT_PK(1,1))");
+ + name_of_linear_qk_trans(dim-1)
+ + std::string(",GT_PK(1,1))");
}
}
@@ -593,10 +614,10 @@ namespace bgeot {
}
pgeometric_trans linear_product_geotrans(pgeometric_trans pg1,
- pgeometric_trans pg2) {
+ pgeometric_trans pg2) {
std::stringstream name;
- name << "GT_LINEAR_PRODUCT(" << name_of_geometric_trans(pg1) << ","
- << name_of_geometric_trans(pg2) << ")";
+ name << "GT_LINEAR_PRODUCT(" << name_of_geometric_trans(pg1) << ","
+ << name_of_geometric_trans(pg2) << ")";
return geometric_trans_descriptor(name.str());
}
@@ -614,18 +635,18 @@ namespace bgeot {
}
pgeometric_trans product_geotrans(pgeometric_trans pg1,
- pgeometric_trans pg2) {
+ pgeometric_trans pg2) {
static pgeometric_trans pgt = 0;
static pgeometric_trans pg1_ = 0;
static pgeometric_trans pg2_ = 0;
if (pg1 != pg1_ || pg2 != pg2_) {
std::stringstream name;
- name << "GT_PRODUCT(" << name_of_geometric_trans(pg1) << ","
- << name_of_geometric_trans(pg2) << ")";
+ name << "GT_PRODUCT(" << name_of_geometric_trans(pg1) << ","
+ << name_of_geometric_trans(pg2) << ")";
pgt = geometric_trans_descriptor(name.str());
pg1_ = pg1; pg2_ = pg2;
}
- return pgt;
+ return pgt;
}
/* ********************************************************************* */
@@ -635,11 +656,11 @@ namespace bgeot {
DAL_DOUBLE_KEY(pre_geot_key_, pgeometric_trans, pstored_point_tab);
geotrans_precomp_::geotrans_precomp_(pgeometric_trans pg,
- pstored_point_tab ps)
+ pstored_point_tab ps)
: pgt(pg), pspt(ps) {}
void geotrans_precomp_::init_val() const {
- c.clear();
+ c.clear();
c.resize(pspt->size(), base_vector(pgt->nb_points()));
for (size_type j = 0; j < pspt->size(); ++j)
pgt->poly_vector_val((*pspt)[j], c[j]);
@@ -647,7 +668,7 @@ namespace bgeot {
void geotrans_precomp_::init_grad() const {
dim_type N = pgt->dim();
- pc.clear();
+ pc.clear();
pc.resize(pspt->size(), base_matrix(pgt->nb_points() , N));
for (size_type j = 0; j < pspt->size(); ++j)
pgt->poly_vector_grad((*pspt)[j], pc[j]);
@@ -663,13 +684,13 @@ namespace bgeot {
}
base_node geotrans_precomp_::transform(size_type i,
- const base_matrix &G) const {
+ const base_matrix &G) const {
if (c.empty()) init_val();
size_type N = G.nrows(), k = pgt->nb_points();
base_node P(N);
base_matrix::const_iterator git = G.begin();
for (size_type l = 0; l < k; ++l) {
- scalar_type a = c[i][l];
+ scalar_type a = c[i][l];
base_node::iterator pit = P.begin(), pite = P.end();
for (; pit != pite; ++git, ++pit) *pit += a * (*git);
}
@@ -677,14 +698,14 @@ namespace bgeot {
}
pgeotrans_precomp geotrans_precomp(pgeometric_trans pg,
- pstored_point_tab pspt,
- dal::pstatic_stored_object dep) {
+ pstored_point_tab pspt,
+ dal::pstatic_stored_object dep) {
dal::pstatic_stored_object o
= dal::search_stored_object(pre_geot_key_(pg, pspt));
if (o) return dal::stored_cast<geotrans_precomp_>(o);
pgeotrans_precomp p = new geotrans_precomp_(pg, pspt);
dal::add_stored_object(new pre_geot_key_(pg, pspt), p, pg, pspt,
- dal::AUTODELETE_STATIC_OBJECT);
+ dal::AUTODELETE_STATIC_OBJECT);
if (dep) dal::add_dependency(p, dep);
return p;
}
diff --git a/src/bgeot_geotrans_inv.cc b/src/bgeot_geotrans_inv.cc
index 354198f..bbe6816 100644
--- a/src/bgeot_geotrans_inv.cc
+++ b/src/bgeot_geotrans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_geotrans_inv.h"
#include "gmm/gmm_solver_bfgs.h"
diff --git a/src/bgeot_imbricated_box.cc b/src/bgeot_imbricated_box.cc
old mode 100755
new mode 100644
index b6aea54..d33ec3d
--- a/src/bgeot_imbricated_box.cc
+++ b/src/bgeot_imbricated_box.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_imbricated_box.h"
diff --git a/src/bgeot_kdtree.cc b/src/bgeot_kdtree.cc
index 5cb1bd8..6b82512 100644
--- a/src/bgeot_kdtree.cc
+++ b/src/bgeot_kdtree.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_kdtree.h"
@@ -227,21 +227,21 @@ namespace bgeot {
if (!t->isleaf()) {
const kdtree_node *tn = static_cast<const kdtree_node*>(t);
scalar_type dist = p.pos[dir] - tn->split_v;
- if (dist <= scalar_type(0) && tn->left) {
+ if ((dist <= scalar_type(0) && tn->left) || !tn->right) {
nearest_neighbor_main(p, tn->left, unsigned((dir+1)%p.N));
- } else if (dist > scalar_type(0) && tn->right) {
+ } else if (tn->right) {
nearest_neighbor_main(p, tn->right, unsigned((dir+1)%p.N));
} else {
- assert(false); // FIXME
+ assert(false);
}
// check the possibility of points at the opposite side of the current
// tree node which are closer to pos as the current minimum distance
- if ( dist * dist <= p.dist2 ) {
+ if (dist * dist <= p.dist2) {
for (size_type k=0; k < p.N; ++k) p.vec_to_tree_elm[k] = 0.;
- if (dist <= scalar_type(0) && tn->right) {
+ if ((dist <= scalar_type(0) && tn->right) || !tn->left) {
p.vec_to_tree_elm[dir] = -dist;
nearest_neighbor_assist(p, tn->right, unsigned((dir+1)%p.N));
- } else if (dist > scalar_type(0) && tn->left) {
+ } else if (tn->left) {
p.vec_to_tree_elm[dir] = dist;
nearest_neighbor_assist(p, tn->left, unsigned((dir+1)%p.N));
}
diff --git a/src/bgeot_mesh_structure.cc b/src/bgeot_mesh_structure.cc
index 173c0ab..2b5b324 100644
--- a/src/bgeot_mesh_structure.cc
+++ b/src/bgeot_mesh_structure.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
diff --git a/src/bgeot_node_tab.cc b/src/bgeot_node_tab.cc
index 7c4fb93..f6e1cc0 100644
--- a/src/bgeot_node_tab.cc
+++ b/src/bgeot_node_tab.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_node_tab.h"
@@ -46,17 +46,19 @@ namespace bgeot {
}
void node_tab::add_sorter(void) const {
- if (sorters.size() > 0) GMM_WARNING3("Multiple sort needed for node tab");
+ if (sorters.size() > 1)
+ GMM_WARNING3("Multiple sort needed for node tab : " << sorters.size()+1);
sorters.push_back(sorter(component_comp(*this, c, dim_)));
for (dal::bv_visitor i(index()); !i.finished(); ++i)
sorters.back().insert(size_type(i));
}
- size_type node_tab::search_node(const base_node &pt, const scalar_type radius) const {
+ size_type node_tab::search_node(const base_node &pt,
+ const scalar_type radius) const {
if (card() == 0) return size_type(-1);
-
+
scalar_type eps_radius = std::max(eps, radius);
- for (size_type is = 0; ; ++is) {
+ for (size_type is = 0; is < 5; ++is) {
if (is >= sorters.size()) add_sorter();
c = pt - eps_radius * sorters[is].key_comp().v;
@@ -65,16 +67,22 @@ namespace bgeot {
scalar_type up_bound
= gmm::vect_sp(pt, sorters[is].key_comp().v) + 2*eps_radius;
size_type count = 0;
+ // if (is > 0) cout << "begin loop " << " v = " << sorters[is].key_comp().v << "sp c = " << gmm::vect_sp(c, sorters[is].key_comp().v) << " eps_radius = " << eps_radius << " max_radius " << max_radius << endl;
for (; it != sorters[is].end() && count < 20; ++it, ++count) {
+
const base_node &pt2 = (*this)[*it];
- if (gmm::vect_dist2(pt, pt2) < eps_radius)
- return *it;
+
+// if (count > 0) {
+// cout << "count " << count << " is = " << is << " pt = " << pt << " pt2 = " << pt2 << " sp = " << gmm::vect_sp(pt2, sorters[is].key_comp().v) << " spinit = " << gmm::vect_sp(pt, sorters[is].key_comp().v) << endl;
+// }
+
+ if (gmm::vect_dist2(pt, pt2) < eps_radius) return *it;
if (gmm::vect_sp(pt2, sorters[is].key_comp().v) > up_bound)
return size_type(-1);
}
if (it == sorters[is].end()) return size_type(-1);
- GMM_ASSERT1(is < 10, "Problem in node structure");
}
+ GMM_ASSERT1(false, "Problem in node structure !!");
}
void node_tab::clear(void) {
@@ -126,8 +134,12 @@ namespace bgeot {
void node_tab::sup_node(size_type i) {
if (index().is_in(i)) {
- for (size_type is = 0; is < sorters.size(); ++is) sorters[is].erase(i);
+ for (size_type is = 0; is < sorters.size(); ++is) {
+ sorters[is].erase(i);
+ GMM_ASSERT3(sorters[is].size()+1 == card(), "internal error");
+ }
dal::dynamic_tas<base_node>::sup(i);
+
}
}
diff --git a/src/bgeot_poly.cc b/src/bgeot_poly.cc
index 5ab2cfa..fc7932d 100644
--- a/src/bgeot_poly.cc
+++ b/src/bgeot_poly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
@@ -54,8 +54,8 @@ namespace bgeot {
short_type n = short_type(size()), l;
if (n > 0) {
size_type g_idx = global_index_; short_type deg = degree_;
- iterator it = begin() + (n-2);
- for (l = short_type(n-2); l != short_type(-1); --l, --it)
+ reverse_iterator it = rbegin() + 1;
+ for (l = short_type(n-2); l != short_type(-1); --l, ++it)
if (*it != 0) break;
short_type a = (*this)[n-1]; (*this)[n-1] = 0;
(*this)[short_type(l+1)] = short_type(a + 1);
@@ -71,9 +71,10 @@ namespace bgeot {
short_type n = short_type(size()), l;
if (n > 0) {
size_type g_idx = global_index_; short_type deg = degree_;
- iterator it = begin() + (n-1);
- for (l = short_type(n-1); l != short_type(-1); --l, --it)
+ reverse_iterator it = rbegin();
+ for (l = short_type(n-1); l != short_type(-1); --l, ++it) {
if (*it != 0) break;
+ }
if (l != short_type(-1)) {
short_type a = (*this)[l];
(*this)[l] = 0; (*this)[n-1] = short_type(a - 1);
@@ -178,25 +179,31 @@ namespace bgeot {
void do_bin_op(std::vector<base_poly> &value_list,
std::vector<int> &op_list,
std::vector<int> &prior_list) {
- base_poly &p1(*(value_list.end() - 2)), &p2(*(value_list.end() - 1));
-
- switch (op_list.back()) {
- case 1 : p1 *= p2; break;
- case 2 : if (p2.degree() > 0) parse_error(6); p1 /= p2[0]; break;
- case 3 : p1 += p2; break;
- case 4 : p1 -= p2; break;
- case 5 :
- {
- if (p2.degree() > 0) parse_error(7);
- int pow = int(p2[0]);
- if (p2[0] != opt_long_scalar_type(pow) || pow < 0) parse_error(8);
- base_poly p = p1; p1.one();
- for (int i = 0; i < pow; ++i) p1 *= p;
- }
- break;
- case 6 : p2 *= opt_long_scalar_type(-1); break;
+ base_poly &p2 = *(value_list.rbegin());
+ if (op_list.back() != 6) {
+ assert(value_list.size()>1);
+ base_poly &p1 = *(value_list.rbegin()+1);
+ switch (op_list.back()) {
+ case 1 : p1 *= p2; break;
+ case 2 : if (p2.degree() > 0) parse_error(6); p1 /= p2[0]; break;
+ case 3 : p1 += p2; break;
+ case 4 : p1 -= p2; break;
+ case 5 :
+ {
+ if (p2.degree() > 0) parse_error(7);
+ int pow = int(p2[0]);
+ if (p2[0] != opt_long_scalar_type(pow) || pow < 0) parse_error(8);
+ base_poly p = p1; p1.one();
+ for (int i = 0; i < pow; ++i) p1 *= p;
+ }
+ break;
+ default: assert(0);
+ }
+ value_list.pop_back();
+ } else {
+ p2 *= opt_long_scalar_type(-1);
}
- if (op_list.back() != 6) value_list.pop_back(); op_list.pop_back(); prior_list.pop_back();
+ op_list.pop_back(); prior_list.pop_back();
}
base_poly read_base_poly(short_type n, std::istream &f) {
diff --git a/src/bgeot_poly_composite.cc b/src/bgeot_poly_composite.cc
index 81a0fe1..1b04ede 100644
--- a/src/bgeot_poly_composite.cc
+++ b/src/bgeot_poly_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include "getfem/bgeot_comma_init.h"
@@ -334,7 +334,8 @@ namespace bgeot {
dal::bit_vector on_face;
for (size_type i = 0; i < m.nb_max_points(); ++i) {
if (m.is_point_valid(i)) {
- if (cvr->is_in_face(f, m.points()[i]) < 1e-12) on_face.add(i);
+ if (gmm::abs(cvr->is_in_face(f, m.points()[i])) < 1e-12)
+ on_face.add(i);
}
}
//cerr << "on_face=" << on_face << endl;
diff --git a/src/bgeot_rtree.cc b/src/bgeot_rtree.cc
index 8e6e019..1d94ec7 100644
--- a/src/bgeot_rtree.cc
+++ b/src/bgeot_rtree.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_rtree.h"
diff --git a/src/bgeot_small_vector.cc b/src/bgeot_small_vector.cc
index 7e4a385..47c0245 100644
--- a/src/bgeot_small_vector.cc
+++ b/src/bgeot_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_small_vector.h"
namespace bgeot {
diff --git a/src/bgeot_sparse_tensors.cc b/src/bgeot_sparse_tensors.cc
index 2fb2b31..264bbce 100644
--- a/src/bgeot_sparse_tensors.cc
+++ b/src/bgeot_sparse_tensors.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <bitset>
#include "gmm/gmm_blas_interface.h"
@@ -739,11 +739,11 @@ namespace bgeot {
size_type redsz = 1;
for (unsigned tnum=0; tnum < trtab.size(); ++tnum) {
if (!idx_occurences[ir][tnum]) continue;
- std::bitset<32> once(reduction_chars.size());
+ std::bitset<int(32)> once((int)reduction_chars.size());
for (dim_type i=0; i < trtab[tnum].tr().ndim(); ++i) {
bool ignore = false;
for (dal::bv_visitor j(lst); !j.finished(); ++j) {
- if (trtab[tnum].ridx[i] == reduction_chars[j]) {
+ if (trtab[tnum].ridx[i] == reduction_chars[(size_t)j]) {
if (once[j]) ignore = true; else once[j] = true;
}
}
@@ -989,7 +989,7 @@ namespace bgeot {
de l'utilisation de masque qui ne s'arrêtent pas forcement sur les
'frontieres' entre les differents tenseurs reduits) */
//std::fill(out_data.begin(), out_data.end(), 0.);
- memset(&out_data[0], 0, out_data.size()*sizeof(out_data[0]));
+ if (out_data.size()) memset(&out_data[0], 0, out_data.size()*sizeof(out_data[0]));
for (unsigned i=0; i < trtab.size(); ++i) {
if (trtab[i].is_reduction()) {
trtab[i].reduction->do_reduction();
diff --git a/src/dal_backtrace.cc b/src/dal_backtrace.cc
old mode 100755
new mode 100644
index 6ad7e5e..9ed075b
--- a/src/dal_backtrace.cc
+++ b/src/dal_backtrace.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_backtrace.h"
#ifdef GETFEM_HAVE_BACKTRACE
diff --git a/src/dal_bit_vector.cc b/src/dal_bit_vector.cc
old mode 100755
new mode 100644
index 609e202..6b241a8
--- a/src/dal_bit_vector.cc
+++ b/src/dal_bit_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_bit_vector.h"
diff --git a/src/dal_singleton.cc b/src/dal_singleton.cc
old mode 100755
new mode 100644
index c8d0b0f..209052d
--- a/src/dal_singleton.cc
+++ b/src/dal_singleton.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include <algorithm>
diff --git a/src/dal_static_stored_objects.cc b/src/dal_static_stored_objects.cc
old mode 100755
new mode 100644
index b3d2103..a8b71e3
--- a/src/dal_static_stored_objects.cc
+++ b/src/dal_static_stored_objects.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_static_stored_objects.h"
diff --git a/src/getfem/bgeot_comma_init.h b/src/getfem/bgeot_comma_init.h
index f1ecdc2..b78cb2b 100644
--- a/src/getfem/bgeot_comma_init.h
+++ b/src/getfem/bgeot_comma_init.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_comma_init.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/bgeot_config.h b/src/getfem/bgeot_config.h
index 07015c4..be207d1 100644
--- a/src/getfem/bgeot_config.h
+++ b/src/getfem/bgeot_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_config.h
@brief defines and typedefs for namespace bgeot
@@ -68,6 +69,10 @@
/// Basic Geometric Tools
namespace bgeot {
+ using std::endl; using std::cout; using std::cerr;
+ using std::ends; using std::cin;
+
+
static const size_t ST_NIL = size_t(-1);
/// Dimension type (<255)
typedef gmm::uint8_type dim_type;
diff --git a/src/getfem/bgeot_convex.h b/src/getfem/bgeot_convex.h
index 5a63275..dd76b4b 100644
--- a/src/getfem/bgeot_convex.h
+++ b/src/getfem/bgeot_convex.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_convex.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_convex_ref.h b/src/getfem/bgeot_convex_ref.h
index b90dcf1..13d8822 100644
--- a/src/getfem/bgeot_convex_ref.h
+++ b/src/getfem/bgeot_convex_ref.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_convex_ref.h
@@ -99,7 +100,9 @@ namespace bgeot {
virtual scalar_type is_in(const base_node &) const = 0;
/** return a null (or almost zero) if pt is in the face of the convex.
* Does not control if the point is in the convex, but if a point
- * supposed to be in a convex is in this face.
+ * supposed to be in a convex is in this face. return a negative number
+ * if the point is in the side of the face where the element is and
+ * positive in the other side.
*/
virtual scalar_type is_in_face(short_type, const base_node &) const =0;
/// return the normal vector for each face.
diff --git a/src/getfem/bgeot_convex_structure.h b/src/getfem/bgeot_convex_structure.h
index aca4cb6..f422577 100644
--- a/src/getfem/bgeot_convex_structure.h
+++ b/src/getfem/bgeot_convex_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef BGEOT_CONVEX_STRUCTURE_H__
#define BGEOT_CONVEX_STRUCTURE_H__
@@ -102,7 +103,7 @@ namespace bgeot {
*/
inline const convex_ind_ct &ind_points_of_face(short_type i) const
{ return faces[i]; }
- /** Return "direct" points indexes. These are the subset of points than
+ /** Return "direct" points indexes. These are the subset of points that
* can be used to build a direct vector basis. (rarely used)
*/
inline const convex_ind_ct &ind_dir_points() const
diff --git a/src/getfem/bgeot_ftool.h b/src/getfem/bgeot_ftool.h
index 7549fde..a3e0eee 100644
--- a/src/getfem/bgeot_ftool.h
+++ b/src/getfem/bgeot_ftool.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_ftool.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_geometric_trans.h b/src/getfem/bgeot_geometric_trans.h
index 8e7d873..c50f84e 100644
--- a/src/getfem/bgeot_geometric_trans.h
+++ b/src/getfem/bgeot_geometric_trans.h
@@ -1,38 +1,39 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/** @file bgeot_geometric_trans.h
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/** @file bgeot_geometric_trans.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date December 20, 2000.
@brief Geometric transformations on convexes.
-*/
+*/
#ifndef BGEOT_GEOMETRIC_TRANSFORMATION_H__
#define BGEOT_GEOMETRIC_TRANSFORMATION_H__
@@ -42,6 +43,9 @@
#include "bgeot_convex_ref.h"
namespace bgeot {
+
+ typedef std::vector<short_type> convex_ind_ct;
+
/** Description of a geometric transformation between a
* reference element and a real element.
*
@@ -57,7 +61,7 @@ namespace bgeot {
* The geometric nodes of @f$\overline{T}@f$ are the points
* @f$\overline{g}^i \in\ {I\hspace{-0.3em}R}^P at f$, for @f$i = 0 .. n_g-1 at f$,
* and the corresponding (via the geometric transformation) nodes of
- * @f$T at f$ are the points @f$g^i \in\ {I\hspace{-0.3em}R}^N at f$.
+ * @f$T at f$ are the points @f$g^i \in\ {I\hspace{-0.3em}R}^N at f$.
*
* <h3>Geometric transformation</h3>
* The geometric transformation is the application
@@ -66,25 +70,25 @@ namespace bgeot {
* \overline{x} & \longmapsto \ \ x,
* \end{array} @f]
* which should be a diffeomorphism between @f$\overline{T}@f$ and @f$T at f$.
- * It is assumed that there exists a (generally polynomial) vector
+ * It is assumed that there exists a (generally polynomial) vector
* @f$ \underline{\cal N}(\overline{x})
- * = \left({\cal N}i_(\overline{x})\right)i_, \ \ i = 0 .. n_g-1, @f$
+ * = \left({\cal N}i_(\overline{x})\right)i_, \ \ i = 0 .. n_g-1, @f$
* defined on @f$\overline{T}@f$ of size @f$n_g at f$, such that the
* transformation
- * @f$\tau at f$ can be written
+ * @f$\tau at f$ can be written
* @f$ \tau(\overline{x}) = \sum_{i = 0}^{n_g-1} {\cal N}i_(\overline{x})
* g^i at f$.
*
- * Denoting by
- * @f$ \underline{\underline{G}} = (g^0; g^1; ...;g^{n_g-1}), @f$
+ * Denoting by
+ * @f$ \underline{\underline{G}} = (g^0; g^1; ...;g^{n_g-1}), @f$
* The matrix in which each column is a geometric node of @f$T at f$,
- * the transformation @f$\tau at f$ can be written as
- * @f$ \tau(\overline{x}) = \underline{\underline{G}} \
- * \underline{\cal N}(\overline{x}). @f$
+ * the transformation @f$\tau at f$ can be written as
+ * @f$ \tau(\overline{x}) = \underline{\underline{G}} \
+ * \underline{\cal N}(\overline{x}). @f$
*
* <h3>Gradient of the transformation</h3>
- * The gradient of the transformation is
- * @f[ \nabla \tau(\overline{x}) =
+ * The gradient of the transformation is
+ * @f[ \nabla \tau(\overline{x}) =
* \left( \frac{\partial \tau_i}{\partial \overline{x}_j} \right)_{ij}
* = \left( \sum_{l = 0}^{n_g-1}g^l_i
* \frac{\partial {\cal N}l_(\overline{x})}{\partial \overline{x}_j}
@@ -101,16 +105,16 @@ namespace bgeot {
*/
class geometric_trans : virtual public dal::static_stored_object {
protected :
-
+
bool is_lin;
pconvex_ref cvr;
std::vector<size_type> vertices_;
size_type complexity_; /* either the degree or the refinement of the
- * transformation */
+ * transformation */
void fill_standard_vertices(void);
public :
-
+
/// Dimension of the reference element.
dim_type dim(void) const { return cvr->structure()->dim(); }
/// True if the transformation is linear (affine in fact).
@@ -124,11 +128,17 @@ namespace bgeot {
/// Basic structure of the reference element.
pconvex_structure basic_structure(void) const
{ return cvr->structure()->basic_structure(); }
- /// Gives the value of the vector of functions at a certain point.
+ /// Gives the value of the functions vector at a certain point.
virtual void poly_vector_val(const base_node &pt, base_vector &val) const = 0;
- /// Gives the gradient of the vector of functions at a certain point.
+ /// Gives the value of a subgroup of the functions vector at a certain point.
+ virtual void poly_vector_val(const base_node &pt, const convex_ind_ct &ind_ct,
+ base_vector &val) const = 0;
+ /// Gives the gradient of the functions vector at a certain point.
virtual void poly_vector_grad(const base_node &pt, base_matrix &val) const = 0;
- /// Gives the hessian of the vector of functions at a certain point.
+ /// Gives the gradient of a subgroup of the functions vector at a certain point.
+ virtual void poly_vector_grad(const base_node &pt, const convex_ind_ct &ind_ct,
+ base_matrix &val) const = 0;
+ /// Gives the hessian of the functions vector at a certain point.
virtual void poly_vector_hess(const base_node &pt, base_matrix &val) const = 0;
/// Gives the number of vertices.
size_type nb_vertices(void) const { return vertices_.size(); }
@@ -140,20 +150,20 @@ namespace bgeot {
/// Gives the array of the normals to faces (on reference convex)
const std::vector<base_small_vector> &normals(void) const
{ return cvr->normals(); }
- /** Apply the geometric transformation to point pt,
- PTAB containsis the points of the real convex */
+ /** Apply the geometric transformation to point pt,
+ PTAB contains the points of the real convex */
template<class CONT> base_node transform(const base_node &pt,
- const CONT &PTAB) const;
+ const CONT &PTAB) const;
base_node transform(const base_node &pt, const base_matrix &G) const;
/** Compute the gradient at point x, pc is resized to [nb_points() x dim()]
- if the transformation is linear, x is not used at all */
+ if the transformation is linear, x is not used at all */
size_type complexity(void) const { return complexity_; }
virtual ~geometric_trans() {}
};
template<class CONT>
- base_node geometric_trans::transform(const base_node &pt,
- const CONT &ptab) const {
+ base_node geometric_trans::transform(const base_node &pt,
+ const CONT &ptab) const {
base_node P(ptab[0].size());
size_type k = nb_points();
base_vector val(k);
@@ -167,26 +177,26 @@ namespace bgeot {
class geotrans_interpolation_context;
template<class CONT>
- void bounding_box(base_node& min, base_node& max,
- const CONT &ptab, pgeometric_trans pgt = 0) {
+ void bounding_box(base_node& min, base_node& max,
+ const CONT &ptab, pgeometric_trans pgt = 0) {
typename CONT::const_iterator it = ptab.begin();
min = max = *it; size_type P = min.size();
base_node::iterator itmin = min.begin(), itmax = max.begin();
for ( ++it; it != ptab.end(); ++it) {
base_node pt = *it; /* need a temporary storage since cv.points()[j] may
- not be a reference to a base_node, but a
- temporary base_node !! (?) */
+ not be a reference to a base_node, but a
+ temporary base_node !! (?) */
base_node::const_iterator it2 = pt.begin();
for (size_type i = 0; i < P; ++i) {
- itmin[i] = std::min(itmin[i], it2[i]);
- itmax[i] = std::max(itmax[i], it2[i]);
+ itmin[i] = std::min(itmin[i], it2[i]);
+ itmax[i] = std::max(itmax[i], it2[i]);
}
}
/* enlarge the box for non-linear transformations .. */
- if (pgt && !pgt->is_linear())
+ if (pgt && !pgt->is_linear())
for (size_type i = 0; i < P; ++i) {
- scalar_type e = (itmax[i]-itmin[i]) * 0.2;
- itmin[i] -= e; itmax[i] += e;
+ scalar_type e = (itmax[i]-itmin[i]) * 0.2;
+ itmin[i] -= e; itmax[i] += e;
}
}
@@ -200,9 +210,9 @@ namespace bgeot {
pgeometric_trans prism_geotrans(size_type n, short_type k);
pgeometric_trans prism_linear_geotrans(size_type n);
pgeometric_trans product_geotrans(pgeometric_trans pg1,
- pgeometric_trans pg2);
+ pgeometric_trans pg2);
pgeometric_trans linear_product_geotrans(pgeometric_trans pg1,
- pgeometric_trans pg2);
+ pgeometric_trans pg2);
/**
Get the geometric transformation from its string name.
@@ -211,7 +221,7 @@ namespace bgeot {
pgeometric_trans geometric_trans_descriptor(std::string name);
/**
Get the string name of a geometric transformation.
-
+
List of possible names:
* GT_PK(N,K) : Transformation on simplexes, dim N, degree K
* GT_QK(N,K) : Transformation on parallelepipeds, dim N, degree K
@@ -225,20 +235,20 @@ namespace bgeot {
std::string name_of_geometric_trans(pgeometric_trans p);
/** norm of returned vector is the ratio between the face surface on
- * the reel element and the face surface on the reference element
+ * the real element and the face surface on the reference element
* IT IS NOT UNITARY
*
* pt is the position of the evaluation point on the reference element
*/
base_small_vector compute_normal(const geotrans_interpolation_context& c,
- size_type face);
+ size_type face);
/** return the local basis (i.e. the normal in the first column, and the
- * tangent vectors in the other columns
+ * tangent vectors in the other columns
*/
- base_matrix
+ base_matrix
compute_local_basis(const geotrans_interpolation_context& c,
- size_type face);
+ size_type face);
//@}
/* ********************************************************************* */
@@ -249,14 +259,14 @@ namespace bgeot {
class geotrans_precomp_;
typedef boost::intrusive_ptr<const geotrans_precomp_> pgeotrans_precomp;
-
+
/**
* precomputed geometric transformation operations use this for
* repetitive evaluation of a geometric transformations on a set of
- * points "pspt" in the the reference convex which do not change.
+ * points "pspt" in the reference convex which do not change.
*/
class geotrans_precomp_ : virtual public dal::static_stored_object {
- protected:
+ protected:
pgeometric_trans pgt;
pstored_point_tab pspt; /* a set of points in the reference elt*/
mutable std::vector<base_vector> c; /* precomputed values for the */
@@ -266,25 +276,25 @@ namespace bgeot {
mutable std::vector<base_matrix> hpc; /* precomputed values for hessian*/
/* of the transformation. */
public:
- inline const base_vector &val(size_type i) const
+ inline const base_vector &val(size_type i) const
{ if (c.empty()) init_val(); return c[i]; }
inline const base_matrix &grad(size_type i) const
{ if (pc.empty()) init_grad(); return pc[i]; }
inline const base_matrix &hessian(size_type i) const
{ if (hpc.empty()) init_hess(); return hpc[i]; }
-
+
/**
* Apply the geometric transformation from the reference convex to
* the convex whose vertices are stored in G, to the set of points
- * listed in pspt.
+ * listed in pspt.
* @param G any container of vertices of the transformed
* convex.
* @param pt_tab on output, the transformed points.
*/
- template <typename CONT>
+ template <typename CONT>
void transform(const CONT& G,
- stored_point_tab& pt_tab) const;
- template <typename CONT, typename VEC>
+ stored_point_tab& pt_tab) const;
+ template <typename CONT, typename VEC>
void transform(const CONT& G, size_type ii, VEC& pt) const;
base_node transform(size_type i, const base_matrix &G) const;
@@ -299,34 +309,34 @@ namespace bgeot {
void init_hess() const;
/**
- * precomputes a geometric transformation for a fixed set of
- * points in the reference convex.
+ * precomputes a geometric transformation for a fixed set of
+ * points in the reference convex.
*/
friend pgeotrans_precomp
geotrans_precomp(pgeometric_trans pg, pstored_point_tab ps,
- dal::pstatic_stored_object dep);
+ dal::pstatic_stored_object dep);
};
pgeotrans_precomp
geotrans_precomp(pgeometric_trans pg, pstored_point_tab ps,
- dal::pstatic_stored_object dep);
+ dal::pstatic_stored_object dep);
- template <typename CONT, typename VEC>
+ template <typename CONT, typename VEC>
void geotrans_precomp_::transform(const CONT& G, size_type j,
- VEC& pt) const {
+ VEC& pt) const {
size_type k = 0;
gmm::clear(pt);
if (c.empty()) init_val();
- for (typename CONT::const_iterator itk = G.begin();
+ for (typename CONT::const_iterator itk = G.begin();
itk != G.end(); ++itk, ++k)
gmm::add(gmm::scaled(*itk, c[j][k]), pt);
GMM_ASSERT1(k == pgt->nb_points(),
- "Wrong number of points in tranformation");
+ "Wrong number of points in tranformation");
}
- template <typename CONT>
+ template <typename CONT>
void geotrans_precomp_::transform(const CONT& G,
stored_point_tab& pt_tab) const {
if (c.empty()) init_val();
@@ -335,29 +345,29 @@ namespace bgeot {
transform(G, j, pt_tab[j]);
}
}
-
+
void delete_geotrans_precomp(pgeotrans_precomp pgp);
/**
* The object geotrans_precomp_pool Allow to allocate a certain number
- * of geotrans_precomp and automatically delete them when it is
+ * of geotrans_precomp and automatically delete them when it is
* deleted itself.
*/
class geotrans_precomp_pool {
std::set<pgeotrans_precomp> precomps;
public :
-
+
pgeotrans_precomp operator()(pgeometric_trans pg,
- pstored_point_tab pspt) {
+ pstored_point_tab pspt) {
pgeotrans_precomp p = geotrans_precomp(pg, pspt, 0);
precomps.insert(p);
return p;
}
~geotrans_precomp_pool() {
for (std::set<pgeotrans_precomp>::iterator it = precomps.begin();
- it != precomps.end(); ++it)
- delete_geotrans_precomp(*it);
+ it != precomps.end(); ++it)
+ delete_geotrans_precomp(*it);
}
};
@@ -406,8 +416,8 @@ namespace bgeot {
const base_matrix& G() const { return *G_; }
/** get the Jacobian of the geometric trans (taken at point @c xref() ) */
scalar_type J() const { if (J_ < scalar_type(0)) compute_J(); return J_; }
- size_type N() const { if (have_G()) return G().nrows();
- else if (have_xreal()) return xreal_.size();
+ size_type N() const { if (have_G()) return G().nrows();
+ else if (have_xreal()) return xreal_.size();
else GMM_ASSERT2(false, "cannot get N"); return 0; }
size_type ii() const { return ii_; }
bgeot::pgeotrans_precomp pgp() const { return pgp_; }
@@ -416,16 +426,16 @@ namespace bgeot {
/** change the current point (coordinates given in the reference convex) */
void set_xref(const base_node& P);
geotrans_interpolation_context();
- geotrans_interpolation_context(bgeot::pgeotrans_precomp pgp__,
- size_type ii__,
- const base_matrix& G__);
+ geotrans_interpolation_context(bgeot::pgeotrans_precomp pgp__,
+ size_type ii__,
+ const base_matrix& G__);
geotrans_interpolation_context(bgeot::pgeometric_trans pgt__,
- bgeot::pstored_point_tab pspt__,
- size_type ii__,
- const base_matrix& G__);
+ bgeot::pstored_point_tab pspt__,
+ size_type ii__,
+ const base_matrix& G__);
geotrans_interpolation_context(bgeot::pgeometric_trans pgt__,
- const base_node& xref__,
- const base_matrix& G__);
+ const base_node& xref__,
+ const base_matrix& G__);
};
} /* end of namespace bgeot. */
diff --git a/src/getfem/bgeot_geotrans_inv.h b/src/getfem/bgeot_geotrans_inv.h
index 176ad7d..d93ecda 100644
--- a/src/getfem/bgeot_geotrans_inv.h
+++ b/src/getfem/bgeot_geotrans_inv.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_geotrans_inv.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -96,7 +97,7 @@ namespace bgeot {
scalar_type IN_EPS=1e-12);
/**
- given the node on the real element, returne the node
+ given the node on the real element, returns the node
on the reference element (even if it is outside of the ref. convex).
This version will not throw an exception if the geometric
diff --git a/src/getfem/bgeot_imbricated_box.h b/src/getfem/bgeot_imbricated_box.h
index 7964f00..c9253ab 100644
--- a/src/getfem/bgeot_imbricated_box.h
+++ b/src/getfem/bgeot_imbricated_box.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_imbricated_box.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_kdtree.h b/src/getfem/bgeot_kdtree.h
index 1740e55..76356dc 100644
--- a/src/getfem/bgeot_kdtree.h
+++ b/src/getfem/bgeot_kdtree.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef BGEOT_KDTREE_H
#define BGEOT_KDTREE_H
@@ -119,7 +120,7 @@ namespace bgeot {
void points_in_box(kdtree_tab_type &ipts,
const base_node &min,
const base_node &max);
- /* assigns at ipt the index of the the nearest neighbor at location
+ /* assigns at ipt the index of the nearest neighbor at location
pos and returns the square of the distance to this point*/
scalar_type nearest_neighbor(index_node_pair &ipt,
const base_node &pos);
diff --git a/src/getfem/bgeot_mesh.h b/src/getfem/bgeot_mesh.h
index 77cf6f7..ecfbd74 100644
--- a/src/getfem/bgeot_mesh.h
+++ b/src/getfem/bgeot_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_mesh.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_mesh_structure.h b/src/getfem/bgeot_mesh_structure.h
index 5f3fc25..6e55b83 100644
--- a/src/getfem/bgeot_mesh_structure.h
+++ b/src/getfem/bgeot_mesh_structure.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_mesh_structure.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_node_tab.h b/src/getfem/bgeot_node_tab.h
index f80a085..6de250a 100644
--- a/src/getfem/bgeot_node_tab.h
+++ b/src/getfem/bgeot_node_tab.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef BGEOT_NODE_TAB_H
#define BGEOT_NODE_TAB_H
@@ -59,6 +60,7 @@ namespace bgeot {
bool operator()(size_type i1, size_type i2) const;
component_comp(const dal::dynamic_tas<base_node> &vbn_,
const base_node &c_, unsigned dim);
+ component_comp() : vbn(0), c(0) {}
};
typedef std::set<size_type, component_comp> sorter;
diff --git a/src/getfem/bgeot_permutations.h b/src/getfem/bgeot_permutations.h
index 6fe64b3..c837252 100644
--- a/src/getfem/bgeot_permutations.h
+++ b/src/getfem/bgeot_permutations.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#include <vector>
#include "bgeot_config.h"
diff --git a/src/getfem/bgeot_poly.h b/src/getfem/bgeot_poly.h
index b0d351b..1973644 100644
--- a/src/getfem/bgeot_poly.h
+++ b/src/getfem/bgeot_poly.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef BGEOT_POLY_H__
@@ -68,12 +69,21 @@ namespace bgeot
public :
typedef std::vector<short_type>::iterator iterator;
typedef std::vector<short_type>::const_iterator const_iterator;
+ typedef std::vector<short_type>::reverse_iterator reverse_iterator;
+ typedef std::vector<short_type>::const_reverse_iterator const_reverse_iterator;
short_type operator[](size_type idx) const { return v[idx]; }
short_type& operator[](size_type idx) { dirty(); return v[idx]; }
+
iterator begin() { dirty(); return v.begin(); }
const_iterator begin() const { return v.begin(); }
iterator end() { dirty(); return v.end(); }
const_iterator end() const { return v.end(); }
+
+ reverse_iterator rbegin() { dirty(); return v.rbegin(); }
+ const_reverse_iterator rbegin() const { return v.rbegin(); }
+ reverse_iterator rend() { dirty(); return v.rend(); }
+ const_reverse_iterator rend() const { return v.rend(); }
+
size_type size() const { return v.size(); }
/// Gives the next power index
const power_index &operator ++();
@@ -177,7 +187,9 @@ namespace bgeot
typedef typename std::vector<T>::iterator iterator;
typedef typename std::vector<T>::const_iterator const_iterator;
-
+ typedef typename std::vector<T>::reverse_iterator reverse_iterator;
+ typedef typename std::vector<T>::const_reverse_iterator const_reverse_iterator;
+
/// Gives the degree of the polynomial
short_type degree(void) const { return d; }
/** gives the degree of the polynomial, considering only non-zero
@@ -280,9 +292,9 @@ namespace bgeot
{ polynomial res = *this; res *= e; return res; }
template<typename T> short_type polynomial<T>::real_degree(void) const {
- const_iterator it = this->end() - 1, ite = this->begin() - 1;
+ const_reverse_iterator it = this->rbegin(), ite = this->rend();
size_type l = this->size();
- for ( ; it != ite; --it, --l) { if (*it != T(0)) break; }
+ for ( ; it != ite; ++it, --l) { if (*it != T(0)) break; }
short_type dd = degree();
while (dd > 0 && alpha(n, short_type(dd-1)) > l) --dd;
return dd;
@@ -341,13 +353,13 @@ namespace bgeot
power_index miq(Q.dim()), mia(dim()), mitot(dim());
if (dim() > 0) miq[dim()-1] = Q.degree();
- const_iterator itq = Q.end() - 1, ite = Q.begin() - 1;
- for ( ; itq != ite; --itq, --miq)
+ const_reverse_iterator itq = Q.rbegin(), ite = Q.rend();
+ for ( ; itq != ite; ++itq, --miq) {
if (*itq != T(0)) {
- iterator ita = aux.end() - 1, itae = aux.begin() - 1;
+ reverse_iterator ita = aux.rbegin(), itae = aux.rend();
std::fill(mia.begin(), mia.end(), 0);
if (dim() > 0) mia[dim()-1] = aux.degree();
- for ( ; ita != itae; --ita, --mia)
+ for ( ; ita != itae; ++ita, --mia)
if (*ita != T(0)) {
power_index::iterator mita = mia.begin(), mitq = miq.begin();
power_index::iterator mit = mitot.begin(), mite = mia.end();
@@ -362,6 +374,7 @@ namespace bgeot
}
}
+ }
return *this;
}
@@ -373,13 +386,13 @@ namespace bgeot
power_index miq(Q.dim()), mia(aux.dim()), mitot(dim());
if (Q.dim() > 0) miq[Q.dim()-1] = Q.degree();
- const_iterator itq = Q.end() - 1, ite = Q.begin() - 1;
- for ( ; itq != ite; --itq, --miq)
+ const_reverse_iterator itq = Q.rbegin(), ite = Q.rend();
+ for ( ; itq != ite; ++itq, --miq)
if (*itq != T(0)) {
- iterator ita = aux.end() - 1, itae = aux.begin() - 1;
+ reverse_iterator ita = aux.rbegin(), itae = aux.rend();
std::fill(mia.begin(), mia.end(), 0);
if (aux.dim() > 0) mia[aux.dim()-1] = aux.degree();
- for ( ; ita != itae; --ita, --mia)
+ for ( ; ita != itae; ++ita, --mia)
if (*ita != T(0)) {
std::copy(mia.begin(), mia.end(), mitot.begin());
std::copy(miq.begin(), miq.end(), mitot.begin() + aux.dim());
@@ -409,10 +422,11 @@ namespace bgeot
iterator it = this->begin(), ite = this->end();
power_index mi(dim());
- for ( ; it != ite; ++it, ++mi) {
+ for ( ; it != ite; ++it) {
if ((*it) != T(0) && mi[k] > 0)
{ mi[k]--; (*this)[mi.global_index()] = (*it) * T(mi[k] + 1); mi[k]++; }
*it = T(0);
+ ++mi;
}
if (d > 0) change_degree(short_type(d-1));
}
diff --git a/src/getfem/bgeot_poly_composite.h b/src/getfem/bgeot_poly_composite.h
index 89d99ea..0e1a1c2 100644
--- a/src/getfem/bgeot_poly_composite.h
+++ b/src/getfem/bgeot_poly_composite.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_poly_composite.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/bgeot_rtree.h b/src/getfem/bgeot_rtree.h
index 259b7fe..c79ef49 100644
--- a/src/getfem/bgeot_rtree.h
+++ b/src/getfem/bgeot_rtree.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef BGEOT_RTREE_H
#define BGEOT_RTREE_H
diff --git a/src/getfem/bgeot_small_vector.h b/src/getfem/bgeot_small_vector.h
index 6846662..9c646e5 100644
--- a/src/getfem/bgeot_small_vector.h
+++ b/src/getfem/bgeot_small_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_small_vector.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/bgeot_sparse_tensors.h b/src/getfem/bgeot_sparse_tensors.h
index 9c8be1a..b187988 100644
--- a/src/getfem/bgeot_sparse_tensors.h
+++ b/src/getfem/bgeot_sparse_tensors.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_sparse_tensors.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -83,6 +84,13 @@ namespace bgeot {
tensor_ranges() : std::vector<index_type>() {}
tensor_ranges(size_type n) : std::vector<index_type>(n) {}
tensor_ranges(size_type n, index_type V) : std::vector<index_type>(n,V) {}
+ bool is_zero_size() const
+ {
+ for (dim_type i=0; i < this->size(); ++i)
+ if ((*this)[i] == 0)
+ return true;
+ return false;
+ }
};
typedef std::vector<stride_type> tensor_strides;
typedef std::vector<dim_type> index_set;
@@ -235,14 +243,14 @@ namespace bgeot {
eval_strides();
}
void set_full(index_type dim, index_type range) {
- assert(range);
+ // assert(range); // not sure if permitting range==0 can have any side effects
r.resize(1); r[0] = range;
idxs.resize(1); idxs[0] = dim_type(dim);
m.assign(range, true); set_card(range);
eval_strides();
}
void set_empty(index_type dim, index_type range) {
- assert(range);
+ // assert(range); // not sure if permitting range==0 can have any side effects
r.resize(1); r[0] = range;
idxs.resize(1); idxs[0] = dim_type(dim);
m.assign(range,false); set_card(0);
diff --git a/src/getfem/bgeot_tensor.h b/src/getfem/bgeot_tensor.h
index 2eabca7..ce028dc 100644
--- a/src/getfem/bgeot_tensor.h
+++ b/src/getfem/bgeot_tensor.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_tensor.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -187,7 +188,7 @@ namespace bgeot {
sizes_ = c; coeff.resize(c.size());
multi_index::iterator p = coeff.begin(), pe = coeff.end();
for ( ; p != pe; ++p, ++it) { *p = short_type(d); d *= *it; }
- resize(d);
+ this->resize(d);
}
void adjust_sizes(const multi_index &mi) {
diff --git a/src/getfem/bgeot_vector.h b/src/getfem/bgeot_vector.h
index 615567a..d24779c 100644
--- a/src/getfem/bgeot_vector.h
+++ b/src/getfem/bgeot_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file bgeot_vector.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_backtrace.h b/src/getfem/dal_backtrace.h
index d61561a..6d28196 100644
--- a/src/getfem/dal_backtrace.h
+++ b/src/getfem/dal_backtrace.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_backtrace.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_basic.h b/src/getfem/dal_basic.h
index 675ebf1..b16926a 100644
--- a/src/getfem/dal_basic.h
+++ b/src/getfem/dal_basic.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_basic.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_bit_vector.h b/src/getfem/dal_bit_vector.h
index 87e3918..7728f06 100644
--- a/src/getfem/dal_bit_vector.h
+++ b/src/getfem/dal_bit_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef DAL_BIT_VECTOR_H__
diff --git a/src/getfem/dal_config.h b/src/getfem/dal_config.h
index e1b2fcc..e803432 100644
--- a/src/getfem/dal_config.h
+++ b/src/getfem/dal_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_config.h
@brief defines and typedefs for namespace dal
@@ -41,6 +42,9 @@
namespace dal {
+ using std::endl; using std::cout; using std::cerr;
+ using std::ends; using std::cin;
+
// For compatibility with Getfem 2.0
using gmm::dimension_error;
@@ -61,7 +65,6 @@ namespace dal {
using gmm::lexicographical_less;
using gmm::approx_less;
using gmm::uclock_sec;
-
inline void DAL_THROW() IS_DEPRECATED;
inline void DAL_THROW() {}
diff --git a/src/getfem/dal_naming_system.h b/src/getfem/dal_naming_system.h
index 21e473e..d8bf5f9 100644
--- a/src/getfem/dal_naming_system.h
+++ b/src/getfem/dal_naming_system.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef DAL_NAMING_SYSTEM_H
#define DAL_NAMING_SYSTEM_H
@@ -110,7 +111,7 @@ namespace dal {
bool throw_if_not_found = true)
{ gmm::standard_locale sl; return method_(name, i, throw_if_not_found); }
naming_system(std::string pr) : prefix(pr) {}
-
+ bool delete_method(std::string name);
};
template <class METHOD>
@@ -308,5 +309,22 @@ namespace dal {
}
+ /**deletion of static_stored_object in the naming system*/
+ template <class METHOD>
+ bool naming_system<METHOD>::delete_method(std::string name)
+ {
+
+ pmethod pm = 0;
+
+ method_key nname(name);
+ pstatic_stored_object o = search_stored_object(nname);
+
+ if (!o) return false;
+ pm = stored_cast<METHOD>(o);
+ pstatic_stored_object_key k = key_of_stored_object(pm);
+ dal::del_stored_object(pm, false);
+ return true;
+ }
+
}
#endif
diff --git a/src/getfem/dal_shared_ptr.h b/src/getfem/dal_shared_ptr.h
index ff4fc7f..501f133 100644
--- a/src/getfem/dal_shared_ptr.h
+++ b/src/getfem/dal_shared_ptr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_shared_ptr.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_singleton.h b/src/getfem/dal_singleton.h
index faf60af..21de9e1 100644
--- a/src/getfem/dal_singleton.h
+++ b/src/getfem/dal_singleton.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_singleton.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/dal_static_stored_objects.h b/src/getfem/dal_static_stored_objects.h
index ce53dce..8bc3d73 100644
--- a/src/getfem/dal_static_stored_objects.h
+++ b/src/getfem/dal_static_stored_objects.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file dal_static_stored_objects.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_tas.h b/src/getfem/dal_tas.h
index 48224b3..5fdb912 100644
--- a/src/getfem/dal_tas.h
+++ b/src/getfem/dal_tas.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_tas.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/dal_tree_sorted.h b/src/getfem/dal_tree_sorted.h
index 086754d..c07b437 100644
--- a/src/getfem/dal_tree_sorted.h
+++ b/src/getfem/dal_tree_sorted.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1995-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file dal_tree_sorted.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_Coulomb_friction.h b/src/getfem/getfem_Coulomb_friction.h
index 87dd0d2..8c01dce 100644
--- a/src/getfem/getfem_Coulomb_friction.h
+++ b/src/getfem/getfem_Coulomb_friction.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file getfem_Coulomb_friction.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -38,356 +39,13 @@
#define GETFEM_COULOMB_FRICTION_H__
#include "getfem_modeling.h"
-#include "getfem_models.h"
-
-namespace getfem {
- typedef gmm::row_matrix<gmm::rsvector<scalar_type> > CONTACT_B_MATRIX;
-
- /** Add a frictionless contact condition to the model. If U is the vector
- of degrees of freedom on which the unilateral constraint is applied,
- the matrix `BN` have to be such that this condition is defined by
- $B_N U \le 0$. The constraint is prescribed thank to a multiplier
- `multname_n` whose dimension should be equal to the number of lines of
- `BN`. The augmentation parameter `r` should be chosen in a range of
- acceptabe values (see Getfem user documentation). `dataname_gap` is an
- optional parameter representing the initial gap. It can be a single value
- or a vector of value. `dataname_alpha` is an optional homogenization
- parameter for the augmentation parameter
- (see Getfem user documentation). The parameter `symmetrized` indicates
- that the symmetry of the tangent matrix will be kept or not.
- */
- size_type add_basic_contact_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &dataname_r, CONTACT_B_MATRIX &BN,
- std::string dataname_gap = "", std::string dataname_alpha = "",
- bool symmetrized = false, bool Hughes_stabilized = false);
-
-
- /** Add a contact with friction condition to the model. If U is the vector
- of degrees of freedom on which the condition is applied,
- the matrix `BN` have to be such that the contact condition is defined
- by $B_N U \le 0$ and `BT` have to be such that the relative tangential
- displacement is $B_T U$. The matrix `BT` should have as many rows as
- `BN` multiplied b $d-1$ where $d$ is the domain dimension.
- The contact condition is prescribed thank to a multiplier
- `multname_n` whose dimension should be equal to the number of rows of
- `BN` and the friction condition by a mutliplier `multname_t` whise size
- should be the number of rows of `BT`.
- The parameter `dataname_friction_coeff` describe the friction
- coefficient. It could be a scalar or a vector describing the
- coefficient on each contact condition.
- The augmentation parameter
- `r` should be chosen in a range of acceptabe values
- (see Getfem user documentation). `dataname_gap` is an
- optional parameter representing the initial gap. It can be a single value
- or a vector of value. `dataname_alpha` is an optional homogenization
- parameter for the augmentation parameter
- (see Getfem user documentation). The parameter `symmetrized` indicates
- that a part of the symmetry of the tangent matrix will be kept or not
- (except for the coupling bewteen contact and friction).
- */
- size_type add_basic_contact_with_friction_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &multname_t, const std::string &dataname_r,
- CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
- std::string dataname_friction_coeff,
- std::string dataname_gap, std::string dataname_alpha,
- bool symmetrized, bool Hughes_stabilized = false) ;
-
- /** Can be used to change the matrix BN of a basic contact/friction brick
- */
- CONTACT_B_MATRIX &contact_brick_set_BN(model &md, size_type indbrick);
-
- /** Can be used to change the matrix DN of a basic contact/friction brick
- */
- CONTACT_B_MATRIX &contact_brick_set_DN(model &md, size_type indbrick);
+// header files for the new brick system
- /** Can be used to change the matrix DT of a basic contact/friction brick
- */
- CONTACT_B_MATRIX &contact_brick_set_DT(model &md, size_type indbrick);
+#include "getfem_contact_and_friction_nodal.h"
+#include "getfem_contact_and_friction_integral.h"
- /** Can be used to change the matrix BT of a basic contact/friction brick
- */
- CONTACT_B_MATRIX &contact_brick_set_BT(model &md, size_type indbrick);
-
-/** Add Hughes stabilized frictionless contact condition to the model. If U
- is the vector of degrees of freedom on which the unilateral constraint is applied,
- and Lambda the multiplier Vector of contact force.Then Hughes stabilizedfrictionless
- contact condition is difined by the matrix `BN` and 'DN' have to be such that this
- condition is defined by $B_N U - DN Lambda \le 0$. where 'DN' is the masse matrix
- relative to stabilzed term.
- The augmentation parameter `r` should be chosen in a range of acceptabe values.
- `dataname_gap` is an optional parameter representing the initial gap. It can be
- a single value or a vector of value. `dataname_alpha` is an optional homogenization
- parameter for the augmentation parameter. The parameter `symmetrized` indicates that
- a part of the symmetry of the tangent matrix will be kept or not
- */
- inline size_type add_Hughes_stab_basic_contact_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &dataname_r, CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &DN,
- std::string dataname_gap="", std::string dataname_alpha="",
- bool symmetrized=false) {
-
- size_type indbrick = add_basic_contact_brick
- (md, varname_u, multname_n, dataname_r, BN,
- dataname_gap, dataname_alpha, symmetrized, true);
- gmm::resize(contact_brick_set_DN(md, indbrick),
- gmm::mat_nrows(DN), gmm::mat_ncols(DN));
- gmm::copy(DN, contact_brick_set_DN(md, indbrick));
- return indbrick;
- }
-
- /** Add Hughes stabilized friction contact condition to the model. If U is the vector
- of degrees of freedom on which the condition is applied,
- the matrix `BN` have to be such that the contact condition is defined
- by $B_N U+DN Lambda \le 0$ (where 'DN' is the masse matrix
- relative to stabilzed term) and `BT` have to be such that the relative tangential
- displacement is $B_T U$. The matrix `BT` should have as many rows as
- `BN` multiplied b $d-1$ where $d$ is the domain dimension.
- The contact condition is prescribed thank to a multiplier
- `multname_n` whose dimension should be equal to the number of rows of
- `BN` and the friction condition by a mutliplier `multname_t` whise size
- should be the number of rows of `BT`.
- The parameter `dataname_friction_coeff` describe the friction
- coefficient. It could be a scalar or a vector describing the
- coefficient on each contact condition.
- The augmentation parameter
- `r` should be chosen in a range of acceptabe values
- (see Getfem user documentation). `dataname_gap` is an
- optional parameter representing the initial gap. It can be a single value
- or a vector of value. `dataname_alpha` is an optional homogenization
- parameter for the augmentation parameter
- (see Getfem user documentation). The parameter `symmetrized` indicates
- that a part of the symmetry of the tangent matrix will be kept or not
- (except for the coupling bewteen contact and friction).
- **/
- inline size_type add_Hughes_stab_friction_contact_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &multname_t, const std::string &dataname_r,
- CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
- std::string dataname_friction_coeff,
- std::string dataname_gap="", std::string dataname_alpha="",
- bool symmetrized=false){
-
- size_type indbrick =add_basic_contact_with_friction_brick
- (md, varname_u, multname_n, multname_t, dataname_r, BN, BT,
- dataname_friction_coeff, dataname_gap, dataname_alpha, symmetrized, true);
- gmm::resize(contact_brick_set_DN(md, indbrick),
- gmm::mat_nrows(DN), gmm::mat_ncols(DN));
- gmm::copy(DN, contact_brick_set_DN(md, indbrick));
-
- gmm::resize(contact_brick_set_DT(md, indbrick),
- gmm::mat_nrows(DT), gmm::mat_ncols(DT));
- gmm::copy(DT, contact_brick_set_DT(md, indbrick));
- return indbrick;
- }
-
-
-
- /** Add a frictionless contact condition with a rigid obstacle
- to the model. The condition is applied on the variable `varname_u`
- on the boundary corresponding to `region`. The rigid obstacle should
- be described with the string `obstacle` being a signed distance to
- the obstacle. This string should be an expression where the coordinates
- are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
- obstacle correspond to $z \le 0$, the corresponding signed distance will
- be simply "z". `multname_n` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region`. It represents the
- contact equivalent nodal forces.
- The augmentation parameter `r` should be chosen in a
- range of acceptabe values (close to the Young modulus of the elastic
- body, see Getfem user documentation). The
- parameter `symmetrized` indicates that the symmetry of the tangent
- matrix will be kept or not. Basically, this brick computes the matrix BN
- and the vectors gap and alpha and calls the basic contact brick.
- */
- size_type add_contact_with_rigid_obstacle_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- const std::string &multname_n, const std::string &dataname_r,
- size_type region, const std::string &obstacle, bool symmetrized = false);
-
-
- /** Add a contact with friction condition with a rigid obstacle
- to the model. The condition is applied on the variable `varname_u`
- on the boundary corresponding to `region`. The rigid obstacle should
- be described with the string `obstacle` being a signed distance to
- the obstacle. This string should be an expression where the coordinates
- are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
- obstacle correspond to $z \le 0$, the corresponding signed distance will
- be simply "z". `multname_n` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region`. It represents the
- contact equivalent nodal forces.
- `multname_t` should be a fixed size variable whose size is
- the number of degrees of freedom on boundary `region` multiplied by
- $d-1$ where $d$ is the domain dimension. It represents the
- friction equivalent nodal forces.
- The augmentation parameter `r` should be chosen in a
- range of acceptabe values (close to the Young modulus of the elastic
- body, see Getfem user documentation). `dataname_friction_coeff` is
- the friction coefficient. It could be a scalar or a vector of values
- representing the friction coefficient on each contact node.
- The parameter `symmetrized` indicates that the symmetry of the tangent
- matrix will be kept or not. Basically, this brick computes the matrix BN
- and the vectors gap and alpha and calls the basic contact brick.
- */
- size_type add_contact_with_friction_with_rigid_obstacle_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- const std::string &multname_n, const std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- size_type region, const std::string &obstacle, bool symmetrized);
-
-
- /** Add a frictionless contact condition between two faces of one or two
- elastic bodies. The condition is applied on the variable `varname_u` or
- the variables `varname_u1` and `varname_u2` depending if a single or
- two distinct displacement fields are given. Vectors `rg1` and `rg2`
- contain pairs of regions expected to come in contact with each other. In
- case of a single region per side, `rg1` and `rg2` can be given as normal
- integers. In the single displacement variable case the regions defined in
- both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
- two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
- to `varname_u2`. `multname_n` should be a fixed size variable whose size
- is the number of degrees of freedom on those regions among the ones
- defined in `rg1` and `rg2` which are characterized as "slaves". It
- represents the contact equivalent nodal forces. The augmentation
- parameter `r` should be chosen in a range of acceptabe values (close to
- the Young modulus of the elastic body, see Getfem user documentation).
- The optional parameters `slave1` and `slave2` declare if the regions
- defined in `rg1` and `rg2` are correspondingly considered as "slaves".
- By default `slave1` is true and `slave2` is false, i.e. `rg1` contains
- the slave surfaces, while 'rg2' the master surfaces. Preferably only
- one of `slave1` and `slave2` is set to true. The parameter `symmetrized`
- indicates that the symmetry of the tangent matrix will be kept or not.
- Basically, this brick computes the matrix BN and the vectors gap and
- alpha and calls the basic contact brick.
- */
- size_type add_nonmatching_meshes_contact_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, const std::string &dataname_r,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1=true, bool slave2=false, bool symmetrized=false);
-
- inline size_type add_nonmatching_meshes_contact_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, const std::string &dataname_r,
- size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
- bool symmetrized=false) {
-
- std::vector<size_type> vrg1(1,rg1);
- std::vector<size_type> vrg2(1,rg2);
- return add_nonmatching_meshes_contact_brick
- (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
- vrg1, vrg2, slave1, slave2, symmetrized);
- }
-
- inline size_type add_nonmatching_meshes_contact_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- std::string &multname_n, const std::string &dataname_r,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1=true, bool slave2=false, bool symmetrized=false) {
-
- return add_nonmatching_meshes_contact_brick
- (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
- rg1, rg2, slave1, slave2, symmetrized);
- }
-
- inline size_type add_nonmatching_meshes_contact_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- std::string &multname_n, const std::string &dataname_r,
- size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
- bool symmetrized=false) {
-
- std::vector<size_type> vrg1(1,rg1);
- std::vector<size_type> vrg2(1,rg2);
- return add_nonmatching_meshes_contact_brick
- (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
- vrg1, vrg2, slave1, slave2, symmetrized);
- }
-
-
- /** Add a contact with friction condition between two faces of one or two
- elastic bodies. The condition is applied on the variable `varname_u` or
- the variables `varname_u1` and `varname_u2` depending if a single or
- two distinct displacement fields are given. Vectors `rg1` and `rg2`
- contain pairs of regions expected to come in contact with each other. In
- case of a single region per side, `rg1` and `rg2` can be given as normal
- integers. In the single displacement variable case the regions defined in
- both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
- two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
- to `varname_u2`. `multname_n` should be a fixed size variable whose size
- is the number of degrees of freedom on those regions among the ones
- defined in `rg1` and `rg2` which are characterized as "slaves". It
- represents the contact equivalent nodal normal forces. `multname_t`
- should be a fixed size variable whose size corresponds to the size of
- `multname_n` multiplied by qdim - 1 . It represents the contact
- equivalent nodal tangent (frictional) forces. The augmentation parameter
- `r` should be chosen in a range of acceptabe values (close to the Young
- modulus of the elastic body, see Getfem user documentation). The friction
- coefficient stored in the parameter `friction_coeff` is either a single
- value or a vector of the same size as `multname_n`. The optional
- parameters `slave1` and `slave2` declare if the regions defined in `rg1`
- and `rg2` are correspondingly considered as "slaves". By default `slave1`
- is true and `slave2` is false, i.e. `rg1` contains the slave surfaces,
- while 'rg2' the master surfaces. Preferably only one of `slave1` and
- `slave2` is set to true. The parameter `symmetrized` indicates that the
- symmetry of the tangent matrix will be kept or not.
- Basically, this brick computes the matrices BN and BT as well the vectors
- gap and alpha and calls the basic contact brick.
- */
- size_type add_nonmatching_meshes_contact_with_friction_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1=true, bool slave2=false, bool symmetrized=false);
-
- inline size_type add_nonmatching_meshes_contact_with_friction_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
- bool symmetrized=false) {
-
- std::vector<size_type> vrg1(1,rg1);
- std::vector<size_type> vrg2(1,rg2);
- return add_nonmatching_meshes_contact_with_friction_brick
- (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
- dataname_r, dataname_friction_coeff,
- vrg1, vrg2, slave1, slave2, symmetrized);
- }
-
- inline size_type add_nonmatching_meshes_contact_with_friction_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- std::string &multname_n, std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1=true, bool slave2=false, bool symmetrized=false) {
-
- return add_nonmatching_meshes_contact_with_friction_brick
- (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
- dataname_r, dataname_friction_coeff,
- rg1, rg2, slave1, slave2, symmetrized);
- }
-
- inline size_type add_nonmatching_meshes_contact_with_friction_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- std::string &multname_n, std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
- bool symmetrized=false) {
-
- std::vector<size_type> vrg1(1,rg1);
- std::vector<size_type> vrg2(1,rg2);
- return add_nonmatching_meshes_contact_with_friction_brick
- (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
- dataname_r, dataname_friction_coeff,
- vrg1, vrg2, slave1, slave2, symmetrized);
- }
+namespace getfem {
//===========================================================================
@@ -405,7 +63,7 @@ namespace getfem {
*/
template<typename MODEL_STATE = standard_model_state>
class mdbrick_Coulomb_friction : public mdbrick_abstract<MODEL_STATE> {
-
+
TYPEDEF_MODEL_STATE_TYPES;
mdbrick_abstract<MODEL_STATE> &sub_problem;
@@ -413,21 +71,23 @@ namespace getfem {
T_MATRIX BN, BT;
typedef gmm::row_matrix<gmm::rsvector<value_type> > RT_MATRIX;
+ typedef gmm::dense_matrix<bool> CH_MATRIX;
RT_MATRIX AUG_M; // For Hansbo augmentation.
+ CH_MATRIX CH_M; // For determining the Jacobian manually; only for 2D.
VECTOR gap, threshold, WT, WN, friction_coef, RLN, RLT;
value_type r, alpha, beta;
size_type d, nbc;
const mesh_fem *mf_u;
gmm::sub_interval SUBU, SUBN, SUBT;
-
+
bool Tresca_version, symmetrized, contact_only, really_stationary;
template<typename VEC> static void ball_projection(const VEC &x,
value_type radius) {
value_type a = gmm::vect_norm2(x);
if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
- else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
+ else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
}
template<class VEC, class VECR>
@@ -444,7 +104,7 @@ namespace getfem {
if (radius <= value_type(0)) { gmm::clear(g); return; }
gmm::copy(gmm::identity_matrix(), g);
value_type a = gmm::vect_norm2(x);
- if (a >= radius) {
+ if (a >= radius) {
gmm::scale(g, radius/a);
// gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
for (size_type i = 0; i < x.size(); ++i)
@@ -461,7 +121,7 @@ namespace getfem {
SUBN = gmm::sub_interval(i0 + sub_problem.nb_dof(), gmm::mat_nrows(BN));
SUBT = gmm::sub_interval(i0 + sub_problem.nb_dof() + gmm::mat_nrows(BN),
gmm::mat_nrows(BT));
- gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r), RLN);
+ gmm::add(gmm::sub_vector(MS.state(), SUBN), gmm::scaled(gap, r*alpha), RLN);
if (gmm::vect_size(WN) > 0)
gmm::mult_add(BN, gmm::scaled(WN, -r*alpha), RLN);
gmm::mult_add(BN, gmm::scaled(gmm::sub_vector(MS.state(), SUBU),
@@ -495,21 +155,28 @@ namespace getfem {
}
public :
-
+
inline size_type nb_contact_nodes(void) const
{ return gmm::mat_nrows(BN); }
-
+
virtual void do_compute_tangent_matrix(MODEL_STATE &MS, size_type i0,
size_type) {
precomp(MS, i0);
-
+
RT_MATRIX BBN(gmm::mat_nrows(BN), gmm::mat_ncols(BN));
RT_MATRIX MM(nb_contact_nodes(), nb_contact_nodes());
gmm::copy(gmm::scaled(BN, -alpha), BBN);
if (gmm::mat_nrows(AUG_M) > 0)
gmm::copy(gmm::scaled(AUG_M, -value_type(1)), MM);
for (size_type i=0; i < nb_contact_nodes(); ++i) {
- if (RLN[i] >= value_type(0)) {
+ if (gmm::mat_nrows(CH_M) > 0) {
+ if (!CH_M(i, 0)) {
+ gmm::clear(BBN[i]);
+ if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
+ MM(i, i) = -value_type(1)/r;
+ }
+ }
+ else if (RLN[i] >= value_type(0)) {
gmm::clear(BBN[i]);
if (gmm::mat_nrows(AUG_M) > 0) gmm::clear(MM[i]);
MM(i, i) = -value_type(1)/r;
@@ -535,37 +202,49 @@ namespace getfem {
// MS.tangent_matrix()(SUBN.first()+i, SUBN.first()+i)=-value_type(1)/r;
// }
// }
-
+
if (!contact_only) {
base_matrix pg(d-1, d-1);
base_vector vg(d-1);
RT_MATRIX BBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
gmm::dense_matrix<value_type> BTi(d-1, gmm::mat_ncols(BT));
-
+
for (size_type i=0; i < nb_contact_nodes(); ++i) {
gmm::sub_interval SUBI(i*(d-1), d-1);
gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
gmm::sub_interval SUBJJ(i*(d-1),(d-1));
value_type th = Tresca_version ? threshold[i]
: - (MS.state())[SUBN.first()+i] * friction_coef[i];
-
- ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
+ std::vector<double> rlt_CH(1);
+
+ if (mat_nrows(CH_M) > 0) {
+ if (!CH_M(i, 0)) th = 0.0;
+ else th = 1.0;
+ if (!CH_M(i, 1)) rlt_CH[0] = -2.0;
+ else if (!CH_M(i, 2)) rlt_CH[0] = 2.0;
+ else rlt_CH[0] = 0.0;
+ ball_projection_grad(rlt_CH, th, pg);
+ } else
+ ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
if (!really_stationary)
- gmm::mult(gmm::scaled(pg, -beta),
+ gmm::mult(gmm::scaled(pg, -beta),
gmm::sub_matrix(BT, SUBI,
- gmm::sub_interval(0,gmm::mat_ncols(BT))),
+ gmm::sub_interval(0, gmm::mat_ncols(BT))),
BTi);
gmm::copy(BTi, gmm::sub_matrix(BBT, SUBJJ, SUBU));
if (!Tresca_version) {
- ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+ if (mat_nrows(CH_M) > 0)
+ ball_projection_grad_r(rlt_CH, th, vg);
+ else
+ ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
for (size_type k = 0; k < d-1; ++k)
MS.tangent_matrix()(SUBT.first()+i*(d-1)+k, SUBN.first()+i)
= - friction_coef[i] * vg[k] / r;
}
for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
- gmm::copy(gmm::scaled(pg,value_type(1)/r),
+ gmm::copy(gmm::scaled(pg,value_type(1)/r),
gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
}
T_MATRIX BBBT(gmm::mat_nrows(BT), gmm::mat_ncols(BT));
@@ -576,20 +255,20 @@ namespace getfem {
// if (!contact_only) {
// base_matrix pg(d-1, d-1);
// base_vector vg(d-1);
-
+
// for (size_type i=0; i < nb_contact_nodes(); ++i) {
// gmm::sub_interval SUBI(i*(d-1), d-1);
// gmm::sub_interval SUBJ(SUBT.first()+i*(d-1),(d-1));
// value_type th = Tresca_version ? threshold[i]
// : - (MS.state())[SUBN.first()+i] * friction_coef[i];
-
+
// ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
// if (!really_stationary)
-// gmm::mult(gmm::scaled(pg, -beta),
+// gmm::mult(gmm::scaled(pg, -beta),
// gmm::sub_matrix(BT, SUBI,
// gmm::sub_interval(0,gmm::mat_ncols(BT))),
// gmm::sub_matrix(MS.tangent_matrix(), SUBJ, SUBU));
-
+
// if (!Tresca_version) {
// ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
// for (size_type k = 0; k < d-1; ++k)
@@ -597,15 +276,15 @@ namespace getfem {
// = - friction_coef[i] * vg[k] / r;
// }
// for (size_type j = 0; j < d-1; ++j) pg(j,j) -= value_type(1);
-// gmm::copy(gmm::scaled(pg,value_type(1)/r),
+// gmm::copy(gmm::scaled(pg,value_type(1)/r),
// gmm::sub_matrix(MS.tangent_matrix(), SUBJ));
// }
// }
-
+
if (symmetrized) {
T_MATRIX tmp(mf_u->nb_dof(), mf_u->nb_dof());
-
+
gmm::resize(tmp, mf_u->nb_dof(), gmm::mat_nrows(BN));
gmm::copy(gmm::transposed(gmm::sub_matrix(MS.tangent_matrix(),
SUBN, SUBU)), tmp);
@@ -614,7 +293,7 @@ namespace getfem {
gmm::mult(gmm::transposed(gmm::scaled(BN,-r*alpha)),
gmm::sub_matrix(MS.tangent_matrix(), SUBN, SUBU), tmp);
gmm::add(tmp, gmm::sub_matrix(MS.tangent_matrix(), SUBU));
-
+
if (!contact_only) {
gmm::mult(gmm::transposed(gmm::scaled(BT,-r*beta)),
gmm::sub_matrix(MS.tangent_matrix(), SUBT, SUBU), tmp);
@@ -629,15 +308,15 @@ namespace getfem {
gmm::copy(gmm::scaled(gmm::transposed(BN), value_type(-1)),
gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBN));
if (!contact_only)
- gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)),
+ gmm::copy(gmm::scaled(gmm::transposed(BT), value_type(-1)),
gmm::sub_matrix(MS.tangent_matrix(), SUBU, SUBT));
}
}
-
+
virtual void do_compute_residual(MODEL_STATE &MS, size_type i0,size_type) {
precomp(MS, i0);
value_type c1(1);
-
+
for (size_type i=0; i < nb_contact_nodes(); ++i) {
RLN[i] = std::min(value_type(0), RLN[i]);
if (!contact_only)
@@ -645,7 +324,7 @@ namespace getfem {
Tresca_version ? threshold[i]
: -friction_coef[i]*(MS.state())[SUBN.first()+i]);
}
-
+
if (symmetrized) {
gmm::mult_add(gmm::transposed(BN), gmm::scaled(RLN, -c1),
gmm::sub_vector(MS.residual(), SUBU));
@@ -661,7 +340,7 @@ namespace getfem {
gmm::scaled(gmm::sub_vector(MS.state(), SUBT),-c1),
gmm::sub_vector(MS.residual(), SUBU));
}
-
+
/* residual on LN */
gmm::add(gmm::scaled(gmm::sub_vector(MS.state(), SUBN), -c1/r),
gmm::scaled(RLN, c1/r), gmm::sub_vector(MS.residual(), SUBN));
@@ -687,12 +366,20 @@ namespace getfem {
void set_stationary(bool b) { really_stationary = b; }
void set_beta(value_type a) { beta = a; }
+ value_type get_beta(void) const { return beta; }
void set_alpha(value_type a) { alpha = a; }
+ value_type get_alpha(void) const { return alpha; }
template<typename MAT> void set_augmented_matrix(const MAT &M) {
gmm::resize(AUG_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
gmm::copy(M, AUG_M);
}
+ void clear_character_matrix(void) { resize(CH_M, 0, 0); }
+ template<typename MAT> void set_character_matrix(const MAT &M) {
+ gmm::resize(CH_M, gmm::mat_nrows(M), gmm::mat_ncols(M));
+ gmm::copy(M, CH_M);
+ }
+
void set_r(value_type r_) { r = r_; }
value_type get_r(void) const { return r; }
template <class VEC> void set_WT(const VEC &WT_)
@@ -703,6 +390,9 @@ namespace getfem {
VECTOR &get_gap(void) { return gap; }
const VECTOR &get_gap(void) const { return gap; }
+ VECTOR &get_friction_coef(void) { return friction_coef; }
+ const VECTOR &get_friction_coef(void) const { return friction_coef; }
+
SUBVECTOR get_LN(MODEL_STATE &MS) {
SUBN = gmm::sub_interval(this->first_index() + sub_problem.nb_dof(),
gmm::mat_nrows(BN));
diff --git a/src/getfem/getfem_Navier_Stokes.h b/src/getfem/getfem_Navier_Stokes.h
index 921dedd..e3c81f2 100644
--- a/src/getfem/getfem_Navier_Stokes.h
+++ b/src/getfem/getfem_Navier_Stokes.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_Navier_Stokes.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_Xfem.h b/src/getfem/getfem_Xfem.h
index 93aaf5d..720a241 100644
--- a/src/getfem/getfem_Xfem.h
+++ b/src/getfem/getfem_Xfem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_Xfem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_arch_config.h b/src/getfem/getfem_arch_config.h
index 07e5a73..466afbc 100644
--- a/src/getfem/getfem_arch_config.h
+++ b/src/getfem/getfem_arch_config.h
@@ -21,7 +21,9 @@
/* #undef GETFEM_HAVE_BOOST */
/* Define to 1 if you have the <cmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_CMUMPS_C_H */
+#ifndef GETFEM_HAVE_CMUMPS_C_H
+#define GETFEM_HAVE_CMUMPS_C_H 1
+#endif
/* Define to 1 if you have the <cxxabi.h> header file. */
#ifndef GETFEM_HAVE_CXXABI_H
@@ -34,7 +36,9 @@
#endif
/* Define to 1 if you have the <dmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_DMUMPS_C_H */
+#ifndef GETFEM_HAVE_DMUMPS_C_H
+#define GETFEM_HAVE_DMUMPS_C_H 1
+#endif
/* glibc floating point exceptions control */
#ifndef GETFEM_HAVE_FEENABLEEXCEPT
@@ -46,9 +50,6 @@
#define GETFEM_HAVE_INTTYPES_H 1
#endif
-/* Define to 1 if you have the `metis' library (-lmetis). */
-/* #undef GETFEM_HAVE_LIBMETIS */
-
/* Define to 1 if you have the `mpich' library (-lmpich). */
/* #undef GETFEM_HAVE_LIBMPICH */
@@ -73,14 +74,10 @@
#define GETFEM_HAVE_MEMORY_H 1
#endif
-/* Define to 1 if you have the <mpich2/mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPICH2_MPI_H */
-
-/* Define to 1 if you have the <mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPI_H */
-
-/* Define to 1 if you have the <mpi/mpi.h> header file. */
-/* #undef GETFEM_HAVE_MPI_MPI_H */
+/* defined if the Metis library was found and is working */
+#ifndef GETFEM_HAVE_METIS
+#define GETFEM_HAVE_METIS 1
+#endif
/* Define to 1 if you have the <muParser.h> header file. */
/* #undef GETFEM_HAVE_MUPARSER_H */
@@ -109,7 +106,9 @@
#endif
/* Define to 1 if you have the <smumps_c.h> header file. */
-/* #undef GETFEM_HAVE_SMUMPS_C_H */
+#ifndef GETFEM_HAVE_SMUMPS_C_H
+#define GETFEM_HAVE_SMUMPS_C_H 1
+#endif
/* Define to 1 if you have the <stdint.h> header file. */
#ifndef GETFEM_HAVE_STDINT_H
@@ -176,7 +175,9 @@
#endif
/* Define to 1 if you have the <zmumps_c.h> header file. */
-/* #undef GETFEM_HAVE_ZMUMPS_C_H */
+#ifndef GETFEM_HAVE_ZMUMPS_C_H
+#define GETFEM_HAVE_ZMUMPS_C_H 1
+#endif
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
@@ -201,7 +202,7 @@
/* Define to the full name and version of this package. */
#ifndef GETFEM_PACKAGE_STRING
-#define GETFEM_PACKAGE_STRING "getfem 4.1.1"
+#define GETFEM_PACKAGE_STRING "getfem 4.2"
#endif
/* Define to the one symbol short name of this package. */
@@ -216,7 +217,7 @@
/* Define to the version of this package. */
#ifndef GETFEM_PACKAGE_VERSION
-#define GETFEM_PACKAGE_VERSION "4.1.1"
+#define GETFEM_PACKAGE_VERSION "4.2"
#endif
/* defined if quad-doubles are to be used instead of double-double */
@@ -232,7 +233,7 @@
/* Version number of package */
#ifndef GETFEM_VERSION
-#define GETFEM_VERSION "4.1.1"
+#define GETFEM_VERSION "4.2"
#endif
/* once: _SRC_GETFEM_GETFEM_ARCH_CONFIG_H */
diff --git a/src/getfem/getfem_assembling.h b/src/getfem/getfem_assembling.h
index a0a390c..2c0403b 100644
--- a/src/getfem/getfem_assembling.h
+++ b/src/getfem/getfem_assembling.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file getfem_assembling.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -41,9 +42,11 @@
#define GETFEM_ASSEMBLING_H__
#include "getfem_assembling_tensors.h"
+#include "getfem/getfem_mesh_im_level_set.h"
-namespace getfem {
+namespace getfem {
+
template <typename VEC>
scalar_type asm_mean_value(const mesh_im &mim, const mesh_fem &mf,
const VEC &U,
@@ -416,6 +419,10 @@ namespace getfem {
generic_assembly assem;
if (mf_u1.get_qdim() == 1 && mf_u2.get_qdim() == 1)
assem.set("M(#1,#2)+=comp(Base(#1).Base(#2))");
+ else if (mf_u1.get_qdim() == 1)
+ assem.set("M(#1,#2)+=comp(Base(#1).vBase(#2))(:,:,1);"); // could be i in place of 1
+ else if (mf_u2.get_qdim() == 1)
+ assem.set("M(#1,#2)+=comp(vBase(#1).Base(#2))(:,1,:);");
else
assem.set("M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,i);");
assem.push_mi(mim);
@@ -467,6 +474,7 @@ namespace getfem {
assem.assembly(rg);
}
+
/**
source term (for both volumic sources and boundary (Neumann) sources).
@ingroup asm
diff --git a/src/getfem/getfem_assembling_tensors.h b/src/getfem/getfem_assembling_tensors.h
index 6e9992e..9baf53f 100644
--- a/src/getfem/getfem_assembling_tensors.h
+++ b/src/getfem/getfem_assembling_tensors.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_assembling_tensors.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -87,11 +88,12 @@ namespace getfem {
size_type nchilds() { return childs_.size(); }
/* reinit is called each time the object need to reset itself
(when the shape of one of its childs has changed) */
- virtual void reinit() = 0;
+ void reinit() { if (!is_zero_size()) reinit_(); }
/* do the computations for a given convex */
void exec(size_type cv, dim_type face) {
if (cv != current_cv || face != current_face) {
- exec_(cv,face);
+ if (!is_zero_size())
+ exec_(cv,face);
current_cv = cv;
current_face = face;
}
@@ -103,11 +105,14 @@ namespace getfem {
*/
virtual void update_childs_required_shape();
+ virtual bool is_zero_size();
+
/* numbering og tensors, such that if i < j then tensor(j)
cannot be in the sub-tree of tensor(i) */
void set_number(unsigned &gcnt);
unsigned number() const { return number_; }
private:
+ virtual void reinit_() = 0;
virtual void exec_(size_type , dim_type ) {}
};
@@ -153,6 +158,8 @@ namespace getfem {
return tr;
}
+ bool is_zero_size() { return r_.is_zero_size(); }
+
void merge_required_shape(const tensor_shape& shape_from_parent) {
req_shape.merge(shape_from_parent, false);
}
@@ -210,7 +217,7 @@ namespace getfem {
<< strides[vdim.size()]);
}
private:
- void reinit() {
+ void reinit_() {
mti = multi_tensor_iterator(child(0).tensor(),true);
}
void exec_(size_type cv, dim_type) {
@@ -296,7 +303,7 @@ namespace getfem {
it.reserve(100);
}
private:
- void reinit() {
+ void reinit_() {
mti = multi_tensor_iterator(child(0).tensor(),true);
it.resize(0);
}
@@ -493,7 +500,7 @@ namespace getfem {
: public base_mat_factory, private std::deque<asm_mat<MAT> > {
public:
base_asm_mat* create_mat(size_type m, size_type n) {
- push_back(asm_mat<MAT>(new MAT(m, n))); return &this->back();
+ this->push_back(asm_mat<MAT>(new MAT(m, n))); return &this->back();
}
~mat_factory() {
for (size_type i=0; i < this->size(); ++i) {
diff --git a/src/getfem/getfem_config.h b/src/getfem/getfem_config.h
index b41bdf0..8ca692f 100644
--- a/src/getfem/getfem_config.h
+++ b/src/getfem/getfem_config.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/*! @mainpage Getfem++ reference documentation.
@@ -233,6 +234,10 @@ extern "C" void METIS_PartGraphKway(int *, int *, int *, int *, int *, int *,
/// GEneric Tool for Finite Element Methods.
namespace getfem {
+ using std::endl; using std::cout; using std::cerr;
+ using std::ends; using std::cin;
+
+
#if GETFEM_PARA_LEVEL > 1
template <typename T> inline T MPI_SUM_SCALAR(T a)
{ T b; MPI_Allreduce(&a,&b,1,gmm::mpi_type(a),MPI_SUM,MPI_COMM_WORLD); return b; }
@@ -259,8 +264,11 @@ namespace getfem {
template <typename T> inline T MPI_SUM_SCALAR(T a) { return a; }
template <typename VECT> inline void MPI_SUM_VECTOR(VECT) {}
template <typename VECT1, typename VECT2>
- inline void MPI_SUM_VECTOR(const VECT1 &V, const VECT2 &W)
- { gmm::copy(V, gmm::linalg_const_cast(W)); }
+ inline void MPI_SUM_VECTOR(const VECT1 &V, const VECT2 &WW)
+ {
+ VECT2 &W = const_cast<VECT2 &>(WW);
+ gmm::copy(V, W);
+ }
inline bool MPI_IS_MASTER(void) { return true; }
#endif
diff --git a/src/getfem/getfem_contact_and_friction_common.h b/src/getfem/getfem_contact_and_friction_common.h
new file mode 100644
index 0000000..265a6d2
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_common.h
@@ -0,0 +1,182 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_common.h
+ @author Yves Renard <Yves.Renard at insa-lyon.fr>
+ @author Konstantinos Poulios <logari81 at googlemail.com>
+ @date November, 2011.
+ @brief Comomon tools for unilateral contact and Coulomb friction bricks.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_COMMON_H__
+#define GETFEM_CONTACT_AND_FRICTION_COMMON_H__
+
+#include "getfem_models.h"
+#include "getfem_assembling_tensors.h"
+
+namespace getfem {
+
+ //=========================================================================
+ //
+ // Projection on a ball and gradient of the projection.
+ //
+ //=========================================================================
+
+ template<typename VEC> void ball_projection(const VEC &x,
+ scalar_type radius) {
+ scalar_type a = gmm::vect_norm2(x);
+ if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
+ else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
+ }
+
+ template<typename VEC, typename VECR>
+ void ball_projection_grad_r(const VEC &x, scalar_type radius,
+ VECR &g) {
+ scalar_type a = gmm::vect_norm2(x);
+ if (radius > 0 && a >= radius) {
+ gmm::copy(x, g); gmm::scale(g, scalar_type(1)/a);
+ }
+ else gmm::clear(g);
+ }
+
+ template <typename VEC, typename MAT>
+ void ball_projection_grad(const VEC &x, double radius, MAT &g) {
+ if (radius <= scalar_type(0)) { gmm::clear(g); return; }
+ gmm::copy(gmm::identity_matrix(), g);
+ scalar_type a = gmm::vect_norm2(x);
+ if (a >= radius) {
+ gmm::scale(g, radius/a);
+ // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
+ for (size_type i = 0; i < x.size(); ++i)
+ for (size_type j = 0; j < x.size(); ++j)
+ g(i,j) -= radius*x[i]*x[j] / (a*a*a);
+ }
+ }
+
+ //=========================================================================
+ //
+ // De Saxce projection and its gradients.
+ //
+ //=========================================================================
+
+
+ template<typename VEC>
+ void De_Saxce_projection(const VEC &x, const VEC &n_, scalar_type f) {
+ static VEC n; // For more robustness, n_ is not supposed unitary
+ size_type N = gmm::vect_size(x);
+ gmm::resize(n, N);
+ gmm::copy(gmm::scaled(n_, scalar_type(1)/gmm::vect_norm2(n_)), n);
+ scalar_type xn = gmm::vect_sp(x, n);
+ scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+ if (xn >= scalar_type(0) && f * nxt <= xn) {
+ gmm::clear(const_cast<VEC&>(x));
+ } else if (xn > scalar_type(0) || nxt > -f*xn) {
+ gmm::add(gmm::scaled(n, -xn), const_cast<VEC&>(x));
+ gmm::scale(const_cast<VEC&>(x), -f / nxt);
+ gmm::add(n, const_cast<VEC&>(x));
+ gmm::scale(const_cast<VEC&>(x), (xn - f * nxt) / (f*f+scalar_type(1)));
+ }
+ }
+
+ template<typename VEC, typename MAT>
+ void De_Saxce_projection_grad(const VEC &x, const VEC &n_,
+ scalar_type f, MAT &g) {
+ static VEC n;
+ size_type N = gmm::vect_size(x);
+ gmm::resize(n, N);
+ gmm::copy(gmm::scaled(n_, scalar_type(1)/gmm::vect_norm2(n_)), n);
+ scalar_type xn = gmm::vect_sp(x, n);
+ scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+
+
+ if (xn > scalar_type(0) && f * nxt <= xn) {
+ gmm::clear(g);
+ } else if (xn > scalar_type(0) || nxt > -f*xn) {
+ static VEC xt;
+ gmm::resize(xt, N);
+ gmm::add(x, gmm::scaled(n, -xn), xt);
+ gmm::scale(xt, scalar_type(1)/nxt);
+
+ if (N > 2) {
+ gmm::copy(gmm::identity_matrix(), g);
+ gmm::rank_one_update(g, gmm::scaled(n, -scalar_type(1)), n);
+ gmm::rank_one_update(g, gmm::scaled(xt, -scalar_type(1)), xt);
+ gmm::scale(g, f*(f - xn/nxt));
+ } else {
+ gmm::clear(g);
+ }
+
+ gmm::scale(xt, -f); gmm::add(n, xt);
+ gmm::rank_one_update(g, xt, xt);
+ gmm::scale(g, scalar_type(1) / (f*f+scalar_type(1)));
+ } else {
+ gmm::copy(gmm::identity_matrix(), g);
+ }
+ }
+
+
+ template<typename VEC, typename MAT>
+ static void De_Saxce_projection_gradn(const VEC &x, const VEC &n_,
+ scalar_type f, MAT &g) {
+ static VEC n;
+ size_type N = gmm::vect_size(x);
+ scalar_type nn = gmm::vect_norm2(n_);
+ gmm::resize(n, N);
+ gmm::copy(gmm::scaled(n_, scalar_type(1)/nn), n);
+ scalar_type xn = gmm::vect_sp(x, n);
+ scalar_type nxt = sqrt(gmm::abs(gmm::vect_norm2_sqr(x) - xn*xn));
+ gmm::clear(g);
+
+ if (!(xn > scalar_type(0) && f * nxt <= xn)
+ && (xn > scalar_type(0) || nxt > -f*xn)) {
+ static VEC xt, aux;
+ gmm::resize(xt, N); gmm::resize(aux, N);
+ gmm::add(x, gmm::scaled(n, -xn), xt);
+ gmm::scale(xt, scalar_type(1)/nxt);
+
+ scalar_type c = (scalar_type(1) + f*xn/nxt)/nn;
+ for (size_type i = 0; i < N; ++i) g(i,i) = c;
+ gmm::rank_one_update(g, gmm::scaled(n, -c), n);
+ gmm::rank_one_update(g, gmm::scaled(n, f/nn), xt);
+ gmm::rank_one_update(g, gmm::scaled(xt, -f*xn/(nn*nxt)), xt);
+ gmm::scale(g, xn - f*nxt);
+
+ gmm::add(gmm::scaled(xt, -f), n, aux);
+ gmm::rank_one_update(g, aux, gmm::scaled(xt, (nxt+f*xn)/nn));
+
+ gmm::scale(g, scalar_type(1) / (f*f+scalar_type(1)));
+ }
+ }
+
+
+} /* end of namespace getfem. */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_COMMON_H__ */
diff --git a/src/getfem/getfem_contact_and_friction_integral.h b/src/getfem/getfem_contact_and_friction_integral.h
new file mode 100644
index 0000000..58b23e8
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_integral.h
@@ -0,0 +1,773 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_integral.h
+ @author Yves Renard <Yves.Renard at insa-lyon.fr>
+ @author Konstantinos Poulios <logari81 at googlemail.com>
+ @date November, 2011.
+ @brief Unilateral contact and Coulomb friction condition brick.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__
+#define GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__
+
+#include "getfem_models.h"
+#include "getfem_assembling_tensors.h"
+
+namespace getfem {
+
+
+ /** Add a frictionless contact condition with a rigid obstacle
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of
+ Newton iterations should be more or less independent of the mesh size.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ `multname_n` should be a fem variable representing the contact stress.
+ An inf-sup condition between `multname_n` and `varname_u` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ */
+ size_type add_integral_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &dataname_obs,
+ const std::string &dataname_r, size_type region, int option = 1);
+
+ /** Add a contact with friction condition with a rigid obstacle
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of the
+ Newton iterations should be more or less independent of the mesh size.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance
+ to the obstacle (interpolated on a finite element method).
+ `multname` should be a fem variable representing the contact and
+ friction stress.
+ An inf-sup condition between `multname` and `varname_u` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values. `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ `dataname_alpha` and `dataname_wt` are optional parameters to solve
+ evolutionary friction problems. `dataname_gamma` and `dataname_vt`
+ represent optional data for adding a parameter-dependent sliding
+ velocity to the friction condition.
+ */
+ size_type add_integral_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname, const std::string &dataname_obs,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region, int option = 1, const std::string &dataname_alpha = "",
+ const std::string &dataname_wt = "",
+ const std::string &dataname_gamma = "",
+ const std::string &dataname_vt = "");
+
+
+ /** Add a penalized contact frictionless condition with a rigid obstacle
+ to the model.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe an approximate non-penetration condition
+ but not too large not to deteriorate too much the conditionning of
+ the tangent system. `dataname_n` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda_n (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ */
+ size_type add_penalized_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ size_type region, int option = 1, const std::string &dataname_n = "");
+
+ /** Add a penalized contact condition with Coulomb friction with a
+ rigid obstacle to the model.
+ The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the data `dataname_obstacle` being a signed distance to
+ the obstacle (interpolated on a finite element method).
+ `dataname_friction_coeff`` is the friction coefficient which could
+ be constant or defined on a finite element method.
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ `dataname_alpha` and `dataname_wt` are optional parameters to solve
+ evolutionary friction problems.
+ */
+ size_type add_penalized_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ size_type region, int option = 1, const std::string &dataname_lambda = "",
+ const std::string &dataname_alpha = "",
+ const std::string &dataname_wt = "");
+
+
+ /** Add a frictionless contact condition between nonmatching meshes
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of Newton iterations should be more or less independent
+ of the mesh size.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ `multname_n` should be a fem variable representing the contact stress.
+ An inf-sup condition between `multname_n` and `varname_u1` and
+ `varname_u2` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ */
+ size_type add_integral_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &multname_n,
+ const std::string &dataname_r,
+ size_type region1, size_type region2, int option = 1);
+
+ /** Add a contact with friction condition between nonmatching meshes
+ to the model. This brick adds a contact which is defined
+ in an integral way. It is the direct approximation of an augmented
+ Lagrangian formulation (see Getfem user documentation) defined at the
+ continuous level. The advantage should be a better scalability:
+ the number of Newton iterations should be more or less independent
+ of the mesh size.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ `multname` should be a fem variable representing the contact and
+ friction stress.
+ An inf-sup condition between `multname` and `varname_u1` and
+ `varname_u2` is required.
+ The augmentation parameter `dataname_r` should be chosen in a
+ range of acceptable values. `dataname_friction_coeff` is the friction
+ coefficient which could be constant or defined on a finite element
+ method on the same mesh as `varname_u1`.
+ Possible values for `option` is 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian method, 2 for the symmetric one, 3 for the
+ non-symmetric Alart-Curnier method with an additional augmentation
+ and 4 for a new unsymmetric method. The default value is 1.
+ `dataname_alpha`, `dataname_wt1` and `dataname_wt2` are optional
+ parameters to solve evolutionary friction problems.
+ */
+ size_type add_integral_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &multname,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region1, size_type region2, int option = 1,
+ const std::string &dataname_alpha = "",
+ const std::string &dataname_wt1 = "",
+ const std::string &dataname_wt2 = "");
+
+
+ /** Add a penalized contact frictionless condition between nonmatching
+ meshes to the model.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe an approximate non-penetration condition
+ but not too large not to deteriorate too much the conditionning of
+ the tangent system. `dataname_n` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda_n (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ */
+ size_type add_penalized_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &dataname_r,
+ size_type region1, size_type region2,
+ int option = 1, const std::string &dataname_n = "");
+
+
+ /** Add a penalized contact condition with Coulomb friction between
+ nonmatching meshes to the model.
+ The condition is applied on the variables `varname_u1` and `varname_u2`
+ on the boundaries corresponding to `region1` and `region2`.
+ The penalization parameter `dataname_r` should be chosen
+ large enough to prescribe approximate non-penetration and friction
+ conditions but not too large not to deteriorate too much the
+ conditionning of the tangent system.
+ `dataname_friction_coeff` is the friction coefficient which could be constant
+ or defined on a finite element method on the same mesh as `varname_u1`.
+ `dataname_lambda` is an optional parameter used if option
+ is 2. In that case, the penalization term is shifted by lambda (this
+ allows the use of an Uzawa algorithm on the corresponding augmented
+ Lagrangian formulation)
+ `dataname_alpha`, `dataname_wt1` and `dataname_wt2` are optional parameters
+ to solve evolutionary friction problems.
+ */
+ size_type add_penalized_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ size_type region1, size_type region2, int option = 1,
+ const std::string &dataname_lambda = "",
+ const std::string &dataname_alpha = "",
+ const std::string &dataname_wt1 = "",
+ const std::string &dataname_wt2 = "");
+
+
+ enum contact_nonlinear_term_version { RHS_L_V1,
+ RHS_L_V2,
+ K_LL_V1,
+ K_LL_V2,
+ UZAWA_PROJ,
+ CONTACT_FLAG,
+
+ RHS_U_V1,
+ RHS_U_V2,
+ RHS_U_V4,
+ RHS_U_V5,
+ RHS_U_FRICT_V1,
+ RHS_U_FRICT_V4,
+ RHS_U_FRICT_V6,
+ RHS_U_FRICT_V7,
+ RHS_U_FRICT_V8,
+ RHS_U_FRICT_V5,
+ RHS_L_FRICT_V1,
+ RHS_L_FRICT_V2,
+ RHS_L_FRICT_V4,
+ K_UL_V1,
+ K_UL_V2,
+ K_UL_V3,
+ K_UL_V4,
+ UZAWA_PROJ_FRICT,
+ UZAWA_PROJ_FRICT_SAXCE,
+
+ K_UU_V1,
+ K_UU_V2,
+ K_UL_FRICT_V1, // EYE
+ K_UL_FRICT_V2,
+ K_UL_FRICT_V3,
+ K_UL_FRICT_V4,
+ K_UL_FRICT_V5,
+ K_UL_FRICT_V7,
+ K_UL_FRICT_V8,
+ K_LL_FRICT_V1,
+ K_LL_FRICT_V2,
+ K_LL_FRICT_V3,
+ K_LL_FRICT_V4,
+ K_UU_FRICT_V1,
+ K_UU_FRICT_V2,
+ K_UU_FRICT_V3,
+ K_UU_FRICT_V4,
+ K_UU_FRICT_V5
+ };
+
+ class contact_nonlinear_term : public nonlinear_elem_term {
+
+ protected:
+ // the following variables are used in the compute method and their values
+ // have to be calculated during the preceding calls to the prepare method
+ // at the current interpolation context
+ base_small_vector lnt, lt; // multiplier lambda and its tangential component lambda_t
+ scalar_type ln; // normal component lambda_n of the multiplier
+ base_small_vector zt; // tangential relative displacement
+ scalar_type un; // normal relative displacement (positive when the first
+ // elastic body surface moves outwards)
+ base_small_vector no; // surface normal, pointing outwards with respect
+ // to the (first) elastic body
+ scalar_type g, f_coeff; // gap and coefficient of friction values
+
+ // these variables are used as temporary storage and they will usually contain
+ // garbage from previous calculations
+ base_small_vector aux1, auxN, V; // helper vectors of size 1, N and N respectively
+ base_matrix GP; // helper matrix of size NxN
+
+ void adjust_tensor_size(void);
+
+ public:
+ dim_type N;
+ size_type option;
+ scalar_type r;
+ bool contact_only;
+ scalar_type alpha;
+
+ bgeot::multi_index sizes_;
+
+ contact_nonlinear_term(dim_type N_, size_type option_, scalar_type r_,
+ bool contact_only_ = true,
+ scalar_type alpha_ = scalar_type(1)) :
+ N(N_), option(option_), r(r_), contact_only(contact_only_), alpha(alpha_) {
+
+ adjust_tensor_size();
+ }
+
+ const bgeot::multi_index &sizes() const { return sizes_; }
+
+ virtual void compute(fem_interpolation_context&, bgeot::base_tensor &t);
+ virtual void prepare(fem_interpolation_context& /*ctx*/, size_type /*nb*/)
+ { GMM_ASSERT1(false, "the prepare method has to be reimplemented in "
+ "a derived class"); }
+
+ };
+
+
+ class contact_rigid_obstacle_nonlinear_term : public contact_nonlinear_term {
+
+ // temporary variables to be used inside the prepare method
+ base_small_vector vt; // of size N
+ base_vector coeff; // of variable size
+ base_matrix grad; // of size 1xN
+
+ public:
+ // class specific objects to take into account inside the prepare method
+ const mesh_fem &mf_u; // mandatory
+ const mesh_fem &mf_obs; // mandatory
+ const mesh_fem *pmf_lambda; // optional for terms involving lagrange multipliers
+ const mesh_fem *pmf_coeff; // optional for terms involving fem described coefficient of friction
+ base_vector U, obs, lambda, friction_coeff, WT, VT;
+ scalar_type gamma;
+
+ template <typename VECT1>
+ contact_rigid_obstacle_nonlinear_term
+ (size_type option_, scalar_type r_,
+ const mesh_fem &mf_u_, const VECT1 &U_,
+ const mesh_fem &mf_obs_, const VECT1 &obs_,
+ const mesh_fem *pmf_lambda_ = 0, const VECT1 *lambda_ = 0,
+ const mesh_fem *pmf_coeff_ = 0, const VECT1 *f_coeff_ = 0,
+ scalar_type alpha_ = scalar_type(1), const VECT1 *WT_ = 0,
+ scalar_type gamma_ = scalar_type(1), const VECT1 *VT_ = 0
+ )
+ : contact_nonlinear_term(mf_u_.linked_mesh().dim(), option_, r_,
+ (f_coeff_ == 0), alpha_
+ ),
+ mf_u(mf_u_), mf_obs(mf_obs_),
+ pmf_lambda(pmf_lambda_), pmf_coeff(pmf_coeff_),
+ U(mf_u.nb_basic_dof()), obs(mf_obs.nb_basic_dof()),
+ lambda(0), friction_coeff(0), WT(0), VT(0), gamma(gamma_)
+ {
+
+ mf_u.extend_vector(U_, U);
+ mf_obs.extend_vector(obs_, obs);
+
+ if (pmf_lambda) {
+ lambda.resize(pmf_lambda->nb_basic_dof());
+ pmf_lambda->extend_vector(*lambda_, lambda);
+ }
+
+ if (!contact_only) {
+ if (!pmf_coeff)
+ f_coeff = (*f_coeff_)[0];
+ else {
+ friction_coeff.resize(pmf_coeff->nb_basic_dof());
+ pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+ }
+
+ if (WT_ && gmm::vect_size(*WT_)) {
+ WT.resize(mf_u.nb_basic_dof());
+ mf_u.extend_vector(*WT_, WT);
+ }
+
+ if (VT_ && gmm::vect_size(*VT_)) {
+ VT.resize(mf_u.nb_basic_dof());
+ mf_u.extend_vector(*VT_, VT);
+ }
+ }
+
+ vt.resize(N);
+ gmm::resize(grad, 1, N);
+
+ GMM_ASSERT1(mf_u.get_qdim() == N, "wrong qdim for the mesh_fem");
+ }
+
+ // this methode prepares all necessary data for the compute method
+ // of the base class
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb);
+
+ };
+
+
+ class contact_nonmatching_meshes_nonlinear_term : public contact_nonlinear_term {
+
+ // temporary variables to be used inside the prepare method
+ base_vector coeff; // of variable size
+ base_matrix grad; // of size 1xN
+
+ public:
+ const mesh_fem &mf_u1; // displacements on the non-mortar side
+ const mesh_fem &mf_u2; // displacements of the mortar side projected on the non-mortar side
+ const mesh_fem *pmf_lambda; // Lagrange multipliers defined on the non-mortar side
+ const mesh_fem *pmf_coeff; // coefficient of friction defined on the non-mortar side
+ base_vector U1, U2, lambda, friction_coeff, WT1, WT2;
+
+ template <typename VECT1>
+ contact_nonmatching_meshes_nonlinear_term
+ (size_type option_, scalar_type r_,
+ const mesh_fem &mf_u1_, const VECT1 &U1_,
+ const mesh_fem &mf_u2_, const VECT1 &U2_,
+ const mesh_fem *pmf_lambda_ = 0, const VECT1 *lambda_ = 0,
+ const mesh_fem *pmf_coeff_ = 0, const VECT1 *f_coeff_ = 0,
+ scalar_type alpha_ = scalar_type(1),
+ const VECT1 *WT1_ = 0, const VECT1 *WT2_ = 0
+ )
+ : contact_nonlinear_term(mf_u1_.linked_mesh().dim(), option_, r_,
+ (f_coeff_ == 0), alpha_
+ ),
+ mf_u1(mf_u1_), mf_u2(mf_u2_),
+ pmf_lambda(pmf_lambda_), pmf_coeff(pmf_coeff_),
+ U1(mf_u1.nb_basic_dof()), U2(mf_u2.nb_basic_dof()),
+ lambda(0), friction_coeff(0), WT1(0), WT2(0)
+ {
+
+ GMM_ASSERT1(mf_u2.linked_mesh().dim() == N,
+ "incompatible mesh dimensions for the given mesh_fem's");
+
+ mf_u1.extend_vector(U1_, U1);
+ mf_u2.extend_vector(U2_, U2);
+
+ if (pmf_lambda) {
+ lambda.resize(pmf_lambda->nb_basic_dof());
+ pmf_lambda->extend_vector(*lambda_, lambda);
+ }
+
+ if (!contact_only) {
+ if (!pmf_coeff)
+ f_coeff = (*f_coeff_)[0];
+ else {
+ friction_coeff.resize(pmf_coeff->nb_basic_dof());
+ pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+ }
+ if (WT1_ && WT2_ && gmm::vect_size(*WT1_) && gmm::vect_size(*WT2_)) {
+ WT1.resize(mf_u1.nb_basic_dof());
+ mf_u1.extend_vector(*WT1_, WT1);
+ WT2.resize(mf_u2.nb_basic_dof());
+ mf_u2.extend_vector(*WT2_, WT2);
+ }
+ }
+
+ gmm::resize(grad, 1, N);
+
+ GMM_ASSERT1(mf_u1.get_qdim() == N, "wrong qdim for the 1st mesh_fem");
+ GMM_ASSERT1(mf_u2.get_qdim() == N, "wrong qdim for the 2nd mesh_fem");
+ }
+
+ // this method prepares all necessary data for the compute method
+ // of the base class
+ virtual void prepare(fem_interpolation_context& ctx, size_type nb);
+
+ };
+
+
+ /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact with rigid obstacle problems with friction.
+ */
+ template<typename VECT1>
+ void asm_integral_contact_Uzawa_proj
+ (VECT1 &R, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff, const VECT1 *WT,
+ scalar_type r, scalar_type alpha, const mesh_region &rg, int option = 1) {
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1((option == 1) ? UZAWA_PROJ_FRICT : UZAWA_PROJ_FRICT_SAXCE, r,
+ mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, &f_coeff, alpha, WT);
+
+ getfem::generic_assembly assem;
+ if (pmf_coeff) // variable coefficient of friction
+ assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3,#4).vBase(#3))(i,:,i); ");
+ else // constant coefficient of friction
+ assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#3))(i,:,i); ");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_vec(R);
+ assem.assembly(rg);
+ }
+
+ /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact problems.
+ */
+ template<typename VECT1>
+ void asm_integral_contact_Uzawa_proj
+ (VECT1 &R, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ scalar_type r, const mesh_region &rg) {
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1(UZAWA_PROJ, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ assem.set("V(#3)+=comp(NonLin$1(#1,#1,#2,#3).Base(#3))(i,:); ");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_vec(R);
+ assem.assembly(rg);
+ }
+
+
+ /** Specific assembly procedure for the use of an Uzawa algorithm to solve
+ contact problems.
+ */
+ template<typename VEC>
+ void asm_level_set_normal_source_term
+ (VEC &R, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, // const VEC &U,
+ const getfem::mesh_fem &mf_obs, const VEC &obs,
+ const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+ const mesh_region &rg) {
+
+ VEC U;
+ gmm::resize(U, mf_u.nb_dof());
+ scalar_type r(0.);
+ contact_rigid_obstacle_nonlinear_term
+ nterm(RHS_U_V1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ assem.set("V(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); ");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(R);
+ assem.assembly(rg);
+ }
+
+ template<typename VEC>
+ scalar_type asm_level_set_contact_area
+ (const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VEC &U,
+ const getfem::mesh_fem &mf_obs, const VEC &obs,
+ const mesh_region &rg, scalar_type threshold_factor=0.0) {
+
+ //FIXME: use an adapted integration method
+
+ // assemble an estimator of the mesh size
+ getfem::mesh_fem mf_mesh_size(mf_u.linked_mesh());
+ mf_mesh_size.set_qdim(1);
+ mf_mesh_size.set_classical_finite_element(1);
+ VEC vec_mesh_size(mf_mesh_size.nb_dof());
+
+ getfem::generic_assembly assem_mesh_size;
+ assem_mesh_size.set("V(#1)+=comp(Base(#1))");
+ assem_mesh_size.push_mi(mim);
+ assem_mesh_size.push_mf(mf_mesh_size);
+ assem_mesh_size.push_vec(vec_mesh_size);
+ assem_mesh_size.assembly(rg);
+ if (mf_u.get_qdim() == 3)
+ for (size_type i=0; i < gmm::vect_size(vec_mesh_size); i++)
+ vec_mesh_size[i] = sqrt(vec_mesh_size[i]);
+
+ // compute the total contact area
+ // remark: the CONTACT_FLAG option misuses r as threshold factor and mf_lambda
+ // as mesh size estimation
+ scalar_type r(threshold_factor);
+ contact_rigid_obstacle_nonlinear_term
+ nterm(CONTACT_FLAG, r, mf_u, U, mf_obs, obs, &mf_mesh_size, &vec_mesh_size);
+
+ getfem::generic_assembly assem;
+ assem.set("V()+=comp(NonLin(#1,#1,#2,#3))(i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_mesh_size);
+ assem.push_nonlinear_term(&nterm);
+ std::vector<scalar_type> v(1);
+ assem.push_vec(v);
+ assem.assembly(rg);
+ return v[0];
+ }
+
+
+ template<typename VEC>
+ void asm_nonmatching_meshes_normal_source_term
+ (VEC &R, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, // const VEC &U1,
+ const getfem::mesh_fem &mf_u2_proj, // const VEC &U2_proj,
+ const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+ const mesh_region &rg) {
+
+ VEC U1, U2_proj;
+ gmm::resize(U1, mf_u1.nb_dof());
+ gmm::resize(U2_proj, mf_u2_proj.nb_dof());
+ scalar_type r(0);
+ contact_nonmatching_meshes_nonlinear_term
+ nterm(RHS_U_V1, r, mf_u1, U1, mf_u2_proj, U2_proj, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ assem.set("V(#1)+=comp(NonLin(#1,#1,#2,#3).vBase(#1))(i,:,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2_proj);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(R);
+ assem.assembly(rg);
+ }
+
+ template<typename VEC>
+ scalar_type asm_nonmatching_meshes_contact_area
+ (const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VEC &U1,
+ const getfem::mesh_fem &mf_u2_proj, const VEC &U2_proj,
+ const mesh_region &rg, scalar_type threshold_factor=0.0) {
+
+ //FIXME: use an adapted integration method
+
+ // assemble an estimator of the mesh size
+ getfem::mesh_fem mf_mesh_size(mf_u1.linked_mesh());
+ mf_mesh_size.set_qdim(1);
+ mf_mesh_size.set_classical_finite_element(1);
+ VEC vec_mesh_size(mf_mesh_size.nb_dof());
+
+ getfem::generic_assembly assem_mesh_size;
+ assem_mesh_size.set("V(#1)+=comp(Base(#1))");
+ assem_mesh_size.push_mi(mim);
+ assem_mesh_size.push_mf(mf_mesh_size);
+ assem_mesh_size.push_vec(vec_mesh_size);
+ assem_mesh_size.assembly(rg);
+ if (mf_u1.get_qdim() == 3)
+ for (size_type i=0; i < gmm::vect_size(vec_mesh_size); i++)
+ vec_mesh_size[i] = sqrt(vec_mesh_size[i]);
+
+ // compute the total contact area
+ // remark: the CONTACT_FLAG option misuses r as threshold factor and mf_lambda
+ // as mesh size estimation
+ scalar_type r(threshold_factor);
+ contact_nonmatching_meshes_nonlinear_term
+ nterm(CONTACT_FLAG, r, mf_u1, U1, mf_u2_proj, U2_proj, &mf_mesh_size, &vec_mesh_size);
+
+ getfem::generic_assembly assem;
+ assem.set("V()+=comp(NonLin(#1,#1,#2,#3))(i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2_proj);
+ assem.push_mf(mf_mesh_size);
+ assem.push_nonlinear_term(&nterm);
+ std::vector<scalar_type> v(1);
+ assem.push_vec(v);
+ assem.assembly(rg);
+ return v[0];
+ }
+
+
+ void compute_integral_contact_area_and_force
+ (model &md, size_type indbrick,
+ scalar_type &area, model_real_plain_vector &Forces);
+
+
+
+
+ /** Add a large sliding contact with friction brick to the model.
+ This brick is able to deal with auto-contact, contact between
+ several deformable bodies and contact with rigid obstacles.
+ The condition is applied on the variable `varname_u` on the
+ boundary corresponding to `region`. `dataname_r` is the augmentation
+ parameter of the augmented Lagrangian. `dataname_friction_coeff`
+ is the friction coefficient. `mim` is an integration method on the
+ boundary. `varname_u` is the variable on which the contact condition
+ will be prescribed (should be of displacement type). `multname` is
+ a multiplier defined on the boundary which will represent the contact
+ force. If no additional boundary or rigid
+ obstacle is added, only auto-contact will be detected. Use
+ `add_boundary_to_large_sliding_contact_brick` and
+ `add_rigid_obstacle_to_large_sliding_contact_brick` to add contact
+ boundaries and rigid obstacles.
+ */
+ size_type add_integral_large_sliding_contact_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff, size_type region);
+
+
+ /** Add a contact boundary to an existing large sliding contact brick.
+ `indbrick` is the brick index.
+ */
+ void add_boundary_to_large_sliding_contact_brick
+ (model &md, size_type indbrick, const mesh_im &mim,
+ const std::string &varname_u, const std::string &multname,
+ size_type region);
+
+ /** Add a rigid obstacle to an existing large sliding contact brick.
+ `indbrick` is the brick index, `obs` is the expression of a
+ function which should be closed to a signed distance to the obstacle.
+ */
+ void add_rigid_obstacle_to_large_sliding_contact_brick
+ (model &md, size_type indbrick, const std::string &obs);
+
+
+
+
+
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+ // Experimental implementation of contact condition with Nitsche method.
+ // To be deleted when a more general implementation will be designed.
+ size_type add_Nitsche_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ const std::string &dataname_lambda, const std::string &dataname_mu,
+ size_type region);
+#endif
+
+} /* end of namespace getfem. */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_INTEGRAL_H__ */
diff --git a/src/getfem/getfem_contact_and_friction_nodal.h b/src/getfem/getfem_contact_and_friction_nodal.h
new file mode 100644
index 0000000..488c971
--- /dev/null
+++ b/src/getfem/getfem_contact_and_friction_nodal.h
@@ -0,0 +1,546 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard, Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/** @file getfem_contact_and_friction_nodal.h
+ @author Yves Renard <Yves.Renard at insa-lyon.fr>
+ @author Konstantinos Poulios <logari81 at googlemail.com>
+ @date July 6, 2004.
+ @brief Unilateral contact and Coulomb friction condition brick.
+ */
+#ifndef GETFEM_CONTACT_AND_FRICTION_NODAL_H__
+#define GETFEM_CONTACT_AND_FRICTION_NODAL_H__
+
+#include "getfem_models.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+namespace getfem {
+
+ typedef gmm::row_matrix<gmm::rsvector<scalar_type> > CONTACT_B_MATRIX;
+
+ /** Add a frictionless contact condition to the model. If U is the vector
+ of degrees of freedom on which the unilateral constraint is applied,
+ the matrix `BN` has to be such that this condition is defined by
+ $B_N U \le gap$. The constraint is prescribed thank to a multiplier
+ `multname_n` whose dimension should be equal to the number of lines of
+ `BN`. The augmentation parameter `r` should be chosen in a range of
+ acceptabe values (see Getfem user documentation). `dataname_gap` is an
+ optional parameter representing the initial gap. It can be a single value
+ or a vector of value. `dataname_alpha` is an optional homogenization
+ parameter for the augmentation parameter
+ (see Getfem user documentation). The parameter `aug_version` indicates
+ the augmentation strategy : 1 for the non-symmetric Alart-Curnier
+ augmented Lagrangian, 2 for the symmetric one, 3 for the unsymmetric
+ method with augmented multiplier.
+ */
+ size_type add_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &dataname_r, CONTACT_B_MATRIX &BN,
+ std::string dataname_gap = "", std::string dataname_alpha = "",
+ int aug_version=1, bool Hughes_stabilized=false);
+
+
+ /** Add a contact with friction condition to the model. If U is the vector
+ of degrees of freedom on which the condition is applied,
+ the matrix `BN` has to be such that the contact condition is defined
+ by $B_N U \le gap$ and `BT` have to be such that the relative tangential
+ displacement is $B_T U$. The matrix `BT` should have as many rows as
+ `BN` multiplied by $d-1$ where $d$ is the domain dimension.
+ The contact condition is prescribed thank to a multiplier
+ `multname_n` whose dimension should be equal to the number of rows of
+ `BN` and the friction condition by a mutliplier `multname_t` whose size
+ should be the number of rows of `BT`.
+ The parameter `dataname_friction_coeff` describes the friction
+ coefficient. It could be a scalar or a vector describing the
+ coefficient on each contact condition.
+ The augmentation parameter
+ `r` should be chosen in a range of acceptabe values
+ (see Getfem user documentation). `dataname_gap` is an
+ optional parameter representing the initial gap. It can be a single value
+ or a vector of value. `dataname_alpha` is an optional homogenization
+ parameter for the augmentation parameter
+ (see Getfem user documentation). The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier and 4 for the unsymmetric
+ method with augmented multiplier and De Saxce projection.
+ */
+ size_type add_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &multname_t, const std::string &dataname_r,
+ CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+ std::string dataname_friction_coeff,
+ std::string dataname_gap="", std::string dataname_alpha="",
+ int aug_version=1, bool Tresca_version=false, std::string dataname_threshold = "", bool Hughes_stabilized=false);
+
+ /** Can be used to change the matrix BN of a basic contact/friction brick
+ */
+ CONTACT_B_MATRIX &contact_brick_set_BN(model &md, size_type indbrick);
+
+ /** Can be used to change the matrix DN of a basic contact/friction brick
+ */
+ CONTACT_B_MATRIX &contact_brick_set_DN(model &md, size_type indbrick);
+
+ /** Can be used to change the matrix DT of a basic contact/friction brick
+ */
+ CONTACT_B_MATRIX &contact_brick_set_DT(model &md, size_type indbrick);
+
+ /** Can be used to change the matrix BT of a basic contact/friction brick
+ */
+ CONTACT_B_MATRIX &contact_brick_set_BT(model &md, size_type indbrick);
+
+/** Add Hughes stabilized frictionless contact condition to the model. If U
+ is the vector of degrees of freedom on which the unilateral constraint is applied,
+ and Lambda the multiplier Vector of contact force.Then Hughes stabilized frictionless
+ contact condition is defined by the matrix `BN` and 'DN' have to be such that this
+ condition is defined by $B_N U - DN Lambda \le 0$. where 'DN' is the masse matrix
+ relative to stabilzed term.
+ The augmentation parameter `r` should be chosen in a range of acceptabe values.
+ `dataname_gap` is an optional parameter representing the initial gap. It can be
+ a single value or a vector of value. `dataname_alpha` is an optional homogenization
+ parameter for the augmentation parameter. The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric method with augmented multiplier.
+ */
+ inline size_type add_Hughes_stab_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &dataname_r, CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &DN,
+ std::string dataname_gap="", std::string dataname_alpha="",
+ int aug_version=1) {
+
+ size_type indbrick = add_basic_contact_brick
+ (md, varname_u, multname_n, dataname_r, BN,
+ dataname_gap, dataname_alpha, aug_version, true);
+ gmm::resize(contact_brick_set_DN(md, indbrick),
+ gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+ gmm::copy(DN, contact_brick_set_DN(md, indbrick));
+ return indbrick;
+ }
+
+ /** Add Hughes stabilized friction contact condition to the model (broken ?). If U is the vector
+ of degrees of freedom on which the condition is applied,
+ the matrix `BN` have to be such that the contact condition is defined
+ by $B_N U+DN Lambda \le 0$ (where 'DN' is the masse matrix
+ relative to stabilzed term) and `BT` have to be such that the relative
+ tangential displacement is $B_T U$. The matrix `BT` should have as many
+ rows as `BN` multiplied b $d-1$ where $d$ is the domain dimension.
+ The contact condition is prescribed thank to a multiplier
+ `multname_n` whose dimension should be equal to the number of rows of
+ `BN` and the friction condition by a mutliplier `multname_t` whise size
+ should be the number of rows of `BT`.
+ The parameter `dataname_friction_coeff` describe the friction
+ coefficient. It could be a scalar or a vector describing the
+ coefficient on each contact condition.
+ The augmentation parameter
+ `r` should be chosen in a range of acceptabe values
+ (see Getfem user documentation). `dataname_gap` is an
+ optional parameter representing the initial gap. It can be a single value
+ or a vector of value. `dataname_alpha` is an optional homogenization
+ parameter for the augmentation parameter
+ (see Getfem user documentation). The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier and 4 for the unsymmetric
+ method with augmented multiplier and De Saxce projection.
+ **/
+ inline size_type add_Hughes_stab_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &multname_t, const std::string &dataname_r,
+ CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
+ std::string dataname_friction_coeff,
+ std::string dataname_gap="", std::string dataname_alpha="",
+ int aug_version=1, bool Tresca_version=false, std::string dataname_threshold="") {
+
+ size_type indbrick = add_basic_contact_brick
+ (md, varname_u, multname_n, multname_t, dataname_r, BN, BT,
+ dataname_friction_coeff, dataname_gap, dataname_alpha,
+ aug_version, Tresca_version, dataname_threshold, true);
+ gmm::resize(contact_brick_set_DN(md, indbrick),
+ gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+ gmm::copy(DN, contact_brick_set_DN(md, indbrick));
+
+ gmm::resize(contact_brick_set_DT(md, indbrick),
+ gmm::mat_nrows(DT), gmm::mat_ncols(DT));
+ gmm::copy(DT, contact_brick_set_DT(md, indbrick));
+ return indbrick;
+ }
+
+
+
+ /** Add a frictionless contact condition with a rigid obstacle
+ to the model. The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the string `obstacle` being a signed distance to
+ the obstacle. This string should be an expression where the coordinates
+ are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+ obstacle correspond to $z \le 0$, the corresponding signed distance will
+ be simply "z". `multname_n` should be a fixed size variable whose size is
+ the number of degrees of freedom on boundary `region`. It represents the
+ contact equivalent nodal forces.
+ The augmentation parameter `r` should be chosen in a
+ range of acceptabe values (close to the Young modulus of the elastic
+ body, see Getfem user documentation). The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier.
+ Basically, this brick computes the matrix BN
+ and the vectors gap and alpha and calls the basic contact brick.
+ */
+ size_type add_nodal_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &dataname_r,
+ size_type region, const std::string &obstacle, int aug_version=1);
+
+
+ /** Add a contact with friction condition with a rigid obstacle
+ to the model. The condition is applied on the variable `varname_u`
+ on the boundary corresponding to `region`. The rigid obstacle should
+ be described with the string `obstacle` being a signed distance to
+ the obstacle. This string should be an expression where the coordinates
+ are 'x', 'y' in 2D and 'x', 'y', 'z' in 3D. For instance, if the rigid
+ obstacle correspond to $z \le 0$, the corresponding signed distance will
+ be simply "z". `multname_n` should be a fixed size variable whose size is
+ the number of degrees of freedom on boundary `region`. It represents the
+ contact equivalent nodal forces.
+ `multname_t` should be a fixed size variable whose size is
+ the number of degrees of freedom on boundary `region` multiplied by
+ $d-1$ where $d$ is the domain dimension. It represents the
+ friction equivalent nodal forces.
+ The augmentation parameter `r` should be chosen in a
+ range of acceptabe values (close to the Young modulus of the elastic
+ body, see Getfem user documentation). `dataname_friction_coeff` is
+ the friction coefficient. It could be a scalar or a vector of values
+ representing the friction coefficient on each contact node.
+ The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier and 4 for the unsymmetric
+ method with augmented multiplier and De Saxce projection.
+ Basically, this brick computes the matrix BN
+ and the vectors gap and alpha and calls the basic contact brick.
+ */
+ size_type add_nodal_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region, const std::string &obstacle, int aug_version=1);
+
+
+ /** Add a frictionless contact condition between two faces of one or two
+ elastic bodies. The condition is applied on the variable `varname_u` or
+ the variables `varname_u1` and `varname_u2` depending if a single or
+ two distinct displacement fields are given. Vectors `rg1` and `rg2`
+ contain pairs of regions expected to come in contact with each other. In
+ case of a single region per side, `rg1` and `rg2` can be given as normal
+ integers. In the single displacement variable case the regions defined in
+ both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
+ two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
+ to `varname_u2`. `multname_n` should be a fixed size variable whose size
+ is the number of degrees of freedom on those regions among the ones
+ defined in `rg1` and `rg2` which are characterized as "slaves". It
+ represents the contact equivalent nodal forces. The augmentation
+ parameter `r` should be chosen in a range of acceptabe values (close to
+ the Young modulus of the elastic body, see Getfem user documentation).
+ The optional parameters `slave1` and `slave2` declare if the regions
+ defined in `rg1` and `rg2` are correspondingly considered as "slaves".
+ By default `slave1` is true and `slave2` is false, i.e. `rg1` contains
+ the slave surfaces, while 'rg2' the master surfaces. Preferably only
+ one of `slave1` and `slave2` is set to true. The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier.
+ Basically, this brick computes the matrix BN and the vectors gap and
+ alpha and calls the basic contact brick.
+ */
+ size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, const std::string &dataname_r,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1);
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, const std::string &dataname_r,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=0) {
+
+ std::vector<size_type> vrg1(1,rg1);
+ std::vector<size_type> vrg2(1,rg2);
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+ vrg1, vrg2, slave1, slave2, aug_version);
+ }
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, const std::string &dataname_r,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1) {
+
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
+ rg1, rg2, slave1, slave2, aug_version);
+ }
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, const std::string &dataname_r,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1) {
+
+ std::vector<size_type> vrg1(1,rg1);
+ std::vector<size_type> vrg2(1,rg2);
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, mim, varname_u, varname_u, multname_n, dataname_r,
+ vrg1, vrg2, slave1, slave2, aug_version);
+ }
+
+
+ /** Add a contact with friction condition between two faces of one or two
+ elastic bodies. The condition is applied on the variable `varname_u` or
+ the variables `varname_u1` and `varname_u2` depending if a single or
+ two distinct displacement fields are given. Vectors `rg1` and `rg2`
+ contain pairs of regions expected to come in contact with each other. In
+ case of a single region per side, `rg1` and `rg2` can be given as normal
+ integers. In the single displacement variable case the regions defined in
+ both `rg1` and `rg2` refer to the variable `varname_u`. In the case of
+ two displacement variables, `rg1` refers to `varname_u1` and `rg2` refers
+ to `varname_u2`. `multname_n` should be a fixed size variable whose size
+ is the number of degrees of freedom on those regions among the ones
+ defined in `rg1` and `rg2` which are characterized as "slaves". It
+ represents the contact equivalent nodal normal forces. `multname_t`
+ should be a fixed size variable whose size corresponds to the size of
+ `multname_n` multiplied by qdim - 1 . It represents the contact
+ equivalent nodal tangent (frictional) forces. The augmentation parameter
+ `r` should be chosen in a range of acceptabe values (close to the Young
+ modulus of the elastic body, see Getfem user documentation). The friction
+ coefficient stored in the parameter `friction_coeff` is either a single
+ value or a vector of the same size as `multname_n`. The optional
+ parameters `slave1` and `slave2` declare if the regions defined in `rg1`
+ and `rg2` are correspondingly considered as "slaves". By default `slave1`
+ is true and `slave2` is false, i.e. `rg1` contains the slave surfaces,
+ while 'rg2' the master surfaces. Preferably only one of `slave1` and
+ `slave2` is set to true. The parameter `aug_version`
+ indicates the augmentation strategy : 1 for the non-symmetric
+ Alart-Curnier augmented Lagrangian, 2 for the symmetric one,
+ 3 for the unsymmetric
+ method with augmented multiplier and 4 for the unsymmetric
+ method with augmented multiplier and De Saxce projection.
+ Basically, this brick computes the matrices BN and BT as well the vectors
+ gap and alpha and calls the basic contact brick.
+ */
+ size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1);
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1) {
+
+ std::vector<size_type> vrg1(1,rg1);
+ std::vector<size_type> vrg2(1,rg2);
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
+ dataname_r, dataname_friction_coeff,
+ vrg1, vrg2, slave1, slave2, aug_version);
+ }
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1) {
+
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
+ dataname_r, dataname_friction_coeff,
+ rg1, rg2, slave1, slave2, aug_version);
+ }
+
+ inline size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1) {
+
+ std::vector<size_type> vrg1(1,rg1);
+ std::vector<size_type> vrg2(1,rg2);
+ return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, mim, varname_u, varname_u, multname_n, multname_t,
+ dataname_r, dataname_friction_coeff,
+ vrg1, vrg2, slave1, slave2, aug_version);
+ }
+
+
+ // DEPRECATED FUNCTION NAMES
+
+ IS_DEPRECATED inline size_type add_basic_contact_with_friction_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &multname_t, const std::string &dataname_r,
+ CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+ std::string dataname_friction_coeff,
+ std::string dataname_gap="", std::string dataname_alpha="",
+ int aug_version=1, bool Tresca_version=false, std::string dataname_threshold = "", bool Hughes_stabilized=false)
+ { return add_basic_contact_brick
+ (md, varname_u, multname_n, multname_t, dataname_r, BN, BT, dataname_friction_coeff,
+ dataname_gap, dataname_alpha, aug_version, Tresca_version, dataname_threshold, Hughes_stabilized); }
+
+ IS_DEPRECATED inline size_type add_Hughes_stab_with_friction_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &multname_t, const std::string &dataname_r,
+ CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT, CONTACT_B_MATRIX &DN,CONTACT_B_MATRIX &DT,
+ std::string dataname_friction_coeff, std::string dataname_gap="",
+ std::string dataname_alpha="", int aug_version=1, bool Tresca_version=false, std::string dataname_threshold="")
+ { return add_Hughes_stab_basic_contact_brick
+ (md, varname_u, multname_n, multname_t, dataname_r, BN, BT, DN, DT,
+ dataname_friction_coeff, dataname_gap, dataname_alpha, aug_version, Tresca_version, dataname_threshold); }
+
+ // rigid obstacle
+ IS_DEPRECATED inline size_type add_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &dataname_r,
+ size_type region, const std::string &obstacle, int aug_version=1)
+ { return add_nodal_contact_with_rigid_obstacle_brick
+ (md, mim, varname_u, multname_n, dataname_r, region, obstacle, aug_version); }
+
+ IS_DEPRECATED inline size_type add_contact_with_friction_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region, const std::string &obstacle, int aug_version=1)
+ { return add_nodal_contact_with_rigid_obstacle_brick
+ (md, mim, varname_u, multname_n, multname_t, dataname_r,
+ dataname_friction_coeff, region, obstacle, aug_version); }
+
+ // non-matching meshes
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, const std::string &dataname_r,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+ rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, const std::string &dataname_r,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=0)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, dataname_r,
+ rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, const std::string &dataname_r,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, varname_u, multname_n, dataname_r,
+ rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, const std::string &dataname_r,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, varname_u, multname_n, dataname_r,
+ rg1, rg2, slave1, slave2, aug_version); }
+
+ // non-matching meshes with friction
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t, dataname_r,
+ dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim1, mim2, varname_u1, varname_u2, multname_n, multname_t,
+ dataname_r, dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1=true, bool slave2=false, int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, varname_u, multname_n, multname_t, dataname_r,
+ dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+ IS_DEPRECATED inline size_type add_nonmatching_meshes_contact_with_friction_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type rg1, size_type rg2, bool slave1=true, bool slave2=false,
+ int aug_version=1)
+ { return add_nodal_contact_between_nonmatching_meshes_brick
+ (md, mim, varname_u, multname_n, multname_t, dataname_r,
+ dataname_friction_coeff, rg1, rg2, slave1, slave2, aug_version); }
+
+} /* end of namespace getfem. */
+
+
+#endif /* GETFEM_CONTACT_AND_FRICTION_NODAL_H__ */
diff --git a/src/getfem/getfem_context.h b/src/getfem/getfem_context.h
index 15ab2f4..cd98189 100644
--- a/src/getfem/getfem_context.h
+++ b/src/getfem/getfem_context.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_context.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_continuation.h b/src/getfem/getfem_continuation.h
new file mode 100644
index 0000000..99c18e2
--- /dev/null
+++ b/src/getfem/getfem_continuation.h
@@ -0,0 +1,583 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Tomas Ligursky, Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/** @file getfem_continuation.h
+ @author Tomas Ligursky <tomas.ligursky at gmail.com>
+ @author Yves Renard <Yves.Renard at insa-lyon.fr>
+ @date October 17, 2011.
+ @brief (approximate) Moore-Penrose (also called Gauss-Newton) continuation method.
+
+ NOTE: The bordered systems involved are solved by a block eliminiation
+ although the bordered matrix may be ill-conditioned in some cases!
+ Nevertheless, the algorithm seems to work well.
+*/
+#ifndef GETFEM_CONTINUATION_H__
+#define GETFEM_CONTINUATION_H__
+
+#include <getfem/getfem_model_solvers.h>
+
+namespace getfem {
+
+
+ //=========================================================================
+ // Abstract Moore-Penrose continuation method
+ //=========================================================================
+
+
+ const double tau_init = 1.e4;
+ enum build_data { BUILD_F = 1, BUILD_F_x = 2, BUILD_ALL = 3 };
+
+ template <typename CONT_S, typename VECT>
+ double norm_(CONT_S &S, const VECT &x)
+ { return sqrt(S.sp(x, x)); }
+
+ template <typename CONT_S, typename VECT>
+ double w_sp_(CONT_S &S, const VECT &x1, const VECT &x2)
+ { return S.scfac() * S.sp(x1, x2); }
+
+ template <typename CONT_S, typename VECT>
+ double sp_(CONT_S &S, const VECT &x1, const VECT &x2,
+ double gamma1, double gamma2)
+ { return w_sp_(S, x1, x2) + gamma1 * gamma2; }
+
+ template <typename CONT_S, typename VECT>
+ double norm_(CONT_S &S, const VECT &x, double gamma)
+ { return sqrt(sp_(S, x, x, gamma, gamma)); }
+
+
+ template <typename CONT_S, typename VECT>
+ void compute_tangent(CONT_S &S, const VECT &x, double gamma,
+ VECT &t_x, double &t_gamma) {
+ VECT g(x), y(x);
+ S.F_gamma(x, gamma, g);
+ S.solve_grad(x, gamma, y, g);
+ t_gamma = 1. / (t_gamma - w_sp_(S, t_x, y));
+ S.scale(y, -t_gamma); S.copy(y, t_x);
+
+ double no = norm_(S, t_x, t_gamma);
+ S.scale(t_x, 1./no); t_gamma /= no;
+
+// if (S.noisy() > 1) {
+// S.mult_grad(x, gamma, t_x, y); S.scaled_add(y, g, t_gamma, y);
+// cout << "new tangent computed with the residual "
+// << norm_(S, y) << endl;
+// }
+ }
+
+
+ template <typename CONT_S, typename MAT, typename VECT>
+ double test_function(CONT_S &S, const MAT &A, const VECT &g,
+ const VECT &t_x, double t_gamma) {
+ double q, r, v_gamma, tau;
+ VECT v_x(g), y(g), z(g);
+
+ if (S.noisy() > 1) cout << "starting computing test function" << endl;
+ S.solve(A, y, z, g, S.b_x());
+ v_gamma = (S.b_gamma() - S.sp(t_x, z)) / (t_gamma - S.sp(t_x, y));
+ S.scaled_add(z, y, -v_gamma, v_x);
+ tau = 1. / (S.d() - S.sp(S.c_x(), v_x) - S.c_gamma() * v_gamma);
+ S.scale(v_x, -tau); v_gamma *= -tau;
+
+ // control of the norm of the residual
+ S.mult(A, v_x, y);
+ S.scaled_add(y, g, v_gamma, y); S.scaled_add(y, S.b_x(), tau, y);
+ r = S.sp(y, y);
+ q = S.sp(t_x, v_x) + t_gamma * v_gamma + S.b_gamma() * tau; r += q * q;
+ q = S.sp(S.c_x(), v_x) + S.c_gamma() * v_gamma + S.d() * tau - 1.;
+ r += q * q; r = sqrt(r);
+ if (r > 1e-10)
+ GMM_WARNING1("Test function evaluated with the residual " << r);
+
+ return tau;
+ }
+
+ template <typename CONT_S, typename VECT>
+ double test_function(CONT_S &S, const VECT &x, double gamma,
+ const VECT &t_x, double t_gamma) {
+ VECT g(x); S.F_gamma(x, gamma, g);
+ typename CONT_S::MAT A; S.F_x(x, gamma, A);
+ return test_function(S, A, g, t_x, t_gamma);
+ }
+
+ template <typename CONT_S, typename VECT>
+ bool test_smooth_bifurcation(CONT_S &S, const VECT &x, double gamma,
+ const VECT &t_x, double t_gamma) {
+ double tau0 = S.tau1(), tau1 = S.tau2(),
+ tau2 = test_function(S, x, gamma, t_x, t_gamma);
+ S.set_tau1(tau1); S.set_tau2(tau2);
+ return (tau2 * tau1 < 0) & (S.abs(tau1) < S.abs(tau0));
+ }
+
+ template <typename CONT_S, typename VECT>
+ bool test_nonsmooth_bifurcation (CONT_S &S, const VECT &x1, double gamma1,
+ const VECT &t_x1, double t_gamma1,
+ const VECT &x2, double gamma2,
+ const VECT &t_x2, double t_gamma2) {
+ unsigned long nb_changes = 0;
+ double alpha = 0, delta = 1. / S.nb_test(), t_gamma,
+ tau0, tau1 = tau_init, tau2 = S.tau2();
+ VECT g1(x1), g2(x1), g(x1), t_x(x1);
+ typename CONT_S::MAT A1, A2, A;
+ S.F_gamma(x2, gamma2, g2);
+ S.F_x(x1, gamma1, A1); S.F_gamma(x1, gamma1, g1);
+ S.F_x(x2, gamma2, A2); S.F_x(x2, gamma2, A);
+ S.init_tau_hist();
+
+ for(size_type i = 1; i < S.nb_test() + 1; ++i) {
+ alpha += delta;
+ S.scaled_add(A1, 1. - alpha, A2, alpha, A);
+ S.scaled_add(g1, 1. - alpha, g2, alpha, g);
+ S.scaled_add(t_x1, 1. - alpha, t_x2, alpha, t_x);
+ t_gamma = (1. - alpha) * t_gamma1 + alpha * t_gamma2;
+
+ tau0 = tau1; tau1 = tau2; tau2 = test_function(S, A, g, t_x, t_gamma);
+ if ((tau2 * tau1 < 0) & (S.abs(tau1) < S.abs(tau0))) ++nb_changes;
+ S.set_tau_hist(i, tau2);
+ }
+
+ S.set_tau1(tau_init); S.set_tau2(tau2);
+ return nb_changes % 2;
+ }
+
+
+ template <typename CONT_S, typename VECT>
+ int test_direction(CONT_S &S, const VECT &x, double gamma,
+ const VECT &t_x, double t_gamma,
+ VECT &T_x, double &T_gamma, double h) {
+ int res = 1;
+ double Gamma, T_Gamma = T_gamma, ang;
+ VECT X(x), T_X(T_x);
+
+ S.scaled_add(x, T_x, h, X); Gamma = gamma + h * T_gamma;
+ S.set_build(BUILD_ALL);
+ compute_tangent(S, X, Gamma, T_X, T_Gamma);
+
+ ang = sp_(S, T_x, T_X, T_gamma, T_Gamma);
+ if (S.noisy() > 1)
+ cout << "the angle with the tested tangent " << ang << endl;
+ if (ang >= 0.996) res = (h > 0) ? 3 : 4;
+ else {
+ ang = sp_(S, t_x, T_X, t_gamma, T_Gamma);
+ if (S.noisy() > 1)
+ cout << "the angle with the starting tangent " << ang << endl;
+ if (ang < 0.86 && ang > -0.86) {
+ res = 2;
+ S.copy(T_X, T_x); T_gamma = T_Gamma; // try the new tangent next(?)
+ }
+ }
+ return res;
+ }
+
+ template <typename CONT_S, typename VECT>
+ void init_test_function(CONT_S &S, const VECT &x, double gamma,
+ const VECT &t_x, double t_gamma) {
+ S.init_border(x);
+ double tau = test_function(S, x, gamma, t_x, t_gamma); S.set_tau2(tau);
+ }
+
+ template <typename CONT_S, typename VECT>
+ void init_Moore_Penrose_continuation(CONT_S &S, const VECT &x,
+ double gamma, VECT &t_x,
+ double &t_gamma, double &h) {
+ S.set_build(BUILD_ALL);
+ S.clear(t_x); t_gamma = (t_gamma >= 0) ? 1. : -1.;
+ if (S.noisy() > 0) cout << "computing initial tangent" << endl;
+ compute_tangent(S, x, gamma, t_x, t_gamma);
+ h = S.h_init();
+ init_test_function(S, x, gamma, t_x, t_gamma);
+ }
+
+
+ /* Perform one step of the Moore-Penrose continuation. If a new point
+ (x, gamma) is found, it has to be saved in the model in the end! */
+ template <typename CONT_S, typename VECT>
+ void Moore_Penrose_continuation(CONT_S &S, VECT &x, double &gamma,
+ VECT &t_x, double &t_gamma, double &h) {
+ bool bifurcation_detected = false, converged, finished = false;
+ int tangent_status = 0;
+ /* 0: no manipulation with tangent direction (so far);
+ 1: current direction neither admitted nor rejected;
+ 2: direction rejected;
+ 3: direction admitted with plus sign;
+ 4: direction admitted with minus sign; */
+ unsigned long it, step_dec = 0;
+ double t_gamma0 = t_gamma,
+ Delta_Gamma, Gamma, T_gamma, r, no, res, diff, ang;
+ VECT t_x0(t_x), F(x), g(x), Delta_X(x), X(x), T_x(x), y(x);
+
+ do { // step control
+
+ // prediction
+ if (S.noisy() > 0) cout << "prediction with h = " << h << endl;
+ S.scaled_add(x, t_x, h, X); Gamma = gamma + h * t_gamma;
+ S.set_build(BUILD_ALL);
+ S.copy(t_x, T_x); T_gamma = t_gamma;
+
+ // correction
+ if (S.noisy() > 0) cout << "starting correction " << endl;
+ it = 0;
+ S.F(X, Gamma, F);
+
+ do { // Newton iterations
+ S.F_gamma(X, Gamma, g);
+ S.solve_grad(X, Gamma, Delta_X, y, F, g);
+ r = w_sp_(S, T_x, y);
+
+ Delta_Gamma = w_sp_(S, T_x, Delta_X) / (r - T_gamma);
+ S.scaled_add(Delta_X, y, -Delta_Gamma, Delta_X);
+ S.scaled_add(X, Delta_X, -1., X); Gamma -= Delta_Gamma;
+ S.set_build(BUILD_ALL);
+
+ T_gamma = 1. / (T_gamma - r);
+ S.scale(y, -T_gamma); S.copy(y, T_x);
+ no = norm_(S, T_x, T_gamma);
+ S.scale(T_x, 1./no); T_gamma /= no;
+
+ S.F(X, Gamma, F); res = norm_(S, F);
+ diff = norm_(S, Delta_X, Delta_Gamma);
+ converged = (res <= S.maxres() && diff <= S.maxdiff());
+ it++;
+
+ if (S.noisy() > 1)
+ cout << "iter " << it << " residual " << res
+ << " difference " << diff
+ << " cos " << sp_(S, t_x, T_x, t_gamma, T_gamma) << endl;
+
+ } while (!converged && it < S.maxit() && res < 1.e8);
+
+ if (converged) {
+ ang = sp_(S, t_x, T_x, t_gamma, T_gamma);
+ if (S.noisy() > 0) cout << "cos " << ang << endl;
+// if (S.noisy() > 1) {
+// S.F_gamma(X, Gamma, g);
+// S.update_matrix(X, Gamma); S.mult_grad(X, Gamma, T_x, y);
+// S.scaled_add(y, g, T_gamma, y);
+// cout << "final tangent computed with the residual "
+// << norm_(S, y) << endl;
+// }
+ if (ang >= S.minang()) { // accept the new couple
+ S.clear_tau_hist();
+ if (tangent_status == 0)
+ bifurcation_detected =
+ test_smooth_bifurcation(S, X, Gamma, T_x, T_gamma);
+ else {
+ bifurcation_detected = test_nonsmooth_bifurcation
+ (S, x, gamma, t_x0, t_gamma0, X, Gamma, T_x, T_gamma);
+ }
+ if (bifurcation_detected) cout << "Bifurcation detected!" << endl;
+ if (step_dec == 0 && it < S.thrit()) // elongate the step size
+ h = (S.h_inc() * h < S.h_max()) ? S.h_inc() * h : S.h_max();
+ finished = true;
+ }
+ }
+
+ if (!finished) {
+ if (h > S.h_min()) { // diminish the step size
+ h = (S.h_dec() * h > S.h_min()) ? S.h_dec() * h : S.h_min();
+ step_dec++;
+ }
+ else if (tangent_status == 0) {
+ if (S.noisy() > 1)
+ cout << "Seeking a new tangent direction" << endl;
+ unsigned long tan = 0;
+ S.copy(t_x, T_x); T_gamma = t_gamma;
+ S.scaled_add(x, T_x, h, X); Gamma = gamma + h * T_gamma;
+ S.set_build(BUILD_ALL);
+ compute_tangent(S, X, Gamma, T_x, T_gamma);
+
+ do { // seek a new tangent
+ if (S.noisy() > 1)
+ cout << "Trying direction " << tan + 1 << endl;
+ h = S.h_min();
+
+ do { // test (T_x, T_gamma)
+ tangent_status =
+ test_direction(S, x, gamma, t_x, t_gamma, T_x, T_gamma, h);
+ if (tangent_status == 1) {
+ h *= -1.;
+ tangent_status =
+ test_direction(S, x, gamma, t_x, t_gamma, T_x, T_gamma, h);
+ h *= -2.;
+ }
+ } while (tangent_status == 1 && h <= 1e5);
+
+ tan++;
+ } while (tangent_status <= 2 && tan < 1); // tan >= 1?
+
+ if (tangent_status >= 3) {
+ if (S.noisy() > 1)
+ cout << "Direction " << tan << " accepted" << endl;
+ S.copy(T_x, t_x); t_gamma = T_gamma;
+ if (tangent_status == 4) {
+ S.scale(t_x, -1.); t_gamma *= -1.; h /= 2.;
+ }
+ h = (h < S.h_init()) ? S.h_init() : h; step_dec = 0;
+ } else break;
+ } else break;
+ }
+ } while (!finished);
+
+ if (finished) {
+ S.copy(X, x); gamma = Gamma;
+ S.copy(T_x, t_x); t_gamma = T_gamma;
+ } else h = 0;
+ }
+
+
+
+ //=========================================================================
+ // Moore-Penrose continuation method for Getfem models
+ //=========================================================================
+
+
+#ifdef GETFEM_MODELS_H__
+
+ struct cont_struct_getfem_model {
+
+ typedef base_vector VECT;
+ typedef model_real_sparse_matrix MAT;
+
+ private:
+ model *md; // for real models only
+ std::string parameter_name_;
+ rmodel_plsolver_type lsolver;
+ double scfac_;
+ unsigned long maxit_, thrit_;
+ double maxres_, maxdiff_, minang_, h_init_, h_max_, h_min_, h_inc_,
+ h_dec_, epsilon_, maxres_solve_;
+ int noisy_;
+ unsigned long nb_test_;
+ bool with_parametrized_data;
+ std::string initdata_name_, finaldata_name_, currentdata_name_;
+ build_data build;
+ double tau1_, tau2_;
+ VECT tau_hist;
+ VECT b_x_, c_x_;
+ double b_gamma_, c_gamma_, d_;
+
+ public:
+ cont_struct_getfem_model
+ (model &m, const std::string &pn, rmodel_plsolver_type ls, double sfac,
+ unsigned long mit = 10, unsigned long tit = 8, double mres = 1.e-6,
+ double mdiff = 1.e-9, double mang = 0.9, double hin = 1.e-2,
+ double hmax = 1.e-1, double hmin = 1.e-5, double hinc = 1.3,
+ double hdec = 0.5, double eps = 1.e-8, double mress = 1.e-7,
+ int noi = 0, unsigned long ntest = 50)
+ : md(&m), parameter_name_(pn), lsolver(ls), scfac_(sfac), maxit_(mit),
+ thrit_(tit), maxres_(mres), maxdiff_(mdiff), minang_(mang),
+ h_init_(hin), h_max_(hmax), h_min_(hmin), h_inc_(hinc), h_dec_(hdec),
+ epsilon_(eps), maxres_solve_(mress), noisy_(noi), nb_test_(ntest),
+ with_parametrized_data(false), build(BUILD_ALL), tau1_(tau_init),
+ tau2_(tau_init), tau_hist(0)
+ {}
+
+ cont_struct_getfem_model
+ (model &m, const std::string &pn, const std::string &in,
+ const std::string &fn, const std::string &cn, rmodel_plsolver_type ls,
+ double sfac, unsigned long mit = 10, unsigned long tit = 8,
+ double mres = 1.e-6, double mdiff = 1.e-9, double mang = 0.9,
+ double hin = 1.e-2, double hmax = 1.e-1, double hmin = 1.e-5,
+ double hinc = 1.3, double hdec = 0.5, double eps = 1.e-8,
+ double mress = 1.e-7, int noi = 0, unsigned long ntest = 50)
+ : md(&m), parameter_name_(pn), lsolver(ls), scfac_(sfac), maxit_(mit),
+ thrit_(tit), maxres_(mres), maxdiff_(mdiff), minang_(mang),
+ h_init_(hin), h_max_(hmax), h_min_(hmin), h_inc_(hinc), h_dec_(hdec),
+ epsilon_(eps), maxres_solve_(mress), noisy_(noi), nb_test_(ntest),
+ with_parametrized_data(true), initdata_name_(in),
+ finaldata_name_(fn), currentdata_name_(cn), build(BUILD_ALL),
+ tau1_(tau_init), tau2_(tau_init), tau_hist(0)
+ {}
+
+ cont_struct_getfem_model(void) {}
+
+
+ // Linear algebra functions
+ double abs(double a)
+ { return gmm::abs(a); }
+ void clear(VECT &v)
+ { gmm::clear(v); }
+ void copy(const VECT &v1, VECT &v)
+ { gmm::copy(v1, v); }
+ void scale(VECT &v, double a)
+ { gmm::scale(v, a); }
+ void scaled_add(const VECT &v1, const VECT &v2, double a, VECT &v)
+ { gmm::add(v1, gmm::scaled(v2, a), v); }
+ void scaled_add(const VECT &v1, double a1,
+ const VECT &v2, double a2, VECT &v)
+ { gmm::add(gmm::scaled(v1, a1), gmm::scaled(v2, a2), v); }
+ void scaled_add(const MAT &M1, double a1,
+ const MAT &M2, double a2, MAT &M)
+ { gmm::add(gmm::scaled(M1, a1), gmm::scaled(M2, a2), M); }
+ double sp(const VECT &v1, const VECT &v2)
+ { return gmm::vect_sp(v1, v2); }
+ void mult(const MAT &A, const VECT &v1, VECT &v)
+ { gmm::mult(A, v1, v); }
+
+ void solve(const MAT &A, VECT &g, const VECT &L) { // A * g = L
+ if (noisy_ > 1) cout << "starting linear solver" << endl;
+ gmm::iteration iter(maxres_solve_, noisy_, 40000);
+ (*lsolver)(A, g, L, iter);
+ if (noisy_ > 1) cout << "linear solver done" << endl;
+ }
+
+ void solve(const MAT &A, VECT &g1, VECT &g2,
+ const VECT &L1, const VECT &L2) { // A * (g1|g2) = (L1|L2)
+ if (noisy_ > 1) cout << "starting linear solver" << endl;
+ gmm::iteration iter(maxres_solve_, noisy_, 40000);
+ (*lsolver)(A, g1, L1, iter);
+ iter.init(); (*lsolver)(A, g2, L2, iter); // (can be optimised)
+ if (noisy_ > 1) cout << "linear solver done" << endl;
+ }
+
+
+ // Evaluation of ...
+ void set_variables(const VECT &x, double gamma) {
+ md->set_real_variable(parameter_name_)[0] = gamma;
+ if (with_parametrized_data) {
+ gmm::add(gmm::scaled(md->real_variable(initdata_name_), 1. - gamma),
+ gmm::scaled(md->real_variable(finaldata_name_), gamma),
+ md->set_real_variable(currentdata_name_));
+ }
+ md->to_variables(x);
+ }
+
+ // F(x, gamma) --> f
+ void F(const VECT &x, double gamma, VECT &f) {
+ if (build == BUILD_ALL) set_variables(x, gamma);
+ if (build & BUILD_F) {
+ md->assembly(model::BUILD_RHS);
+ build = build_data(build ^ BUILD_F);
+ }
+ gmm::copy(gmm::scaled(md->real_rhs(), -1.), f);
+ }
+
+ // (F(x, gamma + epsilon_) - F(x, gamma)) / epsilon_ --> g
+ void F_gamma(const VECT &x, double gamma, VECT &g) {
+ VECT F0(x), F1(x);
+ F(x, gamma, F0);
+ build = BUILD_ALL; F(x, gamma + epsilon_, F1); build = BUILD_ALL;
+ gmm::add(F1, gmm::scaled(F0, -1.), g);
+ gmm::scale(g, 1./epsilon_);
+ }
+
+ void update_matrix(const VECT &x, double gamma) {
+ if (build == BUILD_ALL) set_variables(x, gamma);
+ if (build & BUILD_F_x) {
+ if (noisy_ > 1) cout << "starting computing tangent matrix" << endl;
+ md->assembly(model::BUILD_MATRIX);
+ build = build_data(build ^ BUILD_F_x);
+ }
+ }
+ // F_x(x, gamma) --> A
+ void F_x(const VECT &x, double gamma, MAT &A) {
+ update_matrix(x, gamma);
+ unsigned long nbdof = md->nb_dof();
+ gmm::resize(A, nbdof, nbdof);
+ gmm::copy(md->real_tangent_matrix(), A);
+ }
+
+ // solve F_x(x, gamma) * g = L
+ void solve_grad(const VECT &x, double gamma,
+ VECT &g, const VECT &L) {
+ update_matrix(x, gamma);
+ solve(md->real_tangent_matrix(), g, L);
+ }
+
+ // solve F_x(x, gamma) * (g1|g2) = (L1|L2)
+ void solve_grad(const VECT &x, double gamma, VECT &g1,VECT &g2,
+ const VECT &L1, const VECT &L2) {
+ update_matrix(x, gamma);
+ solve(md->real_tangent_matrix(), g1, g2, L1, L2);
+ }
+
+ // F_x(x, gamma) * w --> y
+ void mult_grad(const VECT &x, double gamma,
+ const VECT &w, VECT &y) {
+ update_matrix(x, gamma);
+ mult(md->real_tangent_matrix(), w, y);
+ }
+
+
+ // Misc.
+ model &linked_model(void) { return *md; }
+ std::string parameter_name(void) { return parameter_name_; }
+ double scfac(void) { return scfac_; }
+ unsigned long thrit(void) { return thrit_; }
+ unsigned long maxit(void) { return maxit_; }
+ double epsilon(void) { return epsilon_; }
+ double minang(void) { return minang_; }
+ double maxres(void) { return maxres_; }
+ double maxdiff(void) { return maxdiff_; }
+ double h_init(void) { return h_init_; }
+ double h_min(void) { return h_min_; }
+ double h_max(void) { return h_max_; }
+ double h_dec(void) { return h_dec_; }
+ double h_inc(void) { return h_inc_; }
+ int noisy(void) { return noisy_; }
+ unsigned long nb_test(void) { return nb_test_; }
+ void set_build(build_data build_) { build = build_; }
+ void set_tau1(double tau) { tau1_ = tau; }
+ double tau1(void) { return tau1_; }
+ void set_tau2(double tau) { tau2_ = tau; }
+ double tau2(void) { return tau2_; }
+
+ void init_border(const VECT &v) {
+ srand(unsigned(time(NULL)));
+ gmm::resize(b_x_, gmm::vect_size(v)); gmm::fill_random(b_x_);
+ gmm::resize(c_x_, gmm::vect_size(v)); gmm::fill_random(c_x_);
+ b_gamma_ = gmm::random(1.); c_gamma_ = gmm::random(1.);
+ d_ = gmm::random(1.);
+ }
+ VECT &b_x(void) { return b_x_; }
+ VECT &c_x(void) { return c_x_; }
+ double b_gamma(void) { return b_gamma_; }
+ double c_gamma(void) { return c_gamma_; }
+ double d(void) { return d_; }
+
+ void clear_tau_hist(void) { gmm::resize(tau_hist, 0); }
+ void init_tau_hist(void) {
+ gmm::resize(tau_hist, nb_test_ + 1);
+ tau_hist[0] = tau2_;
+ }
+ void set_tau_hist(unsigned long i, double a) {
+ GMM_ASSERT2(i < nb_test_ + 1, "out of range");
+ tau_hist[i] = a;
+ }
+ VECT &get_tau_hist(void) { return tau_hist; }
+ };
+
+#endif
+
+
+} /* end of namespace getfem. */
+
+
+#endif /* GETFEM_CONTINUATION_H__ */
diff --git a/src/getfem/getfem_convect.h b/src/getfem/getfem_convect.h
index 97e00b7..97d0024 100644
--- a/src/getfem/getfem_convect.h
+++ b/src/getfem/getfem_convect.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_convect.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_crack_sif.h b/src/getfem/getfem_crack_sif.h
index 1fb28cd..b979927 100644
--- a/src/getfem/getfem_crack_sif.h
+++ b/src/getfem/getfem_crack_sif.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_crack_sif.h
@author Julien Pommier
diff --git a/src/getfem/getfem_derivatives.h b/src/getfem/getfem_derivatives.h
index 8fd65cc..9f03e8e 100644
--- a/src/getfem/getfem_derivatives.h
+++ b/src/getfem/getfem_derivatives.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_derivatives.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -74,8 +75,8 @@ namespace getfem
GMM_ASSERT1(&mf.linked_mesh() == &mf_target.linked_mesh(),
"meshes are different.");
- GMM_ASSERT1(target_qdim == qdim || target_qdim == 1,
- "invalid Qdim for gradient mesh_fem");
+ GMM_ASSERT1(target_qdim == qdim*N || target_qdim == qdim
+ || target_qdim == 1, "invalid Qdim for gradient mesh_fem");
base_matrix G;
std::vector<T> coeff;
diff --git a/src/getfem/getfem_error_estimate.h b/src/getfem/getfem_error_estimate.h
index bd92870..3b91630 100644
--- a/src/getfem/getfem_error_estimate.h
+++ b/src/getfem/getfem_error_estimate.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**
diff --git a/src/getfem/getfem_export.h b/src/getfem/getfem_export.h
index 849dde7..7e0eb0f 100644
--- a/src/getfem/getfem_export.h
+++ b/src/getfem/getfem_export.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_export.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_external_data_fem.h b/src/getfem/getfem_external_data_fem.h
index dee7623..925c523 100644
--- a/src/getfem/getfem_external_data_fem.h
+++ b/src/getfem/getfem_external_data_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_external_data_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_fem.h b/src/getfem/getfem_fem.h
index ebf8877..48eb376 100644
--- a/src/getfem/getfem_fem.h
+++ b/src/getfem/getfem_fem.h
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/**@file getfem_fem.h
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/**@file getfem_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date December 21, 1999.
@brief Definition of the finite element methods.
@@ -37,7 +38,7 @@
base class of all FEM.
@section fem_list List of FEM known by getfem::fem_descriptor :
-
+
- "FEM_PK(N,K)" : classical Lagrange element PK on a simplex.
- "FEM_PK_DISCONTINUOUS(N,K,alpha)" : discontinuous Lagrange
@@ -49,7 +50,7 @@
element QK on a parallelepiped.
- "FEM_Q2_INCOMPLETE" : incomplete Q2 element with 8 dof (serendipity
- Quad 8 element)
+ Quad 8 element)
- "FEM_PK_PRISM(N,K)" : classical Lagrange element PK on a prism.
@@ -134,39 +135,39 @@ namespace getfem {
/// Type representing a pointer on a dof_description
typedef dof_description *pdof_description;
-
+
/** @brief Description of a unique dof of lagrange type (value at the node).
* @param d the dimension of the reference element (2 for triangles, 3 for tetrahedrons ...)
*/
pdof_description lagrange_dof(dim_type d);
-
- /** Description of a unique dof of derivative type.
+
+ /** Description of a unique dof of derivative type.
* (a derivative at the node).
* @param d the dimension of the reference element.
* @param r corresponds to the variable number for which the derivative is taken (0 <= r < d)
*/
pdof_description derivative_dof(dim_type d, dim_type r);
- /** Description of a unique dof of second derivative type.
+ /** Description of a unique dof of second derivative type.
* @param d the dimension of the reference element.
* @param num_der1 corresponds to the variable number for which the first derivative is taken (0 <= r < d)
* @param num_der2 corresponds to the variable number for which the second derivative is taken (0 <= r < d)
*/
- pdof_description second_derivative_dof(dim_type d,
- dim_type num_der1,
- dim_type num_der2);
-
+ pdof_description second_derivative_dof(dim_type d,
+ dim_type num_der1,
+ dim_type num_der2);
+
/** Description of a unique dof of normal derivative type
* (normal derivative at the node, regarding a face).
* @param d the dimension of the reference element.
- */
+ */
pdof_description normal_derivative_dof(dim_type d);
/** Description of a unique dof of mean value type.
* @param d the dimension of the reference element.
*/
pdof_description mean_value_dof(dim_type d);
-
+
pdof_description bubble1_dof(dim_type ct);
/** Description of a global dof, i.e. a numbered dof having a global scope.
@@ -203,11 +204,11 @@ namespace getfem {
/* @} */
-
+
/* ******************************************************************** */
- /* Classes for description of a finite element. */
+ /* Classes for description of a finite element. */
/* ******************************************************************** */
-
+
/** @defgroup pfem Finite element description
*
* @{
@@ -216,25 +217,25 @@ namespace getfem {
class virtual_fem;
- /** type of pointer on a fem description @see getfem::virtual_fem */
+ /** type of pointer on a fem description @see getfem::virtual_fem */
typedef boost::intrusive_ptr<const getfem::virtual_fem> pfem;
-
- struct fem_precomp_;
+
+ class fem_precomp_;
typedef boost::intrusive_ptr<const getfem::fem_precomp_> pfem_precomp;
class fem_interpolation_context;
-
+
/** @brief Base class for finite element description */
class virtual_fem : virtual public dal::static_stored_object {
public :
enum vec_type { VECTORIAL_NOTRANSFORM_TYPE, VECTORIAL_PRIMAL_TYPE,
- VECTORIAL_DUAL_TYPE };
+ VECTORIAL_DUAL_TYPE };
protected :
mutable std::vector<pdof_description> dof_types_;
- /* this convex structure is "owned" by the virtual_fem
- (a deep copy is made when virtual_fems are copied)
+ /* this convex structure is "owned" by the virtual_fem
+ (a deep copy is made when virtual_fems are copied)
But cvs_node has to be a pointer, as bgeot::convex_structure
inherits from dal::static_stored_object
*/
@@ -242,22 +243,22 @@ namespace getfem {
bgeot::convex<base_node> cv_node;
mutable bgeot::pstored_point_tab pspt;
mutable bool pspt_valid;
- bgeot::pconvex_ref cvr; /// reference element.
- dim_type ntarget_dim; /// dimension of the target space
- mutable dim_type dim_; /// dimension of the reference element
- bool is_equiv; /// true if the FEM is equivalent
- bool is_lag; /// true if the FEM is of Lagrange type
- bool is_pol; /// true if the FEM is polynomial
- bool is_polycomp; /// true if the FEM is polynomial composite
+ bgeot::pconvex_ref cvr; // reference element.
+ dim_type ntarget_dim; // dimension of the target space
+ mutable dim_type dim_; // dimension of the reference element
+ bool is_equiv; // true if the FEM is equivalent
+ bool is_lag; // true if the FEM is of Lagrange type
+ bool is_pol; // true if the FEM is polynomial
+ bool is_polycomp; // true if the FEM is polynomial composite
bool real_element_defined;
- short_type es_degree; // estimated polynomial degree of the FEM
- short_type hier_raff; /// hierarchical refinement of the FEM
+ short_type es_degree; // estimated polynomial degree of the FEM
+ short_type hier_raff; // hierarchical refinement of the FEM
vec_type vtype; // for vectorial elements, type of transformation
// from the reference element.
std::string debug_name_;
-
+
public :
- /** Number of degrees of freedom.
+ /** Number of degrees of freedom.
@param cv the convex number for this FEM. This information is
rarely used, by is needed by some "special" FEMs, such as
@@ -274,7 +275,7 @@ namespace getfem {
size_type nb_components(size_type cv) const
{ return nb_dof(cv) * ntarget_dim; }
/// Get the array of pointer on dof description.
- const std::vector<pdof_description> &dof_types(void) const
+ const std::vector<pdof_description> &dof_types(void) const
{ return dof_types_; }
short_type hierarchical_raff(void) const { return hier_raff; }
/// dimension of the reference element.
@@ -299,18 +300,18 @@ namespace getfem {
{ return node_convex(cv).structure(); }
const std::string &debug_name(void) const { return debug_name_; }
std::string &debug_name(void) { return debug_name_; }
- virtual bgeot::pstored_point_tab node_tab(size_type) const {
+ virtual bgeot::pstored_point_tab node_tab(size_type) const {
if (!pspt_valid) {
- pspt = bgeot::store_point_tab(cv_node.points());
- pspt_valid = true;
+ pspt = bgeot::store_point_tab(cv_node.points());
+ pspt_valid = true;
}
return pspt;
}
/** Gives the node corresponding to the dof i.
- @param cv the convex number for this FEM. This information is
- rarely used, by is needed by some "special" FEMs, such as
- getfem::interpolated_fem.
- @param i the local dof number (<tt>i < nb_dof(cv)</tt>)
+ @param cv the convex number for this FEM. This information is
+ rarely used, by is needed by some "special" FEMs, such as
+ getfem::interpolated_fem.
+ @param i the local dof number (<tt>i < nb_dof(cv)</tt>)
*/
const base_node &node_of_dof(size_type cv, size_type i) const
{ return (*(node_tab(cv)))[i];}
@@ -329,55 +330,55 @@ namespace getfem {
bool &is_polynomial(void) { return is_pol; }
short_type estimated_degree(void) const { return es_degree; }
short_type &estimated_degree(void) { return es_degree; }
-
+
virtual void mat_trans(base_matrix &, const base_matrix &,
- bgeot::pgeometric_trans) const
+ bgeot::pgeometric_trans) const
{ GMM_ASSERT1(false, "This function should not be called."); }
/** Interpolate at an arbitrary point x given on the reference
- element.
-
- @param c the fem_interpolation_context, should have been
- suitably initialized for the point of evaluation.
-
- @param coeff is the vector of coefficient relatively to
- the base functions, its length should be @c Qdim*this->nb_dof().
-
- @param val contains the interpolated value, on output (its
- size should be @c Qdim*this->target_dim()).
-
- @param Qdim is the optional Q dimension, if the FEM is
- considered as a "vectorized" one.
+ element.
+
+ @param c the fem_interpolation_context, should have been
+ suitably initialized for the point of evaluation.
+
+ @param coeff is the vector of coefficient relatively to
+ the base functions, its length should be @c Qdim*this->nb_dof().
+
+ @param val contains the interpolated value, on output (its
+ size should be @c Qdim*this->target_dim()).
+
+ @param Qdim is the optional Q dimension, if the FEM is
+ considered as a "vectorized" one.
*/
- template<typename CVEC, typename VVEC>
- void interpolation(const fem_interpolation_context& c,
- const CVEC& coeff, VVEC &val, dim_type Qdim) const;
+ template<typename CVEC, typename VVEC>
+ void interpolation(const fem_interpolation_context& c,
+ const CVEC& coeff, VVEC &val, dim_type Qdim) const;
/** Build the interpolation matrix for the interpolation at a
- fixed point x, given on the reference element.
+ fixed point x, given on the reference element.
- The matrix @c M is filled, such that for a given @c coeff
- vector, the interpolation is given by @c M*coeff.
+ The matrix @c M is filled, such that for a given @c coeff
+ vector, the interpolation is given by @c M*coeff.
*/
template <typename MAT>
- void interpolation(const fem_interpolation_context& c,
- MAT &M, dim_type Qdim) const;
+ void interpolation(const fem_interpolation_context& c,
+ MAT &M, dim_type Qdim) const;
/** Interpolation of the gradient. The output is stored in the @f$
- Q\times N at f$ matrix @c val.
+ Q\times N at f$ matrix @c val.
*/
- template<typename CVEC, typename VMAT>
- void interpolation_grad(const fem_interpolation_context& c,
- const CVEC& coeff, VMAT &val,
- dim_type Qdim=1) const;
+ template<typename CVEC, typename VMAT>
+ void interpolation_grad(const fem_interpolation_context& c,
+ const CVEC& coeff, VMAT &val,
+ dim_type Qdim=1) const;
/** Interpolation of the hessian. The output is stored in the @f$
- Q\times (N^2)@f$ matrix @c val.
+ Q\times (N^2)@f$ matrix @c val.
*/
- template<typename CVEC, typename VMAT>
- void interpolation_hess(const fem_interpolation_context& c,
- const CVEC& coeff, VMAT &val,
- dim_type Qdim) const;
-
+ template<typename CVEC, typename VMAT>
+ void interpolation_hess(const fem_interpolation_context& c,
+ const CVEC& coeff, VMAT &val,
+ dim_type Qdim) const;
+
/** Give the value of all components of the base functions at the
* point x of the reference element. Basic function used essentially
* by fem_precomp.
@@ -397,29 +398,29 @@ namespace getfem {
virtual void hess_base_value(const base_node &x, base_tensor &t) const = 0;
/** Give the value of all components of the base functions at the
- current point of the fem_interpolation_context. Used by
- elementary computations. if withM is false the matrix M for
- non tau-equivalent elements is not taken into account.
+ current point of the fem_interpolation_context. Used by
+ elementary computations. if withM is false the matrix M for
+ non tau-equivalent elements is not taken into account.
*/
- virtual void real_base_value(const fem_interpolation_context &c,
- base_tensor &t, bool withM = true) const;
+ virtual void real_base_value(const fem_interpolation_context &c,
+ base_tensor &t, bool withM = true) const;
/** Give the gradient of all components of the base functions at the
- current point of the fem_interpolation_context. Used by
- elementary computations. if withM is false the matrix M for
- non tau-equivalent elements is not taken into account.
+ current point of the fem_interpolation_context. Used by
+ elementary computations. if withM is false the matrix M for
+ non tau-equivalent elements is not taken into account.
*/
- virtual void real_grad_base_value(const fem_interpolation_context &c,
- base_tensor &t, bool withM = true) const;
+ virtual void real_grad_base_value(const fem_interpolation_context &c,
+ base_tensor &t, bool withM = true) const;
/** Give the hessian of all components of the base functions at the
- current point of the fem_interpolation_context. Used by
- elementary computations. if withM is false the matrix M for
- non tau-equivalent elements is not taken into account.
+ current point of the fem_interpolation_context. Used by
+ elementary computations. if withM is false the matrix M for
+ non tau-equivalent elements is not taken into account.
*/
- virtual void real_hess_base_value(const fem_interpolation_context &c,
- base_tensor &t, bool withM = true) const;
-
+ virtual void real_hess_base_value(const fem_interpolation_context &c,
+ base_tensor &t, bool withM = true) const;
+
virtual size_type index_of_global_dof(size_type, size_type) const
{ GMM_ASSERT1(false, "internal error."); }
@@ -428,16 +429,17 @@ namespace getfem {
* on which the corresponding base function is non zero.
*/
void add_node(const pdof_description &d, const base_node &pt,
- const dal::bit_vector &faces);
+ const dal::bit_vector &faces);
void add_node(const pdof_description &d, const base_node &pt);
void init_cvs_node(void);
void unfreeze_cvs_node(void);
- virtual_fem &operator =(const virtual_fem &f) {
+ virtual_fem &operator =(const virtual_fem &f) {
copy(f); return *this;
}
- virtual_fem(void) {
- ntarget_dim = 1; dim_ = 1;
+
+ virtual_fem(void) {
+ ntarget_dim = 1; dim_ = 1;
is_equiv = is_pol = is_polycomp = is_lag = false;
pspt_valid = false; hier_raff = 0; real_element_defined = false;
es_degree = 5;
@@ -480,9 +482,9 @@ namespace getfem {
template <class FUNC> class fem : public virtual_fem {
protected :
std::vector<FUNC> base_;
-
+
public :
-
+
/// Gives the array of basic functions (components).
const std::vector<FUNC> &base(void) const { return base_; }
std::vector<FUNC> &base(void) { return base_; }
@@ -493,7 +495,7 @@ namespace getfem {
size_type R = nb_base_components(0);
base_tensor::iterator it = t.begin();
for (size_type i = 0; i < R; ++i, ++it)
- *it = base_[i].eval(x.begin());
+ *it = base_[i].eval(x.begin());
}
void grad_base_value(const base_node &x, base_tensor &t) const {
bgeot::multi_index mi(3);
@@ -503,8 +505,8 @@ namespace getfem {
size_type R = nb_base_components(0);
base_tensor::iterator it = t.begin();
for (dim_type j = 0; j < n; ++j)
- for (size_type i = 0; i < R; ++i, ++it)
- { FUNC f = base_[i]; f.derivative(j); *it = f.eval(x.begin()); }
+ for (size_type i = 0; i < R; ++i, ++it)
+ { FUNC f = base_[i]; f.derivative(j); *it = f.eval(x.begin()); }
}
void hess_base_value(const base_node &x, base_tensor &t) const {
bgeot::multi_index mi(4);
@@ -515,22 +517,21 @@ namespace getfem {
size_type R = nb_base_components(0);
base_tensor::iterator it = t.begin();
for (dim_type k = 0; k < n; ++k)
- for (dim_type j = 0; j < n; ++j)
- for (size_type i = 0; i < R; ++i, ++it) {
- FUNC f = base_[i];
- f.derivative(j); f.derivative(k);
- *it = f.eval(x.begin());
- }
+ for (dim_type j = 0; j < n; ++j)
+ for (size_type i = 0; i < R; ++i, ++it) {
+ FUNC f = base_[i];
+ f.derivative(j); f.derivative(k);
+ *it = f.eval(x.begin());
+ }
}
-
-
+
};
-
+
/** Classical polynomial FEM. */
typedef const fem<base_poly> * ppolyfem;
/** Polynomial composite FEM */
typedef const fem<bgeot::polynomial_composite> * ppolycompfem;
-
+
/** Give a pointer on the structures describing the classical
polynomial fem of degree k on a given convex type.
@@ -539,7 +540,7 @@ namespace getfem {
@return a ppolyfem.
*/
pfem classical_fem(bgeot::pgeometric_trans pgt, short_type k);
-
+
/** Give a pointer on the structures describing the classical
polynomial discontinuous fem of degree k on a given convex type.
@@ -548,7 +549,7 @@ namespace getfem {
@param k the degree of the fem.
@param alpha the "inset" factor for the dof nodes: with alpha =
- 0, the nodes are located as usual (i.e. with node on the convex border),
+ 0, the nodes are located as usual (i.e. with node on the convex border),
and for 0 < alpha < 1, they converge to the center of gravity of the convex.
@return a ppolyfem.
@@ -565,36 +566,38 @@ namespace getfem {
pfem QK_fem(size_type n, short_type k);
pfem PK_prism_fem(size_type n, short_type k);
-
/**
Pre-computations on a fem (given a fixed set of points on the
reference convex, this object computes the value/gradient/hessian
of all base functions on this set of points and stores them.
*/
class fem_precomp_ : virtual public dal::static_stored_object {
- protected:
+ protected:
pfem pf;
bgeot::pstored_point_tab pspt;
- mutable std::vector<base_tensor> c; /// store values of base functions
- mutable std::vector<base_tensor> pc; /// store gradients of base functions
- mutable std::vector<base_tensor> hpc; /// store hessians of base functions
- public:
+ mutable std::vector<base_tensor> c; // store values of base functions
+ mutable std::vector<base_tensor> pc; // store gradients of base functions
+ mutable std::vector<base_tensor> hpc; // store hessians of base functions
+ public:
+ /// returns values of the base functions
inline const base_tensor &val(size_type i) const
- { if (c.empty()) init_val(); return c[i]; }
+ { if (c.empty()) init_val(); return c[i]; }
+ /// returns gradients of the base functions
inline const base_tensor &grad(size_type i) const
- { if (pc.empty()) init_grad(); return pc[i]; }
+ { if (pc.empty()) init_grad(); return pc[i]; }
+ /// returns hessians of the base functions
inline const base_tensor &hess(size_type i) const
- { if (hpc.empty()) init_hess(); return hpc[i]; }
+ { if (hpc.empty()) init_hess(); return hpc[i]; }
inline pfem get_pfem() const { return pf; }
inline const bgeot::stored_point_tab& get_point_tab() const
- { return *pspt; }
+ { return *pspt; }
fem_precomp_(pfem, bgeot::pstored_point_tab);
private:
void init_val() const;
void init_grad() const;
- void init_hess() const;
+ void init_hess() const;
};
-
+
/** @brief Handles precomputations for FEM. statically allocates a
fem-precomputation object, and returns a pointer to it. The
@@ -614,7 +617,7 @@ namespace getfem {
them via a getfem::fem_precomp_pool structure. All memory will be
freed when this structure will be destroyed. */
pfem_precomp fem_precomp(pfem pf, bgeot::pstored_point_tab pspt,
- dal::pstatic_stored_object dep);
+ dal::pstatic_stored_object dep);
/** Request for the removal of a pfem_precomp */
inline void delete_fem_precomp(pfem_precomp pfp)
@@ -630,19 +633,19 @@ namespace getfem {
*/
class fem_precomp_pool {
std::set<pfem_precomp> precomps;
-
+
public :
-
+
/** Request a pfem_precomp. If not already in the pool, the
- pfem_precomp is computed, and added to the pool.
-
+ pfem_precomp is computed, and added to the pool.
+
@param pf a pointer to the fem object.
- @param pspt a pointer to a list of points in the reference convex.CAUTION:
- this array must not be destroyed as long as the fem_precomp is used!!
-
- Moreover pspt is supposed to identify uniquely the set of
- points. This means that you should NOT alter its content until
- the fem_precomp_pool is destroyed.
+ @param pspt a pointer to a list of points in the reference convex.CAUTION:
+ this array must not be destroyed as long as the fem_precomp is used!!
+
+ Moreover pspt is supposed to identify uniquely the set of
+ points. This means that you should NOT alter its content until
+ the fem_precomp_pool is destroyed.
*/
pfem_precomp operator()(pfem pf, bgeot::pstored_point_tab pspt) {
pfem_precomp p = fem_precomp(pf, pspt, 0);
@@ -652,8 +655,8 @@ namespace getfem {
void clear(void);
~fem_precomp_pool() { clear(); }
};
-
-
+
+
/** structure passed as the argument of fem interpolation
functions. This structure can be partially filled (for example
the xreal will be computed if needed as long as pgp+ii is known).
@@ -661,11 +664,11 @@ namespace getfem {
class fem_interpolation_context :
public bgeot::geotrans_interpolation_context {
- mutable base_matrix M_; /// optional transformation matrix (for non tau-equivalent fems)
- pfem pf_; /// current fem
- pfem_precomp pfp_; /// optional fem_precomp_ (speed up the computations)
- size_type convex_num_; /// the convex number (info needed by some specific FEMs)
- size_type face_num_; /// Face number for boundary integration
+ mutable base_matrix M_; // optional transformation matrix (for non tau-equivalent fems)
+ pfem pf_; // current fem
+ pfem_precomp pfp_; // optional fem_precomp_ (speed up the computations)
+ size_type convex_num_; // the convex number (info needed by some specific FEMs)
+ size_type face_num_; // Face number for boundary integration
public:
/// true if a fem_precomp_ has been supplied.
bool have_pfp() const { return pfp_ != 0; }
@@ -674,15 +677,15 @@ namespace getfem {
/// non tau-equivalent transformation matrix.
const base_matrix& M() const;
/** fill the tensor with the values of the base functions (taken
- at point @c this->xref())
+ at point @c this->xref())
*/
void base_value(base_tensor& t, bool withM = true) const;
/** fill the tensor with the gradient of the base functions (taken
- at point @c this->xref())
+ at point @c this->xref())
*/
void grad_base_value(base_tensor& t, bool withM = true) const;
/** fill the tensor with the hessian of the base functions (taken
- at point @c this->xref())
+ at point @c this->xref())
*/
void hess_base_value(base_tensor& t, bool withM = true) const;
/** get the current FEM descriptor */
@@ -696,73 +699,76 @@ namespace getfem {
void set_pfp(pfem_precomp newpfp);
void set_pf(pfem newpf);
fem_interpolation_context();
- fem_interpolation_context(bgeot::pgeotrans_precomp pgp__,
- pfem_precomp pfp__, size_type ii__,
- const base_matrix& G__,
- size_type convex_num__,
- size_type face_num__ = size_type(-1));
- fem_interpolation_context(bgeot::pgeometric_trans pgt__,
- pfem_precomp pfp__, size_type ii__,
- const base_matrix& G__,
- size_type convex_num__,
- size_type face_num__ = size_type(-1));
+ fem_interpolation_context(bgeot::pgeotrans_precomp pgp__,
+ pfem_precomp pfp__, size_type ii__,
+ const base_matrix& G__,
+ size_type convex_num__,
+ size_type face_num__ = size_type(-1));
+ fem_interpolation_context(bgeot::pgeometric_trans pgt__,
+ pfem_precomp pfp__, size_type ii__,
+ const base_matrix& G__,
+ size_type convex_num__,
+ size_type face_num__ = size_type(-1));
fem_interpolation_context(bgeot::pgeometric_trans pgt__,
- pfem pf__,
- const base_node& xref__,
- const base_matrix& G__,
- size_type convex_num__,
- size_type face_num__ = size_type(-1));
+ pfem pf__,
+ const base_node& xref__,
+ const base_matrix& G__,
+ size_type convex_num__,
+ size_type face_num__ = size_type(-1));
};
template <typename CVEC, typename VVEC>
- void virtual_fem::interpolation(const fem_interpolation_context& c,
- const CVEC& coeff, VVEC &val,
- dim_type Qdim) const {
+ void virtual_fem::interpolation(const fem_interpolation_context& c,
+ const CVEC& coeff, VVEC &val,
+ dim_type Qdim) const {
size_type Qmult = size_type(Qdim) / target_dim();
- GMM_ASSERT1(gmm::vect_size(val) == Qdim, "dimensions mismatch");
size_type R = nb_dof(c.convex_num());
-
+ GMM_ASSERT1(gmm::vect_size(val) == Qdim, "dimensions mismatch");
+ GMM_ASSERT1(gmm::vect_size(coeff) == R*Qmult,
+ "Wrong size for coeff vector");
+
gmm::clear(val);
base_tensor Z; real_base_value(c, Z);
+
for (size_type j = 0; j < R; ++j) {
for (size_type q = 0; q < Qmult; ++q) {
- typename gmm::linalg_traits<CVEC>::value_type co = 0.0;
- co = coeff[j*Qmult+q];
- for (size_type r = 0; r < target_dim(); ++r)
- val[r + q*target_dim()] += co * Z[j + r*R];
- }
+ typename gmm::linalg_traits<CVEC>::value_type co = 0.0;
+ co = coeff[j*Qmult+q];
+ for (size_type r = 0; r < target_dim(); ++r)
+ val[r + q*target_dim()] += co * Z[j + r*R];
+ }
}
}
template <typename MAT>
- void virtual_fem::interpolation(const fem_interpolation_context& c,
- MAT &M, dim_type Qdim) const {
+ void virtual_fem::interpolation(const fem_interpolation_context& c,
+ MAT &M, dim_type Qdim) const {
size_type Qmult = size_type(Qdim) / target_dim();
size_type R = nb_dof(c.convex_num());
GMM_ASSERT1(gmm::mat_nrows(M) == Qdim && gmm::mat_ncols(M) == R*Qmult,
- "dimensions mismatch");
+ "dimensions mismatch");
gmm::clear(M);
base_tensor Z; real_base_value(c, Z);
for (size_type j = 0; j < R; ++j) {
for (size_type q = 0; q < Qmult; ++q) {
- for (size_type r = 0; r < target_dim(); ++r)
- M(r+q*target_dim(), j*Qmult+q) = Z[j + r*R];
- }
+ for (size_type r = 0; r < target_dim(); ++r)
+ M(r+q*target_dim(), j*Qmult+q) = Z[j + r*R];
+ }
}
}
- template<typename CVEC, typename VMAT>
- void virtual_fem::interpolation_grad(const fem_interpolation_context& c,
- const CVEC& coeff, VMAT &val,
- dim_type Qdim) const {
+ template<typename CVEC, typename VMAT>
+ void virtual_fem::interpolation_grad(const fem_interpolation_context& c,
+ const CVEC& coeff, VMAT &val,
+ dim_type Qdim) const {
typedef typename gmm::linalg_traits<CVEC>::value_type T;
size_type Qmult = size_type(Qdim) / target_dim();
dim_type N = dim_type(c.N());
GMM_ASSERT1(gmm::mat_ncols(val) == N && gmm::mat_nrows(val) == Qdim,
- "dimensions mismatch");
-
+ "dimensions mismatch");
+
base_tensor t;
size_type R = nb_dof(c.convex_num());
@@ -771,23 +777,23 @@ namespace getfem {
for (size_type q = 0; q < Qmult; ++q) {
base_tensor::const_iterator it = t.begin();
for (size_type k = 0; k < N; ++k)
- for (size_type r = 0; r < target_dim(); ++r)
- for (size_type j = 0; j < R; ++j, ++it)
- val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
+ for (size_type r = 0; r < target_dim(); ++r)
+ for (size_type j = 0; j < R; ++j, ++it)
+ val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
}
}
- template<typename CVEC, typename VMAT>
- void virtual_fem::interpolation_hess(const fem_interpolation_context& c,
- const CVEC& coeff, VMAT &val,
- dim_type Qdim) const {
+ template<typename CVEC, typename VMAT>
+ void virtual_fem::interpolation_hess(const fem_interpolation_context& c,
+ const CVEC& coeff, VMAT &val,
+ dim_type Qdim) const {
typedef typename gmm::linalg_traits<CVEC>::value_type T;
size_type Qmult = size_type(Qdim) / target_dim();
dim_type N = dim_type(c.N());
GMM_ASSERT1(gmm::mat_ncols(val) == gmm::size_type(N*N)
- && gmm::mat_nrows(val) == Qdim, "dimensions mismatch");
-
+ && gmm::mat_nrows(val) == Qdim, "dimensions mismatch");
+
base_tensor t;
size_type R = nb_dof(c.convex_num());
@@ -796,9 +802,9 @@ namespace getfem {
for (size_type q = 0; q < Qmult; ++q) {
base_tensor::const_iterator it = t.begin();
for (size_type k = 0; k < size_type(N*N); ++k)
- for (size_type r = 0; r < target_dim(); ++r)
- for (size_type j = 0; j < R; ++j, ++it)
- val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
+ for (size_type r = 0; r < target_dim(); ++r)
+ for (size_type j = 0; j < R; ++j, ++it)
+ val(r + q*target_dim(), k) += coeff[j*Qmult+q] * (*it);
}
}
@@ -812,7 +818,7 @@ namespace getfem {
{ p = bgeot::read_base_poly(short_type(d), s); }
void add_fem_name(std::string name,
- dal::naming_system<virtual_fem>::pfunction f);
+ dal::naming_system<virtual_fem>::pfunction f);
/* @} */
diff --git a/src/getfem/getfem_fem_level_set.h b/src/getfem/getfem_fem_level_set.h
index 8cddc4f..e597896 100644
--- a/src/getfem/getfem_fem_level_set.h
+++ b/src/getfem/getfem_fem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_fem_level_set.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_fourth_order.h b/src/getfem/getfem_fourth_order.h
index 0b91f3f..c7b2bdb 100644
--- a/src/getfem/getfem_fourth_order.h
+++ b/src/getfem/getfem_fourth_order.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_fourth_order.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_gauss_lobatto_fem_coef.h b/src/getfem/getfem_gauss_lobatto_fem_coef.h
index aece08d..be475c0 100644
--- a/src/getfem/getfem_gauss_lobatto_fem_coef.h
+++ b/src/getfem/getfem_gauss_lobatto_fem_coef.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_gauss_lobatto_fem_coef.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_im_list.h b/src/getfem/getfem_im_list.h
index 6de018a..0b33019 100644
--- a/src/getfem/getfem_im_list.h
+++ b/src/getfem/getfem_im_list.h
@@ -1,27 +1,34 @@
-// This file is generated by make_getfem_list
-
-/* *********************************************************************** */
-/* */
-/* Copyright (C) 2000-2003 Yves Renard. */
-/* */
-/* This file is a part of GETFEM++ */
-/* */
-/* This program is free software; you can redistribute it and/or modify */
-/* it under the terms of the GNU Lesser General Public License as */
-/* published by the Free Software Foundation; version 2.1 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 Lesser General Public License for more details. */
-/* */
-/* You should have received a copy of the GNU Lesser 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. */
-/* */
-/* *********************************************************************** */
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
/**\file getfem_im_list.h
\brief This file is generated by make_getfem_list*/
diff --git a/src/getfem/getfem_import.h b/src/getfem/getfem_import.h
index 60d4164..ee5e118 100644
--- a/src/getfem/getfem_import.h
+++ b/src/getfem/getfem_import.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_import.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -39,6 +40,8 @@
#include <string>
#include <iostream>
+#include <map>
+#include "bgeot_config.h" /* for bgeot::size_type */
namespace getfem {
class mesh;
@@ -81,6 +84,33 @@ namespace getfem {
mesh& m);
void import_mesh(const std::string& filename, mesh& m);
+ /** Import a mesh file in format generated by Gmsh.
+
+ The function works exactly like impot_mesh() functions
+ except that they return additional mapping of physical
+ region names to their numbers.
+
+ The example below shows how to print region names
+ and their numbers:
+ @code
+ getfem::mesh myMesh;
+ typedef std::map<std::string, bgeot::size_type> RegMap;
+ typedef RegMap::iterator RegMapIter;
+ RegMap regmap;
+ getfem::import_mesh_gmsh("mesh.msh", myMesh, regmap);
+ std::cout << regmap.size() << "\n";
+ for (RegMapIter i=regmap.begin(); i != regmap.end(); i++) {
+ std::cout << i->first << " " << i->second << "\n";
+ }
+ @endcode
+
+ */
+ void import_mesh_gmsh(const std::string& filename, mesh& m,
+ std::map<std::string, bgeot::size_type> ®ion_map);
+ void import_mesh_gmsh(std::ifstream& f, mesh& m,
+ std::map<std::string, bgeot::size_type> ®ion_map);
+
+
/** for gmsh and gid meshes, the mesh nodes are always 3D, so for a 2D mesh
the z-component of nodes should be removed */
void maybe_remove_last_dimension(mesh &msh);
diff --git a/src/getfem/getfem_integration.h b/src/getfem/getfem_integration.h
index 48e0a24..fcb4b54 100644
--- a/src/getfem/getfem_integration.h
+++ b/src/getfem/getfem_integration.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_integration.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_inter_element.h b/src/getfem/getfem_inter_element.h
index 93ba4e2..1af8e0e 100644
--- a/src/getfem/getfem_inter_element.h
+++ b/src/getfem/getfem_inter_element.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**
diff --git a/src/getfem/getfem_interpolated_fem.h b/src/getfem/getfem_interpolated_fem.h
index fa3971d..00d2e91 100644
--- a/src/getfem/getfem_interpolated_fem.h
+++ b/src/getfem/getfem_interpolated_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_interpolated_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date October 29, 2004.
diff --git a/src/getfem/getfem_interpolation.h b/src/getfem/getfem_interpolation.h
index aa53f23..5e775e9 100644
--- a/src/getfem/getfem_interpolation.h
+++ b/src/getfem/getfem_interpolation.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_interpolation.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -45,9 +46,9 @@
namespace getfem {
/* ********************************************************************* */
- /* */
- /* I. Distribution of a set of points on a mesh. */
- /* */
+ /* */
+ /* I. Distribution of a set of points on a mesh. */
+ /* */
/* ********************************************************************* */
class mesh_trans_inv : public bgeot::geotrans_inv {
@@ -84,62 +85,62 @@ namespace getfem {
/* ********************************************************************* */
- /* */
- /* II. Interpolation of functions. */
- /* */
+ /* */
+ /* II. Interpolation of functions. */
+ /* */
/* ********************************************************************* */
template <typename VECT, typename F, typename M>
inline void interpolation_function__(const mesh_fem &mf, VECT &V,
- F &f, const dal::bit_vector &dofs,
- const M &, gmm::abstract_null_type) {
+ F &f, const dal::bit_vector &dofs,
+ const M &, gmm::abstract_null_type) {
size_type Q = mf.get_qdim();
- GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof() && Q == 1,
- "Dof vector has not the right size");
+ GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof() && Q == 1,
+ "Dof vector has not the right size");
for (dal::bv_visitor i(dofs); !i.finished(); ++i)
V[i] = f(mf.point_of_basic_dof(i));
}
template <typename VECT, typename F, typename M>
inline void interpolation_function__(const mesh_fem &mf, VECT &V,
- F &f, const dal::bit_vector &dofs,
- const M &v, gmm::abstract_vector) {
+ F &f, const dal::bit_vector &dofs,
+ const M &v, gmm::abstract_vector) {
size_type N = gmm::vect_size(v), Q = mf.get_qdim();
- GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof()*N/Q,
- "Dof vector has not the right size");
+ GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof()*N/Q,
+ "Dof vector has not the right size");
for (dal::bv_visitor i(dofs); !i.finished(); ++i)
if (i % Q == 0)
- gmm::copy(f(mf.point_of_basic_dof(i)),
- gmm::sub_vector(V, gmm::sub_interval(i*N/Q, N)));
+ gmm::copy(f(mf.point_of_basic_dof(i)),
+ gmm::sub_vector(V, gmm::sub_interval(i*N/Q, N)));
}
template <typename VECT, typename F, typename M>
inline void interpolation_function__(const mesh_fem &mf, VECT &V,
- F &f, const dal::bit_vector &dofs,
- const M &mm, gmm::abstract_matrix) {
+ F &f, const dal::bit_vector &dofs,
+ const M &mm, gmm::abstract_matrix) {
typedef typename gmm::linalg_traits<VECT>::value_type T;
size_type Nr = gmm::mat_nrows(mm), Nc = gmm::mat_ncols(mm), N = Nr*Nc;
size_type Q = mf.get_qdim();
base_matrix m(Nr, Nc);
- GMM_ASSERT1(gmm::vect_size(V) == mf.nb_dof()*N/Q,
- "Dof vector has not the right size");
+ GMM_ASSERT1(gmm::vect_size(V) == mf.nb_basic_dof()*N/Q,
+ "Dof vector has not the right size");
for (dal::bv_visitor i(dofs); !i.finished(); ++i)
if (i % Q == 0) {
- gmm::copy(f(mf.point_of_basic_dof(i)), m);
- for (size_type j = 0; j < Nc; ++j)
- gmm::copy(gmm::mat_col(m, j),
- gmm::sub_vector(V, gmm::sub_interval(i*N/Q+j*Nr, Nr)));
+ gmm::copy(f(mf.point_of_basic_dof(i)), m);
+ for (size_type j = 0; j < Nc; ++j)
+ gmm::copy(gmm::mat_col(m, j),
+ gmm::sub_vector(V, gmm::sub_interval(i*N/Q+j*Nr, Nr)));
}
}
template <typename VECT, typename F, typename M>
inline void interpolation_function_(const mesh_fem &mf, VECT &V,
- F &f, const dal::bit_vector &dofs,
- const M &m) {
+ F &f, const dal::bit_vector &dofs,
+ const M &m) {
interpolation_function__(mf, V, f, dofs, m,
- typename gmm::linalg_traits<M>::linalg_type());
+ typename gmm::linalg_traits<M>::linalg_type());
}
#if GETFEM_PARA_LEVEL > 0
@@ -173,7 +174,7 @@ namespace getfem {
*/
template <typename VECT, typename F>
void interpolation_function(mesh_fem &mf_target, const VECT &VV, F &f,
- mesh_region rg=mesh_region::all_convexes()) {
+ mesh_region rg=mesh_region::all_convexes()) {
typedef typename gmm::linalg_traits<VECT>::value_type T;
size_type qqdimt = gmm::vect_size(VV) / mf_target.nb_dof();
std::vector<T> V(mf_target.nb_basic_dof()*qqdimt);
@@ -181,26 +182,26 @@ namespace getfem {
dal::bit_vector dofs = mf_target.basic_dof_on_region(rg);
if (dofs.card() > 0)
interpolation_function_(mf_target, V, f, dofs,
- f(mf_target.point_of_basic_dof(dofs.first())));
+ f(mf_target.point_of_basic_dof(dofs.first())));
if (mf_target.is_reduced()) {
for (size_type k = 0; k < qqdimt; ++k)
- gmm::mult(mf_target.reduction_matrix(),
- gmm::sub_vector(V,
- gmm::sub_slice(k, mf_target.nb_basic_dof(),
- qqdimt)),
- gmm::sub_vector(const_cast<VECT &>(VV),
- gmm::sub_slice(k, mf_target.nb_dof(),
- qqdimt)));
+ gmm::mult(mf_target.reduction_matrix(),
+ gmm::sub_vector(V,
+ gmm::sub_slice(k, mf_target.nb_basic_dof(),
+ qqdimt)),
+ gmm::sub_vector(const_cast<VECT &>(VV),
+ gmm::sub_slice(k, mf_target.nb_dof(),
+ qqdimt)));
}
else
gmm::copy(V, const_cast<VECT &>(VV));
}
/* ********************************************************************* */
- /* */
- /* III. Interpolation between two meshes. */
- /* */
+ /* */
+ /* III. Interpolation between two meshes. */
+ /* */
/* ********************************************************************* */
/* ------------------------------ Interface -----------------------------*/
@@ -218,8 +219,8 @@ namespace getfem {
*/
template<typename VECTU, typename VECTV>
void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
- const VECTU &U, VECTV &V, int extrapolation = 0,
- double EPS = 1E-10);
+ const VECTU &U, VECTV &V, int extrapolation = 0,
+ double EPS = 1E-10);
/**
@brief Build the interpolation matrix of mf_source on mf_target.
@@ -230,7 +231,7 @@ namespace getfem {
*/
template<typename MAT>
void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
- MAT &M, int extrapolation = 0, double EPS = 1E-10);
+ MAT &M, int extrapolation = 0, double EPS = 1E-10);
/* --------------------------- Implementation ---------------------------*/
@@ -246,9 +247,9 @@ namespace getfem {
*/
template<typename VECTU, typename VECTV, typename MAT>
void interpolation_same_mesh(const mesh_fem &mf_source,
- const mesh_fem &mf_target,
- const VECTU &UU, VECTV &VV,
- MAT &MM, int version) {
+ const mesh_fem &mf_target,
+ const VECTU &UU, VECTV &VV,
+ MAT &MM, int version) {
typedef typename gmm::linalg_traits<VECTU>::value_type T;
base_matrix G;
@@ -258,9 +259,9 @@ namespace getfem {
std::vector<std::vector<T> > coeff;
std::vector<size_type> dof_source;
GMM_ASSERT1(qdim == mf_target.get_qdim() || mf_target.get_qdim() == 1,
- "Attempt to interpolate a field of dimension "
- << qdim << " on a mesh_fem whose Qdim is " <<
- int(mf_target.get_qdim()));
+ "Attempt to interpolate a field of dimension "
+ << qdim << " on a mesh_fem whose Qdim is " <<
+ int(mf_target.get_qdim()));
size_type qmult = mf_source.get_qdim()/mf_target.get_qdim();
size_type qqdimt = qqdim * mf_source.get_qdim()/mf_target.get_qdim();
fem_precomp_pool fppool;
@@ -279,7 +280,7 @@ namespace getfem {
bgeot::pgeometric_trans pgt=mf_source.linked_mesh().trans_of_convex(cv);
pfem pf_s = mf_source.fem_of_element(cv);
if (!mf_target.convex_index().is_in(cv))
- continue;
+ continue;
pfem pf_t = mf_target.fem_of_element(cv);
size_type nbd_s = pf_s->nb_dof(cv);
size_type nbd_t = pf_t->nb_dof(cv);
@@ -292,46 +293,46 @@ namespace getfem {
coeff[qq].resize(nbd_s*qdim);
itdof = mf_source.ind_basic_dof_of_element(cv).begin();
for (size_type k = 0; k < cvnbdof; ++k, ++itdof) {
- coeff[qq][k] = U[(*itdof)*qqdim+qq];
- }
+ coeff[qq][k] = U[(*itdof)*qqdim+qq];
+ }
}
}
if (pf_s->need_G())
- bgeot::vectors_to_base_matrix
- (G, mf_source.linked_mesh().points_of_convex(cv));
+ bgeot::vectors_to_base_matrix
+ (G, mf_source.linked_mesh().points_of_convex(cv));
GMM_ASSERT1(pf_t->target_dim() == 1,
- "won't interpolate on a vector FEM... ");
+ "won't interpolate on a vector FEM... ");
pfem_precomp pfp = fppool(pf_s, pf_t->node_tab(cv));
fem_interpolation_context ctx(pgt,pfp,size_type(-1), G, cv,
- size_type(-1));
+ size_type(-1));
itdof = mf_target.ind_basic_dof_of_element(cv).begin();
if (version != 0) {
- const mesh_fem::ind_dof_ct &idct
- = mf_source.ind_basic_dof_of_element(cv);
- dof_source.assign(idct.begin(), idct.end());
+ const mesh_fem::ind_dof_ct &idct
+ = mf_source.ind_basic_dof_of_element(cv);
+ dof_source.assign(idct.begin(), idct.end());
}
for (size_type i = 0; i < nbd_t; ++i, itdof+=mf_target.get_qdim()) {
- size_type dof_t = *itdof*qmult;
+ size_type dof_t = *itdof*qmult;
if (dof_t_done.is_in(*itdof)) continue;
dof_t_done.add(*itdof);
- ctx.set_ii(i);
- if (version == 0) {
+ ctx.set_ii(i);
+ if (version == 0) {
for (size_type qq=0; qq < qqdim; ++qq) {
pf_s->interpolation(ctx, coeff[qq], val, qdim);
for (size_type k=0; k < qdim; ++k)
- V[(dof_t + k)*qqdim+qq] = val[k];
+ V[(dof_t + k)*qqdim+qq] = val[k];
}
- }
- else {
- base_matrix Mloc(qdim, mf_source.nb_basic_dof_of_element(cv));
- pf_s->interpolation(ctx, Mloc, qdim);
- for (size_type k=0; k < qdim; ++k) {
+ }
+ else {
+ base_matrix Mloc(qdim, mf_source.nb_basic_dof_of_element(cv));
+ pf_s->interpolation(ctx, Mloc, qdim);
+ for (size_type k=0; k < qdim; ++k) {
for (size_type j=0; j < dof_source.size(); ++j) {
M(dof_t + k, dof_source[j]) = Mloc(k, j);
}
- }
- }
+ }
+ }
}
}
@@ -340,34 +341,34 @@ namespace getfem {
mf_target.reduce_vector(V, VV);
else {
if (mf_target.is_reduced())
- if (mf_source.is_reduced()) {
- gmm::row_matrix<gmm::rsvector<scalar_type> >
- MMM(mf_target.nb_dof(), mf_source.nb_basic_dof());
- gmm::mult(mf_target.reduction_matrix(), M, MMM);
- gmm::mult(MMM, mf_source.extension_matrix(), MM);
- }
- else
- gmm::mult(mf_target.reduction_matrix(), M, MM);
+ if (mf_source.is_reduced()) {
+ gmm::row_matrix<gmm::rsvector<scalar_type> >
+ MMM(mf_target.nb_dof(), mf_source.nb_basic_dof());
+ gmm::mult(mf_target.reduction_matrix(), M, MMM);
+ gmm::mult(MMM, mf_source.extension_matrix(), MM);
+ }
+ else
+ gmm::mult(mf_target.reduction_matrix(), M, MM);
else
- if (mf_source.is_reduced())
- gmm::mult(M, mf_source.extension_matrix(), MM);
- else
- gmm::copy(M, MM);
+ if (mf_source.is_reduced())
+ gmm::mult(M, mf_source.extension_matrix(), MM);
+ else
+ gmm::copy(M, MM);
}
}
/*
interpolation of a solution on another mesh.
- - mti contains the points where to interpole.
+ - mti contains the points where to interpolate.
- the solution should be continuous.
*/
template<typename VECTU, typename VECTV, typename MAT>
void interpolation(const mesh_fem &mf_source,
- mesh_trans_inv &mti,
- const VECTU &UU, VECTV &V, MAT &MM,
- int version, int extrapolation = 0,
- dal::bit_vector *dof_untouched = 0) {
+ mesh_trans_inv &mti,
+ const VECTU &UU, VECTV &V, MAT &MM,
+ int version, int extrapolation = 0,
+ dal::bit_vector *dof_untouched = 0) {
typedef typename gmm::linalg_traits<VECTU>::value_type T;
const mesh &msh(mf_source.linked_mesh());
@@ -398,84 +399,84 @@ namespace getfem {
pfem pf_s = mf_source.fem_of_element(cv);
if (pf_s->need_G())
- bgeot::vectors_to_base_matrix(G, msh.points_of_convex(cv));
+ bgeot::vectors_to_base_matrix(G, msh.points_of_convex(cv));
fem_interpolation_context ctx(pgt, pf_s, base_node(), G, cv,
- size_type(-1));
+ size_type(-1));
if (version == 0) {
coeff.resize(qqdim);
for (size_type qq=0; qq < qqdim; ++qq) {
coeff[qq].resize(mf_source.nb_basic_dof_of_element(cv));
- gmm::sub_index SUBI(mf_source.ind_basic_dof_of_element(cv));
+ gmm::sub_index SUBI(mf_source.ind_basic_dof_of_element(cv));
gmm::copy(gmm::sub_vector(U, SUBI), coeff[qq]);
}
}
if (version != 0) {
- const mesh_fem::ind_dof_ct &idct
- = mf_source.ind_basic_dof_of_element(cv);
- dof_source.assign(idct.begin(), idct.end());
+ const mesh_fem::ind_dof_ct &idct
+ = mf_source.ind_basic_dof_of_element(cv);
+ dof_source.assign(idct.begin(), idct.end());
}
for (size_type i = 0; i < itab.size(); ++i) {
- size_type dof_t = itab[i];
- if (dof_done.is_in(dof_t)) {
- dof_done.sup(dof_t);
- ctx.set_xref(mti.reference_coords()[dof_t]);
- size_type pos = dof_t * qdim_s;
- if (version == 0) {
+ size_type dof_t = itab[i];
+ if (dof_done.is_in(dof_t)) {
+ dof_done.sup(dof_t);
+ ctx.set_xref(mti.reference_coords()[dof_t]);
+ size_type pos = dof_t * qdim_s;
+ if (version == 0) {
for (size_type qq=0; qq < qqdim; ++qq) {
pf_s->interpolation(ctx, coeff[qq], val, qdim_s);
for (size_type k=0; k < qdim_s; ++k)
- V[(pos + k)*qqdim+qq] = val[k];
+ V[(pos + k)*qqdim+qq] = val[k];
}
- // Partie à arranger si on veut en option pouvoir interpoler
- // le gradient.
- // if (PVGRAD) {
- // base_matrix grad(mdim, qdim);
- // pf_s->interpolation_grad(ctx,coeff,gmm::transposed(grad), qdim);
- // std::copy(grad.begin(), grad.end(), V.begin()+dof_t*qdim*mdim);
- // }
- }
- else {
- base_matrix Mloc(qdim_s, mf_source.nb_basic_dof_of_element(cv));
- pf_s->interpolation(ctx, Mloc, qdim_s);
- for (size_type k=0; k < qdim_s; ++k) {
+ // Partie à arranger si on veut en option pouvoir interpoler
+ // le gradient.
+ // if (PVGRAD) {
+ // base_matrix grad(mdim, qdim);
+ // pf_s->interpolation_grad(ctx,coeff,gmm::transposed(grad), qdim);
+ // std::copy(grad.begin(), grad.end(), V.begin()+dof_t*qdim*mdim);
+ // }
+ }
+ else {
+ base_matrix Mloc(qdim_s, mf_source.nb_basic_dof_of_element(cv));
+ pf_s->interpolation(ctx, Mloc, qdim_s);
+ for (size_type k=0; k < qdim_s; ++k) {
for (size_type j=0; j < gmm::mat_ncols(Mloc); ++j)
M(pos+k, dof_source[j]) = Mloc(k,j);
/* does not work with col matrices
- gmm::clear(gmm::mat_row(M, pos+k));
- gmm::copy(gmm::mat_row(Mloc, k),
- gmm::sub_vector(gmm::mat_row(M, pos+k), isrc));
+ gmm::clear(gmm::mat_row(M, pos+k));
+ gmm::copy(gmm::mat_row(Mloc, k),
+ gmm::sub_vector(gmm::mat_row(M, pos+k), isrc));
*/
- }
- }
- }
+ }
+ }
+ }
}
}
if (dof_done.card() != 0) {
if (dof_untouched)
- *dof_untouched = dof_done;
+ *dof_untouched = dof_done;
else
- GMM_WARNING2("in interpolation (different meshes),"
- << dof_done.card() << " dof of target mesh_fem have "
- << " been missed\nmissing dofs : " << dof_done);
+ GMM_WARNING2("in interpolation (different meshes),"
+ << dof_done.card() << " dof of target mesh_fem have "
+ << " been missed\nmissing dofs : " << dof_done);
}
if (version != 0) {
if (mf_source.is_reduced())
- gmm::mult(M, mf_source.extension_matrix(), MM);
+ gmm::mult(M, mf_source.extension_matrix(), MM);
else
- gmm::copy(M, MM);
+ gmm::copy(M, MM);
}
}
template<typename VECTU, typename VECTV>
void interpolation(const mesh_fem &mf_source, mesh_trans_inv &mti,
- const VECTU &U, VECTV &V, int extrapolation = 0,
- dal::bit_vector *dof_untouched = 0) {
+ const VECTU &U, VECTV &V, int extrapolation = 0,
+ dal::bit_vector *dof_untouched = 0) {
base_matrix M;
GMM_ASSERT1((gmm::vect_size(U) % mf_source.nb_dof()) == 0 &&
- gmm::vect_size(V)!=0, "Dimension of vector mismatch");
+ gmm::vect_size(V)!=0, "Dimension of vector mismatch");
interpolation(mf_source, mti, U, V, M, 0, extrapolation, dof_untouched);
}
@@ -488,9 +489,9 @@ namespace getfem {
*/
template<typename VECTU, typename VECTV, typename MAT>
void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
- const VECTU &U, VECTV &VV, MAT &MM,
- int version, int extrapolation,
- double EPS) {
+ const VECTU &U, VECTV &VV, MAT &MM,
+ int version, int extrapolation,
+ double EPS) {
typedef typename gmm::linalg_traits<VECTU>::value_type T;
dim_type qqdim = dim_type(gmm::vect_size(U)/mf_source.nb_dof());
@@ -503,14 +504,14 @@ namespace getfem {
getfem::mesh_trans_inv mti(msh, EPS);
size_type qdim_s = mf_source.get_qdim(), qdim_t = mf_target.get_qdim();
GMM_ASSERT1(qdim_s == qdim_t || qdim_t == 1,
- "Attempt to interpolate a field of dimension "
- << qdim_s << " on a mesh_fem whose Qdim is " << qdim_t);
+ "Attempt to interpolate a field of dimension "
+ << qdim_s << " on a mesh_fem whose Qdim is " << qdim_t);
/* test if the target mesh_fem is really of Lagrange type. */
for (dal::bv_visitor cv(mf_target.convex_index()); !cv.finished();++cv) {
pfem pf_t = mf_target.fem_of_element(cv);
GMM_ASSERT1(pf_t->target_dim() == 1 && pf_t->is_lagrange(),
- "Target fem not convenient for interpolation");
+ "Target fem not convenient for interpolation");
}
/* initialisation of the mesh_trans_inv */
size_type nbpts = mf_target.nb_basic_dof() / qdim_t;
@@ -522,21 +523,21 @@ namespace getfem {
mf_target.reduce_vector(V, VV);
else {
if (mf_target.is_reduced())
- gmm::mult(mf_target.reduction_matrix(), M, MM);
+ gmm::mult(mf_target.reduction_matrix(), M, MM);
else
- gmm::copy(M, MM);
+ gmm::copy(M, MM);
}
}
template<typename VECTU, typename VECTV>
void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
- const VECTU &U, VECTV &V, int extrapolation,
- double EPS = 1E-10) {
+ const VECTU &U, VECTV &V, int extrapolation,
+ double EPS) {
base_matrix M;
GMM_ASSERT1((gmm::vect_size(U) % mf_source.nb_dof()) == 0
- && (gmm::vect_size(V) % mf_target.nb_dof()) == 0
- && gmm::vect_size(V) != 0, "Dimensions mismatch");
+ && (gmm::vect_size(V) % mf_target.nb_dof()) == 0
+ && gmm::vect_size(V) != 0, "Dimensions mismatch");
if (&mf_source.linked_mesh() == &mf_target.linked_mesh()) {
interpolation_same_mesh(mf_source, mf_target, U, V, M, 0);
}
@@ -546,10 +547,10 @@ namespace getfem {
template<typename MAT>
void interpolation(const mesh_fem &mf_source, const mesh_fem &mf_target,
- MAT &M, int extrapolation, double EPS = 1E-10) {
+ MAT &M, int extrapolation, double EPS) {
GMM_ASSERT1(mf_source.nb_dof() == gmm::mat_ncols(M)
- && (gmm::mat_nrows(M) % mf_target.nb_dof()) == 0
- && gmm::mat_nrows(M) != 0, "Dimensions mismatch");
+ && (gmm::mat_nrows(M) % mf_target.nb_dof()) == 0
+ && gmm::mat_nrows(M) != 0, "Dimensions mismatch");
std::vector<scalar_type> U, V;
if (&mf_source.linked_mesh() == &mf_target.linked_mesh())
interpolation_same_mesh(mf_source, mf_target, U, V, M, 1);
diff --git a/src/getfem/getfem_level_set.h b/src/getfem/getfem_level_set.h
index 5a6c537..6391a18 100644
--- a/src/getfem/getfem_level_set.h
+++ b/src/getfem/getfem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_level_set.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_linearized_plates.h b/src/getfem/getfem_linearized_plates.h
index 40a80b4..8ae1ebf 100644
--- a/src/getfem/getfem_linearized_plates.h
+++ b/src/getfem/getfem_linearized_plates.h
@@ -1,34 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_linearized_plates.h
- @author Yves Renard <Yves.Renard at insa-lyon.fr>, Michel Salaun, msalaun at ensica.fr
+ @author Yves Renard <Yves.Renard at insa-lyon.fr>
@date November 1, 2004.
@brief Define a linear plate model brick.
*/
@@ -834,14 +835,14 @@ namespace getfem {
(*ut_part, bound, dummy_mesh_fem(), num_fem+1);
u3_part->set_constraints_type(cot);
- bool mixed = false, symmetrized = false;
+ bool mixed = false; // , symmetrized = false;
if (problem.get_mesh_fem_info(num_fem).brick_ident
== MDBRICK_LINEAR_PLATE)
- { mixed = false; symmetrized = false; }
+ { mixed = false; /* symmetrized = false; */ }
else if (problem.get_mesh_fem_info(num_fem).brick_ident
== MDBRICK_MIXED_LINEAR_PLATE) {
mixed=true;
- symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
+ // symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
}
else GMM_ASSERT1(false, "This brick should only be applied to "
"a plate problem");
@@ -901,14 +902,14 @@ namespace getfem {
u3_part.set_constraints_type(cot);
theta_part.set_constraints_type(cot);
- bool mixed = false, symmetrized = false;
+ bool mixed = false; // , symmetrized = false;
if (problem.get_mesh_fem_info(num_fem).brick_ident
== MDBRICK_LINEAR_PLATE)
- { mixed = false; symmetrized = false; }
+ { mixed = false; /* symmetrized = false; */ }
else if (problem.get_mesh_fem_info(num_fem).brick_ident
== MDBRICK_MIXED_LINEAR_PLATE) {
mixed=true;
- symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
+ // symmetrized = ((problem.get_mesh_fem_info(num_fem).info) & 2);
}
else GMM_ASSERT1(false, "This brick should only be applied to "
"a plate problem");
diff --git a/src/getfem/getfem_mat_elem.h b/src/getfem/getfem_mat_elem.h
index 0f69292..3e50848 100644
--- a/src/getfem/getfem_mat_elem.h
+++ b/src/getfem/getfem_mat_elem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mat_elem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mat_elem_type.h b/src/getfem/getfem_mat_elem_type.h
index d4c9200..0b02fc5 100644
--- a/src/getfem/getfem_mat_elem_type.h
+++ b/src/getfem/getfem_mat_elem_type.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mat_elem_type.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date December 21, 2000.
@@ -85,7 +86,7 @@ namespace getfem {
struct constituant {
constituant_type t;
pfem pfi;
- unsigned nl_part; /* only usefull with GETFEM_NONLINEAR_ : since the
+ unsigned nl_part; /* only useful with GETFEM_NONLINEAR_ : since the
nonlinear term may use more than one pfem, it will
be splitted into one "constituant" per fem
for (nl_part = 0), the mat_elem_* computations will
@@ -100,8 +101,8 @@ namespace getfem {
* is not to be manipulate by itself. Use pmat_elem_type and
* the functions written to produce those descriptions.
*/
- struct mat_elem_type
- : virtual public dal::static_stored_object, std::vector<constituant> {
+ class mat_elem_type
+ : virtual public dal::static_stored_object, public std::vector<constituant> {
protected :
bgeot::multi_index mi;
public :
diff --git a/src/getfem/getfem_mesh.h b/src/getfem/getfem_mesh.h
index 157e7f8..05d1b62 100644
--- a/src/getfem/getfem_mesh.h
+++ b/src/getfem/getfem_mesh.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -332,6 +333,12 @@ namespace getfem {
template<class ITER>
size_type add_prism_by_points(dim_type di, const ITER &ps);
+ size_type add_face_of_convex(size_type, short_type)
+ { GMM_ASSERT1(false, "Sorry, to be done"); }
+
+ void add_faces_of_convex(size_type)
+ { GMM_ASSERT1(false, "Sorry, to be done"); }
+
/// Delete the convex of index ic from the mesh.
void sup_convex(size_type ic, bool sup_points = false);
/** Swap the indexes of the convex of indexes i and j
diff --git a/src/getfem/getfem_mesh_fem.h b/src/getfem/getfem_mesh_fem.h
index 6351fd0..17ae1de 100644
--- a/src/getfem/getfem_mesh_fem.h
+++ b/src/getfem/getfem_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -379,7 +380,7 @@ namespace getfem {
*/
void set_classical_discontinuous_finite_element(dim_type fem_degree,
scalar_type alpha=0);
- /** Return the basic fem associated with an element (in no fem is
+ /** Return the basic fem associated with an element (if no fem is
* associated, the function will crash! use the convex_index() of
* the mesh_fem to check that a fem is associated to a given
* convex). This fem does not take into account the optional
@@ -475,11 +476,22 @@ namespace getfem {
virtual const mesh::ind_cv_ct &convex_to_basic_dof(size_type d) const;
const mesh::ind_cv_ct &convex_to_dof(size_type d) const IS_DEPRECATED
{ return convex_to_basic_dof(d); }
+
+ /** Give an array that contains the global dof indices corresponding
+ * to the mesh_fem dofs or size_type(-1) if a dof is not global.
+ * @param ind the returned global dof indices array.
+ */
+ virtual void get_global_dof_index(std::vector<size_type> &ind) const;
/** Renumber the degrees of freedom. You should not have
* to call this function, as it is done automatically */
void enumerate_dof(void) const;
+
+#if GETFEM_PARA_LEVEL > 1
+ void enumerate_dof_para(void)const;
+#endif
+
/** Return the total number of basic degrees of freedom (before the
- * optional redution). */
+ * optional reduction). */
virtual size_type nb_basic_dof(void) const {
context_check(); if (!dof_enumeration_made) enumerate_dof();
return nb_total_dof;
diff --git a/src/getfem/getfem_mesh_fem_global_function.h b/src/getfem/getfem_mesh_fem_global_function.h
index c5d1e9d..17e5e2d 100644
--- a/src/getfem/getfem_mesh_fem_global_function.h
+++ b/src/getfem/getfem_mesh_fem_global_function.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file mesh_fem_global_function.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>, J. Pommier
@@ -43,7 +44,7 @@
#include "getfem/getfem_arch_config.h"
#if GETFEM_HAVE_MUPARSER_MUPARSER_H
#include <muParser/muParser.h>
-#elif GETFEM_HAVE_MUPARSER_MUPARSER_H
+#elif GETFEM_HAVE_MUPARSER_H
#include <muParser.h>
#endif
@@ -161,7 +162,7 @@ namespace getfem {
virtual ~abstract_xy_function() {}
};
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
struct parser_xy_function : public abstract_xy_function {
mu::Parser pval;
mu::Parser pXgrad,pYgrad;
@@ -260,7 +261,7 @@ namespace getfem {
};
/*
- * some usefull global functions
+ * some useful global functions
*/
class level_set;
diff --git a/src/getfem/getfem_mesh_fem_level_set.h b/src/getfem/getfem_mesh_fem_level_set.h
index 966a49b..2ce7f4c 100644
--- a/src/getfem/getfem_mesh_fem_level_set.h
+++ b/src/getfem/getfem_mesh_fem_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_fem_level_set.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_mesh_fem_product.h b/src/getfem/getfem_mesh_fem_product.h
index 1f23311..a7ed2ec 100644
--- a/src/getfem/getfem_mesh_fem_product.h
+++ b/src/getfem/getfem_mesh_fem_product.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// To be corrected : dependencies. The mesh fem using this fem will not
// depend on the mesh fem arguments.
diff --git a/src/getfem/getfem_mesh_fem_sum.h b/src/getfem/getfem_mesh_fem_sum.h
index 66e540b..084fb07 100644
--- a/src/getfem/getfem_mesh_fem_sum.h
+++ b/src/getfem/getfem_mesh_fem_sum.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_fem_sum.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesh_im.h b/src/getfem/getfem_mesh_im.h
index de3a0df..3ad398b 100644
--- a/src/getfem/getfem_mesh_im.h
+++ b/src/getfem/getfem_mesh_im.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_im.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mesh_im_level_set.h b/src/getfem/getfem_mesh_im_level_set.h
index 9f135a3..d486cb0 100644
--- a/src/getfem/getfem_mesh_im_level_set.h
+++ b/src/getfem/getfem_mesh_im_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_im_level_set.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_mesh_level_set.h b/src/getfem/getfem_mesh_level_set.h
index 78c10c8..f4db6ee 100644
--- a/src/getfem/getfem_mesh_level_set.h
+++ b/src/getfem/getfem_mesh_level_set.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_level_set.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesh_region.h b/src/getfem/getfem_mesh_region.h
index c9e898e..eba5928 100644
--- a/src/getfem/getfem_mesh_region.h
+++ b/src/getfem/getfem_mesh_region.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_region.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -131,6 +132,8 @@ namespace getfem {
void error_if_not_faces() const;
void error_if_not_convexes() const;
void error_if_not_homogeneous() const;
+ const mesh *get_parent_mesh(void) const { return parent_mesh; }
+ void set_parent_mesh(mesh *pm) { parent_mesh = pm; }
/** "iterator" class for regions. Usage similar to bv_visitor:
for (mr_visitor i(region); !i.finished(); ++i) {
diff --git a/src/getfem/getfem_mesh_slice.h b/src/getfem/getfem_mesh_slice.h
index ffbc743..8561870 100644
--- a/src/getfem/getfem_mesh_slice.h
+++ b/src/getfem/getfem_mesh_slice.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_slice.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -133,20 +134,35 @@ namespace getfem {
'discontinuous' meshes
*/
void merge_nodes() const;
+
+ /** @brief Return the number of merged nodes in slice. */
size_type nb_merged_nodes() const
{ return merged_nodes_idx.size() - 1; }
+
+ /** @brief Return the physical position of the merged node.
+ @param i_merged should be 0 <= i_merged < nb_merged_nodes()
+ */
const base_node merged_point(size_type i_merged) const
{ return merged_nodes[merged_nodes_idx[i_merged]].P->pt; }
+
size_type merged_index(size_type ic, size_type ipt) const
{ return to_merged_index[global_index(ic,ipt)]; }
size_type global_index(size_type ic, size_type ipt) const
{ return cvlst[ic].global_points_count+ipt; }
+
+ /** @brief Return the number of nodes that were merged
+ to form the merged one.
+ @param i_merged index of the merged node:
+ 0 <= i_merged < nb_merged_nodes()
+ */
size_type merged_point_cnt(size_type i_merged) const
{ return merged_nodes_idx[i_merged+1] - merged_nodes_idx[i_merged]; }
+
std::vector<merged_node_t>::const_iterator
merged_point_nodes(size_type i_merged) const {
return merged_nodes.begin() + merged_nodes_idx[i_merged];
}
+
void clear_merged_nodes() const;
/** @brief Extract the list of mesh edges.
diff --git a/src/getfem/getfem_mesh_slicers.h b/src/getfem/getfem_mesh_slicers.h
index c3db638..c7a15ff 100644
--- a/src/getfem/getfem_mesh_slicers.h
+++ b/src/getfem/getfem_mesh_slicers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesh_slicers.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/getfem/getfem_mesher.h b/src/getfem/getfem_mesher.h
index 3208778..bce931e 100644
--- a/src/getfem/getfem_mesher.h
+++ b/src/getfem/getfem_mesher.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier, Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_mesher.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>, Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -167,45 +168,6 @@ namespace getfem {
}
- class mesher_tube : public mesher_signed_distance {
- base_node x0; base_node n; scalar_type R;
- public:
- mesher_tube(base_node x0_, base_node n_, scalar_type R_)
- : x0(x0_), n(n_), R(R_)
- { n /= gmm::vect_norm2(n); }
- bool bounding_box(base_node &, base_node &) const
- { return false; }
- virtual scalar_type operator()(const base_node &P) const {
- base_node v(P); v -= x0;
- gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
- return gmm::vect_norm2(v) - R;
- }
- virtual scalar_type operator()(const base_node &P,
- dal::bit_vector &bv) const {
- scalar_type d = (*this)(P);
- bv[id] = (gmm::abs(d) < SEPS);
- return d;
- }
- virtual void register_constraints(std::vector<const
- mesher_signed_distance*>& list) const {
- id = list.size(); list.push_back(this);
- }
- scalar_type grad(const base_node &P, base_small_vector &G) const {
- G = P; G -= x0;
- gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
- scalar_type e = gmm::vect_norm2(G), d = e - R;
- while (e == scalar_type(0)) {
- gmm::fill_random(G);
- gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
- e = gmm::vect_norm2(G);
- }
- G /= e;
- return d;
- }
- void hess(const base_node &, base_matrix &) const {
- GMM_ASSERT1(false, "Sorry, to be done");
- }
- };
class mesher_ball : public mesher_signed_distance {
@@ -424,6 +386,10 @@ namespace getfem {
mutable bool isin;
bool with_min;
public:
+ mesher_union(const std::vector<const mesher_signed_distance *>
+ &dists_) : dists(dists_)
+ { vd.resize(dists.size()); }
+
mesher_union(const mesher_signed_distance &a_,
const mesher_signed_distance &b_,
const mesher_signed_distance &c_ = void_signed_distance,
@@ -723,42 +689,164 @@ namespace getfem {
};
+
+ class mesher_tube : public mesher_signed_distance {
+ base_node x0; base_node n; scalar_type R;
+ public:
+ mesher_tube(base_node x0_, base_node n_, scalar_type R_)
+ : x0(x0_), n(n_), R(R_)
+ { n /= gmm::vect_norm2(n); }
+ bool bounding_box(base_node &, base_node &) const
+ { return false; }
+ virtual scalar_type operator()(const base_node &P) const {
+ base_node v(P); v -= x0;
+ gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
+ return gmm::vect_norm2(v) - R;
+ }
+ virtual scalar_type operator()(const base_node &P,
+ dal::bit_vector &bv) const {
+ scalar_type d = (*this)(P);
+ bv[id] = (gmm::abs(d) < SEPS);
+ return d;
+ }
+ virtual void register_constraints(std::vector<const
+ mesher_signed_distance*>& list) const {
+ id = list.size(); list.push_back(this);
+ }
+ scalar_type grad(const base_node &P, base_small_vector &G) const {
+ G = P; G -= x0;
+ gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
+ scalar_type e = gmm::vect_norm2(G), d = e - R;
+ while (e == scalar_type(0)) {
+ gmm::fill_random(G);
+ gmm::add(gmm::scaled(n, -gmm::vect_sp(G, n)), G);
+ e = gmm::vect_norm2(G);
+ }
+ G /= e;
+ return d;
+ }
+ void hess(const base_node &, base_matrix &) const {
+ GMM_ASSERT1(false, "Sorry, to be done");
+ }
+ };
+
class mesher_cylinder : public mesher_signed_distance {
base_node x0; base_small_vector n;
scalar_type L, R;
mesher_tube t;
mesher_half_space p1, p2;
- mesher_intersection i1, i2;
+ mesher_intersection i1;
public:
mesher_cylinder(const base_node &c, const base_small_vector &no,
scalar_type L_, scalar_type R_)
: x0(c), n(no/gmm::vect_norm2(no)), L(L_), R(R_), t(x0, n, R),
- p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2), i2(i1, t) {}
+ p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2, t) {}
bool bounding_box(base_node &bmin, base_node &bmax) const {
base_node x1(x0+n*L);
- bmin = bmax = base_node(3);
- for (unsigned i = 0; i < 3; ++i) {
+ bmin = bmax = x0;
+ for (unsigned i = 0; i < gmm::vect_size(x0); ++i) {
bmin[i] = std::min(x0[i], x1[i]) - R;
bmax[i] = std::max(x0[i], x1[i]) + R;
}
return true;
}
- virtual scalar_type operator()(const base_node &P) const { return i2(P); }
+ virtual scalar_type operator()(const base_node &P) const { return i1(P); }
virtual scalar_type operator()(const base_node &P,
dal::bit_vector& bv) const
- { return i2(P, bv); }
+ { return i1(P, bv); }
scalar_type grad(const base_node &P, base_small_vector &G) const
- { return i2.grad(P, G); }
+ { return i1.grad(P, G); }
void hess(const base_node &, base_matrix &) const {
GMM_ASSERT1(false, "Sorry, to be done");
}
virtual void register_constraints(std::vector<const
mesher_signed_distance*>& list) const
- { i2.register_constraints(list); }
+ { i1.register_constraints(list); }
};
- class mesher_ellipse : public mesher_signed_distance { // TODO
+
+ class mesher_infinite_cone : public mesher_signed_distance {
+ // uses the true distance to a cone.
+ base_node x0; base_node n; scalar_type alpha;
+ public:
+ mesher_infinite_cone(base_node x0_, base_node n_, scalar_type alpha_)
+ : x0(x0_), n(n_), alpha(alpha_)
+ { n /= gmm::vect_norm2(n); }
+ bool bounding_box(base_node &, base_node &) const
+ { return false; }
+ virtual scalar_type operator()(const base_node &P) const {
+ base_node v(P); v -= x0;
+ scalar_type v_n = gmm::vect_sp(v, n);
+ gmm::add(gmm::scaled(n, -v_n), v);
+ return gmm::vect_norm2(v) * cos(alpha) - gmm::abs(v_n) * sin(alpha);
+ }
+ virtual scalar_type operator()(const base_node &P,
+ dal::bit_vector &bv) const {
+ scalar_type d = (*this)(P);
+ bv[id] = (gmm::abs(d) < SEPS);
+ return d;
+ }
+ virtual void register_constraints(std::vector<const
+ mesher_signed_distance*>& list) const {
+ id = list.size(); list.push_back(this);
+ }
+ scalar_type grad(const base_node &P, base_small_vector &v) const {
+ v = P; v -= x0;
+ scalar_type v_n = gmm::vect_sp(v, n);
+ gmm::add(gmm::scaled(n, -v_n), v);
+ scalar_type no = gmm::vect_norm2(v);
+ scalar_type d = no * cos(alpha) - gmm::abs(v_n) * sin(alpha);
+ while (no == scalar_type(0)) {
+ gmm::fill_random(v);
+ gmm::add(gmm::scaled(n, -gmm::vect_sp(v, n)), v);
+ no = gmm::vect_norm2(v);
+ }
+ v *= cos(alpha) / no;
+ v -= (sin(alpha) * gmm::sgn(v_n)) * n;
+ return d;
+ }
+ void hess(const base_node &, base_matrix &) const {
+ GMM_ASSERT1(false, "Sorry, to be done");
+ }
+ };
+
+ class mesher_cone : public mesher_signed_distance {
+ base_node x0; base_small_vector n;
+ scalar_type L, alpha;
+ mesher_infinite_cone t;
+ mesher_half_space p1, p2;
+ mesher_intersection i1;
+ public:
+ mesher_cone(const base_node &c, const base_small_vector &no,
+ scalar_type L_, scalar_type alpha_)
+ : x0(c), n(no/gmm::vect_norm2(no)), L(L_), alpha(alpha_),
+ t(x0, n, alpha), p1(x0, n), p2(x0+n*L, -1.0 * n), i1(p1, p2, t) {}
+ bool bounding_box(base_node &bmin, base_node &bmax) const {
+ base_node x1(x0+n*L);
+ scalar_type R = L * sin(alpha);
+ bmin = bmax = x0;
+ for (unsigned i = 0; i < gmm::vect_size(x0); ++i) {
+ bmin[i] = std::min(x0[i], x1[i]) - R;
+ bmax[i] = std::max(x0[i], x1[i]) + R;
+ }
+ return true;
+ }
+ virtual scalar_type operator()(const base_node &P) const { return i1(P); }
+ virtual scalar_type operator()(const base_node &P,
+ dal::bit_vector& bv) const
+ { return i1(P, bv); }
+ scalar_type grad(const base_node &P, base_small_vector &G) const
+ { return i1.grad(P, G); }
+ void hess(const base_node &, base_matrix &) const {
+ GMM_ASSERT1(false, "Sorry, to be done");
+ }
+ virtual void register_constraints(std::vector<const
+ mesher_signed_distance*>& list) const
+ { i1.register_constraints(list); }
+ };
+
+ class mesher_ellipse : public mesher_signed_distance {
base_node x0; base_small_vector n, t;
scalar_type r, R, a;
public:
@@ -798,7 +886,7 @@ namespace getfem {
return d;
}
scalar_type grad(const base_node &, base_small_vector &) const
- { assert(0); }
+ { GMM_ASSERT1(false, "Sorry, to be done"); return 0.; }
void hess(const base_node &, base_matrix &) const {
GMM_ASSERT1(false, "Sorry, to be done");
}
@@ -867,7 +955,7 @@ namespace getfem {
// mesher
void build_mesh(mesh &m, const mesher_signed_distance& dist_,
scalar_type h0, const std::vector<base_node> &fixed_points
- = std::vector<base_node>(), size_type K = 1, int noise = 1,
+ = std::vector<base_node>(), size_type K = 1, int noise = -1,
size_type iter_max = 500, int prefind = 1,
scalar_type dist_point_hull = 4,
scalar_type boundary_threshold_flatness = 0.11);
diff --git a/src/getfem/getfem_model_solvers.h b/src/getfem/getfem_model_solvers.h
index 575a358..d8d7607 100644
--- a/src/getfem/getfem_model_solvers.h
+++ b/src/getfem/getfem_model_solvers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**
@file getfem_model_solvers.h
@@ -40,7 +41,6 @@
#define GETFEM_MODEL_SOLVERS_H__
#include "getfem_models.h"
#include "gmm/gmm_MUMPS_interface.h"
-#include "gmm/gmm_solver_Newton.h"
#include "gmm/gmm_iter.h"
#include "gmm/gmm_iter_solvers.h"
#include "gmm/gmm_dense_qr.h"
@@ -76,100 +76,104 @@ namespace getfem {
/* Linear solvers definition */
/* ***************************************************************** */
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct abstract_linear_solver {
virtual void operator ()(const MAT &, VECT &, const VECT &,
- gmm::iteration &) const = 0;
+ gmm::iteration &) const = 0;
virtual ~abstract_linear_solver() {}
};
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_cg_preconditioned_ildlt
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
gmm::ildlt_precond<MAT> P(M);
gmm::cg(M, x, b, P, iter);
if (!iter.converged()) GMM_WARNING2("cg did not converge!");
}
};
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_gmres_preconditioned_ilu
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
gmm::ilu_precond<MAT> P(M);
gmm::gmres(M, x, b, P, 500, iter);
if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
}
};
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_gmres_unpreconditioned
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
gmm::identity_matrix P;
gmm::gmres(M, x, b, P, 500, iter);
if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
}
};
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_gmres_preconditioned_ilut
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
gmm::ilut_precond<MAT> P(M, 40, 1E-7);
gmm::gmres(M, x, b, P, 500, iter);
if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
}
};
-
- template <typename MAT, typename VECT>
+
+ template <typename MAT, typename VECT>
struct linear_solver_gmres_preconditioned_ilutp
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
gmm::ilutp_precond<MAT> P(M, 20, 1E-7);
gmm::gmres(M, x, b, P, 500, iter);
if (!iter.converged()) GMM_WARNING2("gmres did not converge!");
}
};
-
- template <typename MAT, typename VECT>
+
+ template <typename MAT, typename VECT>
struct linear_solver_superlu
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
double rcond;
/*gmm::HarwellBoeing_IO::write("test.hb", M);
- std::fstream f("bbb", std::ios::out);
+ std::fstream f("bbb", std::ios::out);
for (unsigned i=0; i < gmm::vect_size(b); ++i) f << b[i] << "\n";*/
- SuperLU_solve(M, x, b, rcond);
+ int info = SuperLU_solve(M, x, b, rcond);
+ iter.enforce_converged(info == 0);
if (iter.get_noisy()) cout << "condition number: " << 1.0/rcond<< endl;
}
};
#ifdef GMM_USES_MUMPS
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_mumps : public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &) const
- { gmm::MUMPS_solve(M, x, b); }
+ gmm::iteration &iter) const {
+ bool ok = gmm::MUMPS_solve(M, x, b);
+ iter.enforce_converged(ok);
+ }
};
#endif
#if GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
- template <typename MAT, typename VECT>
+ template <typename MAT, typename VECT>
struct linear_solver_distributed_mumps
: public abstract_linear_solver<MAT, VECT> {
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &) const {
+ gmm::iteration &iter) const {
double tt_ref=MPI_Wtime();
- MUMPS_distributed_matrix_solve(M, x, b);
+ bool ok = MUMPS_distributed_matrix_solve(M, x, b);
+ iter.enforce_converged(ok);
cout<<"temps MUMPS "<< MPI_Wtime() - tt_ref<<endl;
}
};
@@ -177,14 +181,170 @@ namespace getfem {
/* ***************************************************************** */
+ /* Newton Line search definition */
+ /* ***************************************************************** */
+
+ struct abstract_newton_line_search {
+ double conv_alpha, conv_r;
+ size_t it, itmax, glob_it;
+ // size_t tot_it;
+ virtual void init_search(double r, size_t git, double R0 = 0.0) = 0;
+ virtual double next_try(void) = 0;
+ virtual bool is_converged(double, double R1 = 0.0) = 0;
+ virtual double converged_value(void) {
+ // tot_it += it; cout << "tot_it = " << tot_it << endl; it = 0;
+ return conv_alpha;
+ };
+ virtual double converged_residual(void) { return conv_r; };
+ virtual ~abstract_newton_line_search() { }
+ };
+
+
+ struct quadratic_newton_line_search : public abstract_newton_line_search {
+ double R0_, R1_;
+
+ double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
+ virtual void init_search(double r, size_t git, double R0 = 0.0) {
+ GMM_ASSERT1(R0 != 0.0, "You have to specify R0");
+ glob_it = git;
+ conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
+ R0_ = R0;
+ }
+ virtual double next_try(void) {
+ ++it;
+ if (it == 1) return double(1);
+ GMM_ASSERT1(R1_ != 0.0, "You have to specify R1");
+ double a = R0_ / R1_;
+ return (a < 0) ? (a*0.5 + sqrt(a*a*0.25-a)) : a*0.5;
+ }
+ virtual bool is_converged(double r, double R1 = 0.0) {
+ conv_r = r;
+ R1_ = R1; return ((gmm::abs(R1_) < gmm::abs(R0_*0.5)) || it >= itmax);
+ }
+ quadratic_newton_line_search(size_t imax = size_t(-1)) { itmax = imax; }
+ };
+
+
+ struct simplest_newton_line_search : public abstract_newton_line_search {
+ double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
+ virtual void init_search(double r, size_t git, double = 0.0) {
+ glob_it = git;
+ conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
+ }
+ virtual double next_try(void)
+ { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
+ virtual bool is_converged(double r, double = 0.0) {
+ conv_r = r;
+ return ((it <= 1 && r < first_res)
+ || (r <= first_res * alpha_max_ratio)
+ || (conv_alpha <= alpha_min)
+ || it >= itmax);
+ }
+ simplest_newton_line_search
+ (size_t imax = size_t(-1), double a_max_ratio = 6.0/5.0,
+ double a_min = 1.0/1000.0, double a_mult = 3.0/5.0)
+ : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio), alpha_min(a_min)
+ { itmax = imax; }
+ };
+
+ struct default_newton_line_search : public abstract_newton_line_search {
+ // This line search try to detect where is the minimum, dividing the step
+ // by a factor two each time.
+ // - it stops if the residual is less than the previous residual
+ // times alpha_min_ratio (= 0.9).
+ // - if the minimal step is reached with a residual greater than
+ // the previous residual times alpha_min_ratio then it decides
+ // between two options :
+ // - return with the step corresponding to the smallest residual
+ // - return with a greater residual corresponding to a residual
+ // less than the previous residual times alpha_max_ratio.
+ // the decision is taken regarding the previous iterations.
+ // - in order to shorten the line search, the process stops when
+ // the residual increases three times consecutively.
+ // possible improvment : detect the curvature at the origin
+ // (only one evaluation) and take it into account.
+ // Fitted to some experiments in contrib/tests_newton
+
+ double alpha, alpha_old, alpha_mult, first_res, alpha_max_ratio;
+ double alpha_min_ratio, alpha_min;
+ size_type count, count_pat;
+ bool max_ratio_reached;
+ double alpha_max_ratio_reached, r_max_ratio_reached;
+ size_type it_max_ratio_reached;
+
+ virtual void init_search(double r, size_t git, double = 0.0);
+ virtual double next_try(void);
+ virtual bool is_converged(double r, double = 0.0);
+ default_newton_line_search(void) { count_pat = 0; }
+ };
+
+ /* the former default_newton_line_search */
+ struct basic_newton_line_search : public abstract_newton_line_search {
+ double alpha, alpha_mult, first_res, alpha_max_ratio;
+ double alpha_min, prev_res, alpha_max_augment;
+ virtual void init_search(double r, size_t git, double = 0.0) {
+ glob_it = git;
+ conv_alpha = alpha = double(1);
+ prev_res = conv_r = first_res = r; it = 0;
+ }
+ virtual double next_try(void)
+ { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
+ virtual bool is_converged(double r, double = 0.0) {
+ if (glob_it == 0 || (r < first_res / double(2))
+ || (conv_alpha <= alpha_min && r < first_res * alpha_max_augment)
+ || it >= itmax)
+ { conv_r = r; return true; }
+ if (it > 1 && r > prev_res && prev_res < alpha_max_ratio * first_res)
+ return true;
+ prev_res = conv_r = r;
+ return false;
+ }
+ basic_newton_line_search
+ (size_t imax = size_t(-1),
+ double a_max_ratio = 5.0/3.0,
+ double a_min = 1.0/1000.0, double a_mult = 3.0/5.0, double a_augm = 2.0)
+ : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio),
+ alpha_min(a_min), alpha_max_augment(a_augm) { itmax = imax; }
+ };
+
+
+ struct systematic_newton_line_search : public abstract_newton_line_search {
+ double alpha, alpha_mult, first_res;
+ double alpha_min, prev_res;
+ bool first;
+ virtual void init_search(double r, size_t git, double = 0.0) {
+ glob_it = git;
+ conv_alpha = alpha = double(1);
+ prev_res = conv_r = first_res = r; it = 0; first = true;
+ }
+ virtual double next_try(void)
+ { double a = alpha; alpha *= alpha_mult; ++it; return a; }
+ virtual bool is_converged(double r, double = 0.0) {
+ // cout << "a = " << alpha / alpha_mult << " r = " << r << endl;
+ if (r < conv_r || first)
+ { conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
+ if ((alpha <= alpha_min*alpha_mult) || it >= itmax) return true;
+ return false;
+ }
+ systematic_newton_line_search
+ (size_t imax = size_t(-1),
+ double a_min = 1.0/10000.0, double a_mult = 3.0/5.0)
+ : alpha_mult(a_mult), alpha_min(a_min) { itmax = imax; }
+ };
+
+
+
+
+
+ /* ***************************************************************** */
/* Newton algorithm. */
/* ***************************************************************** */
- template <typename PB>
+ template <typename PB>
void classical_Newton(PB &pb, gmm::iteration &iter,
- const abstract_linear_solver<typename PB::MATRIX,
- typename PB::VECTOR> &linear_solver) {
- // TODO : take iter into account for the Newton. compute a consistent
+ const abstract_linear_solver<typename PB::MATRIX,
+ typename PB::VECTOR> &linear_solver) {
+ // TODO : take iter into account for the Newton. compute a consistent
// max residu.
typedef typename gmm::linalg_traits<typename PB::VECTOR>::value_type T;
typedef typename gmm::number_traits<T>::magnitude_type R;
@@ -201,15 +361,37 @@ namespace getfem {
while (!iter.finished(pb.residual_norm())) {
gmm::iteration iter_linsolv = iter_linsolv0;
if (iter.get_noisy() > 1)
- cout << "starting computing tangent matrix" << endl;
- pb.compute_tangent_matrix();
- gmm::clear(dr);
- gmm::copy(gmm::scaled(pb.residual(), pb.scale_residual()), b);
- if (iter.get_noisy() > 1) cout << "starting linear solver" << endl;
- linear_solver(pb.tangent_matrix(), dr, b, iter_linsolv);
- if (iter.get_noisy() > 1) cout << "linear solver done" << endl;
- R alpha = pb.line_search(dr, iter); // it is assumed that the line
- // search execute a pb.compute_residual();
+ cout << "starting computing tangent matrix" << endl;
+
+ int is_singular = 1;
+ while (is_singular) {
+ pb.compute_tangent_matrix();
+ gmm::clear(dr);
+ gmm::copy(gmm::scaled(pb.residual(), pb.scale_residual()), b);
+ if (iter.get_noisy() > 1) cout << "starting linear solver" << endl;
+ iter_linsolv.init();
+ linear_solver(pb.tangent_matrix(), dr, b, iter_linsolv);
+ if (!iter_linsolv.converged()) {
+ is_singular++;
+ if (is_singular <= 4) {
+ if (iter.get_noisy())
+ cout << "Singular tangent matrix:"
+ " perturbation of the state vector." << endl;
+ pb.perturbation();
+ pb.compute_residual();
+ } else {
+ if (iter.get_noisy())
+ cout << "Singular tangent matrix: perturbation failed, aborting."
+ << endl;
+ return;
+ }
+ }
+ else is_singular = 0;
+ }
+
+ if (iter.get_noisy() > 1) cout << "linear solver done" << endl;
+ R alpha = pb.line_search(dr, iter); //it is assumed that the linesearch
+ //executes a pb.compute_residual();
if (iter.get_noisy()) cout << "alpha = " << alpha << " ";
++iter;
}
@@ -217,14 +399,14 @@ namespace getfem {
//---------------------------------------------------------------------
- // Default linear solver.
+ // Default linear solver.
//---------------------------------------------------------------------
typedef abstract_linear_solver<model_real_sparse_matrix,
- model_real_plain_vector> rmodel_linear_solver;
+ model_real_plain_vector> rmodel_linear_solver;
typedef std::auto_ptr<rmodel_linear_solver> rmodel_plsolver_type;
typedef abstract_linear_solver<model_complex_sparse_matrix,
- model_complex_plain_vector>
+ model_complex_plain_vector>
cmodel_linear_solver;
typedef std::auto_ptr<cmodel_linear_solver> cmodel_plsolver_type;
@@ -233,7 +415,7 @@ namespace getfem {
std::auto_ptr<abstract_linear_solver<MATRIX, VECTOR> >
default_linear_solver(const model &md) {
std::auto_ptr<abstract_linear_solver<MATRIX, VECTOR> > p;
-
+
#if GETFEM_PARA_LEVEL == 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
p.reset(new linear_solver_mumps<MATRIX, VECTOR>);
#elif GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
@@ -241,7 +423,7 @@ namespace getfem {
#else
size_type ndof = md.nb_dof(), max3d = 15000, dim = md.leading_dimension();
# ifdef GMM_USES_MUMPS
- max3d = 100000;
+ max3d = 250000;
# endif
if ((ndof<300000 && dim<=2) || (ndof<max3d && dim<=3) || (ndof<1000)) {
# ifdef GMM_USES_MUMPS
@@ -251,15 +433,15 @@ namespace getfem {
# endif
}
else {
- if (md.is_coercive())
- p.reset(new linear_solver_cg_preconditioned_ildlt<MATRIX, VECTOR>);
+ if (md.is_coercive())
+ p.reset(new linear_solver_cg_preconditioned_ildlt<MATRIX, VECTOR>);
else {
- if (dim <= 2)
- p.reset(new
- linear_solver_gmres_preconditioned_ilut<MATRIX,VECTOR>);
- else
- p.reset(new
- linear_solver_gmres_preconditioned_ilu<MATRIX,VECTOR>);
+ if (dim <= 2)
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilut<MATRIX,VECTOR>);
+ else
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilu<MATRIX,VECTOR>);
}
}
#endif
@@ -299,23 +481,23 @@ namespace getfem {
}
inline rmodel_plsolver_type rselect_linear_solver(const model &md,
- const std::string &name) {
+ const std::string &name) {
return select_linear_solver<model_real_sparse_matrix,
model_real_plain_vector>(md, name);
}
inline cmodel_plsolver_type cselect_linear_solver(const model &md,
- const std::string &name) {
+ const std::string &name) {
return select_linear_solver<model_complex_sparse_matrix,
model_complex_plain_vector>(md, name);
- }
+ }
//---------------------------------------------------------------------
- // Standard solve.
+ // Standard solve.
//---------------------------------------------------------------------
- /** A default solver for the model brick system.
+ /** A default solver for the model brick system.
Of course it could be not very well suited for a particular
problem, so it could be copied and adapted to change solvers,
add a special traitement on the problem, etc ... This is in
@@ -329,28 +511,34 @@ namespace getfem {
When MPI/METIS is enabled, a partition is done via METIS, and a parallel
solver can be used.
+ Note that it is possible to disable some variables
+ (see the md.disable_variable(varname) method) in order to
+ solve the problem only with respect to a subset of variables (the
+ disabled variables are the considered as data) for instance to
+ replace the global Newton strategy with a fixed point one.
+
@ingroup bricks
*/
void standard_solve(model &md, gmm::iteration &iter,
- rmodel_plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls,
- bool with_pseudo_potential = false);
+ rmodel_plsolver_type lsolver,
+ abstract_newton_line_search &ls,
+ bool with_pseudo_potential = false);
void standard_solve(model &md, gmm::iteration &iter,
- cmodel_plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls,
- bool with_pseudo_potential = false);
-
+ cmodel_plsolver_type lsolver,
+ abstract_newton_line_search &ls,
+ bool with_pseudo_potential = false);
+
void standard_solve(model &md, gmm::iteration &iter,
- rmodel_plsolver_type lsolver,
- bool with_pseudo_potential = false);
+ rmodel_plsolver_type lsolver,
+ bool with_pseudo_potential = false);
void standard_solve(model &md, gmm::iteration &iter,
- cmodel_plsolver_type lsolver,
- bool with_pseudo_potential = false);
+ cmodel_plsolver_type lsolver,
+ bool with_pseudo_potential = false);
void standard_solve(model &md, gmm::iteration &iter,
- bool with_pseudo_potential = false);
+ bool with_pseudo_potential = false);
}
@@ -361,9 +549,9 @@ namespace getfem {
//---------------------------------------------------------------------
-//
+//
// Solvers for the old brick system. Kept for compatibility reasons.
-//
+//
//---------------------------------------------------------------------
@@ -372,7 +560,7 @@ namespace getfem {
namespace getfem {
#if GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == SCHWARZADD_PARA_SOLVER
- template <typename MODEL_STATE, typename MAT, typename VECT>
+ template <typename MODEL_STATE, typename MAT, typename VECT>
struct linear_solver_para_schwarzadd
: public abstract_linear_solver<MAT, VECT> {
@@ -381,18 +569,18 @@ namespace getfem {
const mdbrick_abstract<MODEL_STATE> &problem;
int nblocsubdom; // Number of sub-domains per process
- linear_solver_para_schwarzadd(const mdbrick_abstract<MODEL_STATE> &problem_,
- int nblocsubdom_)
+ linear_solver_para_schwarzadd(const mdbrick_abstract<MODEL_STATE> &problem_,
+ int nblocsubdom_)
: problem(problem_), nblocsubdom(nblocsubdom_) {}
void operator ()(const MAT &M, VECT &x, const VECT &b,
- gmm::iteration &iter) const {
+ gmm::iteration &iter) const {
double tt_ref=MPI_Wtime();
// Meshes sub-partition.
std::set<const mesh *> mesh_set;
for (size_type i = 0; i < problem.nb_mesh_fems(); ++i)
- mesh_set.insert(&(problem.get_mesh_fem(i).linked_mesh()));
+ mesh_set.insert(&(problem.get_mesh_fem(i).linked_mesh()));
std::vector< std::vector<int> > eparts(mesh_set.size());
@@ -402,91 +590,91 @@ namespace getfem {
MPI_Comm_size(MPI_COMM_WORLD, &size);
for (std::set<const mesh *>::iterator it = mesh_set.begin();
- it != mesh_set.end(); ++it, ++nset) {
-
- int ne = int((*it)->get_mpi_region().nb_convex());
- std::vector<int> xadj(ne+1), adjncy, numelt((*it)->convex_index().last_true()+1), numeltinv(ne), npart(ne);
-
- int j = 0, k = 0;
- bgeot::mesh_structure::ind_set s;
- for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j)
- { numelt[ic.cv()] = j; numeltinv[j] = ic.cv(); }
-
- j = 0;
- for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j) {
- xadj[j] = k;
- (*it)->neighbours_of_convex(ic.cv(), s);
- for (bgeot::mesh_structure::ind_set::iterator iti = s.begin();
- iti != s.end(); ++iti)
- if ((*it)->get_mpi_region().is_in(*iti))
- { adjncy.push_back(numelt[*iti]); ++k; }
- }
- xadj[j] = k;
-
- int wgtflag = 0, edgecut, numflag = 0, options[5] = {0,0,0,0,0};
- int nbbl = nblocsubdom/size;
-
- // The mpi region is partitionned into nblocsubdom sub-domains.
- METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), 0, 0, &wgtflag,
- &numflag, &nbbl, options, &edgecut,
- &(npart[0]));
-
- eparts[nset].resize(0);
- eparts[nset].resize((*it)->convex_index().last()+1, size_type(-1));
-
- for (size_type i = 0; i < size_type(ne); ++i)
- eparts[nset][numeltinv[i]] = npart[i];
+ it != mesh_set.end(); ++it, ++nset) {
+
+ int ne = int((*it)->get_mpi_region().nb_convex());
+ std::vector<int> xadj(ne+1), adjncy, numelt((*it)->convex_index().last_true()+1), numeltinv(ne), npart(ne);
+
+ int j = 0, k = 0;
+ bgeot::mesh_structure::ind_set s;
+ for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j)
+ { numelt[ic.cv()] = j; numeltinv[j] = ic.cv(); }
+
+ j = 0;
+ for (mr_visitor ic((*it)->get_mpi_region()); !ic.finished();++ic,++j) {
+ xadj[j] = k;
+ (*it)->neighbours_of_convex(ic.cv(), s);
+ for (bgeot::mesh_structure::ind_set::iterator iti = s.begin();
+ iti != s.end(); ++iti)
+ if ((*it)->get_mpi_region().is_in(*iti))
+ { adjncy.push_back(numelt[*iti]); ++k; }
+ }
+ xadj[j] = k;
+
+ int wgtflag = 0, edgecut, numflag = 0, options[5] = {0,0,0,0,0};
+ int nbbl = nblocsubdom/size;
+
+ // The mpi region is partitionned into nblocsubdom sub-domains.
+ METIS_PartGraphKway(&ne, &(xadj[0]), &(adjncy[0]), 0, 0, &wgtflag,
+ &numflag, &nbbl, options, &edgecut,
+ &(npart[0]));
+
+ eparts[nset].resize(0);
+ eparts[nset].resize((*it)->convex_index().last()+1, size_type(-1));
+
+ for (size_type i = 0; i < size_type(ne); ++i)
+ eparts[nset][numeltinv[i]] = npart[i];
}
-
+
// To be completeted for non-finite element dofs
- // nblocsubdom is number of sub dom per proc
+ // nblocsubdom is number of sub dom per proc
// std::vector<dal::bit_vector> Bidof(nblocsubdom);
- // nblocsubdom is the global number of sub dom
+ // nblocsubdom is the global number of sub dom
std::vector<dal::bit_vector> Bidof(nblocsubdom/size);
size_type apos = 0;
for (size_type i = 0; i < problem.nb_mesh_fems(); ++i) {
- const mesh_fem &mf = problem.get_mesh_fem(i);
- nset = 0;
- for (std::set<const mesh *>::iterator it = mesh_set.begin();
- it != mesh_set.end(); ++it, ++nset)
- if (*it == &(mf.linked_mesh())) break;
- size_type pos = problem.get_mesh_fem_position(i);
- GMM_ASSERT1(pos == apos, "Multipliers are not taken into account");
- size_type length = mf.nb_dof();
- apos += length;
- for (dal::bv_visitor j(mf.convex_index()); !j.finished(); ++j) {
- size_type k = eparts[nset][j];
- if (k != size_type(-1))
- for (size_type l = 0; l < mf.nb_dof_of_element(j); ++l)
- Bidof[k].add(mf.ind_dof_of_element(j)[l] + pos);
- }
- GMM_ASSERT1(apos == ndof, "Multipliers are not taken into account");
+ const mesh_fem &mf = problem.get_mesh_fem(i);
+ nset = 0;
+ for (std::set<const mesh *>::iterator it = mesh_set.begin();
+ it != mesh_set.end(); ++it, ++nset)
+ if (*it == &(mf.linked_mesh())) break;
+ size_type pos = problem.get_mesh_fem_position(i);
+ GMM_ASSERT1(pos == apos, "Multipliers are not taken into account");
+ size_type length = mf.nb_dof();
+ apos += length;
+ for (dal::bv_visitor j(mf.convex_index()); !j.finished(); ++j) {
+ size_type k = eparts[nset][j];
+ if (k != size_type(-1))
+ for (size_type l = 0; l < mf.nb_dof_of_element(j); ++l)
+ Bidof[k].add(mf.ind_dof_of_element(j)[l] + pos);
+ }
+ GMM_ASSERT1(apos == ndof, "Multipliers are not taken into account");
}
- // nblocsubdom is number of sub dom per proc
-// std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom*size);
- // nblocsubdom is the global number of sub dom
- std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom);
- // nblocsubdom is number of sub dom per proc
+ // nblocsubdom is number of sub dom per proc
+// std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom*size);
+ // nblocsubdom is the global number of sub dom
+ std::vector< gmm::row_matrix< gmm::rsvector<value_type> > > Bi(nblocsubdom);
+ // nblocsubdom is number of sub dom per proc
// for (size_type i = 0; i < size_type(nblocsubdom); ++i) {
- // nblocsubdom is the global number of sub dom
+ // nblocsubdom is the global number of sub dom
for (size_type i = 0; i < size_type(nblocsubdom/size); ++i) {
- // nblocsubdom is number of sub dom per proc
-// gmm::resize(Bi[size*rank + i], ndof, Bidof[i].card());
- // nblocsubdom is the global number of sub dom
- gmm::resize(Bi[(nblocsubdom/size)*rank + i], ndof, Bidof[i].card());
- size_type k = 0;
- for (dal::bv_visitor j(Bidof[i]); !j.finished(); ++j, ++k)
- // nblocsubdom is number of sub dom per proc
-// Bi[size*rank + i](j, k) = value_type(1);
- // nblocsubdom is the global number of sub dom
- Bi[(nblocsubdom/size)*rank + i](j, k) = value_type(1);
+ // nblocsubdom is number of sub dom per proc
+// gmm::resize(Bi[size*rank + i], ndof, Bidof[i].card());
+ // nblocsubdom is the global number of sub dom
+ gmm::resize(Bi[(nblocsubdom/size)*rank + i], ndof, Bidof[i].card());
+ size_type k = 0;
+ for (dal::bv_visitor j(Bidof[i]); !j.finished(); ++j, ++k)
+ // nblocsubdom is number of sub dom per proc
+// Bi[size*rank + i](j, k) = value_type(1);
+ // nblocsubdom is the global number of sub dom
+ Bi[(nblocsubdom/size)*rank + i](j, k) = value_type(1);
}
gmm::mpi_distributed_matrix<MAT> mpiM(ndof, ndof);
gmm::copy(M, mpiM.local_matrix());
-
+
additive_schwarz(mpiM, x, b, gmm::identity_matrix(), Bi, iter,
- gmm::using_superlu(), gmm::using_cg());
+ gmm::using_superlu(), gmm::using_cg());
cout<<"temps SCHWARZ ADD "<< MPI_Wtime() - tt_ref<<endl;
}
@@ -494,21 +682,21 @@ namespace getfem {
#endif
template <typename MODEL_STATE> struct useful_types {
-
+
TYPEDEF_MODEL_STATE_TYPES;
typedef abstract_linear_solver<T_MATRIX, VECTOR> lsolver_type;
typedef std::auto_ptr<lsolver_type> plsolver_type;
};
- template <typename MODEL_STATE>
+ template <typename MODEL_STATE>
typename useful_types<MODEL_STATE>::plsolver_type
default_linear_solver(const mdbrick_abstract<MODEL_STATE> &problem) {
typedef typename MODEL_STATE::tangent_matrix_type T_MATRIX;
typedef typename MODEL_STATE::vector_type VECTOR;
typename useful_types<MODEL_STATE>::plsolver_type p;
-
+
#if GETFEM_PARA_LEVEL == 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
p.reset(new linear_solver_mumps<T_MATRIX, VECTOR>);
#elif GETFEM_PARA_LEVEL > 1 && GETFEM_PARA_SOLVER == MUMPS_PARA_SOLVER
@@ -531,23 +719,23 @@ namespace getfem {
# endif
}
else {
- if (problem.is_coercive())
- p.reset(new linear_solver_cg_preconditioned_ildlt<T_MATRIX, VECTOR>);
+ if (problem.is_coercive())
+ p.reset(new linear_solver_cg_preconditioned_ildlt<T_MATRIX, VECTOR>);
else if (problem.mixed_variables().card() == 0) {
- if (dim <= 2)
- p.reset(new
- linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
- else
- p.reset(new
- linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+ if (dim <= 2)
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+ else
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
}
else {
- if (dim <= 2)
- p.reset(new
- linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
- else
- p.reset(new
- linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+ if (dim <= 2)
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
+ else
+ p.reset(new
+ linear_solver_gmres_preconditioned_ilu<T_MATRIX,VECTOR>);
}
}
#endif
@@ -558,10 +746,10 @@ namespace getfem {
template <typename MODEL_STATE>
typename useful_types<MODEL_STATE>::plsolver_type
select_linear_solver(const mdbrick_abstract<MODEL_STATE> &problem,
- const std::string &name) {
+ const std::string &name) {
typedef typename MODEL_STATE::tangent_matrix_type T_MATRIX;
typedef typename MODEL_STATE::vector_type VECTOR;
-
+
typename useful_types<MODEL_STATE>::plsolver_type p;
if (bgeot::casecmp(name, "superlu") == 0)
@@ -596,7 +784,7 @@ namespace getfem {
/* Intermediary structure for Newton algorithms. */
/* ***************************************************************** */
- template <typename MODEL_STATE>
+ template <typename MODEL_STATE>
struct model_problem {
TYPEDEF_MODEL_STATE_TYPES;
@@ -606,22 +794,30 @@ namespace getfem {
MODEL_STATE &MS;
mdbrick_abstract<MODEL_STATE> &pb;
- gmm::abstract_newton_line_search &ls;
+ abstract_newton_line_search &ls;
VECTOR stateinit, d;
void compute_tangent_matrix(void) {
pb.compute_tangent_matrix(MS);
if (pb.nb_constraints() > 0) {
- pb.compute_residual(MS);
- MS.compute_reduced_system();
+ pb.compute_residual(MS);
+ MS.compute_reduced_system();
}
}
+ void perturbation(void) {
+ R res = gmm::vect_norm2(MS.state()), ampl = res / R(1000);
+ if (res == R(0)) ampl = 1E-30;
+ VECTOR V(gmm::vect_size(MS.state()));
+ gmm::fill_random(V);
+ gmm::add(gmm::scaled(V, ampl), MS.state());
+ }
+
inline T scale_residual(void) const { return T(-1); }
const T_MATRIX &tangent_matrix(void)
{ return MS.reduced_tangent_matrix(); }
-
+
void compute_residual(void) {
pb.compute_residual(MS);
if (pb.nb_constraints() > 0) MS.compute_reduced_residual();
@@ -636,27 +832,29 @@ namespace getfem {
gmm::resize(stateinit, pb.nb_dof());
gmm::copy(MS.state(), stateinit);
MS.unreduced_solution(dr, d);
- R alpha(1), res;
-
- ls.init_search(MS.reduced_residual_norm(), iter.get_iteration());
+ R alpha(1), res, R0;
+ R0 = gmm::real(gmm::vect_sp(dr, residual()));
+
+ ls.init_search(MS.reduced_residual_norm(), iter.get_iteration(), R0);
do {
- alpha = ls.next_try();
- gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
- compute_residual();
- res = MS.reduced_residual_norm();
+ alpha = ls.next_try();
+ gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
+ compute_residual();
+ res = MS.reduced_residual_norm();
+ R0 = gmm::real(gmm::vect_sp(dr, residual()));
} while (!ls.is_converged(res));
if (alpha != ls.converged_value()) {
- alpha = ls.converged_value();
- gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
- res = ls.converged_residual();
- compute_residual();
+ alpha = ls.converged_value();
+ gmm::add(stateinit, gmm::scaled(d, alpha), MS.state());
+ res = ls.converged_residual();
+ compute_residual();
}
return alpha;
}
model_problem(MODEL_STATE &MS_, mdbrick_abstract<MODEL_STATE> &pb_,
- gmm::abstract_newton_line_search &ls_)
+ abstract_newton_line_search &ls_)
: MS(MS_), pb(pb_), ls(ls_) {}
};
@@ -665,8 +863,8 @@ namespace getfem {
/* Standard solve. */
/* ***************************************************************** */
- /** A default solver for the old model brick system.
-
+ /** A default solver for the old model brick system.
+
Of course it could be not very well suited for a particular
problem, so it could be copied and adapted to change solvers,
add a special traitement on the problem, etc ... This is in
@@ -687,7 +885,7 @@ namespace getfem {
(MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
gmm::iteration &iter,
typename useful_types<MODEL_STATE>::plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls) {
+ abstract_newton_line_search &ls) {
TYPEDEF_MODEL_STATE_TYPES;
model_problem<MODEL_STATE> mdpb(MS, problem, ls);
@@ -712,17 +910,17 @@ namespace getfem {
template <typename MODEL_STATE> void
standard_solve(MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
- gmm::iteration &iter,
- typename useful_types<MODEL_STATE>::plsolver_type lsolver) {
- gmm::default_newton_line_search ls;
+ gmm::iteration &iter,
+ typename useful_types<MODEL_STATE>::plsolver_type lsolver) {
+ default_newton_line_search ls;
standard_solve(MS, problem, iter, lsolver, ls);
}
template <typename MODEL_STATE> void
standard_solve(MODEL_STATE &MS, mdbrick_abstract<MODEL_STATE> &problem,
- gmm::iteration &iter) {
- gmm::default_newton_line_search ls;
+ gmm::iteration &iter) {
+ getfem::default_newton_line_search ls;
standard_solve(MS, problem, iter, default_linear_solver(problem), ls);
}
diff --git a/src/getfem/getfem_modeling.h b/src/getfem/getfem_modeling.h
index 4014ced..83867b3 100644
--- a/src/getfem/getfem_modeling.h
+++ b/src/getfem/getfem_modeling.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**
@file getfem_modeling.h
@@ -863,7 +864,7 @@ namespace getfem {
const mesh_fem &mf_vm,
VECTVM &VM, bool tresca) {
getfem::interpolation_von_mises_or_tresca
- (this->mf_u,mf_vm,get_solution(MS),VM,
+ (this->mf_u,mf_vm,this->get_solution(MS),VM,
lambda().mf(),lambda().get(),mu().mf(),mu().get(),tresca);
}
};
diff --git a/src/getfem/getfem_models.h b/src/getfem/getfem_models.h
index 1660010..732baa8 100644
--- a/src/getfem/getfem_models.h
+++ b/src/getfem/getfem_models.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**
@file getfem_models.h
@@ -43,12 +44,12 @@
namespace getfem {
class virtual_brick;
- /** type of pointer on a brick */
+ /** type of pointer on a brick */
typedef boost::intrusive_ptr<const getfem::virtual_brick> pbrick;
class virtual_dispatcher;
typedef boost::intrusive_ptr<const getfem::virtual_dispatcher> pdispatcher;
-
+
// Event management : The model has to react when something has changed in
// the context and ask for corresponding (linear) bricks to recompute
// some terms.
@@ -83,9 +84,9 @@ namespace getfem {
// utiliser le même type que l'interface matlab/python pour représenter
// les vecteurs/matrices ?
- // Cela faciliterait les échanges et réduirait les composantes de la
+ // Cela faciliterait les échanges et réduirait les composantes de la
// classe model.
-
+
typedef gmm::col_matrix<model_real_sparse_vector> model_real_sparse_matrix;
typedef gmm::col_matrix<model_complex_sparse_vector>
model_complex_sparse_matrix;
@@ -115,15 +116,19 @@ namespace getfem {
enum var_description_filter {
VDESCRFILTER_NO, // Variable being directly the dofs of a given fem
VDESCRFILTER_REGION, /* Variable being the dofs of a fem on a mesh region
- * (uses mf.dof_on_region). */
- VDESCRFILTER_INFSUP /* Variable being the dofs of a fem on a mesh region
- * with an additional filter on a mass matrix with
+ * (uses mf.dof_on_region). */
+ VDESCRFILTER_INFSUP, /* Variable being the dofs of a fem on a mesh region
+ * with an additional filter on a mass matrix with
* respect to another fem. */
+ VDESCRFILTER_CTERM /* Variable being the dofs of a fem on a mesh region
+ * with an additional filter with the coupling
+ * termson with respect to another variable. */
};
struct var_description {
-
+
bool is_variable; // This is a variable or a parameter.
+ bool is_disabled; // For a variable, to be solved or not
bool is_complex; // The variable is complex numbers
bool is_fem_dofs; // The variable is the dofs of a fem
var_description_filter filter; // A filter on the dofs is applied or not.
@@ -133,8 +138,9 @@ namespace getfem {
size_type default_iter; // default iteration number.
// fem description of the variable
- const mesh_fem *mf; // Principal fem of the variable.
- size_type m_region; // Optional region for the filter
+ const mesh_fem *mf; // Principal fem of the variable.
+ size_type m_region; // Optional region for the filter
+ const mesh_im *mim; // Optional integration method for the filter
ppartial_mesh_fem partial_mf; // Filter with respect to mf.
std::string filter_var; // Optional variable name for the filter
@@ -143,25 +149,27 @@ namespace getfem {
gmm::uint64_type v_num, v_num_data;
gmm::sub_interval I; // For a variable : indices on the whole system
-
+
std::vector<model_real_plain_vector> real_value;
std::vector<model_complex_plain_vector> complex_value;
std::vector<gmm::uint64_type> v_num_var_iter;
std::vector<gmm::uint64_type> v_num_iter;
var_description(bool is_var = false, bool is_com = false,
- bool is_fem = false, size_type n_it = 1,
- var_description_filter fil = VDESCRFILTER_NO,
- const mesh_fem *mmf = 0,
- size_type m_reg = size_type(-1), dim_type Q = 1,
- const std::string &filter_v = std::string(""))
- : is_variable(is_var), is_complex(is_com), is_fem_dofs(is_fem),
- filter(fil), n_iter(std::max(size_type(1),n_it)), n_temp_iter(0),
- default_iter(0), mf(mmf), m_region(m_reg), filter_var(filter_v),
- qdim(Q), v_num(0), v_num_data(act_counter()) {
- if (filter != VDESCRFILTER_NO && mf != 0)
- partial_mf = new partial_mesh_fem(*mf);
- // v_num_data = v_num;
+ bool is_fem = false, size_type n_it = 1,
+ var_description_filter fil = VDESCRFILTER_NO,
+ const mesh_fem *mmf = 0,
+ size_type m_reg = size_type(-1), dim_type Q = 1,
+ const std::string &filter_v = std::string(""),
+ const mesh_im *mim_ = 0)
+ : is_variable(is_var), is_disabled(false), is_complex(is_com),
+ is_fem_dofs(is_fem), filter(fil),
+ n_iter(std::max(size_type(1),n_it)), n_temp_iter(0),
+ default_iter(0), mf(mmf), m_region(m_reg), mim(mim_),
+ filter_var(filter_v), qdim(Q), v_num(0), v_num_data(act_counter()) {
+ if (filter != VDESCRFILTER_NO && mf != 0)
+ partial_mf = new partial_mesh_fem(*mf);
+ // v_num_data = v_num;
}
// add a temporary version for time integration schemes. Automatically
@@ -172,14 +180,14 @@ namespace getfem {
void clear_temporaries(void);
const mesh_fem &associated_mf(void) const {
- GMM_ASSERT1(is_fem_dofs, "This variable is not linked to a fem");
- if (filter == VDESCRFILTER_NO) return *mf; else return *partial_mf;
+ GMM_ASSERT1(is_fem_dofs, "This variable is not linked to a fem");
+ if (filter == VDESCRFILTER_NO) return *mf; else return *partial_mf;
}
const mesh_fem *passociated_mf(void) const {
- if (!is_fem_dofs) return 0;
- if (filter == VDESCRFILTER_NO) return mf;
- else return partial_mf.get();
+ if (!is_fem_dofs) return 0;
+ if (filter == VDESCRFILTER_NO) return mf;
+ else return partial_mf.get();
}
size_type size(void) const // Should control that the variable is
@@ -204,21 +212,21 @@ namespace getfem {
bool is_symmetric; // Term have to be symmetrized.
std::string var1, var2;
term_description(const std::string &v)
- : is_matrix_term(false), is_symmetric(false), var1(v) {}
+ : is_matrix_term(false), is_symmetric(false), var1(v) {}
term_description(const std::string &v1, const std::string &v2,
- bool issym)
- : is_matrix_term(true), is_symmetric(issym), var1(v1), var2(v2) {}
+ bool issym)
+ : is_matrix_term(true), is_symmetric(issym), var1(v1), var2(v2) {}
};
typedef std::vector<term_description> termlist;
enum build_version { BUILD_RHS = 1,
- BUILD_MATRIX = 2,
- BUILD_ALL = 3,
- BUILD_ON_DATA_CHANGE = 4,
+ BUILD_MATRIX = 2,
+ BUILD_ALL = 3,
+ BUILD_ON_DATA_CHANGE = 4,
BUILD_WITH_COMPLETE_RHS = 8,
BUILD_COMPLETE_RHS = 9,
- BUILD_PSEUDO_POTENTIAL = 16
+ BUILD_PSEUDO_POTENTIAL = 16
};
private :
@@ -240,7 +248,7 @@ namespace getfem {
mutable scalar_type matrix_coeff;
mutable real_matlist rmatlist; // Matrices the brick have to fill in
// (real version).
- mutable std::vector<real_veclist> rveclist; // Rhs the brick have to
+ mutable std::vector<real_veclist> rveclist; // Rhs the brick have to
// fill in (real version).
mutable std::vector<real_veclist> rveclist_sym; // additional rhs for
// symmetric terms (real version).
@@ -250,16 +258,16 @@ namespace getfem {
// fill in (complex version).
mutable std::vector<complex_veclist> cveclist_sym; // additional rhs
// for symmetric terms (real version).
-
+
brick_description(pbrick p, const varnamelist &vl,
- const varnamelist &dl, const termlist &tl,
- const mimlist &mms, size_type reg)
- : terms_to_be_computed(true), v_num(0), pbr(p), pdispatch(0), nbrhs(1),
- vlist(vl), dlist(dl), tlist(tl), mims(mms), region(reg),
- rveclist(1), rveclist_sym(1), cveclist(1),
- cveclist_sym(1) { }
+ const varnamelist &dl, const termlist &tl,
+ const mimlist &mms, size_type reg)
+ : terms_to_be_computed(true), v_num(0), pbr(p), pdispatch(0), nbrhs(1),
+ vlist(vl), dlist(dl), tlist(tl), mims(mms), region(reg),
+ rveclist(1), rveclist_sym(1), cveclist(1),
+ cveclist_sym(1) { }
};
-
+
typedef std::map<std::string, var_description> VAR_SET;
mutable VAR_SET variables;
std::vector<brick_description> bricks;
@@ -267,42 +275,57 @@ namespace getfem {
void actualize_sizes(void) const;
bool check_name_valitity(const std::string &name,
- bool assert = true) const;
+ bool assert = true) const;
void brick_init(size_type ib, build_version version,
- size_type rhs_ind = 0) const;
+ size_type rhs_ind = 0) const;
void init(void) { complex_version = false; act_size_to_be_done = false; }
public :
- // call the brick if necessary
+ // call the brick if necessary
void update_brick(size_type ib, build_version version) const;
void linear_brick_add_to_rhs(size_type ib, size_type ind_data,
- size_type n_iter) const;
+ size_type n_iter) const;
+ bool build_reduced_index(std::vector<size_type> &ind);
void brick_call(size_type ib, build_version version,
- size_type rhs_ind = 0) const;
+ size_type rhs_ind = 0) const;
model_real_plain_vector &rhs_coeffs_of_brick(size_type ib) const
{ return bricks[ib].coeffs; }
scalar_type &matrix_coeff_of_brick(size_type ib) const
{ return bricks[ib].matrix_coeff; }
bool is_var_newer_than_brick(const std::string &varname,
- size_type ib) const;
+ size_type ib) const;
bool is_var_mf_newer_than_brick(const std::string &varname,
- size_type ib) const;
- pbrick get_brick(size_type ib) const { return bricks[ib].pbr; }
-
+ size_type ib) const;
+ pbrick get_brick(size_type ib) const IS_DEPRECATED {
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ return bricks[ib].pbr;
+ }
+ pbrick brick_pointer(size_type ind_brick) const {
+ GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
+ return bricks[ind_brick].pbr;
+ }
+
+
void add_temporaries(const varnamelist &vl, gmm::uint64_type id_num) const;
+ const mimlist &mimlist_of_brick(size_type ib) const
+ { return bricks[ib].mims; }
+
const varnamelist &varnamelist_of_brick(size_type ib) const
{ return bricks[ib].vlist; }
-
+
const varnamelist &datanamelist_of_brick(size_type ib) const
{ return bricks[ib].dlist; }
-
+
+ size_type region_of_brick(size_type ib) const
+ { return bricks[ib].region; }
+
bool temporary_uptodate(const std::string &varname,
- gmm::uint64_type id_num, size_type &ind) const;
+ gmm::uint64_type id_num, size_type &ind) const;
void set_default_iter_of_variable(const std::string &varname,
- size_type ind) const;
+ size_type ind) const;
void reset_default_iter_of_variables(const varnamelist &vl) const;
void update_from_context(void) const { act_size_to_be_done = true; }
@@ -315,34 +338,44 @@ namespace getfem {
/** Disable a brick. */
void disable_brick(size_type ib) {
- GMM_ASSERT1(ib < bricks.size(), "Unexistent brick");
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
active_bricks.sup(ib);
}
- /** Disable a brick. */
- void unable_brick(size_type ib) {
- GMM_ASSERT1(ib < bricks.size(), "Unexistent brick");
+ /** Enable a brick. */
+ void enable_brick(size_type ib) {
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
active_bricks.add(ib);
}
-
+
+ /** Disable a variable. */
+ void disable_variable(const std::string &name) {
+ variables[name].is_disabled = true;
+ }
+
+ /** Enable a variable. */
+ void enable_variable(const std::string &name) {
+ variables[name].is_disabled = false;
+ }
+
/** Boolean which says if the model deals with real or complex unknowns
- and data. */
+ and data. */
bool is_complex(void) const { return complex_version; }
/** Return true if all the model terms do not affect the coercivity of
- the whole tangent system. */
+ the whole tangent system. */
bool is_coercive(void) const { return is_coercive_; }
- /** Return true if all the model terms are linear. */
+ /** Return true if all the model terms are linear. */
bool is_linear(void) const { return is_linear_; }
/** Total number of degrees of freedom in the model. */
size_type nb_dof(void) const {
context_check(); if (act_size_to_be_done) actualize_sizes();
if (complex_version)
- return gmm::vect_size(crhs);
+ return gmm::vect_size(crhs);
else
- return gmm::vect_size(rrhs);
+ return gmm::vect_size(rrhs);
}
/** Leading dimension of the meshes used in the model. */
@@ -356,45 +389,45 @@ namespace getfem {
{ return variables[name].I; }
/** Gives the access to the vector value of a variable. For the real
- version. */
+ version. */
const model_real_plain_vector &
real_variable(const std::string &name,
- size_type niter = size_type(-1)) const;
+ size_type niter = size_type(-1)) const;
/** Gives the access to the vector value of a variable. For the complex
- version. */
+ version. */
const model_complex_plain_vector &
complex_variable(const std::string &name,
- size_type niter = size_type(-1)) const;
+ size_type niter = size_type(-1)) const;
/** Gives the write access to the vector value of a variable. Make a
- change flag of the variable set. For the real version. */
+ change flag of the variable set. For the real version. */
model_real_plain_vector &
set_real_variable(const std::string &name,
- size_type niter = size_type(-1)) const;
+ size_type niter = size_type(-1)) const;
/** Gives the write access to the vector value of a variable. Make a
- change flag of the variable set. For the complex version. */
+ change flag of the variable set. For the complex version. */
model_complex_plain_vector &
set_complex_variable(const std::string &name,
- size_type niter = size_type(-1)) const;
+ size_type niter = size_type(-1)) const;
template<typename VECTOR, typename T>
void from_variables(VECTOR &V, T) const {
for (VAR_SET::iterator it = variables.begin();
- it != variables.end(); ++it)
- if (it->second.is_variable)
- gmm::copy(it->second.real_value[0],
- gmm::sub_vector(V, it->second.I));
+ it != variables.end(); ++it)
+ if (it->second.is_variable)
+ gmm::copy(it->second.real_value[0],
+ gmm::sub_vector(V, it->second.I));
}
template<typename VECTOR, typename T>
void from_variables(VECTOR &V, std::complex<T>) const {
for (VAR_SET::iterator it = variables.begin();
- it != variables.end(); ++it)
- if (it->second.is_variable)
- gmm::copy(it->second.complex_value[0],
- gmm::sub_vector(V, it->second.I));
+ it != variables.end(); ++it)
+ if (it->second.is_variable)
+ gmm::copy(it->second.complex_value[0],
+ gmm::sub_vector(V, it->second.I));
}
template<typename VECTOR> void from_variables(VECTOR &V) const {
@@ -407,23 +440,23 @@ namespace getfem {
template<typename VECTOR, typename T>
void to_variables(VECTOR &V, T) {
for (VAR_SET::iterator it = variables.begin();
- it != variables.end(); ++it)
- if (it->second.is_variable) {
- gmm::copy(gmm::sub_vector(V, it->second.I),
- it->second.real_value[0]);
- it->second.v_num_data = act_counter();
- }
+ it != variables.end(); ++it)
+ if (it->second.is_variable) {
+ gmm::copy(gmm::sub_vector(V, it->second.I),
+ it->second.real_value[0]);
+ it->second.v_num_data = act_counter();
+ }
}
template<typename VECTOR, typename T>
void to_variables(VECTOR &V, std::complex<T>) {
for (VAR_SET::iterator it = variables.begin();
- it != variables.end(); ++it)
- if (it->second.is_variable) {
- gmm::copy(gmm::sub_vector(V, it->second.I),
- it->second.complex_value[0]);
- it->second.v_num_data = act_counter();
- }
+ it != variables.end(); ++it)
+ if (it->second.is_variable) {
+ gmm::copy(gmm::sub_vector(V, it->second.I),
+ it->second.complex_value[0]);
+ it->second.v_num_data = act_counter();
+ }
}
template<typename VECTOR> void to_variables(VECTOR &V) {
@@ -433,14 +466,14 @@ namespace getfem {
}
/** Add a fixed size variable to the model. niter is the number of version
- of the variable stored, for time integration schemes. */
+ of the variable stored, for time integration schemes. */
void add_fixed_size_variable(const std::string &name, size_type size,
- size_type niter = 1);
+ size_type niter = 1);
/** Add a fixed size data to the model. niter is the number of version
- of the data stored, for time integration schemes. */
+ of the data stored, for time integration schemes. */
void add_fixed_size_data(const std::string &name, size_type size,
- size_type niter = 1);
+ size_type niter = 1);
/** Resize a fixed size variable (or data) of the model. */
void resize_fixed_size_variable(const std::string &name, size_type size);
@@ -449,12 +482,12 @@ namespace getfem {
/** Add a fixed size data to the model initialized with V. */
template <typename VECT>
void add_initialized_fixed_size_data(const std::string &name,
- const VECT &v) {
+ const VECT &v) {
this->add_fixed_size_data(name, gmm::vect_size(v), 1);
if (this->is_complex()) // to be templated .. see later
- gmm::copy(v, this->set_complex_variable(name));
+ gmm::copy(v, this->set_complex_variable(name));
else
- gmm::copy(gmm::real_part(v), this->set_real_variable(name));
+ gmm::copy(gmm::real_part(v), this->set_real_variable(name));
}
/** Add a scalar data (i.e. of size 1) to the model initialized with e. */
@@ -462,48 +495,65 @@ namespace getfem {
void add_initialized_scalar_data(const std::string &name, T e) {
this->add_fixed_size_data(name, 1, 1);
if (this->is_complex()) // to be templated .. see later
- this->set_complex_variable(name)[0] = e;
+ this->set_complex_variable(name)[0] = e;
else
- this->set_real_variable(name)[0] = gmm::real(e);
+ this->set_real_variable(name)[0] = gmm::real(e);
}
/** Add a variable being the dofs of a finite element method to the model.
- niter is the number of version of the variable stored, for time
- integration schemes. */
+ niter is the number of version of the variable stored, for time
+ integration schemes. */
void add_fem_variable(const std::string &name, const mesh_fem &mf,
- size_type niter = 1);
+ size_type niter = 1);
+
+ /** Add a variable linked to a fem with the dof filtered with respect
+ to a mesh region. Only the dof returned by the dof_on_region
+ method of `mf` will be kept. niter is the number of version
+ of the data stored, for time integration schemes. */
+ void add_filtered_fem_variable(const std::string &name, const mesh_fem &mf,
+ size_type region, size_type niter = 1);
/** Add a data being the dofs of a finite element method to the model.
- The data is initialized with V. */
+ The data is initialized with V. */
void add_fem_data(const std::string &name, const mesh_fem &mf,
- dim_type qdim = 1, size_type niter = 1);
+ dim_type qdim = 1, size_type niter = 1);
/** Add a fixed size data to the model. niter is the number of version
- of the data stored, for time integration schemes. */
+ of the data stored, for time integration schemes. */
template <typename VECT>
void add_initialized_fem_data(const std::string &name, const mesh_fem &mf,
- const VECT &v) {
+ const VECT &v) {
this->add_fem_data(name, mf,
- dim_type(gmm::vect_size(v) / mf.nb_dof()), 1);
+ dim_type(gmm::vect_size(v) / mf.nb_dof()), 1);
if (this->is_complex()) // to be templated .. see later
- gmm::copy(v, this->set_complex_variable(name));
+ gmm::copy(v, this->set_complex_variable(name));
else
- gmm::copy(gmm::real_part(v), this->set_real_variable(name));
+ gmm::copy(gmm::real_part(v), this->set_real_variable(name));
}
-
+
/** Add a particular variable linked to a fem being a multiplier with
- respect to a primal variable. The dof will be filtered with the
- gmm::range_basis function applied on the terms of the model which
- link the multiplier and the primal variable. Optimized for boundary
- multipliers. niter is the number of version of the data stored,
- for time integration schemes. */
+ respect to a primal variable. The dof will be filtered with the
+ gmm::range_basis function applied on the terms of the model which
+ link the multiplier and the primal variable. Optimized for boundary
+ multipliers. niter is the number of version of the data stored,
+ for time integration schemes. */
void add_multiplier(const std::string &name, const mesh_fem &mf,
- const std::string &primal_name,
- size_type niter = 1);
-
+ const std::string &primal_name,
+ size_type niter = 1);
+
+ /** Add a particular variable linked to a fem being a multiplier with
+ respect to a primal variable. The dof will be filtered with the
+ gmm::range_basis function applied on the mass matrix between the fem
+ of the multiplier and the one of the primal variable.
+ Optimized for boundary multipliers. niter is the number of version
+ of the data stored, for time integration schemes. */
+ void add_multiplier(const std::string &name, const mesh_fem &mf,
+ const std::string &primal_name, const mesh_im &mim,
+ size_type region, size_type niter = 1);
+
/** Gives the access to the mesh_fem of a variable if any. Throw an
- exception otherwise. */
+ exception otherwise. */
const mesh_fem &mesh_fem_of_variable(const std::string &name) const;
/** Gives a pointer to the mesh_fem of a variable if any. 0 otherwise.*/
@@ -516,61 +566,99 @@ namespace getfem {
context_check(); if (act_size_to_be_done) actualize_sizes();
return rTM;
}
-
+
/** Gives the access to the tangent matrix. For the complex version. */
const model_complex_sparse_matrix &complex_tangent_matrix(void) const {
GMM_ASSERT1(complex_version, "This model is a real one");
context_check(); if (act_size_to_be_done) actualize_sizes();
return cTM;
}
-
+
/** Gives the access to the right hand side of the tangent linear system.
- For the real version. */
+ For the real version. An assembly of the rhs has to be done first. */
const model_real_plain_vector &real_rhs(void) const {
GMM_ASSERT1(!complex_version, "This model is a complex one");
context_check(); if (act_size_to_be_done) actualize_sizes();
return rrhs;
}
+ /** Gives the access to the part of the right hand side of a term of a particular nonlinear brick. Does not account of the eventual time dispatcher. An assembly of the rhs has to be done first. For the real version. */
+ const model_real_plain_vector &real_brick_term_rhs(size_type ib, size_type ind_term = 0, bool sym = false, size_type ind_iter = 0) const {
+ GMM_ASSERT1(!complex_version, "This model is a complex one");
+ context_check(); if (act_size_to_be_done) actualize_sizes();
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ GMM_ASSERT1(ind_term < bricks[ib].tlist.size(), "Inexistent term");
+ GMM_ASSERT1(ind_iter < bricks[ib].nbrhs, "Inexistent iter");
+ GMM_ASSERT1(!sym || bricks[ib].tlist[ind_term].is_symmetric,
+ "Term is not symmetric");
+
+ if (sym)
+ return bricks[ib].rveclist_sym[ind_iter][ind_term];
+ else
+ return bricks[ib].rveclist[ind_iter][ind_term];
+ }
+
/** Gives the access to the pseudo potential. It has to be computed first
- by the call of assembly(model::BUILD_PSEUDO_POTENTIAL); */
+ by the call of assembly(model::BUILD_PSEUDO_POTENTIAL); */
scalar_type pseudo_potential(void) const {
return pseudo_potential_;
}
-
+
/** Gives the access to the right hand side of the tangent linear system.
- For the complex version. */
+ For the complex version. */
const model_complex_plain_vector &complex_rhs(void) const {
GMM_ASSERT1(complex_version, "This model is a real one");
context_check(); if (act_size_to_be_done) actualize_sizes();
return crhs;
}
+ /** Gives the access to the part of the right hand side of a term of a particular nonlinear brick. Does not account of the eventual time dispatcher. An assembly of the rhs has to be done first. For the real version. */
+ const model_complex_plain_vector &complex_brick_term_rhs(size_type ib, size_type ind_term = 0, bool sym = false, size_type ind_iter = 0) const {
+ GMM_ASSERT1(!complex_version, "This model is a complex one");
+ context_check(); if (act_size_to_be_done) actualize_sizes();
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ GMM_ASSERT1(ind_term < bricks[ib].tlist.size(), "Inexistent term");
+ GMM_ASSERT1(ind_iter < bricks[ib].nbrhs, "Inexistent iter");
+ GMM_ASSERT1(!sym || bricks[ib].tlist[ind_term].is_symmetric,
+ "Term is not symmetric");
+
+ if (sym)
+ return bricks[ib].cveclist_sym[ind_iter][ind_term];
+ else
+ return bricks[ib].cveclist[ind_iter][ind_term];
+ }
+
/** List the model variables and constant. */
void listvar(std::ostream &ost) const;
/** List the model bricks. */
void listbricks(std::ostream &ost, size_type base_id = 0) const;
- /** Force the re-computation of a brick for the next assembly. */
+ /** Force the re-computation of a brick for the next assembly. */
void touch_brick(size_type ind_brick) {
GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
bricks[ind_brick].terms_to_be_computed = true;
}
- pbrick brick_pointer(size_type ind_brick) {
- GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
- return bricks[ind_brick].pbr;
- }
-
/** Add a brick to the model. varname is the list of variable used
and datanames the data used. If a variable is used as a data, it
should be declared in the datanames (it will depend on the value of
- the variable not only on the fem). */
+ the variable not only on the fem). */
size_type add_brick(pbrick pbr, const varnamelist &varnames,
- const varnamelist &datanames,
- const termlist &terms, const mimlist &mims,
- size_type region);
+ const varnamelist &datanames,
+ const termlist &terms, const mimlist &mims,
+ size_type region);
+
+ /** Add an integration method to a brick. */
+ void add_mim_to_brick(size_type ib, const mesh_im &mim);
+
+ /** Change the term list of a brick. Used for very special bricks only. */
+ void change_terms_of_brick(size_type ib, const termlist &terms);
+
+ /** Change the variable list of a brick. Used for very special bricks only.
+ */
+ void change_variables_of_brick(size_type ib, const varnamelist &vl);
+
/** Add a time dispacther to a brick. */
void add_time_dispatcher(size_type ibrick, pdispatcher pdispatch);
@@ -581,22 +669,22 @@ namespace getfem {
void first_iter(void);
/** For transient problems. Prepare the next iterations. In particular
- shift the version of the variables.
+ shift the version of the variables.
*/
void next_iter(void);
/** Gives the name of the variable of index `ind_var` of the brick
- of index `ind_brick`. */
+ of index `ind_brick`. */
const std::string &varname_of_brick(size_type ind_brick,
- size_type ind_var);
+ size_type ind_var);
/** Gives the name of the data of index `ind_data` of the brick
- of index `ind_brick`. */
+ of index `ind_brick`. */
const std::string &dataname_of_brick(size_type ind_brick,
- size_type ind_data);
+ size_type ind_data);
/** Assembly of the tangent system taking into account the terms
- from all bricks. */
+ from all bricks. */
void assembly(build_version version);
void clear(void) {
@@ -614,6 +702,12 @@ namespace getfem {
leading_dim = 0;
}
+ /**check consistency of RHS and Stiffness matrix for brick with
+ * @param ind_brick - index of the brick
+ */
+ void check_brick_stiffness_rhs(size_type ind_brick) const;
+
+
};
//=========================================================================
@@ -636,11 +730,11 @@ namespace getfem {
{ for (size_type i = 0; i < v.size(); ++i) gmm::clear(v[i]); }
void transfert(model::real_veclist &v1,
- model::real_veclist &v2) const
+ model::real_veclist &v2) const
{ for (size_type i = 0; i < v1.size(); ++i) gmm::copy(v1[i], v2[i]); }
void transfert(model::complex_veclist &v1,
- model::complex_veclist &v2) const
+ model::complex_veclist &v2) const
{ for (size_type i = 0; i < v1.size(); ++i) gmm::copy(v1[i], v2[i]); }
size_type nbrhs_;
@@ -681,7 +775,7 @@ namespace getfem {
std::vector<model::real_veclist> &,
build_version) const {
GMM_ASSERT1(false, "Time dispatcher with not defined real tangent "
- "terms !");
+ "terms !");
}
virtual void asm_complex_tangent_terms
@@ -690,13 +784,13 @@ namespace getfem {
std::vector<model::complex_veclist> &,
build_version) const {
GMM_ASSERT1(false, "Time dispatcher with not defined complex tangent "
- "terms !");
+ "terms !");
}
virtual_dispatcher(size_type _nbrhs) : nbrhs_(_nbrhs) {
GMM_ASSERT1(_nbrhs > 0, "Time dispatcher with no rhs");
}
-
+
};
//=========================================================================
@@ -710,7 +804,7 @@ namespace getfem {
$\theta K U^{n+1} + (1-\theta) K U^{n}$.
*/
void add_theta_method_dispatcher(model &md, dal::bit_vector ibricks,
- const std::string &THETA);
+ const std::string &THETA);
/** Function which udpate the velocity $v^{n+1}$ after the computation
of the displacement $u^{n+1}$ and before the next iteration. Specific
@@ -750,29 +844,32 @@ namespace getfem {
The virtual methods asm_real_tangent_terms and/or
asm_complex_tangent_terms have to be defined.
The brick should not store data. The data have to be stored in the
- model object.
+ model object.
**/
class virtual_brick : virtual public dal::static_stored_object {
private :
bool islinear; // The brick add a linear term or not.
bool issymmetric; // The brick add a symmetric term or not.
- bool iscoercive; // The brick add a potentialy coercive terms or not.
+ bool iscoercive; // The brick add a potentialy coercive terms or not.
// (in particular, not a term involving a multiplier)
bool isreal; // The brick admits a real version or not.
bool iscomplex; // The brick admits a complex version or not.
bool isinit; // internal flag.
+ bool compute_each_time; // The brick is linear but needs to be computed
+ // each time it is evaluated.
std::string name; // Name of the brick.
-
+
public :
typedef model::build_version build_version;
-
+
virtual_brick(void) { isinit = false; }
void set_flags(const std::string &bname, bool islin, bool issym,
- bool iscoer, bool ire, bool isco) {
+ bool iscoer, bool ire, bool isco, bool each_time = false) {
name = bname;
islinear = islin; issymmetric = issym; iscoercive = iscoer;
isreal = ire; iscomplex = isco; isinit = true;
+ compute_each_time = each_time;
}
# define BRICK_NOT_INIT GMM_ASSERT1(isinit, "Set brick flags !")
@@ -781,66 +878,83 @@ namespace getfem {
bool is_coercive(void) const { BRICK_NOT_INIT; return iscoercive; }
bool is_real(void) const { BRICK_NOT_INIT; return isreal; }
bool is_complex(void) const { BRICK_NOT_INIT; return iscomplex; }
+ bool is_to_be_computed_each_time(void) const
+ { BRICK_NOT_INIT; return compute_each_time; }
const std::string &brick_name(void) const { BRICK_NOT_INIT; return name; }
virtual void asm_real_tangent_terms(const model &, size_type,
- const model::varnamelist &,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &,
- model::real_veclist &,
- model::real_veclist &,
- size_type, build_version) const
+ const model::varnamelist &,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type, build_version) const
{ GMM_ASSERT1(false, "Brick has no real tangent terms !"); }
virtual void asm_complex_tangent_terms(const model &, size_type,
- const model::varnamelist &,
- const model::varnamelist &,
- const model::mimlist &,
- model::complex_matlist &,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type, build_version) const
+ const model::varnamelist &,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::complex_matlist &,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type, build_version) const
{ GMM_ASSERT1(false, "Brick has no complex tangent terms !"); }
virtual scalar_type asm_real_pseudo_potential(const model &, size_type,
- const model::varnamelist &,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &,
- model::real_veclist &,
- model::real_veclist &,
- size_type) const {
+ const model::varnamelist &,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type) const {
GMM_WARNING1("Brick " << name << " has no contribution to the "
- << "pseudo potential !");
+ << "pseudo potential !");
return scalar_type(0);
}
-
+
virtual scalar_type asm_complex_pseudo_potential(const model &, size_type,
- const model::varnamelist&,
- const model::varnamelist&,
- const model::mimlist &,
- model::complex_matlist &,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type) const {
+ const model::varnamelist&,
+ const model::varnamelist&,
+ const model::mimlist &,
+ model::complex_matlist &,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type) const {
GMM_WARNING1("Brick " << name << " has no contribution to the "
- << "pseudo potential !");
+ << "pseudo potential !");
return scalar_type(0);
}
-
-
+
+ /**check consistency of stiffness matrix and rhs*/
+ void check_stiffness_matrix_and_rhs(const model &, size_type,
+ const model::varnamelist &,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &,
+ model::real_veclist &,
+ model::real_veclist &, size_type rg,
+ const scalar_type delta = 1e-8) const;
+
+
+
+
};
+
+
//=========================================================================
//
// Functions adding standard bricks to the model.
//
//=========================================================================
-
- /** Add a Laplacian term on the variable `varname`. If it is a vector
+
+ /** Add a Laplacian term on the variable `varname` (in fact with a minus :
+ :math:`-\text{div}(\nabla u)`). If it is a vector
valued variable, the Laplacian term is componentwise. `region` is an
optional mesh region on which the term is added. Return the brick index
in the model.
@@ -848,7 +962,7 @@ namespace getfem {
size_type add_Laplacian_brick
(model &md, const mesh_im &mim, const std::string &varname,
size_type region = size_type(-1));
-
+
/** Add an elliptic term on the variable `varname`. The shape of the elliptic
term depends both on the variable and the data. This corresponds to a
@@ -869,7 +983,7 @@ namespace getfem {
size_type add_generic_elliptic_brick
(model &md, const mesh_im &mim, const std::string &varname,
const std::string &dataname, size_type region = size_type(-1));
-
+
/** Add a source term on the variable `varname`. The source term is
represented by the data `dataname` which could be constant or described
@@ -898,7 +1012,7 @@ namespace getfem {
/** Add a Dirichlet condition on the variable `varname` and the mesh
region `region`. This region should be a boundary. The Dirichlet
condition is prescribed with a multiplier variable `multname` which
- should be first declared as a multiplier
+ should be first declared as a multiplier
variable on the mesh region in the model. `dataname` is the optional
right hand side of the Dirichlet condition. It could be constant or
described on a fem; scalar or vector valued, depending on the variable
@@ -910,7 +1024,7 @@ namespace getfem {
const std::string &multname, size_type region,
const std::string &dataname = std::string());
- /** Same function as the preceeding one but the multipliers variable will
+ /** Same function as the previous one but the multipliers variable will
be declared to the brick by the function. `mf_mult` is the finite element
method on which the multiplier will be build (it will be restricted to
the mesh region `region` and eventually some conflicting dofs with some
@@ -921,7 +1035,7 @@ namespace getfem {
const mesh_fem &mf_mult, size_type region,
const std::string &dataname = std::string());
- /** Same function as the preceeding one but the `mf_mult` parameter is
+ /** Same function as the previous one but the `mf_mult` parameter is
replaced by `degree`. The multiplier will be described on a standard
finite element method of the corresponding degree.
*/
@@ -946,7 +1060,7 @@ namespace getfem {
on which the Dirichlet condition is prescribed.
`mf_mult` is an optional parameter which allows to weaken the
Dirichlet condition specifying a multiplier space.
- Return the brick index in the model.
+ Returns the brick index in the model.
*/
size_type add_Dirichlet_condition_with_penalization
(model &md, const mesh_im &mim, const std::string &varname,
@@ -954,19 +1068,147 @@ namespace getfem {
const std::string &dataname = std::string(),
const mesh_fem *mf_mult = 0);
+ /** Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with a multiplier variable `multname` which
+ should be first declared as a multiplier
+ variable on the mesh region in the model. `dataname` is the optional
+ right hand side of the normal Dirichlet condition.
+ It could be constant or
+ described on a fem; scalar or vector valued, depending on the variable
+ on which the Dirichlet condition is prescribed (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ Returns the brick index in the model.
+ */
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const std::string &multname, size_type region,
+ const std::string &dataname = std::string());
+
+ /** Same function as the previous one but the multipliers variable will
+ be declared to the brick by the function. `mf_mult` is the finite element
+ method on which the multiplier will be build (it will be restricted to
+ the mesh region `region` and eventually some conflicting dofs with some
+ other multiplier variables will be suppressed).
+ */
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const mesh_fem &mf_mult, size_type region,
+ const std::string &dataname = std::string());
+
+ /** Same function as the previous one but the `mf_mult` parameter is
+ replaced by `degree`. The multiplier will be described on a standard
+ finite element method of the corresponding degree.
+ */
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ dim_type degree, size_type region,
+ const std::string &dataname = std::string());
+
+ /** Add a Dirichlet condition to the normal component of the vector
+ (or tensor) valued variable `varname` and the mesh
+ region `region`. This region should be a boundary. The Dirichlet
+ condition is prescribed with penalization. The penalization coefficient
+ is intially `penalization_coeff` and will be added to the data of
+ the model. `dataname` is the optional
+ right hand side of the Dirichlet condition. It could be constant or
+ described on a fem; scalar or vector valued, depending on the variable
+ on which the Dirichlet condition is prescribed (scalar if the variable
+ is vector valued, vector if the variable is tensor valued).
+ `mf_mult` is an optional parameter which allows to weaken the
+ Dirichlet condition specifying a multiplier space.
+ Return the brick index in the model.
+ */
+ size_type add_normal_Dirichlet_condition_with_penalization
+ (model &md, const mesh_im &mim, const std::string &varname,
+ scalar_type penalization_coeff, size_type region,
+ const std::string &dataname = std::string(),
+ const mesh_fem *mf_mult = 0);
+
+
+ /** Add some pointwise constraints on the variable `varname` thanks to
+ a penalization. The penalization coefficient is initially
+ `penalization_coeff` and will be added to the data of the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh. If the variable represents a vector field, the data
+ `dataname_unitv` represents a vector of dimension the number of points
+ times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ */
+ size_type add_pointwise_constraints_with_penalization
+ (model &md, const std::string &varname,
+ scalar_type penalisation_coeff, const std::string &dataname_pt,
+ const std::string &dataname_unitv = std::string(),
+ const std::string &dataname_val = std::string());
+
+
+ /** Add some pointwise constraints on the variable `varname` using a given
+ multiplier `multname`.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ The multiplier variable should be a fixed size variable of size the
+ number of points.
+ If the variable represents a vector field, the data
+ `dataname_unitv` represents a vector of dimension the number of points
+ times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ */
+ size_type add_pointwise_constraints_with_given_multipliers
+ (model &md, const std::string &varname,
+ const std::string &multname, const std::string &dataname_pt,
+ const std::string &dataname_unitv = std::string(),
+ const std::string &dataname_val = std::string());
+
+ /** Add some pointwise constraints on the variable `varname` using
+ multiplier. The multiplier variable is automatically added to the model.
+ The conditions are prescribed on a set of points given in the data
+ `dataname_pt` whose dimension is the number of points times the dimension
+ of the mesh.
+ If the variable represents a vector field, the data
+ `dataname_unitv` represents a vector of dimension the number of points
+ times the dimension of the vector field which should store some
+ unit vectors. In that case the prescribed constraint is the scalar
+ product of the variable at the corresponding point with the corresponding
+ unit vector.
+ The optional data `dataname_val` is the vector of values to be prescribed
+ at the different points.
+ This brick is specifically designed to kill rigid displacement
+ in a Neumann problem.
+ */
+ size_type add_pointwise_constraints_with_multipliers
+ (model &md, const std::string &varname, const std::string &dataname_pt,
+ const std::string &dataname_unitv = std::string(),
+ const std::string &dataname_val = std::string());
+
+
/** Change the penalization coefficient of a Dirichlet condition with
penalization brick. If the brick is not of this kind,
this function has an undefined behavior.
*/
void change_penalization_coeff(model &md, size_type ind_brick,
- scalar_type penalisation_coeff);
+ scalar_type penalisation_coeff);
/** Add a generalized Dirichlet condition on the variable `varname` and
the mesh region `region`. This version is for vector field.
It prescribes a condition @f$ Hu = r @f$ where `H` is a matrix field.
This region should be a boundary. The Dirichlet
condition is prescribed with a multiplier variable `multname` which
- should be first declared as a multiplier
+ should be first declared as a multiplier
variable on the mesh region in the model. `dataname` is the
right hand side of the Dirichlet condition. It could be constant or
described on a fem; scalar or vector valued, depending on the variable
@@ -1031,9 +1273,9 @@ namespace getfem {
complex, fem dependant or not.
*/
size_type add_Helmholtz_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region = size_type(-1));
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region = size_type(-1));
/** Add a Fourier-Robin brick to the model. This correspond to the weak term
@@ -1046,9 +1288,27 @@ namespace getfem {
side can be added with a source term brick.
*/
size_type add_Fourier_Robin_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region);
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region);
+
+
+ /** Add a brick representing a scalar term (@f$f(u)@f$) to the left-hand
+ side of the model. In the weak form, one adds (@f$ +\int f(u)v at f$). The
+ function $f$ may optionally depend on $\lambda$, i.e.,
+ $f(u) = f(u, \lambda)$.
+
+ `f` and `dfdu` should contain the expressions for $f(u)$ and
+ $\frac{df}{du}(u)$, respectively. `region` is an
+ optional mesh region on which the term is added. `dataname` represents
+ the optional real scalar parameter $\lambda$ in the model. Return the
+ brick index in the model.
+ */
+ size_type add_basic_nonlinear_brick
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const std::string &f, const std::string &dfdu,
+ size_type region = size_type(-1),
+ const std::string &dataname = std::string());
// Constraint brick.
model_real_sparse_matrix &set_private_data_brick_real_matrix
@@ -1066,7 +1326,7 @@ namespace getfem {
template <typename VECT, typename T>
void set_private_data_rhs(model &md, size_type ind,
- const VECT &L, T) {
+ const VECT &L, T) {
model_real_plain_vector &LL = set_private_data_brick_real_rhs(md, ind);
gmm::resize(LL, gmm::vect_size(L));
gmm::copy(L, LL);
@@ -1074,15 +1334,15 @@ namespace getfem {
template <typename VECT, typename T>
void set_private_data_rhs(model &md, size_type ind, const VECT &L,
- std::complex<T>) {
- model_complex_plain_vector &LL = set_private_data_brick_complex_rhs(md, ind);
+ std::complex<T>) {
+ model_complex_plain_vector &LL=set_private_data_brick_complex_rhs(md, ind);
gmm::resize(LL, gmm::vect_size(L));
gmm::copy(L, LL);
}
/** For some specific bricks having an internal right hand side vector
(explicit bricks: 'constraint brick' and 'explicit rhs brick'),
- set this rhs.
+ set this rhs.
*/
template <typename VECT>
void set_private_data_rhs(model &md, size_type indbrick, const VECT &L) {
@@ -1092,7 +1352,7 @@ namespace getfem {
template <typename MAT, typename T>
void set_private_data_matrix(model &md, size_type ind,
- const MAT &B, T) {
+ const MAT &B, T) {
model_real_sparse_matrix &BB = set_private_data_brick_real_matrix(md, ind);
gmm::resize(BB, gmm::mat_nrows(B), gmm::mat_ncols(B));
gmm::copy(B, BB);
@@ -1100,7 +1360,7 @@ namespace getfem {
template <typename MAT, typename T>
void set_private_data_matrix(model &md, size_type ind, const MAT &B,
- std::complex<T>) {
+ std::complex<T>) {
model_complex_sparse_matrix &BB
= set_private_data_brick_complex_matrix(md, ind);
gmm::resize(BB, gmm::mat_nrows(B), gmm::mat_ncols(B));
@@ -1112,7 +1372,7 @@ namespace getfem {
set this matrix. @*/
template <typename MAT>
void set_private_data_matrix(model &md, size_type indbrick,
- const MAT &B) {
+ const MAT &B) {
typedef typename gmm::linalg_traits<MAT>::value_type T;
set_private_data_matrix(md, indbrick, B, T());
}
@@ -1120,7 +1380,7 @@ namespace getfem {
/** Add an additional explicit penalized constraint on the variable
`varname`. The constraint is $BU=L$ with `B` being a rectangular
sparse matrix.
- Be aware that `B` should not contain a palin row, otherwise the whole
+ Be aware that `B` should not contain a plain row, otherwise the whole
tangent matrix will be plain. It is possible to change the constraint
at any time whith the methods set_private_matrix and set_private_rhs.
The method change_penalization_coeff can also be used.
@@ -1156,13 +1416,13 @@ namespace getfem {
}
size_type add_explicit_matrix(model &md, const std::string &varname1,
- const std::string &varname2,
- bool issymmetric, bool iscoercive);
+ const std::string &varname2,
+ bool issymmetric, bool iscoercive);
size_type add_explicit_rhs(model &md, const std::string &varname);
-
+
/** Add a brick reprenting an explicit matrix to be added to the tangent
linear system relatively to the variables 'varname1' and 'varname2'.
- The given matrix should have has many rows as the dimension of
+ The given matrix should have as many rows as the dimension of
'varname1' and as many columns as the dimension of 'varname2'.
If the two variables are different and if `issymmetric' is set to true
then the transpose of the matrix is also added to the tangent system
@@ -1172,11 +1432,11 @@ namespace getfem {
*/
template <typename MAT>
size_type add_explicit_matrix(model &md, const std::string &varname1,
- const std::string &varname2, const MAT &B,
- bool issymmetric = false,
- bool iscoercive = false) {
+ const std::string &varname2, const MAT &B,
+ bool issymmetric = false,
+ bool iscoercive = false) {
size_type ind = add_explicit_matrix(md, varname1, varname2,
- issymmetric, iscoercive);
+ issymmetric, iscoercive);
set_private_data_matrix(md, ind, B);
return ind;
}
@@ -1186,18 +1446,18 @@ namespace getfem {
linear system relatively to the variable 'varname'.
The given rhs should have the same size than the dimension of
'varname'. The rhs can be changed by the command set_private_rhs.
- */
+ */
template <typename VECT>
size_type add_explicit_rhs(model &md, const std::string &varname,
- const VECT &L) {
+ const VECT &L) {
size_type ind = add_explicit_rhs(md, varname);
set_private_data_rhs(md, ind, L);
return ind;
}
-
+
/** Linear elasticity brick ( @f$ \int \sigma(u):\varepsilon(v) @f$ ).
- for isotropic material. Parametrized by the lamé coefficients
+ for isotropic material. Parametrized by the Lamé coefficients
lambda and mu.
*/
size_type add_isotropic_linearized_elasticity_brick
@@ -1211,7 +1471,7 @@ namespace getfem {
(model &md, const std::string &varname, const std::string &dataname_lambda,
const std::string &dataname_mu, const mesh_fem &mf_vm,
model_real_plain_vector &VM, bool tresca);
-
+
/**
Compute the Von-Mises stress or the Tresca stress of a field
(only valid for isotropic linearized elasticity in 3D)
@@ -1232,7 +1492,7 @@ namespace getfem {
Update the tangent matrix with a pressure term:
@f[
- T \longrightarrow
+ T \longrightarrow
\begin{array}{ll} T & B \\ B^t & M \end{array}
@f]
with @f$ B = - \int p.div u @f$ and
@@ -1242,7 +1502,7 @@ namespace getfem {
Be aware that an inf-sup condition between the finite element method
describing the rpressure and the primal variable has to be satisfied.
- For nearly incompressible elasticity,
+ For nearly incompressible elasticity,
@f[ p = -\lambda \textrm{div}~u @f]
@f[ \sigma = 2 \mu \varepsilon(u) -p I @f]
@see asm_stokes_B
@@ -1265,7 +1525,7 @@ namespace getfem {
Add the standard discretization of a first order time derivative. The
parameter $rho$ is the density which could be omitted (the defaul value
is 1). This brick should be used in addition to a time dispatcher for the
- other terms.
+ other terms.
*/
size_type add_basic_d_on_dt_brick
(model &md, const mesh_im &mim, const std::string &varname,
diff --git a/src/getfem/getfem_nonlinear_elasticity.h b/src/getfem/getfem_nonlinear_elasticity.h
index e67fdf1..157ec16 100644
--- a/src/getfem/getfem_nonlinear_elasticity.h
+++ b/src/getfem/getfem_nonlinear_elasticity.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_nonlinear_elasticity.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -52,7 +53,8 @@ namespace getfem {
/** Base class for material law.
Inherit from this class to define a new law.
*/
- struct abstract_hyperelastic_law {
+ class abstract_hyperelastic_law {
+ public:
mutable int uvflag;
size_type nb_params_;
getfem::abstract_hyperelastic_law *pl; /* optional reference */
@@ -64,12 +66,28 @@ namespace getfem {
// default assembly
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const = 0;
+ const base_vector ¶ms,
+ scalar_type det_trans) const = 0;
+ /**True Cauchy stress (for Updated Lagrangian formulation)*/
+ virtual void cauchy_updated_lagrangian(const base_matrix& F,
+ const base_matrix &E,
+ base_matrix &cauchy_stress,
+ const base_vector ¶ms,
+ scalar_type det_trans) const;
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const = 0;
+ const base_vector ¶ms,
+ scalar_type det_trans) const = 0;
// the result of grad_sigma has to be completely symmetric.
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const = 0;
+ const base_vector ¶ms, scalar_type det_trans) const = 0;
+
+ /**cauchy-truesdel tangent moduli, used in updated lagrangian*/
+ virtual void grad_sigma_updated_lagrangian(const base_matrix& F,
+ const base_matrix& E,
+ const base_vector ¶ms,
+ scalar_type det_trans,
+ base_tensor &grad_sigma_ul)const;
+
size_type nb_params(void) const { return nb_params_; }
abstract_hyperelastic_law() { nb_params_ = 0; pl = 0; }
virtual ~abstract_hyperelastic_law() {}
@@ -87,12 +105,18 @@ namespace getfem {
public abstract_hyperelastic_law {
/* W = lambda*0.5*trace(E)^2 + mu*tr(E^2) */
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const;
+ const base_vector ¶ms,
+ scalar_type det_trans) const;
/* sigma = lambda*trace(E) + 2 mu * E */
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
+ virtual void grad_sigma_updated_lagrangian(const base_matrix& F,
+ const base_matrix& E,
+ const base_vector ¶ms,
+ scalar_type det_trans,
+ base_tensor &grad_sigma_ul)const;
SaintVenant_Kirchhoff_hyperelastic_law(void);
};
@@ -105,11 +129,12 @@ namespace getfem {
struct membrane_elastic_law :
public abstract_hyperelastic_law {
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const;
+ const base_vector ¶ms,
+ scalar_type det_trans) const;
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
membrane_elastic_law(void) { nb_params_ = 6; }
};
@@ -120,38 +145,54 @@ namespace getfem {
*/
struct Mooney_Rivlin_hyperelastic_law : public abstract_hyperelastic_law {
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
Mooney_Rivlin_hyperelastic_law(void);
};
+
+ /** Blatz_Ko hyperelastic law
+
+ To be used for compressible problems.
+ */
+ struct generalized_Blatz_Ko_hyperelastic_law : public abstract_hyperelastic_law {
+ virtual scalar_type strain_energy(const base_matrix &E,
+ const base_vector ¶ms, scalar_type det_trans) const;
+ virtual void sigma(const base_matrix &E, base_matrix &result,
+ const base_vector ¶ms, scalar_type det_trans) const;
+ virtual void grad_sigma(const base_matrix &E, base_tensor &result,
+ const base_vector ¶ms, scalar_type det_trans) const;
+ generalized_Blatz_Ko_hyperelastic_law(void);
+ };
+
+
/** Ciarlet-Geymonat hyperelastic law ( @f$ W=~_1i_1(L) + \frac{~}{2}i_2(L) + 8ci_3(L) - \frac{~_1}{2} \textrm{log}~\textrm{det}~C @f$ )
*/
struct Ciarlet_Geymonat_hyperelastic_law : public abstract_hyperelastic_law {
// parameters are lambda=params[0], mu=params[1], gamma'(1)=params[2]
- // The parameters gamma'(1) has to verify gamma'(1) in ]-lambda/2-mu, -mu[
+ // The parameter gamma'(1) has to verify gamma'(1) in ]max{-lambda/2-mu, -2mu}, -mu[
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
Ciarlet_Geymonat_hyperelastic_law(void) { nb_params_ = 3; }
};
- /** Plane strain hyperelastic law (take another law as a parameter)
+ /** Plane strain hyperelastic law (takes another law as a parameter)
*/
struct plane_strain_hyperelastic_law : public abstract_hyperelastic_law {
virtual scalar_type strain_energy(const base_matrix &E,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void sigma(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
virtual void grad_sigma(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const;
+ const base_vector ¶ms, scalar_type det_trans) const;
plane_strain_hyperelastic_law(getfem::abstract_hyperelastic_law *pl_)
{ pl = pl_; nb_params_ = pl->nb_params(); }
};
@@ -220,15 +261,17 @@ namespace getfem {
E(alpha, alpha) -= scalar_type(1);
gmm::scale(E, scalar_type(0.5));
+ scalar_type det_trans = gmm::lu_det(gradU);
+
if (version == 2) {
- t[0] = AHL.strain_energy(E, params);
+ t[0] = AHL.strain_energy(E, params, det_trans);
return;
}
- AHL.sigma(E, Sigma, params);
+ AHL.sigma(E, Sigma, params, det_trans);
if (version == 0) {
- AHL.grad_sigma(E, tt, params);
+ AHL.grad_sigma(E, tt, params, det_trans);
for (size_type n = 0; n < NFem; ++n)
for (size_type m = 0; m < N; ++m)
for (size_type l = 0; l < N; ++l)
@@ -241,8 +284,7 @@ namespace getfem {
t(n, m, k, l) = aux;
}
} else {
- if (gmm::lu_det(gradU) < 0) AHL.inc_unvalid_flag();
-
+ if (det_trans < scalar_type(0)) AHL.inc_unvalid_flag();
for (size_type i = 0; i < NFem; ++i)
for (size_type j = 0; j < N; ++j) {
scalar_type aux(0);
@@ -543,6 +585,15 @@ namespace getfem {
const std::string &dataname, const mesh_fem &mf_vm,
model_real_plain_vector &VM, bool tresca);
+
+ void compute_sigmahathat(model &md,
+ const std::string &varname,
+ const abstract_hyperelastic_law &AHL,
+ const std::string &dataname,
+ const mesh_fem &mf_sigma,
+ model_real_plain_vector &SIGMA);
+
+
/**
Compute the Von-Mises stress or the Tresca stress of a field
with respect to the constitutive elasticity law AHL (only valid in 3D).
@@ -683,7 +734,7 @@ namespace getfem {
gmm::add(gmm::scaled(Id, -scalar_type(1)), E);
gmm::scale(E, scalar_type(1)/scalar_type(2));
gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*NP,NP)), p);
- AHL.sigma(E, sigmahathat, p);
+ AHL.sigma(E, sigmahathat, p, scalar_type(1));
if (NFem == 3 && N == 2) {
//jyh : compute ez, normal on deformed surface
for (unsigned int l = 0; l <NFem; ++l) {
diff --git a/src/getfem/getfem_norm.h b/src/getfem/getfem_norm.h
index ecab73c..67341e8 100644
--- a/src/getfem/getfem_norm.h
+++ b/src/getfem/getfem_norm.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GETFEM_NORM_H__
#define GETFEM_NORM_H__
diff --git a/src/getfem/getfem_partial_mesh_fem.h b/src/getfem/getfem_partial_mesh_fem.h
index afcfc09..eda31af 100644
--- a/src/getfem/getfem_partial_mesh_fem.h
+++ b/src/getfem/getfem_partial_mesh_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_partial_mesh_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -46,7 +47,7 @@
#include "getfem_mesh_im.h"
-// a ajuster : mesh, qdim, qdim_mn,
+// a ajuster : mesh, qdim, qdim_mn,
namespace getfem {
@@ -55,7 +56,7 @@ namespace getfem {
of the original mesh_fem.
*/
class partial_mesh_fem : public mesh_fem, public boost::noncopyable,
- public dal::static_stored_object {
+ public dal::static_stored_object {
protected :
const mesh_fem &mf;
mutable bool is_adapted;
@@ -65,9 +66,9 @@ namespace getfem {
{ mf.context_check(); is_adapted = false; }
/** build the mesh_fem keeping only the dof of the original
- mesh_fem which are listed in kept_dof. */
+ mesh_fem which are listed in kept_dof. */
void adapt(const dal::bit_vector &kept_dof,
- const dal::bit_vector &rejected_elt = dal::bit_vector());
+ const dal::bit_vector &rejected_elt = dal::bit_vector());
void clear(void);
pfem fem_of_element(size_type cv) const
@@ -76,13 +77,13 @@ namespace getfem {
virtual dim_type get_qdim() const { return mf.get_qdim(); }
virtual void set_qdim(dim_type) {
- GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same than "
- "the original fem");
+ GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same as "
+ "the original fem");
}
virtual void set_qdim_mn(dim_type, dim_type) {
- GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same than "
- "the original fem");
+ GMM_ASSERT1(false, "The Qdim of a partial_mesh_fem is the same as "
+ "the original fem");
}
ind_dof_ct ind_basic_dof_of_element(size_type cv) const
@@ -94,7 +95,7 @@ namespace getfem {
size_type nb_basic_dof_of_face_of_element(size_type cv, short_type f) const
{ return mf.nb_basic_dof_of_face_of_element(cv, f); }
-
+
size_type nb_basic_dof_of_element(size_type cv) const
{ return mf.nb_basic_dof_of_element(cv); }
@@ -115,7 +116,7 @@ namespace getfem {
size_type nb_dof(void) const {
context_check();
- return use_reduction ? gmm::mat_nrows(R_) : mf.nb_dof();
+ return use_reduction ? gmm::mat_nrows(R_) : mf.nb_dof();
}
size_type nb_basic_dof(void) const
@@ -123,9 +124,9 @@ namespace getfem {
dal::bit_vector basic_dof_on_region(const mesh_region &b) const
{ return mf.basic_dof_on_region(b); }
-
+
void read_from_file(std::istream &)
- { GMM_ASSERT1(false, "You cannot directely read this kind of mesh_fem"); }
+ { GMM_ASSERT1(false, "You cannot directly read this kind of mesh_fem"); }
void write_to_file(std::ostream &ost) const;
void write_to_file(const std::string &name, bool with_mesh=false) const;
@@ -148,10 +149,10 @@ namespace getfem {
A more efficient algorithm is now present in gmm_range_basis.h
*/
dal::bit_vector select_dofs_from_im(const mesh_fem &mf, const mesh_im &mim,
- unsigned P = unsigned(-1));
-
-
+ unsigned P = unsigned(-1));
+
+
} /* end of namespace getfem. */
#endif
-
+
diff --git a/src/getfem/getfem_plasticity.h b/src/getfem/getfem_plasticity.h
index 83f428d..d2a91ad 100644
--- a/src/getfem/getfem_plasticity.h
+++ b/src/getfem/getfem_plasticity.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Amandine Cottaz, Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Amandine Cottaz, Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_plasticity.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
diff --git a/src/getfem/getfem_projected_fem.h b/src/getfem/getfem_projected_fem.h
new file mode 100644
index 0000000..2b63a05
--- /dev/null
+++ b/src/getfem/getfem_projected_fem.h
@@ -0,0 +1,183 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Yves Renard, Konstantinos Poulios
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+/**@file getfem_projected_fem.h
+ @author Konstantinos Poulios <logari81 at googlemail.com>
+ @date January 12, 2012.
+ @brief FEM which projects a mesh_fem on a different mesh.
+*/
+
+
+#ifndef GETFEM_PROJECTED_FEM_H__
+#define GETFEM_PROJECTED_FEM_H__
+
+#include "getfem_fem.h"
+#include "getfem_mesh_fem.h"
+#include "getfem_mesh_im.h"
+#include "bgeot_kdtree.h"
+#include "bgeot_geotrans_inv.h"
+
+namespace getfem {
+
+ struct gausspt_projection_data {
+ size_type cv; // convex of the source mesh_fem opposite to the gauss point
+ short_type f; // convex face of the source mesh_fem opposite to the gauss point
+ size_type iflags; // flags & 1 : there is an element or not
+ // flags & 2 : base_val is stored
+ // flags & 4 : grad_val is stored
+ base_node ptref; // coords on reference element of mf_source element
+ base_node normal; // normal vector at the projected point on the mf_source element
+ scalar_type gap; // gap distance from the gauss point to the projected point
+ base_tensor base_val; // optional storage of the base values
+ base_tensor grad_val; // optional storage of the grad base values
+ std::map<size_type,size_type> local_dof; // correspondance between dof of the
+ // mf_source element and dof of the projected element.
+ gausspt_projection_data() :
+ cv(size_type(-1)), f(short_type(-1)), iflags(size_type(-1)) {}
+ };
+
+ /** FEM which interpolates the projection of a mesh_fem on a different mesh.
+
+ Note that the memory cost of this method is extremely high!
+ */
+ class projected_fem : public virtual_fem, public context_dependencies {
+
+ protected :
+
+ struct elt_projection_data {
+ short_type f; // face number on the target mesh
+ size_type nb_dof;
+ std::map<size_type,gausspt_projection_data> gausspt;
+ std::vector<size_type> inddof;
+ pintegration_method pim; // for DEBUG
+ elt_projection_data() : f(-1), nb_dof(0), pim(0) {}
+ };
+
+ const mesh_fem &mf_source; // mf_source represents the original finite
+ // element method to be projected.
+ const mesh_im &mim_target; // mesh on which mf_source is projected.
+ // Contains also the integration method.
+ mesh_region rg_source;
+ mesh_region rg_target;
+
+ bool store_values;
+ dal::bit_vector blocked_dofs;
+
+ // auxiliary variables
+ mutable std::map<size_type,elt_projection_data> elements;
+ mutable bgeot::kdtree tree; // Tree containing the nodes of the
+ // projected mf_source dofs
+ mutable std::vector<size_type> ind_dof; /* all functions using this work
+ array should keep it full of
+ size_type(-1) */
+ mutable bgeot::geotrans_inv_convex gic;
+ mutable base_tensor taux;
+ mutable fem_interpolation_context fictx;
+ mutable size_type fictx_cv;
+ mutable base_matrix G;
+ mutable std::vector<base_node> node_tab_;
+ mutable bgeot::multi_index mi2, mi3;
+ mutable base_node ptref;
+
+ void build_kdtree(void) const;
+
+ bool find_a_projected_point(base_node pt, base_node &ptr_proj,
+ size_type &cv_proj, short_type &fc_proj) const;
+
+ void update_from_context(void) const;
+ inline void actualize_fictx(pfem pf, size_type cv,
+ const base_node &ptr) const;
+
+ public :
+
+ virtual size_type nb_dof(size_type cv) const;
+ virtual size_type index_of_global_dof(size_type cv, size_type i) const;
+ virtual bgeot::pconvex_ref ref_convex(size_type cv) const;
+ virtual const bgeot::convex<base_node> &node_convex(size_type cv) const;
+ virtual bgeot::pstored_point_tab node_tab(size_type) const;
+ void base_value(const base_node &, base_tensor &) const;
+ void grad_base_value(const base_node &, base_tensor &) const;
+ void hess_base_value(const base_node &, base_tensor &) const;
+ void real_base_value(const fem_interpolation_context& c,
+ base_tensor &t, bool = true) const;
+ void real_grad_base_value(const fem_interpolation_context& c,
+ base_tensor &t, bool = true) const;
+ void real_hess_base_value(const fem_interpolation_context&,
+ base_tensor &, bool = true) const;
+
+ void projection_data(const fem_interpolation_context& c,
+ base_node &normal, scalar_type &gap) const;
+
+ /** return the list of convexes of the projected mesh_fem which
+ * contain at least one gauss point (should be all convexes)! */
+ dal::bit_vector projected_convexes() const;
+
+ /** return the min/max/mean number of gauss points in the convexes
+ * of the projected mesh_fem */
+ void gauss_pts_stats(unsigned &ming, unsigned &maxg,
+ scalar_type &meang) const;
+ size_type memsize() const;
+ private:
+
+ projected_fem(const mesh_fem &mf_source_, const mesh_im &mim_target_,
+ size_type rg_source_, size_type rg_target_,
+ dal::bit_vector blocked_dofs_,
+ bool store_val = true);
+
+ friend pfem new_projected_fem(const mesh_fem &mf_source_,
+ const mesh_im &mim_target_,
+ size_type rg_source_,
+ size_type rg_target_,
+ dal::bit_vector blocked_dofs_,
+ bool store_val);
+ };
+
+
+ /** create a new projected FEM.
+ @param mf_source the mesh_fem that will be projected.
+ @param mim_target the integration method on the final mesh (not the mesh
+ of mf_source!).
+ @param blocked_dofs list of dof of mf_source which won't be projected.
+ @param store_val if true, the values/gradients of interpolated base
+ function are cached at each gauss point (eats much memory).
+ */
+ pfem new_projected_fem(const mesh_fem &mf_source, const mesh_im &mim_target,
+ size_type rg_source_ = size_type(-1),
+ size_type rg_target_ = size_type(-1),
+ dal::bit_vector blocked_dofs = dal::bit_vector(),
+ bool store_val = true);
+
+ /** release a projected fem */
+ inline void del_projected_fem(pfem pf) { dal::del_stored_object(pf); }
+
+
+} /* end of namespace getfem. */
+
+#endif
diff --git a/src/getfem/getfem_regular_meshes.h b/src/getfem/getfem_regular_meshes.h
index 45be561..f3b2642 100644
--- a/src/getfem/getfem_regular_meshes.h
+++ b/src/getfem/getfem_regular_meshes.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_regular_meshes.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_spider_fem.h b/src/getfem/getfem_spider_fem.h
index e5f4c51..34f4d2d 100644
--- a/src/getfem/getfem_spider_fem.h
+++ b/src/getfem/getfem_spider_fem.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_spider_fem.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/getfem/getfem_superlu.h b/src/getfem/getfem_superlu.h
index 63e786a..5377430 100644
--- a/src/getfem/getfem_superlu.h
+++ b/src/getfem/getfem_superlu.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file getfem_superlu.h
@author Julien Pommier <Julien.Pommier at insa-toulouse.fr>
@@ -49,7 +50,7 @@
namespace gmm {
template<typename T>
- void SuperLU_solve(const gmm::csc_matrix<T> &A, T *X_, T *B, double& rcond_, int permc_spec = 3);
+ int SuperLU_solve(const gmm::csc_matrix<T> &A, T *X_, T *B, double& rcond_, int permc_spec = 3);
/** solve a sparse linear system AX=B (float, double, complex<float>
or complex<double>) via SuperLU.
@@ -60,7 +61,7 @@ namespace gmm {
@param permc_spec specify the kind of renumbering than SuperLU should do.
*/
template<typename MAT, typename V1, typename V2>
- void SuperLU_solve(const MAT &A, const V1& X, const V2& B, double& rcond_, int permc_spec = 3) {
+ int SuperLU_solve(const MAT &A, const V1& X, const V2& B, double& rcond_, int permc_spec = 3) {
typedef typename gmm::linalg_traits<MAT>::value_type T;
int m = int(mat_nrows(A)), n = int(mat_ncols(A));
@@ -69,11 +70,12 @@ namespace gmm {
std::vector<T> rhs(m), sol(m);
gmm::copy(B, rhs);
- SuperLU_solve(csc_A, &sol[0], &rhs[0], rcond_, permc_spec);
+ int info = SuperLU_solve(csc_A, &sol[0], &rhs[0], rcond_, permc_spec);
gmm::copy(sol, const_cast<V1 &>(X));
+ return info;
}
- class SuperLU_factor_impl_common;
+ struct SuperLU_factor_impl_common;
/** Factorization of a sparse matrix with SuperLU.
diff --git a/src/getfem_Coulomb_friction.cc b/src/getfem_Coulomb_friction.cc
deleted file mode 100644
index 68ec345..0000000
--- a/src/getfem_Coulomb_friction.cc
+++ /dev/null
@@ -1,1679 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2010 Yves Renard, Konstantinos Poulios.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
-
-
-#include "getfem/getfem_Coulomb_friction.h"
-
-#include <getfem/getfem_arch_config.h>
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
-#include <muParser/muParser.h>
-#elif GETFEM_HAVE_MUPARSER_H
-#include <muParser.h>
-#endif
-
-#ifdef GETFEM_HAVE_QHULL_QHULL_H
-#include <getfem/getfem_mesher.h>
-#else
-#include <getfem/bgeot_kdtree.h>
-#endif
-
-namespace getfem {
-
- typedef bgeot::convex<base_node>::ref_convex_pt_ct ref_convex_pt_ct;
- typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
- typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
-
- //=========================================================================
- //
- // Projection on a ball and gradient of the projection.
- //
- //=========================================================================
-
- template<typename VEC> static void ball_projection(const VEC &x,
- scalar_type radius) {
- scalar_type a = gmm::vect_norm2(x);
- if (radius <= 0) gmm::clear(const_cast<VEC&>(x));
- else if (a > radius) gmm::scale(const_cast<VEC&>(x), radius/a);
- }
-
- template<class VEC, class VECR>
- static void ball_projection_grad_r(const VEC &x, scalar_type radius,
- VECR &g) {
- scalar_type a = gmm::vect_norm2(x);
- if (radius > 0 && a >= radius)
- gmm::copy(gmm::scaled(x, scalar_type(1)/a), g);
- else gmm::clear(g);
- }
-
- template <class VEC, class MAT>
- static void ball_projection_grad(const VEC &x, double radius, MAT &g) {
- if (radius <= scalar_type(0)) { gmm::clear(g); return; }
- gmm::copy(gmm::identity_matrix(), g);
- scalar_type a = gmm::vect_norm2(x);
- if (a >= radius) {
- gmm::scale(g, radius/a);
- // gmm::rank_one_update(g, gmm::scaled(x, -radius/(a*a*a)), x);
- for (size_type i = 0; i < x.size(); ++i)
- for (size_type j = 0; j < x.size(); ++j)
- g(i,j) -= radius*x[i]*x[j] / (a*a*a);
- }
- }
-
- // Computation of an orthonormal basis to a unit vector.
- static void orthonormal_basis_to_unit_vec(size_type d, const base_node &un,
- base_node *ut) {
- size_type n = 0;
- for (size_type k = 0; k <= d && n < d; ++k) {
- gmm::resize(ut[n], d+1);
- gmm::clear(ut[n]);
- ut[n][k] = scalar_type(1);
-
- ut[n] -= gmm::vect_sp(un, ut[n]) * un;
- for (size_type nn = 0; nn < n; ++nn)
- ut[n] -= gmm::vect_sp(ut[nn], ut[n]) * ut[nn];
-
- if (gmm::vect_norm2(ut[n]) < 1e-3) continue;
- ut[n] /= gmm::vect_norm2(ut[n]);
- ++n;
- }
- GMM_ASSERT1(n == d, "Gram-Schmidt algorithm to find an "
- "orthonormal basis for the tangential displacement failed");
- }
-
- // "contact_node" is an object which contains data about nodes expected
- // to participate in a contact condition. A contact node refers to a
- // specific mesh_fem.
- struct contact_node {
- const mesh_fem *mf; // Pointer to the mesh_fem the contact node is
- // associated with
- size_type dof; // first dof id of the node in the considered mesh_fem
- std::vector<size_type> cvs; // list of ids of neigbouring convexes
- std::vector<short_type> fcs; // list of local ids of neigbouring faces
-
- contact_node() : mf(0), cvs(0), fcs(0) {}
- contact_node(const mesh_fem &mf_) {mf = &mf_;}
- };
-
- // contact_node's pair
- struct contact_node_pair {
- contact_node cn_s, cn_m; // Slave and master contact_node's
- scalar_type dist2; // Square of distance between slave and master nodes
- bool is_active;
- contact_node_pair(scalar_type threshold=10.) : cn_s(), cn_m()
- {dist2 = threshold * threshold; is_active = false;}
- };
-
- // contact_node's pair list
- class contact_node_pair_list : public std::vector<contact_node_pair> {
-
- void contact_node_list_from_region
- (const mesh_fem &mf, size_type contact_region,
- std::vector<contact_node> &cnl) {
-
- cnl.clear();
- const mesh &m = mf.linked_mesh();
- size_type qdim = mf.get_qdim();
- std::map<size_type, size_type> dof_to_cnid;
- size_type cnid = 0;
- dal::bit_vector dofs = mf.basic_dof_on_region(contact_region);
- for (dal::bv_visitor dof(dofs); !dof.finished(); ++dof)
- if ( dof % qdim == 0) {
- dof_to_cnid[dof] = cnid++;
- contact_node new_cn(mf);
- new_cn.dof = dof;
- cnl.push_back(new_cn);
- }
- for (mr_visitor face(m.region(contact_region));
- !face.finished(); ++face) {
- assert(face.is_face());
- mesh_fem::ind_dof_face_ct
- face_dofs = mf.ind_basic_dof_of_face_of_element(face.cv(),face.f());
- for (size_type it=0; it < face_dofs.size(); it += qdim ) {
- size_type dof = face_dofs[it];
- cnid = dof_to_cnid[dof];
- cnl[cnid].cvs.push_back(face.cv());
- cnl[cnid].fcs.push_back(face.f());
- } // for:it
- } // for:face
- } // append
-
- public:
- contact_node_pair_list() : std::vector<contact_node_pair>() {}
-
- void append_min_dist_cn_pairs(const mesh_fem &mf1, const mesh_fem &mf2,
- size_type rg1, size_type rg2,
- bool slave1=true, bool slave2=false) {
-
- std::vector<contact_node> cnl1(0), cnl2(0);
- contact_node_list_from_region(mf1, rg1, cnl1);
- contact_node_list_from_region(mf2, rg2, cnl2);
-
- // Find minimum distance node pairs
- size_type size0 = this->size();
- size_type size1 = slave1 ? cnl1.size() : 0;
- size_type size2 = slave2 ? cnl2.size() : 0;
- this->resize( size0 + size1 + size2 );
-# ifndef GETFEM_HAVE_QHULL_QHULL_H
- bgeot::kdtree tree1, tree2;
- for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
- contact_node *cn1 = &cnl1[i1];
- tree1.add_point_with_id(cn1->mf->point_of_basic_dof(cn1->dof), i1);
- }
- for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
- contact_node *cn2 = &cnl2[i2];
- tree2.add_point_with_id(cn2->mf->point_of_basic_dof(cn2->dof), i2);
- }
- if (slave1) {
- size_type ii1=size0;
- for (size_type i1 = 0; i1 < cnl1.size(); ++i1, ++ii1) {
- contact_node *cn1 = &cnl1[i1];
- base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
- bgeot::index_node_pair ipt;
- scalar_type dist2 = tree2.nearest_neighbor(ipt, node1);
- if (ipt.i > 0 && dist2 < (*this)[ii1].dist2) {
- (*this)[ii1].cn_s = *cn1;
- (*this)[ii1].cn_m = cnl2[ipt.i];
- (*this)[ii1].dist2 = dist2;
- (*this)[ii1].is_active = true;
- }
- }
- }
- if (slave2) {
- size_type ii2=size0+size1;
- for (size_type i2 = 0; i2 < cnl2.size(); ++i2, ++ii2) {
- contact_node *cn2 = &cnl2[i2];
- base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
- bgeot::index_node_pair ipt;
- scalar_type dist2 = tree1.nearest_neighbor(ipt, node2);
- if (ipt.i > 0 && dist2 < (*this)[ii2].dist2) {
- (*this)[ii2].cn_s = *cn2;
- (*this)[ii2].cn_m = cnl1[ipt.i];
- (*this)[ii2].dist2 = dist2;
- (*this)[ii2].is_active = true;
- }
- }
- }
-# else
- std::vector<base_node> pts;
- for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
- contact_node *cn1 = &cnl1[i1];
- pts.push_back(cn1->mf->point_of_basic_dof(cn1->dof));
- }
- for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
- contact_node *cn2 = &cnl2[i2];
- pts.push_back(cn2->mf->point_of_basic_dof(cn2->dof));
- }
- gmm::dense_matrix<size_type> simplexes;
-
- getfem::delaunay(pts, simplexes);
-
- size_type nb_vertices = gmm::mat_nrows(simplexes);
- std::vector<size_type> facet_vertices(nb_vertices);
- std::vector< std::vector<size_type> > pt1_neighbours(size1);
- for (size_type i = 0; i < gmm::mat_ncols(simplexes); ++i) {
- gmm::copy(gmm::mat_col(simplexes, i), facet_vertices);
- for (size_type iv1 = 0; iv1 < nb_vertices-1; ++iv1) {
- size_type v1 = facet_vertices[iv1];
- bool v1_on_surface1 = (v1 < size1);
- for (size_type iv2 = iv1 + 1; iv2 < nb_vertices; ++iv2) {
- size_type v2 = facet_vertices[iv2];
- bool v2_on_surface1 = (v2 < size1);
- if (v1_on_surface1 xor v2_on_surface1) {
- bool already_in = false;
- size_type vv1 = (v1_on_surface1 ? v1 : v2);
- size_type vv2 = (v2_on_surface1 ? v1 : v2);
- for (size_type j = 0; j < pt1_neighbours[vv1].size(); ++j)
- if (pt1_neighbours[vv1][j] == vv2) {
- already_in = true;
- break;
- }
- if (!already_in) pt1_neighbours[vv1].push_back(vv2);
- }
- }
- }
- }
-
- for (size_type i1 = 0; i1 < size1; ++i1)
- for (size_type j = 0; j < pt1_neighbours[i1].size(); ++j) {
- size_type i2 = pt1_neighbours[i1][j] - size1;
- size_type ii1 = size0 + i1;
- size_type ii2 = size0 + size1 + i2;
- contact_node *cn1 = &cnl1[i1];
- base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
- contact_node *cn2 = &cnl2[i2];
- base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
- scalar_type dist2 = gmm::vect_norm2_sqr(node1-node2);
- if (slave1 && dist2 < (*this)[ii1].dist2) {
- (*this)[ii1].cn_s = *cn1;
- (*this)[ii1].cn_m = *cn2;
- (*this)[ii1].dist2 = dist2;
- (*this)[ii1].is_active = true;
- }
- if (slave2 && dist2 < (*this)[ii2].dist2) {
- (*this)[ii2].cn_s = *cn2;
- (*this)[ii2].cn_m = *cn1;
- (*this)[ii2].dist2 = dist2;
- (*this)[ii2].is_active = true;
- }
- }
-#endif
- }
-
- void append_min_dist_cn_pairs(const mesh_fem &mf,
- size_type rg1, size_type rg2,
- bool slave1=true, bool slave2=false) {
- append_min_dist_cn_pairs(mf, mf, rg1, rg2, slave1, slave2);
- }
- };
-
- scalar_type projection_on_convex_face
- (const mesh &m, const size_type cv, const short_type fc,
- const base_node &master_node, const base_node &slave_node,
- base_node &un, base_node &proj_node, base_node &proj_node_ref) {
-
- bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
-
- if (pgt->is_linear()) { //this condition is practically too strict
-
- un = m.normal_of_face_of_convex(cv,fc);
- un /= gmm::vect_norm2(un);
- //proj_node = slave_node - [(slave_node-master_node)*n] * n
- gmm::add(master_node, gmm::scaled(slave_node, -1.), proj_node);
- gmm::copy(gmm::scaled(un, gmm::vect_sp(proj_node, un)), proj_node);
- gmm::add(slave_node, proj_node);
-
- bgeot::geotrans_inv_convex gic;
- gic.init(m.points_of_convex(cv), pgt);
- gic.invert(proj_node, proj_node_ref);
- return pgt->convex_ref()->is_in(proj_node_ref);
-
- } else {
-
- size_type N = m.dim();
- size_type P = pgt->structure()->dim();
- size_type nb_pts_cv = pgt->nb_points();
- size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
- bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
- ref_mesh_face_pt_ct pts_fc = m.points_of_face_of_convex(cv, fc);
- ref_convex_pt_ct ref_pts_fc = pgt->convex_ref()->points_of_face(fc);
- dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
- GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
-
- // Local base on reference face
- std::vector<base_node> base_vecs_fc(P-1);
- for (size_type i = 0; i < P-1; ++i)
- base_vecs_fc[i] = dref_pts_fc[i+1] - dref_pts_fc[0];
-
- base_vector val(nb_pts_cv);
- base_matrix pc_cv(nb_pts_cv, P);
- base_matrix pc_fc(nb_pts_fc, P-1), G(N, nb_pts_fc);
- base_matrix K(N,P-1), KK(N,P), B(N,P-1), BB(N,P), CS(P-1,P-1);
- base_matrix base_mat_fc(P-1,N);
- vectors_to_base_matrix(G, pts_fc);
- vectors_to_base_matrix(K, base_vecs_fc);
- gmm::copy(gmm::transposed(K),base_mat_fc);
- gmm::clear(K);
-
- GMM_ASSERT1( slave_node.size() == N, "Dimensions mismatch");
- const base_node &xx = slave_node;
- base_node &xxp = proj_node; xxp.resize(N);
- base_node &xp = proj_node_ref; xp.resize(P);
- base_node vres(P);
- scalar_type res= 1.;
-
- xp = gmm::mean_value(ref_pts_fc);
- gmm::clear(xxp);
- pgt->poly_vector_val(xp, val);
- for (size_type l = 0; l < nb_pts_fc; ++l)
- gmm::add(gmm::scaled(pts_fc[l], val[ ind_pts_fc[l] ] ), xxp);
-
- scalar_type EPS = 10E-12;
- unsigned cnt = 50;
- while (res > EPS && --cnt) {
- // computation of the pseudo inverse matrix B at point xp
- pgt->poly_vector_grad(xp, pc_cv); // Non-optimized
- for (size_type i = 0; i < nb_pts_fc; ++i) // computation
- for (size_type j = 0; j < P-1; ++j) // of pc_fc
- pc_fc(i,j) = gmm::vect_sp(gmm::mat_row(pc_cv, ind_pts_fc[i]),
- base_vecs_fc[j]);
- gmm::mult(G,pc_fc,K);
- gmm::mult(gmm::transposed(K), K, CS);
- gmm::lu_inverse(CS);
- gmm::mult(K, CS, B);
- gmm::mult(B, base_mat_fc, BB);
-
- // Projection onto the face of convex
- gmm::mult_add(gmm::transposed(BB), xx-xxp, xp);
- gmm::clear(xxp);
- pgt->poly_vector_val(xp, val);
- for (size_type l = 0; l < nb_pts_fc; ++l)
- gmm::add(gmm::scaled(pts_fc[l], val[ind_pts_fc[l]]), xxp);
-
- gmm::mult(gmm::transposed(BB), xx - xxp, vres);
- res = gmm::vect_norm2(vres);
- }
- GMM_ASSERT1( res <= EPS,
- "Iterative pojection on convex face did not converge");
-
- // computation of normal vector
- un.resize(N);
-// un = xx - xxp;
-// gmm::scale(un, 1/gmm::vect_norm2(un));
-
- gmm::clear(un);
- gmm::sub_index SUB_PTS_FC = gmm::sub_index(ind_pts_fc);
- gmm::mult(G, gmm::sub_matrix(pc_cv, SUB_PTS_FC, gmm::sub_interval(0, P)), KK);
- base_matrix bases_product(P-1, P);
- gmm::mult(gmm::transposed(K), KK, bases_product);
- for (size_type i = 0; i < P; ++i) {
- std::vector<size_type> ind(0);
- for (size_type j = 0; j < P; ++j)
- if (j != i ) ind.push_back(j);
- scalar_type
- det = gmm::lu_det(gmm::sub_matrix(bases_product,
- gmm::sub_interval(0, P-1),
- gmm::sub_index(ind) ) );
- gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), un);
- }
- gmm::scale(un, 1/gmm::vect_norm2(un));
-
- if (gmm::vect_sp(un, gmm::mean_value(pts_fc) -
- gmm::mean_value(m.points_of_convex(cv))) < 0)
- gmm::scale(un,scalar_type(-1));
-
- return pgt->convex_ref()->is_in(proj_node_ref);
- }
- }
-
- void compute_contact_matrices
- (const mesh_fem &mf_disp1, const mesh_fem &mf_disp2,
- contact_node_pair_list &cnpl, model_real_plain_vector &gap,
- CONTACT_B_MATRIX *BN1, CONTACT_B_MATRIX *BN2 = 0,
- CONTACT_B_MATRIX *BT1 = 0, CONTACT_B_MATRIX *BT2 = 0) {
-
- GMM_ASSERT1(gmm::vect_size(gap) == cnpl.size(),
- "Wrong number of contact node pairs or wrong size of gap");
- gmm::clear(*BN1);
- GMM_ASSERT1( gmm::mat_nrows(*BN1) == cnpl.size(), "Wrong size of BN1");
- if (BN2) {
- gmm::clear(*BN2);
- GMM_ASSERT1( gmm::mat_nrows(*BN2) == cnpl.size(), "Wrong size of BN2");
- }
- dim_type qdim = mf_disp1.get_qdim();
- size_type d = qdim - 1;
- if (BT1) {
- gmm::clear(*BT1);
- GMM_ASSERT1( gmm::mat_nrows(*BT1) == cnpl.size() * d, "Wrong size of BT1");
- }
- if (BT2) {
- gmm::clear(*BT2);
- GMM_ASSERT1( gmm::mat_nrows(*BT2) == cnpl.size() * d, "Wrong size of BT2");
- }
- gmm::fill(gap, scalar_type(10)); //FIXME: Needs a threshold value
- for (size_type row = 0; row < cnpl.size(); ++row) {
- contact_node_pair *cnp = &cnpl[row];
- if (cnp->is_active) {
- contact_node *cn_s = &cnp->cn_s; //slave contact node
- contact_node *cn_m = &cnp->cn_m; //master contact node
- const mesh &mesh_m = cn_m->mf->linked_mesh();
- base_node slave_node = cn_s->mf->point_of_basic_dof(cn_s->dof);
- base_node master_node = cn_m->mf->point_of_basic_dof(cn_m->dof);
- base_node un_sel(3), proj_node_sel(3), proj_node_ref_sel(3);
- scalar_type is_in_min = 1e5; //FIXME
- size_type cv_sel = 0, fc_sel = 0;
- std::vector<size_type>::iterator cv;
- std::vector<short_type>::iterator fc;
- for (cv = cn_m->cvs.begin(), fc = cn_m->fcs.begin();
- cv != cn_m->cvs.end() && fc != cn_m->fcs.end(); cv++, fc++) {
- base_node un(3), proj_node(3), proj_node_ref(3);
- scalar_type is_in = projection_on_convex_face
- (mesh_m, *cv, *fc, master_node, slave_node, un, proj_node, proj_node_ref);
- if (is_in < is_in_min) {
- is_in_min = is_in;
- cv_sel = *cv;
- fc_sel = *fc;
- un_sel = un;
- proj_node_sel = proj_node;
- proj_node_ref_sel = proj_node_ref;
- }
- }
- if (is_in_min < 0.05) { //FIXME
- gap[row] = gmm::vect_sp(slave_node-proj_node_sel, un_sel);
-
- base_node ut[3];
- if (BT1) orthonormal_basis_to_unit_vec(d, un_sel, ut);
-
- CONTACT_B_MATRIX *BN = 0;
- CONTACT_B_MATRIX *BT = 0;
- if (cn_s->mf == &mf_disp1) {
- BN = BN1;
- BT = BT1;
- } else if (cn_s->mf == &mf_disp2) {
- BN = BN2;
- BT = BT2;
- }
- if (BN)
- for (size_type k = 0; k <= d; ++k)
- (*BN)(row, cn_s->dof + k) -= un_sel[k];
- if (BT)
- for (size_type k = 0; k <= d; ++k)
- for (size_type n = 0; n < d; ++n)
- (*BT)(row * d + n, cn_s->dof + k) -= ut[n][k];
-
- BN = 0;
- const mesh_fem *mf_disp = 0;
- if (cn_m->mf == &mf_disp1) {
- BN = BN1;
- BT = BT1;
- mf_disp = &mf_disp1;
- } else if (cn_m->mf == &mf_disp2) {
- BN = BN2;
- BT = BT2;
- mf_disp = &mf_disp2;
- }
- if (BN) {
- base_matrix G;
- base_matrix M(qdim, mf_disp->nb_basic_dof_of_element(cv_sel));
- bgeot::vectors_to_base_matrix(G, mesh_m.points_of_convex(cv_sel));
- pfem pf = mf_disp->fem_of_element(cv_sel);
- bgeot::pgeometric_trans pgt = mesh_m.trans_of_convex(cv_sel);
- fem_interpolation_context
- ctx(pgt, pf, proj_node_ref_sel, G, cv_sel, fc_sel);
- pf->interpolation (ctx, M, qdim);
-
- mesh_fem::ind_dof_ct
- master_dofs = mf_disp->ind_basic_dof_of_element(cv_sel);
-
- model_real_plain_vector MT_u(mf_disp->nb_basic_dof_of_element(cv_sel));
- gmm::mult(gmm::transposed(M), un_sel, MT_u);
- for (size_type j = 0; j < master_dofs.size(); ++j)
- (*BN)(row, master_dofs[j]) += MT_u[j];
-
- if (BT) {
- for (size_type n = 0; n < d; ++n) {
- gmm::mult(gmm::transposed(M), ut[n], MT_u);
- for (size_type j = 0; j < master_dofs.size(); ++j)
- (*BT)(row * d + n, master_dofs[j]) += MT_u[j];
- }
- }
- } // BN
-
- }
- } // if:cnp->cn_s
- } // cnp
-
- } // compute_contact_matrices
-
-
-
- //=========================================================================
- //
- // Basic Brick (with given BN, BT, gap) and possibly two bodies
- //
- //=========================================================================
-
- struct Coulomb_friction_brick : public virtual_brick {
-
- mutable CONTACT_B_MATRIX BN1, BT1, BN2, BT2;
- mutable CONTACT_B_MATRIX DN, DDN, DT, DDT; // For Hughes stabilization
- mutable CONTACT_B_MATRIX BBN1, BBT1, BBN2, BBT2;
- mutable model_real_plain_vector gap, threshold, friction_coeff, alpha;
- mutable model_real_plain_vector RLN, RLT;
- mutable scalar_type r, gamma;
- mutable bool is_init;
- bool Tresca_version, symmetrized, contact_only;
- bool really_stationary, friction_dynamic_term;
- bool two_variables, Hughes_stabilized;
-
- void init_BBN_BBT(void) const {
- gmm::resize(BBN1, gmm::mat_nrows(BN1), gmm::mat_ncols(BN1));
- gmm::copy(BN1, BBN1);
- if (Hughes_stabilized) {
- gmm::resize(DDN, gmm::mat_nrows(DN), gmm::mat_ncols(DN));
- gmm::copy(DN, DDN);
- }
- if (two_variables) {
- gmm::resize(BBN2, gmm::mat_nrows(BN2), gmm::mat_ncols(BN2));
- gmm::copy(BN2, BBN2);
- }
- if (!contact_only) {
- if (Hughes_stabilized) {
- gmm::resize(DDT, gmm::mat_nrows(DT), gmm::mat_ncols(DT));
- gmm::copy(DT, DDT);
- }
- gmm::resize(BBT1, gmm::mat_nrows(BT1), gmm::mat_ncols(BT1));
- gmm::copy(BT1, BBT1);
- if (two_variables) {
- gmm::resize(BBT2, gmm::mat_nrows(BT2), gmm::mat_ncols(BT2));
- gmm::copy(BT2, BBT2);
- }
- }
- size_type nbc = gmm::mat_nrows(BN1);
- size_type d = gmm::mat_nrows(BT1)/nbc;
- for (size_type i = 0; i < nbc; ++i) {
- gmm::scale(gmm::mat_row(BBN1, i), alpha[i]);
- if (Hughes_stabilized) gmm::scale(gmm::mat_row(DDN, i), alpha[i]);
- if (two_variables)
- gmm::scale(gmm::mat_row(BBN2, i), alpha[i]);
- if (!contact_only)
- for (size_type k = 0; k < d; ++k) {
- if (Hughes_stabilized)
- gmm::scale(gmm::mat_row(DDT, d*i+k), alpha[i]);
- gmm::scale(gmm::mat_row(BBT1, d*i+k), alpha[i]);
- if (two_variables)
- gmm::scale(gmm::mat_row(BBT2, d*i+k), alpha[i]);
- }
- }
- is_init = true;
- }
-
- void precomp(const model_real_plain_vector &u1,
- const model_real_plain_vector &u2,
- const model_real_plain_vector &lambda_n,
- const model_real_plain_vector &lambda_t,
- const model_real_plain_vector &wt1,
- const model_real_plain_vector &wt2) const {
- gmm::resize(RLN, gmm::mat_nrows(BN1));
- if (!contact_only) gmm::resize(RLT, gmm::mat_nrows(BT1));
-
- gmm::copy(gmm::scaled(gap, r), RLN);
- for (size_type i = 0; i < gmm::mat_nrows(BN1); ++i) RLN[i] *= alpha[i];
- gmm::add(lambda_n, RLN);
- gmm::mult_add(BBN1, gmm::scaled(u1, -r), RLN);
- if (Hughes_stabilized)
- gmm::mult_add(DDN, gmm::scaled(lambda_n, -r), RLN);
- if (two_variables) gmm::mult_add(BBN2, gmm::scaled(u2, -r), RLN);
- if (!contact_only) {
- gmm::copy(lambda_t, RLT);
- if (friction_dynamic_term) {
- gmm::mult_add(BBT1, gmm::scaled(wt1, -r*gamma), RLT);
- if (two_variables)
- gmm::mult_add(BBT2, gmm::scaled(wt2, -r*gamma), RLT);
- }
- if (!really_stationary) {
- gmm::mult_add(BBT1, gmm::scaled(u1, -r), RLT);
- if (two_variables) gmm::mult_add(BBT2, gmm::scaled(u2, -r), RLT);
- }
- if (Hughes_stabilized)
- gmm::mult_add(DDT, gmm::scaled(lambda_t, -r), RLT);
- }
- }
-
- // Common part for all contact with friction bricks
- void basic_asm_real_tangent_terms(const model_real_plain_vector &u1,
- const model_real_plain_vector &u2,
- const model_real_plain_vector &lambda_n,
- const model_real_plain_vector &lambda_t,
- const model_real_plain_vector &wt1,
- const model_real_plain_vector &wt2,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- build_version version) const {
- size_type nbt = 4 + (contact_only ? 0 : 4) + (two_variables ? 3 : 0)
- + (two_variables && !contact_only ? 2 : 0);
- GMM_ASSERT1(matl.size() == nbt,
- "Wrong number of terms for the contact brick");
-
- const scalar_type vt1 = scalar_type(1);
- size_type nbc = gmm::mat_nrows(BN1);
- size_type d = gmm::mat_nrows(BT1)/nbc;
-
- // Matrices to be filled
- size_type nt = 0;
- model_real_sparse_matrix &T_u1_u1 = matl[nt++], &T_u2_u2 = matl[nt++];
- if (!two_variables) nt--;
- model_real_sparse_matrix &T_u1_n = matl[nt++], &T_n_u1 = matl[nt++];
- if (!two_variables) nt -= 2;
- model_real_sparse_matrix &T_u2_n = matl[nt++], &T_n_u2 = matl[nt++];
- size_type nvec_lambda_n = nt;
- model_real_sparse_matrix &T_n_n = matl[nt++];
- if (contact_only) nt -= 2;
- model_real_sparse_matrix &T_u1_t = matl[nt++], &T_t_u1 = matl[nt++];
- if (contact_only || !two_variables) nt -= 2;
- model_real_sparse_matrix &T_u2_t = matl[nt++], &T_t_u2 = matl[nt++];
- if (contact_only) nt -= 2;
- size_type nvec_lambda_t = nt;
- model_real_sparse_matrix &T_t_t = matl[nt++], &T_t_n = matl[nt++];
-
- // Rhs to be filled
- model_real_plain_vector &ru1 = vecl[0];
- model_real_plain_vector &ru2 = vecl[1];
- model_real_plain_vector &rlambda_n = vecl[nvec_lambda_n];
- model_real_plain_vector &rlambda_t = vecl[nvec_lambda_t];
-
- // pre-computations
- if (!is_init) init_BBN_BBT();
- precomp(u1, u2, lambda_n, lambda_t, wt1, wt2);
-
- if (version & model::BUILD_MATRIX) {
- // Unilateral contact
- gmm::clear(T_n_n); gmm::clear(T_u1_u1);
- if (two_variables) gmm::clear(T_u2_u2);
- gmm::copy(gmm::scaled(gmm::transposed(BBN1), -vt1), T_u1_n);
- if (two_variables)
- gmm::copy(gmm::scaled(gmm::transposed(BBN2), -vt1), T_u2_n);
- for (size_type i=0; i < nbc; ++i) {
- if (RLN[i] >= scalar_type(0)) {
- gmm::clear(gmm::mat_col(T_u1_n, i));
- if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
- T_n_n(i, i) = -vt1/r;
- }
- else {
- if (Hughes_stabilized)
- gmm::copy(gmm::scaled(gmm::mat_row(DDN, i), -vt1), gmm::mat_col(T_n_n, i));
- }
- }
- if (Hughes_stabilized) {
- model_real_sparse_matrix aux(gmm::mat_nrows(T_n_n), gmm::mat_nrows(T_n_n));
- gmm::copy(gmm::transposed(T_n_n), aux);
- gmm::copy(aux, T_n_n);
- }
- gmm::copy(gmm::transposed(T_u1_n), T_n_u1);
- if (two_variables) gmm::copy(gmm::transposed(T_u2_n), T_n_u2);
-
- // Friction
- if (!contact_only) {
- base_matrix pg(d, d);
- base_vector vg(d);
- gmm::clear(T_u1_t); gmm::clear(T_t_n); gmm::clear(T_t_t);
- if (two_variables) gmm::clear(T_u2_t);
-
- for (size_type i=0; i < nbc; ++i) {
- gmm::sub_interval SUBI(i*d, d);
- scalar_type th = Tresca_version ? threshold[i]
- : - lambda_n[i] * friction_coeff[i];
- ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
- if (!really_stationary)
- for (size_type k1 = 0; k1 < d; ++k1)
- for (size_type k2 = 0; k2 < d; ++k2) {
- gmm::add(gmm::scaled(gmm::mat_row(BBT1, i*d+k1), -pg(k2,k1)),
- gmm::mat_col(T_u1_t, i*d+k2));
- if (two_variables)
- gmm::add(gmm::scaled(gmm::mat_row(BBT2, i*d+k1), -pg(k2,k1)),
- gmm::mat_col(T_u2_t, i*d+k2));
- }
-
- if (!Tresca_version) {
- ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
- for (size_type k = 0; k < d; ++k)
- T_t_n(i*d+k, i) = - friction_coeff[i] * vg[k] / r;
- }
- for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
- if (Hughes_stabilized) {
- for (size_type k = 0; k < d; ++k)
- for (size_type l = 0; l < d; ++l) {
- gmm::add(gmm::scaled(gmm::mat_row(DDT, d*i+l), -pg(k,l)),
- gmm::mat_col(T_t_t, d*i+k));
- T_t_t(d*i+l, d*i+k) += pg(k,l) / r;
- }
- } else
- gmm::copy(gmm::scaled(pg, vt1/r), gmm::sub_matrix(T_t_t, SUBI));
-
- }
- if (Hughes_stabilized) {
- model_real_sparse_matrix aux(gmm::mat_nrows(T_t_t), gmm::mat_nrows(T_t_t));
- gmm::copy(gmm::transposed(T_t_t), aux);
- gmm::copy(aux, T_t_t);
- }
- gmm::copy(gmm::transposed(T_u1_t), T_t_u1);
- if (two_variables) gmm::copy(gmm::transposed(T_u2_t), T_t_u2);
- }
-
- if (symmetrized) {
- // gmm::copy(gmm::transposed(T_n_u1), T_u1_n); // already done
- // gmm::copy(gmm::transposed(T_n_u2), T_u2_n); // already done
- model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
- gmm::mat_ncols(BN1));
- model_real_sparse_matrix tmp2(gmm::mat_ncols(BN2),
- gmm::mat_ncols(BN2));
- gmm::mult(gmm::transposed(gmm::scaled(BBN1,-r)), T_n_u1, tmp1);
- gmm::add(tmp1, T_u1_u1);
- if (two_variables) {
- gmm::mult(gmm::transposed(gmm::scaled(BBN2,-r)), T_n_u2, tmp2);
- gmm::add(tmp2, T_u2_u2);
- }
-
- if (!contact_only) {
- // gmm::copy(gmm::transposed(T_t_u1), T_u1_t); // already done
- // gmm::copy(gmm::transposed(T_t_u2), T_u2_t); // already done
- gmm::mult(gmm::transposed(gmm::scaled(BBT1,-r)), T_t_u1, tmp1);
- gmm::add(tmp1, T_u1_u1);
- if (two_variables) {
- gmm::mult(gmm::transposed(gmm::scaled(BBT2,-r)), T_t_u2, tmp2);
- gmm::add(tmp2, T_u2_u2);
- }
- }
- }
- else {
- gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
- if (two_variables)
- gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
- if (!contact_only) {
- gmm::copy(gmm::scaled(gmm::transposed(BT1), -vt1), T_u1_t);
- if (two_variables)
- gmm::copy(gmm::scaled(gmm::transposed(BT2), -vt1), T_u2_t);
- }
- }
- }
-
- if (version & model::BUILD_RHS) {
- for (size_type i=0; i < nbc; ++i) {
- RLN[i] = std::min(scalar_type(0), RLN[i]);
- if (!contact_only) {
- scalar_type radius = Tresca_version ? threshold[i]
- : -friction_coeff[i]*lambda_n[i];
- ball_projection
- (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
- }
- }
-
- if (symmetrized) {
- gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
- if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
- if (!contact_only) {
- gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
- if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
- }
- } else {
- gmm::mult_add(gmm::transposed(BN1), lambda_n, ru1);
- if (two_variables)
- gmm::mult_add(gmm::transposed(BN2), lambda_n, ru2);
- if (!contact_only) {
- gmm::mult_add(gmm::transposed(BT1), lambda_t, ru1);
- if (two_variables)
- gmm::mult_add(gmm::transposed(BT2), lambda_t, ru2);
- }
- }
-
- gmm::add(gmm::scaled(lambda_n, vt1/r), gmm::scaled(RLN,-vt1/r),
- rlambda_n);
-
- if (!contact_only)
- gmm::add(gmm::scaled(lambda_t, vt1/r), gmm::scaled(RLT,-vt1/r),
- rlambda_t);
- }
- }
-
- // specific part for the basic bricks : BN, BT, gap, r, alpha are given.
- virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type /* region */,
- build_version version) const {
- GMM_ASSERT1(mims.size() == 0, "Contact brick need no mesh_im");
- size_type nbvar = 2 + (contact_only ? 0 : 1) + (two_variables ? 1 : 0);
- GMM_ASSERT1(vl.size() == nbvar,
- "Wrong number of variables for contact brick");
- size_type nbdl = 3 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
- + (friction_dynamic_term ? 1 : 0);
- GMM_ASSERT1(dl.size() == nbdl, "Wrong number of data for contact brick, "
- << dl.size() << " should be " << nbdl);
-
- size_type nbc = gmm::mat_nrows(BN1);
-
- // Variables
- // Without friction and one displacement : u1, lambda_n
- // Without friction and two displacements : u1, u2, lambda_n
- // With friction and one displacement : u1, lambda_n, lambda_t
- // With friction and two displacements : u1, u2, lambda_n, lambda_t
- size_type nv = 0;
- const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
- const model_real_plain_vector &u2 = md.real_variable(vl[nv++]);
- if (!two_variables) nv--;
- const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
- if (contact_only) nv--;
- const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
- // Parameters
- // (order : r, gap, alpha, friction_coeff, gamma, wt, threshold)
- size_type np = 0, np_wt1 = 0, np_wt2 = 0, np_alpha = 0;
- const model_real_plain_vector &vr = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
- r = vr[0];
- const model_real_plain_vector &vgap = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vgap) == 1 || gmm::vect_size(vgap) == nbc,
- "Parameter gap has a wrong size");
- gmm::resize(gap, nbc);
- if (gmm::vect_size(vgap) == 1)
- gmm::fill(gap, vgap[0]);
- else
- gmm::copy(vgap, gap);
- np_alpha = np++;
- const model_real_plain_vector &valpha = md.real_variable(dl[np_alpha]);
- GMM_ASSERT1(gmm::vect_size(valpha)== 1 || gmm::vect_size(valpha) == nbc,
- "Parameter alpha has a wrong size");
- gmm::resize(alpha, nbc);
- if (gmm::vect_size(valpha) == 1)
- gmm::fill(alpha, valpha[0]);
- else
- gmm::copy(valpha, alpha);
- if (!contact_only) {
- const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
- "Parameter friction_coeff has a wrong size");
- gmm::resize(friction_coeff, nbc);
- if (gmm::vect_size(vfr) == 1)
- gmm::fill(friction_coeff, vfr[0]);
- else
- gmm::copy(vfr, friction_coeff);
- if (friction_dynamic_term) {
- const model_real_plain_vector &vg = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vg) == 1,
- "Parameter gamma should be a scalar");
- gamma = vg[0];
- np_wt1 = np++;
- if (two_variables) np_wt2 = np++;
- }
- if (Tresca_version) {
- const model_real_plain_vector &vth = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
- "Parameter threshold has a wrong size");
- gmm::resize(threshold, nbc);
- if (gmm::vect_size(vth) == 1)
- gmm::fill(threshold, vth[0]);
- else
- gmm::copy(vth, threshold);
- }
- }
-
- if (md.is_var_newer_than_brick(dl[np_alpha], ib)) is_init = false;
-
- basic_asm_real_tangent_terms
- (u1, u2, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
- md.real_variable(dl[np_wt2]), matl, vecl, version);
-
- }
-
- Coulomb_friction_brick(bool symmetrized_, bool contact_only_,
- bool two_variables_=false,
- bool Hughes_stabilized_=false) {
- symmetrized = symmetrized_;
- contact_only = contact_only_;
- is_init = false;
- Tresca_version = false; // for future version ...
- really_stationary = false; // for future version ...
- friction_dynamic_term = false; // for future version ...
- two_variables = two_variables_;
- Hughes_stabilized = Hughes_stabilized_;
- set_flags("Coulomb friction brick", false /* is linear*/,
- /* is symmetric */
- symmetrized && (contact_only || Tresca_version),
- false /* is coercive */, true /* is real */,
- false /* is complex */);
- }
-
- void set_BN1(CONTACT_B_MATRIX &BN1_) {
- gmm::resize(BN1, gmm::mat_nrows(BN1_), gmm::mat_ncols(BN1_));
- gmm::copy(BN1_, BN1);
- is_init = false;
- }
-
- void set_DN(CONTACT_B_MATRIX &DN_) {
- gmm::resize(DN, gmm::mat_nrows(DN_), gmm::mat_ncols(DN_));
- gmm::copy(DN_, DN);
- is_init = false;
- }
-
- void set_DT(CONTACT_B_MATRIX &DT_) {
- gmm::resize(DT, gmm::mat_nrows(DT_), gmm::mat_ncols(DT_));
- gmm::copy(DT_, DT);
- is_init = false;
- }
-
- void set_BT1(CONTACT_B_MATRIX &BT1_) {
- gmm::resize(BT1, gmm::mat_nrows(BT1_), gmm::mat_ncols(BT1_));
- gmm::copy(BT1_, BT1);
- is_init = false;
- }
-
- CONTACT_B_MATRIX &get_BN1(void) { return BN1; }
- CONTACT_B_MATRIX &get_DN(void) { return DN; }
- CONTACT_B_MATRIX &get_DT(void) { return DT; }
- CONTACT_B_MATRIX &get_BT1(void) { return BT1; }
- const CONTACT_B_MATRIX &get_BN1(void) const { return BN1; }
- const CONTACT_B_MATRIX &get_DN(void) const { return DN; }
- const CONTACT_B_MATRIX &get_BT1(void) const { return BT1; }
-
- };
-
-
- CONTACT_B_MATRIX &contact_brick_set_BN
- (model &md, size_type indbrick) {
- pbrick pbr = md.brick_pointer(indbrick);
- md.touch_brick(indbrick);
- Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
- (const_cast<virtual_brick *>(pbr.get()));
- GMM_ASSERT1(p, "Wrong type of brick");
- return p->get_BN1();
- }
-
-
- CONTACT_B_MATRIX &contact_brick_set_DN
- (model &md, size_type indbrick) {
- pbrick pbr = md.brick_pointer(indbrick);
- md.touch_brick(indbrick);
- Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
- (const_cast<virtual_brick *>(pbr.get()));
- GMM_ASSERT1(p, "Wrong type of brick");
- return p->get_DN();
- }
-
- CONTACT_B_MATRIX &contact_brick_set_DT
- (model &md, size_type indbrick) {
- pbrick pbr = md.brick_pointer(indbrick);
- md.touch_brick(indbrick);
- Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
- (const_cast<virtual_brick *>(pbr.get()));
- GMM_ASSERT1(p, "Wrong type of brick");
- return p->get_DT();
- }
-
-
- CONTACT_B_MATRIX &contact_brick_set_BT
- (model &md, size_type indbrick) {
- pbrick pbr = md.brick_pointer(indbrick);
- md.touch_brick(indbrick);
- Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
- (const_cast<virtual_brick *>(pbr.get()));
- GMM_ASSERT1(p, "Wrong type of brick");
- return p->get_BT1();
- }
-
-
- //=========================================================================
- // Add a frictionless contact condition with BN, r, alpha given.
- //=========================================================================
-
- size_type add_basic_contact_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &dataname_r, CONTACT_B_MATRIX &BN,
- std::string dataname_gap, std::string dataname_alpha,
- bool symmetrized, bool Hughes_stabilized) {
- Coulomb_friction_brick *pbr_=new Coulomb_friction_brick(symmetrized, true, false,
- Hughes_stabilized);
- pbr_->set_BN1(BN);
- pbrick pbr = pbr_;
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u, varname_u, false));
- tl.push_back(model::term_description(varname_u, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u, false));
- tl.push_back(model::term_description(multname_n, multname_n, false));
- model::varnamelist dl(1, dataname_r);
-
- if (dataname_gap.size() == 0) {
- dataname_gap = md.new_name("contact_gap_on_" + varname_u);
- md.add_initialized_fixed_size_data
- (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
- }
- dl.push_back(dataname_gap);
-
- if (dataname_alpha.size() == 0) {
- dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
- md.add_initialized_fixed_size_data
- (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
- }
- dl.push_back(dataname_alpha);
-
- model::varnamelist vl(1, varname_u);
- vl.push_back(multname_n);
-
- return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
- }
-
-
- //=========================================================================
- // Add a contact with friction condition with BN, r, alpha given.
- //=========================================================================
-
- size_type add_basic_contact_with_friction_brick
- (model &md, const std::string &varname_u, const std::string &multname_n,
- const std::string &multname_t, const std::string &dataname_r,
- CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
- std::string dataname_friction_coeff,
- std::string dataname_gap, std::string dataname_alpha,
- bool symmetrized, bool Hughes_stabilized) {
- Coulomb_friction_brick *pbr_=new Coulomb_friction_brick(symmetrized, false, false,
- Hughes_stabilized);
- pbr_->set_BN1(BN);
- pbr_->set_BT1(BT);
- pbrick pbr = pbr_;
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u, varname_u, false));
- tl.push_back(model::term_description(varname_u, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u, false));
- tl.push_back(model::term_description(multname_n, multname_n, false));
- tl.push_back(model::term_description(varname_u, multname_t, false));
- tl.push_back(model::term_description(multname_t, varname_u, false));
- tl.push_back(model::term_description(multname_t, multname_t, false));
- tl.push_back(model::term_description(multname_t, multname_n, false));
- model::varnamelist dl(1, dataname_r);
- if (dataname_gap.size() == 0) {
- dataname_gap = md.new_name("contact_gap_on_" + varname_u);
- md.add_initialized_fixed_size_data
- (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
- }
- dl.push_back(dataname_gap);
-
- if (dataname_alpha.size() == 0) {
- dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
- md.add_initialized_fixed_size_data
- (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
- }
- dl.push_back(dataname_alpha);
- dl.push_back(dataname_friction_coeff);
-
- model::varnamelist vl(1, varname_u);
- vl.push_back(multname_n);
- vl.push_back(multname_t);
-
- return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
- }
-
-
- //=========================================================================
- //
- // Brick with a given rigid obstacle (one body, build BN, BT, gap, alpha)
- //
- //=========================================================================
- // TODO : add an option for a weak contact condition
-
- struct Coulomb_friction_brick_rigid_obstacle
- : public Coulomb_friction_brick {
-
- std::string obstacle; // obstacle given with a signed distance expression.
-
- public :
-
- virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
- GMM_ASSERT1(mims.size() == 1, "This contact brick needs one mesh_im");
- size_type nbvar = 2 + (contact_only ? 0 : 1);
- GMM_ASSERT1(vl.size() == nbvar,
- "Wrong number of variables for contact brick: "
- << vl.size() << " should be " << nbvar);
- size_type nbdl = 1 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
- + (friction_dynamic_term ? 1 : 0);
- GMM_ASSERT1(dl.size() == nbdl,
- "Wrong number of data for contact brick: "
- << dl.size() << " should be " << nbdl);
- GMM_ASSERT1(!two_variables, "internal error");
- const mesh_im &mim = *mims[0];
-
- // Variables
- // Without friction and one displacement : u1, lambda_n
- // With friction and one displacement : u1, lambda_n, lambda_t
- size_type nv = 0;
- const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
- const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
- const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
- if (contact_only) nv--;
- const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
-
- // Parameters (order : r, friction_coeff, gamma, wt, threshold)
- size_type np = 0, np_wt1 = 0, nbc;
- const model_real_plain_vector &vr = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
- r = vr[0];
-
- // Computation of BN, BT, gap and alpha
- if (md.is_var_mf_newer_than_brick(vl[0], ib)) {
-
- // Verification that mf_u1 is a pure Lagrange fem.
- GMM_ASSERT1(!(mf_u1.is_reduced()),
- "This contact brick works only for pure Lagrange fems");
- dal::bit_vector dofs = mf_u1.basic_dof_on_region(region);
- for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
- size_type cv = mf_u1.first_convex_of_basic_dof(id);
- GMM_ASSERT1(mf_u1.fem_of_element(cv)->is_lagrange(),
- "This contact brick works only for pure Lagrange fems");
- }
- size_type d = mf_u1.get_qdim() - 1, i = 0, j = 0;
- nbc = dofs.card() / (d+1);
-
- // computation of alpha vector.
- base_node Pmin, Pmax;
- mf_u1.linked_mesh().bounding_box(Pmin, Pmax);
- scalar_type l = scalar_type(0);
- for (i = 0; i < Pmin.size(); ++i)
- l = std::max(l, gmm::abs(Pmax[i] - Pmin[i]));
-
- CONTACT_B_MATRIX MM(mf_u1.nb_dof(), mf_u1.nb_dof());
- asm_mass_matrix(MM, mim, mf_u1, region);
- gmm::resize(alpha, nbc);
- i = 0; j = 0;
- for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i)
- if ((i % (d+1)) == 0) alpha[j++] = MM(id, id) / l;
-
-
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
-
-
- mu::Parser parser;
- parser.SetExpr(obstacle);
-
- gmm::resize(gap, nbc);
- gmm::resize(BN1, nbc, mf_u1.nb_dof());
- gmm::clear(BN1);
- if (!contact_only) {
- gmm::resize(BT1, d*nbc, mf_u1.nb_dof());
- gmm::clear(BT1);
- }
- base_node pt(d+1), grad(d+1), ut[3];
-
- static std::string varn[4] = {"x", "y", "z", "w"};
- for (size_type k = 0; k <= d; ++k)
- parser.DefineVar(varn[k], &pt[k]);
-
- i = 0; j = 0;
- for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i) {
- if ((i % (d+1)) == 0) {
- gmm::copy(mf_u1.point_of_basic_dof(id), pt);
- try {
-
- // Computation of gap
- gap[j] = scalar_type(parser.Eval());
-
- // computation of BN
- size_type cv = mf_u1.first_convex_of_basic_dof(id);
- scalar_type eps
- = mf_u1.linked_mesh().convex_radius_estimate(cv) * 1E-3;
- for (size_type k = 0; k <= d; ++k) {
- pt[k] += eps;
- grad[k] = (scalar_type(parser.Eval()) - gap[j]) / eps;
- pt[k] -= eps;
- }
- // unit normal vector
- base_node un = - grad / gmm::vect_norm2(grad);
-
- for (size_type k = 0; k <= d; ++k)
- BN1(j, id + k) = un[k];
-
- // computation of BT
- if (!contact_only) {
-
- orthonormal_basis_to_unit_vec(d, un, ut);
-
- for (size_type k = 0; k <= d; ++k)
- for (size_type nn = 0; nn < d; ++nn)
- BT1(j*d+nn, id + k) = ut[nn][k];
- }
-
- } catch (mu::Parser::exception_type &e) {
- std::cerr << "Message : " << e.GetMsg() << std::endl;
- std::cerr << "Formula : " << e.GetExpr() << std::endl;
- std::cerr << "Token : " << e.GetToken() << std::endl;
- std::cerr << "Position : " << e.GetPos() << std::endl;
- std::cerr << "Errc : " << e.GetCode() << std::endl;
- GMM_ASSERT1(false, "Error in signed distance expression");
- }
- ++j;
- }
-
- }
-
- GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[1])) == nbc,
- "Wrong size of multiplier for the contact condition");
-
- if (!contact_only)
- GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[2])) == nbc*d,
- "Wrong size of multiplier for the friction condition");
-
-#else
-
- GMM_ASSERT1(false, "Muparser is not installed, "
- "You cannot use this contact brick");
-
-#endif
-
- is_init = false;
- }
- else
- nbc = gmm::mat_nrows(BN1);
-
- if (!contact_only) {
- const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
- "Parameter friction_coeff has a wrong size");
- gmm::resize(friction_coeff, nbc);
- if (gmm::vect_size(vfr) == 1)
- gmm::fill(friction_coeff, vfr[0]);
- else
- gmm::copy(vfr, friction_coeff);
- if (friction_dynamic_term) {
- const model_real_plain_vector &vg = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vg) == 1,
- "Parameter gamma should be a scalar");
- gamma = vg[0];
- np_wt1 = np++;
- }
- if (Tresca_version) {
- const model_real_plain_vector &vth = md.real_variable(dl[np++]);
- GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
- "Parameter threshold has a wrong size");
- gmm::resize(threshold, nbc);
- if (gmm::vect_size(vth) == 1)
- gmm::fill(threshold, vth[0]);
- else
- gmm::copy(vth, threshold);
- }
- }
-
- basic_asm_real_tangent_terms
- (u1, u1, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
- md.real_variable(dl[np_wt1]), matl, vecl, version);
-
- }
-
- Coulomb_friction_brick_rigid_obstacle
- (bool symmetrized_, bool contact_only_, const std::string &obs)
- : Coulomb_friction_brick(symmetrized_, contact_only_), obstacle(obs) {}
-
- };
-
-
- //=========================================================================
- // Add a frictionless contact condition with a rigid obstacle given
- // by a signed distance.
- //=========================================================================
-
- size_type add_contact_with_rigid_obstacle_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- const std::string &multname_n, const std::string &dataname_r,
- size_type region, const std::string &obstacle, bool symmetrized) {
- pbrick pbr
- = new Coulomb_friction_brick_rigid_obstacle(symmetrized, true, obstacle);
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u, varname_u, false));
- tl.push_back(model::term_description(varname_u, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u, false));
- tl.push_back(model::term_description(multname_n, multname_n, false));
- model::varnamelist dl(1, dataname_r);
-
- model::varnamelist vl(1, varname_u);
- vl.push_back(multname_n);
-
- return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
- }
-
-
- //=========================================================================
- // Add a contact with friction condition with a rigid obstacle given
- // by a signed distance.
- //=========================================================================
-
- size_type add_contact_with_friction_with_rigid_obstacle_brick
- (model &md, const mesh_im &mim, const std::string &varname_u,
- const std::string &multname_n, const std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- size_type region, const std::string &obstacle, bool symmetrized) {
- pbrick pbr
- = new Coulomb_friction_brick_rigid_obstacle(symmetrized,false,obstacle);
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u, varname_u, false));
- tl.push_back(model::term_description(varname_u, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u, false));
- tl.push_back(model::term_description(multname_n, multname_n, false));
- tl.push_back(model::term_description(varname_u, multname_t, false));
- tl.push_back(model::term_description(multname_t, varname_u, false));
- tl.push_back(model::term_description(multname_t, multname_t, false));
- tl.push_back(model::term_description(multname_t, multname_n, false));
- model::varnamelist dl(1, dataname_r);
- dl.push_back(dataname_friction_coeff);
-
- model::varnamelist vl(1, varname_u);
- vl.push_back(multname_n);
- vl.push_back(multname_t);
-
- return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
- }
-
-
- //=========================================================================
- //
- // Brick with elastic bodies (one or two bodies, build BN, BT, Gap, alpha)
- //
- //=========================================================================
- // To be done:
- // - Large deformations: what happens when cnpl and nbc change during
- // the iterative solution?
-
- struct Coulomb_friction_brick_nonmatching_meshes
- : public Coulomb_friction_brick {
-
- std::vector<size_type> rg1, rg2; // ids of mesh regions expected to come in
- // contact. For one displacement they refer
- // both to u1. For two displacements they
- // respectively refer to u1, u2.
- bool slave1, slave2; // if true, then rg1 or respectively rg2 are treated
- // as slave surfaces (the contact multipliers are
- // defined on these surfaces)
-
- virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
-
- GMM_ASSERT1(mims.size() == 2, "This contact brick needs two mesh_im");
- const mesh_im &mim1 = *mims[0];
- const mesh_im &mim2 = *mims[1];
-
- // Variables
- // Without friction and one displacement : u1, lambda_n
- // With friction and one displacement : u1, lambda_n, lambda_t
- // Without friction and two displacements : u1, u2, lambda_n
- // With friction and two displacements : u1, u2, lambda_n, lambda_t
- size_type nv = 0;
- std::string varname_u1 = vl[nv];
- const model_real_plain_vector &u1 = md.real_variable(varname_u1);
- const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
- if (two_variables) nv++;
- std::string varname_u2 = vl[nv++];
- const model_real_plain_vector &u2 = md.real_variable(varname_u2);
- const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
- const model_real_plain_vector &lambda_n = md.real_variable(vl[nv]);
- if (!contact_only) nv++;
- const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
-
- size_type nbc = lambda_n.size();
-
- // Parameters (order: r, friction_coeff)
- const model_real_plain_vector &vr = md.real_variable(dl[0]);
- GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
- r = vr[0];
- if (!contact_only) {
- const model_real_plain_vector &vfr = md.real_variable(dl[1]);
- GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
- "Parameter friction_coeff has a wrong size");
- gmm::resize(friction_coeff, nbc);
- if (gmm::vect_size(vfr) == 1)
- gmm::fill(friction_coeff, vfr[0]);
- else
- gmm::copy(vfr, friction_coeff);
- }
-
- // Computation of BN, BT, gap and alpha
- if ( md.is_var_mf_newer_than_brick(varname_u1, ib)
- || md.is_var_mf_newer_than_brick(varname_u2, ib)) {
-
- for (size_type i = 0; i <= two_variables ? 1 : 0; i++) {
- const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
- // Verification that mf_u is a pure Lagrange fem.
- GMM_ASSERT1(!(mf_u.is_reduced()),
- "This contact brick works only for pure Lagrange fems");
- dal::bit_vector dofs = mf_u.basic_dof_on_region(region);
- for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
- size_type cv = mf_u.first_convex_of_basic_dof(id);
- GMM_ASSERT1(mf_u.fem_of_element(cv)->is_lagrange(),
- "This contact brick works only for pure Lagrange fems");
- }
- }
-
- contact_node_pair_list cnpl;
- for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it)
- cnpl.append_min_dist_cn_pairs
- (mf_u1, mf_u2, rg1[it], rg2[it], slave1, slave2);
-
- // Computation of gap, BN and BT
- gmm::resize(gap, nbc);
- gmm::resize(BN1, nbc, mf_u1.nb_dof());
- if (contact_only) {
- if (!two_variables) {
- compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1);
- } else {
- gmm::resize(BN2, nbc, mf_u2.nb_dof());
- compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2);
- }
- } else {
- size_type d = mf_u1.get_qdim() - 1;
- gmm::resize(BT1, nbc * d, mf_u1.nb_dof());
- if (!two_variables) {
- compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, 0, &BT1);
- } else {
- // d == mf_u2.get_qdim() - 1;
- gmm::resize(BN2, nbc, mf_u2.nb_dof());
- gmm::resize(BT2, nbc * d, mf_u2.nb_dof());
- compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2, &BT1, &BT2);
- }
- }
-
- // computation of alpha vector.
- scalar_type l = scalar_type(0);
- for (size_type i = 0; i <= two_variables ? 1 : 0; i++) {
- const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
- base_node Pmin, Pmax;
- mf_u.linked_mesh().bounding_box(Pmin, Pmax);
- for (size_type j = 0; j < Pmin.size(); ++j)
- l = std::max(l, gmm::abs(Pmax[j] - Pmin[j]));
- }
- gmm::resize(alpha, nbc);
- size_type mult_id = 0;
- for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
- for (size_type swap = 0; swap <= 1; ++swap) {
- if (swap ? slave2 : slave1) {
- size_type rg = swap ? rg2[it] : rg1[it];
- const mesh_fem &mf_u = swap ? mf_u2 : mf_u1;
- const mesh_im &mim = swap ? mim2 : mim1;
- CONTACT_B_MATRIX MM(mf_u.nb_dof(), mf_u.nb_dof());
- asm_mass_matrix(MM, mim, mf_u, rg);
- size_type qdim = mf_u.get_qdim();
- dal::bit_vector rg_dofs = mf_u.basic_dof_on_region(rg);
- for (dal::bv_visitor id(rg_dofs); !id.finished(); ++id)
- if (id % qdim == 0) alpha[mult_id++] = MM(id, id) / l;
- }
- }
- }
- }
-
- const model_real_plain_vector dummy_wt;
- basic_asm_real_tangent_terms
- (u1, u2, lambda_n, lambda_t, dummy_wt, dummy_wt, matl, vecl, version);
- }
-
- Coulomb_friction_brick_nonmatching_meshes
- (bool symmetrized_, bool contact_only_, bool two_variables_,
- const std::vector<size_type> &rg1_, const std::vector<size_type> &rg2_,
- bool slave1_=true, bool slave2_=false)
- : Coulomb_friction_brick(symmetrized_, contact_only_, two_variables_),
- rg1(rg1_), rg2(rg2_), slave1(slave1_), slave2(slave2_) {}
-
- };
-
-
- //=========================================================================
- // Add a frictionless contact condition between two faces of one or two
- // elastic bodies.
- //=========================================================================
-
- size_type add_nonmatching_meshes_contact_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, const std::string &dataname_r,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1, bool slave2, bool symmetrized) {
-
- bool two_variables = (varname_u1.compare(varname_u2) != 0);
-
- pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
- (symmetrized, true, two_variables, rg1, rg2, slave1, slave2);
-
- // Calculate multipliers size
- const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
- const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
- size_type nbc = 0;
- for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
- for (size_type swap = 0; swap <= 1; ++swap) {
- if (swap ? slave2 : slave1) {
- const mesh_fem &mf = swap ? mf_u2 : mf_u1;
- size_type rg = swap ? rg2[it] : rg1[it];
- dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
- nbc += rg_dofs.card() / mf.get_qdim();
- }
- }
- }
-
- if (multname_n.size() == 0)
- multname_n = md.new_name("contact_multiplier");
- else
- GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
- "The given name for the multiplier is alraedy reserved in the model");
- md.add_fixed_size_variable(multname_n, nbc);
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u1, varname_u1, false));
- if (two_variables) {
- tl.push_back(model::term_description(varname_u2, varname_u2, false));
- }
- tl.push_back(model::term_description(varname_u1, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u1, false));
- if (two_variables) {
- tl.push_back(model::term_description(varname_u2, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u2, false));
- }
- tl.push_back(model::term_description(multname_n, multname_n, false));
-
- // Variables (order: varname_u, multname_n)
- model::varnamelist vl;
- vl.push_back(varname_u1);
- if (two_variables) vl.push_back(varname_u2);
- vl.push_back(multname_n);
-
- // Parameters (order: r, ...)
- model::varnamelist dl;
- dl.push_back(dataname_r);
-
- model::mimlist ml;
- ml.push_back(&mim1);
- ml.push_back(&mim2);
-
- return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
- }
-
-
- //=========================================================================
- // Add a contact with friction condition between two faces of one or two
- // elastic bodies.
- //=========================================================================
-
- size_type add_nonmatching_meshes_contact_with_friction_brick
- (model &md, const mesh_im &mim1, const mesh_im &mim2,
- const std::string &varname_u1, const std::string &varname_u2,
- std::string &multname_n, std::string &multname_t,
- const std::string &dataname_r, const std::string &dataname_friction_coeff,
- const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
- bool slave1, bool slave2, bool symmetrized) {
-
- bool two_variables = (varname_u1.compare(varname_u2) != 0);
-
- pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
- (symmetrized, false, two_variables, rg1, rg2, slave1, slave2);
-
- // Calculate multipliers size
- const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
- const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
- size_type nbc = 0;
- for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
- for (size_type swap = 0; swap <= 1; ++swap) {
- if (swap ? slave2 : slave1) {
- const mesh_fem &mf = swap ? mf_u2 : mf_u1;
- size_type rg = swap ? rg2[it] : rg1[it];
- dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
- nbc += rg_dofs.card() / mf.get_qdim();
- }
- }
- }
-
- if (multname_n.size() == 0)
- multname_n = md.new_name("contact_normal_multiplier");
- else
- GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
- "The given name for the multiplier is alraedy reserved in the model");
- md.add_fixed_size_variable(multname_n, nbc);
- if (multname_t.size() == 0)
- multname_t = md.new_name("contact_tangent_multiplier");
- else
- GMM_ASSERT1(multname_t.compare(md.new_name(multname_t)) == 0,
- "The given name for the multiplier is alraedy reserved in the model");
- md.add_fixed_size_variable(multname_t, nbc * (mf_u1.get_qdim() - 1) ); // ??
-
- model::termlist tl;
- tl.push_back(model::term_description(varname_u1, varname_u1, false));
- if (two_variables) {
- tl.push_back(model::term_description(varname_u2, varname_u2, false));
- }
-
- tl.push_back(model::term_description(varname_u1, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u1, false));
- if (two_variables) {
- tl.push_back(model::term_description(varname_u2, multname_n, false));
- tl.push_back(model::term_description(multname_n, varname_u2, false));
- }
- tl.push_back(model::term_description(multname_n, multname_n, false));
-
- tl.push_back(model::term_description(varname_u1, multname_t, false));
- tl.push_back(model::term_description(multname_t, varname_u1, false));
- if (two_variables) {
- tl.push_back(model::term_description(varname_u2, multname_t, false));
- tl.push_back(model::term_description(multname_t, varname_u2, false));
- }
- tl.push_back(model::term_description(multname_t, multname_t, false));
- tl.push_back(model::term_description(multname_t, multname_n, false));
-
- // Variables (order: varname_u, multname_n, multname_t)
- model::varnamelist vl;
- vl.push_back(varname_u1);
- if (two_variables) vl.push_back(varname_u2);
- vl.push_back(multname_n);
- vl.push_back(multname_t);
-
- // Parameters (order: r, friction_coeff)
- model::varnamelist dl;
- dl.push_back(dataname_r);
- dl.push_back(dataname_friction_coeff);
-
- model::mimlist ml;
- ml.push_back(&mim1);
- ml.push_back(&mim2);
-
- return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
- }
-
-} /* end of namespace getfem. */
diff --git a/src/getfem_Xfem.cc b/src/getfem_Xfem.cc
index 19d3584..5277909 100644
--- a/src/getfem_Xfem.cc
+++ b/src/getfem_Xfem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_Xfem.h"
diff --git a/src/getfem_assembling_tensors.cc b/src/getfem_assembling_tensors.cc
index 97583d1..43ff0c4 100644
--- a/src/getfem_assembling_tensors.cc
+++ b/src/getfem_assembling_tensors.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2010 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_assembling_tensors.h"
#include "getfem/getfem_mat_elem.h"
@@ -72,6 +72,10 @@ namespace getfem {
}
}
+ bool ATN::is_zero_size() {
+ return child(0).is_zero_size();
+ }
+
/*
general class for tensor who store their data
*/
@@ -79,14 +83,13 @@ namespace getfem {
TDIter data_base;
protected:
std::vector<scalar_type> data;
- public:
- void reinit();
+ void reinit_();
void reinit0()
- { ATN_tensor_w_data::reinit(); std::fill(data.begin(), data.end(),0); }
+ { ATN_tensor_w_data::reinit_(); std::fill(data.begin(), data.end(),0); }
};
/* note that the data is NOT filled with zeros */
- void ATN_tensor_w_data::reinit() {
+ void ATN_tensor_w_data::reinit_() {
tr.assign_shape(req_shape);
tr.init_strides();
if (tr.card() > 10000000) {
@@ -97,7 +100,7 @@ namespace getfem {
if (tr.card() == 0) {
cerr << "WARNING: tensor " << name()
<< " will be created with a size of "
- << ranges() << " and 0 non-nul elements!" << endl;
+ << ranges() << " and 0 non-null elements!" << endl;
}
data.resize(tr.card());
data_base = &data[0];
@@ -189,7 +192,9 @@ namespace getfem {
s.append(red[n].first->ranges().size(), ' ');
return s;
}
- void reinit() {
+
+ private:
+ void reinit_() {
tred.clear();
for (dim_type i=0; i < red.size(); ++i) {
// cerr << "ATN_reduced_tensor::reinit : insertion of r(" << red_n(i)
@@ -212,8 +217,7 @@ namespace getfem {
/* on fournit notre propre tenseur pour stocker les resultats */
tred.prepare(&tensor());
}
- private:
-
+
void exec_(size_type , dim_type ) {
std::fill(data.begin(), data.end(), 0.); /* do_reduction ne peut pas */
/* le faire puisque ce n'est pas lui le proprietaire du tenseur de */
@@ -253,11 +257,11 @@ namespace getfem {
tensor_mask::Slice(slice_dim, index_type(slice_idx))));
child(0).merge_required_shape(ts);
}
- void reinit() {
+ private:
+ void reinit_() {
tensor() = tensor_ref(child(0).tensor(),
tensor_mask::Slice(slice_dim, index_type(slice_idx)));
}
- private:
void exec_(size_type, dim_type) {}
};
@@ -294,7 +298,7 @@ namespace getfem {
ts.permute(reorder, true);
child(0).merge_required_shape(ts);
}
- void reinit() {
+ void reinit_() {
tensor() = child(0).tensor();
tensor().permute(reorder);
}
@@ -327,7 +331,7 @@ namespace getfem {
tensor_shape ts = req_shape.diag_shape(tensor_mask::Diagonal(i1,i2));
child(0).merge_required_shape(ts);
}
- void reinit() {
+ void reinit_() {
tensor() = tensor_ref(child(0).tensor(), tensor_mask::Diagonal(i1,i2));
}
void exec_(size_type, dim_type) {}
@@ -866,7 +870,7 @@ namespace getfem {
}
}
- void reinit() {
+ void reinit_() {
if (!shape_updated_) return;
tensor().clear();
tsize = 1;
@@ -971,12 +975,12 @@ namespace getfem {
}
}
virtual void init_required_shape() { req_shape = tensor_shape(ranges()); }
- void reinit() {
- ATN_tensor_w_data::reinit();
- mti.assign(tensor(), true);
- }
private:
+ void reinit_() {
+ ATN_tensor_w_data::reinit_();
+ mti.assign(tensor(), true);
+ }
void exec_(size_type cv, dim_type ) {
vdim.build_strides_for_cv(cv, e_r, e_str);
assert(e_r == ranges());
@@ -1012,12 +1016,12 @@ namespace getfem {
child(0).merge_required_shape(ts);
}
- void reinit() {
+ private:
+ void reinit_() {
req_shape.set_full(ranges()); // c'est plus simple comme ça
ATN_tensor_w_data::reinit0();
mti.assign(child(0).tensor(),true);
}
- private:
void exec_(size_type, dim_type) {
std::fill(data.begin(), data.end(), 0.);
mti.rewind();
@@ -1039,11 +1043,11 @@ namespace getfem {
if ((shape_updated_ = (ranges() != child(0).ranges())))
r_ = child(0).ranges();
}
- void reinit() {
+ private:
+ void reinit_() {
ATN_tensor_w_data::reinit0();
mti.assign(tensor(), child(0).tensor(),false);
}
- private:
void update_cv_(size_type, dim_type) {
mti.rewind();
do {
@@ -1072,17 +1076,17 @@ namespace getfem {
ASM_THROW_TENSOR_ERROR("can't add two tensors of sizes " <<
ranges() << " and " << child(i).ranges());
}
- void reinit() {
- ATN_tensor_w_data::reinit0();
- mti.resize(nchilds());
- for (size_type i=0; i < nchilds(); ++i)
- mti[i].assign(tensor(), child(i).tensor(),false);
- }
void apply_scale(scalar_type s) {
for (size_type i=0; i < scales.size(); ++i) scales[i] *= s;
}
ATN_tensors_sum_scaled* is_tensors_sum_scaled() { return this; }
private:
+ void reinit_() {
+ ATN_tensor_w_data::reinit0();
+ mti.resize(nchilds());
+ for (size_type i=0; i < nchilds(); ++i)
+ mti[i].assign(tensor(), child(i).tensor(),false);
+ }
void exec_(size_type, dim_type) {
//if (cv == 0) {
// cerr << "ATN_tensors_sum["<< name() << "] req_shape="
@@ -1113,11 +1117,11 @@ namespace getfem {
if ((shape_updated_ = child(0).is_shape_updated()))
r_ = child(0).ranges();
}
- void reinit() {
- ATN_tensor_w_data::reinit();
+ private:
+ void reinit_() {
+ ATN_tensor_w_data::reinit_();
mti.assign(tensor(), child(0).tensor(),false);
}
- private:
void exec_(size_type, dim_type) {
std::fill(data.begin(), data.end(), v);
mti.rewind();
@@ -1134,8 +1138,8 @@ namespace getfem {
public:
ATN_print_tensor(ATN_tensor& a, std::string n_)
: name(n_) { add_child(a); }
- void reinit() {}
private:
+ void reinit_() {}
void exec_(size_type cv, dim_type face) {
multi_tensor_iterator mti(child(0).tensor(), true);
cout << "------- > evaluation of " << name << ", at" << endl;
@@ -1374,7 +1378,7 @@ namespace getfem {
advance();
}
if (datanum >= indata.size())
- ASM_THROW_PARSE_ERROR("wong dataset number: " << datanum);
+ ASM_THROW_PARSE_ERROR("wrong dataset number: " << datanum);
vdim_specif_list sz;
do_dim_spec(sz);
diff --git a/src/getfem_boost/intrusive_ptr.hpp b/src/getfem_boost/intrusive_ptr.hpp
index 70bf118..5d479b2 100755
--- a/src/getfem_boost/intrusive_ptr.hpp
+++ b/src/getfem_boost/intrusive_ptr.hpp
@@ -1,10 +1,7 @@
-#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
-#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
-
//
// intrusive_ptr.hpp
//
-// Copyright (c) 2001, 2002 Peter Dimov
+// Copyright (c) 2001-2002 Peter Dimov
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
@@ -14,6 +11,10 @@
// for documentation.
//
+#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+
+
// #include <getfem_boost/config.hpp>
#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
diff --git a/src/getfem_boost/noncopyable.hpp b/src/getfem_boost/noncopyable.hpp
index 7770bdb..f54c170 100755
--- a/src/getfem_boost/noncopyable.hpp
+++ b/src/getfem_boost/noncopyable.hpp
@@ -1,10 +1,16 @@
// Boost noncopyable.hpp header file --------------------------------------//
-// (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
+//
+// Copyright (c) 1999-2003 Beman Dawes
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
// See http://www.boost.org/libs/utility for documentation.
+//
+
+
#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED
#define BOOST_NONCOPYABLE_HPP_INCLUDED
diff --git a/src/getfem_boost/workaround.hpp b/src/getfem_boost/workaround.hpp
index b5ecad7..ae6e186 100755
--- a/src/getfem_boost/workaround.hpp
+++ b/src/getfem_boost/workaround.hpp
@@ -1,7 +1,11 @@
-// Copyright David Abrahams 2002.
+
+// Copyright (c) 2002 David Abrahams
+//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+//
+
#ifndef WORKAROUND_DWA2002126_HPP
# define WORKAROUND_DWA2002126_HPP
diff --git a/src/getfem_contact_and_friction_integral.cc b/src/getfem_contact_and_friction_integral.cc
new file mode 100644
index 0000000..859d420
--- /dev/null
+++ b/src/getfem_contact_and_friction_integral.cc
@@ -0,0 +1,3982 @@
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard, Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include "getfem/bgeot_rtree.h"
+#include "getfem/getfem_contact_and_friction_integral.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_projected_fem.h"
+
+#include <getfem/getfem_arch_config.h>
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
+namespace getfem {
+
+
+
+ template <typename T> inline static T Heav(T a)
+ { return (a < T(0)) ? T(0) : T(1); }
+
+
+ //=========================================================================
+ //
+ // Basic non linear term used for contact bricks.
+ //
+ //=========================================================================
+
+ void contact_nonlinear_term::adjust_tensor_size(void) {
+ sizes_.resize(1); sizes_[0] = 1;
+ switch (option) {
+ // one-dimensional tensors [N]
+ case RHS_U_V1: case RHS_U_V2: case RHS_U_V4:
+ case RHS_U_V5: case RHS_U_FRICT_V6: case RHS_U_FRICT_V7:
+ case RHS_U_FRICT_V8: case RHS_U_FRICT_V1:
+ case RHS_U_FRICT_V4: case RHS_U_FRICT_V5:
+ case RHS_L_FRICT_V1: case RHS_L_FRICT_V2: case RHS_L_FRICT_V4:
+ case K_UL_V1: case K_UL_V2: case K_UL_V3: case K_UL_V4:
+ case UZAWA_PROJ_FRICT: case UZAWA_PROJ_FRICT_SAXCE:
+ sizes_[0] = N; break;
+ // two-dimensional tensors [N x N]
+ case K_UU_V1: case K_UU_V2:
+ case K_UL_FRICT_V1: case K_UL_FRICT_V2: case K_UL_FRICT_V3:
+ case K_UL_FRICT_V4: case K_UL_FRICT_V5:
+ case K_UL_FRICT_V7: case K_UL_FRICT_V8:
+ case K_LL_FRICT_V1: case K_LL_FRICT_V2: case K_LL_FRICT_V4:
+ case K_UU_FRICT_V1: case K_UU_FRICT_V2:
+ case K_UU_FRICT_V3: case K_UU_FRICT_V4: case K_UU_FRICT_V5:
+ sizes_.resize(2); sizes_[0] = sizes_[1] = N; break;
+ }
+
+ // adjust temporary variables sizes
+ lnt.resize(N); lt.resize(N); zt.resize(N); no.resize(N);
+ aux1.resize(1); auxN.resize(N); V.resize(N);
+ gmm::resize(GP, N, N);
+ }
+
+ void contact_nonlinear_term::compute
+ (fem_interpolation_context &/* ctx */, bgeot::base_tensor &t) {
+
+ t.adjust_sizes(sizes_);
+ scalar_type e, f, augm_ln;
+ dim_type i, j;
+
+ switch (option) {
+
+ // scalar tensors [1]
+
+ case RHS_L_V1:
+ t[0] = (ln+gmm::neg(ln-r*(un - g)))/r; break;
+ case RHS_L_V2:
+ t[0] = (un-g) + gmm::pos(ln)/r; break;
+
+ case K_LL_V1:
+ t[0] = (Heav(r*(un-g)-ln) - scalar_type(1))/r; break;
+ case K_LL_V2:
+ t[0] = -Heav(ln)/r; break;
+
+ case UZAWA_PROJ:
+ t[0] = -gmm::neg(ln - r*(un - g)); break;
+
+ case CONTACT_FLAG:
+ // here ln is expected to be an estimation of the mesh size
+ // and r should be a threshold coefficient expressing a penetration
+ // or separation distance as percentage of the mesh size
+ t[0] = Heav(un-g - r*ln); break;
+
+ // one-dimensional tensors [N]
+
+ case RHS_U_V1:
+ for (i=0; i<N; ++i) t[i] = ln * no[i]; break;
+ case RHS_U_V2:
+ e = -gmm::neg(ln-r*(un - g));
+ for (i=0; i<N; ++i) t[i] = e * no[i];
+ break;
+ case RHS_U_V4:
+ e = -gmm::neg(ln);
+ for (i=0; i<N; ++i) t[i] = e * no[i];
+ break;
+ case RHS_U_V5:
+ e = - gmm::pos(un-g) * r;
+ for (i=0; i<N; ++i) t[i] = e * no[i];
+ break;
+ case RHS_U_FRICT_V6:
+ e = gmm::neg(ln-r*(un - g));
+ auxN = lt - zt; ball_projection(auxN, f_coeff*e );
+ for (i=0; i<N; ++i) t[i] = (auxN[i] - e*no[i]);
+ break;
+ case RHS_U_FRICT_V7:
+ e = - gmm::neg(-r*(un - g));
+ auxN = - zt; ball_projection(auxN, -f_coeff *e );
+ for (i=0; i<N; ++i) t[i] = (e*no[i] + auxN[i]);
+ break;
+ case RHS_U_FRICT_V8:
+ auxN = lnt - (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no - zt;
+ De_Saxce_projection(auxN, no, f_coeff);
+ for (i=0; i<N; ++i) t[i] = auxN[i];
+ break;
+ case RHS_U_FRICT_V1:
+ for (i=0; i<N; ++i) t[i] = lnt[i]; break;
+ case RHS_U_FRICT_V4:
+ e = -gmm::neg(ln);
+ // if (e < 0. && ctx.xreal()[1] > 1.)
+ // cout << "x = " << ctx.xreal() << " e = " << e << endl;
+ auxN = lt; ball_projection(auxN, f_coeff * gmm::neg(ln));
+ // if (gmm::vect_norm2(auxN) > 0. && ctx.xreal()[1] > 1.)
+ // cout << "x = " << ctx.xreal() << " auxN = " << auxN << endl;
+ for (i=0; i<N; ++i) t[i] = no[i]*e + auxN[i];
+ break;
+ case RHS_U_FRICT_V5:
+ auxN = lnt; De_Saxce_projection(auxN, no, f_coeff);
+ for (i=0; i<N; ++i) t[i] = auxN[i];
+ break;
+ case RHS_L_FRICT_V1:
+ e = gmm::neg(ln-r*(un-g));
+ auxN = zt - lt; ball_projection(auxN, f_coeff * e); auxN += lt;
+ for (i=0; i<N; ++i) t[i] = ((e+ln)*no[i] + auxN[i])/ r;
+ break;
+ case RHS_L_FRICT_V2:
+ e = r*(un-g) + gmm::pos(ln);
+ auxN = lt; ball_projection(auxN, f_coeff * gmm::neg(ln));
+ for (i=0; i<N; ++i) t[i] = (no[i]*e + zt[i] + lt[i] - auxN[i])/r;
+ break;
+ case RHS_L_FRICT_V4:
+ auxN = lnt;
+ De_Saxce_projection(auxN, no, f_coeff);
+ auxN -= lnt + (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no + zt;
+ for (i=0; i<N; ++i) t[i] = -auxN[i]/r;
+ break;
+ case K_UL_V1:
+ for (i=0; i<N; ++i) t[i] = -no[i];
+ break;
+ case K_UL_V2 :
+ e = -Heav(-ln); //Heav(ln)-scalar_type(1);
+ for (i=0; i<N; ++i) t[i] = e*no[i];
+ break;
+ case K_UL_V3:
+ e = -Heav(r*(un-g)-ln);
+ for (i=0; i<N; ++i) t[i] = e*no[i];
+ break;
+ case K_UL_V4:
+ for (i=0; i<N; ++i) t[i] = -no[i];
+ break;
+ case UZAWA_PROJ_FRICT:
+ e = -gmm::neg(ln - r*(un - g));
+ auxN = lt - zt; ball_projection(auxN, -f_coeff * e);
+ for (i=0; i<N; ++i) t[i] = e*no[i] + auxN[i];
+ break;
+ case UZAWA_PROJ_FRICT_SAXCE:
+ auxN = lnt - (r*(un-g) - f_coeff * gmm::vect_norm2(zt)) * no - zt;
+ De_Saxce_projection(auxN, no, f_coeff);
+ for (i=0; i<N; ++i) t[i] = auxN[i];
+ break;
+
+ // two-dimensional tensors [N x N]
+
+ case K_UU_V1:
+ e = Heav(un - g) * r;
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = e * no[i] * no[j];
+ break;
+ case K_UU_V2:
+ e = r*Heav(r*(un - g)-ln);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = e * no[i] * no[j];
+ break;
+
+ case K_UL_FRICT_V1:
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = ((i == j) ? -scalar_type(1) : scalar_type(0));
+ break;
+ case K_UL_FRICT_V2:
+ e = -Heav(-ln); //Heav(ln)-scalar_type(1);
+ ball_projection_grad(lt, f_coeff * gmm::neg(ln), GP);
+ e += gmm::vect_sp(GP, no, no);
+ ball_projection_grad_r(lt, f_coeff * gmm::neg(ln), V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = no[i]*no[j]*e - GP(i,j) + f_coeff*Heav(-ln)*no[i]*V[j];
+ break;
+ case K_UL_FRICT_V3:
+ f = Heav(r*(un-g)-ln);
+ augm_ln = gmm::neg(ln - r*(un-g));
+ auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+ e = gmm::vect_sp(GP, no, no) - f;
+ ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = no[i]*no[j]*e - GP(i,j) + f_coeff*f*V[j]*no[i];
+ break;
+ case K_UL_FRICT_V4:
+ f = Heav(r*(un-g)-ln);
+ augm_ln = gmm::neg(ln - r*(un-g));
+ auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+ e = alpha * gmm::vect_sp(GP, no, no) - f;
+ ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = no[i]*no[j]*e - alpha*GP(i,j) + f_coeff * f * V[i] * no[j];
+ break;
+ case K_UL_FRICT_V5:
+ e = (alpha-scalar_type(1));
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = no[i]*no[j]*e - ((i == j) ? alpha : scalar_type(0));
+ break;
+ case K_UL_FRICT_V7:
+ De_Saxce_projection_grad(lnt, no, f_coeff, GP);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = -GP(j,i);
+ break;
+ case K_UL_FRICT_V8:
+ {
+ scalar_type nzt = gmm::vect_norm2(zt);
+ gmm::copy(gmm::identity_matrix(), GP); gmm::scale(GP, alpha);
+ gmm::rank_one_update(GP, gmm::scaled(no, scalar_type(1)-alpha), no);
+ if (nzt != scalar_type(0))
+ gmm::rank_one_update(GP, gmm::scaled(no, -f_coeff*alpha/nzt), zt);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = - GP(i,j);
+ }
+ break;
+ case K_LL_FRICT_V1:
+ f = Heav(r*(un-g)-ln);
+ augm_ln = gmm::neg(ln - r*(un-g));
+ auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+ e = f/r - gmm::vect_sp(GP, no, no) / r;
+ ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = no[i]*no[j]*e
+ - (((i == j) ? scalar_type(1) : scalar_type(0)) - GP(i,j))/r
+ - f_coeff * f * V[j] * no[i] / r;
+ break;
+ case K_LL_FRICT_V2:
+ e = -Heav(ln) + scalar_type(1);
+ ball_projection_grad(lt, f_coeff * gmm::neg(ln), GP);
+ e -= gmm::vect_sp(GP, no, no);
+ ball_projection_grad_r(lt, f_coeff * gmm::neg(ln), V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = (no[i]*no[j]*e - ((i == j) ? scalar_type(1) : scalar_type(0)) + GP(i,j) - f_coeff*Heav(-ln)*no[i]*V[j])/r;
+ break;
+ case K_LL_FRICT_V4:
+ De_Saxce_projection_grad(lnt, no, f_coeff, GP);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = (GP(i,j) - ((i == j) ? scalar_type(1) : scalar_type(0)))/r;
+ break;
+ case K_UU_FRICT_V1:
+ e = r*Heav(r*(un-g)-ln);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = no[i]*no[j]*e;
+ break;
+ case K_UU_FRICT_V2:
+ e = Heav(r*(un-g)-ln);
+ auxN = lt - zt; ball_projection_grad(auxN, -f_coeff * ln, GP);
+ e -= alpha*gmm::vect_sp(GP, no, no);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j));
+ break;
+ case K_UU_FRICT_V3:
+ f = Heav(r*(un-g)-ln);
+ augm_ln = gmm::neg(ln - r*(un-g));
+ auxN = lt - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+ e = f - alpha*gmm::vect_sp(GP, no, no);
+ ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j) - f_coeff*f*no[i]*V[j]);
+ break;
+ case K_UU_FRICT_V4:
+ e = Heav(r*(un-g));
+ augm_ln = gmm::neg(- r*(un-g));
+ auxN = - zt; ball_projection_grad(auxN, f_coeff * augm_ln, GP);
+ e -= alpha*gmm::vect_sp(GP, no, no);
+ ball_projection_grad_r(auxN, f_coeff * augm_ln, V);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j)
+ t[i*N+j] = r*(no[i]*no[j]*e + alpha*GP(i,j)
+ - f_coeff*Heav(r*(un-g))*no[i]*V[j]);
+ break;
+ case K_UU_FRICT_V5:
+ {
+ scalar_type nzt = gmm::vect_norm2(zt);
+ auxN = lnt - (r*(un-g) - f_coeff * nzt) * no - zt;
+ base_matrix A(N, N), B(N, N);
+ De_Saxce_projection_grad(auxN, no, f_coeff, A);
+ gmm::copy(gmm::identity_matrix(), B); gmm::scale(B, alpha);
+ gmm::rank_one_update(B, gmm::scaled(no, scalar_type(1)-alpha), no);
+ if (nzt != scalar_type(0))
+ gmm::rank_one_update(B, gmm::scaled(no, -f_coeff*alpha/nzt), zt);
+ gmm::mult(A, B, GP);
+ for (i=0; i<N; ++i) for (j=0; j<N; ++j) t[i*N+j] = r*GP(j,i);
+ }
+ break;
+ default : GMM_ASSERT1(false, "Invalid option");
+ }
+ }
+
+
+ //=========================================================================
+ //
+ // Non linear term used for contact with rigid obstacle bricks.
+ //
+ //=========================================================================
+
+ void contact_rigid_obstacle_nonlinear_term::prepare
+ (fem_interpolation_context& ctx, size_type nb) {
+ size_type cv = ctx.convex_num();
+
+ switch (nb) { // last is computed first
+ case 1 : // calculate [un] and [zt] interpolating [U],[WT],[VT] on [mf_u]
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index
+ (mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, V, N);
+ un = gmm::vect_sp(V, no);
+ if (!contact_only) {
+ if (gmm::vect_size(WT) == gmm::vect_size(U)) {
+ gmm::copy(gmm::sub_vector
+ (WT, gmm::sub_index
+ (mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, auxN, N);
+ auxN -= gmm::vect_sp(auxN, no) * no;
+ if (gmm::vect_size(VT) == gmm::vect_size(U)) {
+ gmm::copy(gmm::sub_vector
+ (VT, gmm::sub_index
+ (mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, vt, N);
+ vt -= gmm::vect_sp(vt, no) * no;
+ // zt = r*(alpha*(u_T-w_T) + (1-gamma)*v_T)
+ zt = (((V - un * no) - auxN) * alpha + vt * (1 - gamma)) * r;
+ } else {
+ // zt = r*alpha*(u_T-w_T)
+ zt = ((V - un * no) - auxN) * (r * alpha);
+ }
+ } else {
+ // zt = r*alpha*u_T
+ zt = (V - un * no) * (r * alpha);
+ }
+ }
+ break;
+
+ case 2 : // calculate [g] and [no] interpolating [obs] on [mf_obs]
+ // calculate [ln] and [lt] from [lnt] and [no]
+ coeff.resize(mf_obs.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (obs, gmm::sub_index
+ (mf_obs.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, grad, 1);
+ gmm::copy(gmm::mat_row(grad, 0), no);
+ no /= -gmm::vect_norm2(no);
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ g = aux1[0];
+
+ if (!contact_only && pmf_lambda) {
+ ln = gmm::vect_sp(lnt, no);
+ lt = lnt - ln * no;
+ }
+
+ break;
+
+ case 3 : // calculate [ln] or [lnt] interpolating [lambda] on [mf_lambda]
+ if (pmf_lambda) {
+ coeff.resize(pmf_lambda->nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (lambda, gmm::sub_index
+ (pmf_lambda->ind_basic_dof_of_element(cv))), coeff);
+ if (contact_only) {
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ ln = aux1[0];
+ } else {
+ ctx.pf()->interpolation(ctx, coeff, lnt, N);
+ }
+ }
+ break;
+
+ case 4 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+ GMM_ASSERT1(!contact_only, "Invalid friction option");
+ if (pmf_coeff) {
+ coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (friction_coeff, gmm::sub_index
+ (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ f_coeff = aux1[0];
+ }
+ break;
+
+ default : GMM_ASSERT1(false, "Invalid option");
+ }
+
+ }
+
+
+ //=========================================================================
+ //
+ // Non linear term used for contact between non-matching meshes bricks.
+ //
+ //=========================================================================
+
+ void contact_nonmatching_meshes_nonlinear_term::prepare
+ (fem_interpolation_context& ctx, size_type nb) {
+
+ size_type cv = ctx.convex_num();
+
+ // - this method is called for nb=4,3,2,1 corresponding to
+ // NonLin(#i0,#i1,#i2,#i3,#i4) before the compute() method is called
+ // for i0
+ // - in each call ctx.pf() corresponds to the fem of the cv convex
+ // on the i4,i3,i2 and i1 mesh_fem respectively
+ // - this method expects that i1,i2,i3 and i4 mesh_fems will correspond
+ // to mf_u1, mf_u2, mf_lambda and mf_coeff
+
+ switch (nb) { // last is computed first
+ case 1 : // calculate [un] and [zt] interpolating [U1],[WT1] on [mf_u1]
+ // and subtracting [un] and [zt] calculated on [mf_u2]
+ coeff.resize(mf_u1.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U1, gmm::sub_index
+ (mf_u1.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, V, N);
+ un = gmm::vect_sp(V, no) - un;
+ if (!contact_only) {
+ if (gmm::vect_size(WT1) == gmm::vect_size(U1)) {
+ gmm::copy(gmm::sub_vector
+ (WT1, gmm::sub_index
+ (mf_u1.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, auxN, N);
+ auxN -= gmm::vect_sp(auxN, no) * no;
+ zt = ((V - un * no) - auxN) * (r * alpha) - zt; // zt = r*alpha*(u_T-w_T)
+ } else {
+ zt = (V - un * no) * (r * alpha) - zt; // zt = r*alpha*u_T
+ }
+ }
+ break;
+
+ case 2 : // calculate [g] and [no]
+ // calculate [ln] and [lt] from [lnt] and [no]
+ // calculate [un] and [zt] interpolating [U2],[WT2] on [mf_u2]
+ {
+ const projected_fem &pfe = dynamic_cast<const projected_fem&>(*ctx.pf());
+ pfe.projection_data(ctx, no, g);
+ gmm::scale(no, scalar_type(-1)); // pointing outwards from mf_u1
+ }
+
+ if (!contact_only && pmf_lambda) {
+ ln = gmm::vect_sp(lnt, no);
+ lt = lnt - ln * no;
+ }
+
+ coeff.resize(mf_u2.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U2, gmm::sub_index
+ (mf_u2.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, V, N);
+ un = gmm::vect_sp(V, no);
+ if (!contact_only) {
+ if (gmm::vect_size(WT2) == gmm::vect_size(U2)) {
+ gmm::copy(gmm::sub_vector
+ (WT2, gmm::sub_index
+ (mf_u2.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, auxN, N);
+ auxN -= gmm::vect_sp(auxN, no) * no;
+ zt = ((V - un * no) - auxN) * (r * alpha); // zt = r*alpha*(u_T-w_T)
+ } else {
+ zt = (V - un * no) * (r * alpha); // zt = r*alpha*u_T
+ }
+ }
+ break;
+
+ case 3 : // calculate [ln] or [lnt] interpolating [lambda] on [mf_lambda]
+ if (pmf_lambda) {
+ coeff.resize(pmf_lambda->nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (lambda, gmm::sub_index
+ (pmf_lambda->ind_basic_dof_of_element(cv))), coeff);
+ if (contact_only) {
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ ln = aux1[0];
+ } else {
+ ctx.pf()->interpolation(ctx, coeff, lnt, N);
+ }
+ }
+ break;
+
+ case 4 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+ GMM_ASSERT1(!contact_only, "Invalid friction option");
+ if (pmf_coeff) {
+ coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (friction_coeff, gmm::sub_index
+ (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ f_coeff = aux1[0];
+ }
+ break;
+
+ default : GMM_ASSERT1(false, "Invalid option");
+ }
+
+ }
+
+
+ //=========================================================================
+ //
+ // Integral augmented Lagrangian brick (given obstacle, u, lambda).
+ //
+ //=========================================================================
+
+ template<typename MAT, typename VECT1>
+ void asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix // frictionless
+ (MAT &Kul, MAT &Klu, MAT &Kll, MAT &Kuu,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ size_type subterm1 = (option == 3) ? K_UL_V2 : K_UL_V1;
+ size_type subterm2 = (option == 3) ? K_UL_V4 : K_UL_V3;
+ size_type subterm3 = (option == 3) ? K_LL_V2 : K_LL_V1;
+ size_type subterm4 = (option == 2) ? K_UU_V2 : K_UU_V1;
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+ nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+ nterm3(subterm3, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+ nterm4(subterm4, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ switch (option) {
+ case 1: case 3:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // UL
+ "M$2(#3,#1)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#1))(i,:,:,i); " // LU
+ "M$3(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:)"); // LL
+ break;
+ case 2:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // UL
+ "M$3(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:);" // LL
+ "M$4(#1,#1)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#1))(i,j,:,i,:,j)"); // UU
+ break;
+ }
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_nonlinear_term(&nterm3);
+ assem.push_nonlinear_term(&nterm4);
+ assem.push_mat(Kul);
+ assem.push_mat(Klu);
+ assem.push_mat(Kll);
+ assem.push_mat(Kuu);
+ assem.assembly(rg);
+ }
+
+ template<typename MAT, typename VECT1>
+ void asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix // with friction
+ (MAT &Kul, MAT &Klu, MAT &Kll, MAT &Kuu,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT,
+ scalar_type gamma, const VECT1 *VT,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm1, subterm2, subterm3;
+ switch (option) {
+ case 1 : subterm1 = K_UL_FRICT_V1; subterm2 = K_UL_FRICT_V4;
+ subterm3 = K_LL_FRICT_V1; break;
+ case 2 : subterm1 = K_UL_FRICT_V3; subterm2 = K_UL_FRICT_V4;
+ subterm3 = K_LL_FRICT_V1; break;
+ case 3 : subterm1 = K_UL_FRICT_V2; subterm2 = K_UL_FRICT_V5;
+ subterm3 = K_LL_FRICT_V2; break;
+ case 4 : subterm1 = K_UL_FRICT_V7; subterm2 = K_UL_FRICT_V8;
+ subterm3 = K_LL_FRICT_V4; break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+
+ size_type subterm4 = K_UU_FRICT_V3;
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+ nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+ nterm3(subterm3, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+ nterm4(subterm4, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+ getfem::generic_assembly assem;
+ switch (option) {
+ case 1: case 3: case 4:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // UL
+ "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU
+ "M$3(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j)"); // LL
+ break;
+ case 2:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // UL
+ "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU
+ "M$3(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j);" // LL
+ "M$4(#1,#1)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)"); // UU
+ break;
+ }
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_nonlinear_term(&nterm3);
+ assem.push_nonlinear_term(&nterm4);
+ assem.push_mat(Kul);
+ assem.push_mat(Klu);
+ assem.push_mat(Kll);
+ assem.push_mat(Kuu);
+ assem.assembly(rg);
+ }
+
+ template<typename VECT1>
+ void asm_Alart_Curnier_contact_rigid_obstacle_rhs // frictionless
+ (VECT1 &Ru, VECT1 &Rl,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ size_type subterm1;
+ switch (option) {
+ case 1 : subterm1 = RHS_U_V1; break;
+ case 2 : subterm1 = RHS_U_V2; break;
+ case 3 : subterm1 = RHS_U_V4; break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+ size_type subterm2 = (option == 3) ? RHS_L_V2 : RHS_L_V1;
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda),
+ nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); "
+ "V$2(#3)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3))(i,:)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_vec(Ru);
+ assem.push_vec(Rl);
+ assem.assembly(rg);
+
+ }
+
+ template<typename VECT1>
+ void asm_Alart_Curnier_contact_rigid_obstacle_rhs // with friction
+ (VECT1 &Ru, VECT1 &Rl,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT,
+ scalar_type gamma, const VECT1 *VT,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm1, subterm2;
+ switch (option) {
+ case 1 : subterm1 = RHS_U_FRICT_V1; subterm2 = RHS_L_FRICT_V1; break;
+ case 2 : subterm1 = RHS_U_FRICT_V6; subterm2 = RHS_L_FRICT_V1; break;
+ case 3 : subterm1 = RHS_U_FRICT_V4; subterm2 = RHS_L_FRICT_V2; break;
+ case 4 : subterm1 = RHS_U_FRICT_V5; subterm2 = RHS_L_FRICT_V4; break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm1(subterm1, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT),
+ nterm2(subterm2, r, mf_u, U, mf_obs, obs, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT, gamma, VT);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+ "V$2(#3)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3))(i,:,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ assem.push_mf(mf_lambda);
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_vec(Ru);
+ assem.push_vec(Rl);
+ assem.assembly(rg);
+ }
+
+ struct integral_contact_rigid_obstacle_brick : public virtual_brick {
+
+ bool Tresca_version, contact_only;
+ int option;
+
+ // option = 1 : Alart-Curnier
+ // option = 2 : symmetric Alart-Curnier (with friction, almost symmetric),
+ // option = 3 : Unsymmetric method based on augmented multipliers
+ // option = 4 : Unsymmetric method based on augmented multipliers
+ // with De-Saxce projection.
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ GMM_ASSERT1(mims.size() == 1,
+ "Integral contact with rigid obstacle bricks need a single mesh_im");
+ GMM_ASSERT1(vl.size() == 2,
+ "Integral contact with rigid obstacle bricks need two variables");
+ GMM_ASSERT1(dl.size() >= 2 && dl.size() <= 7,
+ "Wrong number of data for integral contact with rigid obstacle "
+ << "brick, " << dl.size() << " should be between 2 and 7.");
+ GMM_ASSERT1(matl.size() == size_type(3 + (option == 2 && !contact_only)),
+ "Wrong number of terms for "
+ "integral contact with rigid obstacle brick");
+
+ // variables : u, lambda. The variable lambda should be scalar in the
+ // frictionless case and vector valued in the case with
+ // friction.
+ // data : obstacle, r for the version without friction
+ // : obstacle, r, friction_coeff, alpha, w_t, gamma, v_t for
+ // the version with friction. alpha, w_t , gamma and v_t
+ // are optional and equal to 1, 0, 1 and 0 by default,
+ // respectively.
+
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const model_real_plain_vector &lambda = md.real_variable(vl[1]);
+ const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[1]);
+ GMM_ASSERT1(mf_lambda.get_qdim() == (contact_only ? 1 : mf_u.get_qdim()),
+ "The contact stress has not the right dimension");
+ const model_real_plain_vector &obstacle = md.real_variable(dl[0]);
+ const mesh_fem &mf_obstacle = md.mesh_fem_of_variable(dl[0]);
+ size_type sl = gmm::vect_size(obstacle) * mf_obstacle.get_qdim()
+ / mf_obstacle.nb_dof();
+ GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+ "the right format");
+
+ const model_real_plain_vector &vr = md.real_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+ const mesh_im &mim = *mims[0];
+
+ const model_real_plain_vector &friction_coeff
+ = contact_only ? u : md.real_variable(dl[2]);
+ const mesh_fem *pmf_coeff = contact_only ? 0 : md.pmesh_fem_of_variable(dl[2]);
+ sl = gmm::vect_size(friction_coeff);
+ if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+ GMM_ASSERT1(sl == 1 || contact_only,
+ "the data corresponding to the friction coefficient "
+ "has not the right format");
+
+ scalar_type alpha = 1;
+ if (!contact_only && dl.size() >= 4) {
+ alpha = md.real_variable(dl[3])[0];
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[3])) == 1,
+ "Parameter alpha should be a scalar");
+ }
+
+ const model_real_plain_vector *WT
+ = (!contact_only && dl.size()>=5) ? &(md.real_variable(dl[4])) : 0;
+
+ scalar_type gamma = 1;
+ if (!contact_only && dl.size() >= 6) {
+ gamma = md.real_variable(dl[5])[0];
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[5])) == 1,
+ "Parameter gamma should be a scalar");
+ }
+
+ const model_real_plain_vector *VT
+ = (!contact_only && dl.size()>=7) ? &(md.real_variable(dl[6])) : 0;
+
+ mesh_region rg(region);
+ mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+ if (version & model::BUILD_MATRIX) {
+ GMM_TRACE2("Integral contact with rigid obstacle friction tangent term");
+ gmm::clear(matl[0]); gmm::clear(matl[1]); gmm::clear(matl[2]);
+ if (matl.size() >= 4) gmm::clear(matl[3]);
+ size_type fourthmat = (matl.size() >= 4) ? 3 : 1;
+ if (contact_only)
+ asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix
+ (matl[0], matl[1], matl[2], matl[fourthmat], mim,
+ mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda, vr[0],
+ rg, option);
+ else
+ asm_Alart_Curnier_contact_rigid_obstacle_tangent_matrix
+ (matl[0], matl[1], matl[2], matl[fourthmat], mim,
+ mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda,
+ pmf_coeff, &friction_coeff, vr[0], alpha, WT, gamma, VT,
+ rg, option);
+ }
+
+ if (version & model::BUILD_RHS) {
+ gmm::clear(vecl[0]); gmm::clear(vecl[1]); gmm::clear(vecl[2]);
+ if (matl.size() >= 4) gmm::clear(vecl[3]);
+
+ if (contact_only)
+ asm_Alart_Curnier_contact_rigid_obstacle_rhs
+ (vecl[0], vecl[2], mim,
+ mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda, vr[0],
+ rg, option);
+ else
+ asm_Alart_Curnier_contact_rigid_obstacle_rhs
+ (vecl[0], vecl[2], mim,
+ mf_u, u, mf_obstacle, obstacle, mf_lambda, lambda,
+ pmf_coeff, &friction_coeff, vr[0], alpha, WT, gamma, VT,
+ rg, option);
+ }
+
+ }
+
+ integral_contact_rigid_obstacle_brick(bool contact_only_, int option_) {
+ Tresca_version = false; // for future version ...
+ option = option_;
+ contact_only = contact_only_;
+ set_flags(contact_only
+ ? "Integral contact with rigid obstacle brick"
+ : "Integral contact and friction with rigid obstacle brick",
+ false /* is linear*/,
+ (option==2) && contact_only /* is symmetric */,
+ false /* is coercive */,
+ true /* is real */, false /* is complex */);
+ }
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition with a rigid obstacle given
+ // by a level set.
+ //=========================================================================
+
+ size_type add_integral_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &dataname_obs,
+ const std::string &dataname_r, size_type region, int option) {
+
+ pbrick pbr = new integral_contact_rigid_obstacle_brick(true, option);
+
+ model::termlist tl;
+
+ switch (option) {
+ case 1 : case 3 :
+ tl.push_back(model::term_description(varname_u, multname_n, false)); // UL
+ tl.push_back(model::term_description(multname_n, varname_u, false)); // LU
+ tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+ break;
+ case 2 :
+ tl.push_back(model::term_description(varname_u, multname_n, true)); // UL
+ tl.push_back(model::term_description(varname_u, varname_u, true)); // UU (fourthmat == 1)
+ tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+ break;
+ default :GMM_ASSERT1(false,
+ "Incorrect option for integral contact brick");
+
+ }
+ model::varnamelist dl(1, dataname_obs);
+ dl.push_back(dataname_r);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname_n);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ //=========================================================================
+ // Add a contact condition with Coulomb friction with a rigid obstacle
+ // given by a level set.
+ //=========================================================================
+
+ size_type add_integral_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname, const std::string &dataname_obs,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region, int option,
+ const std::string &dataname_alpha, const std::string &dataname_wt,
+ const std::string &dataname_gamma, const std::string &dataname_vt) {
+
+ pbrick pbr
+ = new integral_contact_rigid_obstacle_brick(false, option);
+
+ model::termlist tl;
+
+ switch (option) {
+ case 1: case 3: case 4:
+ tl.push_back(model::term_description(varname_u, multname, false)); // UL
+ tl.push_back(model::term_description(multname, varname_u, false)); // LU
+ tl.push_back(model::term_description(multname, multname, true)); // LL
+ break;
+ case 2:
+ tl.push_back(model::term_description(varname_u, multname, false)); // UL
+ tl.push_back(model::term_description(multname, varname_u, false)); // LU
+ tl.push_back(model::term_description(multname, multname, true)); // LL
+ tl.push_back(model::term_description(varname_u, varname_u, true)); // UU
+ break;
+ default :GMM_ASSERT1(false,
+ "Incorrect option for integral contact brick");
+ }
+ model::varnamelist dl(1, dataname_obs);
+ dl.push_back(dataname_r);
+ dl.push_back(dataname_friction_coeff);
+ if (dataname_alpha.size()) {
+ dl.push_back(dataname_alpha);
+ if (dataname_wt.size()) {
+ dl.push_back(dataname_wt);
+ if (dataname_gamma.size()) {
+ dl.push_back(dataname_gamma);
+ if (dataname_vt.size()) dl.push_back(dataname_vt);
+ }
+ }
+ }
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ //=========================================================================
+ //
+ // Integral penalized contact with friction (given obstacle, u, lambda).
+ //
+ //=========================================================================
+
+ template<typename MAT, typename VECT1>
+ void asm_penalized_contact_rigid_obstacle_tangent_matrix // frictionless
+ (MAT &Kuu,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm((option == 1) ? K_UU_V1 : K_UU_V2, r,
+ mf_u, U, mf_obs, obs, pmf_lambda, lambda);
+
+ const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+ getfem::generic_assembly assem;
+ assem.set("M(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_mat(Kuu);
+ assem.assembly(rg);
+ }
+
+
+ template<typename VECT1>
+ void asm_penalized_contact_rigid_obstacle_rhs // frictionless
+ (VECT1 &Ru,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm((option == 1) ? RHS_U_V5 : RHS_U_V2, r,
+ mf_u, U, mf_obs, obs, pmf_lambda, lambda);
+
+ const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+ getfem::generic_assembly assem;
+ assem.set("V(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); ");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(Ru);
+ assem.assembly(rg);
+ }
+
+ template<typename MAT, typename VECT1>
+ void asm_penalized_contact_rigid_obstacle_tangent_matrix // with friction
+ (MAT &Kuu,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm = 0;
+ switch (option) {
+ case 1 : subterm = K_UU_FRICT_V4; break;
+ case 2 : subterm = K_UU_FRICT_V3; break;
+ case 3 : subterm = K_UU_FRICT_V5; break;
+ }
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm(subterm, r, mf_u, U, mf_obs, obs, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, alpha, WT);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+ : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+ getfem::generic_assembly assem;
+ assem.set("M(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ else if (pmf_coeff)
+ assem.push_mf(*pmf_coeff); // dummy
+
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+
+ assem.push_nonlinear_term(&nterm);
+ assem.push_mat(Kuu);
+ assem.assembly(rg);
+ }
+
+
+ template<typename VECT1>
+ void asm_penalized_contact_rigid_obstacle_rhs // with friction
+ (VECT1 &Ru,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm = 0;
+ switch (option) {
+ case 1 : subterm = RHS_U_FRICT_V7; break;
+ case 2 : subterm = RHS_U_FRICT_V6; break;
+ case 3 : subterm = RHS_U_FRICT_V8; break;
+ }
+
+ contact_rigid_obstacle_nonlinear_term
+ nterm(subterm, r, mf_u, U, mf_obs, obs, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, alpha, WT);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+ : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+ getfem::generic_assembly assem;
+ assem.set("V(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); ");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ else if (pmf_coeff)
+ assem.push_mf(*pmf_coeff); // dummy
+
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(Ru);
+ assem.assembly(rg);
+ }
+
+
+ struct penalized_contact_rigid_obstacle_brick : public virtual_brick {
+
+ bool Tresca_version, contact_only;
+ int option;
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ // Integration method
+ GMM_ASSERT1(mims.size() == 1,
+ "Penalized contact with rigid obstacle bricks need a single mesh_im");
+ const mesh_im &mim = *mims[0];
+
+ // Variables : u
+ GMM_ASSERT1(vl.size() == 1,
+ "Penalized contact with rigid obstacle bricks need a single variable");
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+
+ size_type N = mf_u.linked_mesh().dim();
+
+ // Data : obs, r, [lambda,] [friction_coeff,] [alpha,] [WT]
+ size_type nb_data_1 = ((option == 1) ? 2 : 3) + (contact_only ? 0 : 1);
+ size_type nb_data_2 = nb_data_1 + (contact_only ? 0 : 2);
+ GMM_ASSERT1(dl.size() >= nb_data_1 && dl.size() <= nb_data_2,
+ "Wrong number of data for penalized contact with rigid obstacle "
+ << "brick, " << dl.size() << " should be between "
+ << nb_data_1 << " and " << nb_data_2 << ".");
+
+ size_type nd = 0;
+ const model_real_plain_vector &obs = md.real_variable(dl[nd]);
+ const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[nd]);
+ size_type sl = gmm::vect_size(obs) * mf_obs.get_qdim() / mf_obs.nb_dof();
+ GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+ "the right format");
+
+ nd++;
+ const model_real_plain_vector &vr = md.real_variable(dl[nd]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+ const model_real_plain_vector *lambda = 0;
+ const mesh_fem *pmf_lambda = 0;
+ if (option != 1) {
+ nd++;
+ lambda = &(md.real_variable(dl[nd]));
+ pmf_lambda = md.pmesh_fem_of_variable(dl[nd]);
+ sl = gmm::vect_size(*lambda) * pmf_lambda->get_qdim() / pmf_lambda->nb_dof();
+ GMM_ASSERT1(sl == (contact_only ? 1 : N),
+ "the data corresponding to the contact stress "
+ "has not the right format");
+ }
+
+ const model_real_plain_vector *f_coeff = 0;
+ const mesh_fem *pmf_coeff = 0;
+ scalar_type alpha = 1;
+ const model_real_plain_vector *WT = 0;
+ if (!contact_only) {
+ nd++;
+ f_coeff = &(md.real_variable(dl[nd]));
+ pmf_coeff = md.pmesh_fem_of_variable(dl[nd]);
+ sl = gmm::vect_size(*f_coeff);
+ if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+ GMM_ASSERT1(sl == 1,
+ "the data corresponding to the friction coefficient "
+ "has not the right format");
+ if (dl.size() > nd+1) {
+ nd++;
+ alpha = md.real_variable(dl[nd])[0];
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[nd])) == 1,
+ "Parameter alpha should be a scalar");
+ }
+
+ if (dl.size() > nd+1) {
+ nd++;
+ WT = &(md.real_variable(dl[nd]));
+ }
+ }
+
+ GMM_ASSERT1(matl.size() == 1, "Wrong number of terms for "
+ "penalized contact with rigid obstacle brick");
+
+ mesh_region rg(region);
+ mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+ if (version & model::BUILD_MATRIX) {
+ GMM_TRACE2("Penalized contact with rigid obstacle tangent term");
+ gmm::clear(matl[0]);
+ if (contact_only)
+ asm_penalized_contact_rigid_obstacle_tangent_matrix
+ (matl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+ vr[0], rg, option);
+ else
+ asm_penalized_contact_rigid_obstacle_tangent_matrix
+ (matl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, vr[0], alpha, WT, rg, option);
+ }
+
+ if (version & model::BUILD_RHS) {
+ gmm::clear(vecl[0]);
+ if (contact_only)
+ asm_penalized_contact_rigid_obstacle_rhs
+ (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+ vr[0], rg, option);
+ else
+ asm_penalized_contact_rigid_obstacle_rhs
+ (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, vr[0], alpha, WT, rg, option);
+ }
+
+ }
+
+ penalized_contact_rigid_obstacle_brick(bool contact_only_, int option_) {
+ Tresca_version = false; // for future version ...
+ contact_only = contact_only_;
+ option = option_;
+ set_flags(contact_only
+ ? "Integral penalized contact with rigid obstacle brick"
+ : "Integral penalized contact and friction with rigid obstacle brick",
+ false /* is linear*/, contact_only /* is symmetric */,
+ true /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition with a rigid obstacle given
+ // by a level set.
+ //=========================================================================
+
+ size_type add_penalized_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ size_type region, int option, const std::string &dataname_n) {
+
+ pbrick pbr = new penalized_contact_rigid_obstacle_brick(true, option);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, true));
+
+ model::varnamelist dl(1, dataname_obs);
+ dl.push_back(dataname_r);
+ switch (option) {
+ case 1: break;
+ case 2: dl.push_back(dataname_n); break;
+ default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+ }
+
+ model::varnamelist vl(1, varname_u);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+ //=========================================================================
+ // Add a contact condition with friction with a rigid obstacle given
+ // by a level set.
+ //=========================================================================
+
+ size_type add_penalized_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ size_type region, int option, const std::string &dataname_lambda,
+ const std::string &dataname_alpha, const std::string &dataname_wt) {
+
+ pbrick pbr = new penalized_contact_rigid_obstacle_brick(false, option);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+
+ model::varnamelist dl(1, dataname_obs);
+ dl.push_back(dataname_r);
+ switch (option) {
+ case 1: break;
+ case 2: case 3: dl.push_back(dataname_lambda); break;
+ default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+ }
+ dl.push_back(dataname_friction_coeff);
+ if (dataname_alpha.size() > 0) {
+ dl.push_back(dataname_alpha);
+ if (dataname_wt.size() > 0) dl.push_back(dataname_wt);
+ }
+
+ model::varnamelist vl(1, varname_u);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ //=========================================================================
+ //
+ // Integral contact (with friction) between non-matching meshes.
+ //
+ //=========================================================================
+
+ template<typename MAT, typename VEC>
+ void asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix // frictionless
+ (MAT &Ku1l, MAT &Klu1, MAT &Ku2l, MAT &Klu2, MAT &Kll,
+ MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VEC &U1,
+ const getfem::mesh_fem &mf_u2, const VEC &U2,
+ const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ size_type subterm1 = (option == 3) ? K_UL_V2 : K_UL_V1;
+ size_type subterm2 = (option == 3) ? K_UL_V4 : K_UL_V3;
+ size_type subterm3 = (option == 3) ? K_LL_V2 : K_LL_V1;
+ size_type subterm4 = (option == 2) ? K_UU_V2 : K_UU_V1;
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+ nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+ nterm3(subterm3, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+ nterm4(subterm4, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ switch (option) {
+ case 1: case 3:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // U1L
+ "M$2(#3,#1)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#1))(i,:,:,i); " // LU1
+ "M$3(#2,#3)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#2).Base(#3))(i,:,i,:); " // U2L
+ "M$4(#3,#2)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3).vBase(#2))(i,:,:,i); " // LU2
+ "M$5(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:)"); // LL
+ break;
+ case 2:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#1).Base(#3))(i,:,i,:); " // U1L
+ "M$3(#2,#3)+=comp(NonLin$2(#1,#1,#2,#3).vBase(#2).Base(#3))(i,:,i,:); " // U2L
+ "M$5(#3,#3)+=comp(NonLin$3(#1,#1,#2,#3).Base(#3).Base(#3))(i,:,:); " // LL
+ "M$6(#1,#1)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#1))(i,j,:,i,:,j); " // U1U1
+ "M$7(#2,#2)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#2).vBase(#2))(i,j,:,i,:,j); " // U2U2
+ "M$8(#1,#2)+=comp(NonLin$4(#1,#1,#2,#3).vBase(#1).vBase(#2))(i,j,:,i,:,j)"); // U1U2
+ break;
+ }
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_nonlinear_term(&nterm3);
+ assem.push_nonlinear_term(&nterm4);
+ assem.push_mat(Ku1l);
+ assem.push_mat(Klu1);
+ assem.push_mat(Ku2l);
+ assem.push_mat(Klu2);
+ assem.push_mat(Kll);
+ assem.push_mat(Ku1u1);
+ assem.push_mat(Ku2u2);
+ assem.push_mat(Ku1u2);
+ assem.assembly(rg);
+
+ gmm::scale(Ku2l, scalar_type(-1));
+ if (option != 2) // Klu2 was calculated
+ gmm::scale(Klu2, scalar_type(-1));
+ gmm::scale(Ku1u2, scalar_type(-1));
+ }
+
+ template<typename MAT, typename VEC>
+ void asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix // with friction
+ (MAT &Ku1l, MAT &Klu1, MAT &Ku2l, MAT &Klu2, MAT &Kll,
+ MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VEC &U1,
+ const getfem::mesh_fem &mf_u2, const VEC &U2,
+ const getfem::mesh_fem &mf_lambda, const VEC &lambda,
+ const getfem::mesh_fem *pmf_coeff, const VEC *f_coeff,
+ scalar_type r, scalar_type alpha,
+ const VEC *WT1, const VEC *WT2,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm1, subterm2, subterm3;
+ switch (option) {
+ case 1 :
+ subterm1 = K_UL_FRICT_V1; subterm2 = K_UL_FRICT_V4; subterm3 = K_LL_FRICT_V1;
+ break;
+ case 2 :
+ subterm1 = K_UL_FRICT_V3; subterm2 = K_UL_FRICT_V4; subterm3 = K_LL_FRICT_V1;
+ break;
+ case 3 :
+ subterm1 = K_UL_FRICT_V2; subterm2 = K_UL_FRICT_V5; subterm3 = K_LL_FRICT_V2;
+ break;
+ case 4 :
+ subterm1 = K_UL_FRICT_V7; subterm2 = K_UL_FRICT_V8; subterm3 = K_LL_FRICT_V4;
+ break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+
+ size_type subterm4 = K_UU_FRICT_V3;
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2),
+ nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2),
+ nterm3(subterm3, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2),
+ nterm4(subterm4, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+ getfem::generic_assembly assem;
+ switch (option) {
+ case 1: case 3: case 4:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // U1L
+ "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU1
+ "M$3(#2,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2).vBase(#3))(i,j,:,i,:,j); " // U2L
+ "M$4(#3,#2)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#2))(i,j,:,j,:,i); " // LU2
+ "M$5(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j)"); // LL
+ break;
+ case 2:
+ assem.set
+ ("M$1(#1,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1).vBase(#3))(i,j,:,i,:,j); " // U1L
+ "M$2(#3,#1)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#1))(i,j,:,j,:,i); " // LU1
+ "M$3(#2,#3)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2).vBase(#3))(i,j,:,i,:,j); " // U2L
+ "M$4(#3,#2)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3).vBase(#2))(i,j,:,j,:,i); " // LU2
+ "M$5(#3,#3)+=comp(NonLin$3(#1," + aux_fems + ").vBase(#3).vBase(#3))(i,j,:,i,:,j); " // LL
+ "M$6(#1,#1)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); " // U1U1
+ "M$7(#2,#2)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); " // U2U2
+ "M$8(#1,#2)+=comp(NonLin$4(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j)"); // U1U2
+ break;
+ }
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ assem.push_mf(mf_lambda);
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_nonlinear_term(&nterm3);
+ assem.push_nonlinear_term(&nterm4);
+ assem.push_mat(Ku1l);
+ assem.push_mat(Klu1);
+ assem.push_mat(Ku2l);
+ assem.push_mat(Klu2);
+ assem.push_mat(Kll);
+ assem.push_mat(Ku1u1);
+ assem.push_mat(Ku2u2);
+ assem.push_mat(Ku1u2);
+ assem.assembly(rg);
+
+ gmm::scale(Ku2l, scalar_type(-1));
+ gmm::scale(Klu2, scalar_type(-1));
+ gmm::scale(Ku1u2, scalar_type(-1));
+ }
+
+ template<typename VECT1>
+ void asm_Alart_Curnier_contact_nonmatching_meshes_rhs // frictionless
+ (VECT1 &Ru1, VECT1 &Ru2, VECT1 &Rl,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ size_type subterm1;
+ switch (option) {
+ case 1 : subterm1 = RHS_U_V1; break;
+ case 2 : subterm1 = RHS_U_V2; break;
+ case 3 : subterm1 = RHS_U_V4; break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+ size_type subterm2 = (option == 3) ? RHS_L_V2 : RHS_L_V1;
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda),
+ nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda);
+
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#1))(i,:,i); "
+ "V$2(#2)+=comp(NonLin$1(#1,#1,#2,#3).vBase(#2))(i,:,i); "
+ "V$3(#3)+=comp(NonLin$2(#1,#1,#2,#3).Base(#3))(i,:)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ assem.push_mf(mf_lambda);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_vec(Ru1);
+ assem.push_vec(Ru2);
+ assem.push_vec(Rl);
+ assem.assembly(rg);
+
+ gmm::scale(Ru2, scalar_type(-1));
+ }
+
+ template<typename VECT1>
+ void asm_Alart_Curnier_contact_nonmatching_meshes_rhs // with friction
+ (VECT1 &Ru1, VECT1 &Ru2, VECT1 &Rl,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem &mf_lambda, const VECT1 &lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff,
+ scalar_type r, scalar_type alpha,
+ const VECT1 *WT1, const VECT1 *WT2,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm1, subterm2;
+ switch (option) {
+ case 1 : subterm1 = RHS_U_FRICT_V1; subterm2 = RHS_L_FRICT_V1; break;
+ case 2 : subterm1 = RHS_U_FRICT_V6; subterm2 = RHS_L_FRICT_V1; break;
+ case 3 : subterm1 = RHS_U_FRICT_V4; subterm2 = RHS_L_FRICT_V2; break;
+ case 4 : subterm1 = RHS_U_FRICT_V5; subterm2 = RHS_L_FRICT_V4; break;
+ default : GMM_ASSERT1(false, "Incorrect option");
+ }
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm1(subterm1, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2),
+ nterm2(subterm2, r, mf_u1, U1, mf_u2, U2, &mf_lambda, &lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4" : "#1,#2,#3";
+
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+ "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i); "
+ "V$3(#3)+=comp(NonLin$2(#1," + aux_fems + ").vBase(#3))(i,:,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ assem.push_mf(mf_lambda);
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_vec(Ru1);
+ assem.push_vec(Ru2);
+ assem.push_vec(Rl);
+ assem.assembly(rg);
+
+ gmm::scale(Ru2, scalar_type(-1));
+ }
+
+ struct integral_contact_nonmatching_meshes_brick : public virtual_brick {
+
+ size_type rg1, rg2; // ids of mesh regions on mf_u1 and mf_u2 that are
+ // expected to come in contact.
+ mutable getfem::pfem pfem_proj; // cached fem and mesh_fem for the
+ mutable getfem::mesh_fem *pmf_u2_proj; // projection between nonmatching meshes
+ bool Tresca_version, contact_only;
+ int option;
+
+ // option = 1 : Alart-Curnier
+ // option = 2 : symmetric Alart-Curnier (almost symmetric with friction)
+ // option = 3 : New method
+ // option = 4 : New method based on De-Saxce.
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ // Integration method
+ GMM_ASSERT1(mims.size() == 1,
+ "Integral contact between nonmatching meshes bricks need a single mesh_im");
+ const mesh_im &mim = *mims[0];
+
+ // Variables : u1, u2, lambda
+ // the variable lambda should be scalar in the frictionless
+ // case and vector valued in the case with friction.
+ GMM_ASSERT1(vl.size() == 3,
+ "Integral contact between nonmatching meshes bricks need three variables");
+ const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+ const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+ const model_real_plain_vector &lambda = md.real_variable(vl[2]);
+ const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[2]);
+ GMM_ASSERT1(mf_lambda.get_qdim() == (contact_only ? 1 : mf_u1.get_qdim()),
+ "The contact stress variable has not the right dimension");
+
+ // Data : r, [friction_coeff,] [alpha,] [WT1, WT2]
+ // alpha, WT1, WT2 are optional and equal to 1, 0 and 0 by default respectively.
+ if (contact_only) {
+ GMM_ASSERT1(dl.size() == 1,
+ "Wrong number of data for integral contact between nonmatching meshes "
+ << "brick, the number of data should be equal to 1 .");
+ }
+ else {
+ GMM_ASSERT1(dl.size() >= 2 && dl.size() <= 5,
+ "Wrong number of data for integral contact between nonmatching meshes "
+ << "brick, it should be between 2 and 5 instead of " << dl.size() << " .");
+ }
+ const model_real_plain_vector &vr = md.real_variable(dl[0]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+ const model_real_plain_vector *f_coeff = 0, *WT1 = 0, *WT2 = 0;
+ const mesh_fem *pmf_coeff = 0;
+ scalar_type alpha = 1;
+ if (!contact_only) {
+ f_coeff = &(md.real_variable(dl[1]));
+ pmf_coeff = md.pmesh_fem_of_variable(dl[1]);
+
+ size_type sl = gmm::vect_size(*f_coeff);
+ if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+ GMM_ASSERT1(sl == 1,
+ "the data corresponding to the friction coefficient "
+ "has not the right format");
+
+ if (dl.size() >= 3) {
+ alpha = md.real_variable(dl[2])[0];
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[2])) == 1,
+ "Parameter alpha should be a scalar");
+ }
+
+ if (dl.size() >= 4)
+ WT1 = &(md.real_variable(dl[3]));
+
+ if (dl.size() >= 5)
+ WT2 = &(md.real_variable(dl[4]));
+ }
+
+ // Matrix terms (T_u1l, T_lu1, T_u2l, T_lu2, T_ll, T_u1u1, T_u2u2, T_u1u2)
+ GMM_ASSERT1(matl.size() == size_type(3 + // U1L, U2L, LL
+ 2 * !is_symmetric() + // LU1, LU2
+ 3 * (option == 2)), // U1U1, U2U2, U1U2
+ "Wrong number of terms for "
+ "integral contact between nonmatching meshes brick");
+
+ mesh_region rg(region);
+ mf_u1.linked_mesh().intersect_with_mpi_region(rg);
+
+ size_type N = mf_u1.linked_mesh().dim();
+
+ // projection of the second mesh_fem onto the mesh of the first mesh_fem
+ if (!pmf_u2_proj) {
+ pmf_u2_proj = new getfem::mesh_fem(mim.linked_mesh(), dim_type(N));
+ pfem_proj = new_projected_fem(mf_u2, mim, rg2, rg1);
+ pmf_u2_proj->set_finite_element(mim.linked_mesh().convex_index(), pfem_proj);
+ }
+
+ size_type nbdof1 = mf_u1.nb_dof();
+ size_type nbdof_lambda = mf_lambda.nb_dof();
+ size_type nbdof2 = mf_u2.nb_dof();
+ size_type nbsub = pmf_u2_proj->nb_basic_dof();
+
+ std::vector<size_type> ind;
+ pmf_u2_proj->get_global_dof_index(ind);
+ gmm::unsorted_sub_index SUBI(ind);
+
+ gmm::csc_matrix<scalar_type> Rsub(nbdof2, nbsub), Esub(nbsub, nbdof2);
+ if (mf_u2.is_reduced()) {
+ gmm::copy(gmm::sub_matrix(mf_u2.reduction_matrix(),
+ gmm::sub_interval(0, nbdof2), SUBI),
+ Rsub);
+ gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+ SUBI, gmm::sub_interval(0, nbdof2)),
+ Esub);
+ }
+
+ model_real_plain_vector u2_proj(nbsub);
+ if (mf_u2.is_reduced())
+ gmm::mult(Esub, u2, u2_proj);
+ else
+ gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+ size_type U1L = 0;
+ size_type LU1 = U1L + (is_symmetric() ? 0 : 1);
+ size_type U2L = LU1 + 1;
+ size_type LU2 = U2L + (is_symmetric() ? 0 : 1);
+ size_type LL = LU2 + 1;
+ size_type U1U1 = (option == 1 || option == 3) ? U1L : LL + 1;
+ size_type U2U2 = (option == 1 || option == 3) ? U2L : LL + 2;
+ size_type U1U2 = (option == 1 || option == 3) ? U1L : LL + 3;
+
+ if (version & model::BUILD_MATRIX) {
+ GMM_TRACE2("Integral contact between nonmatching meshes "
+ "tangent term");
+ for (size_type i = 0; i < matl.size(); i++) gmm::clear(matl[i]);
+
+ model_real_sparse_matrix Ku2l(nbsub, nbdof_lambda);
+ model_real_sparse_matrix Klu2(nbdof_lambda, nbsub);
+ model_real_sparse_matrix Ku2u2(nbsub, nbsub);
+ model_real_sparse_matrix Ku1u2(nbdof1, nbsub);
+
+ if (contact_only)
+ asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix
+ (matl[U1L], matl[LU1], Ku2l, Klu2, matl[LL], matl[U1U1], Ku2u2, Ku1u2,
+ mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+ vr[0], rg, option);
+ else
+ asm_Alart_Curnier_contact_nonmatching_meshes_tangent_matrix
+ (matl[U1L], matl[LU1], Ku2l, Klu2, matl[LL], matl[U1U1], Ku2u2, Ku1u2,
+ mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+ pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+ if (mf_u2.is_reduced()) {
+ gmm::mult(Rsub, Ku2l, matl[U2L]);
+ if (LU2 != U2L) gmm::mult(Klu2, Esub, matl[LU2]);
+ if (U2U2 != U2L) {
+ model_real_sparse_matrix tmp(nbsub, nbdof2);
+ gmm::mult(Ku2u2, Esub, tmp);
+ gmm::mult(Rsub, tmp, matl[U2U2]);
+ gmm::mult(Ku1u2, Esub, matl[U1U2]);
+ }
+ }
+ else {
+ gmm::copy(Ku2l, gmm::sub_matrix(matl[U2L], SUBI, gmm::sub_interval(0, nbdof_lambda)));
+ if (LU2 != U2L)
+ gmm::copy(Klu2, gmm::sub_matrix(matl[LU2], gmm::sub_interval(0, nbdof_lambda), SUBI));
+ if (U2U2 != U2L) {
+ gmm::copy(Ku2u2, gmm::sub_matrix(matl[U2U2], SUBI));
+ gmm::copy(Ku1u2, gmm::sub_matrix(matl[U1U2], gmm::sub_interval(0, nbdof1), SUBI));
+ }
+ }
+ }
+
+ if (version & model::BUILD_RHS) {
+ for (size_type i = 0; i < matl.size(); i++) gmm::clear(vecl[i]);
+
+ model_real_plain_vector Ru2(nbsub);
+
+ if (contact_only)
+ asm_Alart_Curnier_contact_nonmatching_meshes_rhs
+ (vecl[U1L], Ru2, vecl[LL], // u1, u2, lambda
+ mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+ vr[0], rg, option);
+ else
+ asm_Alart_Curnier_contact_nonmatching_meshes_rhs
+ (vecl[U1L], Ru2, vecl[LL], // u1, u2, lambda
+ mim, mf_u1, u1, *pmf_u2_proj, u2_proj, mf_lambda, lambda,
+ pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+ if (mf_u2.is_reduced())
+ gmm::mult(Rsub, Ru2, vecl[U2L]);
+ else
+ gmm::copy(Ru2, gmm::sub_vector(vecl[U2L], SUBI));
+ }
+
+ }
+
+ integral_contact_nonmatching_meshes_brick(size_type rg1_, size_type rg2_,
+ bool contact_only_, int option_)
+ : rg1(rg1_), rg2(rg2_), pfem_proj(0), pmf_u2_proj(0),
+ contact_only(contact_only_), option(option_)
+ {
+ Tresca_version = false; // for future version ...
+ set_flags(contact_only
+ ? "Integral contact between nonmatching meshes brick"
+ : "Integral contact and friction between nonmatching "
+ "meshes brick",
+ false /* is linear*/,
+ (option==2) && contact_only /* is symmetric */,
+ false /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ ~integral_contact_nonmatching_meshes_brick()
+ { if (pmf_u2_proj) delete pmf_u2_proj; }
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition between two bodies discretized
+ // with nonmatching meshes.
+ //=========================================================================
+
+ size_type add_integral_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &multname_n,
+ const std::string &dataname_r,
+ size_type region1, size_type region2, int option) {
+
+ pbrick pbr = new integral_contact_nonmatching_meshes_brick
+ (region1, region2, true /* contact_only */, option);
+
+ model::termlist tl;
+
+ switch (option) {
+ case 1 : case 3 :
+ tl.push_back(model::term_description(varname_u1, multname_n, false)); // U1L
+ tl.push_back(model::term_description(multname_n, varname_u1, false)); // LU1
+ tl.push_back(model::term_description(varname_u2, multname_n, false)); // U2L
+ tl.push_back(model::term_description(multname_n, varname_u2, false)); // LU2
+ tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+ break;
+ case 2 :
+ tl.push_back(model::term_description(varname_u1, multname_n, true)); // U1L
+ tl.push_back(model::term_description(varname_u2, multname_n, true)); // U2L
+ tl.push_back(model::term_description(multname_n, multname_n, true)); // LL
+ tl.push_back(model::term_description(varname_u1, varname_u1, true)); // U1U1
+ tl.push_back(model::term_description(varname_u2, varname_u2, true)); // U2U2
+ tl.push_back(model::term_description(varname_u1, varname_u2, true)); // U1U2
+ break;
+ default : GMM_ASSERT1(false,
+ "Incorrect option for integral contact brick");
+ }
+
+ model::varnamelist dl(1, dataname_r);
+
+ model::varnamelist vl(1, varname_u1);
+ vl.push_back(varname_u2);
+ vl.push_back(multname_n);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+ }
+
+
+ //=========================================================================
+ // Add a contact condition with Coulomb friction between two bodies
+ // discretized with nonmatching meshes.
+ //=========================================================================
+
+ size_type add_integral_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &multname,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region1, size_type region2, int option,
+ const std::string &dataname_alpha,
+ const std::string &dataname_wt1, const std::string &dataname_wt2) {
+
+ pbrick pbr = new integral_contact_nonmatching_meshes_brick
+ (region1, region2, false /* contact_only */, option);
+
+ model::termlist tl;
+
+ switch (option) {
+ case 1 : case 3 : case 4 :
+ tl.push_back(model::term_description(varname_u1, multname, false)); // 0: U1L
+ tl.push_back(model::term_description(multname, varname_u1, false)); // 1: LU1
+ tl.push_back(model::term_description(varname_u2, multname, false)); // 2: U2L
+ tl.push_back(model::term_description(multname, varname_u2, false)); // 3: LU2
+ tl.push_back(model::term_description(multname, multname, true)); // 4: LL
+ break;
+ case 2 :
+ tl.push_back(model::term_description(varname_u1, multname, false)); // 0: U1L
+ tl.push_back(model::term_description(multname, varname_u1, false)); // 1: LU1
+ tl.push_back(model::term_description(varname_u2, multname, false)); // 2: U2L
+ tl.push_back(model::term_description(multname, varname_u2, false)); // 3: LU2
+ tl.push_back(model::term_description(multname, multname, true)); // 4: LL
+ tl.push_back(model::term_description(varname_u1, varname_u1, true)); // 5: U1U1
+ tl.push_back(model::term_description(varname_u2, varname_u2, true)); // 6: U2U2
+ tl.push_back(model::term_description(varname_u1, varname_u2, true)); // 7: U1U2
+ tl.push_back(model::term_description(varname_u2, varname_u1, true)); // 8: U2U1
+ break;
+ default : GMM_ASSERT1(false,
+ "Incorrect option for integral contact brick");
+ }
+
+ model::varnamelist dl(1, dataname_r); // 0 -> r
+ dl.push_back(dataname_friction_coeff); // 1 -> f_coeff
+ if (dataname_alpha.size()) {
+ dl.push_back(dataname_alpha); // 2 -> alpha
+ if (dataname_wt1.size()) {
+ dl.push_back(dataname_wt1); // 3 -> WT1
+ if (dataname_wt2.size()) {
+ dl.push_back(dataname_wt2); // 4 -> WT2
+ // TODO: VT1, VT2, gamma
+ }
+ }
+ }
+
+ model::varnamelist vl(1, varname_u1);
+ vl.push_back(varname_u2);
+ vl.push_back(multname);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+ }
+
+
+ //=========================================================================
+ //
+ // Integral penalized contact (with friction) between non-matching meshes.
+ //
+ //=========================================================================
+
+ template<typename MAT, typename VECT1>
+ void asm_penalized_contact_nonmatching_meshes_tangent_matrix // frictionless
+ (MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ const scalar_type r, const mesh_region &rg, int option = 1) {
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm((option == 1) ? K_UU_V1 : K_UU_V2, r,
+ mf_u1, U1, mf_u2, U2, pmf_lambda, lambda);
+
+ const std::string aux_fems = pmf_lambda ? "#1,#2,#3" : "#1,#2";
+
+ getfem::generic_assembly assem;
+ assem.set("M$1(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); "
+ "M$2(#2,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); "
+ "M$3(#1,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_mat(Ku1u1);
+ assem.push_mat(Ku2u2);
+ assem.push_mat(Ku1u2);
+ assem.assembly(rg);
+
+ gmm::scale(Ku1u2, scalar_type(-1));
+ }
+
+ template<typename VECT1>
+ void asm_penalized_contact_nonmatching_meshes_rhs // frictionless
+ (VECT1 &Ru1, VECT1 &Ru2,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ scalar_type r, const mesh_region &rg, int option = 1) {
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm((option == 1) ? RHS_U_V5 : RHS_U_V2, r,
+ mf_u1, U1, mf_u2, U2, pmf_lambda, lambda);
+
+ const std::string aux_fems = pmf_lambda ? "#1,#2,#3": "#1,#2";
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+ "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(Ru1);
+ assem.push_vec(Ru2);
+ assem.assembly(rg);
+
+ gmm::scale(Ru2, scalar_type(-1));
+ }
+
+
+ template<typename MAT, typename VECT1>
+ void asm_penalized_contact_nonmatching_meshes_tangent_matrix // with friction
+ (MAT &Ku1u1, MAT &Ku2u2, MAT &Ku1u2, MAT &Ku2u1,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT1, const VECT1 *WT2,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm = 0;
+ switch (option) {
+ case 1 : subterm = K_UU_FRICT_V4; break;
+ case 2 : subterm = K_UU_FRICT_V3; break;
+ case 3 : subterm = K_UU_FRICT_V5; break;
+ }
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm(subterm, r, mf_u1, U1, mf_u2, U2, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+ : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+
+ getfem::generic_assembly assem;
+ assem.set("M$1(#1,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#1))(i,j,:,i,:,j); "
+ "M$2(#2,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#2))(i,j,:,i,:,j); "
+ "M$3(#1,#2)+=comp(NonLin(#1," + aux_fems + ").vBase(#1).vBase(#2))(i,j,:,i,:,j); "
+ "M$4(#2,#1)+=comp(NonLin(#1," + aux_fems + ").vBase(#2).vBase(#1))(i,j,:,i,:,j)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ else if (pmf_coeff)
+ assem.push_mf(*pmf_coeff); // dummy
+
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+
+ assem.push_nonlinear_term(&nterm);
+ assem.push_mat(Ku1u1);
+ assem.push_mat(Ku2u2);
+ assem.push_mat(Ku1u2);
+ assem.push_mat(Ku2u1);
+ assem.assembly(rg);
+
+ gmm::scale(Ku1u2, scalar_type(-1));
+ gmm::scale(Ku2u1, scalar_type(-1));
+ }
+
+
+ template<typename VECT1>
+ void asm_penalized_contact_nonmatching_meshes_rhs // with friction
+ (VECT1 &Ru1, VECT1 &Ru2,
+ const mesh_im &mim,
+ const getfem::mesh_fem &mf_u1, const VECT1 &U1,
+ const getfem::mesh_fem &mf_u2, const VECT1 &U2,
+ const getfem::mesh_fem *pmf_lambda, const VECT1 *lambda,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 *f_coeff, scalar_type r,
+ scalar_type alpha, const VECT1 *WT1, const VECT1 *WT2,
+ const mesh_region &rg, int option = 1) {
+
+ size_type subterm = 0;
+ switch (option) {
+ case 1 : subterm = RHS_U_FRICT_V7; break;
+ case 2 : subterm = RHS_U_FRICT_V6; break;
+ case 3 : subterm = RHS_U_FRICT_V8; break;
+ }
+
+ contact_nonmatching_meshes_nonlinear_term
+ nterm(subterm, r, mf_u1, U1, mf_u2, U2, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, alpha, WT1, WT2);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3,#4"
+ : (pmf_lambda ? "#1,#2,#3": "#1,#2");
+ getfem::generic_assembly assem;
+ assem.set("V$1(#1)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#1))(i,:,i); "
+ "V$2(#2)+=comp(NonLin$1(#1," + aux_fems + ").vBase(#2))(i,:,i)");
+
+ assem.push_mi(mim);
+ assem.push_mf(mf_u1);
+ assem.push_mf(mf_u2);
+
+ if (pmf_lambda)
+ assem.push_mf(*pmf_lambda);
+ else if (pmf_coeff)
+ assem.push_mf(*pmf_coeff); // dummy
+
+ if (pmf_coeff)
+ assem.push_mf(*pmf_coeff);
+
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(Ru1);
+ assem.push_vec(Ru2);
+ assem.assembly(rg);
+
+ gmm::scale(Ru2, scalar_type(-1));
+ }
+
+
+ struct penalized_contact_nonmatching_meshes_brick : public virtual_brick {
+
+ size_type rg1, rg2; // ids of mesh regions on mf_u1 and mf_u2 that are
+ // expected to come in contact.
+ mutable getfem::pfem pfem_proj; // cached fem and mesh_fem for the
+ mutable getfem::mesh_fem *pmf_u2_proj; // projection between nonmatching meshes
+ bool Tresca_version, contact_only;
+ int option;
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ // Integration method
+ GMM_ASSERT1(mims.size() == 1,
+ "Penalized contact between nonmatching meshes bricks need a single mesh_im");
+ const mesh_im &mim = *mims[0];
+
+ // Variables : u1, u2
+ GMM_ASSERT1(vl.size() == 2,
+ "Penalized contact between nonmatching meshes bricks need two variables");
+ const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+ const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+
+ size_type N = mf_u1.linked_mesh().dim();
+
+ // Data : r, [lambda,] [friction_coeff,] [alpha,] [WT1, WT2]
+ size_type nb_data_1 = ((option == 1) ? 1 : 2) + (contact_only ? 0 : 1);
+ size_type nb_data_2 = nb_data_1 + (contact_only ? 0 : 3);
+ GMM_ASSERT1(dl.size() >= nb_data_1 && dl.size() <= nb_data_2,
+ "Wrong number of data for penalized contact between nonmatching meshes "
+ << "brick, " << dl.size() << " should be between "
+ << nb_data_1 << " and " << nb_data_2 << ".");
+
+ size_type nd = 0;
+ const model_real_plain_vector &vr = md.real_variable(dl[nd]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+ size_type sl;
+ const model_real_plain_vector *lambda = 0;
+ const mesh_fem *pmf_lambda = 0;
+ if (option != 1) {
+ nd++;
+ lambda = &(md.real_variable(dl[nd]));
+ pmf_lambda = md.pmesh_fem_of_variable(dl[nd]);
+ sl = gmm::vect_size(*lambda) * pmf_lambda->get_qdim() / pmf_lambda->nb_dof();
+ GMM_ASSERT1(sl == (contact_only ? 1 : N),
+ "the data corresponding to the contact stress "
+ "has not the right format");
+ }
+
+ const model_real_plain_vector *f_coeff = 0;
+ const mesh_fem *pmf_coeff = 0;
+ scalar_type alpha = 1;
+ const model_real_plain_vector *WT1 = 0;
+ const model_real_plain_vector *WT2 = 0;
+ if (!contact_only) {
+ nd++;
+ f_coeff = &(md.real_variable(dl[nd]));
+ pmf_coeff = md.pmesh_fem_of_variable(dl[nd]);
+ sl = gmm::vect_size(*f_coeff);
+ if (pmf_coeff) { sl *= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+ GMM_ASSERT1(sl == 1,
+ "the data corresponding to the friction coefficient "
+ "has not the right format");
+
+ if (dl.size() > nd) {
+ nd++;
+ alpha = md.real_variable(dl[nd])[0];
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(dl[nd])) == 1,
+ "Parameter alpha should be a scalar");
+ }
+
+ if (dl.size() > nd) {
+ nd++;
+ WT1 = &(md.real_variable(dl[nd]));
+ }
+
+ if (dl.size() > nd) {
+ nd++;
+ WT2 = &(md.real_variable(dl[nd]));
+ }
+ }
+
+ GMM_ASSERT1(matl.size() == contact_only ? 3 : 4,
+ "Wrong number of terms for penalized contact "
+ "between nonmatching meshes brick");
+
+ mesh_region rg(region);
+ mf_u1.linked_mesh().intersect_with_mpi_region(rg); // FIXME: mfu_2?
+
+ // projection of the second mesh_fem onto the mesh of the first mesh_fem
+ if (!pmf_u2_proj) {
+ pmf_u2_proj = new getfem::mesh_fem(mim.linked_mesh(), dim_type(N));
+ pfem_proj = new_projected_fem(mf_u2, mim, rg2, rg1);
+ pmf_u2_proj->set_finite_element(mim.linked_mesh().convex_index(), pfem_proj);
+ }
+
+ size_type nbdof1 = mf_u1.nb_dof();
+ size_type nbdof2 = mf_u2.nb_dof();
+ size_type nbsub = pmf_u2_proj->nb_dof();
+
+ std::vector<size_type> ind;
+ pmf_u2_proj->get_global_dof_index(ind);
+ gmm::unsorted_sub_index SUBI(ind);
+
+ gmm::csc_matrix<scalar_type> Rsub(nbdof2, nbsub), Esub(nbsub, nbdof2);
+ if (mf_u2.is_reduced()) {
+ gmm::copy(gmm::sub_matrix(mf_u2.reduction_matrix(),
+ gmm::sub_interval(0, nbdof2), SUBI),
+ Rsub);
+ gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+ SUBI, gmm::sub_interval(0, nbdof2)),
+ Esub);
+ }
+
+ model_real_plain_vector u2_proj(nbsub);
+ if (mf_u2.is_reduced())
+ gmm::mult(Esub, u2, u2_proj);
+ else
+ gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+ if (version & model::BUILD_MATRIX) {
+ GMM_TRACE2("Penalized contact between nonmatching meshes tangent term");
+ gmm::clear(matl[0]);
+ gmm::clear(matl[1]);
+ gmm::clear(matl[2]);
+
+ model_real_sparse_matrix Ku2u2(nbsub,nbsub);
+ model_real_sparse_matrix Ku1u2(nbdof1,nbsub);
+
+ if (contact_only) {
+ asm_penalized_contact_nonmatching_meshes_tangent_matrix
+ (matl[0], Ku2u2, Ku1u2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj,
+ pmf_lambda, lambda, vr[0], rg, option);
+ }
+ else {
+ gmm::clear(matl[3]);
+ model_real_sparse_matrix Ku2u1(nbsub,nbdof1);
+ asm_penalized_contact_nonmatching_meshes_tangent_matrix
+ (matl[0], Ku2u2, Ku1u2, Ku2u1, mim, mf_u1, u1, *pmf_u2_proj, u2_proj,
+ pmf_lambda, lambda, pmf_coeff, f_coeff, vr[0], alpha, WT1, WT1, rg, option);
+ gmm::copy(Ku2u1, gmm::sub_matrix(matl[3], SUBI, gmm::sub_interval(0, nbdof1)));
+ }
+
+ if (mf_u2.is_reduced()) {
+ model_real_sparse_matrix tmp(nbsub, nbdof2);
+ gmm::mult(Ku2u2, Esub, tmp);
+ gmm::mult(Rsub, tmp, matl[1]);
+ gmm::mult(Ku1u2, Esub, matl[2]);
+ }
+ else {
+ gmm::copy(Ku2u2, gmm::sub_matrix(matl[1], SUBI));
+ gmm::copy(Ku1u2, gmm::sub_matrix(matl[2], gmm::sub_interval(0, nbdof1), SUBI));
+ }
+ }
+
+ if (version & model::BUILD_RHS) {
+ gmm::clear(vecl[0]);
+ gmm::clear(vecl[1]);
+
+ model_real_plain_vector Ru2(nbsub);
+
+ if (contact_only)
+ asm_penalized_contact_nonmatching_meshes_rhs
+ (vecl[0], Ru2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj, pmf_lambda, lambda,
+ vr[0], rg, option);
+ else
+ asm_penalized_contact_nonmatching_meshes_rhs
+ (vecl[0], Ru2, mim, mf_u1, u1, *pmf_u2_proj, u2_proj, pmf_lambda, lambda,
+ pmf_coeff, f_coeff, vr[0], alpha, WT1, WT2, rg, option);
+
+ if (mf_u2.is_reduced())
+ gmm::mult(Rsub, Ru2, vecl[1]);
+ else
+ gmm::copy(Ru2, gmm::sub_vector(vecl[1], SUBI));
+ }
+ }
+
+ penalized_contact_nonmatching_meshes_brick(size_type rg1_, size_type rg2_,
+ bool contact_only_, int option_)
+ : rg1(rg1_), rg2(rg2_), pfem_proj(0), pmf_u2_proj(0),
+ contact_only(contact_only_), option(option_) {
+ Tresca_version = false; // for future version ...
+ set_flags(contact_only
+ ? "Integral penalized contact between nonmatching meshes brick"
+ : "Integral penalized contact and friction between nonmatching "
+ "meshes brick",
+ false /* is linear*/, contact_only /* is symmetric */,
+ true /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ ~penalized_contact_nonmatching_meshes_brick()
+ { if (pmf_u2_proj) delete pmf_u2_proj; }
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition between two bodies discretized
+ // with nonmatching meshes.
+ //=========================================================================
+
+ size_type add_penalized_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &dataname_r,
+ size_type region1, size_type region2,
+ int option, const std::string &dataname_n) {
+
+ pbrick pbr = new penalized_contact_nonmatching_meshes_brick
+ (region1, region2, true /* contact_only */, option);
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u1, varname_u1, true));
+ tl.push_back(model::term_description(varname_u2, varname_u2, true));
+ tl.push_back(model::term_description(varname_u1, varname_u2, true));
+
+ model::varnamelist dl(1, dataname_r);
+ switch (option) {
+ case 1: break;
+ case 2: dl.push_back(dataname_n); break;
+ default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+ }
+
+ model::varnamelist vl(1, varname_u1);
+ vl.push_back(varname_u2);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+ }
+
+
+ //=========================================================================
+ // Add a contact condition with friction between two bodies discretized
+ // with nonmatching meshes.
+ //=========================================================================
+
+ size_type add_penalized_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u1,
+ const std::string &varname_u2, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ size_type region1, size_type region2, int option,
+ const std::string &dataname_lambda, const std::string &dataname_alpha,
+ const std::string &dataname_wt1, const std::string &dataname_wt2) {
+
+ pbrick pbr = new penalized_contact_nonmatching_meshes_brick
+ (region1, region2, false /* contact_only */, option);
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u1, varname_u1, true)); // 0: U1U1
+ tl.push_back(model::term_description(varname_u2, varname_u2, true)); // 1: U2U2
+ tl.push_back(model::term_description(varname_u1, varname_u2, true)); // 2: U1U2
+ tl.push_back(model::term_description(varname_u2, varname_u1, true)); // 3: U2U1
+
+ model::varnamelist dl(1, dataname_r);
+ switch (option) {
+ case 1: break;
+ case 2: case 3: dl.push_back(dataname_lambda); break;
+ default: GMM_ASSERT1(false, "Penalized contact brick : invalid option");
+ }
+ dl.push_back(dataname_friction_coeff);
+ if (dataname_alpha.size() > 0) {
+ dl.push_back(dataname_alpha);
+ if (dataname_wt1.size() > 0) {
+ dl.push_back(dataname_wt1);
+ if (dataname_wt2.size() > 0)
+ dl.push_back(dataname_wt2);
+ }
+ }
+
+ model::varnamelist vl(1, varname_u1);
+ vl.push_back(varname_u2);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region1);
+ }
+
+
+ // Computation of contact area and contact forces
+ void compute_integral_contact_area_and_force
+ (model &md, size_type indbrick, scalar_type &area,
+ model_real_plain_vector &F) {
+
+ pbrick pbr = md.brick_pointer(indbrick);
+ const model::mimlist &ml = md.mimlist_of_brick(indbrick);
+ const model::varnamelist &vl = md.varnamelist_of_brick(indbrick);
+ const model::varnamelist &dl = md.datanamelist_of_brick(indbrick);
+ size_type reg = md.region_of_brick(indbrick);
+
+ GMM_ASSERT1(ml.size() == 1, "Wrong size");
+
+ if (pbr->brick_name() == "Integral contact with rigid obstacle brick" ||
+ pbr->brick_name() == "Integral contact and friction with rigid obstacle brick") {
+ integral_contact_rigid_obstacle_brick *p
+ = dynamic_cast<integral_contact_rigid_obstacle_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+
+ GMM_ASSERT1(vl.size() >= 2, "Wrong size");
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const model_real_plain_vector &lambda = md.real_variable(vl[1]);
+ const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[1]);
+ GMM_ASSERT1(dl.size() >= 1, "Wrong size");
+ const model_real_plain_vector &obs = md.real_variable(dl[0]);
+ const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[0]);
+
+ area = asm_level_set_contact_area(*ml[0], mf_u, u, mf_obs, obs, reg, -1e-3);
+
+ gmm::resize(F, mf_u.nb_dof());
+ asm_level_set_normal_source_term
+ (F, *ml[0], mf_u, mf_obs, obs, mf_lambda, lambda, reg);
+ }
+ else if (pbr->brick_name() == "Integral penalized contact with rigid obstacle brick" ||
+ pbr->brick_name() == "Integral penalized contact and friction with rigid "
+ "obstacle brick") {
+ penalized_contact_rigid_obstacle_brick *p
+ = dynamic_cast<penalized_contact_rigid_obstacle_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ }
+ else if (pbr->brick_name() == "Integral contact between nonmatching meshes brick" ||
+ pbr->brick_name() == "Integral contact and friction between nonmatching "
+ "meshes brick") {
+ integral_contact_nonmatching_meshes_brick *p
+ = dynamic_cast<integral_contact_nonmatching_meshes_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+
+ GMM_ASSERT1(vl.size() == 3, "Wrong size");
+ const model_real_plain_vector &u1 = md.real_variable(vl[0]);
+ const model_real_plain_vector &u2 = md.real_variable(vl[1]);
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(vl[1]);
+ const model_real_plain_vector &lambda = md.real_variable(vl[2]);
+ const mesh_fem &mf_lambda = md.mesh_fem_of_variable(vl[2]);
+
+ std::vector<size_type> ind;
+ p->pmf_u2_proj->get_global_dof_index(ind);
+ gmm::unsorted_sub_index SUBI(ind);
+
+ size_type nbdof2 = mf_u2.nb_dof();
+ size_type nbsub = p->pmf_u2_proj->nb_basic_dof();
+ model_real_plain_vector u2_proj(nbsub);
+
+ if (mf_u2.is_reduced()) {
+ gmm::csc_matrix<scalar_type> Esub(nbsub, nbdof2);
+ gmm::copy(gmm::sub_matrix(mf_u2.extension_matrix(),
+ SUBI, gmm::sub_interval(0, nbdof2)),
+ Esub);
+ gmm::mult(Esub, u2, u2_proj);
+ }
+ else
+ gmm::copy(gmm::sub_vector(u2, SUBI), u2_proj);
+
+ area = asm_nonmatching_meshes_contact_area
+ (*ml[0], mf_u1, u1, *(p->pmf_u2_proj), u2_proj, reg, -1e-3);
+
+ gmm::resize(F, mf_u1.nb_dof());
+ asm_nonmatching_meshes_normal_source_term
+ (F, *ml[0], mf_u1, *(p->pmf_u2_proj), mf_lambda, lambda, reg);
+
+ }
+ else if (pbr->brick_name() == "Integral penalized contact between nonmatching meshes brick" ||
+ pbr->brick_name() == "Integral penalized contact and friction between nonmatching "
+ "meshes brick") {
+ penalized_contact_nonmatching_meshes_brick *p
+ = dynamic_cast<penalized_contact_nonmatching_meshes_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ }
+
+ }
+
+
+
+#ifdef EXPERIMENTAL_PURPOSE_ONLY
+
+
+ // Experimental implementation of contact condition with Nitsche method.
+ // To be deleted when a more general implementation will be designed.
+
+
+ class contact_nitsche_nonlinear_term : public nonlinear_elem_term {
+
+ protected:
+ base_small_vector lnt, lt; // multiplier lambda and its tangential component lambda_t
+ scalar_type ln; // normal component lambda_n of the multiplier
+ base_small_vector ut; // tangential relative displacement
+ scalar_type un; // normal relative displacement (positive when the first
+ // elastic body surface moves outwards)
+ base_small_vector no, n; // surface normal, pointing outwards with respect
+ // to the (first) elastic body
+ scalar_type g, f_coeff; // gap and coefficient of friction values
+ scalar_type lambda, mu; // Lame coefficients
+
+ base_small_vector aux1, auxN, V;
+ base_matrix GP, grad;
+ base_vector coeff;
+ const mesh_fem &mf_u; // mandatory
+ const mesh_fem &mf_obs; // mandatory
+ const mesh_fem *pmf_coeff;
+ base_vector U, obs, friction_coeff;
+
+ void adjust_tensor_size(void) {
+ sizes_.resize(4); sizes_[0] = sizes_[1] = sizes_[2] = sizes_[3] = N;
+ switch (option) {
+ case 1 : sizes_.resize(1); break;
+ case 2 : case 3 : sizes_.resize(2); break;
+ case 4 : case 5 : sizes_.resize(3); break;
+ }
+ gmm::resize(grad, 1, N);
+ lnt.resize(N); lt.resize(N); ut.resize(N); no.resize(N); n.resize(N);
+ aux1.resize(1); auxN.resize(N); V.resize(N);
+ gmm::resize(GP, N, N);
+ }
+
+ public:
+ dim_type N;
+ size_type option;
+ scalar_type r;
+
+ bgeot::multi_index sizes_;
+
+ template <typename VECT1>
+ contact_nitsche_nonlinear_term(size_type option_, scalar_type r_,
+ scalar_type lambda_, scalar_type mu_,
+ const mesh_fem &mf_u_, const VECT1 &U_,
+ const mesh_fem &mf_obs_, const VECT1 &obs_,
+ const mesh_fem *pmf_coeff_ = 0,
+ const VECT1 *f_coeff_ = 0)
+ : lambda(lambda_), mu(mu_), mf_u(mf_u_),
+ mf_obs(mf_obs_), pmf_coeff(pmf_coeff_), U(mf_u.nb_basic_dof()),
+ obs(mf_obs.nb_basic_dof()), friction_coeff(0), option(option_), r(r_) {
+ N = mf_u_.linked_mesh().dim();
+ adjust_tensor_size();
+
+ mf_u.extend_vector(U_, U);
+ mf_obs.extend_vector(obs_, obs);
+
+ if (!pmf_coeff)
+ f_coeff = (*f_coeff_)[0];
+ else {
+ friction_coeff.resize(pmf_coeff->nb_basic_dof());
+ pmf_coeff->extend_vector(*f_coeff_, friction_coeff);
+ }
+ }
+
+ const bgeot::multi_index &sizes() const { return sizes_; }
+
+ virtual void compute(fem_interpolation_context&, bgeot::base_tensor &t);
+ virtual void prepare(fem_interpolation_context& /*ctx*/, size_type /*nb*/);
+
+ };
+
+ void contact_nitsche_nonlinear_term::compute
+ (fem_interpolation_context &/* ctx */, bgeot::base_tensor &t) {
+
+ t.adjust_sizes(sizes_);
+ scalar_type e;
+ dim_type i, j, k, l;
+
+ if (option >= 3) { // computation of matrix A
+ e = f_coeff*gmm::neg(ln-r*(un-g));
+ auxN = lt - r*ut;
+ ball_projection_grad(auxN, e, GP);
+ ball_projection_grad_r(auxN, e, V);
+ e = Heav(r*(un-g) - ln);
+ gmm::rank_one_update(GP, no, gmm::scaled(V, -e*f_coeff));
+ gmm::rank_one_update(GP, gmm::scaled(no, e-gmm::vect_sp(GP,no,no)), no);
+ gmm::scale(GP, 1./r);
+ } else { // computation of vector W
+ e = gmm::neg(ln-r*(un-g));
+ V = lt - r*ut;
+ ball_projection(V, f_coeff*e);
+ V -= e*no;
+ }
+
+ switch (option) {
+ // one-dimensional tensors [N]
+ case 1:
+ for (i=0; i < N; ++i) t[i] = V[i];
+ break;
+
+ // two-dimensional tensors [N x N]
+ case 2:
+ V -= lnt;
+ gmm::scale(V, -1./r);
+ e = gmm::vect_sp(V, n);
+ for (i=0; i < N; ++i)
+ for (j=0; j < N; ++j) {
+ t(i,j) = mu*(V[i]*n[j]+V[j]*n[i]);
+ if (i == j) t(i,j) += lambda*e;
+ }
+ break;
+
+ case 3:
+ for (i=0; i < N; ++i)
+ for (j=0; j < N; ++j)
+ t(i,j) = r*r*GP(j,i);
+ break;
+
+ // three-dimensional tensors [N x N x N]
+ case 4:
+ gmm::mult(gmm::transposed(GP), n, V);
+ for (i=0; i < N; ++i)
+ for (j=0; j < N; ++j)
+ for (k=0; k < N; ++k) {
+ t(i,j,k) = -r*mu*(GP(j,i)*n[k] + GP(k,i)*n[j]);
+ if (j == k) t(i,j,k) -= r*lambda*V[i];
+ }
+ break;
+
+ case 5:
+ gmm::mult(GP, n, V);
+ for (i=0; i < N; ++i)
+ for (j=0; j < N; ++j)
+ for (k=0; k < N; ++k) {
+ t(i,j,k) = -r*mu*(GP(k,i)*n[j] + GP(k,j)*n[i]);
+ if (i == j) t(i,j,k) -= r*lambda*V[k];
+ }
+ break;
+
+ // four-dimensional tensors [N x N x N x N]
+
+ case 6:
+
+ for (i=0; i < N; ++i) GP(i,i) -= 1./r; // matrix B
+
+ e = gmm::vect_sp(GP, n, n);
+ gmm::mult(gmm::transposed(GP), n, auxN);
+ gmm::mult(GP, n, V);
+
+ for (i=0; i < N; ++i)
+ for (j=0; j < N; ++j)
+ for (k=0; k < N; ++k)
+ for (l=0; l < N; ++l) {
+ t(i,j,k,l) = mu*mu*(n[i]*GP(k,j)*n[l] + n[j]*GP(k,i)*n[l]
+ + n[j]*GP(l,i)*n[k] + n[i]*GP(l,j)*n[k]);
+ if (i == j && k == l) t(i,j,k,l) += lambda*lambda*e;
+ if (i == j) t(i,j,k,l) += lambda*mu*(V[k]*n[l] + V[l]*n[k]);
+ if (k == l) t(i,j,k,l) += lambda*mu*(auxN[j]*n[i]+auxN[i]*n[j]);
+ }
+
+ break;
+ default : GMM_ASSERT1(false, "Invalid option");
+ }
+ }
+
+
+ void contact_nitsche_nonlinear_term::prepare
+ (fem_interpolation_context& ctx, size_type nb) {
+ size_type cv = ctx.convex_num();
+
+ switch (nb) { // last is computed first
+ case 1 : // calculate [un] and [ut] interpolating [U] on [mf_u]
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector(U, gmm::sub_index
+ (mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, V, N);
+ un = gmm::vect_sp(V, no);
+ ut = V - un * no;
+ ctx.pf()->interpolation_grad(ctx, coeff, GP, N);
+ lnt = lambda*(gmm::mat_trace(GP))*n;
+ gmm::mult_add(GP, gmm::scaled(n, mu), lnt);
+ gmm::mult_add(gmm::transposed(GP), gmm::scaled(n, mu), lnt);
+ ln = gmm::vect_sp(lnt, no);
+ lt = lnt - ln * no;
+ break;
+
+ case 2 : // calculate [g] and [no] interpolating [obs] on [mf_obs]
+ // calculate [ln] and [lt] from [lnt] and [no]
+ coeff.resize(mf_obs.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (obs, gmm::sub_index
+ (mf_obs.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation_grad(ctx, coeff, grad, 1);
+ gmm::copy(gmm::mat_row(grad, 0), no);
+ no /= -gmm::vect_norm2(no);
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ g = aux1[0];
+ n = bgeot::compute_normal(ctx, ctx.face_num());
+ n /= gmm::vect_norm2(n);
+ break;
+
+ case 3 :// calculate [f_coeff] interpolating [friction_coeff] on [mf_coeff]
+ if (pmf_coeff) {
+ coeff.resize(pmf_coeff->nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (friction_coeff, gmm::sub_index
+ (pmf_coeff->ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, aux1, 1);
+ f_coeff = aux1[0];
+ }
+ break;
+
+ default : GMM_ASSERT1(false, "Invalid option");
+ }
+ }
+
+
+
+
+ template<typename MAT, typename VECT1>
+ void asm_Nitsche_contact_rigid_obstacle_tangent_matrix
+ (MAT &K, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff,
+ scalar_type gamma, scalar_type lambda, scalar_type mu,
+ const mesh_region &rg, int option = 1) {
+
+ contact_nitsche_nonlinear_term
+ nterm1(6, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+ nterm2(3, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+ nterm3(4, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+ nterm4(5, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3" : "#1,#2";
+
+ getfem::generic_assembly assem;
+ std::string as_str
+ = ((option == 0) ? "w1=comp(NonLin$1(#1,"+aux_fems+")(i,j,k,l).vGrad(#1)(:,i,j).vGrad(#1)(:,k,l));" : "")
+ + "w2=comp(NonLin$2(#1,"+aux_fems+").vBase(#1).vBase(#1))(i,j,:,i,:,j);"
+ + "w3=comp(NonLin$3(#1,"+aux_fems+").vBase(#1).vGrad(#1))(i,j,k,:,i,:,j,k);"
+ + ((option == 0) ? "w4=comp(NonLin$4(#1,"+aux_fems+").vGrad(#1).vBase(#1))(i,j,k,:,i,j,:,k);" : "")
+ + ((option == 0) ? "M(#1,#1)+=w1+w2+w3+w4;" : "M(#1,#1)+=w2+w3;");
+
+ assem.set(as_str);
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ if (pmf_coeff) assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_nonlinear_term(&nterm3);
+ assem.push_nonlinear_term(&nterm4);
+ assem.push_mat(K);
+ assem.assembly(rg);
+ }
+
+
+
+ template<typename VECT1>
+ void asm_Nitsche_contact_rigid_obstacle_rhs
+ (VECT1 &R, const mesh_im &mim,
+ const getfem::mesh_fem &mf_u, const VECT1 &U,
+ const getfem::mesh_fem &mf_obs, const VECT1 &obs,
+ const getfem::mesh_fem *pmf_coeff, const VECT1 &f_coeff,
+ scalar_type gamma, scalar_type lambda, scalar_type mu,
+ const mesh_region &rg, int option = 1) {
+
+ contact_nitsche_nonlinear_term
+ nterm1(1, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff),
+ nterm2(2, gamma, lambda, mu, mf_u, U, mf_obs, obs, pmf_coeff, &f_coeff);
+
+ const std::string aux_fems = pmf_coeff ? "#1,#2,#3" : "#1,#2";
+
+ getfem::generic_assembly assem;
+ std::string as_str =
+ "V(#1)+=comp(NonLin$1(#1,"+aux_fems+").vBase(#1))(i,:,i); "
+ + ((option == 0) ? "V(#1)+=comp(NonLin$2(#1,"+aux_fems+").vGrad(#1))(i,j,:,i,j)" : "");
+
+ assem.set(as_str);
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_obs);
+ if (pmf_coeff) assem.push_mf(*pmf_coeff);
+ assem.push_nonlinear_term(&nterm1);
+ assem.push_nonlinear_term(&nterm2);
+ assem.push_vec(R);
+ assem.assembly(rg);
+ }
+
+
+ struct Nitsche_contact_rigid_obstacle_brick : public virtual_brick {
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ // Integration method
+ GMM_ASSERT1(mims.size() == 1, "Nitsche contact with rigid obstacle "
+ "bricks need a single mesh_im");
+ const mesh_im &mim = *mims[0];
+
+ // Variables : u
+ GMM_ASSERT1(vl.size() == 1,
+ "Nitsche contact with rigid obstacle bricks need a "
+ "single variable");
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+
+ // Data : obs, r, [lambda,] [friction_coeff,] [alpha,] [WT]
+ GMM_ASSERT1(dl.size() == 5, "Wrong number of data for Nitsche "
+ "contact with rigid obstacle brick");
+
+ const model_real_plain_vector &obs = md.real_variable(dl[0]);
+ const mesh_fem &mf_obs = md.mesh_fem_of_variable(dl[0]);
+ size_type sl = gmm::vect_size(obs) * mf_obs.get_qdim() / mf_obs.nb_dof();
+ GMM_ASSERT1(sl == 1, "the data corresponding to the obstacle has not "
+ "the right format");
+
+ const model_real_plain_vector &vr = md.real_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+ const model_real_plain_vector *f_coeff = 0;
+ const mesh_fem *pmf_coeff = 0;
+
+ f_coeff = &(md.real_variable(dl[2]));
+ pmf_coeff = md.pmesh_fem_of_variable(dl[2]);
+ sl = gmm::vect_size(*f_coeff);
+ if (pmf_coeff) { sl*= pmf_coeff->get_qdim(); sl /= pmf_coeff->nb_dof(); }
+ GMM_ASSERT1(sl == 1, "the data corresponding to the friction "
+ "coefficient has not the right format");
+
+ const model_real_plain_vector &vlambda = md.real_variable(dl[3]);
+ GMM_ASSERT1(gmm::vect_size(vlambda) == 1,
+ "Parameter lambda should be a scalar");
+ const model_real_plain_vector &vmu = md.real_variable(dl[4]);
+ GMM_ASSERT1(gmm::vect_size(vmu) == 1, "Parameter mu should be a scalar");
+
+
+ GMM_ASSERT1(matl.size() == 1, "Wrong number of terms for "
+ "Nitsche contact with rigid obstacle brick");
+
+ mesh_region rg(region);
+ mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+ if (version & model::BUILD_MATRIX) {
+ GMM_TRACE2("Nitsche contact with rigid obstacle tangent term");
+ gmm::clear(matl[0]);
+ asm_Nitsche_contact_rigid_obstacle_tangent_matrix
+ (matl[0], mim, mf_u, u, mf_obs, obs, pmf_coeff, *f_coeff,
+ vr[0], vlambda[0], vmu[0], rg);
+ }
+
+ if (version & model::BUILD_RHS) {
+ gmm::clear(vecl[0]);
+ asm_Nitsche_contact_rigid_obstacle_rhs
+ (vecl[0], mim, mf_u, u, mf_obs, obs, pmf_coeff, *f_coeff,
+ vr[0], vlambda[0], vmu[0], rg);
+ }
+
+ }
+
+ Nitsche_contact_rigid_obstacle_brick(void) {
+ set_flags("Integral Nitsche contact and friction with rigid "
+ "obstacle brick",
+ false /* is linear*/, false /* is symmetric */,
+ true /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ };
+
+
+ size_type add_Nitsche_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &dataname_obs, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff,
+ const std::string &dataname_lambda, const std::string &dataname_mu,
+ size_type region) {
+
+ pbrick pbr = new Nitsche_contact_rigid_obstacle_brick;
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+
+ model::varnamelist dl(1, dataname_obs);
+ dl.push_back(dataname_r);
+ dl.push_back(dataname_friction_coeff);
+ dl.push_back(dataname_lambda);
+ dl.push_back(dataname_mu);
+
+ model::varnamelist vl(1, varname_u);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+#endif
+
+
+
+ //=========================================================================
+ //
+ // Large sliding brick.
+ //
+ //=========================================================================
+
+ //=========================================================================
+ // 0)- Some basic assembly functions
+ //=========================================================================
+
+ template <typename MAT1, typename MAT2>
+ void mat_elem_assembly(const MAT1 &M_, const MAT2 &Melem,
+ const mesh_fem &mf1, size_type cv1,
+ const mesh_fem &mf2, size_type cv2) {
+ MAT1 &M = const_cast<MAT1 &>(M_);
+ typedef typename gmm::linalg_traits<MAT1>::value_type T;
+ T val;
+ std::vector<size_type> cvdof1(mf1.ind_basic_dof_of_element(cv1).begin(),
+ mf1.ind_basic_dof_of_element(cv1).end());
+ std::vector<size_type> cvdof2(mf2.ind_basic_dof_of_element(cv2).begin(),
+ mf2.ind_basic_dof_of_element(cv2).end());
+
+ GMM_ASSERT1(cvdof1.size() == gmm::mat_nrows(Melem)
+ && cvdof2.size() == gmm::mat_ncols(Melem),
+ "Dimensions mismatch");
+
+ if (mf1.is_reduced()) {
+ if (mf2.is_reduced()) {
+ for (size_type i = 0; i < cvdof1.size(); ++i)
+ for (size_type j = 0; j < cvdof2.size(); ++j)
+ if ((val = Melem(i,j)) != T(0))
+ asmrankoneupdate
+ (M, gmm::mat_row(mf1.extension_matrix(), cvdof1[i]),
+ gmm::mat_row(mf2.extension_matrix(), cvdof2[j]), val);
+ } else {
+ for (size_type i = 0; i < cvdof1.size(); ++i)
+ for (size_type j = 0; j < cvdof2.size(); ++j)
+ if ((val = Melem(i,j)) != T(0))
+ asmrankoneupdate
+ (M, gmm::mat_row(mf1.extension_matrix(), cvdof1[i]),
+ cvdof2[j], val);
+ }
+ } else {
+ if (mf2.is_reduced()) {
+ for (size_type i = 0; i < cvdof1.size(); ++i)
+ for (size_type j = 0; j < cvdof2.size(); ++j)
+ if ((val = Melem(i,j)) != T(0))
+ asmrankoneupdate
+ (M, cvdof1[i],
+ gmm::mat_row(mf2.extension_matrix(), cvdof2[j]), val);
+ } else {
+ for (size_type i = 0; i < cvdof1.size(); ++i)
+ for (size_type j = 0; j < cvdof2.size(); ++j)
+ if ((val = Melem(i,j)) != T(0))
+ M(cvdof1[i], cvdof2[j]) += val;
+ }
+ }
+ }
+
+
+ template <typename VEC1, typename VEC2>
+ void vec_elem_assembly(const VEC1 &V_, const VEC2 &Velem,
+ const mesh_fem &mf, size_type cv) {
+ VEC1 &V = const_cast<VEC1 &>(V_);
+ typedef typename gmm::linalg_traits<VEC1>::value_type T;
+ std::vector<size_type> cvdof(mf.ind_basic_dof_of_element(cv).begin(),
+ mf.ind_basic_dof_of_element(cv).end());
+
+ GMM_ASSERT1(cvdof.size() == gmm::vect_size(Velem), "Dimensions mismatch");
+
+ if (mf.is_reduced()) {
+ T val;
+ for (size_type i = 0; i < cvdof.size(); ++i)
+ if ((val = Velem[i]) != T(0))
+ gmm::add(gmm::scaled(gmm::mat_row(mf.extension_matrix(), cvdof[i]),
+ val), V);
+ } else {
+ for (size_type i = 0; i < cvdof.size(); ++i) V[cvdof[i]] += Velem[i];
+ }
+ }
+
+
+ //=========================================================================
+ // 1)- Structure which stores the contact boundaries and rigid obstacles
+ //=========================================================================
+
+ struct contact_frame {
+ bool frictionless;
+ size_type N;
+ scalar_type friction_coef;
+ std::vector<const model_real_plain_vector *> Us;
+ std::vector<model_real_plain_vector> ext_Us;
+ std::vector<const model_real_plain_vector *> lambdas;
+ std::vector<model_real_plain_vector> ext_lambdas;
+ struct contact_boundary {
+ size_type region; // Boundary number
+ const getfem::mesh_fem *mfu; // F.e.m. for the displacement.
+ size_type ind_U; // Index of displacement.
+ const getfem::mesh_fem *mflambda; // F.e.m. for the multiplier.
+ size_type ind_lambda; // Index of multiplier.
+ };
+ std::vector<contact_boundary> contact_boundaries;
+
+ gmm::dense_matrix< model_real_sparse_matrix * > UU;
+ gmm::dense_matrix< model_real_sparse_matrix * > UL;
+ gmm::dense_matrix< model_real_sparse_matrix * > LU;
+ gmm::dense_matrix< model_real_sparse_matrix * > LL;
+
+ std::vector< model_real_plain_vector *> Urhs;
+ std::vector< model_real_plain_vector *> Lrhs;
+
+
+
+ std::vector<std::string> coordinates;
+ base_node pt_eval;
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+ std::vector<mu::Parser> obstacles_parsers;
+#endif
+ std::vector<std::string> obstacles;
+ std::vector<std::string> obstacles_velocities;
+
+ size_type add_U(const getfem::mesh_fem &mfu,
+ const model_real_plain_vector &U) {
+ size_type i = 0;
+ for (; i < Us.size(); ++i) if (Us[i] == &U) return i;
+ Us.push_back(&U);
+ model_real_plain_vector ext_U(mfu.nb_basic_dof()); // means that the structure has to be build each time ... to be changed. ATTENTION : la même variable ne doit pas être étendue dans deux vecteurs différents.
+ mfu.extend_vector(U, ext_U);
+ ext_Us.push_back(ext_U);
+ return i;
+ }
+
+ size_type add_lambda(const getfem::mesh_fem &mfl,
+ const model_real_plain_vector &l) {
+ size_type i = 0;
+ for (; i < lambdas.size(); ++i) if (lambdas[i] == &l) return i;
+ lambdas.push_back(&l);
+ model_real_plain_vector ext_l(mfl.nb_basic_dof()); // means that the structure has to be build each time ... to be changed. ATTENTION : la même variable ne doit pas être étendue dans deux vecteurs différents.
+ mfl.extend_vector(l, ext_l);
+ ext_lambdas.push_back(ext_l);
+ return i;
+ }
+
+
+ const getfem::mesh_fem &mfu_of_boundary(size_type n) const
+ { return *(contact_boundaries[n].mfu); }
+ const getfem::mesh_fem &mflambda_of_boundary(size_type n) const
+ { return *(contact_boundaries[n].mflambda); }
+ const model_real_plain_vector &disp_of_boundary(size_type n) const
+ { return ext_Us[contact_boundaries[n].ind_U]; }
+ const model_real_plain_vector &lambda_of_boundary(size_type n) const
+ { return ext_lambdas[contact_boundaries[n].ind_lambda]; }
+ size_type region_of_boundary(size_type n) const
+ { return contact_boundaries[n].region; }
+ model_real_sparse_matrix &UU_matrix(size_type n, size_type m) const
+ { return *(UU(contact_boundaries[n].ind_U, contact_boundaries[m].ind_U)); }
+ model_real_sparse_matrix &LU_matrix(size_type n, size_type m) const {
+ return *(LU(contact_boundaries[n].ind_lambda,
+ contact_boundaries[m].ind_U));
+ }
+ model_real_sparse_matrix &UL_matrix(size_type n, size_type m) const {
+ return *(UL(contact_boundaries[n].ind_U,
+ contact_boundaries[m].ind_lambda));
+ }
+ model_real_sparse_matrix &LL_matrix(size_type n, size_type m) const {
+ return *(LL(contact_boundaries[n].ind_lambda,
+ contact_boundaries[m].ind_lambda));
+ }
+ model_real_plain_vector &U_vector(size_type n) const
+ { return *(Urhs[contact_boundaries[n].ind_U]); }
+ model_real_plain_vector &L_vector(size_type n) const
+ { return *(Lrhs[contact_boundaries[n].ind_lambda]); }
+
+ contact_frame(size_type NN) : N(NN), coordinates(N), pt_eval(N) {
+ if (N > 0) coordinates[0] = "x";
+ if (N > 1) coordinates[1] = "y";
+ if (N > 2) coordinates[2] = "z";
+ if (N > 3) coordinates[3] = "w";
+ GMM_ASSERT1(N <= 4, "Complete the definition for contact in "
+ "dimension greater than 4");
+ }
+
+ size_type add_obstacle(const std::string &obs) {
+ size_type ind = obstacles.size();
+ obstacles.push_back(obs);
+ obstacles_velocities.push_back("");
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+ mu::Parser mu;
+ obstacles_parsers.push_back(mu);
+ obstacles_parsers[ind].SetExpr(obstacles[ind]);
+ for (size_type k = 0; k < N; ++k)
+ obstacles_parsers[ind].DefineVar(coordinates[k], &pt_eval[k]);
+#else
+ GMM_ASSERT1(false, "You have to link muparser with getfem to deal "
+ "with rigid body obstacles");
+#endif
+ return ind;
+ }
+
+ size_type add_boundary(const getfem::mesh_fem &mfu,
+ const model_real_plain_vector &U,
+ const getfem::mesh_fem &mfl,
+ const model_real_plain_vector &l,
+ size_type reg) {
+ contact_boundary cb;
+ cb.region = reg;
+ cb.mfu = &mfu;
+ cb.mflambda = &mfl;
+ cb.ind_U = add_U(mfu, U);
+ cb.ind_lambda = add_lambda(mfl, l);
+ size_type ind = contact_boundaries.size();
+ contact_boundaries.push_back(cb);
+ gmm::resize(UU, ind+1, ind+1);
+ gmm::resize(UL, ind+1, ind+1);
+ gmm::resize(LU, ind+1, ind+1);
+ gmm::resize(LL, ind+1, ind+1);
+ gmm::resize(Urhs, ind+1);
+ gmm::resize(Lrhs, ind+1);
+ return ind;
+ }
+
+ };
+
+
+ //=========================================================================
+ // 2)- Structure which computes the contact pairs, rhs and tangent terms
+ //=========================================================================
+
+ struct contact_elements {
+
+ contact_frame &cf; // contact frame description.
+
+ // list des enrichissements pour ses points : y0, d0, element ...
+ bgeot::rtree element_boxes; // influence regions of boundary elements
+ // list des enrichissements of boundary elements
+ std::vector<size_type> boundary_of_elements;
+ std::vector<size_type> ind_of_elements;
+ std::vector<size_type> face_of_elements;
+ std::vector<base_node> unit_normal_of_elements;
+
+ contact_elements(contact_frame &ccf) : cf(ccf) {}
+ void init(void);
+ bool add_point_contribution(size_type boundary_num,
+ getfem::fem_interpolation_context &ctxu,
+ getfem::fem_interpolation_context &ctxl,
+ scalar_type weight, scalar_type f_coeff,
+ scalar_type r, model::build_version version);
+ };
+
+
+ void contact_elements::init(void) {
+ fem_precomp_pool fppool;
+ // compute the influence regions of boundary elements. To be run
+ // before the assembly of contact terms.
+ element_boxes.clear();
+ unit_normal_of_elements.resize(0);
+ boundary_of_elements.resize(0);
+ ind_of_elements.resize(0);
+ face_of_elements.resize(0);
+
+ size_type N = 0;
+ base_matrix G;
+ model_real_plain_vector coeff;
+ for (size_type i = 0; i < cf.contact_boundaries.size(); ++i) {
+ size_type bnum = cf.region_of_boundary(i);
+ const mesh_fem &mfu = cf.mfu_of_boundary(i);
+ const model_real_plain_vector &U = cf.disp_of_boundary(i);
+ const mesh &m = mfu.linked_mesh();
+ if (i == 0) N = m.dim();
+ GMM_ASSERT1(m.dim() == N,
+ "Meshes are of mixed dimensions, cannot deal with that");
+ base_node val(N), bmin(N), bmax(N), n0(N), n(N), n_mean(N);
+ base_matrix grad(N,N);
+ mesh_region region = m.region(bnum);
+ GMM_ASSERT1(mfu.get_qdim() == N,
+ "Wrong mesh_fem qdim to compute contact pairs");
+
+ dal::bit_vector points_already_interpolated;
+ std::vector<base_node> transformed_points(m.nb_max_points());
+ for (getfem::mr_visitor v(region,m); !v.finished(); ++v) {
+ size_type cv = v.cv();
+ bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+ pfem pf_s = mfu.fem_of_element(cv);
+ size_type nbd_t = pgt->nb_points();
+ size_type cvnbdof = mfu.nb_basic_dof_of_element(cv);
+ coeff.resize(cvnbdof);
+ mesh_fem::ind_dof_ct::const_iterator
+ itdof = mfu.ind_basic_dof_of_element(cv).begin();
+ for (size_type k = 0; k < cvnbdof; ++k, ++itdof) coeff[k]=U[*itdof];
+ bgeot::vectors_to_base_matrix
+ (G, mfu.linked_mesh().points_of_convex(cv));
+
+ pfem_precomp pfp = fppool(pf_s, &(pgt->geometric_nodes()));
+ fem_interpolation_context ctx(pgt,pfp,size_type(-1), G, cv,
+ size_type(-1));
+
+ size_type nb_pt_on_face = 0;
+ gmm::clear(n_mean);
+ for (short_type ip = 0; ip < nbd_t; ++ip) {
+ size_type ind = m.ind_points_of_convex(cv)[ip];
+
+ // computation of transformed vertex
+ if (!(points_already_interpolated.is_in(ind))) {
+ ctx.set_ii(ip);
+ pf_s->interpolation(ctx, coeff, val, dim_type(N));
+ val += ctx.xreal();
+ transformed_points[ind] = val;
+ points_already_interpolated.add(ind);
+ } else {
+ val = transformed_points[ind];
+ }
+ // computation of unit normal vector if the vertex is on the face
+ bool is_on_face = false;
+ bgeot::pconvex_structure cvs = pgt->structure();
+ for (size_type k = 0; k < cvs->nb_points_of_face(v.f()); ++k)
+ if (cvs->ind_points_of_face(v.f())[k] == ip) is_on_face = true;
+ if (is_on_face) {
+ ctx.set_ii(ip);
+ n0 = bgeot::compute_normal(ctx, v.f());
+ pf_s->interpolation_grad(ctx, coeff, grad, dim_type(N));
+ gmm::add(gmm::identity_matrix(), grad);
+ scalar_type J = gmm::lu_inverse(grad);
+ if (J <= scalar_type(0)) GMM_WARNING1("Inverted element ! " << J);
+ gmm::mult(gmm::transposed(grad), n0, n);
+ n /= gmm::vect_norm2(n);
+ n_mean += n;
+ ++nb_pt_on_face;
+ }
+
+ if (ip == 0) // computation of bounding box
+ bmin = bmax = val;
+ else {
+ for (size_type k = 0; k < N; ++k) {
+ bmin[k] = std::min(bmin[k], val[k]);
+ bmax[k] = std::max(bmax[k], val[k]);
+ }
+ }
+ }
+
+ GMM_ASSERT1(nb_pt_on_face,
+ "This element has not vertex on considered face !");
+
+ // Computation of influence box :
+ // offset of the bounding box relatively to its "diameter"
+ scalar_type h = bmax[0] - bmin[0];
+ for (size_type k = 1; k < N; ++k)
+ h = std::max(h, bmax[k] - bmin[k]);
+ for (size_type k = 0; k < N; ++k)
+ { bmin[k] -= h; bmax[k] += h; }
+
+ // Store the influence box and additional information.
+ element_boxes.add_box(bmin, bmax, unit_normal_of_elements.size());
+ n_mean /= gmm::vect_norm2(n_mean);
+ unit_normal_of_elements.push_back(n_mean);
+ boundary_of_elements.push_back(i);
+ ind_of_elements.push_back(cv);
+ face_of_elements.push_back(v.f());
+ }
+ }
+ }
+
+
+
+ bool contact_elements::add_point_contribution
+ (size_type boundary_num, getfem::fem_interpolation_context &ctxu,
+ getfem::fem_interpolation_context &ctxl, scalar_type weight,
+ scalar_type f_coeff, scalar_type r, model::build_version version) {
+ const mesh_fem &mfu = cf.mfu_of_boundary(boundary_num);
+ const mesh_fem &mfl = cf.mflambda_of_boundary(boundary_num);
+ const model_real_plain_vector &U = cf.disp_of_boundary(boundary_num);
+ const model_real_plain_vector &L = cf.lambda_of_boundary(boundary_num);
+ size_type N = mfu.get_qdim();
+ base_node x0 = ctxu.xreal();
+ bool noisy = false;
+
+ // ----------------------------------------------------------
+ // Computation of the point coordinates and the unit normal
+ // vector in real configuration
+ // ----------------------------------------------------------
+
+ base_node n0 = bgeot::compute_normal(ctxu, ctxu.face_num());
+ scalar_type face_factor = gmm::vect_norm2(n0);
+ size_type cv = ctxu.convex_num();
+ base_small_vector n(N), val(N), h(N);
+ base_matrix gradinv(N,N), grad(N,N), gradtot(N,N), G;
+ size_type cvnbdofu = mfu.nb_basic_dof_of_element(cv);
+ size_type cvnbdofl = mfl.nb_basic_dof_of_element(cv);
+ base_vector coeff(cvnbdofu);
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index
+ (mfu.ind_basic_dof_of_element(cv))), coeff);
+ ctxu.pf()->interpolation(ctxu, coeff, val, dim_type(N));
+ base_node x = x0 + val;
+
+ ctxu.pf()->interpolation_grad(ctxu, coeff, gradinv, dim_type(N));
+ gmm::add(gmm::identity_matrix(), gradinv);
+ scalar_type J = gmm::lu_inverse(gradinv); // remplacer par une résolution...
+ if (J <= scalar_type(0)) {
+ GMM_WARNING1("Inverted element !");
+
+ GMM_ASSERT1(!(version & model::BUILD_MATRIX), "Impossible to build "
+ "tangent matrix for large sliding contact");
+ if (version & model::BUILD_RHS) {
+ base_vector Velem(cvnbdofl);
+ for (size_type i = 0; i < cvnbdofl; ++i) Velem[i] = 1E200;
+ vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+ return false;
+ }
+ }
+
+ gmm::mult(gmm::transposed(gradinv), n0, n);
+ n /= gmm::vect_norm2(n);
+
+ // ----------------------------------------------------------
+ // Selection of influence boxes
+ // ----------------------------------------------------------
+
+ bgeot::rtree::pbox_set bset;
+ element_boxes.find_boxes_at_point(x, bset);
+
+ if (noisy) cout << "Number of boxes found : " << bset.size() << endl;
+
+ // ----------------------------------------------------------
+ // Eliminates some influence boxes with the mean normal
+ // criterion : should at least eliminate the original element.
+ // ----------------------------------------------------------
+
+ bgeot::rtree::pbox_set::iterator it = bset.begin(), itnext;
+ for (; it != bset.end(); it = itnext) {
+ itnext = it; ++itnext;
+ if (gmm::vect_sp(unit_normal_of_elements[(*it)->id], n)
+ >= -scalar_type(1)/scalar_type(20)) bset.erase(it);
+ }
+
+ if (noisy)
+ cout << "Number of boxes satisfying the unit normal criterion : "
+ << bset.size() << endl;
+
+
+ // ----------------------------------------------------------
+ // For each remaining influence box, compute y0, the corres-
+ // ponding unit normal vector and eliminate wrong auto-contact
+ // situations with a test on |x0-y0|
+ // ----------------------------------------------------------
+
+ it = bset.begin();
+ std::vector<base_node> y0s, y0_refs;
+ std::vector<base_small_vector> n0_y0s;
+ std::vector<scalar_type> d0s;
+ std::vector<scalar_type> d1s;
+ std::vector<size_type> elt_nums;
+ std::vector<fem_interpolation_context> ctx_y0s;
+ for (; it != bset.end(); ++it) {
+ size_type boundary_num_y0 = boundary_of_elements[(*it)->id];
+ size_type cv_y0 = ind_of_elements[(*it)->id];
+ short_type face_y0 = short_type(face_of_elements[(*it)->id]);
+ const mesh_fem &mfu_y0 = cf.mfu_of_boundary(boundary_num_y0);
+ pfem pf_s = mfu_y0.fem_of_element(cv_y0);
+ const model_real_plain_vector &U_y0
+ = cf.disp_of_boundary(boundary_num_y0);
+ const mesh &m = mfu_y0.linked_mesh();
+ bgeot::pgeometric_trans pgt_y0 = m.trans_of_convex(cv_y0);
+ bgeot::pconvex_structure cvs_y0 = pgt_y0->structure();
+
+ // Find an interior point (in order to promote the more interior
+ // y0 in case of locally non invertible transformation.
+ size_type ind_dep_point = 0;
+ for (; ind_dep_point < cvs_y0->nb_points(); ++ind_dep_point) {
+ bool is_on_face = false;
+ for (size_type k = 0;
+ k < cvs_y0->nb_points_of_face(face_y0); ++k)
+ if (cvs_y0->ind_points_of_face(face_y0)[k]
+ == ind_dep_point) is_on_face = true;
+ if (!is_on_face) break;
+ }
+ GMM_ASSERT1(ind_dep_point < cvs_y0->nb_points(),
+ "No interior point found !");
+
+ base_node y0_ref = pgt_y0->convex_ref()->points()[ind_dep_point];
+
+ size_type cvnbdof_y0 = mfu_y0.nb_basic_dof_of_element(cv_y0);
+ coeff.resize(cvnbdof_y0);
+ mesh_fem::ind_dof_ct::const_iterator
+ itdof = mfu_y0.ind_basic_dof_of_element(cv_y0).begin();
+ for (size_type k = 0; k < cvnbdof_y0; ++k, ++itdof)
+ coeff[k] = U_y0[*itdof];
+ // if (pf_s->need_G())
+ bgeot::vectors_to_base_matrix
+ (G, mfu_y0.linked_mesh().points_of_convex(cv_y0));
+
+ fem_interpolation_context ctx_y0(pgt_y0, pf_s, y0_ref, G, cv_y0,
+ size_type(-1));
+
+ size_type newton_iter = 0;
+ for(;;) { // Newton algorithm to invert geometric transformation
+
+ pf_s->interpolation(ctx_y0, coeff, val, dim_type(N));
+ val += ctx_y0.xreal() - x;
+ scalar_type init_res = gmm::vect_norm2(val);
+
+ if (init_res < 1E-12) break;
+ if (newton_iter > 100) {
+ GMM_WARNING1("Newton has failed to invert transformation"); // il faudrait faire qlq chose d'autre ... !
+ GMM_ASSERT1(!(version & model::BUILD_MATRIX), "Impossible to build "
+ "tangent matrix for large sliding contact");
+ if (version & model::BUILD_RHS) {
+ base_vector Velem(cvnbdofl);
+ for (size_type i = 0; i < cvnbdofl; ++i) Velem[i] = 1E200;
+ vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+ return false;
+ }
+ }
+
+ pf_s->interpolation_grad(ctx_y0, coeff, grad, dim_type(N));
+
+ gmm::add(gmm::identity_matrix(), grad);
+
+ gmm::mult(grad, ctx_y0.K(), gradtot);
+
+ std::vector<int> ipvt(N);
+ size_type info = gmm::lu_factor(gradtot, ipvt);
+ GMM_ASSERT1(!info, "Singular system, pivot = " << info); // il faudrait faire qlq chose d'autre ... perturber par exemple
+ gmm::lu_solve(gradtot, ipvt, h, val);
+
+ // line search
+ bool ok = false;
+ scalar_type alpha;
+ for (alpha = 1; alpha >= 1E-5; alpha/=scalar_type(2)) {
+
+ ctx_y0.set_xref(y0_ref - alpha*h);
+ pf_s->interpolation(ctx_y0, coeff, val, dim_type(N));
+ val += ctx_y0.xreal() - x;
+
+ if (gmm::vect_norm2(val) < init_res) { ok = true; break; }
+ }
+ if (!ok)
+ GMM_WARNING1("Line search has failed to invert transformation");
+ y0_ref -= alpha*h;
+ ctx_y0.set_xref(y0_ref);
+ newton_iter++;
+ }
+
+ base_node y0 = ctx_y0.xreal();
+ base_node n0_y0 = bgeot::compute_normal(ctx_y0, face_y0);
+ scalar_type d0_ref = pgt_y0->convex_ref()->is_in_face(face_y0, y0_ref);
+ scalar_type d0 = d0_ref / gmm::vect_norm2(n0_y0);
+
+
+
+
+ scalar_type d1 = d0_ref; // approximatively a distance to the element
+ short_type ifd = short_type(-1);
+
+ for (short_type k = 0; k < pgt_y0->structure()->nb_faces(); ++k) {
+ scalar_type dd = pgt_y0->convex_ref()->is_in_face(k, y0_ref);
+ if (dd > scalar_type(0) && dd > gmm::abs(d1)) { d1 = dd; ifd = k; }
+ }
+
+ if (ifd != short_type(-1)) {
+ d1 /= gmm::vect_norm2(bgeot::compute_normal(ctx_y0, ifd));
+ if (gmm::abs(d1) < gmm::abs(d0)) d1 = d0;
+ } else d1 = d0;
+
+
+// size_type iptf = m.ind_points_of_face_of_convex(cv_y0, face_y0)[0];
+// base_node ptf = x0 - m.points()[iptf];
+// scalar_type d2 = gmm::vect_sp(ptf, n0_y0) / gmm::vect_norm2(n0_y0);
+
+
+
+ if (noisy) cout << "gmm::vect_norm2(n0_y0) = " << gmm::vect_norm2(n0_y0) << endl;
+ // Eliminates wrong auto-contact situations
+ if (noisy) cout << "autocontact status : x0 = " << x0 << " y0 = " << y0 << " " << gmm::vect_dist2(y0, x0) << " : " << d0*0.75 << " : " << d1*0.75 << endl;
+ if (noisy) cout << "n = " << n << " unit_normal_of_elements[(*it)->id] = " << unit_normal_of_elements[(*it)->id] << endl;
+
+
+
+ if (d0 < scalar_type(0)
+ && ((&(U_y0) == &U
+ && (gmm::vect_dist2(y0, x0) < gmm::abs(d1)*scalar_type(3)/scalar_type(4)))
+ || gmm::abs(d1) > 0.05)) {
+ if (noisy) cout << "Eliminated x0 = " << x0 << " y0 = " << y0
+ << " d0 = " << d0 << endl;
+ continue;
+ }
+
+
+// if (d0 < scalar_type(0) && &(U_y0) == &U
+// && gmm::vect_dist2(y0, x0) < gmm::abs(d1) * scalar_type(2)
+// && d2 < -ctxu.J() / scalar_type(2)) {
+// /*if (noisy) */ cout << "Eliminated x0 = " << x0 << " y0 = " << y0
+// << " d0 = " << d0 << endl;
+// continue;
+// }
+
+ y0s.push_back(ctx_y0.xreal()); // useful ?
+ y0_refs.push_back(y0_ref);
+ elt_nums.push_back((*it)->id);
+ d0s.push_back(d0);
+ d1s.push_back(d1);
+ ctx_y0s.push_back(ctx_y0);
+ n0_y0 /= gmm::vect_norm2(n0_y0);
+ n0_y0s.push_back(n0_y0);
+
+ if (noisy) cout << "dist0 = " << d0 << " dist1 = "
+ << pgt_y0->convex_ref()->is_in(y0_ref) << endl;
+ }
+
+ // ----------------------------------------------------------
+ // Compute the distance to rigid obstacles and selects the
+ // nearest boundary/obstacle.
+ // ----------------------------------------------------------
+
+ dim_type state = 0;
+ scalar_type d0 = 1E100, d1 = 1E100;
+ base_small_vector grad_obs(N);
+
+ size_type ibound = size_type(-1);
+ for (size_type k = 0; k < y0_refs.size(); ++k)
+ if (d1s[k] < d1) { d0 = d0s[k]; d1 = d1s[k]; ibound = k; state = 1; }
+
+
+ size_type irigid_obstacle = size_type(-1);
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+ gmm::copy(x, cf.pt_eval);
+ for (size_type i = 0; i < cf.obstacles.size(); ++i) {
+ scalar_type d0_o = scalar_type(cf.obstacles_parsers[i].Eval());
+ if (d0_o < d0) { d0 = d0_o; irigid_obstacle = i; state = 2; }
+ }
+ if (state == 2) {
+ scalar_type EPS = face_factor * 1E-9;
+ for (size_type k = 0; k < N; ++k) {
+ cf.pt_eval[k] += EPS;
+ grad_obs[k] =
+ (scalar_type(cf.obstacles_parsers[irigid_obstacle].Eval())-d0)/EPS;
+ cf.pt_eval[k] -= EPS;
+ }
+ }
+
+#else
+ if (cf.obstacles.size() > 0)
+ GMM_WARNING1("Rigid obstacles are ignored. Recompile with "
+ "muParser to account for rigid obstacles");
+#endif
+
+
+ // ----------------------------------------------------------
+ // Print the found contact state ...
+ // ----------------------------------------------------------
+
+
+ if (noisy && state == 1) {
+ cout << "Point : " << x0 << " of boundary " << boundary_num
+ << " and element " << cv << " state = " << int(state);
+ if (version & model::BUILD_RHS) cout << " RHS";
+ if (version & model::BUILD_MATRIX) cout << " MATRIX";
+ }
+ if (state == 1) {
+ size_type nbo = boundary_of_elements[elt_nums[ibound]];
+ const mesh_fem &mfu_y0 = cf.mfu_of_boundary(nbo);
+ const mesh &m = mfu_y0.linked_mesh();
+ size_type icv = ind_of_elements[elt_nums[ibound]];
+
+ if (noisy) cout << " y0 = " << y0s[ibound] << " of element "
+ << icv << " of boundary " << nbo << endl;
+ for (size_type k = 0; k < m.nb_points_of_convex(icv); ++k)
+ if (noisy) cout << "point " << k << " : "
+ << m.points()[m.ind_points_of_convex(icv)[k]] << endl;
+ if (nbo == 0 && boundary_num == 0 && d0 < 0.0 && (version & model::BUILD_MATRIX)) GMM_ASSERT1(false, "oups");
+ }
+ if (noisy) cout << " d0 = " << d0 << endl;
+
+
+ // ----------------------------------------------------------
+ // Add the contributions to the tangent matrices and rhs
+ // ----------------------------------------------------------
+
+ GMM_ASSERT1(ctxu.pf()->target_dim() == 1 && ctxl.pf()->target_dim() == 1,
+ "Large sliding contact assembly procedure has to be adapted "
+ "to intrinsic vectorial elements. To be done.");
+
+ // Éviter les calculs inutiles dans le cas state == 2 ... à voir à la fin
+ // regarder aussi si on peut factoriser des mat_elem_assembly ...
+
+ base_matrix Melem;
+ base_vector Velem;
+ base_tensor tl, tu;
+ base_small_vector lambda(N), zeta(N), vv(N);
+ ctxl.base_value(tl);
+ ctxu.base_value(tu);
+
+ coeff.resize(cvnbdofl);
+ gmm::copy(gmm::sub_vector
+ (L, gmm::sub_index
+ (mfl.ind_basic_dof_of_element(cv))), coeff);
+ ctxl.pf()->interpolation(ctxl, coeff, lambda, dim_type(N));
+ GMM_ASSERT1(!(std::isnan(lambda[0])), "internal error");
+
+ // Tangent term -(1/r)\int \delta\lambda.\mu
+ if (version & model::BUILD_MATRIX) {
+ gmm::resize(Melem, cvnbdofl, cvnbdofl); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofl; ++j)
+ if (i%N == j%N) Melem(i,j) = -tl[i/N]*tl[j/N]*weight/r;
+ mat_elem_assembly(cf.LL_matrix(boundary_num, boundary_num),
+ Melem, mfl, cv, mfl, cv);
+ }
+
+ // Rhs term (1/r)\int (\lambda - P(\zeta)).\mu
+ // Unstabilized frictionless case for the moment
+ if (state) gmm::add(lambda, gmm::scaled(n, r*d0), zeta);
+ if (version & model::BUILD_RHS) {
+ gmm::clear(vv);
+ if (state) {
+ gmm::copy(zeta, vv);
+ De_Saxce_projection(vv, n, scalar_type(0));
+ gmm::scale(vv, -scalar_type(1));
+ gmm::add(lambda, vv);
+ } else gmm::copy(lambda, vv);
+ gmm::resize(Velem, cvnbdofl); gmm::clear(Velem);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ Velem[i] = (tl[i/N] * vv[i%N])*weight/r;
+ vec_elem_assembly(cf.L_vector(boundary_num), Velem, mfl, cv);
+ }
+
+ if (state) {
+ base_matrix grad_y0(N, N), gradinv_y0(N, N), gradaux(N,N);
+ base_vector coeff_y0;
+ base_small_vector vvv(N), ntilde_y0(N);
+ base_tensor tgradu, tu_y0, tgradu_y0;
+ size_type cv_y0 = 0, cvnbdofu_y0 = 0;
+ size_type boundary_num_y0
+ = (state == 1) ? boundary_of_elements[elt_nums[ibound]] : 0;
+ const mesh_fem &mfu_y0
+ = (state == 1) ? cf.mfu_of_boundary(boundary_num_y0) : mfu;
+ ctxu.grad_base_value(tgradu);
+
+ if (state == 1) {
+ cv_y0 = ind_of_elements[elt_nums[ibound]];
+ cvnbdofu_y0 = mfu_y0.nb_basic_dof_of_element(cv_y0);
+ const model_real_plain_vector &U_y0
+ = cf.disp_of_boundary(boundary_num_y0);
+ //mesh_fem::ind_dof_ct::const_iterator
+ // itdof = mfu_y0.ind_basic_dof_of_element(cv_y0).begin();
+ coeff_y0.resize(cvnbdofu_y0);
+ gmm::copy(gmm::sub_vector
+ (U_y0, gmm::sub_index
+ (mfu_y0.ind_basic_dof_of_element(cv_y0))), coeff_y0);
+ ctx_y0s[ibound].pf()->interpolation_grad(ctx_y0s[ibound], coeff_y0,
+ grad_y0, dim_type(N));
+ gmm::add(gmm::identity_matrix(), grad_y0);
+ gmm::copy(grad_y0, gradinv_y0);
+ gmm::lu_inverse(gradinv_y0);// à proteger contre la non-inversibilité
+ ctx_y0s[ibound].base_value(tu_y0);
+ ctx_y0s[ibound].grad_base_value(tgradu_y0);
+ gmm::mult(gmm::transposed(gradinv_y0), n0_y0s[ibound], ntilde_y0); // (not unit) normal vector
+ }
+
+ // Rhs term \int \lambda.(\psi(x_0) - \psi(y_0))
+ if (version & model::BUILD_RHS) {
+ gmm::resize(Velem, cvnbdofu);gmm::clear(Velem);
+ for (size_type i = 0; i < cvnbdofu; ++i)
+ Velem[i] = tu[i/N] * lambda[i%N]*weight;
+ vec_elem_assembly(cf.U_vector(boundary_num), Velem, mfu, cv);
+
+ if (state == 1) {
+ gmm::resize(Velem, cvnbdofu_y0); gmm::clear(Velem);
+ for (size_type i = 0; i < cvnbdofu_y0; ++i)
+ Velem[i] = -tu_y0[i/N] * lambda[i%N]*weight;
+ vec_elem_assembly(cf.U_vector(boundary_num_y0), Velem, mfu_y0,cv_y0);
+ }
+ }
+
+ if (version & model::BUILD_MATRIX) {
+ // Tangent term \int (\delta \lambda).(\psi(y_0) - \psi(x_0))
+ gmm::resize(Melem, cvnbdofu, cvnbdofl); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofu; ++i)
+ for (size_type j = 0; j < cvnbdofl; ++j)
+ if (i%N == j%N) Melem(i,j) = -tu[i/N]*tl[j/N]*weight;
+ mat_elem_assembly(cf.UL_matrix(boundary_num, boundary_num),
+ Melem, mfu, cv, mfl, cv);
+
+ if (state == 1) {
+ gmm::resize(Melem, cvnbdofu_y0, cvnbdofl); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofu_y0; ++i)
+ for (size_type j = 0; j < cvnbdofl; ++j)
+ if (i%N == j%N) Melem(i,j) = tu_y0[i/N]*tl[j/N]*weight;
+ mat_elem_assembly(cf.UL_matrix(boundary_num_y0, boundary_num),
+ Melem, mfu_y0, cv_y0, mfl, cv);
+ }
+
+ // Tangent term \int \lambda.((\nabla \psi(y_0))(I+\nabla u(y_0))^{-1}(\delta u(x_0) - \delta u(y_0)))
+ if (state == 1) {
+ gmm::resize(Melem, cvnbdofu_y0, cvnbdofu); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofu_y0; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i, j) += lambda[i%N] * tgradu_y0[i-(i%N)+k]
+ * gradinv_y0(k, j%N) * tu[j/N]*weight;
+ mat_elem_assembly(cf.UU_matrix(boundary_num_y0, boundary_num),
+ Melem, mfu_y0, cv_y0, mfu, cv);
+
+ gmm::resize(Melem, cvnbdofu_y0, cvnbdofu_y0); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofu_y0; ++i)
+ for (size_type j = 0; j < cvnbdofu_y0; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i, j) -= lambda[i%N] * tgradu_y0[i-(i%N)+k]
+ * gradinv_y0(k, j%N) * tu_y0[j/N]*weight;
+ mat_elem_assembly(cf.UU_matrix(boundary_num_y0, boundary_num_y0),
+ Melem, mfu_y0, cv_y0, mfu_y0, cv_y0);
+ }
+
+ // Tangent term (1/r)\int \nabla P(zeta) (dzeta/dlambda)(\delta lambda) . \mu
+ De_Saxce_projection_grad(zeta, n, scalar_type(0), grad);
+ gmm::resize(Melem, cvnbdofl, cvnbdofl); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofl; ++j)
+ Melem(i,j) = tl[i/N]*tl[j/N]*grad(i%N,j%N)*weight/r;
+ mat_elem_assembly(cf.LL_matrix(boundary_num, boundary_num),
+ Melem, mfl, cv, mfl, cv);
+
+
+ // Tangent term \int (I+\nabla u(y_0))^{-T}\nabla delta(y_0).\delta u(x_0)(\nabla P(zeta) n . \mu)
+ gmm::mult(grad, n, vv);
+ gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ Melem(i, j) = tl[i/N]*vv[i%N]*tu[j/N]
+ *((state == 1) ? ntilde_y0[j%N] : grad_obs[j%N])*weight;
+ mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num),
+ Melem, mfl, cv, mfu, cv);
+
+ // Tangent term -\int (I+\nabla u(y_0))^{-T}\nabla delta(y_0).\delta u(y_0)(\nabla P(zeta) n . \mu)
+ if (state == 1) {
+ gmm::resize(Melem, cvnbdofl, cvnbdofu_y0); gmm::clear(Melem);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu_y0; ++j)
+ Melem(i, j) = -tl[i/N]*vv[i%N]*tu_y0[j/N]*ntilde_y0[j%N]*weight;
+ mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num_y0),
+ Melem, mfl, cv, mfu_y0, cv_y0);
+ }
+
+ // Tangent term \int d_0(\nabla P)(dn/du)(\delta u).\mu
+ gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);
+ gmm::mult(grad, n, vv);
+ gmm::mult(gradinv, n, vvv);
+ gmm::mult(gradinv, gmm::transposed(grad), gradaux);
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i,j) += d0*tl[i/N]*vv[i%N]
+ *tgradu[j-(j%N)+k]*n[j%N]*vvv[k]*weight;
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i,j) -= d0*tl[i/N]*gradaux(k,i%N)*tgradu[j-(j%N)+k]
+ *n[j%N]*weight;
+
+
+
+ // Tangent term (1/r)\int \nabla_n P(zeta) (dn/du)(\delta u) . \mu
+ // On peut certainement factoriser d'avantage ce terme avec le
+ // précédent. Attendre la version avec frottement.
+ De_Saxce_projection_gradn(zeta, n, scalar_type(0), grad);
+ gmm::mult(gradinv, gmm::transposed(grad), gradaux);
+ gmm::mult(grad, n, vv);
+ gmm::mult(gradinv, n, vvv);
+ // gmm::resize(Melem, cvnbdofl, cvnbdofu); gmm::clear(Melem);factorised
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i,j) += tl[i/N]*vv[i%N]
+ *tgradu[j-(j%N)+k]*n[j%N]*vvv[k]*weight/r;
+ for (size_type i = 0; i < cvnbdofl; ++i)
+ for (size_type j = 0; j < cvnbdofu; ++j)
+ for (size_type k = 0; k < N; ++k)
+ Melem(i,j) -= tl[i/N]*gradaux(k,i%N)*tgradu[j-(j%N)+k]
+ *n[j%N]*weight/r;
+ mat_elem_assembly(cf.LU_matrix(boundary_num, boundary_num),
+ Melem, mfl, cv, mfu, cv);
+ }
+ }
+ return true;
+ }
+
+ //=========================================================================
+ // 3)- Large sliding contact brick
+ //=========================================================================
+
+ struct integral_large_sliding_contact_brick : public virtual_brick {
+
+
+ struct contact_boundary {
+ size_type region;
+ std::string varname;
+ std::string multname;
+ const mesh_im *mim;
+ };
+
+ std::vector<contact_boundary> boundaries;
+ std::vector<std::string> obstacles;
+
+ void add_boundary(const std::string &varn, const std::string &multn,
+ const mesh_im &mim, size_type region) {
+ contact_boundary cb;
+ cb.region = region; cb.varname = varn; cb.multname = multn; cb.mim=&mim;
+ boundaries.push_back(cb);
+ }
+
+ void add_obstacle(const std::string &obs)
+ { obstacles.push_back(obs); }
+
+ void build_contact_frame(const model &md, contact_frame &cf) const {
+ for (size_type i = 0; i < boundaries.size(); ++i) {
+ const contact_boundary &cb = boundaries[i];
+ cf.add_boundary(md.mesh_fem_of_variable(cb.varname),
+ md.real_variable(cb.varname),
+ md.mesh_fem_of_variable(cb.multname),
+ md.real_variable(cb.multname), cb.region);
+ }
+ for (size_type i = 0; i < obstacles.size(); ++i)
+ cf.add_obstacle(obstacles[i]);
+ }
+
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const;
+
+ integral_large_sliding_contact_brick() {
+ set_flags("Integral large sliding contact brick",
+ false /* is linear*/, false /* is symmetric */,
+ false /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ };
+
+
+
+
+ void integral_large_sliding_contact_brick::asm_real_tangent_terms
+ (const model &md, size_type /* ib */, const model::varnamelist &vl,
+ const model::varnamelist &dl, const model::mimlist &/* mims */,
+ model::real_matlist &matl, model::real_veclist &vecl,
+ model::real_veclist &, size_type /* region */,
+ build_version version) const {
+
+ fem_precomp_pool fppool;
+ base_matrix G;
+ size_type N = md.mesh_fem_of_variable(vl[0]).linked_mesh().dim();
+ contact_frame cf(N);
+ build_contact_frame(md, cf);
+
+ size_type Nvar = vl.size(), Nu = cf.Urhs.size(), Nl = cf.Lrhs.size();
+ GMM_ASSERT1(Nvar == Nu+Nl, "Wrong size of variable list for integral "
+ "large sliding contact brick");
+ GMM_ASSERT1(matl.size() == Nvar*Nvar, "Wrong size of terms for "
+ "integral large sliding contact brick");
+
+ if (version & model::BUILD_MATRIX) {
+ for (size_type i = 0; i < Nvar; ++i)
+ for (size_type j = 0; j < Nvar; ++j) {
+ gmm::clear(matl[i*Nvar+j]);
+ if (i < Nu && j < Nu) cf.UU(i,j) = &(matl[i*Nvar+j]);
+ if (i >= Nu && j < Nu) cf.LU(i-Nu,j) = &(matl[i*Nvar+j]);
+ if (i < Nu && j >= Nu) cf.UL(i,j-Nu) = &(matl[i*Nvar+j]);
+ if (i >= Nu && j >= Nu) cf.LL(i-Nu,j-Nu) = &(matl[i*Nvar+j]);
+ }
+ }
+ if (version & model::BUILD_RHS) {
+ for (size_type i = 0; i < vl.size(); ++i) {
+ if (i < Nu) cf.Urhs[i] = &(vecl[i*Nvar]);
+ else cf.Lrhs[i-Nu] = &(vecl[i*Nvar]);
+ }
+ }
+
+ // Data : r, [friction_coeff,]
+ GMM_ASSERT1(dl.size() == 2, "Wrong number of data for integral large "
+ "sliding contact brick");
+
+ const model_real_plain_vector &vr = md.real_variable(dl[0]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+
+ const model_real_plain_vector &f_coeff = md.real_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(f_coeff) == 1,
+ "Friction coefficient should be a scalar");
+
+ contact_elements ce(cf);
+ ce.init();
+
+ for (size_type bnum = 0; bnum < boundaries.size(); ++bnum) {
+ mesh_region rg(boundaries[bnum].region);
+ const mesh_fem &mfu=md.mesh_fem_of_variable(boundaries[bnum].varname);
+ const mesh_fem &mfl=md.mesh_fem_of_variable(boundaries[bnum].multname);
+ const mesh_im &mim = *(boundaries[bnum].mim);
+ const mesh &m = mfu.linked_mesh();
+ mfu.linked_mesh().intersect_with_mpi_region(rg);
+
+ for (getfem::mr_visitor v(rg, m); !v.finished(); ++v) {
+ // cout << "boundary " << bnum << " element " << v.cv() << endl;
+ size_type cv = v.cv();
+ bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+ pfem pf_s = mfu.fem_of_element(cv);
+ pfem pf_sl = mfl.fem_of_element(cv);
+ pintegration_method pim = mim.int_method_of_element(cv);
+ bgeot::vectors_to_base_matrix(G, m.points_of_convex(cv));
+
+ pfem_precomp pfpu
+ = fppool(pf_s,&(pim->approx_method()->integration_points()));
+ pfem_precomp pfpl
+ = fppool(pf_sl,&(pim->approx_method()->integration_points()));
+ fem_interpolation_context ctxu(pgt,pfpu,size_type(-1), G, cv, v.f());
+ fem_interpolation_context ctxl(pgt,pfpl,size_type(-1), G, cv, v.f());
+
+ for (size_type k = 0;
+ k < pim->approx_method()->nb_points_on_face(v.f()); ++k) {
+ size_type ind
+ = pim->approx_method()->ind_first_point_on_face(v.f()) + k;
+ ctxu.set_ii(ind);
+ ctxl.set_ii(ind);
+ if (!(ce.add_point_contribution
+ (bnum, ctxu, ctxl,pim->approx_method()->coeff(ind),
+ f_coeff[0], vr[0], version))) return;
+ }
+ }
+ }
+ }
+
+
+ // r ne peut pas être variable pour le moment.
+ // dataname_friction_coeff ne peut pas être variable non plus ...
+
+ size_type add_integral_large_sliding_contact_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname, const std::string &dataname_r,
+ const std::string &dataname_friction_coeff, size_type region) {
+
+ integral_large_sliding_contact_brick *pbr
+ = new integral_large_sliding_contact_brick();
+
+ pbr->add_boundary(varname_u, multname, mim, region);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+ tl.push_back(model::term_description(varname_u, multname, false));
+ tl.push_back(model::term_description(multname, varname_u, false));
+ tl.push_back(model::term_description(multname, multname, false));
+
+ model::varnamelist dl(1, dataname_r);
+ dl.push_back(dataname_friction_coeff);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ void add_boundary_to_large_sliding_contact_brick
+ (model &md, size_type indbrick, const mesh_im &mim,
+ const std::string &varname_u, const std::string &multname,
+ size_type region) {
+ dim_type N = md.mesh_fem_of_variable(varname_u).linked_mesh().dim();
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ integral_large_sliding_contact_brick *p
+ = dynamic_cast<integral_large_sliding_contact_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ p->add_boundary(varname_u, multname, mim, region);
+ md.add_mim_to_brick(indbrick, mim);
+
+ contact_frame cf(N);
+ p->build_contact_frame(md, cf);
+
+ model::varnamelist vl;
+ size_type nvaru = 0;
+ for (size_type i = 0; i < cf.contact_boundaries.size(); ++i)
+ if (cf.contact_boundaries[i].ind_U >= nvaru)
+ { vl.push_back(p->boundaries[i].varname); ++nvaru; }
+
+ size_type nvarl = 0;
+ for (size_type i = 0; i < cf.contact_boundaries.size(); ++i)
+ if (cf.contact_boundaries[i].ind_lambda >= nvarl)
+ { vl.push_back(p->boundaries[i].multname); ++nvarl; }
+ md.change_variables_of_brick(indbrick, vl);
+
+ model::termlist tl;
+ for (size_type i = 0; i < vl.size(); ++i)
+ for (size_type j = 0; j < vl.size(); ++j)
+ tl.push_back(model::term_description(vl[i], vl[j], false));
+
+ md.change_terms_of_brick(indbrick, tl);
+ }
+
+ void add_rigid_obstacle_to_large_sliding_contact_brick
+ (model &md, size_type indbrick, const std::string &obs) { // The velocity field should be added to an (optional) parameter ... (and optionaly represented by a rigid motion only ... the velocity should be modifiable ...
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ integral_large_sliding_contact_brick *p
+ = dynamic_cast<integral_large_sliding_contact_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ p->add_obstacle(obs);
+ }
+
+} /* end of namespace getfem. */
diff --git a/src/getfem_contact_and_friction_nodal.cc b/src/getfem_contact_and_friction_nodal.cc
new file mode 100644
index 0000000..8aebc3a
--- /dev/null
+++ b/src/getfem_contact_and_friction_nodal.cc
@@ -0,0 +1,1962 @@
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard, Konstantinos Poulios.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+
+#include "getfem/getfem_contact_and_friction_nodal.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_assembling.h"
+
+#include <getfem/getfem_arch_config.h>
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
+#ifdef GETFEM_HAVE_QHULL_QHULL_H
+#include <getfem/getfem_mesher.h>
+#else
+#include <getfem/bgeot_kdtree.h>
+#endif
+
+#ifdef _MSC_VER
+#define xor ^
+#endif
+
+namespace getfem {
+
+ typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
+ typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
+
+
+ // Computation of an orthonormal basis to a unit vector.
+ static void orthonormal_basis_to_unit_vec(size_type d, const base_node &un,
+ base_node *ut) {
+ size_type n = 0;
+ for (size_type k = 0; k <= d && n < d; ++k) {
+ gmm::resize(ut[n], d+1);
+ gmm::clear(ut[n]);
+ ut[n][k] = scalar_type(1);
+
+ ut[n] -= gmm::vect_sp(un, ut[n]) * un;
+ for (size_type nn = 0; nn < n; ++nn)
+ ut[n] -= gmm::vect_sp(ut[nn], ut[n]) * ut[nn];
+
+ if (gmm::vect_norm2(ut[n]) < 1e-3) continue;
+ ut[n] /= gmm::vect_norm2(ut[n]);
+ ++n;
+ }
+ GMM_ASSERT1(n == d, "Gram-Schmidt algorithm to find an "
+ "orthonormal basis for the tangential displacement failed");
+ }
+
+ // "contact_node" is an object which contains data about nodes expected
+ // to participate in a contact condition. A contact node refers to a
+ // specific mesh_fem.
+ struct contact_node {
+ const mesh_fem *mf; // Pointer to the mesh_fem the contact node is
+ // associated with
+ size_type dof; // first dof id of the node in the considered mesh_fem
+ std::vector<size_type> cvs; // list of ids of neigbouring convexes
+ std::vector<short_type> fcs; // list of local ids of neigbouring faces
+
+ contact_node() : mf(0), cvs(0), fcs(0) {}
+ contact_node(const mesh_fem &mf_) {mf = &mf_;}
+ };
+
+ // contact_node's pair
+ struct contact_node_pair {
+ contact_node cn_s, cn_m; // Slave and master contact_node's
+ scalar_type dist2; // Square of distance between slave and master nodes
+ bool is_active;
+ contact_node_pair(scalar_type threshold=10.) : cn_s(), cn_m()
+ {dist2 = threshold * threshold; is_active = false;}
+ };
+
+ // contact_node's pair list
+ class contact_node_pair_list : public std::vector<contact_node_pair> {
+
+ void contact_node_list_from_region
+ (const mesh_fem &mf, size_type contact_region,
+ std::vector<contact_node> &cnl) {
+
+ cnl.clear();
+ const mesh &m = mf.linked_mesh();
+ size_type qdim = mf.get_qdim();
+ std::map<size_type, size_type> dof_to_cnid;
+ size_type cnid = 0;
+ dal::bit_vector dofs = mf.basic_dof_on_region(contact_region);
+ for (dal::bv_visitor dof(dofs); !dof.finished(); ++dof)
+ if ( dof % qdim == 0) {
+ dof_to_cnid[dof] = cnid++;
+ contact_node new_cn(mf);
+ new_cn.dof = dof;
+ cnl.push_back(new_cn);
+ }
+ for (mr_visitor face(m.region(contact_region));
+ !face.finished(); ++face) {
+ assert(face.is_face());
+ mesh_fem::ind_dof_face_ct
+ face_dofs = mf.ind_basic_dof_of_face_of_element(face.cv(),face.f());
+ for (size_type it=0; it < face_dofs.size(); it += qdim ) {
+ size_type dof = face_dofs[it];
+ cnid = dof_to_cnid[dof];
+ cnl[cnid].cvs.push_back(face.cv());
+ cnl[cnid].fcs.push_back(face.f());
+ } // for:it
+ } // for:face
+ } // append
+
+ public:
+ contact_node_pair_list() : std::vector<contact_node_pair>() {}
+
+ void append_min_dist_cn_pairs(const mesh_fem &mf1, const mesh_fem &mf2,
+ size_type rg1, size_type rg2,
+ bool slave1=true, bool slave2=false) {
+
+ std::vector<contact_node> cnl1(0), cnl2(0);
+ contact_node_list_from_region(mf1, rg1, cnl1);
+ contact_node_list_from_region(mf2, rg2, cnl2);
+
+ // Find minimum distance node pairs
+ size_type size0 = this->size();
+ size_type size1 = slave1 ? cnl1.size() : 0;
+ size_type size2 = slave2 ? cnl2.size() : 0;
+ this->resize( size0 + size1 + size2 );
+# ifndef GETFEM_HAVE_QHULL_QHULL_H
+ bgeot::kdtree tree1, tree2;
+ for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
+ contact_node *cn1 = &cnl1[i1];
+ tree1.add_point_with_id(cn1->mf->point_of_basic_dof(cn1->dof), i1);
+ }
+ for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
+ contact_node *cn2 = &cnl2[i2];
+ tree2.add_point_with_id(cn2->mf->point_of_basic_dof(cn2->dof), i2);
+ }
+ if (slave1) {
+ size_type ii1=size0;
+ for (size_type i1 = 0; i1 < cnl1.size(); ++i1, ++ii1) {
+ contact_node *cn1 = &cnl1[i1];
+ base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
+ bgeot::index_node_pair ipt;
+ scalar_type dist2 = tree2.nearest_neighbor(ipt, node1);
+ if (ipt.i >= 0 && dist2 < (*this)[ii1].dist2) {
+ (*this)[ii1].cn_s = *cn1;
+ (*this)[ii1].cn_m = cnl2[ipt.i];
+ (*this)[ii1].dist2 = dist2;
+ (*this)[ii1].is_active = true;
+ }
+ }
+ }
+ if (slave2) {
+ size_type ii2=size0+size1;
+ for (size_type i2 = 0; i2 < cnl2.size(); ++i2, ++ii2) {
+ contact_node *cn2 = &cnl2[i2];
+ base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
+ bgeot::index_node_pair ipt;
+ scalar_type dist2 = tree1.nearest_neighbor(ipt, node2);
+ if (ipt.i >= 0 && dist2 < (*this)[ii2].dist2) {
+ (*this)[ii2].cn_s = *cn2;
+ (*this)[ii2].cn_m = cnl1[ipt.i];
+ (*this)[ii2].dist2 = dist2;
+ (*this)[ii2].is_active = true;
+ }
+ }
+ }
+# else
+ std::vector<base_node> pts;
+ for (size_type i1 = 0; i1 < cnl1.size(); ++i1) {
+ contact_node *cn1 = &cnl1[i1];
+ pts.push_back(cn1->mf->point_of_basic_dof(cn1->dof));
+ }
+ for (size_type i2 = 0; i2 < cnl2.size(); ++i2) {
+ contact_node *cn2 = &cnl2[i2];
+ pts.push_back(cn2->mf->point_of_basic_dof(cn2->dof));
+ }
+ gmm::dense_matrix<size_type> simplexes;
+
+ getfem::delaunay(pts, simplexes);
+
+ size_type nb_vertices = gmm::mat_nrows(simplexes);
+ std::vector<size_type> facet_vertices(nb_vertices);
+ std::vector< std::vector<size_type> > pt1_neighbours(size1);
+ for (size_type i = 0; i < gmm::mat_ncols(simplexes); ++i) {
+ gmm::copy(gmm::mat_col(simplexes, i), facet_vertices);
+ for (size_type iv1 = 0; iv1 < nb_vertices-1; ++iv1) {
+ size_type v1 = facet_vertices[iv1];
+ bool v1_on_surface1 = (v1 < size1);
+ for (size_type iv2 = iv1 + 1; iv2 < nb_vertices; ++iv2) {
+ size_type v2 = facet_vertices[iv2];
+ bool v2_on_surface1 = (v2 < size1);
+ if (v1_on_surface1 xor v2_on_surface1) {
+ bool already_in = false;
+ size_type vv1 = (v1_on_surface1 ? v1 : v2);
+ size_type vv2 = (v2_on_surface1 ? v1 : v2);
+ for (size_type j = 0; j < pt1_neighbours[vv1].size(); ++j)
+ if (pt1_neighbours[vv1][j] == vv2) {
+ already_in = true;
+ break;
+ }
+ if (!already_in) pt1_neighbours[vv1].push_back(vv2);
+ }
+ }
+ }
+ }
+
+ for (size_type i1 = 0; i1 < size1; ++i1)
+ for (size_type j = 0; j < pt1_neighbours[i1].size(); ++j) {
+ size_type i2 = pt1_neighbours[i1][j] - size1;
+ size_type ii1 = size0 + i1;
+ size_type ii2 = size0 + size1 + i2;
+ contact_node *cn1 = &cnl1[i1];
+ base_node node1 = cn1->mf->point_of_basic_dof(cn1->dof);
+ contact_node *cn2 = &cnl2[i2];
+ base_node node2 = cn2->mf->point_of_basic_dof(cn2->dof);
+ scalar_type dist2 = gmm::vect_norm2_sqr(node1-node2);
+ if (slave1 && dist2 < (*this)[ii1].dist2) {
+ (*this)[ii1].cn_s = *cn1;
+ (*this)[ii1].cn_m = *cn2;
+ (*this)[ii1].dist2 = dist2;
+ (*this)[ii1].is_active = true;
+ }
+ if (slave2 && dist2 < (*this)[ii2].dist2) {
+ (*this)[ii2].cn_s = *cn2;
+ (*this)[ii2].cn_m = *cn1;
+ (*this)[ii2].dist2 = dist2;
+ (*this)[ii2].is_active = true;
+ }
+ }
+#endif
+ }
+
+ void append_min_dist_cn_pairs(const mesh_fem &mf,
+ size_type rg1, size_type rg2,
+ bool slave1=true, bool slave2=false) {
+ append_min_dist_cn_pairs(mf, mf, rg1, rg2, slave1, slave2);
+ }
+ };
+
+ scalar_type projection_on_convex_face
+ (const mesh &m, const size_type cv, const short_type fc,
+ const base_node &master_node, const base_node &slave_node,
+ base_node &un, base_node &proj_node, base_node &proj_node_ref) {
+
+ bgeot::pgeometric_trans pgt = m.trans_of_convex(cv);
+
+ if (pgt->is_linear()) { //this condition is practically too strict
+
+ un = m.normal_of_face_of_convex(cv,fc);
+ un /= gmm::vect_norm2(un);
+ //proj_node = slave_node - [(slave_node-master_node)*n] * n
+ gmm::add(master_node, gmm::scaled(slave_node, -1.), proj_node);
+ gmm::copy(gmm::scaled(un, gmm::vect_sp(proj_node, un)), proj_node);
+ gmm::add(slave_node, proj_node);
+
+ bgeot::geotrans_inv_convex gic;
+ gic.init(m.points_of_convex(cv), pgt);
+ gic.invert(proj_node, proj_node_ref);
+ return pgt->convex_ref()->is_in(proj_node_ref);
+
+ } else {
+
+ size_type N = m.dim();
+ size_type P = pgt->structure()->dim();
+
+ size_type nb_pts_cv = pgt->nb_points();
+ size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+ bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+ ref_mesh_face_pt_ct pts_fc = m.points_of_face_of_convex(cv, fc);
+
+ // Local base on reference face
+ base_matrix base_ref_fc(P-1,N);
+ {
+ dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+ GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+ base_node vec(dref_pts_fc[0].size());
+ for (size_type i = 0; i < P-1; ++i) {
+ vec = dref_pts_fc[i+1] - dref_pts_fc[0];
+ gmm::copy(vec,gmm::mat_row(base_ref_fc,i));
+ }
+ }
+
+ GMM_ASSERT1( slave_node.size() == N, "Dimensions mismatch");
+ const base_node &xx = slave_node;
+ base_node &xxp = proj_node; xxp.resize(N);
+ base_node &xp = proj_node_ref; xp.resize(P);
+ base_node vres(P);
+ scalar_type res= 1.;
+
+ // initial guess
+ xp = gmm::mean_value(pgt->convex_ref()->points_of_face(fc));
+
+ gmm::clear(xxp);
+ base_vector val(nb_pts_fc);
+ pgt->poly_vector_val(xp, ind_pts_fc, val);
+ for (size_type l = 0; l < nb_pts_fc; ++l)
+ gmm::add(gmm::scaled(pts_fc[l], val[l] ), xxp);
+
+ base_matrix G(N, nb_pts_fc);
+ vectors_to_base_matrix(G, pts_fc);
+
+ base_matrix K(N,P-1);
+
+ base_matrix grad_fc(nb_pts_fc, P);
+ base_matrix grad_fc1(nb_pts_fc, P-1);
+ base_matrix B(N,P-1), BB(N,P), CS(P-1,P-1);
+
+ scalar_type EPS = 10E-12;
+ unsigned cnt = 50;
+ while (res > EPS && --cnt) {
+ // computation of the pseudo inverse matrix B at point xp
+ pgt->poly_vector_grad(xp, ind_pts_fc, grad_fc);
+ gmm::mult(grad_fc, gmm::transposed(base_ref_fc), grad_fc1);
+ gmm::mult(G, grad_fc1, K);
+ gmm::mult(gmm::transposed(K), K, CS);
+ gmm::lu_inverse(CS);
+ gmm::mult(K, CS, B);
+ gmm::mult(B, base_ref_fc, BB);
+
+ // Projection onto the face of the convex
+ gmm::mult_add(gmm::transposed(BB), xx-xxp, xp);
+ gmm::clear(xxp);
+ pgt->poly_vector_val(xp, ind_pts_fc, val);
+ for (size_type l = 0; l < nb_pts_fc; ++l)
+ gmm::add(gmm::scaled(pts_fc[l], val[l]), xxp);
+
+ gmm::mult(gmm::transposed(BB), xx - xxp, vres);
+ res = gmm::vect_norm2(vres);
+ }
+ GMM_ASSERT1( res <= EPS,
+ "Iterative pojection on convex face did not converge");
+ { // calculate K at the final point
+ pgt->poly_vector_grad(xp, ind_pts_fc, grad_fc);
+ gmm::mult(grad_fc, gmm::transposed(base_ref_fc), grad_fc1);
+ gmm::mult(G, grad_fc1, K);
+ }
+
+ // computation of normal vector
+ un.resize(N);
+ // un = xx - xxp;
+ // gmm::scale(un, 1/gmm::vect_norm2(un));
+ gmm::clear(un);
+ {
+ base_matrix KK(N,P);
+ { // calculate KK
+ base_matrix grad_cv(nb_pts_cv, P);
+ pgt->poly_vector_grad(xp, grad_cv);
+
+ base_matrix GG(N, nb_pts_cv);
+ vectors_to_base_matrix(GG, m.points_of_convex(cv));
+
+ gmm::mult(GG, grad_cv, KK);
+ }
+
+ base_matrix bases_product(P-1, P);
+ gmm::mult(gmm::transposed(K), KK, bases_product);
+
+ for (size_type i = 0; i < P; ++i) {
+ std::vector<size_type> ind(0);
+ for (size_type j = 0; j < P; ++j)
+ if (j != i ) ind.push_back(j);
+ scalar_type det = gmm::lu_det(gmm::sub_matrix(bases_product,
+ gmm::sub_interval(0, P-1),
+ gmm::sub_index(ind) ) );
+ gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), un);
+ }
+ }
+ // normalizing
+ gmm::scale(un, 1/gmm::vect_norm2(un));
+ // ensure that normal points outwards
+ if (gmm::vect_sp(un, gmm::mean_value(pts_fc) -
+ gmm::mean_value(m.points_of_convex(cv))) < 0)
+ gmm::scale(un,scalar_type(-1));
+
+ return pgt->convex_ref()->is_in(proj_node_ref);
+ }
+ }
+
+ void compute_contact_matrices
+ (const mesh_fem &mf_disp1, const mesh_fem &mf_disp2,
+ contact_node_pair_list &cnpl, model_real_plain_vector &gap,
+ CONTACT_B_MATRIX *BN1, CONTACT_B_MATRIX *BN2 = 0,
+ CONTACT_B_MATRIX *BT1 = 0, CONTACT_B_MATRIX *BT2 = 0) {
+
+ GMM_ASSERT1(gmm::vect_size(gap) == cnpl.size(),
+ "Wrong number of contact node pairs or wrong size of gap");
+ gmm::clear(*BN1);
+ GMM_ASSERT1( gmm::mat_nrows(*BN1) == cnpl.size(), "Wrong size of BN1");
+ if (BN2) {
+ gmm::clear(*BN2);
+ GMM_ASSERT1( gmm::mat_nrows(*BN2) == cnpl.size(), "Wrong size of BN2");
+ }
+ dim_type qdim = mf_disp1.get_qdim();
+ size_type d = qdim - 1;
+ if (BT1) {
+ gmm::clear(*BT1);
+ GMM_ASSERT1( gmm::mat_nrows(*BT1) == cnpl.size() * d, "Wrong size of BT1");
+ }
+ if (BT2) {
+ gmm::clear(*BT2);
+ GMM_ASSERT1( gmm::mat_nrows(*BT2) == cnpl.size() * d, "Wrong size of BT2");
+ }
+ gmm::fill(gap, scalar_type(10)); //FIXME: Needs a threshold value
+ for (size_type row = 0; row < cnpl.size(); ++row) {
+ contact_node_pair *cnp = &cnpl[row];
+ if (cnp->is_active) {
+ contact_node *cn_s = &cnp->cn_s; //slave contact node
+ contact_node *cn_m = &cnp->cn_m; //master contact node
+ const mesh &mesh_m = cn_m->mf->linked_mesh();
+ base_node slave_node = cn_s->mf->point_of_basic_dof(cn_s->dof);
+ base_node master_node = cn_m->mf->point_of_basic_dof(cn_m->dof);
+ base_node un_sel(3), proj_node_sel(3), proj_node_ref_sel(3);
+ scalar_type is_in_min = 1e5; //FIXME
+ size_type cv_sel = 0, fc_sel = 0;
+ std::vector<size_type>::iterator cv;
+ std::vector<short_type>::iterator fc;
+ for (cv = cn_m->cvs.begin(), fc = cn_m->fcs.begin();
+ cv != cn_m->cvs.end() && fc != cn_m->fcs.end(); cv++, fc++) {
+ base_node un(3), proj_node(3), proj_node_ref(3);
+ scalar_type is_in = projection_on_convex_face
+ (mesh_m, *cv, *fc, master_node, slave_node, un, proj_node, proj_node_ref);
+ if (is_in < is_in_min) {
+ is_in_min = is_in;
+ cv_sel = *cv;
+ fc_sel = *fc;
+ un_sel = un;
+ proj_node_sel = proj_node;
+ proj_node_ref_sel = proj_node_ref;
+ }
+ }
+ if (is_in_min < 0.05) { //FIXME
+ gap[row] = gmm::vect_sp(slave_node-proj_node_sel, un_sel);
+
+ base_node ut[3];
+ if (BT1) orthonormal_basis_to_unit_vec(d, un_sel, ut);
+
+ CONTACT_B_MATRIX *BN = 0;
+ CONTACT_B_MATRIX *BT = 0;
+ if (cn_s->mf == &mf_disp1) {
+ BN = BN1;
+ BT = BT1;
+ } else if (cn_s->mf == &mf_disp2) {
+ BN = BN2;
+ BT = BT2;
+ }
+ if (BN)
+ for (size_type k = 0; k <= d; ++k)
+ (*BN)(row, cn_s->dof + k) -= un_sel[k];
+ if (BT)
+ for (size_type k = 0; k <= d; ++k)
+ for (size_type n = 0; n < d; ++n)
+ (*BT)(row * d + n, cn_s->dof + k) -= ut[n][k];
+
+ BN = 0;
+ const mesh_fem *mf_disp = 0;
+ if (cn_m->mf == &mf_disp1) {
+ BN = BN1;
+ BT = BT1;
+ mf_disp = &mf_disp1;
+ } else if (cn_m->mf == &mf_disp2) {
+ BN = BN2;
+ BT = BT2;
+ mf_disp = &mf_disp2;
+ }
+ if (BN) {
+ base_matrix G;
+ base_matrix M(qdim, mf_disp->nb_basic_dof_of_element(cv_sel));
+ bgeot::vectors_to_base_matrix(G, mesh_m.points_of_convex(cv_sel));
+ pfem pf = mf_disp->fem_of_element(cv_sel);
+ bgeot::pgeometric_trans pgt = mesh_m.trans_of_convex(cv_sel);
+ fem_interpolation_context
+ ctx(pgt, pf, proj_node_ref_sel, G, cv_sel, fc_sel);
+ pf->interpolation (ctx, M, int(qdim));
+
+ mesh_fem::ind_dof_ct
+ master_dofs = mf_disp->ind_basic_dof_of_element(cv_sel);
+
+ model_real_plain_vector MT_u(mf_disp->nb_basic_dof_of_element(cv_sel));
+ gmm::mult(gmm::transposed(M), un_sel, MT_u);
+ for (size_type j = 0; j < master_dofs.size(); ++j)
+ (*BN)(row, master_dofs[j]) += MT_u[j];
+
+ if (BT) {
+ for (size_type n = 0; n < d; ++n) {
+ gmm::mult(gmm::transposed(M), ut[n], MT_u);
+ for (size_type j = 0; j < master_dofs.size(); ++j)
+ (*BT)(row * d + n, master_dofs[j]) += MT_u[j];
+ }
+ }
+ } // BN
+
+ }
+ } // if:cnp->cn_s
+ } // cnp
+
+ } // compute_contact_matrices
+
+
+
+ //=========================================================================
+ //
+ // Basic Brick (with given BN, BT, gap) and possibly two bodies
+ //
+ //=========================================================================
+
+ struct Coulomb_friction_brick : public virtual_brick {
+
+ mutable CONTACT_B_MATRIX BN1, BT1, BN2, BT2;
+ mutable CONTACT_B_MATRIX DN, DDN, DT, DDT; // For Hughes stabilization
+ mutable CONTACT_B_MATRIX BBN1, BBT1, BBN2, BBT2;
+ mutable model_real_plain_vector gap, threshold, friction_coeff, alpha;
+ mutable model_real_plain_vector RLN, RLT;
+ mutable scalar_type r, gamma;
+ mutable bool is_init;
+ bool Tresca_version, contact_only;
+ bool really_stationary, friction_dynamic_term;
+ bool two_variables, Hughes_stabilized;
+ int augmentation_version; // 0 for non-symmetric Alart-Curnier version
+ // 1 for symmetric Alart-Curnier version
+ // 2 for new version (augmented multipliers)
+ // 3 for new version with De Saxcé projection
+
+ void init_BBN_BBT(void) const {
+ gmm::resize(BBN1, gmm::mat_nrows(BN1), gmm::mat_ncols(BN1));
+ gmm::copy(BN1, BBN1);
+ if (Hughes_stabilized) {
+ gmm::resize(DDN, gmm::mat_nrows(DN), gmm::mat_ncols(DN));
+ gmm::copy(DN, DDN);
+ }
+ if (two_variables) {
+ gmm::resize(BBN2, gmm::mat_nrows(BN2), gmm::mat_ncols(BN2));
+ gmm::copy(BN2, BBN2);
+ }
+ if (!contact_only) {
+ if (Hughes_stabilized) {
+ gmm::resize(DDT, gmm::mat_nrows(DT), gmm::mat_ncols(DT));
+ gmm::copy(DT, DDT);
+ }
+ gmm::resize(BBT1, gmm::mat_nrows(BT1), gmm::mat_ncols(BT1));
+ gmm::copy(BT1, BBT1);
+ if (two_variables) {
+ gmm::resize(BBT2, gmm::mat_nrows(BT2), gmm::mat_ncols(BT2));
+ gmm::copy(BT2, BBT2);
+ }
+ }
+ size_type nbc = gmm::mat_nrows(BN1);
+ size_type d = gmm::mat_nrows(BT1)/nbc;
+ for (size_type i = 0; i < nbc; ++i) {
+ gmm::scale(gmm::mat_row(BBN1, i), alpha[i]);
+ if (Hughes_stabilized) gmm::scale(gmm::mat_row(DDN, i), alpha[i]);
+ if (two_variables)
+ gmm::scale(gmm::mat_row(BBN2, i), alpha[i]);
+ if (!contact_only)
+ for (size_type k = 0; k < d; ++k) {
+ if (Hughes_stabilized)
+ gmm::scale(gmm::mat_row(DDT, d*i+k), alpha[i]);
+ gmm::scale(gmm::mat_row(BBT1, d*i+k), alpha[i]);
+ if (two_variables)
+ gmm::scale(gmm::mat_row(BBT2, d*i+k), alpha[i]);
+ }
+ }
+ is_init = true;
+ }
+
+ void precomp(const model_real_plain_vector &u1,
+ const model_real_plain_vector &u2,
+ const model_real_plain_vector &lambda_n,
+ const model_real_plain_vector &lambda_t,
+ const model_real_plain_vector &wt1,
+ const model_real_plain_vector &wt2) const {
+ gmm::copy(gmm::scaled(gap, r), RLN);
+ for (size_type i = 0; i < gmm::mat_nrows(BN1); ++i) RLN[i] *= alpha[i];
+ gmm::add(lambda_n, RLN);
+ gmm::mult_add(BBN1, gmm::scaled(u1, -r), RLN);
+ if (Hughes_stabilized)
+ gmm::mult_add(DDN, gmm::scaled(lambda_n, -r), RLN);
+ if (two_variables) gmm::mult_add(BBN2, gmm::scaled(u2, -r), RLN);
+ if (!contact_only) {
+ gmm::copy(lambda_t, RLT);
+ if (friction_dynamic_term) {
+ gmm::mult_add(BBT1, gmm::scaled(wt1, -r*gamma), RLT);
+ if (two_variables)
+ gmm::mult_add(BBT2, gmm::scaled(wt2, -r*gamma), RLT);
+ }
+ if (!really_stationary) {
+ gmm::mult_add(BBT1, gmm::scaled(u1, -r), RLT);
+ if (two_variables) gmm::mult_add(BBT2, gmm::scaled(u2, -r), RLT);
+ }
+ if (Hughes_stabilized)
+ gmm::mult_add(DDT, gmm::scaled(lambda_t, -r), RLT);
+ }
+ }
+
+ // Common part for all contact with friction bricks
+ void basic_asm_real_tangent_terms(const model_real_plain_vector &u1,
+ const model_real_plain_vector &u2,
+ const model_real_plain_vector &lambda_n,
+ const model_real_plain_vector &lambda_t,
+ const model_real_plain_vector &wt1,
+ const model_real_plain_vector &wt2,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ build_version version) const {
+ size_type nbt = 4 + (contact_only ? 0 : 4) + (two_variables ? 3 : 0)
+ + (two_variables && !contact_only ? 2 : 0);
+ GMM_ASSERT1(matl.size() == nbt,
+ "Wrong number of terms for the contact brick");
+
+ const scalar_type vt1 = scalar_type(1), vt0 = scalar_type(0);
+ size_type nbc = gmm::mat_nrows(BN1);
+ size_type d = gmm::mat_nrows(BT1)/nbc;
+
+ // Matrices to be filled
+ size_type nt = 0;
+ model_real_sparse_matrix &T_u1_u1 = matl[nt++], &T_u2_u2 = matl[nt++];
+ if (!two_variables) nt--;
+ model_real_sparse_matrix &T_u1_n = matl[nt++], &T_n_u1 = matl[nt++];
+ if (!two_variables) nt -= 2;
+ model_real_sparse_matrix &T_u2_n = matl[nt++], &T_n_u2 = matl[nt++];
+ size_type nvec_lambda_n = nt;
+ model_real_sparse_matrix &T_n_n = matl[nt++];
+ if (contact_only) nt -= 2;
+ model_real_sparse_matrix &T_u1_t = matl[nt++], &T_t_u1 = matl[nt++];
+ if (contact_only || !two_variables) nt -= 2;
+ model_real_sparse_matrix &T_u2_t = matl[nt++], &T_t_u2 = matl[nt++];
+ if (contact_only) nt -= 2;
+ size_type nvec_lambda_t = nt;
+ model_real_sparse_matrix &T_t_t = matl[nt++], &T_t_n = matl[nt++];
+
+ // Rhs to be filled
+ model_real_plain_vector &ru1 = vecl[0];
+ model_real_plain_vector &ru2 = vecl[1];
+ model_real_plain_vector &rlambda_n = vecl[nvec_lambda_n];
+ model_real_plain_vector &rlambda_t = vecl[nvec_lambda_t];
+
+ // pre-computations
+ if (!is_init) init_BBN_BBT();
+ gmm::resize(RLN, nbc);
+ if (!contact_only) gmm::resize(RLT, nbc*d);
+ if (augmentation_version <= 2)
+ precomp(u1, u2, lambda_n, lambda_t, wt1, wt2);
+
+ if (version & model::BUILD_MATRIX) {
+ base_matrix pg(d, d);
+ base_vector vg(d);
+
+ gmm::clear(T_n_n); gmm::clear(T_n_u1);
+ gmm::clear(T_u1_n); gmm::clear(T_u1_u1);
+ if (two_variables)
+ { gmm::clear(T_u2_u2); gmm::clear(T_n_u2); gmm::clear(T_u2_n); }
+ if (!contact_only) {
+ gmm::clear(T_u1_t); gmm::clear(T_t_n); gmm::clear(T_t_t);
+ if (two_variables) gmm::clear(T_u2_t);
+ }
+
+ switch (augmentation_version) {
+ case 1: case 2:
+ gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+ if (two_variables)
+ gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+ for (size_type i=0; i < nbc; ++i) {
+ if (RLN[i] > vt0) {
+ gmm::clear(gmm::mat_col(T_u1_n, i));
+ if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
+ T_n_n(i, i) = -vt1/(r*alpha[i]);
+ }
+ if (Hughes_stabilized && RLN[i] <= vt0)
+ gmm::copy(gmm::scaled(gmm::mat_row(DN, i), -vt1),
+ gmm::mat_col(T_n_n, i));
+ }
+ if (Hughes_stabilized) {
+ model_real_sparse_matrix aux(nbc, nbc);
+ gmm::copy(gmm::transposed(T_n_n), aux);
+ gmm::copy(aux, T_n_n);
+ }
+ gmm::copy(gmm::transposed(T_u1_n), T_n_u1);
+ if (two_variables) gmm::copy(gmm::transposed(T_u2_n), T_n_u2);
+ if (!contact_only) {
+ for (size_type i=0; i < nbc; ++i) {
+ gmm::sub_interval SUBI(i*d, d);
+ scalar_type th = Tresca_version ? threshold[i]
+ : - (std::min(vt0, RLN[i])) * friction_coeff[i];
+ ball_projection_grad(gmm::sub_vector(RLT, SUBI), th, pg);
+ if (!really_stationary)
+ for (size_type k1 = 0; k1 < d; ++k1)
+ for (size_type k2 = 0; k2 < d; ++k2) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),-pg(k2,k1)),
+ gmm::mat_col(T_u1_t, i*d+k2));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+ -pg(k2,k1)),
+ gmm::mat_col(T_u2_t, i*d+k2));
+ }
+
+ if (!Tresca_version) {
+ if (RLN[i] <= vt0) {
+ ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+ for (size_type k = 0; k < d; ++k)
+ T_t_n(i*d+k, i) = - friction_coeff[i] * vg[k]/(r*alpha[i]);
+ }
+ }
+ for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
+ gmm::copy(gmm::scaled(pg, vt1/(r*alpha[i])),
+ gmm::sub_matrix(T_t_t,SUBI));
+ if (Hughes_stabilized) {
+ for (size_type k = 0; k < d; ++k)
+ for (size_type l = 0; l < d; ++l) {
+ gmm::add(gmm::scaled(gmm::mat_row(DT, d*i+l), -pg(k,l)),
+ gmm::mat_col(T_t_t, d*i+k));
+ }
+ }
+
+ }
+ if (Hughes_stabilized) {
+ model_real_sparse_matrix aux(gmm::mat_nrows(T_t_t),
+ gmm::mat_nrows(T_t_t));
+ gmm::copy(gmm::transposed(T_t_t), aux);
+ gmm::copy(aux, T_t_t);
+ }
+ gmm::copy(gmm::transposed(T_u1_t), T_t_u1);
+ if (two_variables) gmm::copy(gmm::transposed(T_u2_t), T_t_u2);
+ }
+
+ if (augmentation_version == 1) {
+ gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+ if (two_variables)
+ gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+ if (!contact_only) {
+ gmm::copy(gmm::scaled(gmm::transposed(BT1), -vt1), T_u1_t);
+ if (two_variables)
+ gmm::copy(gmm::scaled(gmm::transposed(BT2), -vt1), T_u2_t);
+ }
+ } else {
+ model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
+ gmm::mat_ncols(BN1));
+ gmm::mult(gmm::transposed(gmm::scaled(BBN1,-r)), T_n_u1, tmp1);
+ gmm::add(tmp1, T_u1_u1);
+ if (two_variables) {
+ gmm::mult(gmm::transposed(gmm::scaled(BBN2,-r)), T_n_u2, tmp1);
+ gmm::add(tmp1, T_u2_u2);
+ }
+
+ if (!contact_only) {
+ gmm::mult(gmm::transposed(gmm::scaled(BBT1,-r)), T_t_u1, tmp1);
+ gmm::add(tmp1, T_u1_u1);
+ if (two_variables) {
+ gmm::mult(gmm::transposed(gmm::scaled(BBT2,-r)), T_t_u2, tmp1);
+ gmm::add(tmp1, T_u2_u2);
+ }
+ }
+ }
+
+ if (!contact_only && !Tresca_version) {
+ // should be simplified ... !
+ model_real_sparse_matrix tmp5(gmm::mat_ncols(BT1),
+ gmm::mat_ncols(BT1));
+ model_real_sparse_matrix tmp6(gmm::mat_ncols(BT1),
+ gmm::mat_ncols(BT1));
+ model_real_sparse_matrix tmp7(gmm::mat_ncols(BT2),
+ gmm::mat_ncols(BT2));
+ model_real_sparse_matrix tmp8(gmm::mat_ncols(BT2),
+ gmm::mat_ncols(BT2));
+ model_real_sparse_matrix tmp3(gmm::mat_ncols(T_t_u1),
+ gmm::mat_nrows(T_t_u1));
+ model_real_sparse_matrix tmp4(gmm::mat_ncols(T_t_u2),
+ gmm::mat_nrows(T_t_u2));
+
+ for (size_type i=0; i < nbc; ++i) {
+ gmm::sub_interval SUBI(i*d, d);
+ scalar_type th = - (std::min(vt0, RLN[i])) * friction_coeff[i];
+ if (RLN[i] <= vt0) {
+ ball_projection_grad_r(gmm::sub_vector(RLT, SUBI), th, vg);
+ for (size_type k = 0; k < d; ++k) {
+ gmm::add(gmm::scaled(gmm::mat_row(BN1,i),
+ vg[k]*friction_coeff[i]), gmm::mat_col(tmp3, i*d+k));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BN2,i),
+ vg[k]*friction_coeff[i]), gmm::mat_col(tmp4, i*d+k));
+
+ if (augmentation_version == 2) {
+
+ gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k),
+ vg[k]*friction_coeff[i]), gmm::mat_col(T_u1_n, i));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k),
+ vg[k]*friction_coeff[i]), gmm::mat_col(T_u2_n, i));
+
+ gmm::copy(gmm::scaled(gmm::mat_row(BBT1,i*d+k),
+ -r*friction_coeff[i]*vg[k]),
+ gmm::mat_col(tmp5, i*d+k));
+ gmm::copy(gmm::mat_row(BN1,i),
+ gmm::mat_col(tmp6, i*d+k));
+ if (two_variables) {
+ gmm::copy(gmm::scaled(gmm::mat_row(BBT2,i*d+k),
+ -r*friction_coeff[i]*vg[k]),
+ gmm::mat_col(tmp7, i*d+k));
+ gmm::copy(gmm::mat_row(BN2,i),
+ gmm::mat_col(tmp8, i*d+k));
+ }
+ }
+ }
+ }
+ }
+
+ gmm::add(gmm::transposed(tmp3), T_t_u1);
+ if (two_variables)
+ gmm::add(gmm::transposed(tmp4), T_t_u2);
+
+ if (augmentation_version == 2) {
+ model_real_sparse_matrix tmp1(gmm::mat_ncols(BN1),
+ gmm::mat_ncols(BN1));
+ gmm::mult(tmp5, gmm::transposed(tmp6), gmm::transposed(tmp1));
+ gmm::add(gmm::transposed(tmp1), T_u1_u1);
+ if (two_variables) {
+ gmm::mult(tmp7, gmm::transposed(tmp8),gmm::transposed(tmp1));
+ gmm::add(gmm::transposed(tmp1), T_u2_u2);
+ }
+ }
+ }
+ break;
+
+ case 3:
+ gmm::copy(gmm::scaled(gmm::transposed(BN1), -vt1), T_u1_n);
+ if (two_variables)
+ gmm::copy(gmm::scaled(gmm::transposed(BN2), -vt1), T_u2_n);
+ for (size_type i=0; i < nbc; ++i) {
+ if (lambda_n[i] > vt0) {
+ gmm::clear(gmm::mat_col(T_u1_n, i));
+ if (two_variables) gmm::clear(gmm::mat_col(T_u2_n, i));
+ T_n_n(i, i) = -vt1/r;
+ }
+ }
+ gmm::copy(gmm::scaled(BN1, -vt1), T_n_u1);
+ if (two_variables) gmm::copy(gmm::scaled(BN2, -r), T_n_u2);
+ if (!contact_only) {
+ for (size_type i=0; i < nbc; ++i) {
+ gmm::sub_interval SUBI(i*d, d);
+ scalar_type th = Tresca_version ? threshold[i]
+ : gmm::neg(lambda_n[i]) * friction_coeff[i];
+ ball_projection_grad(gmm::sub_vector(lambda_t, SUBI), th, pg);
+ if (!really_stationary)
+ for (size_type k1 = 0; k1 < d; ++k1)
+ for (size_type k2 = 0; k2 < d; ++k2) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),-pg(k2,k1)),
+ gmm::mat_col(T_u1_t, i*d+k2));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+ -pg(k2,k1)),
+ gmm::mat_col(T_u2_t, i*d+k2));
+ }
+ if (!Tresca_version) {
+ ball_projection_grad_r(gmm::sub_vector(lambda_t, SUBI),th,vg);
+ for (size_type k1 = 0; k1 < d; ++k1) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1,i*d+k1),
+ friction_coeff[i]*vg[k1]),
+ gmm::mat_col(T_u1_n, i));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2,i*d+k1),
+ friction_coeff[i]*vg[k1]),
+ gmm::mat_col(T_u2_n, i));
+ T_t_n(i*d+k1, i) = friction_coeff[i] * vg[k1] / (r*alpha[i]);
+ }
+ }
+ for (size_type k = 0; k < d; ++k) pg(k,k) -= vt1;
+
+ gmm::copy(gmm::scaled(pg, vt1/(r*alpha[i])),
+ gmm::sub_matrix(T_t_t, SUBI));
+
+ }
+ gmm::copy(gmm::scaled(BT1, -vt1), T_t_u1);
+ if (two_variables) gmm::copy(gmm::scaled(BT2, -r), T_t_u2);
+ }
+ break;
+
+ case 4: // Desaxce projection
+ base_small_vector x(d+1), n(d+1), u(d); n[0] = vt1;
+ base_matrix g(d+1, d+1);
+ model_real_sparse_matrix T_n_u1_transp(gmm::mat_ncols(T_n_u1), nbc);
+ model_real_sparse_matrix T_n_u2_transp(gmm::mat_ncols(T_n_u2), nbc);
+
+ gmm::mult(BT1, u1, RLT);
+ if (two_variables) gmm::mult_add(BT2, u2, RLT);
+
+ for (size_type i=0; i < nbc; ++i) {
+ x[0] = lambda_n[i];
+ for (size_type j=0; j < d; ++j) x[1+j] = lambda_t[i*d+j];
+ De_Saxce_projection_grad(x, n, friction_coeff[i], g);
+
+ gmm::add(gmm::scaled(gmm::mat_row(BN1, i), -g(0,0)),
+ gmm::mat_col(T_u1_n, i));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BN2, i), -g(0,0)),
+ gmm::mat_col(T_u2_n, i));
+ T_n_n(i, i) = (g(0,0) - vt1)/(r*alpha[i]);
+
+ gmm::copy(gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), u);
+ scalar_type nu = gmm::vect_norm2(u);
+ if (nu != vt0)
+ for (size_type j=0; j < d; ++j) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+j),
+ friction_coeff[i] * u[j] / nu),
+ gmm::mat_col(T_n_u1_transp, i));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+j),
+ friction_coeff[i] * u[j] / nu),
+ gmm::mat_col(T_n_u2_transp, i));
+ }
+
+ for (size_type j=0; j < d; ++j) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+j), -g(0,j+1)),
+ gmm::mat_col(T_u1_n, i));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+j), -g(0,j+1)),
+ gmm::mat_col(T_u2_n, i));
+
+ gmm::add(gmm::scaled(gmm::mat_row(BN1, i), -g(j+1,0)),
+ gmm::mat_col(T_u1_t, i*d+j));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BN2, i), -g(j+1,0)),
+ gmm::mat_col(T_u2_t, i*d+j));
+
+ for (size_type k=0; k < d; ++k) {
+ gmm::add(gmm::scaled(gmm::mat_row(BT1, i*d+k), -g(1+j,1+k)),
+ gmm::mat_col(T_u1_t, i*d+j));
+ if (two_variables)
+ gmm::add(gmm::scaled(gmm::mat_row(BT2, i*d+k), -g(1+j,1+k)),
+ gmm::mat_col(T_u2_t, i*d+j));
+ T_t_t(i*d+j, i*d+k) = g(1+j, 1+k)/r;
+ }
+ T_t_t(i*d+j, i*d+j) -= vt1/(r*alpha[i]);
+ T_t_n(i*d+j, i) = g(1+j,0)/(r*alpha[i]);
+ // T_n_t(i, i*d+j) = g(0,1+j)/(r*alpha[i]);
+ }
+ }
+ gmm::copy(gmm::scaled(BN1, -vt1), T_n_u1);
+ if (two_variables) gmm::copy(gmm::scaled(BN2, -vt1), T_n_u2);
+ gmm::add(gmm::transposed(T_n_u1_transp), T_n_u1);
+ if (two_variables) gmm::add(gmm::transposed(T_n_u2_transp), T_n_u2);
+ gmm::copy(gmm::scaled(BT1, -vt1), T_t_u1);
+ if (two_variables) gmm::copy(gmm::scaled(BT2, -vt1), T_t_u2);
+ break;
+ }
+ }
+
+ if (version & model::BUILD_RHS) {
+
+ switch (augmentation_version) {
+ case 1: // unsymmetric Alart-Curnier
+ for (size_type i=0; i < nbc; ++i) {
+ RLN[i] = std::min(scalar_type(0), RLN[i]);
+ if (!contact_only) {
+ scalar_type radius = Tresca_version ? threshold[i]
+ : -friction_coeff[i]*RLN[i];
+ ball_projection
+ (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+ }
+ }
+ gmm::mult_add(gmm::transposed(BN1), lambda_n, ru1);
+ if (two_variables)
+ gmm::mult_add(gmm::transposed(BN2), lambda_n, ru2);
+ if (!contact_only) {
+ gmm::mult_add(gmm::transposed(BT1), lambda_t, ru1);
+ if (two_variables)
+ gmm::mult_add(gmm::transposed(BT2), lambda_t, ru2);
+ }
+ for (size_type i = 0; i < nbc; ++i) {
+ rlambda_n[i] = (lambda_n[i] - RLN[i]) / (r * alpha[i]);
+ if (!contact_only)
+ for (size_type k = 0; k < d; ++k)
+ rlambda_t[i*d+k]
+ = (lambda_t[i*d+k] - RLT[i*d+k]) / (r * alpha[i]);
+ }
+ break;
+ case 2: // symmetric Alart-Curnier
+ for (size_type i=0; i < nbc; ++i) {
+ RLN[i] = std::min(vt0, RLN[i]);
+ if (!contact_only) {
+ scalar_type radius = Tresca_version ? threshold[i]
+ : -friction_coeff[i]*RLN[i];
+ ball_projection
+ (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+ }
+ }
+ gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
+ if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
+ if (!contact_only) {
+ gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+ if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+ }
+ for (size_type i = 0; i < nbc; ++i) {
+ rlambda_n[i] = (lambda_n[i] - RLN[i]) / (r * alpha[i]);
+ if (!contact_only)
+ for (size_type k = 0; k < d; ++k)
+ rlambda_t[i*d+k]
+ = (lambda_t[i*d+k] - RLT[i*d+k]) / (r * alpha[i]);
+ }
+ break;
+ case 3: // New unsymmetric method
+ if (!contact_only) gmm::copy(lambda_t, RLT);
+ for (size_type i=0; i < nbc; ++i) {
+ RLN[i] = -gmm::neg(lambda_n[i]);
+ rlambda_n[i] = gmm::pos(lambda_n[i])/r - alpha[i]*gap[i];
+
+ if (!contact_only) {
+ scalar_type radius = Tresca_version ? threshold[i]
+ : friction_coeff[i]*gmm::neg(lambda_n[i]);
+ ball_projection
+ (gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)), radius);
+ }
+ }
+ gmm::mult(gmm::transposed(BN1), RLN, ru1);
+ if (two_variables) gmm::mult(gmm::transposed(BN2), RLN, ru2);
+ gmm::mult_add(BBN1, u1, rlambda_n);
+ if (two_variables) gmm::mult_add(BBN2, u2, rlambda_n);
+ if (!contact_only) {
+ gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+ if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+ gmm::add(gmm::scaled(lambda_t, vt1/r), gmm::scaled(RLT,-vt1/r),
+ rlambda_t);
+ gmm::mult_add(BBT1, u1, rlambda_t);
+ if (two_variables) gmm::mult_add(BBT2, u2, rlambda_t);
+ }
+ for (size_type i = 0; i < nbc; ++i) {
+ rlambda_n[i] /= alpha[i];
+ if (!contact_only)
+ for (size_type k = 0; k < d; ++k) rlambda_t[i*d+k] /= alpha[i];
+ }
+ break;
+ case 4: // New unsymmetric method with De Saxce projection
+ base_small_vector x(d+1), n(d+1);
+ n[0] = vt1;
+ GMM_ASSERT1(!Tresca_version,
+ "Augmentation version incompatible with Tresca friction law");
+ gmm::mult(BBT1, u1, rlambda_t);
+ if (two_variables)
+ gmm::mult_add(BBT2, u2, rlambda_t);
+ for (size_type i=0; i < nbc; ++i) {
+ x[0] = lambda_n[i];
+ gmm::copy(gmm::sub_vector(lambda_t, gmm::sub_interval(i*d,d)),
+ gmm::sub_vector(x, gmm::sub_interval(1, d)));
+ De_Saxce_projection(x, n, friction_coeff[i]);
+ RLN[i] = x[0];
+ gmm::copy(gmm::sub_vector(x, gmm::sub_interval(1, d)),
+ gmm::sub_vector(RLT, gmm::sub_interval(i*d,d)));
+ rlambda_n[i] = lambda_n[i]/r - x[0]/r - alpha[i]*gap[i]
+ - friction_coeff[i] * gmm::vect_norm2(gmm::sub_vector(rlambda_t,
+ gmm::sub_interval(i*d,d)));
+ }
+ gmm::mult_add(gmm::transposed(BT1), RLT, ru1);
+ if (two_variables) gmm::mult_add(gmm::transposed(BT2), RLT, ru2);
+ gmm::mult_add(gmm::transposed(BN1), RLN, ru1);
+ if (two_variables) gmm::mult_add(gmm::transposed(BN2), RLN, ru2);
+ gmm::add(gmm::scaled(lambda_t, vt1/r), rlambda_t);
+ gmm::add(gmm::scaled(RLT, -vt1/r), rlambda_t);
+ gmm::mult_add(BBN1, u1, rlambda_n);
+ if (two_variables) gmm::mult_add(BBN2, u2, rlambda_n);
+ for (size_type i = 0; i < nbc; ++i) {
+ rlambda_n[i] /= alpha[i];
+ if (!contact_only)
+ for (size_type k = 0; k < d; ++k) rlambda_t[i*d+k] /= alpha[i];
+ }
+ break;
+ }
+ }
+ }
+
+ // specific part for the basic bricks : BN, BT, gap, r, alpha are given.
+ virtual void asm_real_tangent_terms(const model &md, size_type ib,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type /* region */,
+ build_version version) const {
+ GMM_ASSERT1(mims.size() == 0, "Contact brick need no mesh_im");
+ size_type nbvar = 2 + (contact_only ? 0 : 1) + (two_variables ? 1 : 0);
+ GMM_ASSERT1(vl.size() == nbvar,
+ "Wrong number of variables for contact brick");
+ size_type nbdl = 3 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
+ + (friction_dynamic_term ? 1 : 0);
+
+ GMM_ASSERT1(dl.size() == nbdl, "Wrong number of data for contact brick, "
+ << dl.size() << " should be " << nbdl);
+
+ size_type nbc = gmm::mat_nrows(BN1);
+
+ // Variables
+ // Without friction and one displacement : u1, lambda_n
+ // Without friction and two displacements : u1, u2, lambda_n
+ // With friction and one displacement : u1, lambda_n, lambda_t
+ // With friction and two displacements : u1, u2, lambda_n, lambda_t
+ size_type nv = 0;
+ const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
+ const model_real_plain_vector &u2 = md.real_variable(vl[nv++]);
+ if (!two_variables) nv--;
+ const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
+ if (contact_only) nv--;
+ const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+ // Parameters
+ // (order : r, gap, alpha, friction_coeff, gamma, wt, threshold)
+ size_type np = 0, np_wt1 = 0, np_wt2 = 0, np_alpha = 0;
+ const model_real_plain_vector &vr = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+ r = vr[0];
+ const model_real_plain_vector &vgap = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vgap) == 1 || gmm::vect_size(vgap) == nbc,
+ "Parameter gap has a wrong size");
+ gmm::resize(gap, nbc);
+ if (gmm::vect_size(vgap) == 1)
+ gmm::fill(gap, vgap[0]);
+ else
+ gmm::copy(vgap, gap);
+ np_alpha = np++;
+ const model_real_plain_vector &valpha = md.real_variable(dl[np_alpha]);
+ GMM_ASSERT1(gmm::vect_size(valpha)== 1 || gmm::vect_size(valpha) == nbc,
+ "Parameter alpha has a wrong size");
+ gmm::resize(alpha, nbc);
+ if (gmm::vect_size(valpha) == 1)
+ gmm::fill(alpha, valpha[0]);
+ else
+ gmm::copy(valpha, alpha);
+ if (!contact_only) {
+ const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+ "Parameter friction_coeff has a wrong size");
+ gmm::resize(friction_coeff, nbc);
+ if (gmm::vect_size(vfr) == 1)
+ gmm::fill(friction_coeff, vfr[0]);
+ else
+ gmm::copy(vfr, friction_coeff);
+ if (friction_dynamic_term) {
+ const model_real_plain_vector &vg = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vg) == 1,
+ "Parameter gamma should be a scalar");
+ gamma = vg[0];
+ np_wt1 = np++;
+ if (two_variables) np_wt2 = np++;
+ }
+ if (Tresca_version) {
+ const model_real_plain_vector &vth = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
+ "Parameter threshold has a wrong size");
+ gmm::resize(threshold, nbc);
+ if (gmm::vect_size(vth) == 1)
+ gmm::fill(threshold, vth[0]);
+ else
+ gmm::copy(vth, threshold);
+ }
+ }
+
+ if (md.is_var_newer_than_brick(dl[np_alpha], ib)) is_init = false;
+
+ basic_asm_real_tangent_terms
+ (u1, u2, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
+ md.real_variable(dl[np_wt2]), matl, vecl, version);
+
+ }
+
+ Coulomb_friction_brick(int aug_version, bool contact_only_,
+ bool two_variables_=false,
+ bool Tresca_version_=false,
+ bool Hughes_stabilized_=false) {
+ if (aug_version == 4 && contact_only_) aug_version = 3;
+ augmentation_version = aug_version;
+ GMM_ASSERT1(aug_version >= 1 && aug_version <= 4,
+ "Wrong augmentation version");
+ GMM_ASSERT1(!Hughes_stabilized_ || aug_version <= 2,
+ "The Hughes stabilized version is only for Alart-Curnier "
+ "version");
+ contact_only = contact_only_;
+ is_init = false;
+ Tresca_version = Tresca_version_;
+ really_stationary = false; // for future version ...
+ friction_dynamic_term = false; // for future version ...
+ two_variables = two_variables_;
+ Hughes_stabilized = Hughes_stabilized_;
+ set_flags("Coulomb friction brick", false /* is linear*/,
+ /* is symmetric */
+ (augmentation_version == 2) && (contact_only||Tresca_version),
+ false /* is coercive */, true /* is real */,
+ false /* is complex */);
+ }
+
+ void set_BN1(CONTACT_B_MATRIX &BN1_) {
+ gmm::resize(BN1, gmm::mat_nrows(BN1_), gmm::mat_ncols(BN1_));
+ gmm::copy(BN1_, BN1);
+ is_init = false;
+ }
+
+ void set_DN(CONTACT_B_MATRIX &DN_) {
+ gmm::resize(DN, gmm::mat_nrows(DN_), gmm::mat_ncols(DN_));
+ gmm::copy(DN_, DN);
+ is_init = false;
+ }
+
+ void set_DT(CONTACT_B_MATRIX &DT_) {
+ gmm::resize(DT, gmm::mat_nrows(DT_), gmm::mat_ncols(DT_));
+ gmm::copy(DT_, DT);
+ is_init = false;
+ }
+
+ void set_BT1(CONTACT_B_MATRIX &BT1_) {
+ gmm::resize(BT1, gmm::mat_nrows(BT1_), gmm::mat_ncols(BT1_));
+ gmm::copy(BT1_, BT1);
+ is_init = false;
+ }
+
+ CONTACT_B_MATRIX &get_BN1(void) { return BN1; }
+ CONTACT_B_MATRIX &get_DN(void) { return DN; }
+ CONTACT_B_MATRIX &get_DT(void) { return DT; }
+ CONTACT_B_MATRIX &get_BT1(void) { return BT1; }
+ const CONTACT_B_MATRIX &get_BN1(void) const { return BN1; }
+ const CONTACT_B_MATRIX &get_DN(void) const { return DN; }
+ const CONTACT_B_MATRIX &get_BT1(void) const { return BT1; }
+
+ };
+
+
+ CONTACT_B_MATRIX &contact_brick_set_BN
+ (model &md, size_type indbrick) {
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ return p->get_BN1();
+ }
+
+
+ CONTACT_B_MATRIX &contact_brick_set_DN
+ (model &md, size_type indbrick) {
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ return p->get_DN();
+ }
+
+ CONTACT_B_MATRIX &contact_brick_set_DT
+ (model &md, size_type indbrick) {
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ return p->get_DT();
+ }
+
+
+ CONTACT_B_MATRIX &contact_brick_set_BT
+ (model &md, size_type indbrick) {
+ pbrick pbr = md.brick_pointer(indbrick);
+ md.touch_brick(indbrick);
+ Coulomb_friction_brick *p = dynamic_cast<Coulomb_friction_brick *>
+ (const_cast<virtual_brick *>(pbr.get()));
+ GMM_ASSERT1(p, "Wrong type of brick");
+ return p->get_BT1();
+ }
+
+ //=========================================================================
+ // Add a frictionless contact condition with BN, r, alpha given.
+ //=========================================================================
+
+ size_type add_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &dataname_r, CONTACT_B_MATRIX &BN,
+ std::string dataname_gap, std::string dataname_alpha,
+ int aug_version, bool Hughes_stabilized) {
+ Coulomb_friction_brick *pbr_
+ = new Coulomb_friction_brick(aug_version, true, false,false, Hughes_stabilized);
+ pbr_->set_BN1(BN);
+ pbrick pbr = pbr_;
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+ tl.push_back(model::term_description(varname_u, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u, false));
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+ model::varnamelist dl(1, dataname_r);
+
+ if (dataname_gap.size() == 0) {
+ dataname_gap = md.new_name("contact_gap_on_" + varname_u);
+ md.add_initialized_fixed_size_data
+ (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
+ }
+ dl.push_back(dataname_gap);
+
+ if (dataname_alpha.size() == 0) {
+ dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
+ md.add_initialized_fixed_size_data
+ (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
+ }
+ dl.push_back(dataname_alpha);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname_n);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+ }
+
+
+ //=========================================================================
+ // Add a contact with friction condition with BN, r, alpha given.
+ //=========================================================================
+
+ size_type add_basic_contact_brick
+ (model &md, const std::string &varname_u, const std::string &multname_n,
+ const std::string &multname_t, const std::string &dataname_r,
+ CONTACT_B_MATRIX &BN, CONTACT_B_MATRIX &BT,
+ std::string dataname_friction_coeff,
+ std::string dataname_gap, std::string dataname_alpha,
+ int aug_version, bool Tresca_version, std::string dataname_threshold, bool Hughes_stabilized) {
+ Coulomb_friction_brick *pbr_
+ = new Coulomb_friction_brick(aug_version,false, false,
+ Tresca_version, Hughes_stabilized);
+ pbr_->set_BN1(BN);
+ pbr_->set_BT1(BT);
+ pbrick pbr = pbr_;
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+ tl.push_back(model::term_description(varname_u, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u, false));
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+ tl.push_back(model::term_description(varname_u, multname_t, false));
+ tl.push_back(model::term_description(multname_t, varname_u, false));
+ tl.push_back(model::term_description(multname_t, multname_t, false));
+ tl.push_back(model::term_description(multname_t, multname_n,
+ (aug_version == 4)));
+ model::varnamelist dl(1, dataname_r);
+ if (dataname_gap.size() == 0) {
+ dataname_gap = md.new_name("contact_gap_on_" + varname_u);
+ md.add_initialized_fixed_size_data
+ (dataname_gap, model_real_plain_vector(1, scalar_type(0)));
+ }
+ dl.push_back(dataname_gap);
+
+ if (dataname_alpha.size() == 0) {
+ dataname_alpha = md.new_name("contact_parameter_alpha_on_"+ multname_n);
+ md.add_initialized_fixed_size_data
+ (dataname_alpha, model_real_plain_vector(1, scalar_type(1)));
+ }
+ dl.push_back(dataname_alpha);
+ dl.push_back(dataname_friction_coeff);
+ if (Tresca_version)
+ dl.push_back(dataname_threshold);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname_n);
+ vl.push_back(multname_t);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+ }
+
+
+ //=========================================================================
+ //
+ // Brick with a given rigid obstacle (one body, build BN, BT, gap, alpha)
+ //
+ //=========================================================================
+ // TODO : add an option for a weak contact condition
+
+ struct Coulomb_friction_brick_rigid_obstacle
+ : public Coulomb_friction_brick {
+
+ std::string obstacle; // obstacle given with a signed distance expression.
+
+ public :
+
+ virtual void asm_real_tangent_terms(const model &md, size_type ib,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ GMM_ASSERT1(mims.size() == 1, "This contact brick needs one mesh_im");
+ size_type nbvar = 2 + (contact_only ? 0 : 1);
+ GMM_ASSERT1(vl.size() == nbvar,
+ "Wrong number of variables for contact brick: "
+ << vl.size() << " should be " << nbvar);
+ size_type nbdl = 1 + (contact_only ? 0 : 1) + (Tresca_version ? 1 : 0)
+ + (friction_dynamic_term ? 1 : 0);
+ GMM_ASSERT1(dl.size() == nbdl,
+ "Wrong number of data for contact brick: "
+ << dl.size() << " should be " << nbdl);
+ GMM_ASSERT1(!two_variables, "internal error");
+ const mesh_im &mim = *mims[0];
+
+ // Variables
+ // Without friction and one displacement : u1, lambda_n
+ // With friction and one displacement : u1, lambda_n, lambda_t
+ size_type nv = 0;
+ const model_real_plain_vector &u1 = md.real_variable(vl[nv++]);
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(vl[0]);
+ const model_real_plain_vector &lambda_n = md.real_variable(vl[nv++]);
+ if (contact_only) nv--;
+ const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+
+ // Parameters (order : r, friction_coeff, gamma, wt, threshold)
+ size_type np = 0, np_wt1 = 0, nbc;
+ const model_real_plain_vector &vr = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+ r = vr[0];
+
+ // Computation of BN, BT, gap and alpha
+ if (md.is_var_mf_newer_than_brick(vl[0], ib)) {
+
+ // Verification that mf_u1 is a pure Lagrange fem.
+ GMM_ASSERT1(!(mf_u1.is_reduced()),
+ "This contact brick works only for pure Lagrange fems");
+ dal::bit_vector dofs = mf_u1.basic_dof_on_region(region);
+ for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
+ size_type cv = mf_u1.first_convex_of_basic_dof(id);
+ GMM_ASSERT1(mf_u1.fem_of_element(cv)->is_lagrange(),
+ "This contact brick works only for pure Lagrange fems");
+ }
+ size_type d = mf_u1.get_qdim() - 1, i = 0, j = 0;
+ nbc = dofs.card() / (d+1);
+
+ // computation of alpha vector.
+ base_node Pmin, Pmax;
+ mf_u1.linked_mesh().bounding_box(Pmin, Pmax);
+ scalar_type l = scalar_type(0);
+ for (i = 0; i < Pmin.size(); ++i)
+ l = std::max(l, gmm::abs(Pmax[i] - Pmin[i]));
+
+ CONTACT_B_MATRIX MM(mf_u1.nb_dof(), mf_u1.nb_dof());
+ asm_mass_matrix(MM, mim, mf_u1, region);
+ gmm::resize(alpha, nbc);
+ i = 0; j = 0;
+ for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i)
+ if ((i % (d+1)) == 0) alpha[j++] = MM(id, id) / l;
+
+
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+
+ mu::Parser parser;
+ parser.SetExpr(obstacle);
+
+ gmm::resize(gap, nbc);
+ gmm::resize(BN1, nbc, mf_u1.nb_dof());
+ gmm::clear(BN1);
+ if (!contact_only) {
+ gmm::resize(BT1, d*nbc, mf_u1.nb_dof());
+ gmm::clear(BT1);
+ }
+ base_node pt(d+1), grad(d+1), ut[3];
+
+ static std::string varn[4] = {"x", "y", "z", "w"};
+ for (size_type k = 0; k <= d; ++k)
+ parser.DefineVar(varn[k], &pt[k]);
+
+ i = 0; j = 0;
+ for (dal::bv_visitor id(dofs); !id.finished(); ++id, ++i) {
+ if ((i % (d+1)) == 0) {
+ gmm::copy(mf_u1.point_of_basic_dof(id), pt);
+ try {
+
+ // Computation of gap
+ gap[j] = scalar_type(parser.Eval());
+
+ // computation of BN
+ size_type cv = mf_u1.first_convex_of_basic_dof(id);
+ scalar_type eps
+ = mf_u1.linked_mesh().convex_radius_estimate(cv) * 1E-3;
+ for (size_type k = 0; k <= d; ++k) {
+ pt[k] += eps;
+ grad[k] = (scalar_type(parser.Eval()) - gap[j]) / eps;
+ pt[k] -= eps;
+ }
+ // unit normal vector
+ base_node un = - grad / gmm::vect_norm2(grad);
+
+ for (size_type k = 0; k <= d; ++k)
+ BN1(j, id + k) = un[k];
+
+ // computation of BT
+ if (!contact_only) {
+
+ orthonormal_basis_to_unit_vec(d, un, ut);
+
+ for (size_type k = 0; k <= d; ++k)
+ for (size_type nn = 0; nn < d; ++nn)
+ BT1(j*d+nn, id + k) = ut[nn][k];
+ }
+
+ } catch (mu::Parser::exception_type &e) {
+ std::cerr << "Message : " << e.GetMsg() << std::endl;
+ std::cerr << "Formula : " << e.GetExpr() << std::endl;
+ std::cerr << "Token : " << e.GetToken() << std::endl;
+ std::cerr << "Position : " << e.GetPos() << std::endl;
+ std::cerr << "Errc : " << e.GetCode() << std::endl;
+ GMM_ASSERT1(false, "Error in signed distance expression");
+ }
+ ++j;
+ }
+
+ }
+
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[1])) == nbc,
+ "Wrong size of multiplier for the contact condition");
+
+ if (!contact_only)
+ GMM_ASSERT1(gmm::vect_size(md.real_variable(vl[2])) == nbc*d,
+ "Wrong size of multiplier for the friction condition");
+
+#else
+
+ GMM_ASSERT1(false, "Muparser is not installed, "
+ "You cannot use this contact brick");
+
+#endif
+
+ is_init = false;
+ }
+ else
+ nbc = gmm::mat_nrows(BN1);
+
+ if (!contact_only) {
+ const model_real_plain_vector &vfr = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+ "Parameter friction_coeff has a wrong size");
+ gmm::resize(friction_coeff, nbc);
+ if (gmm::vect_size(vfr) == 1)
+ gmm::fill(friction_coeff, vfr[0]);
+ else
+ gmm::copy(vfr, friction_coeff);
+ if (friction_dynamic_term) {
+ const model_real_plain_vector &vg = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vg) == 1,
+ "Parameter gamma should be a scalar");
+ gamma = vg[0];
+ np_wt1 = np++;
+ }
+ if (Tresca_version) {
+ const model_real_plain_vector &vth = md.real_variable(dl[np++]);
+ GMM_ASSERT1(gmm::vect_size(vth) == 1 || gmm::vect_size(vth) == nbc,
+ "Parameter threshold has a wrong size");
+ gmm::resize(threshold, nbc);
+ if (gmm::vect_size(vth) == 1)
+ gmm::fill(threshold, vth[0]);
+ else
+ gmm::copy(vth, threshold);
+ }
+ }
+
+ basic_asm_real_tangent_terms
+ (u1, u1, lambda_n, lambda_t, md.real_variable(dl[np_wt1]),
+ md.real_variable(dl[np_wt1]), matl, vecl, version);
+
+ }
+
+ Coulomb_friction_brick_rigid_obstacle
+ (int aug_version, bool contact_only_, const std::string &obs)
+ : Coulomb_friction_brick(aug_version, contact_only_), obstacle(obs) {}
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition with a rigid obstacle given
+ // by a signed distance.
+ //=========================================================================
+
+ size_type add_nodal_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &dataname_r,
+ size_type region, const std::string &obstacle, int aug_version) {
+ pbrick pbr
+ = new Coulomb_friction_brick_rigid_obstacle(aug_version, true, obstacle);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+ tl.push_back(model::term_description(varname_u, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u, false));
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+ model::varnamelist dl(1, dataname_r);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname_n);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ //=========================================================================
+ // Add a contact with friction condition with a rigid obstacle given
+ // by a signed distance.
+ //=========================================================================
+
+ size_type add_nodal_contact_with_rigid_obstacle_brick
+ (model &md, const mesh_im &mim, const std::string &varname_u,
+ const std::string &multname_n, const std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ size_type region, const std::string &obstacle, int aug_version) {
+ pbrick pbr
+ = new Coulomb_friction_brick_rigid_obstacle(aug_version,false,obstacle);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u, varname_u, false));
+ tl.push_back(model::term_description(varname_u, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u, false));
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+ tl.push_back(model::term_description(varname_u, multname_t, false));
+ tl.push_back(model::term_description(multname_t, varname_u, false));
+ tl.push_back(model::term_description(multname_t, multname_t, false));
+ tl.push_back(model::term_description(multname_t, multname_n,
+ (aug_version == 4)));
+ model::varnamelist dl(1, dataname_r);
+ dl.push_back(dataname_friction_coeff);
+
+ model::varnamelist vl(1, varname_u);
+ vl.push_back(multname_n);
+ vl.push_back(multname_t);
+
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+
+ //=========================================================================
+ //
+ // Brick with elastic bodies (one or two bodies, build BN, BT, Gap, alpha)
+ //
+ //=========================================================================
+ // To be done:
+ // - Large deformations: what happens when cnpl and nbc change during
+ // the iterative solution?
+
+ struct Coulomb_friction_brick_nonmatching_meshes
+ : public Coulomb_friction_brick {
+
+ std::vector<size_type> rg1, rg2; // ids of mesh regions expected to come in
+ // contact. For one displacement they refer
+ // both to u1. For two displacements they
+ // respectively refer to u1, u2.
+ bool slave1, slave2; // if true, then rg1 or respectively rg2 are treated
+ // as slave surfaces (the contact multipliers are
+ // defined on these surfaces)
+
+ virtual void asm_real_tangent_terms(const model &md, size_type ib,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+
+ GMM_ASSERT1(mims.size() == 2, "This contact brick needs two mesh_im");
+ const mesh_im &mim1 = *mims[0];
+ const mesh_im &mim2 = *mims[1];
+
+ // Variables
+ // Without friction and one displacement : u1, lambda_n
+ // With friction and one displacement : u1, lambda_n, lambda_t
+ // Without friction and two displacements : u1, u2, lambda_n
+ // With friction and two displacements : u1, u2, lambda_n, lambda_t
+ size_type nv = 0;
+ std::string varname_u1 = vl[nv];
+ const model_real_plain_vector &u1 = md.real_variable(varname_u1);
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+ if (two_variables) nv++;
+ std::string varname_u2 = vl[nv++];
+ const model_real_plain_vector &u2 = md.real_variable(varname_u2);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+ const model_real_plain_vector &lambda_n = md.real_variable(vl[nv]);
+ if (!contact_only) nv++;
+ const model_real_plain_vector &lambda_t = md.real_variable(vl[nv]);
+
+ size_type nbc = lambda_n.size();
+
+ // Parameters (order: r, friction_coeff)
+ const model_real_plain_vector &vr = md.real_variable(dl[0]);
+ GMM_ASSERT1(gmm::vect_size(vr) == 1, "Parameter r should be a scalar");
+ r = vr[0];
+ if (!contact_only) {
+ const model_real_plain_vector &vfr = md.real_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(vfr)==1 || gmm::vect_size(vfr) == nbc,
+ "Parameter friction_coeff has a wrong size");
+ gmm::resize(friction_coeff, nbc);
+ if (gmm::vect_size(vfr) == 1)
+ gmm::fill(friction_coeff, vfr[0]);
+ else
+ gmm::copy(vfr, friction_coeff);
+ }
+
+ // Computation of BN, BT, gap and alpha
+ if ( md.is_var_mf_newer_than_brick(varname_u1, ib)
+ || md.is_var_mf_newer_than_brick(varname_u2, ib)) {
+
+ for (size_type i = 0; i <= size_type(two_variables ? 1 : 0); i++) {
+ const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
+ // Verification that mf_u is a pure Lagrange fem.
+ GMM_ASSERT1(!(mf_u.is_reduced()),
+ "This contact brick works only for pure Lagrange fems");
+ dal::bit_vector dofs = mf_u.basic_dof_on_region(region);
+ for (dal::bv_visitor id(dofs); !id.finished(); ++id) {
+ size_type cv = mf_u.first_convex_of_basic_dof(id);
+ GMM_ASSERT1(mf_u.fem_of_element(cv)->is_lagrange(),
+ "This contact brick works only for pure Lagrange fems");
+ }
+ }
+
+ contact_node_pair_list cnpl;
+ for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it)
+ cnpl.append_min_dist_cn_pairs
+ (mf_u1, mf_u2, rg1[it], rg2[it], slave1, slave2);
+
+ // Computation of gap, BN and BT
+ gmm::resize(gap, nbc);
+ gmm::resize(BN1, nbc, mf_u1.nb_dof());
+ if (contact_only) {
+ if (!two_variables) {
+ compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1);
+ } else {
+ gmm::resize(BN2, nbc, mf_u2.nb_dof());
+ compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2);
+ }
+ } else {
+ size_type d = mf_u1.get_qdim() - 1;
+ gmm::resize(BT1, nbc * d, mf_u1.nb_dof());
+ if (!two_variables) {
+ compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, 0, &BT1);
+ } else {
+ // d == mf_u2.get_qdim() - 1;
+ gmm::resize(BN2, nbc, mf_u2.nb_dof());
+ gmm::resize(BT2, nbc * d, mf_u2.nb_dof());
+ compute_contact_matrices(mf_u1, mf_u2, cnpl, gap, &BN1, &BN2, &BT1, &BT2);
+ }
+ }
+
+ // computation of alpha vector.
+ scalar_type l = scalar_type(0);
+ for (size_type i = 0; i <= size_type(two_variables ? 1 : 0); i++) {
+ const mesh_fem &mf_u = i ? mf_u2 : mf_u1;
+ base_node Pmin, Pmax;
+ mf_u.linked_mesh().bounding_box(Pmin, Pmax);
+ for (size_type j = 0; j < Pmin.size(); ++j)
+ l = std::max(l, gmm::abs(Pmax[j] - Pmin[j]));
+ }
+ gmm::resize(alpha, nbc);
+ size_type mult_id = 0;
+ for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+ for (size_type swap = 0; swap <= 1; ++swap) {
+ if (swap ? slave2 : slave1) {
+ size_type rg = swap ? rg2[it] : rg1[it];
+ const mesh_fem &mf_u = swap ? mf_u2 : mf_u1;
+ const mesh_im &mim = swap ? mim2 : mim1;
+ CONTACT_B_MATRIX MM(mf_u.nb_dof(), mf_u.nb_dof());
+ asm_mass_matrix(MM, mim, mf_u, rg);
+ size_type qdim = mf_u.get_qdim();
+ dal::bit_vector rg_dofs = mf_u.basic_dof_on_region(rg);
+ for (dal::bv_visitor id(rg_dofs); !id.finished(); ++id)
+ if (id % qdim == 0) alpha[mult_id++] = MM(id, id) / l;
+ }
+ }
+ }
+ }
+
+ const model_real_plain_vector dummy_wt;
+ basic_asm_real_tangent_terms
+ (u1, u2, lambda_n, lambda_t, dummy_wt, dummy_wt, matl, vecl, version);
+ }
+
+ Coulomb_friction_brick_nonmatching_meshes
+ (int aug_version, bool contact_only_, bool two_variables_,
+ const std::vector<size_type> &rg1_, const std::vector<size_type> &rg2_,
+ bool slave1_=true, bool slave2_=false)
+ : Coulomb_friction_brick(aug_version, contact_only_, two_variables_),
+ rg1(rg1_), rg2(rg2_), slave1(slave1_), slave2(slave2_) {}
+
+ };
+
+
+ //=========================================================================
+ // Add a frictionless contact condition between two faces of one or two
+ // elastic bodies.
+ //=========================================================================
+
+ size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, const std::string &dataname_r,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1, bool slave2, int aug_version) {
+
+ bool two_variables = (varname_u1.compare(varname_u2) != 0);
+
+ pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
+ (aug_version, true, two_variables, rg1, rg2, slave1, slave2);
+
+ // Calculate multipliers size
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+ size_type nbc = 0;
+ for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+ for (size_type swap = 0; swap <= 1; ++swap) {
+ if (swap ? slave2 : slave1) {
+ const mesh_fem &mf = swap ? mf_u2 : mf_u1;
+ size_type rg = swap ? rg2[it] : rg1[it];
+ dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
+ nbc += rg_dofs.card() / mf.get_qdim();
+ }
+ }
+ }
+
+ if (multname_n.size() == 0)
+ multname_n = md.new_name("contact_multiplier");
+ else
+ GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
+ "The given name for the multiplier is alraedy reserved in the model");
+ md.add_fixed_size_variable(multname_n, nbc);
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u1, varname_u1, false));
+ if (two_variables) {
+ tl.push_back(model::term_description(varname_u2, varname_u2, false));
+ }
+ tl.push_back(model::term_description(varname_u1, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u1, false));
+ if (two_variables) {
+ tl.push_back(model::term_description(varname_u2, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u2, false));
+ }
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+
+ // Variables (order: varname_u, multname_n)
+ model::varnamelist vl;
+ vl.push_back(varname_u1);
+ if (two_variables) vl.push_back(varname_u2);
+ vl.push_back(multname_n);
+
+ // Parameters (order: r, ...)
+ model::varnamelist dl;
+ dl.push_back(dataname_r);
+
+ model::mimlist ml;
+ ml.push_back(&mim1);
+ ml.push_back(&mim2);
+
+ return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
+ }
+
+
+ //=========================================================================
+ // Add a contact with friction condition between two faces of one or two
+ // elastic bodies.
+ //=========================================================================
+
+ size_type add_nodal_contact_between_nonmatching_meshes_brick
+ (model &md, const mesh_im &mim1, const mesh_im &mim2,
+ const std::string &varname_u1, const std::string &varname_u2,
+ std::string &multname_n, std::string &multname_t,
+ const std::string &dataname_r, const std::string &dataname_friction_coeff,
+ const std::vector<size_type> &rg1, const std::vector<size_type> &rg2,
+ bool slave1, bool slave2, int aug_version) {
+
+ bool two_variables = (varname_u1.compare(varname_u2) != 0);
+
+ pbrick pbr = new Coulomb_friction_brick_nonmatching_meshes
+ (aug_version, false, two_variables, rg1, rg2, slave1, slave2);
+
+ // Calculate multipliers size
+ const mesh_fem &mf_u1 = md.mesh_fem_of_variable(varname_u1);
+ const mesh_fem &mf_u2 = md.mesh_fem_of_variable(varname_u2);
+ size_type nbc = 0;
+ for (size_type it = 0; it < rg1.size() && it < rg2.size(); ++it) {
+ for (size_type swap = 0; swap <= 1; ++swap) {
+ if (swap ? slave2 : slave1) {
+ const mesh_fem &mf = swap ? mf_u2 : mf_u1;
+ size_type rg = swap ? rg2[it] : rg1[it];
+ dal::bit_vector rg_dofs = mf.basic_dof_on_region(rg);
+ nbc += rg_dofs.card() / mf.get_qdim();
+ }
+ }
+ }
+
+ if (multname_n.size() == 0)
+ multname_n = md.new_name("contact_normal_multiplier");
+ else
+ GMM_ASSERT1(multname_n.compare(md.new_name(multname_n)) == 0,
+ "The given name for the multiplier is alraedy reserved in the model");
+ md.add_fixed_size_variable(multname_n, nbc);
+ if (multname_t.size() == 0)
+ multname_t = md.new_name("contact_tangent_multiplier");
+ else
+ GMM_ASSERT1(multname_t.compare(md.new_name(multname_t)) == 0,
+ "The given name for the multiplier is alraedy reserved in the model");
+ md.add_fixed_size_variable(multname_t, nbc * (mf_u1.get_qdim() - 1) ); // ??
+
+ model::termlist tl;
+ tl.push_back(model::term_description(varname_u1, varname_u1, false));
+ if (two_variables) {
+ tl.push_back(model::term_description(varname_u2, varname_u2, false));
+ }
+
+ tl.push_back(model::term_description(varname_u1, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u1, false));
+ if (two_variables) {
+ tl.push_back(model::term_description(varname_u2, multname_n, false));
+ tl.push_back(model::term_description(multname_n, varname_u2, false));
+ }
+ tl.push_back(model::term_description(multname_n, multname_n, false));
+
+ tl.push_back(model::term_description(varname_u1, multname_t, false));
+ tl.push_back(model::term_description(multname_t, varname_u1, false));
+ if (two_variables) {
+ tl.push_back(model::term_description(varname_u2, multname_t, false));
+ tl.push_back(model::term_description(multname_t, varname_u2, false));
+ }
+ tl.push_back(model::term_description(multname_t, multname_t, false));
+ tl.push_back(model::term_description(multname_t, multname_n,
+ (aug_version == 4)));
+
+ // Variables (order: varname_u, multname_n, multname_t)
+ model::varnamelist vl;
+ vl.push_back(varname_u1);
+ if (two_variables) vl.push_back(varname_u2);
+ vl.push_back(multname_n);
+ vl.push_back(multname_t);
+
+ // Parameters (order: r, friction_coeff)
+ model::varnamelist dl;
+ dl.push_back(dataname_r);
+ dl.push_back(dataname_friction_coeff);
+
+ model::mimlist ml;
+ ml.push_back(&mim1);
+ ml.push_back(&mim2);
+
+ return md.add_brick(pbr, vl, dl, tl, ml, size_type(-1));
+ }
+
+} /* end of namespace getfem. */
diff --git a/src/getfem_context.cc b/src/getfem_context.cc
index fbe6557..0442dc1 100644
--- a/src/getfem_context.cc
+++ b/src/getfem_context.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
diff --git a/src/getfem_export.cc b/src/getfem_export.cc
index 48e3769..d88db66 100644
--- a/src/getfem_export.cc
+++ b/src/getfem_export.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <iomanip>
#include "getfem/dal_singleton.h"
diff --git a/src/getfem_fem.cc b/src/getfem_fem.cc
index a138ea0..7551a7e 100644
--- a/src/getfem_fem.cc
+++ b/src/getfem_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/** @file getfem_fem.cc
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -30,8 +30,8 @@
#include "gmm/gmm_algobase.h"
#include "getfem/dal_naming_system.h"
#include "getfem/getfem_fem.h"
-#include "getfem/getfem_gauss_lobatto_fem_coef.h"
-#include "getfem/getfem_integration.h" /* for gauss-lobatto points */
+#include "getfem/getfem_gauss_lobatto_fem_coef.h" /* for gauss-lobatto points*/
+#include "getfem/getfem_integration.h"
namespace getfem {
@@ -51,7 +51,8 @@ namespace getfem {
}
size_type fem_interpolation_context::face_num() const {
- GMM_ASSERT3(face_num_ != size_type(-1), "");
+ GMM_ASSERT3(face_num_ != size_type(-1),
+ "Face number is asked but not defined");
return face_num_;
}
@@ -945,48 +946,121 @@ namespace getfem {
/* ******************************************************************** */
- /* Quad8 SERENDIPITY ELEMENT (dim 2) (incomplete Q2) */
+ /* Quad8/Hexa20 SERENDIPITY ELEMENT (dim 2 or 3) (incomplete Q2) */
/* ******************************************************************** */
- // local dof numeration:
- // 6--5--4
+ // local dof numeration for 2D:
+ // 6--5--4
// | |
// 7 3
// | |
// 0--1--2
-
- static pfem incomplete_Q2_fem(fem_param_list ¶ms,
+ //
+ // local dof numeration for 3D:
+ //
+ // 18---17----16
+ // /| /|
+ // /19 / 15
+ // 11 | 10 |
+ // / 12---13/---14
+ // / / / /
+ // 6----5----4 /
+ // | 8 | 9
+ // 7 / 3 /
+ // |/ |/
+ // 0----1----2
+
+ static pfem Q2_incomplete_fem(fem_param_list ¶ms,
std::vector<dal::pstatic_stored_object> &dependencies) {
- GMM_ASSERT1(params.size() == 0, "Bad number of parameters");
+ GMM_ASSERT1(params.size() <= 1, "Bad number of parameters");
+ dim_type n = 2;
+ if (params.size() > 0) {
+ GMM_ASSERT1(params[0].type() == 0, "Bad type of parameters");
+ n = dim_type(::floor(params[0].num() + 0.01));
+ GMM_ASSERT1(n == 2 || n == 3, "Bad parameter, expected value 2 or 3");
+ }
fem<base_poly> *p = new fem<base_poly>;
- p->mref_convex() = bgeot::parallelepiped_of_reference(2);
- p->dim() = 2;
+ p->mref_convex() = bgeot::parallelepiped_of_reference(n);
+ p->dim() = n;
p->is_equivalent() = p->is_polynomial() = p->is_lagrange() = true;
p->estimated_degree() = 2;
p->init_cvs_node();
- p->base().resize(8);
-
- std::stringstream s
- ( "1 - 2*x^2*y - 2*x*y^2 + 2*x^2 + 5*x*y + 2*y^2 - 3*x - 3*y;"
- "4*(x^2*y - x^2 - x*y + x);"
- "2*x*y*y - 2*x*x*y + 2*x*x - x*y - x;"
- "4*(x*y - x*y*y);"
- "2*x*x*y + 2*x*y*y - 3*x*y;"
- "4*(x*y - x*x*y);"
- "2*x*x*y - 2*x*y*y - x*y + 2*y*y - y;"
- "4*(x*y*y - x*y - y*y + y);");
-
- for (int i = 0; i < 8; ++i) p->base()[i] = bgeot::read_base_poly(2, s);
-
- p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.0));
- p->add_node(lagrange_dof(2), base_small_vector(0.5, 0.0));
- p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.0));
- p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.5));
- p->add_node(lagrange_dof(2), base_small_vector(1.0, 1.0));
- p->add_node(lagrange_dof(2), base_small_vector(0.5, 1.0));
- p->add_node(lagrange_dof(2), base_small_vector(0.0, 1.0));
- p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.5));
-
+ p->base().resize(n == 2 ? 8 : 20);
+
+ if (n == 2) {
+ std::stringstream s
+ ( "1 - 2*x^2*y - 2*x*y^2 + 2*x^2 + 5*x*y + 2*y^2 - 3*x - 3*y;"
+ "4*(x^2*y - x^2 - x*y + x);"
+ "2*x*y*y - 2*x*x*y + 2*x*x - x*y - x;"
+ "4*(x*y - x*y*y);"
+ "2*x*x*y + 2*x*y*y - 3*x*y;"
+ "4*(x*y - x*x*y);"
+ "2*x*x*y - 2*x*y*y - x*y + 2*y*y - y;"
+ "4*(x*y*y - x*y - y*y + y);");
+
+ for (int i = 0; i < 8; ++i) p->base()[i] = bgeot::read_base_poly(2, s);
+
+ p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.0));
+ p->add_node(lagrange_dof(2), base_small_vector(0.5, 0.0));
+ p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.0));
+ p->add_node(lagrange_dof(2), base_small_vector(1.0, 0.5));
+ p->add_node(lagrange_dof(2), base_small_vector(1.0, 1.0));
+ p->add_node(lagrange_dof(2), base_small_vector(0.5, 1.0));
+ p->add_node(lagrange_dof(2), base_small_vector(0.0, 1.0));
+ p->add_node(lagrange_dof(2), base_small_vector(0.0, 0.5));
+ } else {
+ std::stringstream s
+ ("1 + 2*x^2*y*z + 2*x*y^2*z + 2*x*y*z^2"
+ " - 2*x^2*y - 2*x^2*z - 2*x*y^2 - 2*y^2*z - 2*y*z^2 - 2*x*z^2 - 7*x*y*z"
+ " + 2*x^2 + 2*y^2 + 2*z^2 + 5*y*z + 5*x*z + 5*x*y - 3*x - 3*y - 3*z;"
+ "4*( - x^2*y*z + x*y*z + x^2*z - x*z + x^2*y - x*y - x^2 + x);"
+ "2*x^2*y*z - 2*x*y^2*z - 2*x*y*z^2"
+ " - 2*x^2*y - 2*x^2*z + 2*x*y^2 + 2*x*z^2 + 3*x*y*z + 2*x^2 - x*y - x*z - x;"
+ "4*(x*y^2*z - x*y^2 - x*y*z + x*y);"
+ " - 2*x^2*y*z - 2*x*y^2*z + 2*x*y*z^2 + 2*x^2*y + 2*x*y^2 + x*y*z - 3*x*y;"
+ "4*(x^2*y*z - x^2*y - x*y*z + x*y);"
+ " - 2*x^2*y*z + 2*x*y^2*z - 2*x*y*z^2"
+ " + 2*x^2*y - 2*x*y^2 - 2*y^2*z + 2*y*z^2 + 3*x*y*z - x*y + 2*y^2 - y*z - y;"
+ "4*( - x*y^2*z + x*y^2 + y^2*z + x*y*z - x*y - y^2 - y*z + y);"
+ "4*( - x*y*z^2 + x*z^2 + y*z^2 + x*y*z - x*z - y*z - z^2 + z);"
+ "4*(x*y*z^2 - x*y*z - x*z^2 + x*z);"
+ "4*( - x*y*z^2 + x*y*z);"
+ "4*(x*y*z^2 - x*y*z - y*z^2 + y*z);"
+ " - 2*x^2*y*z - 2*x*y^2*z + 2*x*y*z^2"
+ " + 2*x^2*z + 2*y^2*z - 2*x*z^2 - 2*y*z^2 + 3*x*y*z - x*z - y*z + 2*z^2 - z;"
+ "4*(x^2*y*z - x^2*z - x*y*z + x*z);"
+ " - 2*x^2*y*z + 2*x*y^2*z - 2*x*y*z^2 + 2*x^2*z + 2*x*z^2 + x*y*z - 3*x*z;"
+ "4*( - x*y^2*z + x*y*z);"
+ "2*x^2*y*z + 2*x*y^2*z + 2*x*y*z^2 - 5*x*y*z;"
+ "4*( - x^2*y*z + x*y*z);"
+ "2*x^2*y*z - 2*x*y^2*z - 2*x*y*z^2 + 2*y^2*z + 2*y*z^2 + x*y*z - 3*y*z;"
+ "4*(x*y^2*z - y^2*z - x*y*z + y*z);");
+
+ for (int i = 0; i < 20; ++i) p->base()[i] = bgeot::read_base_poly(3, s);
+
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.5, 0.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.5, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.5, 1.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 0.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.5, 0.0));
+
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 0.5));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 0.5));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 0.5));
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 0.5));
+
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.5, 0.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 0.5, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(1.0, 1.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.5, 1.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 1.0, 1.0));
+ p->add_node(lagrange_dof(3), base_small_vector(0.0, 0.5, 1.0));
+ }
dependencies.push_back(p->ref_convex(0));
dependencies.push_back(p->node_tab(0));
@@ -1389,8 +1463,14 @@ namespace getfem {
init_cvs_node();
std::stringstream sstr; sstr << "IM_GAUSSLOBATTO1D(" << k*2-1 << ")";
pintegration_method gl_im = int_method_descriptor(sstr.str());
+ std::vector<base_node> points(k+1);
+ for (size_type i = 0; i < k+1; ++i) {
+ points[i] = gl_im->approx_method()->point(i);
+ }
+ std::sort(points.begin(),points.end());
for (size_type i = 0; i < k+1; ++i) {
- add_node(lagrange_dof(1), gl_im->approx_method()->point(i));
+ // cout << points[i][0] << endl;
+ add_node(lagrange_dof(1), points[i]);
}
base_.resize(k+1);
const double *coefs = fem_coeff_gausslob[k];
@@ -1926,12 +2006,12 @@ namespace getfem {
struct PK_discont_ : public PK_fem_ {
public :
- PK_discont_(dim_type nc, short_type k, scalar_type alpha=0.)
+ PK_discont_(dim_type nc, short_type k, scalar_type alpha=scalar_type(0))
: PK_fem_(nc, k) {
std::fill(dof_types_.begin(), dof_types_.end(),
lagrange_nonconforming_dof(nc));
- if (alpha != 0.) {
+ if (alpha != scalar_type(0)) {
base_node G =
gmm::mean_value(cv_node.points().begin(), cv_node.points().end());
for (size_type i=0; i < cv_node.nb_points(); ++i)
@@ -2026,11 +2106,13 @@ namespace getfem {
static bgeot::pgeometric_trans pgt_last = 0;
static short_type k_last = short_type(-1);
static pfem fm_last = 0;
- bool found = false;
+ static char isuffix_last = 0;
+ bool found = false, isuffix = suffix[0];
- if (pgt_last == pgt && k_last == k)
+ if (pgt_last == pgt && k_last == k && isuffix == isuffix_last)
return fm_last;
+ isuffix_last = isuffix;
size_type n = pgt->structure()->dim();
size_type nbp = pgt->basic_structure()->nb_points();
@@ -2122,7 +2204,7 @@ namespace getfem {
add_suffix("PK_FULL_HIERARCHICAL_COMPOSITE",
PK_composite_full_hierarch_fem);
add_suffix("PK_GAUSSLOBATTO1D", PK_GL_fem);
- add_suffix("INCOMPLETE_Q2", incomplete_Q2_fem);
+ add_suffix("Q2_INCOMPLETE", Q2_incomplete_fem);
add_suffix("HCT_TRIANGLE", HCT_triangle_fem);
add_suffix("REDUCED_HCT_TRIANGLE", reduced_HCT_triangle_fem);
add_suffix("QUADC1_COMPOSITE", quadc1p3_fem);
diff --git a/src/getfem_fem_composite.cc b/src/getfem_fem_composite.cc
index e86ac78..2fca7b1 100644
--- a/src/getfem_fem_composite.cc
+++ b/src/getfem_fem_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_poly_composite.h"
diff --git a/src/getfem_fem_level_set.cc b/src/getfem_fem_level_set.cc
index 28849a1..286a464 100644
--- a/src/getfem_fem_level_set.cc
+++ b/src/getfem_fem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/** \file getfem_fem_level_set.cc
\brief a FEM which should be used with getfem::mesh_fem_level_set.
*/
@@ -104,7 +104,7 @@ namespace getfem {
mls_of_convex(c.convex_num());
scalar_type v = eval(c.xref());
// z[i] = (v > 1e-9) ? '+' : ((v < -1e-9) ? '-' : '0');
- z[i] = (v > 0.) ? '+' : '-';
+ z[(size_t)i] = (v > 0.) ? '+' : '-';
}
unsigned cnt = 0;
for (unsigned d = 0; d < dofzones.size(); ++d) {
diff --git a/src/getfem_fourth_order.cc b/src/getfem_fourth_order.cc
index b0f87bc..1b55e3c 100644
--- a/src/getfem_fourth_order.cc
+++ b/src/getfem_fourth_order.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_fourth_order.h"
diff --git a/src/getfem_import.cc b/src/getfem_import.cc
index 27e844a..b66e65e 100644
--- a/src/getfem_import.cc
+++ b/src/getfem_import.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <iostream>
#include <iomanip>
@@ -136,7 +136,8 @@ namespace getfem {
structure: $Nodes list_of_nodes $EndNodes $Elements list_of_elt
$EndElements
*/
- static void import_gmsh_msh_file(std::ifstream& f, mesh& m, int deprecate=0)
+ static void import_gmsh_msh_file(std::ifstream& f, mesh& m, int deprecate=0,
+ std::map<std::string, size_type> *region_map=NULL)
{
gmm::stream_standard_locale sl(f);
/* print general warning */
@@ -166,6 +167,28 @@ namespace getfem {
else
GMM_ASSERT1(false, "can't read Gmsh format: " << header);
+ /* read the region names */
+ if (region_map != NULL) {
+ if (version == 2) {
+ bgeot::read_until(f, "$PhysicalNames");
+ size_type nb_regions;
+ f >> nb_regions;
+ size_type rt,ri;
+ std::string region_name;
+ for (size_type region_cnt=0; region_cnt < nb_regions; ++ region_cnt) {
+ f >> rt >> ri;
+ std::getline(f, region_name);
+ /* trim the string to the quote character front and back*/
+ size_t pos = region_name.find_first_of("\"");
+ if (pos != region_name.npos) {
+ region_name.erase(0, pos+1);
+ pos = region_name.find_last_of("\"");
+ region_name.erase(pos);
+ }
+ (*region_map)[region_name] = ri;
+ }
+ }
+ }
/* read the node list */
if (version == 2)
bgeot::read_until(f, "$Nodes"); /* Format version 2 */
@@ -692,6 +715,33 @@ namespace getfem {
}
}
+ void import_mesh_gmsh(std::ifstream& f, mesh &m,
+ std::map<std::string, size_type> ®ion_map) {
+ import_gmsh_msh_file(f,m, 0, ®ion_map);
+ }
+
+ void import_mesh_gmsh(const std::string& filename,
+ mesh& m, std::map<std::string, size_type> ®ion_map) {
+ m.clear();
+ try {
+ std::ifstream f(filename.c_str());
+ GMM_ASSERT1(f.good(), "can't open file " << filename);
+ /* throw exceptions when an error occurs */
+ f.exceptions(std::ifstream::badbit | std::ifstream::failbit);
+ import_mesh_gmsh(f,m,region_map);
+ f.close();
+ }
+ catch (failure_error& exc) {
+ m.clear();
+ throw exc;
+ }
+ catch (std::ios_base::failure& exc) {
+ m.clear();
+ GMM_ASSERT1(false, "error while importing " << "gmsh"
+ << " mesh file \"" << filename << "\" : " << exc.what());
+ }
+ }
+
void import_mesh(std::ifstream& f, const std::string& format,
mesh& m) {
if (bgeot::casecmp(format,"gmsh")==0)
diff --git a/src/getfem_integration.cc b/src/getfem_integration.cc
index b0fdd17..e9d9d32 100644
--- a/src/getfem_integration.cc
+++ b/src/getfem_integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
diff --git a/src/getfem_integration_composite.cc b/src/getfem_integration_composite.cc
index 30bc544..f366c96 100644
--- a/src/getfem_integration_composite.cc
+++ b/src/getfem_integration_composite.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_poly_composite.h"
diff --git a/src/getfem_inter_element.cc b/src/getfem_inter_element.cc
index 0235741..17333be 100644
--- a/src/getfem_inter_element.cc
+++ b/src/getfem_inter_element.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_inter_element.h"
diff --git a/src/getfem_interpolated_fem.cc b/src/getfem_interpolated_fem.cc
index 7f7c500..a02bc1c 100644
--- a/src/getfem_interpolated_fem.cc
+++ b/src/getfem_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_interpolated_fem.h"
@@ -296,7 +296,7 @@ namespace getfem {
actualize_fictx(pf, cv, ptref);
pf->real_grad_base_value(fictx, taux);
for (size_type i = 0; i < nbdof; ++i)
- ind_dof.at(elements.at(cv).inddof.at(i)) = i;
+ ind_dof.at(e.inddof.at(i)) = i;
if (pif) {
pif->grad(c.xreal(), trans);
for (size_type i = 0; i < pf->nb_dof(cv); ++i)
diff --git a/src/getfem_interpolation.cc b/src/getfem_interpolation.cc
index fad4181..132df23 100644
--- a/src/getfem_interpolation.cc
+++ b/src/getfem_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2001-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2001-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_interpolation.h"
@@ -25,7 +25,7 @@
namespace getfem {
void mesh_trans_inv::points_on_convex(size_type i,
- std::vector<size_type> &itab) const {
+ std::vector<size_type> &itab) const {
itab.resize(pts_cvx[i].size()); size_type j = 0;
for (map_iterator it = pts_cvx[i].begin(); it != pts_cvx[i].end(); ++it)
itab[j++] = it->first;
@@ -44,50 +44,50 @@ namespace getfem {
do {
for (dal::bv_visitor j(msh.convex_index()); !j.finished(); ++j) {
- if (mult > scalar_type(1) && !(cv_on_bound.is_in(j))) continue;
- bgeot::pgeometric_trans pgt = msh.trans_of_convex(j);
- bounding_box(min, max, msh.points_of_convex(j), pgt);
- for (size_type k=0; k < min.size(); ++k) { min[k]-=EPS; max[k]+=EPS; }
- if (extrapolation == 2) {
- if (mult == scalar_type(1))
- for (short_type f = 0; f < msh.nb_faces_of_convex(j); ++f)
- if (!(msh.is_convex_having_neighbour(j, f))) cv_on_bound.add(j);
- if (cv_on_bound.is_in(j)) {
- scalar_type h = scalar_type(0);
- for (size_type k=0; k < min.size(); ++k)
- h = std::max(h, max[k] - min[k]);
- for (size_type k=0; k < min.size(); ++k)
- { min[k]-=mult*h; max[k]+=mult*h; }
- }
- }
- points_in_box(boxpts, min, max);
+ if (mult > scalar_type(1) && !(cv_on_bound.is_in(j))) continue;
+ bgeot::pgeometric_trans pgt = msh.trans_of_convex(j);
+ bounding_box(min, max, msh.points_of_convex(j), pgt);
+ for (size_type k=0; k < min.size(); ++k) { min[k]-=EPS; max[k]+=EPS; }
+ if (extrapolation == 2) {
+ if (mult == scalar_type(1))
+ for (short_type f = 0; f < msh.nb_faces_of_convex(j); ++f)
+ if (!(msh.is_convex_having_neighbour(j, f))) cv_on_bound.add(j);
+ if (cv_on_bound.is_in(j)) {
+ scalar_type h = scalar_type(0);
+ for (size_type k=0; k < min.size(); ++k)
+ h = std::max(h, max[k] - min[k]);
+ for (size_type k=0; k < min.size(); ++k)
+ { min[k]-=mult*h; max[k]+=mult*h; }
+ }
+ }
+ points_in_box(boxpts, min, max);
- if (boxpts.size() > 0) gic.init(msh.points_of_convex(j), pgt);
-
- for (size_type l = 0; l < boxpts.size(); ++l) {
- size_type ind = boxpts[l].i;
- if (npt[ind] || dist[ind] > 0) {
- bool converged;
- bool gicisin = gic.invert(boxpts[l].n, pt_ref, converged, EPS);
- bool toadd = extrapolation || gicisin;
- double isin = pgt->convex_ref()->is_in(pt_ref);
-
- if (toadd && !(npt[ind])) {
- if (isin < dist[ind]) pts_cvx[cvx_pts[ind]].erase(ind);
- else toadd = false;
- }
- if (toadd) {
-// if (mult > 1.5) {
-// cout << "adding " << ind << "ref_coord = " << pt_ref
-// << " cv = " << j << " mult = " << mult << endl;
-// }
- ref_coords[ind] = pt_ref;
- dist[ind] = isin; cvx_pts[ind] = j;
- pts_cvx[j][ind] = void_type();
- npt.sup(ind);
- }
- }
- }
+ if (boxpts.size() > 0) gic.init(msh.points_of_convex(j), pgt);
+
+ for (size_type l = 0; l < boxpts.size(); ++l) {
+ size_type ind = boxpts[l].i;
+ if (npt[ind] || dist[ind] > 0) {
+ bool converged;
+ bool gicisin = gic.invert(boxpts[l].n, pt_ref, converged, EPS);
+ bool toadd = extrapolation || gicisin;
+ double isin = pgt->convex_ref()->is_in(pt_ref);
+
+ if (toadd && !(npt[ind])) {
+ if (isin < dist[ind]) pts_cvx[cvx_pts[ind]].erase(ind);
+ else toadd = false;
+ }
+ if (toadd) {
+// if (mult > 1.5) {
+// cout << "adding " << ind << "ref_coord = " << pt_ref
+// << " cv = " << j << " mult = " << mult << endl;
+// }
+ ref_coords[ind] = pt_ref;
+ dist[ind] = isin; cvx_pts[ind] = j;
+ pts_cvx[j][ind] = void_type();
+ npt.sup(ind);
+ }
+ }
+ }
}
mult *= scalar_type(2);
} while (npt.card() > 0 && extrapolation == 2);
diff --git a/src/getfem_level_set.cc b/src/getfem_level_set.cc
index a738b1e..186d12a 100644
--- a/src/getfem_level_set.cc
+++ b/src/getfem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_level_set.h"
diff --git a/src/getfem_mat_elem.cc b/src/getfem_mat_elem.cc
index 5e61a15..0a475b9 100644
--- a/src/getfem_mat_elem.cc
+++ b/src/getfem_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <deque>
@@ -568,6 +568,13 @@ namespace getfem {
}
add_elem(t, ctx, J, first, true, icb, sizes);
}
+
+ // GMM_ASSERT1(!first, "No integration point on this element.");
+ if (first) {
+ GMM_WARNING3("No integration point on this element. "
+ "Caution, returning a null tensor");
+ t.adjust_sizes(sizes); gmm::clear(t.as_vector());
+ }
}
/* Applying linear transformation for non tau-equivalent elements. */
diff --git a/src/getfem_mat_elem_type.cc b/src/getfem_mat_elem_type.cc
index 0bdca5d..38bbf13 100644
--- a/src/getfem_mat_elem_type.cc
+++ b/src/getfem_mat_elem_type.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include "getfem/getfem_mat_elem_type.h"
diff --git a/src/getfem_mesh.cc b/src/getfem_mesh.cc
index 2b5e9a4..9881f37 100644
--- a/src/getfem_mesh.cc
+++ b/src/getfem_mesh.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include "gmm/gmm_condition_number.h"
@@ -83,7 +83,7 @@ namespace getfem {
giv.invert(pt, barycentre);
- if (pgt->convex_ref()->is_in_face(f, barycentre) < 0.1)
+ if (gmm::abs(pgt->convex_ref()->is_in_face(f, barycentre)) < 0.1)
r.add(icv[jc], fsub);
}
}
@@ -108,7 +108,7 @@ namespace getfem {
giv.invert(pt, barycentre);
for (short_type f = 0; f < pgt->structure()->nb_faces(); ++f)
- if (pgt->convex_ref()->is_in_face(f, barycentre) < 0.1)
+ if (gmm::abs(pgt->convex_ref()->is_in_face(f, barycentre)) < 0.1)
{ r.add(ic, f); break; }
}
}
@@ -138,6 +138,7 @@ namespace getfem {
else {
int ne = int(nb_convex());
std::vector<int> xadj(ne+1), adjncy, numelt(ne), npart(ne);
+ std::vector<int> indelt(convex_index().last_true()+1);
double t_ref = MPI_Wtime();
@@ -145,10 +146,14 @@ namespace getfem {
ind_set s;
for (dal::bv_visitor ic(convex_index()); !ic.finished(); ++ic, ++j) {
numelt[j] = ic;
+ indelt[ic] = j;
+ }
+ j = 0;
+ for (dal::bv_visitor ic(convex_index()); !ic.finished(); ++ic, ++j) {
xadj[j] = k;
neighbours_of_convex(ic, s);
for (ind_set::iterator it = s.begin();
- it != s.end(); ++it) { adjncy.push_back(*it); ++k; }
+ it != s.end(); ++it) { adjncy.push_back(indelt[*it]); ++k; }
}
xadj[j] = k;
@@ -376,6 +381,11 @@ namespace getfem {
void mesh::copy_from(const mesh& m) {
clear();
bgeot::basic_mesh::operator=(m);
+ cvf_sets = m.cvf_sets;
+ valid_cvf_sets = m.valid_cvf_sets;
+ for (std::map<size_type, mesh_region>::iterator it = cvf_sets.begin();
+ it != cvf_sets.end(); ++it)
+ if (it->second.get_parent_mesh() != 0) it->second.set_parent_mesh(this);
cvs_v_num.clear();
gmm::uint64_type d = act_counter();
for (dal::bv_visitor i(convex_index()); !i.finished(); ++i)
diff --git a/src/getfem_mesh_fem.cc b/src/getfem_mesh_fem.cc
index 26cf0aa..a3bddd3 100644
--- a/src/getfem_mesh_fem.cc
+++ b/src/getfem_mesh_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <queue>
@@ -271,6 +271,22 @@ namespace getfem {
}
};
+ void mesh_fem::get_global_dof_index(std::vector<size_type> &ind) const {
+ context_check(); if (!dof_enumeration_made) enumerate_dof();
+ ind.resize(nb_total_dof);
+ for (size_type i=0; i < nb_total_dof; i++) {
+ size_type cv = first_convex_of_basic_dof(i) ;
+ pfem pf = fem_of_element(cv);
+ for (size_type j=0; j < nb_basic_dof_of_element(cv); j++) {
+ if (pf->dof_types()[j] == global_dof(pf->dim()))
+ if (ind_basic_dof_of_element(cv)[j] == i) {
+ ind[i] = pf->index_of_global_dof(cv,j);
+ break;
+ }
+ }
+ }
+ }
+
typedef std::map<fem_dof, size_type, dof_comp_> dof_sort_type;
/// Enumeration of dofs
@@ -364,7 +380,7 @@ namespace getfem {
gmm::row_matrix<gmm::rsvector<scalar_type> >
RR(kept_dof.size(), nb_basic_dof());
size_type j = 0;
- for (std::set<size_type>::iterator it = kept_dof.begin();
+ for (std::set<size_type>::const_iterator it = kept_dof.begin();
it != kept_dof.end(); ++it, ++j)
RR(j, *it) = scalar_type(1);
set_reduction_matrices(RR, gmm::transposed(RR));
diff --git a/src/getfem_mesh_fem_global_function.cc b/src/getfem_mesh_fem_global_function.cc
index 0065b71..4e1fcb3 100644
--- a/src/getfem_mesh_fem_global_function.cc
+++ b/src/getfem_mesh_fem_global_function.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_mesh_fem_global_function.h>
#include <getfem/getfem_level_set.h>
@@ -146,7 +146,7 @@ namespace getfem {
}
-#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
parser_xy_function::parser_xy_function(const std::string &sval,
const std::string &sgrad,
diff --git a/src/getfem_mesh_fem_level_set.cc b/src/getfem_mesh_fem_level_set.cc
old mode 100755
new mode 100644
index 9ced619..1e7eb85
--- a/src/getfem_mesh_fem_level_set.cc
+++ b/src/getfem_mesh_fem_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_fem_level_set.h"
diff --git a/src/getfem_mesh_fem_product.cc b/src/getfem_mesh_fem_product.cc
index 3ee77fc..c7a12e2 100644
--- a/src/getfem_mesh_fem_product.cc
+++ b/src/getfem_mesh_fem_product.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_fem_product.h"
diff --git a/src/getfem_mesh_fem_sum.cc b/src/getfem_mesh_fem_sum.cc
index 7bdd48f..c272ddf 100644
--- a/src/getfem_mesh_fem_sum.cc
+++ b/src/getfem_mesh_fem_sum.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_fem_sum.h"
diff --git a/src/getfem_mesh_im.cc b/src/getfem_mesh_im.cc
index d86d0bc..55e003c 100644
--- a/src/getfem_mesh_im.cc
+++ b/src/getfem_mesh_im.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_im.h"
diff --git a/src/getfem_mesh_im_level_set.cc b/src/getfem_mesh_im_level_set.cc
index 92e70c1..c6b62d2 100644
--- a/src/getfem_mesh_im_level_set.cc
+++ b/src/getfem_mesh_im_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_im_level_set.h"
#include "getfem/getfem_mesher.h"
@@ -342,9 +342,19 @@ namespace getfem {
B = gmm::mean_value(msh.points_of_face_of_convex(i, f));
if (pgt->convex_ref()->is_in(B) < -1E-7) continue;
for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
- if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 1E-6) ff = fi;
+ if (gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) < 2E-6) ff = fi;
+ }
+
+ if (ff == short_type(-1)) {
+ cout << "Distance to the element : "
+ << pgt->convex_ref()->is_in(B) << endl;
+ for (short_type fi = 0; fi < pgt->structure()->nb_faces(); ++fi) {
+ cout << "Distance to face " << fi << " : "
+ << gmm::abs(pgt->convex_ref()->is_in_face(fi, B)) << endl;
+ }
+ GMM_ASSERT3(false, "the point is neither in the interior nor "
+ "the boundary of the element");
}
- GMM_ASSERT3(ff != short_type(-1), "");
}
vectors_to_base_matrix(G, msh.points_of_convex(i));
diff --git a/src/getfem_mesh_level_set.cc b/src/getfem_mesh_level_set.cc
index 20f5ca9..56795d2 100644
--- a/src/getfem_mesh_level_set.cc
+++ b/src/getfem_mesh_level_set.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_level_set.h"
@@ -118,23 +118,36 @@ struct Chrono {
constraints, list_constraints);
}
}
+
+ // cout << "ipts.size() = " << ipts.size() << endl;
+ // cout << " nb_vertices = " << nb_vertices << endl;
+
dal::bit_vector cts; size_type cnt = 0;
for (size_type i=0; i < ipts.size(); ++i) {
- if (ipts[i] < nb_vertices) {
+ // cout << "ipts[i] = " << ipts[i] << endl;
+ if (ipts[i] < nb_vertices) {
+ // cout << "point " << i << " constraints[ipts[i]] = " << constraints[ipts[i]] << endl;
if (cnt == 0) cts = constraints[ipts[i]];
else cts &= constraints[ipts[i]];
++cnt;
}
}
+
if (cts.card()) {
+ // cout << "cts = " << cts << endl;
// dal::bit_vector new_cts;
for (size_type i=0; i < ipts.size(); ++i) {
- if (ipts[i] >= nb_vertices && !ptdone[ipts[i]]) {
- base_node &P = m.points()[ipts[i]];
+ if (ipts[i] >= nb_vertices && !ptdone[ipts[i]]) {
+ base_node P = m.points()[ipts[i]];
// if (cts.card() > 1)
// cout << "WARNING, projection sur " << cts << endl;
- if (!pure_multi_constraint_projection(list_constraints, P, cts))
- GMM_WARNING1("Pure multi has failed in interpolate_face !!");
+ if (!pure_multi_constraint_projection(list_constraints, P, cts)) {
+ GMM_WARNING1("Pure multi has failed in interpolate_face !! Original point " << m.points()[ipts[i]] << " projection " << P);
+ // GMM_ASSERT1(false, "");
+ } else {
+ m.points()[ipts[i]] = P;
+ }
+ ptdone[ipts[i]] = true;
// dist(P, new_cts);
}
}
diff --git a/src/getfem_mesh_region.cc b/src/getfem_mesh_region.cc
index dc28f23..de3c816 100644
--- a/src/getfem_mesh_region.cc
+++ b/src/getfem_mesh_region.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2005-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2005-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_region.h"
#include "getfem/getfem_mesh.h"
diff --git a/src/getfem_mesh_slice.cc b/src/getfem_mesh_slice.cc
index 84c5831..86fdfd0 100644
--- a/src/getfem_mesh_slice.cc
+++ b/src/getfem_mesh_slice.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_slice.h"
#include "getfem/bgeot_geotrans_inv.h"
@@ -142,7 +142,7 @@ namespace getfem {
ist >> nod[i].pt_ref[j];
ist >> bgeot::skip(";");
unsigned long ul; ist >> ul;
- nod[i].faces = slice_node::faces_ct(ul);
+ nod[i].faces = slice_node::faces_ct(int(ul));
}
for (unsigned i=0; i < nbs; ++i) {
unsigned np(0);
diff --git a/src/getfem_mesh_slicers.cc b/src/getfem_mesh_slicers.cc
index fff251e..1d031f9 100644
--- a/src/getfem_mesh_slicers.cc
+++ b/src/getfem_mesh_slicers.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_singleton.h"
#include "getfem/getfem_mesh_slicers.h"
@@ -790,7 +790,7 @@ namespace getfem {
dal::bit_vector pt_in_face; pt_in_face.sup(0, cvm.points().index().last_true()+1);
for (dal::bv_visitor ip(cvm.points().index()); !ip.finished(); ++ip)
- if (cvr->is_in_face(short_type(f), cvm.points()[ip])) pt_in_face.add(ip);
+ if (gmm::abs(cvr->is_in_face(short_type(f), cvm.points()[ip]))) pt_in_face.add(ip);
for (dal::bv_visitor_c ic(cvm.convex_index()); !ic.finished(); ++ic) {
for (short_type ff=0; ff < cvm.nb_faces_of_convex(ic); ++ff) {
diff --git a/src/getfem_mesher.cc b/src/getfem_mesher.cc
index d1150f7..53e9b7a 100644
--- a/src/getfem_mesher.cc
+++ b/src/getfem_mesher.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier, Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesher.h"
@@ -106,6 +106,7 @@ namespace getfem {
base_node &X, const dal::bit_vector &cts) {
size_type nbco = cts.card(), i(0), info, N = X.size();
if (!nbco) return true;
+ // cout << "nbco = " << nbco << endl;
std::vector<const mesher_signed_distance*> ls(nbco);
std::vector<scalar_type> d(nbco), v(nbco);
std::vector<int> ipvt(nbco);
@@ -114,41 +115,100 @@ namespace getfem {
base_small_vector dd(N);
for (dal::bv_visitor ic(cts); !ic.finished(); ++ic, ++i)
{ ls[i] = list_constraints[ic]; d[i] = -(ls[i]->grad(X, G[i])); }
- base_node oldX;
+ base_node oldX, aux(N);
size_type iter = 0;
- scalar_type residual(0), alpha;
- do {
- oldX = X;
- gmm::mult(gmm::transposed(G), G, H);
- info = lu_factor(H, ipvt);
- scalar_type det(1);
- for (i = 0; i < nbco; ++i) det *= H(i,i);
- if (info || gmm::abs(det) < 1E-40) {
- for (i = 0; i < nbco; ++i)
- try_projection(*(ls[i]), X, true);
- for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
- }
- else {
- lu_solve(H, ipvt, v, d);
- gmm::mult(G, v, dd);
- gmm::add(dd, X);
- for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
- alpha = 1.;
- if (iter > 0)
- while (gmm::vect_norm2(d) > residual && alpha > 1E-15) {
- alpha /= 2.;
- gmm::add(gmm::scaled(dd, -alpha), X);
+ scalar_type residual(0), alpha(0), det(0);
+
+ if (nbco == 1) {
+ // cout << "one constraint" << endl;
+ try_projection(*(ls[0]), X, true);
+ d[0] = -(ls[0]->grad(X, G[0]));
+ } else {
+ do {
+ oldX = X;
+ det = scalar_type(0); info = 1;
+ alpha = -scalar_type(1);
+
+ if (nbco <= N) {
+ if (nbco < N)
+ gmm::mult(gmm::transposed(G), G, H);
+ else
+ gmm::copy(gmm::transposed(G), H);
+ // cout << "H = " << H << endl;
+ info = gmm::lu_factor(H, ipvt);
+ det = scalar_type(1);
+ for (i = 0; i < nbco; ++i) det *= H(i,i);
+ }
+ // cout << "G = " << G << endl;
+
+ if (info || gmm::abs(det) < 1E-40) {
+ dal::bit_vector cts_red = cts;
+ int eliminated = 0;
+ i = 0;
+ for (dal::bv_visitor ic(cts); !ic.finished(); ++ic, ++i) {
+ for (size_type j = 0; j < i; ++j)
+ gmm::add(gmm::scaled(G[j], -gmm::vect_sp(G[j], G[i])), G[i]);
+ scalar_type norm_gi = gmm::vect_norm2(G[i]);
+ // cout << "norm_gi = " << norm_gi << endl;
+ if (norm_gi < 1E-10)
+ { cts_red[ic] = false; eliminated++; }
+ else
+ gmm::scale(G[i], scalar_type(1)/norm_gi);
+ }
+ // cout << "G after = " << G << endl;
+ if (eliminated >= 1) {
+ // cout << "rec call with " << eliminated << " eliminated constraints" << endl;
+ pure_multi_constraint_projection(list_constraints, X, cts_red);
for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+
+ det = scalar_type(0); info = 1;
+ if (nbco <= N) {
+ if (nbco < N)
+ gmm::mult(gmm::transposed(G), G, H);
+ else
+ gmm::copy(G, H);
+ info = gmm::lu_factor(H, ipvt);
+ det = scalar_type(1);
+ for (i = 0; i < nbco; ++i) det *= H(i,i);
+ }
+
}
- if (alpha < 1E-15) break;
- }
- for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
- ++iter;
- residual = gmm::vect_norm2(d);
- } while ((residual > 1e-14 || gmm::vect_dist2(oldX,X) > 1e-14)
- && iter < 1000);
-// cout << "nb iter de pure_multi : " << iter
-// << " norm(d) = " << gmm::vect_norm2(d) << " cts = " << cts << endl;
+ }
+
+ if (gmm::vect_norm2(d) > 1e-14) {
+ if (info || gmm::abs(det) < 1E-40) {
+ for (i = 0; i < nbco; ++i)
+ try_projection(*(ls[i]), X, true);
+ for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+ }
+ else {
+ gmm::lu_solve(H, ipvt, v, d);
+ if (nbco < N)
+ gmm::mult(G, v, dd);
+ else
+ gmm::copy(v, dd);
+ GMM_ASSERT1(nbco <= N, "internal error");
+ gmm::add(dd, X);
+ for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+ alpha = scalar_type(1);
+ if (iter > 0)
+ while (gmm::vect_norm2(d) > residual && alpha > 1E-10) {
+ alpha /= scalar_type(2);
+ gmm::add(gmm::scaled(dd, -alpha), X);
+ for (i = 0; i < nbco; ++i) d[i] = -(ls[i]->grad(X, G[i]));
+ }
+ if (alpha < 1E-15) break;
+ }
+ }
+
+ ++iter;
+ residual = gmm::vect_norm2(d);
+ // cout << "residual = " << residual << " alpha = " << alpha;
+ // cout << " gmm::vect_dist2(oldX,X) = " << gmm::vect_dist2(oldX,X) << endl;
+ } while (residual > 1e-14 && (residual > 1e-11 || iter < 15)
+ && iter < 200);
+ // cout << "final residual = " << residual << endl;
+ }
for (i = 0; i < nbco; ++i) if (gmm::abs(d[i]) > SEPS) {
//cout << "PURE MULTI HAS FAILED for " << cts << " nb iter = " << iter << endl;
return false;
@@ -274,6 +334,7 @@ namespace getfem {
: dist(dist_), edge_len(edge_len_), dist_point_hull(dph),
boundary_threshold_flatness(btf), iter_max(itm), prefind(pref),
noisy(noise) {
+ if (noise == -1) noisy = gmm::traces_level::level() - 2;
K=K_; h0=h0_;
ptol = 0.0025;
ttol = .1;
@@ -774,7 +835,7 @@ namespace getfem {
}
}
}
- cout << "effective bounding box : " << eff_boxmin << " : " << eff_boxmax << endl;
+ if (noisy > 0) cout << "effective bounding box : " << eff_boxmin << " : " << eff_boxmax << endl;
if (prefind == 3) {
h0 = std::min(h0, gmm::vect_dist2(eff_boxmin, eff_boxmax)
/ scalar_type(2));
@@ -1233,19 +1294,17 @@ namespace getfem {
// char s[50]; sprintf(s, "toto%02d.mesh", count);
// m.write_to_file(s);
- cout << "iter : " << count << endl;
-
if ( (count > 40 && sqrt(maxdp)*deltat < ptol * h0)
|| iter_wtcc>iter_max || count > 10000) {
- {
- m.clear();
- adapt_mesh(m,K);
- m.optimize_structure();
- getfem::vtk_export exp("toto1.vtk");
- exp.exporting(m);
- exp.write_mesh_quality(m);
- }
+// {
+// m.clear();
+// adapt_mesh(m,K);
+// m.optimize_structure();
+// getfem::vtk_export exp("toto1.vtk");
+// exp.exporting(m);
+// exp.write_mesh_quality(m);
+// }
control_mesh_surface();
size_type nbpt = pts.size();
@@ -1255,14 +1314,14 @@ namespace getfem {
select_elements((prefind == 3) ? 0 : 1);
suppress_flat_boundary_elements();
- {
- m.clear();
- adapt_mesh(m,K);
- m.optimize_structure();
- getfem::vtk_export exp("toto2.vtk");
- exp.exporting(m);
- exp.write_mesh_quality(m);
- }
+// {
+// m.clear();
+// adapt_mesh(m,K);
+// m.optimize_structure();
+// getfem::vtk_export exp("toto2.vtk");
+// exp.exporting(m);
+// exp.write_mesh_quality(m);
+// }
if (prefind != 3) optimize_quality();
@@ -1289,14 +1348,14 @@ namespace getfem {
select_elements((prefind == 3) ? 0 : 1);
suppress_flat_boundary_elements();
- {
- m.clear();
- adapt_mesh(m,K);
- m.optimize_structure();
- getfem::vtk_export exp("toto3.vtk");
- exp.exporting(m);
- exp.write_mesh_quality(m);
- }
+// {
+// m.clear();
+// adapt_mesh(m,K);
+// m.optimize_structure();
+// getfem::vtk_export exp("toto3.vtk");
+// exp.exporting(m);
+// exp.write_mesh_quality(m);
+// }
if (prefind != 3) optimize_quality();
}
@@ -1308,24 +1367,27 @@ namespace getfem {
m.clear();
adapt_mesh(m,K);
- m.write_to_file("toto.mesh");
+ // m.write_to_file("toto.mesh");
m.optimize_structure();
- getfem::vtk_export exp("toto4.vtk");
- exp.exporting(m);
- exp.write_mesh_quality(m);
+// getfem::vtk_export exp("toto4.vtk");
+// exp.exporting(m);
+// exp.write_mesh_quality(m);
+
+// getfem::stored_mesh_slice sl;
+// sl.build(m, getfem::slicer_explode(0.8), 8);
+// getfem::vtk_export exp2("totoq.vtk");
+// exp2.exporting(sl);
+// exp2.write_mesh();
+// exp2.write_mesh_quality(m);
+// getfem::dx_export exp3("totoq.dx");
+// exp3.exporting(sl);
+// exp3.write_mesh();
+
+
- getfem::stored_mesh_slice sl;
- sl.build(m, getfem::slicer_explode(0.8), 8);
- getfem::vtk_export exp2("totoq.vtk");
- exp2.exporting(sl);
- exp2.write_mesh();
- exp2.write_mesh_quality(m);
- getfem::dx_export exp3("totoq.dx");
- exp3.exporting(sl);
- exp3.write_mesh();
// getfem::stored_mesh_slice slb; slb.build(m, getfem::slicer_boundary(m), 4);
// getfem::stored_mesh_slice sl2;
@@ -1383,6 +1445,9 @@ namespace getfem {
# else
extern "C" {
+#ifdef _MSC_VER
+# include <libqhull/qhull_a.h>
+#else
# include <qhull/qhull.h>
//# include <qhull/mem.h>
# include <qhull/qset.h>
@@ -1391,6 +1456,7 @@ namespace getfem {
//# include <qhull/poly.h>
//# include <qhull/io.h>
//# include <qhull/stat.h>
+#endif
}
void delaunay(const std::vector<base_node> &pts,
diff --git a/src/getfem_model_solvers.cc b/src/getfem_model_solvers.cc
index 1d4ac49..b5290da 100644
--- a/src/getfem_model_solvers.cc
+++ b/src/getfem_model_solvers.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_model_solvers.h"
@@ -35,6 +35,54 @@ namespace getfem {
model_complex_plain_vector>(md);
}
+ void default_newton_line_search::init_search(double r, size_t git, double) {
+ alpha_min_ratio = 0.9;
+ alpha_min = 1e-10;
+ alpha_max_ratio = 10.0;
+ alpha_mult = 0.25;
+ itmax = size_type(-1);
+ glob_it = git; if (git <= 1) count_pat = 0;
+ conv_alpha = alpha = alpha_old = 1.;
+ conv_r = first_res = r; it = 0;
+ count = 0;
+ max_ratio_reached = false;
+ }
+
+ double default_newton_line_search::next_try(void) {
+ alpha_old = alpha; ++it;
+ // alpha *= 0.5;
+ if (alpha >= 0.4) alpha *= 0.5; else alpha *= alpha_mult;
+ return alpha_old;
+ }
+
+ bool default_newton_line_search::is_converged(double r, double) {
+ // cout << "r = " << r << " alpha = " << alpha_old << " count_pat = " << count_pat << endl;
+ if (!max_ratio_reached && r < first_res * alpha_max_ratio) {
+ alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+ it_max_ratio_reached = it; max_ratio_reached = true;
+ }
+ if (max_ratio_reached &&
+ r < r_max_ratio_reached * 0.5 &&
+ r > first_res * 1.1 && it <= it_max_ratio_reached+1) {
+ alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+ it_max_ratio_reached = it;
+ }
+ if (count == 0 || r < conv_r)
+ { conv_r = r; conv_alpha = alpha_old; count = 1; }
+ if (conv_r < first_res) ++count;
+
+ if (r < first_res * alpha_min_ratio)
+ { count_pat = 0.; return true; }
+ if (count>=5 || (alpha < alpha_min && max_ratio_reached) || alpha<1e-15) {
+ if (conv_r < first_res * 0.99) count_pat = 0;
+ if (/*gmm::random() * 50. < -log(conv_alpha)-4.0 ||*/ count_pat >= 3)
+ { conv_r=r_max_ratio_reached; conv_alpha=alpha_max_ratio_reached; }
+ if (conv_r >= first_res * 0.999) count_pat++;
+ return true;
+ }
+ return false;
+ }
+
/* ***************************************************************** */
/* Intermediary structure for Newton algorithms. */
/* ***************************************************************** */
@@ -48,69 +96,214 @@ namespace getfem {
typedef typename gmm::number_traits<T>::magnitude_type R;
model &md;
- gmm::abstract_newton_line_search &ls;
+ bool is_reduced;
+ std::vector<size_type> &sind;
+ gmm::sub_index I;
+ abstract_newton_line_search &ls;
VECTOR stateinit, &state;
const VECTOR &rhs;
const MATRIX &K;
+ MATRIX Kr;
+ VECTOR rhsr;
bool with_pseudo_potential;
- void compute_tangent_matrix(void)
- { md.to_variables(state); md.assembly(model::BUILD_MATRIX); }
+ void compute_tangent_matrix(void) {
+ md.to_variables(state);
+ md.assembly(model::BUILD_MATRIX);
+ if (is_reduced) {
+ gmm::resize(Kr, sind.size(), sind.size());
+ gmm::copy(gmm::sub_matrix(K, I, I), Kr);
+ }
+ }
- const MATRIX &tangent_matrix(void) { return K; }
+ const MATRIX &tangent_matrix(void) { return (is_reduced ? Kr : K); }
inline T scale_residual(void) const { return T(1); }
- void compute_residual(void)
- { md.to_variables(state); md.assembly(model::BUILD_RHS); }
+ void compute_residual(void) {
+ md.to_variables(state);
+ md.assembly(model::BUILD_RHS);
+ if (is_reduced) {
+ gmm::resize(rhsr, sind.size());
+ gmm::copy(gmm::sub_vector(rhs, I), rhsr);
+ }
+ }
void compute_pseudo_potential(void)
{ md.to_variables(state); md.assembly(model::BUILD_PSEUDO_POTENTIAL); }
+ void perturbation(void) {
+ R res = gmm::vect_norm2(state), ampl = std::max(res*R(1E-20), R(1E-50));
+ std::vector<R> V(gmm::vect_size(state));
+ gmm::fill_random(V);
+ gmm::add(gmm::scaled(V, ampl), state);
+ }
- const VECTOR &residual(void) { return rhs; }
+ const VECTOR &residual(void) { return (is_reduced ? rhsr : rhs); }
- R residual_norm(void) { return gmm::vect_norm2(rhs); }
+ R residual_norm(void) { // A norm1 seems to be better than a norm2
+ // at least for contact problems.
+ if (is_reduced)
+ return gmm::vect_norm1(rhsr)/R(gmm::vect_size(rhsr));
+ else
+ return gmm::vect_norm1(rhs)/R(gmm::vect_size(rhs));
+ }
- R line_search(VECTOR &dr, const gmm::iteration &iter) {
- gmm::resize(stateinit, md.nb_dof());
- gmm::copy(state, stateinit);
- R alpha(1), res;
+ R compute_res(bool comp = true) {
if (with_pseudo_potential) {
compute_pseudo_potential();
- res = md.pseudo_potential();
+ return md.pseudo_potential();
} else {
- res = residual_norm();
+ if (comp) compute_residual();
+ return residual_norm();
}
+ }
+
- ls.init_search(res, iter.get_iteration());
+ R line_search(VECTOR &dr, const gmm::iteration &iter) {
+ size_type nit = 0;
+ gmm::resize(stateinit, md.nb_dof());
+ gmm::copy(state, stateinit);
+ R alpha(1), res, res_init, R0;
+
+ res_init = res = compute_res(false);
+ // cout << "first residual = " << residual() << endl << endl;
+ R0 = (is_reduced ? gmm::real(gmm::vect_sp(dr, rhsr))
+ : gmm::real(gmm::vect_sp(dr, rhs)));
+
+ // store the initial residual for the reprojection step.
+// size_type N = gmm::vect_size(residual());
+// VECTOR first_rhs(N); gmm::copy(residual(), first_rhs); // à éliminer
+
+
+ // Compute the second derivative at alpha = 0 (value 2*a)
+ // not very effective ... precision problem ?
+
+// R EPS = 1e-6;
+// gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, EPS),
+// gmm::sub_vector(state, I));
+// R res2 = compute_res();
+
+// R a = (res2 + EPS * res - res) / gmm::sqr(EPS);
+// R delta = gmm::sqr(res)-R(4)*a*res;
+// R alpha_bis = R(1);
+// if (delta > 0) {
+// R l1 = (res - sqrt(delta)) / (R(2)*a);
+// R l2 = (res - sqrt(delta)) / (R(2)*a);
+// if (l1 > 0) alpha_bis = std::min(alpha_bis, l1);
+// if (l2 > 0) alpha_bis = std::min(alpha_bis, l2);
+// }
+// if (a > 0)
+// alpha_bis = std::min(alpha_bis, res / (R(2)*a));
+// cout << "alpha_bis = " << alpha_bis << endl;
+
+// gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha_bis),
+// gmm::sub_vector(state, I));
+
+// R res3 = compute_res();
+// cout << "res3 = " << res3 << endl;
+
+// cout.precision(16);
+// cout << "res = " << res << " res2 = " << res2 << endl;
+// cout << "a = " << (res2 + EPS * res - res) / gmm::sqr(EPS) << endl;
+// cout << "aa = " << (res2 + EPS * res - res) << endl;
+
+
+ ls.init_search(res, iter.get_iteration(), R0);
do {
alpha = ls.next_try();
- gmm::add(stateinit, gmm::scaled(dr, alpha), state);
- if (alpha < 1E-10) break;
- if (with_pseudo_potential) {
- compute_pseudo_potential();
- res = md.pseudo_potential();
- } else {
- compute_residual();
- res = residual_norm();
- }
- } while (!ls.is_converged(res));
+ gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha),
+ gmm::sub_vector(state, I));
+ res = compute_res();
+ // cout << "residual = " << residual() << endl << endl;
+ R0 = (is_reduced ? gmm::real(gmm::vect_sp(dr, rhsr))
+ : gmm::real(gmm::vect_sp(dr, rhs)));
+
+ ++ nit;
+ } while (!ls.is_converged(res, R0));
if (alpha != ls.converged_value() || with_pseudo_potential) {
alpha = ls.converged_value();
- gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+ gmm::add(gmm::sub_vector(stateinit, I), gmm::scaled(dr, alpha),
+ gmm::sub_vector(state, I));
res = ls.converged_residual();
compute_residual();
}
+
+// if (1) { // reprojection step ... only for non reduced case ...
+// GMM_ASSERT1(!is_reduced, "to be done ...");
+// // detection des ddls "coupables"
+// R mean = R(0);
+// for (size_type i = 0; i < N; ++i) mean += gmm::abs(residual()[i]);
+// mean /= R(N);
+// cout << "mean = " << mean << endl << "selected : ";
+
+// VECTOR new_dr(N);
+// size_type Ndof = 0;
+// for (size_type i = 0; i < N; ++i)
+// if (gmm::abs(residual()[i])
+// > std::max(gmm::abs(first_rhs[i]), mean) * R(4)) {
+// cout << i << " ";
+// new_dr[i] = dr[i];
+// ++Ndof;
+// }
+// cout << endl;
+
+// if (Ndof > 0) {
+
+// R EPS = 1e-8;
+// R THR = 0.8;
+// R mini_alpha = alpha * THR;
+
+// cout << "performing post-correction" << endl;
+// cout << "res = " << res << " res_init = " << res_init << endl;
+
+
+// // divided difference
+// gmm::add(gmm::scaled(new_dr, -EPS), state);
+// R res2 = compute_res();
+// cout << "pente = " << (res - res2) / EPS << endl;
+// R beta = (res - res2) / EPS;
+// mini_alpha = (res2 - THR*std::min(res_init, res))/((beta != R(0)) ? beta : R(1));
+
+// cout << "mini_alpha = " << mini_alpha << endl;
+// if (mini_alpha > alpha * THR)
+// mini_alpha = alpha * THR;
+
+// if (mini_alpha > 0) {
+
+// gmm::add(gmm::scaled(new_dr, -mini_alpha+EPS), state);
+// R res4 = compute_res(), res3;
+// cout << "res4 = " << res4 << endl;
+// size_type mini_it = 0;
+// do {
+// res3 = res4;
+// mini_alpha /= R(2); mini_it++;
+// gmm::add(gmm::scaled(new_dr, mini_alpha), state);
+// res4 = compute_res();
+// cout << "res4 = " << res4 << endl;
+// } while (res4 < res3 && mini_it <= 6);
+
+// if (res4 < res3) { res3 = res4; }
+// else gmm::add(gmm::scaled(new_dr, -mini_alpha), state);
+
+// if (res3 > res) { // cancel correction
+// gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+// }
+// }
+// else gmm::add(stateinit, gmm::scaled(dr, alpha), state);
+// res = compute_res();
+// }
+// }
return alpha;
}
- model_pb(model &m, gmm::abstract_newton_line_search &ls_, VECTOR &st,
- const VECTOR &rhs_, const MATRIX &K_,
+ model_pb(model &m, abstract_newton_line_search &ls_, VECTOR &st,
+ const VECTOR &rhs_, const MATRIX &K_, bool reduced_,
+ std::vector<size_type> &sind_,
bool with_pseudo_pot = false)
- : md(m), ls(ls_), state(st), rhs(rhs_), K(K_),
- with_pseudo_potential(with_pseudo_pot) {}
+ : md(m), is_reduced(reduced_), sind(sind_), I(sind_), ls(ls_), state(st),
+ rhs(rhs_), K(K_), with_pseudo_potential(with_pseudo_pot) {}
};
@@ -121,19 +314,36 @@ namespace getfem {
template <typename MATRIX, typename VECTOR, typename PLSOLVER>
void standard_solve(model &md, gmm::iteration &iter,
PLSOLVER lsolver,
- gmm::abstract_newton_line_search &ls, const MATRIX &K,
+ abstract_newton_line_search &ls, const MATRIX &K,
const VECTOR &rhs, bool with_pseudo_potential = false) {
VECTOR state(md.nb_dof());
+ std::vector<size_type> sind;
+ bool is_reduced;
md.from_variables(state); // copy the model variables in the state vector
+ is_reduced = md.build_reduced_index(sind); // sub index of the dof to
+ // be solved in case of disabled variables
+
if (md.is_linear()) {
md.assembly(model::BUILD_ALL);
- (*lsolver)(K, state, rhs, iter);
+
+ if (is_reduced) {
+ gmm::sub_index I(sind);
+ MATRIX Kr(sind.size(), sind.size());
+ VECTOR rhsr(sind.size()), stater(sind.size());
+ gmm::copy(gmm::sub_matrix(K, I, I), Kr);
+ gmm::copy(gmm::sub_vector(state, I), stater);
+ gmm::copy(gmm::sub_vector(rhs, I), rhsr);
+ (*lsolver)(Kr, stater, rhsr, iter);
+ gmm::copy(stater, gmm::sub_vector(state, I));
+ } else {
+ (*lsolver)(K, state, rhs, iter);
+ }
}
else {
- model_pb<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K,
+ model_pb<MATRIX, VECTOR> mdpb(md, ls, state, rhs, K, is_reduced, sind,
with_pseudo_potential);
classical_Newton(mdpb, iter, *lsolver);
}
@@ -143,7 +353,7 @@ namespace getfem {
void standard_solve(model &md, gmm::iteration &iter,
rmodel_plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls,
+ abstract_newton_line_search &ls,
bool with_pseudo_potential) {
standard_solve(md, iter, lsolver, ls, md.real_tangent_matrix(),
md.real_rhs(), with_pseudo_potential);
@@ -151,7 +361,7 @@ namespace getfem {
void standard_solve(model &md, gmm::iteration &iter,
cmodel_plsolver_type lsolver,
- gmm::abstract_newton_line_search &ls,
+ abstract_newton_line_search &ls,
bool with_pseudo_potential) {
standard_solve(md, iter, lsolver, ls, md.complex_tangent_matrix(),
md.complex_rhs(), with_pseudo_potential);
@@ -161,20 +371,20 @@ namespace getfem {
void standard_solve(model &md, gmm::iteration &iter,
rmodel_plsolver_type lsolver,
bool with_pseudo_potential) {
- gmm::default_newton_line_search ls;
+ default_newton_line_search ls;
standard_solve(md, iter, lsolver, ls, with_pseudo_potential);
}
void standard_solve(model &md, gmm::iteration &iter,
cmodel_plsolver_type lsolver,
bool with_pseudo_potential) {
- gmm::default_newton_line_search ls;
+ default_newton_line_search ls;
standard_solve(md, iter, lsolver, ls, with_pseudo_potential);
}
void standard_solve(model &md, gmm::iteration &iter,
bool with_pseudo_potential) {
- gmm::default_newton_line_search ls;
+ getfem::default_newton_line_search ls;
if (md.is_complex())
standard_solve(md, iter, cdefault_linear_solver(md), ls,
with_pseudo_potential);
diff --git a/src/getfem_modeling.cc b/src/getfem_modeling.cc
old mode 100755
new mode 100644
index a403846..49765bb
--- a/src/getfem_modeling.cc
+++ b/src/getfem_modeling.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_modeling.h"
namespace getfem {
diff --git a/src/getfem_models.cc b/src/getfem_models.cc
index 3dbbaa1..2708039 100644
--- a/src/getfem_models.cc
+++ b/src/getfem_models.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <iomanip>
#include "gmm/gmm_range_basis.h"
@@ -25,6 +25,13 @@
#include "getfem/getfem_models.h"
#include "getfem/getfem_assembling.h"
#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_interpolation.h"
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H
+#include <muParser/muParser.h>
+#elif GETFEM_HAVE_MUPARSER_H
+#include <muParser.h>
+#endif
+
namespace getfem {
@@ -40,9 +47,9 @@ namespace getfem {
v_num_iter.resize(n_iter);
for (size_type i = 0; i < n_iter; ++i)
if (is_complex)
- complex_value[i].resize(s);
+ complex_value[i].resize(s);
else
- real_value[i].resize(s);
+ real_value[i].resize(s);
}
size_type model::var_description::add_temporary(gmm::uint64_type id_num) {
@@ -56,13 +63,13 @@ namespace getfem {
v_num_iter.resize(nit+1);
v_num_iter[nit] = 0;
if (is_complex) {
- size_type s = complex_value[0].size();
- complex_value.resize(n_iter + n_temp_iter);
- complex_value[nit].resize(s);
+ size_type s = complex_value[0].size();
+ complex_value.resize(n_iter + n_temp_iter);
+ complex_value[nit].resize(s);
} else {
- size_type s = real_value[0].size();
- real_value.resize(n_iter + n_temp_iter);
- real_value[nit].resize(s);
+ size_type s = real_value[0].size();
+ real_value.resize(n_iter + n_temp_iter);
+ real_value[nit].resize(s);
}
}
return nit;
@@ -88,10 +95,10 @@ namespace getfem {
else {
if (!isalpha(name[0])) valid = false;
for (size_type i = 1; i < name.size(); ++i)
- if (!(isalnum(name[i]) || name[i] == '_')) valid = false;
+ if (!(isalnum(name[i]) || name[i] == '_')) valid = false;
}
GMM_ASSERT1(!assert || valid,
- "Illegal variable name : \"" << name << "\"");
+ "Illegal variable name : \"" << name << "\"");
return valid;
}
@@ -100,7 +107,7 @@ namespace getfem {
bool valid = check_name_valitity(res_name, false);
VAR_SET::const_iterator it = variables.find(res_name);
GMM_ASSERT1(valid || it != variables.end(),
- "Illegal variable name : " << name);
+ "Illegal variable name : " << name);
for (size_type i = 2; it != variables.end(); ++i) {
std::stringstream m;
m << name << '_' << i;
@@ -116,177 +123,184 @@ namespace getfem {
std::map<std::string, bool > tobedone;
for (VAR_SET::iterator it = variables.begin(); it != variables.end();
- ++it) {
- if (it->second.is_fem_dofs && it->second.filter == VDESCRFILTER_INFSUP) {
- VAR_SET::iterator it2 = variables.find(it->second.filter_var);
- GMM_ASSERT1(it2 != variables.end(), "The primal variable of the "
- "multiplier does not exist");
- GMM_ASSERT1(it2->second.is_fem_dofs, "The primal variable of the "
- "multiplier is not a fem variable");
- multipliers[it->second.filter_var].push_back(it->first);
- if (it->second.v_num < it->second.mf->version_number() ||
- it->second.v_num < it2->second.mf->version_number())
- tobedone[it->second.filter_var] = true;
+ ++it) {
+ if (it->second.is_fem_dofs
+ && (it->second.filter == VDESCRFILTER_CTERM
+ || it->second.filter == VDESCRFILTER_INFSUP)) {
+ VAR_SET::iterator it2 = variables.find(it->second.filter_var);
+ GMM_ASSERT1(it2 != variables.end(), "The primal variable of the "
+ "multiplier does not exist");
+ GMM_ASSERT1(it2->second.is_fem_dofs, "The primal variable of the "
+ "multiplier is not a fem variable");
+ multipliers[it->second.filter_var].push_back(it->first);
+ if (it->second.v_num < it->second.mf->version_number() ||
+ it->second.v_num < it2->second.mf->version_number())
+ tobedone[it->second.filter_var] = true;
}
}
for (VAR_SET::iterator it = variables.begin(); it != variables.end();
- ++it) {
+ ++it) {
if (it->second.is_fem_dofs) {
- switch (it->second.filter) {
- case VDESCRFILTER_NO:
- if (it->second.v_num < it->second.mf->version_number()) {
- size_type s = it->second.mf->nb_dof();
- if (!it->second.is_variable) s *= it->second.qdim;
- it->second.set_size(s);
- it->second.v_num = act_counter();
- }
- break;
- case VDESCRFILTER_REGION:
- if (it->second.v_num < it->second.mf->version_number()) {
- dal::bit_vector dor
- = it->second.mf->dof_on_region(it->second.m_region);
- it->second.partial_mf->adapt(dor);
- it->second.set_size(it->second.partial_mf->nb_dof());
- it->second.v_num = act_counter();
- }
- break;
- default : break;
- }
+ switch (it->second.filter) {
+ case VDESCRFILTER_NO:
+ if (it->second.v_num < it->second.mf->version_number()) {
+ size_type s = it->second.mf->nb_dof();
+ if (!it->second.is_variable) s *= it->second.qdim;
+ it->second.set_size(s);
+ it->second.v_num = act_counter();
+ }
+ break;
+ case VDESCRFILTER_REGION:
+ if (it->second.v_num < it->second.mf->version_number()) {
+ dal::bit_vector dor
+ = it->second.mf->dof_on_region(it->second.m_region);
+ it->second.partial_mf->adapt(dor);
+ it->second.set_size(it->second.partial_mf->nb_dof());
+ it->second.v_num = act_counter();
+ }
+ break;
+ default : break;
+ }
}
}
for (std::map<std::string, bool >::iterator itbd = tobedone.begin();
- itbd != tobedone.end(); ++itbd) {
+ itbd != tobedone.end(); ++itbd) {
std::vector<std::string> &mults = multipliers[itbd->first];
VAR_SET::iterator it2 = variables.find(itbd->first);
gmm::col_matrix< gmm::rsvector<scalar_type> > MGLOB;
if (mults.size() > 1) {
- size_type s = 0;
- for (size_type k = 0; k < mults.size(); ++k) {
- VAR_SET::iterator it = variables.find(mults[k]);
- s += it->second.mf->nb_dof();
- }
- gmm::resize(MGLOB, it2->second.mf->nb_dof(), s);
+ size_type s = 0;
+ for (size_type k = 0; k < mults.size(); ++k) {
+ VAR_SET::iterator it = variables.find(mults[k]);
+ s += it->second.mf->nb_dof();
+ }
+ gmm::resize(MGLOB, it2->second.mf->nb_dof(), s);
}
size_type s = 0;
std::set<size_type> glob_columns;
for (size_type k = 0; k < mults.size(); ++k) {
- VAR_SET::iterator it = variables.find(mults[k]);
-
- // This step forces the recomputation of corresponding bricks.
- // A test to check if a modification is really necessary could
- // be done first ... (difficult to coordinate with other multipliers)
- dal::bit_vector alldof; alldof.add(0, it->second.mf->nb_dof());
- it->second.partial_mf->adapt(alldof);
- it->second.set_size(it->second.partial_mf->nb_dof());
-
- // Obtening the coupling matrix between the multipier and
- // the primal variable. A search is done on all the terms of the
- // model. The corresponding terms are added. If no term is available
- // a warning is printed and the variable is cancelled.
-
- gmm::col_matrix< gmm::rsvector<scalar_type> >
- MM(it2->second.mf->nb_dof(), it->second.mf->nb_dof());
- bool termadded = false;
-
- for (size_type ib = 0; ib < bricks.size(); ++ib) {
- const brick_description &brick = bricks[ib];
- bool bupd = false;
- bool cplx = is_complex() && brick.pbr->is_complex();
-
- for (size_type j = 0; j < brick.tlist.size(); ++j) {
-
- const term_description &term = brick.tlist[j];
+ VAR_SET::iterator it = variables.find(mults[k]);
+
+ // This step forces the recomputation of corresponding bricks.
+ // A test to check if a modification is really necessary could
+ // be done first ... (difficult to coordinate with other multipliers)
+ dal::bit_vector alldof; alldof.add(0, it->second.mf->nb_dof());
+ it->second.partial_mf->adapt(alldof);
+ it->second.set_size(it->second.partial_mf->nb_dof());
+
+ // Obtening the coupling matrix between the multipier and
+ // the primal variable. A search is done on all the terms of the
+ // model. Only the the corresponding linear terms are added.
+ // If no linear term is available, a mass matrix is used.
+
+ gmm::col_matrix< gmm::rsvector<scalar_type> >
+ MM(it2->second.mf->nb_dof(), it->second.mf->nb_dof());
+ bool termadded = false;
+
+ if (it->second.filter == VDESCRFILTER_CTERM) {
+
+ for (size_type ib = 0; ib < bricks.size(); ++ib) {
+ const brick_description &brick = bricks[ib];
+ bool bupd = false;
+ bool cplx = is_complex() && brick.pbr->is_complex();
- if (term.is_matrix_term && !mults[k].compare(term.var1) &&
- !it2->first.compare(term.var2)) {
- if (!bupd) {
- brick.terms_to_be_computed = true;
- update_brick(ib, BUILD_MATRIX);
- bupd = true;
- }
- if (cplx)
- gmm::add(gmm::transposed(gmm::real_part(brick.cmatlist[j])),
- MM);
- else
- gmm::add(gmm::transposed(brick.rmatlist[j]), MM);
- termadded = true;
-
- } else if (term.is_matrix_term && !mults[k].compare(term.var2) &&
- !it2->first.compare(term.var1)) {
- if (!bupd) {
- brick.terms_to_be_computed = true;
- update_brick(ib, BUILD_MATRIX);
- bupd = true;
+ for (size_type j = 0; j < brick.tlist.size(); ++j) {
+
+ const term_description &term = brick.tlist[j];
+
+ if (term.is_matrix_term && !mults[k].compare(term.var1) &&
+ !it2->first.compare(term.var2)) {
+ if (!bupd) {
+ brick.terms_to_be_computed = true;
+ update_brick(ib, BUILD_MATRIX);
+ bupd = true;
+ }
+ if (cplx)
+ gmm::add(gmm::transposed(gmm::real_part(brick.cmatlist[j])),
+ MM);
+ else
+ gmm::add(gmm::transposed(brick.rmatlist[j]), MM);
+ termadded = true;
+
+ } else if (term.is_matrix_term && !mults[k].compare(term.var2) &&
+ !it2->first.compare(term.var1)) {
+ if (!bupd) {
+ brick.terms_to_be_computed = true;
+ update_brick(ib, BUILD_MATRIX);
+ bupd = true;
+ }
+ if (cplx)
+ gmm::add(gmm::real_part(brick.cmatlist[j]), MM);
+ else
+ gmm::add(brick.rmatlist[j], MM);
+ termadded = true;
}
- if (cplx)
- gmm::add(gmm::real_part(brick.cmatlist[j]), MM);
- else
- gmm::add(brick.rmatlist[j], MM);
- termadded = true;
}
}
+
+ if (!termadded)
+ GMM_WARNING1("No term found to filter multiplier " << it->first
+ << ". Variable is cancelled");
+ } else if (it->second.filter == VDESCRFILTER_INFSUP) {
+ asm_mass_matrix(MM, *(it->second.mim), *(it2->second.mf),
+ *(it->second.mf), it->second.m_region);
}
-
- if (!termadded)
- GMM_WARNING1("No term present to filter the multiplier " << mults[k]
- << ". The multiplier is cancelled.");
-
- //
- // filtering
- //
- std::set<size_type> columns;
- gmm::range_basis(MM, columns);
- if (mults.size() > 1) {
- gmm::copy(MM, gmm::sub_matrix
- (MGLOB,gmm::sub_interval(0, it2->second.mf->nb_dof()),
- gmm::sub_interval(s, it->second.mf->nb_dof())));
- for (std::set<size_type>::iterator itt = columns.begin();
- itt != columns.end(); ++itt)
- glob_columns.insert(s + *itt);
- s += it->second.mf->nb_dof();
- } else {
- dal::bit_vector kept;
- for (std::set<size_type>::iterator itt = columns.begin();
- itt != columns.end(); ++itt)
- kept.add(*itt);
- it->second.partial_mf->adapt(kept);
- it->second.set_size(it->second.partial_mf->nb_dof());
- it->second.v_num = act_counter();
- }
+ //
+ // filtering
+ //
+ std::set<size_type> columns;
+ gmm::range_basis(MM, columns);
+ if (mults.size() > 1) {
+ gmm::copy(MM, gmm::sub_matrix
+ (MGLOB,gmm::sub_interval(0, it2->second.mf->nb_dof()),
+ gmm::sub_interval(s, it->second.mf->nb_dof())));
+ for (std::set<size_type>::iterator itt = columns.begin();
+ itt != columns.end(); ++itt)
+ glob_columns.insert(s + *itt);
+ s += it->second.mf->nb_dof();
+ } else {
+ dal::bit_vector kept;
+ for (std::set<size_type>::iterator itt = columns.begin();
+ itt != columns.end(); ++itt)
+ kept.add(*itt);
+ it->second.partial_mf->adapt(kept);
+ it->second.set_size(it->second.partial_mf->nb_dof());
+ it->second.v_num = act_counter();
+ }
}
if (mults.size() > 1) {
- range_basis(MGLOB, glob_columns, 1E-12, gmm::col_major(), true);
-
- s = 0;
- for (size_type k = 0; k < mults.size(); ++k) {
- VAR_SET::iterator it = variables.find(mults[k]);
- dal::bit_vector kept;
- size_type nbdof = it->second.mf->nb_dof();
- for (std::set<size_type>::iterator itt = glob_columns.begin();
- itt != glob_columns.end(); ++itt)
- if (*itt > s && *itt < s + nbdof) kept.add(*itt-s);
- it->second.partial_mf->adapt(kept);
- it->second.set_size(it->second.partial_mf->nb_dof());
- it->second.v_num = act_counter();
- s += it->second.mf->nb_dof();
- }
+ range_basis(MGLOB, glob_columns, 1E-12, gmm::col_major(), true);
+
+ s = 0;
+ for (size_type k = 0; k < mults.size(); ++k) {
+ VAR_SET::iterator it = variables.find(mults[k]);
+ dal::bit_vector kept;
+ size_type nbdof = it->second.mf->nb_dof();
+ for (std::set<size_type>::iterator itt = glob_columns.begin();
+ itt != glob_columns.end(); ++itt)
+ if (*itt >= s && *itt < s + nbdof) kept.add(*itt-s);
+ it->second.partial_mf->adapt(kept);
+ it->second.set_size(it->second.partial_mf->nb_dof());
+ it->second.v_num = act_counter();
+ s += it->second.mf->nb_dof();
+ }
}
}
size_type tot_size = 0;
for (VAR_SET::iterator it = variables.begin(); it != variables.end();
- ++it)
+ ++it)
if (it->second.is_variable) {
- it->second.I = gmm::sub_interval(tot_size, it->second.size());
- tot_size += it->second.size();
+ it->second.I = gmm::sub_interval(tot_size, it->second.size());
+ tot_size += it->second.size();
}
-
+
if (complex_version) {
gmm::resize(cTM, tot_size, tot_size);
gmm::resize(crhs, tot_size);
@@ -296,7 +310,7 @@ namespace getfem {
gmm::resize(rrhs, tot_size);
}
}
-
+
void model::listvar(std::ostream &ost) const {
if (variables.size() == 0)
@@ -304,28 +318,29 @@ namespace getfem {
else {
ost << "List of model variables and data:" << endl;
for (VAR_SET::const_iterator it = variables.begin();
- it != variables.end(); ++it) {
- if (it->second.is_variable) ost << "Variable ";
- else ost << "Data ";
- ost << std::setw(20) << std::left << it->first;
- if (it->second.n_iter == 1)
- ost << " 1 copy ";
- else
- ost << std::setw(2) << std::right << it->second.n_iter
- << " copies ";
- if (it->second.is_fem_dofs) ost << "fem dependant ";
- else ost << "constant size ";
- size_type d = sizeof(scalar_type);
- if (is_complex()) d *= 2;
- ost << std::setw(8) << std::right << it->second.size() * d
- << " bytes.";
+ it != variables.end(); ++it) {
+ if (it->second.is_variable) ost << "Variable ";
+ else ost << "Data ";
+ ost << std::setw(20) << std::left << it->first;
+ if (it->second.n_iter == 1)
+ ost << " 1 copy ";
+ else
+ ost << std::setw(2) << std::right << it->second.n_iter
+ << " copies ";
+ if (it->second.is_fem_dofs) ost << "fem dependant ";
+ else ost << "constant size ";
+ size_type si = it->second.size();
+ ost << std::setw(8) << std::right << si;
+ if (is_complex()) ost << " complex";
+ ost << " double" << ((si > 1) ? "s." : ".");
+ if (it->second.is_disabled) ost << "\t (disabled)";
ost << endl;
}
}
}
void model::add_fixed_size_variable(const std::string &name, size_type size,
- size_type niter) {
+ size_type niter) {
check_name_valitity(name);
variables[name] = var_description(true, is_complex(), false, niter);
act_size_to_be_done = true;
@@ -333,67 +348,90 @@ namespace getfem {
}
void model::resize_fixed_size_variable(const std::string &name,
- size_type size) {
+ size_type size) {
GMM_ASSERT1(!(variables[name].is_fem_dofs), "Cannot explicitely resize "
- " a fem variable or data");
+ " a fem variable or data");
variables[name].set_size(size);
}
-
- void resize_fixed_size_variable(const std::string &name, size_type size);
-
+ void resize_fixed_size_variable(const std::string &name, size_type size);
+
+
void model::add_fixed_size_data(const std::string &name, size_type size,
- size_type niter) {
+ size_type niter) {
check_name_valitity(name);
variables[name] = var_description(false, is_complex(), false, niter);
variables[name].set_size(size);
}
void model::add_fem_variable(const std::string &name, const mesh_fem &mf,
- size_type niter) {
+ size_type niter) {
check_name_valitity(name);
variables[name] = var_description(true, is_complex(), true, niter,
- VDESCRFILTER_NO, &mf);
+ VDESCRFILTER_NO, &mf);
variables[name].set_size(mf.nb_dof());
add_dependency(mf);
act_size_to_be_done = true;
leading_dim = std::max(leading_dim, mf.linked_mesh().dim());
}
-
+
+ void model::add_filtered_fem_variable(const std::string &name,
+ const mesh_fem &mf,
+ size_type region, size_type niter) {
+ check_name_valitity(name);
+ variables[name] = var_description(true, is_complex(), true, niter,
+ VDESCRFILTER_REGION, &mf, region);
+ variables[name].set_size(mf.nb_dof());
+ act_size_to_be_done = true;
+ add_dependency(mf);
+ }
+
void model::add_fem_data(const std::string &name, const mesh_fem &mf,
- dim_type qdim, size_type niter) {
+ dim_type qdim, size_type niter) {
check_name_valitity(name);
variables[name] = var_description(false, is_complex(), true, niter,
- VDESCRFILTER_NO, &mf, 0, qdim);
+ VDESCRFILTER_NO, &mf, 0, qdim);
variables[name].set_size(mf.nb_dof()*qdim);
- add_dependency(mf);
+ add_dependency(mf);
+ }
+
+ void model::add_multiplier(const std::string &name, const mesh_fem &mf,
+ const std::string &primal_name,
+ size_type niter) {
+ check_name_valitity(name);
+ variables[name] = var_description(true, is_complex(), true, niter,
+ VDESCRFILTER_CTERM, &mf, 0,
+ 1, primal_name);
+ variables[name].set_size(mf.nb_dof());
+ act_size_to_be_done = true;
+ add_dependency(mf);
}
void model::add_multiplier(const std::string &name, const mesh_fem &mf,
- const std::string &primal_name,
- size_type niter) {
+ const std::string &primal_name,const mesh_im &mim,
+ size_type region, size_type niter) {
check_name_valitity(name);
variables[name] = var_description(true, is_complex(), true, niter,
- VDESCRFILTER_INFSUP, &mf, 0,
- 1, primal_name);
+ VDESCRFILTER_INFSUP, &mf, region,
+ 1, primal_name, &mim);
variables[name].set_size(mf.nb_dof());
act_size_to_be_done = true;
add_dependency(mf);
}
size_type model::add_brick(pbrick pbr, const varnamelist &varnames,
- const varnamelist &datanames,
- const termlist &terms,
- const mimlist &mims, size_type region) {
+ const varnamelist &datanames,
+ const termlist &terms,
+ const mimlist &mims, size_type region) {
bricks.push_back(brick_description(pbr, varnames, datanames, terms,
- mims, region));
+ mims, region));
size_type ib = bricks.size() - 1;
active_bricks.add(ib);
for (size_type i = 0; i < bricks.back().mims.size(); ++i)
add_dependency(*(bricks.back().mims[i]));
GMM_ASSERT1(pbr->is_real() || is_complex(),
- "Impossible to add a complex brick to a real model");
+ "Impossible to add a complex brick to a real model");
if (is_complex() && pbr->is_complex()) {
bricks.back().cmatlist.resize(terms.size());
bricks.back().cveclist[0].resize(terms.size());
@@ -409,18 +447,49 @@ namespace getfem {
for (size_type i=0; i < varnames.size(); ++i)
GMM_ASSERT1(variables.find(varnames[i]) != variables.end(),
- "Undefined model variable " << varnames[i]);
+ "Undefined model variable " << varnames[i]);
for (size_type i=0; i < datanames.size(); ++i)
GMM_ASSERT1(variables.find(datanames[i]) != variables.end(),
- "Undefined model data or variable " << datanames[i]);
-
+ "Undefined model data or variable " << datanames[i]);
+
return ib;
}
+ void model::add_mim_to_brick(size_type ib, const mesh_im &mim) {
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ touch_brick(ib);
+ bricks[ib].mims.push_back(&mim);
+ add_dependency(mim);
+ }
+
+ void model::change_terms_of_brick(size_type ib, const termlist &terms) {
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ touch_brick(ib);
+ bricks[ib].tlist = terms;
+ if (is_complex() && bricks[ib].pbr->is_complex()) {
+ bricks.back().cmatlist.resize(terms.size());
+ bricks.back().cveclist[0].resize(terms.size());
+ bricks.back().cveclist_sym[0].resize(terms.size());
+ } else {
+ bricks.back().rmatlist.resize(terms.size());
+ bricks.back().rveclist[0].resize(terms.size());
+ bricks.back().rveclist_sym[0].resize(terms.size());
+ }
+ }
+
+ void model::change_variables_of_brick(size_type ib, const varnamelist &vl) {
+ GMM_ASSERT1(ib < bricks.size(), "Inexistent brick");
+ touch_brick(ib);
+ bricks[ib].vlist = vl;
+ for (size_type i=0; i < vl.size(); ++i)
+ GMM_ASSERT1(variables.find(vl[i]) != variables.end(),
+ "Undefined model variable " << vl[i]);
+ }
+
void model::add_time_dispatcher(size_type ibrick, pdispatcher pdispatch) {
-
- GMM_ASSERT1(ibrick < bricks.size(), "Unexistent brick");
+
+ GMM_ASSERT1(ibrick < bricks.size(), "Inexistent brick");
pbrick pbr = bricks[ibrick].pbr;
@@ -430,20 +499,20 @@ namespace getfem {
= std::max(size_type(1), pdispatch->nbrhs());
gmm::resize(bricks[ibrick].coeffs, nbrhs);
-
+
if (is_complex() && pbr->is_complex()) {
bricks[ibrick].cveclist.resize(nbrhs);
bricks[ibrick].cveclist_sym.resize(nbrhs);
for (size_type k = 1; k < nbrhs; ++k) {
- bricks[ibrick].cveclist[k] = bricks[ibrick].cveclist[0];
- bricks[ibrick].cveclist_sym[k] = bricks[ibrick].cveclist_sym[0];
+ bricks[ibrick].cveclist[k] = bricks[ibrick].cveclist[0];
+ bricks[ibrick].cveclist_sym[k] = bricks[ibrick].cveclist_sym[0];
}
} else {
bricks[ibrick].rveclist.resize(nbrhs);
bricks[ibrick].rveclist_sym.resize(nbrhs);
for (size_type k = 1; k < nbrhs; ++k) {
- bricks[ibrick].rveclist[k] = bricks[ibrick].rveclist[0];
- bricks[ibrick].rveclist_sym[k] = bricks[ibrick].rveclist_sym[0];
+ bricks[ibrick].rveclist[k] = bricks[ibrick].rveclist[0];
+ bricks[ibrick].rveclist_sym[k] = bricks[ibrick].rveclist_sym[0];
}
}
}
@@ -451,18 +520,18 @@ namespace getfem {
const std::string &model::varname_of_brick(size_type ind_brick,
- size_type ind_var) {
- GMM_ASSERT1(ind_brick < bricks.size(), "Unexistent brick");
+ size_type ind_var) {
+ GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
GMM_ASSERT1(ind_var < bricks[ind_brick].vlist.size(),
- "Inexistent brick variable");
+ "Inexistent brick variable");
return bricks[ind_brick].vlist[ind_var];
}
-
+
const std::string &model::dataname_of_brick(size_type ind_brick,
- size_type ind_data) {
- GMM_ASSERT1(ind_brick < bricks.size(), "Unexistent brick");
+ size_type ind_data) {
+ GMM_ASSERT1(ind_brick < bricks.size(), "Inexistent brick");
GMM_ASSERT1(ind_data < bricks[ind_brick].dlist.size(),
- "Inexistent brick data");
+ "Inexistent brick data");
return bricks[ind_brick].dlist[ind_data];
}
@@ -472,19 +541,19 @@ namespace getfem {
else {
ost << "List of model bricks:" << endl;
for (size_type i = 0; i < bricks.size(); ++i) {
- ost << "Brick " << std::setw(3) << std::right << i + base_id
- << " " << std::setw(20) << std::right
- << bricks[i].pbr->brick_name();
- if (!(active_bricks[i])) ost << " (desactivated)";
- if (bricks[i].pdispatch) ost << " (dispatched)";
- ost << endl << " concerned variables: " << bricks[i].vlist[0];
- for (size_type j = 1; j < bricks[i].vlist.size(); ++j)
- ost << ", " << bricks[i].vlist[j];
- ost << "." << endl;
- ost << " brick with " << bricks[i].tlist.size() << " term";
- if (bricks[i].tlist.size() > 1) ost << "s";
- ost << endl;
- // + lister les termes
+ ost << "Brick " << std::setw(3) << std::right << i + base_id
+ << " " << std::setw(20) << std::right
+ << bricks[i].pbr->brick_name();
+ if (!(active_bricks[i])) ost << " (desactivated)";
+ if (bricks[i].pdispatch) ost << " (dispatched)";
+ ost << endl << " concerned variables: " << bricks[i].vlist[0];
+ for (size_type j = 1; j < bricks[i].vlist.size(); ++j)
+ ost << ", " << bricks[i].vlist[j];
+ ost << "." << endl;
+ ost << " brick with " << bricks[i].tlist.size() << " term";
+ if (bricks[i].tlist.size() > 1) ost << "s";
+ ost << endl;
+ // + lister les termes
}
}
}
@@ -492,87 +561,87 @@ namespace getfem {
// before call to asm_real_tangent_terms or asm_complex_tangent_terms
// from the assembly procedure or a time dispatcher
void model::brick_init(size_type ib, build_version version,
- size_type rhs_ind) const {
+ size_type rhs_ind) const {
const brick_description &brick = bricks[ib];
bool cplx = is_complex() && brick.pbr->is_complex();
-
+
// Initialization of vector and matrices.
for (size_type j = 0; j < brick.tlist.size(); ++j) {
const term_description &term = brick.tlist[j];
size_type nbd1 = variables[term.var1].size();
size_type nbd2 = term.is_matrix_term ?
- variables[term.var2].size() : 0;
+ variables[term.var2].size() : 0;
if (term.is_matrix_term &&
- (brick.pbr->is_linear() || (version | BUILD_MATRIX))) {
- if (version | BUILD_ON_DATA_CHANGE) {
- if (cplx)
- gmm::resize(brick.cmatlist[j], nbd1, nbd2);
- else
- gmm::resize(brick.rmatlist[j], nbd1, nbd2);
- } else {
- if (cplx)
- brick.cmatlist[j] = model_complex_sparse_matrix(nbd1, nbd2);
- else
- brick.rmatlist[j] = model_real_sparse_matrix(nbd1, nbd2);
- }
+ (brick.pbr->is_linear() || (version | BUILD_MATRIX))) {
+ if (version | BUILD_ON_DATA_CHANGE) {
+ if (cplx)
+ gmm::resize(brick.cmatlist[j], nbd1, nbd2);
+ else
+ gmm::resize(brick.rmatlist[j], nbd1, nbd2);
+ } else {
+ if (cplx)
+ brick.cmatlist[j] = model_complex_sparse_matrix(nbd1, nbd2);
+ else
+ brick.rmatlist[j] = model_real_sparse_matrix(nbd1, nbd2);
+ }
}
if (brick.pbr->is_linear() || (version | BUILD_RHS)) {
- for (size_type k = 0; k < brick.nbrhs; ++k) {
- if (cplx) {
- if (k == rhs_ind) gmm::clear(brick.cveclist[k][j]);
- gmm::resize(brick.cveclist[k][j], nbd1);
- if (term.is_symmetric && term.var1.compare(term.var2)) {
- if (k == rhs_ind) gmm::clear(brick.cveclist_sym[k][j]);
- gmm::resize(brick.cveclist_sym[k][j], nbd2);
- }
- } else {
- if (k == rhs_ind) gmm::clear(brick.rveclist[k][j]);
- gmm::resize(brick.rveclist[k][j], nbd1);
- if (term.is_symmetric && term.var1.compare(term.var2)) {
- if (k == rhs_ind) gmm::clear(brick.rveclist_sym[k][j]);
- gmm::resize(brick.rveclist_sym[k][j], nbd2);
- }
- }
- }
+ for (size_type k = 0; k < brick.nbrhs; ++k) {
+ if (cplx) {
+ if (k == rhs_ind) gmm::clear(brick.cveclist[k][j]);
+ gmm::resize(brick.cveclist[k][j], nbd1);
+ if (term.is_symmetric && term.var1.compare(term.var2)) {
+ if (k == rhs_ind) gmm::clear(brick.cveclist_sym[k][j]);
+ gmm::resize(brick.cveclist_sym[k][j], nbd2);
+ }
+ } else {
+ if (k == rhs_ind) gmm::clear(brick.rveclist[k][j]);
+ gmm::resize(brick.rveclist[k][j], nbd1);
+ if (term.is_symmetric && term.var1.compare(term.var2)) {
+ if (k == rhs_ind) gmm::clear(brick.rveclist_sym[k][j]);
+ gmm::resize(brick.rveclist_sym[k][j], nbd2);
+ }
+ }
+ }
}
}
}
void model::brick_call(size_type ib, build_version version,
- size_type rhs_ind) const {
+ size_type rhs_ind) const {
const brick_description &brick = bricks[ib];
bool cplx = is_complex() && brick.pbr->is_complex();
-
+
brick_init(ib, version, rhs_ind);
if (cplx)
brick.pbr->asm_complex_tangent_terms(*this, ib, brick.vlist, brick.dlist,
- brick.mims,
- brick.cmatlist,
- brick.cveclist[rhs_ind],
- brick.cveclist_sym[rhs_ind],
- brick.region, version);
+ brick.mims,
+ brick.cmatlist,
+ brick.cveclist[rhs_ind],
+ brick.cveclist_sym[rhs_ind],
+ brick.region, version);
else
brick.pbr->asm_real_tangent_terms(*this, ib, brick.vlist, brick.dlist,
- brick.mims,
- brick.rmatlist,
- brick.rveclist[rhs_ind],
- brick.rveclist_sym[rhs_ind],
- brick.region, version);
+ brick.mims,
+ brick.rmatlist,
+ brick.rveclist[rhs_ind],
+ brick.rveclist_sym[rhs_ind],
+ brick.region, version);
}
void model::set_dispatch_coeff(void) {
for (dal::bv_visitor ib(active_bricks); !ib.finished(); ++ib) {
brick_description &brick = bricks[ib];
- if (brick.pdispatch)
- brick.pdispatch->set_dispatch_coeff(*this, ib);
+ if (brick.pdispatch)
+ brick.pdispatch->set_dispatch_coeff(*this, ib);
}
}
void model::first_iter(void) {
-
+
for (VAR_SET::iterator it = variables.begin(); it != variables.end(); ++it)
it->second.clear_temporaries();
@@ -582,19 +651,19 @@ namespace getfem {
brick_description &brick = bricks[ib];
bool cplx = is_complex() && brick.pbr->is_complex();
if (brick.pdispatch) {
- if (cplx)
- brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
- brick.dlist,
- brick.cmatlist, brick.cveclist,
- brick.cveclist_sym, true);
- else
- brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
- brick.rmatlist, brick.rveclist,
- brick.rveclist_sym, true);
+ if (cplx)
+ brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
+ brick.dlist,
+ brick.cmatlist, brick.cveclist,
+ brick.cveclist_sym, true);
+ else
+ brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
+ brick.rmatlist, brick.rveclist,
+ brick.rveclist_sym, true);
}
}
}
-
+
void model::next_iter(void) {
set_dispatch_coeff();
@@ -602,59 +671,59 @@ namespace getfem {
brick_description &brick = bricks[ib];
bool cplx = is_complex() && brick.pbr->is_complex();
if (brick.pdispatch) {
- if (cplx)
- brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
- brick.dlist,
- brick.cmatlist, brick.cveclist,
- brick.cveclist_sym, false);
- else
- brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
- brick.rmatlist, brick.rveclist,
- brick.rveclist_sym, false);
+ if (cplx)
+ brick.pdispatch->next_complex_iter(*this, ib, brick.vlist,
+ brick.dlist,
+ brick.cmatlist, brick.cveclist,
+ brick.cveclist_sym, false);
+ else
+ brick.pdispatch->next_real_iter(*this, ib, brick.vlist, brick.dlist,
+ brick.rmatlist, brick.rveclist,
+ brick.rveclist_sym, false);
}
}
-
+
for (VAR_SET::iterator it = variables.begin(); it != variables.end();
- ++it) {
+ ++it) {
for (size_type i = 1; i < it->second.n_iter; ++i) {
- if (is_complex())
- gmm::copy(it->second.complex_value[i-1],
- it->second.complex_value[i]);
- else
- gmm::copy(it->second.real_value[i-1],
- it->second.real_value[i]);
+ if (is_complex())
+ gmm::copy(it->second.complex_value[i-1],
+ it->second.complex_value[i]);
+ else
+ gmm::copy(it->second.real_value[i-1],
+ it->second.real_value[i]);
}
- if (it->second.n_iter > 1) it->second.v_num_data = act_counter();
+ if (it->second.n_iter > 1) it->second.v_num_data = act_counter();
}
}
bool model::is_var_newer_than_brick(const std::string &varname,
- size_type ib) const {
+ size_type ib) const {
const brick_description &brick = bricks[ib];
var_description &vd = variables[varname];
return (vd.v_num > brick.v_num || vd.v_num_data > brick.v_num);
}
bool model::is_var_mf_newer_than_brick(const std::string &varname,
- size_type ib) const {
+ size_type ib) const {
const brick_description &brick = bricks[ib];
var_description &vd = variables[varname];
return (vd.v_num > brick.v_num);
}
void model::add_temporaries(const varnamelist &vl,
- gmm::uint64_type id_num) const {
+ gmm::uint64_type id_num) const {
for (size_type i = 0; i < vl.size(); ++i) {
var_description &vd = variables[vl[i]];
- if (vd.n_iter > 1) {
- vd.add_temporary(id_num);
+ if (vd.n_iter > 1) {
+ vd.add_temporary(id_num);
}
}
}
bool model::temporary_uptodate(const std::string &varname,
- gmm::uint64_type id_num,
- size_type &ind) const {
+ gmm::uint64_type id_num,
+ size_type &ind) const {
var_description &vd = variables[varname];
ind = vd.n_iter;
for (; ind < vd.n_iter + vd.n_temp_iter ; ++ind) {
@@ -662,8 +731,8 @@ namespace getfem {
}
if (ind < vd.n_iter + vd.n_temp_iter) {
if (vd.v_num_iter[ind] <= vd.v_num_data) {
- vd.v_num_iter[ind] = act_counter();
- return false;
+ vd.v_num_iter[ind] = act_counter();
+ return false;
}
return true;
}
@@ -672,11 +741,11 @@ namespace getfem {
}
void model::set_default_iter_of_variable(const std::string &varname,
- size_type ind) const {
+ size_type ind) const {
if (ind != size_type(-1)) {
var_description &vd = variables[varname];
GMM_ASSERT1(ind < vd.n_iter + vd.n_temp_iter,
- "Unexistent iteration " << ind);
+ "Inexistent iteration " << ind);
vd.default_iter = ind;
}
}
@@ -689,7 +758,7 @@ namespace getfem {
const model_real_sparse_matrix &model::linear_real_matrix_term
(size_type ib, size_type iterm) {
GMM_ASSERT1(bricks[ib].tlist[iterm].is_matrix_term,
- "Not a matrix term !");
+ "Not a matrix term !");
GMM_ASSERT1(bricks[ib].pbr->is_linear(), "Nonlinear term !");
return bricks[ib].rmatlist[iterm];
}
@@ -697,7 +766,7 @@ namespace getfem {
const model_complex_sparse_matrix &model::linear_complex_matrix_term
(size_type ib, size_type iterm) {
GMM_ASSERT1(bricks[ib].tlist[iterm].is_matrix_term,
- "Not a matrix term !");
+ "Not a matrix term !");
GMM_ASSERT1(bricks[ib].pbr->is_linear(), "Nonlinear term !");
return bricks[ib].cmatlist[iterm];
}
@@ -707,92 +776,109 @@ namespace getfem {
const brick_description &brick = bricks[ib];
bool cplx = is_complex() && brick.pbr->is_complex();
bool tobecomputed = brick.terms_to_be_computed
+ || brick.pbr->is_to_be_computed_each_time()
|| !(brick.pbr->is_linear());
-
- // check variable list to test if a mesh_fem as changed.
+
+ // check variable list to test if a mesh_fem as changed.
for (size_type i = 0; i < brick.vlist.size() && !tobecomputed; ++i) {
var_description &vd = variables[brick.vlist[i]];
if (vd.v_num > brick.v_num) tobecomputed = true;
}
-
- // check data list to test if a vector value of a data has changed.
+
+ // check data list to test if a vector value of a data has changed.
for (size_type i = 0; i < brick.dlist.size() && !tobecomputed; ++i) {
var_description &vd = variables[brick.dlist[i]];
if (vd.v_num > brick.v_num || vd.v_num_data > brick.v_num) {
- tobecomputed = true;
- version = build_version(version | BUILD_ON_DATA_CHANGE);
+ tobecomputed = true;
+ version = build_version(version | BUILD_ON_DATA_CHANGE);
}
}
if (tobecomputed) {
-
+
if (!(brick.pdispatch))
- { brick_call(ib, version, 0); }
+ { brick_call(ib, version, 0); }
else {
- if (cplx)
- brick.pdispatch->asm_complex_tangent_terms
- (*this, ib, brick.cmatlist, brick.cveclist, brick.cveclist_sym,
- version);
- else
- brick.pdispatch->asm_real_tangent_terms
- (*this, ib, brick.rmatlist, brick.rveclist, brick.rveclist_sym,
- version);
+ if (cplx)
+ brick.pdispatch->asm_complex_tangent_terms
+ (*this, ib, brick.cmatlist, brick.cveclist, brick.cveclist_sym,
+ version);
+ else
+ brick.pdispatch->asm_real_tangent_terms
+ (*this, ib, brick.rmatlist, brick.rveclist, brick.rveclist_sym,
+ version);
}
brick.v_num = act_counter();
}
-
+
if (brick.pbr->is_linear()) brick.terms_to_be_computed = false;
}
-
-
+
+
void model::linear_brick_add_to_rhs(size_type ib, size_type ind_data,
- size_type n_iter) const {
+ size_type n_iter) const {
const brick_description &brick = bricks[ib];
if (brick.pbr->is_linear()) {
bool cplx = is_complex() && brick.pbr->is_complex();
-
+
for (size_type j = 0; j < brick.tlist.size(); ++j) {
- const term_description &term = brick.tlist[j];
+ const term_description &term = brick.tlist[j];
+
+ size_type n_iter_1 = n_iter, n_iter_2 = n_iter;
+ if (n_iter == size_type(-1)) {
+ n_iter_1 = variables[term.var1].default_iter;
+ if (term.is_matrix_term)
+ n_iter_2 = variables[term.var2].default_iter;
+ }
+
+ if (term.is_matrix_term) {
+ if (cplx)
+ gmm::mult_add
+ (brick.cmatlist[j],
+ gmm::scaled(variables[term.var2].complex_value[n_iter_2],
+ std::complex<scalar_type>(-1)),
+ brick.cveclist[ind_data][j]);
+ else
+ gmm::mult_add
+ (brick.rmatlist[j],
+ gmm::scaled(variables[term.var2].real_value[n_iter_2],
+ scalar_type(-1)), brick.rveclist[ind_data][j]);
+
+ if (term.is_symmetric && term.var1.compare(term.var2)) {
+ if (cplx)
+ gmm::mult_add
+ (gmm::conjugated(brick.cmatlist[j]),
+ gmm::scaled(variables[term.var1].complex_value[n_iter_1],
+ std::complex<scalar_type>(-1)),
+ brick.cveclist_sym[ind_data][j]);
+ else
+ gmm::mult_add
+ (gmm::transposed(brick.rmatlist[j]),
+ gmm::scaled(variables[term.var1].real_value[n_iter_1],
+ scalar_type(-1)),
+ brick.rveclist_sym[ind_data][j]);
+ }
+ }
+ }
+ }
+ }
- size_type n_iter_1 = n_iter, n_iter_2 = n_iter;
- if (n_iter == size_type(-1)) {
- n_iter_1 = variables[term.var1].default_iter;
- if (term.is_matrix_term)
- n_iter_2 = variables[term.var2].default_iter;
- }
-
- if (term.is_matrix_term) {
- if (cplx)
- gmm::mult_add
- (brick.cmatlist[j],
- gmm::scaled(variables[term.var2].complex_value[n_iter_2],
- std::complex<scalar_type>(-1)),
- brick.cveclist[ind_data][j]);
- else
- gmm::mult_add
- (brick.rmatlist[j],
- gmm::scaled(variables[term.var2].real_value[n_iter_2],
- scalar_type(-1)), brick.rveclist[ind_data][j]);
-
- if (term.is_symmetric && term.var1.compare(term.var2)) {
- if (cplx)
- gmm::mult_add
- (gmm::conjugated(brick.cmatlist[j]),
- gmm::scaled(variables[term.var1].complex_value[n_iter_1],
- std::complex<scalar_type>(-1)),
- brick.cveclist_sym[ind_data][j]);
- else
- gmm::mult_add
- (gmm::transposed(brick.rmatlist[j]),
- gmm::scaled(variables[term.var1].real_value[n_iter_1],
- scalar_type(-1)),
- brick.rveclist_sym[ind_data][j]);
- }
+
+ bool model::build_reduced_index(std::vector<size_type> &ind) {
+ ind.resize(0);
+ bool reduced = false;
+ for (VAR_SET::iterator it = variables.begin(); it != variables.end(); ++it)
+ if (it->second.is_variable) {
+ if (it->second.is_disabled)
+ reduced = true;
+ else {
+ for (size_type i=it->second.I.first(); i < it->second.I.last(); ++i)
+ ind.push_back(i);
}
}
- }
+ return reduced;
}
@@ -813,185 +899,192 @@ namespace getfem {
for (dal::bv_visitor ib(active_bricks); !ib.finished(); ++ib) {
brick_description &brick = bricks[ib];
+
+ // Disables the brick if all its variables are disabled.
+ bool auto_disabled_brick = true;
+ for (size_type j = 0; j < brick.vlist.size(); ++j) {
+ if (!(variables[brick.vlist[j]].is_disabled))
+ auto_disabled_brick = false;
+ }
+ if (auto_disabled_brick) continue;
+
update_brick(ib, version);
bool cplx = is_complex() && brick.pbr->is_complex();
-
+
scalar_type coeff0 = scalar_type(1);
if (brick.pdispatch) coeff0 = brick.matrix_coeff;
if (version & BUILD_PSEUDO_POTENTIAL) {
- scalar_type pseudop = scalar_type(0);
- if (cplx)
- pseudop = brick.pbr->asm_complex_pseudo_potential
- (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.cmatlist,
- brick.cveclist[0], brick.cveclist_sym[0], brick.region);
- else
- pseudop = brick.pbr->asm_real_pseudo_potential
- (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
- brick.rveclist[0], brick.rveclist_sym[0], brick.region);
-
- pseudo_potential_ += pseudop * coeff0;
+ scalar_type pseudop = scalar_type(0);
+ if (cplx)
+ pseudop = brick.pbr->asm_complex_pseudo_potential
+ (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.cmatlist,
+ brick.cveclist[0], brick.cveclist_sym[0], brick.region);
+ else
+ pseudop = brick.pbr->asm_real_pseudo_potential
+ (*this, ib, brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
+ brick.rveclist[0], brick.rveclist_sym[0], brick.region);
- GMM_ASSERT1(!(brick.pdispatch),
- "Pseudo potential not supported by brick dispatcher, sorry");
+ pseudo_potential_ += pseudop * coeff0;
+
+ GMM_ASSERT1(!(brick.pdispatch),
+ "Pseudo potential not supported by brick dispatcher, sorry");
}
// Assembly of terms
-
- for (size_type j = 0; j < brick.tlist.size(); ++j) {
- term_description &term = brick.tlist[j];
- gmm::sub_interval I1 = variables[term.var1].I;
- gmm::sub_interval I2(0,0);
- if (term.is_matrix_term) I2 = variables[term.var2].I;
-
-
-
- if (cplx) {
- if (term.is_matrix_term && (version & BUILD_MATRIX)) {
- gmm::add(gmm::scaled(brick.cmatlist[j], coeff0),
- gmm::sub_matrix(cTM, I1, I2));
- if (term.is_symmetric && I1.first() != I2.first()) {
- gmm::add(gmm::scaled(gmm::transposed(brick.cmatlist[j]), coeff0),
- gmm::sub_matrix(cTM, I2, I1));
- }
- }
- if (version & BUILD_RHS) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.cveclist[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(crhs, I1));
- }
- else
- gmm::add(brick.cveclist[0][j], gmm::sub_vector(crhs, I1));
- if (term.is_matrix_term && brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(brick.cmatlist[j],
- gmm::scaled(variables[term.var2].complex_value[0],
- std::complex<scalar_type>(-coeff0)),
- gmm::sub_vector(crhs, I1));
- }
- if (term.is_symmetric && I1.first() != I2.first()) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.cveclist_sym[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(crhs, I2));
- }
- else
- gmm::add(brick.cveclist_sym[0][j], gmm::sub_vector(crhs, I2));
- if (brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(gmm::conjugated(brick.cmatlist[j]),
- gmm::scaled(variables[term.var1].complex_value[0],
- std::complex<scalar_type>(-coeff0)),
- gmm::sub_vector(crhs, I2));
- }
- }
- }
- } else if (is_complex()) {
- if (term.is_matrix_term && (version & BUILD_MATRIX)) {
- gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
- gmm::sub_matrix(cTM, I1, I2));
- if (term.is_symmetric && I1.first() != I2.first()) {
- gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
- gmm::sub_matrix(cTM, I2, I1));
- }
- }
- if (version & BUILD_RHS) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.rveclist[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(crhs, I1));
- }
- else
- gmm::add(brick.rveclist[0][j], gmm::sub_vector(crhs, I1));
- if (term.is_matrix_term && brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(brick.rmatlist[j],
- gmm::scaled(variables[term.var2].complex_value[0],
- std::complex<scalar_type>(-coeff0)),
- gmm::sub_vector(crhs, I1));
- }
- if (term.is_symmetric && I1.first() != I2.first()) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(crhs, I2));
- }
- else
- gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(crhs, I2));
- if (brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
- gmm::scaled(variables[term.var1].complex_value[0],
- std::complex<scalar_type>(-coeff0)),
- gmm::sub_vector(crhs, I2));
- }
- }
- }
- } else {
- if (term.is_matrix_term && (version & BUILD_MATRIX)) {
- gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
- gmm::sub_matrix(rTM, I1, I2));
- if (term.is_symmetric && I1.first() != I2.first()) {
- gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
- gmm::sub_matrix(rTM, I2, I1));
- }
- }
- if (version & BUILD_RHS) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.rveclist[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(rrhs, I1));
- }
- else
- gmm::add(brick.rveclist[0][j], gmm::sub_vector(rrhs, I1));
- if (term.is_matrix_term && brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(brick.rmatlist[j],
- gmm::scaled(variables[term.var2].real_value[0],
- -coeff0),
- gmm::sub_vector(rrhs, I1));
- }
- if (term.is_symmetric && I1.first() != I2.first()) {
- if (brick.pdispatch) {
- for (size_type k = 0; k < brick.nbrhs; ++k)
- gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
- brick.coeffs[k]),
- gmm::sub_vector(rrhs, I2));
- }
- else
- gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(rrhs, I2));
- if (brick.pbr->is_linear()
- && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
- gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
- gmm::scaled(variables[term.var1].real_value[0],
- -coeff0),
- gmm::sub_vector(rrhs, I2));
- }
- }
- }
- }
+ for (size_type j = 0; j < brick.tlist.size(); ++j) {
+ term_description &term = brick.tlist[j];
+ gmm::sub_interval I1 = variables[term.var1].I;
+ gmm::sub_interval I2(0,0);
+ if (term.is_matrix_term) I2 = variables[term.var2].I;
+
+ if (cplx) {
+ if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+ gmm::add(gmm::scaled(brick.cmatlist[j], coeff0),
+ gmm::sub_matrix(cTM, I1, I2));
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ gmm::add(gmm::scaled(gmm::transposed(brick.cmatlist[j]), coeff0),
+ gmm::sub_matrix(cTM, I2, I1));
+ }
+ }
+ if (version & BUILD_RHS) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.cveclist[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(crhs, I1));
+ }
+ else
+ gmm::add(brick.cveclist[0][j], gmm::sub_vector(crhs, I1));
+ if (term.is_matrix_term && brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(brick.cmatlist[j],
+ gmm::scaled(variables[term.var2].complex_value[0],
+ std::complex<scalar_type>(-coeff0)),
+ gmm::sub_vector(crhs, I1));
+ }
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.cveclist_sym[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(crhs, I2));
+ }
+ else
+ gmm::add(brick.cveclist_sym[0][j], gmm::sub_vector(crhs, I2));
+ if (brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(gmm::conjugated(brick.cmatlist[j]),
+ gmm::scaled(variables[term.var1].complex_value[0],
+ std::complex<scalar_type>(-coeff0)),
+ gmm::sub_vector(crhs, I2));
+ }
+ }
+ }
+ } else if (is_complex()) {
+ if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+ gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
+ gmm::sub_matrix(cTM, I1, I2));
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
+ gmm::sub_matrix(cTM, I2, I1));
+ }
+ }
+ if (version & BUILD_RHS) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.rveclist[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(crhs, I1));
+ }
+ else
+ gmm::add(brick.rveclist[0][j], gmm::sub_vector(crhs, I1));
+ if (term.is_matrix_term && brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(brick.rmatlist[j],
+ gmm::scaled(variables[term.var2].complex_value[0],
+ std::complex<scalar_type>(-coeff0)),
+ gmm::sub_vector(crhs, I1));
+ }
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(crhs, I2));
+ }
+ else
+ gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(crhs, I2));
+ if (brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
+ gmm::scaled(variables[term.var1].complex_value[0],
+ std::complex<scalar_type>(-coeff0)),
+ gmm::sub_vector(crhs, I2));
+ }
+ }
+ }
+ } else {
+ if (term.is_matrix_term && (version & BUILD_MATRIX)) {
+ gmm::add(gmm::scaled(brick.rmatlist[j], coeff0),
+ gmm::sub_matrix(rTM, I1, I2));
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ gmm::add(gmm::scaled(gmm::transposed(brick.rmatlist[j]), coeff0),
+ gmm::sub_matrix(rTM, I2, I1));
+ }
+ }
+ if (version & BUILD_RHS) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.rveclist[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(rrhs, I1));
+ }
+ else
+ gmm::add(brick.rveclist[0][j], gmm::sub_vector(rrhs, I1));
+ if (term.is_matrix_term && brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(brick.rmatlist[j],
+ gmm::scaled(variables[term.var2].real_value[0],
+ -coeff0),
+ gmm::sub_vector(rrhs, I1));
+ }
+ if (term.is_symmetric && I1.first() != I2.first()) {
+ if (brick.pdispatch) {
+ for (size_type k = 0; k < brick.nbrhs; ++k)
+ gmm::add(gmm::scaled(brick.rveclist_sym[k][j],
+ brick.coeffs[k]),
+ gmm::sub_vector(rrhs, I2));
+ }
+ else
+ gmm::add(brick.rveclist_sym[0][j], gmm::sub_vector(rrhs, I2));
+ if (brick.pbr->is_linear()
+ && (!is_linear() || (version & BUILD_WITH_COMPLETE_RHS))) {
+ gmm::mult_add(gmm::transposed(brick.rmatlist[j]),
+ gmm::scaled(variables[term.var1].real_value[0],
+ -coeff0),
+ gmm::sub_vector(rrhs, I2));
+ }
+ }
+ }
+ }
}
if (brick.pbr->is_linear())
- brick.terms_to_be_computed = false;
- else
- if (cplx) {
- brick.cmatlist = complex_matlist(brick.tlist.size());
- brick.cveclist[0] = complex_veclist(brick.tlist.size());
- } else {
- brick.rmatlist = real_matlist(brick.tlist.size());
- brick.rveclist[0] = real_veclist(brick.tlist.size());
- }
+ brick.terms_to_be_computed = false;
+// Commented to allow to get this information. Should be optional ?
+// else
+// if (cplx) {
+// brick.cmatlist = complex_matlist(brick.tlist.size());
+// brick.cveclist[0] = complex_veclist(brick.tlist.size());
+// } else {
+// brick.rmatlist = real_matlist(brick.tlist.size());
+// brick.rveclist[0] = real_veclist(brick.tlist.size());
+// }
}
}
@@ -1001,13 +1094,13 @@ namespace getfem {
GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
return it->second.associated_mf();
}
-
+
const mesh_fem *model::pmesh_fem_of_variable(const std::string &name) const {
VAR_SET::const_iterator it = variables.find(name);
GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
return it->second.passociated_mf();
}
-
+
const model_real_plain_vector &
model::real_variable(const std::string &name, size_type niter) const {
GMM_ASSERT1(!complex_version, "This model is a complex one");
@@ -1016,11 +1109,11 @@ namespace getfem {
GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
if (niter == size_type(-1)) niter = it->second.default_iter;
GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
- "Unvalid iteration number "
- << niter << " for " << name);
+ "Unvalid iteration number "
+ << niter << " for " << name);
return it->second.real_value[niter];
}
-
+
const model_complex_plain_vector &
model::complex_variable(const std::string &name, size_type niter) const {
GMM_ASSERT1(complex_version, "This model is a real one");
@@ -1029,9 +1122,9 @@ namespace getfem {
GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
if (niter == size_type(-1)) niter = it->second.default_iter;
GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
- "Unvalid iteration number "
- << niter << " for " << name);
- return it->second.complex_value[niter];
+ "Unvalid iteration number "
+ << niter << " for " << name);
+ return it->second.complex_value[niter];
}
model_real_plain_vector &
@@ -1043,23 +1136,34 @@ namespace getfem {
it->second.v_num_data = act_counter();
if (niter == size_type(-1)) niter = it->second.default_iter;
GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
- "Unvalid iteration number "
- << niter << " for " << name);
+ "Unvalid iteration number "
+ << niter << " for " << name);
return it->second.real_value[niter];
}
-
+
model_complex_plain_vector &
model::set_complex_variable(const std::string &name, size_type niter) const {
GMM_ASSERT1(complex_version, "This model is a real one");
context_check(); if (act_size_to_be_done) actualize_sizes();
VAR_SET::iterator it = variables.find(name);
GMM_ASSERT1(it!=variables.end(), "Undefined variable " << name);
- it->second.v_num_data = act_counter();
+ it->second.v_num_data = act_counter();
if (niter == size_type(-1)) niter = it->second.default_iter;
GMM_ASSERT1(it->second.n_iter + it->second.n_temp_iter > niter,
- "Unvalid iteration number "
- << niter << " for " << name);
- return it->second.complex_value[niter];
+ "Unvalid iteration number "
+ << niter << " for " << name);
+ return it->second.complex_value[niter];
+ }
+ void model::check_brick_stiffness_rhs(size_type ind_brick) const
+ {
+
+
+ const brick_description &brick = bricks[ind_brick];
+ update_brick(ind_brick, model::BUILD_ALL);
+
+ brick.pbr->check_stiffness_matrix_and_rhs(*this, ind_brick,
+ brick.vlist, brick.dlist, brick.mims, brick.rmatlist,
+ brick.rveclist[0], brick.rveclist_sym[0], brick.region);
}
@@ -1070,6 +1174,86 @@ namespace getfem {
//
//
// ----------------------------------------------------------------------
+ void virtual_brick::check_stiffness_matrix_and_rhs(const model &md, size_type s,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &rvc1,
+ model::real_veclist &rvc2,
+ size_type rg,
+ const scalar_type TINY) const
+ {
+ asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_MATRIX);
+ model_real_sparse_matrix SM(matl[0]);
+ gmm::fill(rvc1[0], 0.0);
+ asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_RHS);
+ model_real_plain_vector RHS0(rvc1[0]);
+
+ //finite difference stiffness
+ model_real_sparse_matrix fdSM(matl[0].nrows(),matl[0].ncols());
+
+ for (size_type i=0;i<rvc1[0].size();i++){
+ model_real_plain_vector U(md.real_variable(vl[0]));
+ U[i]+=TINY;
+ gmm::copy(U, md.set_real_variable(vl[0]));
+ gmm::fill(rvc1[0], 0.0);
+ asm_real_tangent_terms(md, s, vl, dl, mims, matl, rvc1, rvc2, rg, model::BUILD_RHS);
+ model_real_plain_vector RHS1(rvc1[0]);
+ for (size_type j=0;j<rvc1[0].size();j++){
+ fdSM(i,j)=(RHS0[j]-RHS1[j])/TINY;
+ }
+ U[i]-=TINY;
+ gmm::copy(U, md.set_real_variable(vl[0]));
+ }
+ model_real_sparse_matrix diffSM(matl[0].nrows(),matl[0].ncols());
+ gmm::add(matl[0],gmm::scaled(fdSM,-1.0),diffSM);
+ scalar_type norm_error_euc = gmm::mat_euclidean_norm(diffSM)/gmm::mat_euclidean_norm(matl[0])*100;
+ scalar_type norm_error_1 = gmm::mat_norm1(diffSM)/gmm::mat_norm1(matl[0])*100;
+ scalar_type norm_error_max = gmm::mat_maxnorm(diffSM)/gmm::mat_maxnorm(matl[0])*100;
+
+ model_real_sparse_matrix diffSMtransposed(matl[0].nrows(),matl[0].ncols());
+ gmm::add(gmm::transposed(fdSM),gmm::scaled(fdSM,-1.0),diffSMtransposed);
+ scalar_type nsym_norm_error_euc = gmm::mat_euclidean_norm(diffSMtransposed)/gmm::mat_euclidean_norm(fdSM)*100;
+ scalar_type nsym_norm_error_1 = gmm::mat_norm1(diffSMtransposed)/gmm::mat_norm1(fdSM)*100;
+ scalar_type nsym_norm_error_max = gmm::mat_maxnorm(diffSMtransposed)/gmm::mat_maxnorm(fdSM)*100;
+
+ //print matrix if the size is small
+ if(rvc1[0].size()<8){
+ std::cout << "RHS Stiffness Matrix: \n";
+ std::cout << "------------------------\n";
+ for(size_type i=0; i < rvc1[0].size(); ++i){
+ std::cout << "[";
+ for(size_type j=0; j < rvc1[0].size(); ++j){
+ std::cout << fdSM(i,j) << " ";
+ }
+ std::cout << "]\n";
+ }
+ std::cout << "Analytical Stiffness Matrix: \n";
+ std::cout << "------------------------\n";
+ for(size_type i=0; i < rvc1[0].size(); ++i){
+ std::cout << "[";
+ for(size_type j=0; j < rvc1[0].size(); ++j){
+ std::cout << matl[0](i,j) << " ";
+ }
+ std::cout << "]\n";
+ }
+ std::cout << "Vector U: \n";
+ std::cout << "------------------------\n";
+ for(size_type i=0; i < rvc1[0].size(); ++i){
+ std::cout << "[";
+ std::cout << md.real_variable(vl[0])[i] << " ";
+ std::cout << "]\n";
+ }
+ }
+
+ std::cout<<"\n\nfinite diff test error_norm_eucl: "<<norm_error_euc <<"%"<<std::endl;
+ std::cout<<"finite diff test error_norm1: "<<norm_error_1 <<"%"<<std::endl;
+ std::cout<<"finite diff test error_max_norm: "<<norm_error_max <<"%"<<std::endl;
+ std::cout<<"\n\nNonsymmetrical test error_norm_eucl: "<<nsym_norm_error_euc <<"%"<<std::endl;
+ std::cout<<"Nonsymmetrical test error_norm1: "<<nsym_norm_error_1 <<"%"<<std::endl;
+ std::cout<<"Nonsymmetrical test error_max_norm: "<<nsym_norm_error_max <<"%"<<std::endl;
+ }
// ----------------------------------------------------------------------
@@ -1081,20 +1265,20 @@ namespace getfem {
struct generic_elliptic_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Generic elliptic brick has one and only one term");
+ "Generic elliptic brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Generic elliptic brick need one and only one mesh_im");
+ "Generic elliptic brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
- "Wrong number of variables for generic elliptic brick");
+ "Wrong number of variables for generic elliptic brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
@@ -1105,100 +1289,100 @@ namespace getfem {
mesh_region rg(region);
m.intersect_with_mpi_region(rg);
if (dl.size() > 0) {
- A = &(md.real_variable(dl[0]));
- mf_a = md.pmesh_fem_of_variable(dl[0]);
- s = gmm::vect_size(*A);
- if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+ A = &(md.real_variable(dl[0]));
+ mf_a = md.pmesh_fem_of_variable(dl[0]);
+ s = gmm::vect_size(*A);
+ if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
}
gmm::clear(matl[0]);
GMM_TRACE2("Generic elliptic term assembly");
if (s == 1) {
- if (mf_a) {
- if (Q > 1)
- asm_stiffness_matrix_for_laplacian_componentwise
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_laplacian
- (matl[0], mim, mf_u, *mf_a, *A, rg);
-
- } else {
- if (Q > 1)
- asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
- (matl[0], mim, mf_u, rg);
- else
- asm_stiffness_matrix_for_homogeneous_laplacian
- (matl[0], mim, mf_u, rg);
- if (A) gmm::scale(matl[0], (*A)[0]);
- }
+ if (mf_a) {
+ if (Q > 1)
+ asm_stiffness_matrix_for_laplacian_componentwise
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_laplacian
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+
+ } else {
+ if (Q > 1)
+ asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
+ (matl[0], mim, mf_u, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_laplacian
+ (matl[0], mim, mf_u, rg);
+ if (A) gmm::scale(matl[0], (*A)[0]);
+ }
} else if (s == N*N) {
- if (mf_a) {
- if (Q > 1)
- asm_stiffness_matrix_for_scalar_elliptic_componentwise
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_scalar_elliptic
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- } else {
- if (Q > 1)
- asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
- (matl[0], mim, mf_u, *A, rg);
- else
- asm_stiffness_matrix_for_homogeneous_scalar_elliptic
- (matl[0], mim, mf_u, *A, rg);
- }
+ if (mf_a) {
+ if (Q > 1)
+ asm_stiffness_matrix_for_scalar_elliptic_componentwise
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_scalar_elliptic
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ } else {
+ if (Q > 1)
+ asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
+ (matl[0], mim, mf_u, *A, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_scalar_elliptic
+ (matl[0], mim, mf_u, *A, rg);
+ }
} else if (s == N*N*Q*Q) {
- if (mf_a)
- asm_stiffness_matrix_for_vector_elliptic
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_homogeneous_vector_elliptic
- (matl[0], mim, mf_u, *A, rg);
+ if (mf_a)
+ asm_stiffness_matrix_for_vector_elliptic
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_vector_elliptic
+ (matl[0], mim, mf_u, *A, rg);
} else
- GMM_ASSERT1(false,
- "Bad format generic elliptic brick coefficient");
+ GMM_ASSERT1(false,
+ "Bad format generic elliptic brick coefficient");
}
virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type) const {
const model_real_plain_vector &U = md.real_variable(vl[0]);
return gmm::vect_sp(matl[0], U, U) / scalar_type(2);
}
virtual scalar_type asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type) const {
const model_complex_plain_vector &U = md.complex_variable(vl[0]);
return gmm::abs(gmm::vect_hp(matl[0], U, U)) / scalar_type(2);
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Generic elliptic brick has one and only one term");
+ "Generic elliptic brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Generic elliptic brick need one and only one mesh_im");
+ "Generic elliptic brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
- "Wrong number of variables for generic elliptic brick");
+ "Wrong number of variables for generic elliptic brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
@@ -1208,92 +1392,92 @@ namespace getfem {
const mesh_fem *mf_a = 0;
mesh_region rg(region);
m.intersect_with_mpi_region(rg);
-
+
if (dl.size() > 0) {
- A = &(md.real_variable(dl[0]));
- mf_a = md.pmesh_fem_of_variable(dl[0]);
- s = gmm::vect_size(*A);
- if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+ A = &(md.real_variable(dl[0]));
+ mf_a = md.pmesh_fem_of_variable(dl[0]);
+ s = gmm::vect_size(*A);
+ if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
}
gmm::clear(matl[0]);
GMM_TRACE2("Generic elliptic term assembly");
if (s == 1) {
- if (mf_a) {
- if (Q > 1)
- asm_stiffness_matrix_for_laplacian_componentwise
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_laplacian
- (matl[0], mim, mf_u, *mf_a, *A, rg);
-
- } else {
- if (Q > 1)
- asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
- (gmm::real_part(matl[0]), mim, mf_u, rg);
- else
- asm_stiffness_matrix_for_homogeneous_laplacian
- (gmm::real_part(matl[0]), mim, mf_u, rg);
- if (A) gmm::scale(matl[0], (*A)[0]);
- }
+ if (mf_a) {
+ if (Q > 1)
+ asm_stiffness_matrix_for_laplacian_componentwise
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_laplacian
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+
+ } else {
+ if (Q > 1)
+ asm_stiffness_matrix_for_homogeneous_laplacian_componentwise
+ (gmm::real_part(matl[0]), mim, mf_u, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_laplacian
+ (gmm::real_part(matl[0]), mim, mf_u, rg);
+ if (A) gmm::scale(matl[0], (*A)[0]);
+ }
} else if (s == N*N) {
- if (mf_a) {
- if (Q > 1)
- asm_stiffness_matrix_for_scalar_elliptic_componentwise
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_scalar_elliptic
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- } else {
- if (Q > 1)
- asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
- (matl[0], mim, mf_u, *A, rg);
- else
- asm_stiffness_matrix_for_homogeneous_scalar_elliptic
- (matl[0], mim, mf_u, *A, rg);
- }
+ if (mf_a) {
+ if (Q > 1)
+ asm_stiffness_matrix_for_scalar_elliptic_componentwise
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_scalar_elliptic
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ } else {
+ if (Q > 1)
+ asm_stiffness_matrix_for_homogeneous_scalar_elliptic_componentwise
+ (matl[0], mim, mf_u, *A, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_scalar_elliptic
+ (matl[0], mim, mf_u, *A, rg);
+ }
} else if (s == N*N*Q*Q) {
- if (mf_a)
- asm_stiffness_matrix_for_vector_elliptic
- (matl[0], mim, mf_u, *mf_a, *A, rg);
- else
- asm_stiffness_matrix_for_homogeneous_vector_elliptic
- (matl[0], mim, mf_u, *A, rg);
+ if (mf_a)
+ asm_stiffness_matrix_for_vector_elliptic
+ (matl[0], mim, mf_u, *mf_a, *A, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_vector_elliptic
+ (matl[0], mim, mf_u, *A, rg);
} else
- GMM_ASSERT1(false,
- "Bad format generic elliptic brick coefficient");
+ GMM_ASSERT1(false,
+ "Bad format generic elliptic brick coefficient");
}
generic_elliptic_brick(void) {
set_flags("Generic elliptic", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
size_type add_Laplacian_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- size_type region) {
+ const std::string &varname,
+ size_type region) {
pbrick pbr = new generic_elliptic_brick;
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
return md.add_brick(pbr, model::varnamelist(1, varname),
- model::varnamelist(), tl, model::mimlist(1, &mim),
- region);
+ model::varnamelist(), tl, model::mimlist(1, &mim),
+ region);
}
size_type add_generic_elliptic_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region) {
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region) {
pbrick pbr = new generic_elliptic_brick;
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
return md.add_brick(pbr, model::varnamelist(1, varname),
- model::varnamelist(1, dataname), tl,
- model::mimlist(1, &mim), region);
+ model::varnamelist(1, dataname), tl,
+ model::mimlist(1, &mim), region);
}
// ----------------------------------------------------------------------
@@ -1305,20 +1489,20 @@ namespace getfem {
struct source_term_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1,
- "Source term brick has one and only one term");
+ "Source term brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Source term brick need one and only one mesh_im");
+ "Source term brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() > 0 && dl.size() <= 2,
- "Wrong number of variables for source term brick");
+ "Wrong number of variables for source term brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_im &mim = *mims[0];
@@ -1331,47 +1515,47 @@ namespace getfem {
if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
GMM_ASSERT1(mf_u.get_qdim() == s,
- dl[0] << ": bad format of source term data. "
- "Detected dimension is " << s << " should be "
- << size_type(mf_u.get_qdim()));
+ dl[0] << ": bad format of source term data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(mf_u.get_qdim()));
GMM_TRACE2("Source term assembly");
if (mf_data)
- asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+ asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
else
- asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
+ asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
if (dl.size() > 1) gmm::add(md.real_variable(dl[1]), vecl[0]);
}
virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type) const {
const model_real_plain_vector &u = md.real_variable(vl[0]);
return -gmm::vect_sp(vecl[0], u);
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1,
- "Source term brick has one and only one term");
+ "Source term brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Source term brick need one and only one mesh_im");
+ "Source term brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() > 0 && dl.size() <= 2,
- "Wrong number of variables for source term brick");
+ "Wrong number of variables for source term brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_im &mim = *mims[0];
@@ -1387,22 +1571,22 @@ namespace getfem {
GMM_TRACE2("Source term assembly");
if (mf_data)
- asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+ asm_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
else
- asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
+ asm_homogeneous_source_term(vecl[0], mim, mf_u, A, rg);
if (dl.size() > 1) gmm::add(md.complex_variable(dl[1]), vecl[0]);
}
virtual scalar_type asm_complex_pseudo_potential(const model &md,size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::complex_matlist &,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::complex_matlist &,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type) const {
const model_complex_plain_vector &u = md.complex_variable(vl[0]);
return -gmm::real(gmm::vect_hp(vecl[0], u)); /* ? */
}
@@ -1410,25 +1594,25 @@ namespace getfem {
source_term_brick(void) {
set_flags("Source term", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
size_type add_source_term_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region,
- const std::string &directdataname) {
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region,
+ const std::string &directdataname) {
pbrick pbr = new source_term_brick;
model::termlist tl;
tl.push_back(model::term_description(varname));
model::varnamelist vdata(1, dataname);
if (directdataname.size()) vdata.push_back(directdataname);
return md.add_brick(pbr, model::varnamelist(1, varname),
- vdata, tl, model::mimlist(1, &mim), region);
+ vdata, tl, model::mimlist(1, &mim), region);
}
// ----------------------------------------------------------------------
@@ -1440,20 +1624,20 @@ namespace getfem {
struct normal_source_term_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1,
- "Source term brick has one and only one term");
+ "Source term brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Source term brick need one and only one mesh_im");
+ "Source term brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for source term brick");
+ "Wrong number of variables for source term brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_im &mim = *mims[0];
@@ -1466,33 +1650,33 @@ namespace getfem {
if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
GMM_ASSERT1(mf_u.get_qdim()*N == s,
- dl[0] << ": bad format of normal source term data. "
- "Detected dimension is " << s << " should be "
- << size_type(mf_u.get_qdim()*N));
+ dl[0] << ": bad format of normal source term data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(mf_u.get_qdim()*N));
GMM_TRACE2("source term assembly");
if (mf_data)
- asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+ asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
else
- asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+ asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1,
- "Source term brick has one and only one term");
+ "Source term brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Source term brick need one and only one mesh_im");
+ "Source term brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for source term brick");
+ "Wrong number of variables for source term brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_im &mim = *mims[0];
@@ -1508,31 +1692,43 @@ namespace getfem {
GMM_TRACE2("source term assembly");
if (mf_data)
- asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
+ asm_normal_source_term(vecl[0], mim, mf_u, *mf_data, A, rg);
else
- asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+ asm_homogeneous_normal_source_term(vecl[0], mim, mf_u, A, rg);
+
+ }
+ virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type) const {
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ return -gmm::vect_sp(vecl[0], u);
}
normal_source_term_brick(void) {
set_flags("Normal source term", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
size_type add_normal_source_term_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region) {
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region) {
pbrick pbr = new normal_source_term_brick;
model::termlist tl;
tl.push_back(model::term_description(varname));
model::varnamelist vdata(1, dataname);
return md.add_brick(pbr, model::varnamelist(1, varname),
- vdata, tl, model::mimlist(1, &mim), region);
+ vdata, tl, model::mimlist(1, &mim), region);
}
@@ -1547,276 +1743,306 @@ namespace getfem {
struct Dirichlet_condition_brick : public virtual_brick {
bool H_version; // The version hu = r for vector fields.
+ bool normal_component; // Dirichlet on normal component for vector field.
const mesh_fem *mf_mult_;
mutable model_real_sparse_matrix rB;
mutable model_real_plain_vector rV;
mutable model_complex_sparse_matrix cB;
mutable model_complex_plain_vector cV;
-
+
virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Dirichlet condition brick has one and only one term");
+ "Dirichlet condition brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Dirichlet condition brick need one and only one mesh_im");
+ "Dirichlet condition brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 3,
- "Wrong number of variables for Dirichlet condition brick");
+ "Wrong number of variables for Dirichlet condition brick");
bool penalized = (vl.size() == 1);
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_fem &mf_mult = penalized ? (mf_mult_ ? *mf_mult_ : mf_u)
- : md.mesh_fem_of_variable(vl[1]);
+ : md.mesh_fem_of_variable(vl[1]);
const mesh_im &mim = *mims[0];
const model_real_plain_vector *A = 0, *COEFF = 0, *H = 0;
const mesh_fem *mf_data = 0, *mf_H = 0;
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
- || (penalized && md.is_var_newer_than_brick(dl[0], ib));
+ || (penalized && md.is_var_newer_than_brick(dl[0], ib));
if (penalized) {
- COEFF = &(md.real_variable(dl[0]));
- GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
- "Data for coefficient should be a scalar");
+ COEFF = &(md.real_variable(dl[0]));
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
}
size_type s = 0, ind = (penalized ? 1 : 0);
if (dl.size() > ind) {
- A = &(md.real_variable(dl[ind]));
- mf_data = md.pmesh_fem_of_variable(dl[ind]);
- s = gmm::vect_size(*A);
- if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
- GMM_ASSERT1(mf_u.get_qdim() == s,
- dl[ind] << ": bad format of Dirichlet data. "
- "Detected dimension is " << s << " should be "
- << size_type(mf_u.get_qdim()));
+ A = &(md.real_variable(dl[ind]));
+ mf_data = md.pmesh_fem_of_variable(dl[ind]);
+ s = gmm::vect_size(*A);
+ if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+ GMM_ASSERT1(mf_u.get_qdim() ==
+ s * ((normal_component) ? mf_u.linked_mesh().dim() : 1),
+ dl[ind] << ": bad format of Dirichlet data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(mf_u.get_qdim()));
}
if (dl.size() > ind + 1) {
- GMM_ASSERT1(H_version,
- "Wrong number of data for Dirichlet condition brick");
- H = &(md.real_variable(dl[ind+1]));
- mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
- s = gmm::vect_size(*A);
+ GMM_ASSERT1(H_version,
+ "Wrong number of data for Dirichlet condition brick");
+ H = &(md.real_variable(dl[ind+1]));
+ mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
+ s = gmm::vect_size(*A);
if (mf_H) {
s = s * mf_H->get_qdim() / mf_H->nb_dof();
GMM_ASSERT1(mf_H->get_qdim() == 1, "Implemented only for mf_H "
"a scalar finite element method");
}
- GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
- dl[ind] << ": bad format of Dirichlet data. "
- "Detected dimension is " << s << " should be "
- << size_type(gmm::sqr(mf_u.get_qdim())));
+ GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
+ dl[ind] << ": bad format of Dirichlet data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(gmm::sqr(mf_u.get_qdim())));
}
mesh_region rg(region);
mim.linked_mesh().intersect_with_mpi_region(rg);
if (recompute_matrix) {
- model_real_sparse_matrix *B = &(matl[0]);
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::resize(rB, mf_mult.nb_dof(), mf_u.nb_dof());
- gmm::clear(rB);
- B = &rB;
- } else {
- gmm::clear(matl[0]);
- }
- GMM_TRACE2("Mass term assembly for Dirichlet condition");
- if (H_version) {
- if (mf_H)
- asm_real_or_complex_1_param
- (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
- "F=data(#2);"
- "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
- : "F=data(qdim(#1),qdim(#1),#2);"
- "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
- else
- asm_real_or_complex_1_param
- (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
- "F=data(1);"
- "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
- : "F=data(qdim(#1),qdim(#1));"
- "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
- }
- else
- asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
-
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::mult(gmm::transposed(rB), rB, matl[0]);
- gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
- } else if (penalized) {
- gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
- }
+ model_real_sparse_matrix *B = &(matl[0]);
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::resize(rB, mf_mult.nb_dof(), mf_u.nb_dof());
+ gmm::clear(rB);
+ B = &rB;
+ } else {
+ gmm::clear(matl[0]);
+ }
+ GMM_TRACE2("Mass term assembly for Dirichlet condition");
+ if (H_version) {
+ if (mf_H)
+ asm_real_or_complex_1_param
+ (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
+ "F=data(#2);"
+ "M(#1,#3)+=comp(Base(#1).Base(#3).Base(#2)(:,:,i).F(i))"
+ : "F=data(qdim(#1),qdim(#1),#2);"
+ "M(#1,#3)+=comp(vBase(#1).vBase(#3).Base(#2)(:,i,:,j,k).F(i,j,k));", &mf_u);
+ else {
+ asm_real_or_complex_1_param
+ (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
+ "F=data(1);"
+ "M(#1,#2)+=comp(Base(#1).Base(#2).F(1))"
+ : "F=data(qdim(#1),qdim(#1));"
+ "M(#1,#2)+=comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j);");
+ }
+ }
+ else if (normal_component) {
+ generic_assembly assem;
+ if (mf_mult.get_qdim() == 1)
+ assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+ else
+ assem.set("M(#2,#1)+=comp(vBase(#2).mBase(#1).Normal())(:,i,:,i,j,j);");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_mult);
+ assem.push_mat(*B);
+ assem.assembly(region);
+ } else {
+ asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
+ }
+
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::mult(gmm::transposed(rB), rB, matl[0]);
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ } else if (penalized) {
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ }
}
if (dl.size() > ind) {
- GMM_TRACE2("Source term assembly for Dirichlet condition");
-
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::resize(rV, mf_mult.nb_dof());
- gmm::clear(rV);
- if (mf_data)
- asm_source_term(rV, mim, mf_mult, *mf_data, *A, rg);
- else
- asm_homogeneous_source_term(rV, mim, mf_mult, *A, rg);
- } else {
- if (mf_data)
- asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
- else
- asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
- }
-
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::mult(gmm::transposed(rB), rV, vecl[0]);
- gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
- rV = model_real_plain_vector();
- } else if (penalized)
- gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ GMM_TRACE2("Source term assembly for Dirichlet condition");
+
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::resize(rV, mf_mult.nb_dof());
+ gmm::clear(rV);
+ if (mf_data)
+ asm_source_term(rV, mim, mf_mult, *mf_data, *A, rg);
+ else
+ asm_homogeneous_source_term(rV, mim, mf_mult, *A, rg);
+ } else {
+ if (mf_data)
+ asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
+ else
+ asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
+ }
+
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::mult(gmm::transposed(rB), rV, vecl[0]);
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ rV = model_real_plain_vector();
+ } else if (penalized)
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
}
}
virtual void asm_complex_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Dirichlet condition brick has one and only one term");
+ "Dirichlet condition brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Dirichlet condition brick need one and only one mesh_im");
+ "Dirichlet condition brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 3,
- "Wrong number of variables for Dirichlet condition brick");
+ "Wrong number of variables for Dirichlet condition brick");
bool penalized = (vl.size() == 1);
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh_fem &mf_mult = penalized ? (mf_mult_ ? *mf_mult_ : mf_u)
- : md.mesh_fem_of_variable(vl[1]);
+ : md.mesh_fem_of_variable(vl[1]);
const mesh_im &mim = *mims[0];
const model_complex_plain_vector *A = 0, *COEFF = 0, *H = 0;
const mesh_fem *mf_data = 0, *mf_H = 0;
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
- || (penalized && md.is_var_newer_than_brick(dl[0], ib));
+ || (penalized && md.is_var_newer_than_brick(dl[0], ib));
if (penalized) {
- COEFF = &(md.complex_variable(dl[0]));
- GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
- "Data for coefficient should be a scalar");
+ COEFF = &(md.complex_variable(dl[0]));
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
}
size_type s = 0, ind = (penalized ? 1 : 0);
if (dl.size() > ind) {
- A = &(md.complex_variable(dl[ind]));
- mf_data = md.pmesh_fem_of_variable(dl[ind]);
- s = gmm::vect_size(*A);
- if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
- GMM_ASSERT1(mf_u.get_qdim() == s,
- dl[ind] << ": bad format of Dirichlet data. "
- "Detected dimension is " << s << " should be "
- << size_type(mf_u.get_qdim()));
+ A = &(md.complex_variable(dl[ind]));
+ mf_data = md.pmesh_fem_of_variable(dl[ind]);
+ s = gmm::vect_size(*A);
+ if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+ GMM_ASSERT1(mf_u.get_qdim() ==
+ s * ((normal_component) ? mf_u.linked_mesh().dim() : 1),
+ dl[ind] << ": bad format of Dirichlet data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(mf_u.get_qdim()));
}
if (dl.size() > ind + 1) {
- GMM_ASSERT1(H_version,
- "Wrong number of data for Dirichlet condition brick");
- H = &(md.complex_variable(dl[ind+1]));
- mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
- s = gmm::vect_size(*A);
- if (mf_H) {
+ GMM_ASSERT1(H_version,
+ "Wrong number of data for Dirichlet condition brick");
+ H = &(md.complex_variable(dl[ind+1]));
+ mf_H = md.pmesh_fem_of_variable(dl[ind+1]);
+ s = gmm::vect_size(*A);
+ if (mf_H) {
s = s * mf_H->get_qdim() / mf_H->nb_dof();
- GMM_ASSERT1(mf_H->get_qdim() == 1, "Implemented only for mf_H "
- "a scalar finite element method");
+ GMM_ASSERT1(mf_H->get_qdim() == 1, "Implemented only for mf_H "
+ "a scalar finite element method");
}
- GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
- dl[ind] << ": bad format of Dirichlet data. "
- "Detected dimension is " << s << " should be "
- << size_type(gmm::sqr(mf_u.get_qdim())));
+ GMM_ASSERT1(s = gmm::sqr(mf_u.get_qdim()),
+ dl[ind] << ": bad format of Dirichlet data. "
+ "Detected dimension is " << s << " should be "
+ << size_type(gmm::sqr(mf_u.get_qdim())));
}
mesh_region rg(region);
mim.linked_mesh().intersect_with_mpi_region(rg);
if (recompute_matrix) {
- model_complex_sparse_matrix *B = &(matl[0]);
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::resize(cB, mf_mult.nb_dof(), mf_u.nb_dof());
- gmm::clear(cB);
- B = &cB;
- } else {
- gmm::clear(matl[0]);
- }
- GMM_TRACE2("Mass term assembly for Dirichlet condition");
- if (H_version) {
- if (mf_H)
- asm_real_or_complex_1_param
- (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
- "F=data(#2);"
- "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
- : "F=data(qdim(#1),qdim(#1),#2);"
- "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
- else
- asm_real_or_complex_1_param
- (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
- "F=data(1);"
- "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
- : "F=data(qdim(#1),qdim(#1));"
- "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
- }
- else {
- asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
- }
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::mult(gmm::transposed(cB), cB, matl[0]);
- gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
- } else if (penalized) {
- gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
- }
+ model_complex_sparse_matrix *B = &(matl[0]);
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::resize(cB, mf_mult.nb_dof(), mf_u.nb_dof());
+ gmm::clear(cB);
+ B = &cB;
+ } else {
+ gmm::clear(matl[0]);
+ }
+ GMM_TRACE2("Mass term assembly for Dirichlet condition");
+ if (H_version) {
+ if (mf_H)
+ asm_real_or_complex_1_param
+ (*B, mim, mf_mult, *mf_H, *H, rg, (mf_u.get_qdim() == 1) ?
+ "F=data(#2);"
+ "M(#1,#3)+=sym(comp(Base(#1).Base(#3).Base(#2))(:,:,i).F(i))"
+ : "F=data(qdim(#1),qdim(#1),#2);"
+ "M(#1,#3)+=sym(comp(vBase(#1).vBase(#3).Base(#2))(:,i,:,j,k).F(i,j,k));", &mf_u);
+ else
+ asm_real_or_complex_1_param
+ (*B, mim, mf_mult, mf_u, *H, rg, (mf_u.get_qdim() == 1) ?
+ "F=data(1);"
+ "M(#1,#2)+=sym(comp(Base(#1).Base(#2)).F(1))"
+ : "F=data(qdim(#1),qdim(#1));"
+ "M(#1,#2)+=sym(comp(vBase(#1).vBase(#2))(:,i,:,j).F(i,j));");
+ }
+ else if (normal_component) {
+ generic_assembly assem;
+ if (mf_mult.get_qdim() == 1)
+ assem.set("M(#2,#1)+=comp(Base(#2).vBase(#1).Normal())(:,:,i,i);");
+ else
+ assem.set("M(#2,#1)+=comp(vBase(#2).mBase(#1).Normal())(:,i,:,i,j,j);");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_mf(mf_mult);
+ assem.push_mat(gmm::real_part(*B));
+ assem.assembly(region);
+ } else {
+ asm_mass_matrix(*B, mim, mf_mult, mf_u, region);
+ }
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::mult(gmm::transposed(cB), cB, matl[0]);
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ } else if (penalized) {
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ }
}
if (dl.size() > ind) {
- GMM_TRACE2("Source term assembly for Dirichlet condition");
-
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::resize(cV, mf_mult.nb_dof());
- gmm::clear(cV);
- if (mf_data)
- asm_source_term(cV, mim, mf_mult, *mf_data, *A, rg);
- else
- asm_homogeneous_source_term(cV, mim, mf_mult, *A, rg);
- } else {
- if (mf_data)
- asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
- else
- asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
- }
-
- if (penalized && (&mf_mult != &mf_u)) {
- gmm::mult(gmm::transposed(cB), cV, vecl[0]);
- gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
- cV = model_complex_plain_vector();
- } else if (penalized)
- gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ GMM_TRACE2("Source term assembly for Dirichlet condition");
+
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::resize(cV, mf_mult.nb_dof());
+ gmm::clear(cV);
+ if (mf_data)
+ asm_source_term(cV, mim, mf_mult, *mf_data, *A, rg);
+ else
+ asm_homogeneous_source_term(cV, mim, mf_mult, *A, rg);
+ } else {
+ if (mf_data)
+ asm_source_term(vecl[0], mim, mf_mult, *mf_data, *A, rg);
+ else
+ asm_homogeneous_source_term(vecl[0], mim, mf_mult, *A, rg);
+ }
+
+ if (penalized && (&mf_mult != &mf_u)) {
+ gmm::mult(gmm::transposed(cB), cV, vecl[0]);
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ cV = model_complex_plain_vector();
+ } else if (penalized)
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
}
}
Dirichlet_condition_brick(bool penalized, bool H_version_,
- const mesh_fem *mf_mult__ = 0) {
+ bool normal_component_,
+ const mesh_fem *mf_mult__ = 0) {
mf_mult_ = mf_mult__;
H_version = H_version_;
+ normal_component = normal_component_;
+ GMM_ASSERT1(!(H_version && normal_component), "Bad Dirichlet version");
set_flags(penalized ? "Dirichlet with penalization brick"
- : "Dirichlet with multipliers brick",
- true /* is linear*/,
- true /* is symmetric */, penalized /* is coercive */,
- true /* is real */, true /* is complex */);
+ : "Dirichlet with multipliers brick",
+ true /* is linear*/,
+ true /* is symmetric */, penalized /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
@@ -1824,7 +2050,7 @@ namespace getfem {
(model &md, const mesh_im &mim, const std::string &varname,
const std::string &multname, size_type region,
const std::string &dataname) {
- pbrick pbr = new Dirichlet_condition_brick(false, false);
+ pbrick pbr = new Dirichlet_condition_brick(false, false, false);
model::termlist tl;
tl.push_back(model::term_description(multname, varname, true));
model::varnamelist vl(1, varname);
@@ -1850,7 +2076,7 @@ namespace getfem {
const std::string &dataname) {
const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),
- degree, mf_u.get_qdim());
+ degree, mf_u.get_qdim());
return add_Dirichlet_condition_with_multipliers
(md, mim, varname, mf_mult, region, dataname);
}
@@ -1861,7 +2087,60 @@ namespace getfem {
size_type add_Dirichlet_condition_with_penalization
(model &md, const mesh_im &mim, const std::string &varname,
- scalar_type penalisation_coeff, size_type region,
+ scalar_type penalisation_coeff, size_type region,
+ const std::string &dataname, const mesh_fem *mf_mult) {
+ std::string coeffname = md.new_name("penalization_on_" + varname);
+ md.add_fixed_size_data(coeffname, 1);
+ if (md.is_complex())
+ md.set_complex_variable(coeffname)[0] = penalisation_coeff;
+ else
+ md.set_real_variable(coeffname)[0] = penalisation_coeff;
+ pbrick pbr = new Dirichlet_condition_brick(true, false, false, mf_mult);
+ model::termlist tl;
+ tl.push_back(model::term_description(varname, varname, true));
+ model::varnamelist vl(1, varname);
+ model::varnamelist dl(1, coeffname);
+ if (dataname.size()) dl.push_back(dataname);
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const std::string &multname, size_type region,
+ const std::string &dataname) {
+ pbrick pbr = new Dirichlet_condition_brick(false, false, true);
+ model::termlist tl;
+ tl.push_back(model::term_description(multname, varname, true));
+ model::varnamelist vl(1, varname);
+ vl.push_back(multname);
+ model::varnamelist dl;
+ if (dataname.size()) dl.push_back(dataname);
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const mesh_fem &mf_mult, size_type region,
+ const std::string &dataname) {
+ std::string multname = md.new_name("mult_on_" + varname);
+ md.add_multiplier(multname, mf_mult, varname);
+ return add_normal_Dirichlet_condition_with_multipliers
+ (md, mim, varname, multname, region, dataname);
+ }
+
+ size_type add_normal_Dirichlet_condition_with_multipliers
+ (model &md, const mesh_im &mim, const std::string &varname,
+ dim_type degree, size_type region,
+ const std::string &dataname) {
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+ const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),degree, 1);
+ return add_normal_Dirichlet_condition_with_multipliers
+ (md, mim, varname, mf_mult, region, dataname);
+ }
+
+ size_type add_normal_Dirichlet_condition_with_penalization
+ (model &md, const mesh_im &mim, const std::string &varname,
+ scalar_type penalisation_coeff, size_type region,
const std::string &dataname, const mesh_fem *mf_mult) {
std::string coeffname = md.new_name("penalization_on_" + varname);
md.add_fixed_size_data(coeffname, 1);
@@ -1869,7 +2148,7 @@ namespace getfem {
md.set_complex_variable(coeffname)[0] = penalisation_coeff;
else
md.set_real_variable(coeffname)[0] = penalisation_coeff;
- pbrick pbr = new Dirichlet_condition_brick(true, false, mf_mult);
+ pbrick pbr = new Dirichlet_condition_brick(true, false, true, mf_mult);
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
model::varnamelist vl(1, varname);
@@ -1878,11 +2157,12 @@ namespace getfem {
return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
}
+
size_type add_generalized_Dirichlet_condition_with_multipliers
(model &md, const mesh_im &mim, const std::string &varname,
const std::string &multname, size_type region,
const std::string &dataname, const std::string &Hname) {
- pbrick pbr = new Dirichlet_condition_brick(false, true);
+ pbrick pbr = new Dirichlet_condition_brick(false, true, false);
model::termlist tl;
tl.push_back(model::term_description(multname, varname, true));
model::varnamelist vl(1, varname);
@@ -1909,14 +2189,14 @@ namespace getfem {
const std::string &dataname, const std::string &Hname) {
const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
const mesh_fem &mf_mult = classical_mesh_fem(mf_u.linked_mesh(),
- degree, mf_u.get_qdim());
+ degree, mf_u.get_qdim());
return add_generalized_Dirichlet_condition_with_multipliers
(md, mim, varname, mf_mult, region, dataname, Hname);
}
size_type add_generalized_Dirichlet_condition_with_penalization
(model &md, const mesh_im &mim, const std::string &varname,
- scalar_type penalisation_coeff, size_type region,
+ scalar_type penalisation_coeff, size_type region,
const std::string &dataname, const std::string &Hname,
const mesh_fem *mf_mult) {
std::string coeffname = md.new_name("penalization_on_" + varname);
@@ -1925,7 +2205,7 @@ namespace getfem {
md.set_complex_variable(coeffname)[0] = penalisation_coeff;
else
md.set_real_variable(coeffname)[0] = penalisation_coeff;
- pbrick pbr = new Dirichlet_condition_brick(true, true, mf_mult);
+ pbrick pbr = new Dirichlet_condition_brick(true, true, false, mf_mult);
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
model::varnamelist vl(1, varname);
@@ -1936,93 +2216,354 @@ namespace getfem {
}
void change_penalization_coeff(model &md, size_type ind_brick,
- scalar_type penalisation_coeff) {
+ scalar_type penalisation_coeff) {
const std::string &coeffname = md.dataname_of_brick(ind_brick, 0);
if (!md.is_complex()) {
model_real_plain_vector &d = md.set_real_variable(coeffname);
GMM_ASSERT1(gmm::vect_size(d)==1,
- "Wrong coefficient size, may be not a Dirichlet brick "
- "with penalization");
+ "Wrong coefficient size, may be not a Dirichlet brick "
+ "with penalization");
d[0] = penalisation_coeff;
}
else {
model_complex_plain_vector &d = md.set_complex_variable(coeffname);
GMM_ASSERT1(gmm::vect_size(d)==1,
- "Wrong coefficient size, may be not a Dirichlet brick "
- "with penalization");
+ "Wrong coefficient size, may be not a Dirichlet brick "
+ "with penalization");
d[0] = penalisation_coeff;
}
}
-
-
// ----------------------------------------------------------------------
//
- // Helmholtz brick
+ // Pointwise constraints brick
//
// ----------------------------------------------------------------------
+ // Two variables : with multipliers
+ // One variable : penalization
- struct Helmholtz_brick : public virtual_brick {
-
- virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type region,
- build_version) const {
- GMM_ASSERT1(matl.size() == 1,
- "Helmholtz brick has one and only one term");
- GMM_ASSERT1(mims.size() == 1,
- "Helmholtz brick need one and only one mesh_im");
- GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for Helmholtz brick");
+ struct pointwise_constraints_brick : public virtual_brick {
+
+ mutable gmm::row_matrix<model_real_sparse_vector> rB;
+ mutable gmm::row_matrix<model_complex_sparse_vector> cB;
+ virtual void asm_real_tangent_terms(const model &md, size_type ib,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type,
+ build_version version) const {
+ GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
+ "Pointwize constraints brick only one term");
+ GMM_ASSERT1(mims.size() == 0,
+ "Pointwize constraints brick does not need a mesh_im");
+ GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2,
+ "Wrong number of variables for pointwize constraints brick");
+ bool penalized = (vl.size() == 1);
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- size_type Q = mf_u.get_qdim(), s = 1;
- GMM_ASSERT1(Q == 1, "Helmholtz brick is only for scalar field, sorry.");
- const mesh_im &mim = *mims[0];
- const mesh_fem *mf_a = 0;
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
- const model_real_plain_vector *A = &(md.real_variable(dl[0]));
- mf_a = md.pmesh_fem_of_variable(dl[0]);
- s = gmm::vect_size(*A);
- if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
+ dim_type N = mf_u.linked_mesh().dim(), Q = mf_u.get_qdim(), ind_pt = 0;
+ size_type dlsize = size_type((penalized ? 1 : 0) + 1 + (Q > 1 ? 1 : 0));
+ GMM_ASSERT1(dl.size() == dlsize || dl.size() == dlsize+1,
+ "Wrong number of data for pointwize constraints brick");
+
+
+ const model_real_plain_vector *COEFF = 0;
+ if (penalized) {
+ COEFF = &(md.real_variable(dl[0]));
+ ind_pt = 1;
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
+ }
+
+ const model_real_plain_vector &PT = md.real_variable(dl[ind_pt]);
+ size_type nb_co = gmm::vect_size(PT) / N;
+
+ dim_type ind_unitv = dim_type((Q > 1) ? ind_pt+1 : 0);
+ const model_real_plain_vector &unitv =md.real_variable(dl[ind_unitv]);
+ GMM_ASSERT1((!ind_unitv || gmm::vect_size(unitv) == nb_co * Q),
+ "Wrong size for vector of unit vectors");
+
+ dim_type ind_rhs = dim_type((Q > 1) ? ind_pt+2 : ind_pt+1);
+ if (dl.size() < size_type(ind_rhs + 1)) ind_rhs = 0;
+ const model_real_plain_vector &rhs = md.real_variable(dl[ind_rhs]);
+ GMM_ASSERT1((!ind_rhs || gmm::vect_size(rhs) == nb_co),
+ "Wrong size for vector of rhs");
+
+
+ bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
+ || (penalized && (md.is_var_newer_than_brick(dl[ind_pt], ib)
+ || md.is_var_newer_than_brick(dl[ind_unitv], ib)
+ || md.is_var_newer_than_brick(dl[ind_rhs], ib)));
+
+ if (recompute_matrix) {
+ gmm::row_matrix<model_real_sparse_vector> BB(nb_co*Q, mf_u.nb_dof());
+ gmm::clear(rB); gmm::resize(rB, nb_co, mf_u.nb_dof());
+
+ dal::bit_vector dof_untouched;
+ getfem::mesh_trans_inv mti(mf_u.linked_mesh());
+ base_node pt(N);
+ for (size_type i = 0; i < nb_co; ++i) {
+ gmm::copy(gmm::sub_vector(PT, gmm::sub_interval(i*N, N)), pt);
+ mti.add_point(pt);
+ }
+ gmm::row_matrix<model_real_sparse_vector> &BBB = ((Q > 1) ? BB : rB);
+ model_real_plain_vector vv;
+ interpolation(mf_u, mti, vv, vv, BBB, 1, 1, &dof_untouched);
+ GMM_ASSERT1(dof_untouched.card() == 0,
+ "Pointwize constraints : some of the points are outside "
+ "the mesh: " << dof_untouched);
+
+ if (Q > 1) {
+ for (size_type i = 0; i < nb_co; ++i)
+ for (size_type q = 0; q < Q; ++q)
+ gmm::add(gmm::scaled(gmm::mat_row(BB, i*Q+q), unitv[i*Q+q]),
+ gmm::mat_row(rB, i));
+ }
+ if (penalized) {
+ gmm::mult(gmm::transposed(rB), rB, matl[0]);
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ } else
+ gmm::copy(rB, matl[0]);
+ }
+
+ if (ind_rhs) {
+ if (penalized) {
+ gmm::mult(gmm::transposed(rB), rhs, vecl[0]);
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ }
+ else gmm::copy(rhs, vecl[0]);
+ }
+ else gmm::clear(vecl[0]);
+ }
+
+ virtual void asm_complex_tangent_terms(const model &md, size_type ib,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type,
+ build_version version) const {
+ GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
+ "Pointwize constraints brick only one term");
+ GMM_ASSERT1(mims.size() == 0,
+ "Pointwize constraints brick does not need a mesh_im");
+ GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2,
+ "Wrong number of variables for pointwize constraints brick");
+ bool penalized = (vl.size() == 1);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ dim_type N = mf_u.linked_mesh().dim(), Q = mf_u.get_qdim(), ind_pt = 0;
+ size_type dlsize = size_type((penalized ? 1 : 0) + 1 + (Q > 1 ? 1 : 0));
+ GMM_ASSERT1(dl.size() == dlsize || dl.size() == dlsize+1,
+ "Wrong number of data for pointwize constraints brick");
+
+
+ const model_complex_plain_vector *COEFF = 0;
+ if (penalized) {
+ COEFF = &(md.complex_variable(dl[0]));
+ ind_pt = 1;
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
+ }
+
+ const model_complex_plain_vector &PT = md.complex_variable(dl[ind_pt]);
+ size_type nb_co = gmm::vect_size(PT) / N;
+
+ dim_type ind_unitv = dim_type((Q > 1) ? ind_pt+1 : 0);
+ const model_complex_plain_vector &unitv
+ = md.complex_variable(dl[ind_unitv]);
+ GMM_ASSERT1((!ind_unitv || gmm::vect_size(unitv) == nb_co * Q),
+ "Wrong size for vector of unit vectors");
+
+ dim_type ind_rhs = dim_type((Q > 1) ? ind_pt+2 : ind_pt+1);
+ if (dl.size() < size_type(ind_rhs + 1)) ind_rhs = 0;
+ const model_complex_plain_vector &rhs
+ = md.complex_variable(dl[ind_rhs]);
+ GMM_ASSERT1((!ind_rhs || gmm::vect_size(rhs) == nb_co),
+ "Wrong size for vector of rhs");
+
+ bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
+ || (penalized && (md.is_var_newer_than_brick(dl[ind_pt], ib)
+ || md.is_var_newer_than_brick(dl[ind_unitv], ib)
+ || md.is_var_newer_than_brick(dl[ind_rhs], ib)));
+
+ if (recompute_matrix) {
+ gmm::row_matrix<model_complex_sparse_vector> BB(nb_co*Q,mf_u.nb_dof());
+ gmm::clear(cB); gmm::resize(cB, nb_co, mf_u.nb_dof());
+ dal::bit_vector dof_untouched;
+ getfem::mesh_trans_inv mti(mf_u.linked_mesh());
+ base_node pt(N);
+ for (size_type i = 0; i < nb_co; ++i) {
+ gmm::copy(gmm::real_part(gmm::sub_vector(PT,
+ gmm::sub_interval(i*N, N))), pt);
+ mti.add_point(pt);
+ }
+ gmm::row_matrix<model_complex_sparse_vector> &BBB = ((Q > 1) ? BB :cB);
+ model_complex_plain_vector vv;
+ interpolation(mf_u, mti, vv, vv, BBB, 1, 1, &dof_untouched);
+ GMM_ASSERT1(dof_untouched.card() == 0,
+ "Pointwize constraints : some of the points are outside "
+ "the mesh: " << dof_untouched);
+
+ if (Q > 1) {
+ for (size_type i = 0; i < nb_co; ++i)
+ for (size_type q = 0; q < Q; ++q)
+ gmm::add(gmm::scaled(gmm::mat_row(BB, i*Q+q), unitv[i*Q+q]),
+ gmm::mat_row(cB, i));
+ }
+
+ if (penalized) {
+ gmm::mult(gmm::transposed(cB), cB, matl[0]);
+ gmm::scale(matl[0], gmm::abs((*COEFF)[0]));
+ } else
+ gmm::copy(cB, matl[0]);
+ }
+
+
+ if (ind_rhs) {
+ if (penalized) {
+ gmm::mult(gmm::transposed(cB), rhs, vecl[0]);
+ gmm::scale(vecl[0], gmm::abs((*COEFF)[0]));
+ }
+ else gmm::copy(rhs, vecl[0]);
+ }
+ else gmm::clear(vecl[0]);
+ }
+
+ pointwise_constraints_brick(bool penalized) {
+ set_flags(penalized ? "Pointwise cosntraints with penalization brick"
+ : "Pointwise cosntraints with multipliers brick",
+ true /* is linear*/,
+ true /* is symmetric */, penalized /* is coercive */,
+ true /* is real */, true /* is complex */);
+ }
+ };
+
+
+ size_type add_pointwise_constraints_with_penalization
+ (model &md, const std::string &varname,
+ scalar_type penalisation_coeff, const std::string &dataname_pt,
+ const std::string &dataname_unitv, const std::string &dataname_val) {
+ std::string coeffname = md.new_name("penalization_on_" + varname);
+ md.add_fixed_size_data(coeffname, 1);
+ if (md.is_complex())
+ md.set_complex_variable(coeffname)[0] = penalisation_coeff;
+ else
+ md.set_real_variable(coeffname)[0] = penalisation_coeff;
+ pbrick pbr = new pointwise_constraints_brick(true);
+ model::termlist tl;
+ tl.push_back(model::term_description(varname, varname, true));
+ model::varnamelist vl(1, varname);
+ model::varnamelist dl(1, coeffname);
+ dl.push_back(dataname_pt);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+ if (mf_u.get_qdim() > 1) dl.push_back(dataname_unitv);
+ if (dataname_val.size() > 0) dl.push_back(dataname_val);
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+ }
+
+ size_type add_pointwise_constraints_with_given_multipliers
+ (model &md, const std::string &varname,
+ const std::string &multname, const std::string &dataname_pt,
+ const std::string &dataname_unitv, const std::string &dataname_val) {
+ pbrick pbr = new pointwise_constraints_brick(false);
+ model::termlist tl;
+ tl.push_back(model::term_description(multname, varname, true));
+ model::varnamelist vl(1, varname);
+ vl.push_back(multname);
+ model::varnamelist dl(1, dataname_pt);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+ if (mf_u.get_qdim() > 1) dl.push_back(dataname_unitv);
+ if (dataname_val.size() > 0) dl.push_back(dataname_val);
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
+ }
+
+ size_type add_pointwise_constraints_with_multipliers
+ (model &md, const std::string &varname, const std::string &dataname_pt,
+ const std::string &dataname_unitv, const std::string &dataname_val) {
+ std::string multname = md.new_name("mult_on_" + varname);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+ size_type nb_co =
+ ((md.is_complex()) ? gmm::vect_size(md.complex_variable(dataname_pt))
+ : gmm::vect_size(md.real_variable(dataname_pt)))
+ / mf_u.linked_mesh().dim();
+ md.add_fixed_size_variable(multname, nb_co);
+ return add_pointwise_constraints_with_given_multipliers
+ (md, varname, multname, dataname_pt, dataname_unitv, dataname_val);
+ }
+
+
+ // ----------------------------------------------------------------------
+ //
+ // Helmholtz brick
+ //
+ // ----------------------------------------------------------------------
+
+ struct Helmholtz_brick : public virtual_brick {
+
+ virtual void asm_real_tangent_terms(const model &md, size_type,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
+ GMM_ASSERT1(matl.size() == 1,
+ "Helmholtz brick has one and only one term");
+ GMM_ASSERT1(mims.size() == 1,
+ "Helmholtz brick need one and only one mesh_im");
+ GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
+ "Wrong number of variables for Helmholtz brick");
+
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ size_type Q = mf_u.get_qdim(), s = 1;
+ GMM_ASSERT1(Q == 1, "Helmholtz brick is only for scalar field, sorry.");
+ const mesh_im &mim = *mims[0];
+ const mesh_fem *mf_a = 0;
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+ const model_real_plain_vector *A = &(md.real_variable(dl[0]));
+ mf_a = md.pmesh_fem_of_variable(dl[0]);
+ s = gmm::vect_size(*A);
+ if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
if (s == 1) {
- GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
- gmm::clear(matl[0]);
- model_real_plain_vector A2(gmm::vect_size(*A));
- for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
- A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
- if (mf_a)
- asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
- else
- asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
+ GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
+ gmm::clear(matl[0]);
+ model_real_plain_vector A2(gmm::vect_size(*A));
+ for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
+ A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
+ if (mf_a)
+ asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
+ else
+ asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
} else
- GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
+ GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Helmholtz brick has one and only one term");
+ "Helmholtz brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Helmholtz brick need one and only one mesh_im");
+ "Helmholtz brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for Helmholtz brick");
-
+ "Wrong number of variables for Helmholtz brick");
+
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
size_type Q = mf_u.get_qdim(), s = 1;
@@ -2037,37 +2578,37 @@ namespace getfem {
if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
if (s == 1) {
- GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
- gmm::clear(matl[0]);
- model_complex_plain_vector A2(gmm::vect_size(*A));
- for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
- A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
- if (mf_a)
- asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
- else
- asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
+ GMM_TRACE2("Stiffness matrix assembly for Helmholtz problem");
+ gmm::clear(matl[0]);
+ model_complex_plain_vector A2(gmm::vect_size(*A));
+ for (size_type i=0; i < gmm::vect_size(*A); ++i) // Not valid for
+ A2[i] = gmm::sqr((*A)[i]); // non lagrangian fem ...
+ if (mf_a)
+ asm_Helmholtz(matl[0], mim, mf_u, *mf_a, A2, rg);
+ else
+ asm_homogeneous_Helmholtz(matl[0], mim, mf_u, A2, rg);
} else
- GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
+ GMM_ASSERT1(false, "Bad format Helmholtz brick coefficient");
}
Helmholtz_brick(void) {
set_flags("Helmholtz", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
size_type add_Helmholtz_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region) {
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region) {
pbrick pbr = new Helmholtz_brick;
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
return md.add_brick(pbr, model::varnamelist(1, varname),
- model::varnamelist(1, dataname), tl,
- model::mimlist(1, &mim), region);
+ model::varnamelist(1, dataname), tl,
+ model::mimlist(1, &mim), region);
}
@@ -2081,20 +2622,20 @@ namespace getfem {
struct Fourier_Robin_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Fourier-Robin brick has one and only one term");
+ "Fourier-Robin brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Fourier-Robin brick need one and only one mesh_im");
+ "Fourier-Robin brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for Fourier-Robin brick");
+ "Wrong number of variables for Fourier-Robin brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
@@ -2108,31 +2649,31 @@ namespace getfem {
s = gmm::vect_size(*A);
if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
GMM_ASSERT1(s == Q*Q,
- "Bad format Fourier-Robin brick coefficient");
+ "Bad format Fourier-Robin brick coefficient");
GMM_TRACE2("Fourier-Robin term assembly");
gmm::clear(matl[0]);
if (mf_a)
- asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
+ asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
else
- asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
+ asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Fourier-Robin brick has one and only one term");
+ "Fourier-Robin brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Fourier-Robin brick need one and only one mesh_im");
+ "Fourier-Robin brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 1,
- "Wrong number of variables for Fourier-Robin brick");
+ "Wrong number of variables for Fourier-Robin brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
@@ -2146,44 +2687,244 @@ namespace getfem {
s = gmm::vect_size(*A);
if (mf_a) s = s * mf_a->get_qdim() / mf_a->nb_dof();
GMM_ASSERT1(s == Q*Q,
- "Bad format Fourier-Robin brick coefficient");
-
+ "Bad format Fourier-Robin brick coefficient");
+
GMM_TRACE2("Fourier-Robin term assembly");
gmm::clear(matl[0]);
if (mf_a)
- asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
+ asm_qu_term(matl[0], mim, mf_u, *mf_a, *A, rg);
else
- asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
+ asm_homogeneous_qu_term(matl[0], mim, mf_u, *A, rg);
}
Fourier_Robin_brick(void) {
set_flags("Fourier Robin condition", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
size_type add_Fourier_Robin_brick(model &md, const mesh_im &mim,
- const std::string &varname,
- const std::string &dataname,
- size_type region) {
+ const std::string &varname,
+ const std::string &dataname,
+ size_type region) {
pbrick pbr = new Fourier_Robin_brick;
model::termlist tl;
tl.push_back(model::term_description(varname, varname, true));
return md.add_brick(pbr, model::varnamelist(1, varname),
- model::varnamelist(1, dataname), tl,
- model::mimlist(1, &mim), region);
+ model::varnamelist(1, dataname), tl,
+ model::mimlist(1, &mim), region);
}
// ----------------------------------------------------------------------
//
+ // Basic nonlinear brick
+ //
+ // ----------------------------------------------------------------------
+
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+ class basic_nonlinear_term : public nonlinear_elem_term {
+
+ public:
+ dim_type N;
+ const mesh_fem &mf_u;
+ std::vector<scalar_type> U;
+ scalar_type param;
+ base_small_vector V;
+ base_vector coeff;
+ std::string f, dfdu, varname, paramname;
+ mu::Parser parser;
+ bgeot::multi_index sizes_;
+ int version;
+
+ template <class VECT> basic_nonlinear_term
+ (const mesh_fem &mf_u_, const VECT &U_, scalar_type param_,
+ const std::string &f_, const std::string &dfdu_,
+ const std::string &varname_, const std::string ¶mname_,
+ int version_)
+ : N(mf_u_.linked_mesh().dim()), mf_u(mf_u_), U(mf_u.nb_basic_dof()),
+ param(param_), f(f_), dfdu(dfdu_), varname(varname_),
+ paramname(paramname_), version(version_) {
+ sizes_.resize(1); sizes_[0] = 1;
+ V.resize(1);
+ mf_u.extend_vector(U_, U);
+
+ switch (version) {
+ case 0 : parser.SetExpr(dfdu); break; // tangent matrix
+ case 1 : parser.SetExpr(f); break; // rhs
+ }
+ parser.DefineVar(varname, &V[0]);
+ if (paramname.size()) parser.DefineVar(paramname, ¶m);
+ }
+
+ const bgeot::multi_index &sizes() const { return sizes_; }
+
+ virtual void compute(fem_interpolation_context &ctx,
+ bgeot::base_tensor &t) {
+ size_type cv = ctx.convex_num();
+ t.adjust_sizes(sizes_);
+ coeff.resize(mf_u.nb_basic_dof_of_element(cv));
+ gmm::copy(gmm::sub_vector
+ (U, gmm::sub_index
+ (mf_u.ind_basic_dof_of_element(cv))), coeff);
+ ctx.pf()->interpolation(ctx, coeff, V, 1);
+
+ try {
+ t[0] = scalar_type(parser.Eval());
+ } catch (mu::Parser::exception_type &e) {
+ std::cerr << "Message : " << e.GetMsg() << std::endl;
+ std::cerr << "Formula : " << e.GetExpr() << std::endl;
+ std::cerr << "Token : " << e.GetToken() << std::endl;
+ std::cerr << "Position : " << e.GetPos() << std::endl;
+ std::cerr << "Errc : " << e.GetCode() << std::endl;
+ GMM_ASSERT1(false, "error in the expressions");
+ }
+ }
+
+ };
+
+ template<typename MAT, typename VECT>
+ void asm_basic_nonlinear_tangent_matrix
+ (const MAT &K, const mesh_im &mim, const mesh_fem &mf_u, const VECT &U,
+ const std::string &f, const std::string &dfdu, const std::string &varname,
+ const mesh_region &rg = mesh_region::all_convexes(),
+ scalar_type param = 0., const std::string ¶mname = std::string()) {
+
+ basic_nonlinear_term nterm(mf_u, U, param, f, dfdu,
+ varname, paramname, 0);
+
+ generic_assembly assem;
+ assem.set("M(#1,#1)+=sym(comp(NonLin(#1).Base(#1).Base(#1))(i,:,:))");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_mat(const_cast<MAT &>(K));
+ assem.assembly(rg);
+ }
+
+ template<typename VECT>
+ void asm_basic_nonlinear_rhs
+ (const VECT &V, const mesh_im &mim, const mesh_fem &mf_u, const VECT &U,
+ const std::string &f, const std::string &dfdu, const std::string &varname,
+ const mesh_region &rg = mesh_region::all_convexes(),
+ scalar_type param = 0., const std::string ¶mname = std::string()) {
+
+ basic_nonlinear_term nterm(mf_u, U, param, f, dfdu,
+ varname, paramname, 1);
+
+ generic_assembly assem;
+ assem.set("V(#1)+=comp(NonLin(#1).Base(#1))(i,:)");
+ assem.push_mi(mim);
+ assem.push_mf(mf_u);
+ assem.push_nonlinear_term(&nterm);
+ assem.push_vec(const_cast<VECT &>(V));
+ assem.assembly(rg);
+ }
+
+#endif
+
+ struct basic_nonlinear_brick : public virtual_brick {
+
+ std::string f, dfdu;
+
+ virtual void asm_real_tangent_terms(const model &md, size_type /* ib */,
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
+ GMM_ASSERT1(mims.size() == 1,
+ "basic nonlinear brick needs a single mesh_im");
+ GMM_ASSERT1(vl.size() == 1,
+ "basic nonlinear brick needs a single variable");
+ GMM_ASSERT1(dl.size() <= 1,
+ "wrong number of data for basic nonlinear brick");
+ GMM_ASSERT1(matl.size() == 1, "wrong number of terms for basic "
+ "nonlinear brick");
+
+ const model_real_plain_vector &u = md.real_variable(vl[0]);
+ const mesh_fem &mf_u = *(md.pmesh_fem_of_variable(vl[0]));
+ size_type Q = mf_u.get_qdim();
+ GMM_ASSERT1(Q == 1, "basic nonlinear brick is only for scalar field, "
+ "sorry");
+
+ const model_real_plain_vector *vparam = 0;
+ if (dl.size()) {
+ vparam = &md.real_variable(dl[0]) ;
+ size_type sl = gmm::vect_size(*vparam);
+ GMM_ASSERT1(sl == 1, "the parameter in basic nonlinear brick "
+ "has to be scalar");
+ }
+
+ const mesh_im &mim = *mims[0];
+ mesh_region rg(region);
+ mf_u.linked_mesh().intersect_with_mpi_region(rg);
+
+#if GETFEM_HAVE_MUPARSER_MUPARSER_H || GETFEM_HAVE_MUPARSER_H
+
+ if (version & model::BUILD_MATRIX) {
+ gmm::clear(matl[0]);
+ GMM_TRACE2("basic nonlinear stiffness matrix assembly");
+ if (dl.size())
+ asm_basic_nonlinear_tangent_matrix(matl[0], mim, mf_u, u, f, dfdu,
+ vl[0], rg, (*vparam)[0], dl[0]);
+ else
+ asm_basic_nonlinear_tangent_matrix(matl[0], mim, mf_u, u,
+ f, dfdu, vl[0], rg);
+ }
+
+ if (version & model::BUILD_RHS) {
+ if (dl.size())
+ asm_basic_nonlinear_rhs(vecl[0], mim, mf_u, u,
+ f, dfdu, vl[0], rg, (*vparam)[0], dl[0]);
+ else
+ asm_basic_nonlinear_rhs(vecl[0], mim, mf_u, u, f, dfdu, vl[0], rg);
+ gmm::scale(vecl[0], scalar_type(-1));
+ }
+
+#else
+
+ GMM_ASSERT1(false, "Muparser is not installed, "
+ "you cannot use basic nonlinear brick");
+
+#endif
+ }
+
+ basic_nonlinear_brick(const std::string &f_, const std::string &dfdu_)
+ : f(f_), dfdu(dfdu_)
+ { set_flags("basic nonlinear brick", false /* is linear*/,
+ true /* is symmetric */, false /* is coercive */,
+ true /* is real */, false /* is complex */);
+ }
+
+ };
+
+ size_type add_basic_nonlinear_brick
+ (model &md, const mesh_im &mim, const std::string &varname,
+ const std::string &f, const std::string &dfdu, size_type region,
+ const std::string &dataname) {
+ pbrick pbr = new basic_nonlinear_brick(f, dfdu);
+ model::termlist tl;
+ tl.push_back(model::term_description(varname, varname, true));
+ model::varnamelist vl(1, varname);
+ model::varnamelist dl;
+ if (dataname.size()) dl.push_back(dataname);
+ return md.add_brick(pbr, vl, dl, tl, model::mimlist(1, &mim), region);
+ }
+
+ // ----------------------------------------------------------------------
+ //
// Constraint brick
//
// ----------------------------------------------------------------------
struct have_private_data_brick : public virtual_brick {
-
+
model_real_sparse_matrix rB;
model_complex_sparse_matrix cB;
model_real_plain_vector rL;
@@ -2192,87 +2933,82 @@ namespace getfem {
};
struct constraint_brick : public have_private_data_brick {
-
+
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type, build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type, build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Constraint brick has one and only one term");
+ "Constraint brick has one and only one term");
GMM_ASSERT1(mims.size() == 0,
- "Constraint brick need no mesh_im");
+ "Constraint brick need no mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 1,
- "Wrong number of variables for constraint brick");
+ "Wrong number of variables for constraint brick");
bool penalized = (vl.size() == 1);
const model_real_plain_vector *COEFF = 0;
if (penalized) {
- COEFF = &(md.real_variable(dl[0]));
- GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
- "Data for coefficient should be a scalar");
- }
-
- if (penalized) {
- gmm::mult(gmm::transposed(rB), gmm::scaled(rL, gmm::abs((*COEFF)[0])),
- vecl[0]);
- gmm::mult(gmm::transposed(rB), gmm::scaled(rB, gmm::abs((*COEFF)[0])),
- matl[0]);
+ COEFF = &(md.real_variable(dl[0]));
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
+
+ gmm::mult(gmm::transposed(rB), gmm::scaled(rL, gmm::abs((*COEFF)[0])),
+ vecl[0]);
+ gmm::mult(gmm::transposed(rB), gmm::scaled(rB, gmm::abs((*COEFF)[0])),
+ matl[0]);
} else {
- gmm::copy(rL, vecl[0]);
- gmm::copy(rB, matl[0]);
+ gmm::copy(rL, vecl[0]);
+ gmm::copy(rB, matl[0]);
}
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Constraint brick has one and only one term");
+ "Constraint brick has one and only one term");
GMM_ASSERT1(mims.size() == 0,
- "Constraint brick need no mesh_im");
+ "Constraint brick need no mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() <= 1,
- "Wrong number of variables for constraint brick");
-
+ "Wrong number of variables for constraint brick");
+
bool penalized = (vl.size() == 1);
const model_complex_plain_vector *COEFF = 0;
if (penalized) {
- COEFF = &(md.complex_variable(dl[0]));
- GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
- "Data for coefficient should be a scalar");
- }
-
- if (penalized) {
- gmm::mult(gmm::transposed(cB), gmm::scaled(cL, gmm::abs((*COEFF)[0])),
- vecl[0]);
- gmm::mult(gmm::transposed(cB), gmm::scaled(cB, gmm::abs((*COEFF)[0])),
- matl[0]);
+ COEFF = &(md.complex_variable(dl[0]));
+ GMM_ASSERT1(gmm::vect_size(*COEFF) == 1,
+ "Data for coefficient should be a scalar");
+
+ gmm::mult(gmm::transposed(cB), gmm::scaled(cL, gmm::abs((*COEFF)[0])),
+ vecl[0]);
+ gmm::mult(gmm::transposed(cB), gmm::scaled(cB, gmm::abs((*COEFF)[0])),
+ matl[0]);
} else {
- gmm::copy(cL, vecl[0]);
- gmm::copy(cB, matl[0]);
+ gmm::copy(cL, vecl[0]);
+ gmm::copy(cB, matl[0]);
}
}
constraint_brick(bool penalized) {
set_flags(penalized ? "Constraint with penalization brick"
- : "Constraint with multipliers brick",
- true /* is linear*/,
- true /* is symmetric */, penalized /* is coercive */,
- true /* is real */, true /* is complex */);
+ : "Constraint with multipliers brick",
+ true /* is linear*/,
+ true /* is symmetric */, penalized /* is coercive */,
+ true /* is real */, true /* is complex */);
}
-
};
model_real_sparse_matrix &set_private_data_brick_real_matrix
@@ -2330,7 +3066,7 @@ namespace getfem {
model::varnamelist dl(1, coeffname);
return md.add_brick(pbr, vl, dl, tl, model::mimlist(), size_type(-1));
}
-
+
size_type add_constraint_with_multipliers
(model &md, const std::string &varname, const std::string &multname) {
pbrick pbr = new constraint_brick(false);
@@ -2350,45 +3086,46 @@ namespace getfem {
// ----------------------------------------------------------------------
struct explicit_matrix_brick : public have_private_data_brick {
-
+
virtual void asm_real_tangent_terms(const model &, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type, build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type, build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Explicit matrix has one and only one term");
+ "Explicit matrix has one and only one term");
GMM_ASSERT1(mims.size() == 0, "Explicit matrix need no mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() == 0,
- "Wrong number of variables for explicit matrix brick");
+ "Wrong number of variables for explicit matrix brick");
gmm::copy(rB, matl[0]);
}
virtual void asm_complex_tangent_terms(const model &, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Explicit matrix has one and only one term");
+ "Explicit matrix has one and only one term");
GMM_ASSERT1(mims.size() == 0, "Explicit matrix need no mesh_im");
GMM_ASSERT1(vl.size() >= 1 && vl.size() <= 2 && dl.size() == 0,
- "Wrong number of variables for explicit matrix brick");
+ "Wrong number of variables for explicit matrix brick");
gmm::copy(cB, matl[0]);
}
explicit_matrix_brick(bool symmetric_, bool coercive_) {
set_flags("Explicit matrix brick",
- true /* is linear*/,
- symmetric_ /* is symmetric */, coercive_ /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is linear*/,
+ symmetric_ /* is symmetric */, coercive_ /* is coercive */,
+ true /* is real */, true /* is complex */,
+ true /* is to be computed each time */);
}
};
@@ -2411,49 +3148,49 @@ namespace getfem {
// ----------------------------------------------------------------------
struct explicit_rhs_brick : public have_private_data_brick {
-
+
virtual void asm_real_tangent_terms(const model &, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type, build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type, build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Explicit rhs has one and only one term");
+ "Explicit rhs has one and only one term");
GMM_ASSERT1(mims.size() == 0, "Explicit rhs need no mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 0,
- "Wrong number of variables for explicit rhs brick");
+ "Wrong number of variables for explicit rhs brick");
gmm::copy(rL, vecl[0]);
}
virtual void asm_complex_tangent_terms(const model &, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type,
+ build_version) const {
GMM_ASSERT1(vecl.size() == 1 && matl.size() == 1,
- "Explicit rhs has one and only one term");
+ "Explicit rhs has one and only one term");
GMM_ASSERT1(mims.size() == 0, "Explicit rhs need no mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() == 0,
- "Wrong number of variables for explicit rhs brick");
+ "Wrong number of variables for explicit rhs brick");
gmm::copy(cL, vecl[0]);
-
+
}
explicit_rhs_brick(void) {
set_flags("Explicit rhs brick",
- true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is linear*/,
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */,
+ true /* is to be computed each time */);
}
-
};
size_type add_explicit_rhs
@@ -2476,84 +3213,83 @@ namespace getfem {
struct iso_lin_elasticity_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(matl.size() == 1,
- "isotropic linearized elasticity brick has one and only "
- "one term");
+ "isotropic linearized elasticity brick has one and only "
+ "one term");
GMM_ASSERT1(mims.size() == 1,
- "isotropic linearized elasticity brick need one and only "
- "one mesh_im");
+ "isotropic linearized elasticity brick need one and only "
+ "one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
- "Wrong number of variables for isotropic linearized "
- "elasticity brick");
+ "Wrong number of variables for isotropic linearized "
+ "elasticity brick");
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
- || md.is_var_newer_than_brick(dl[0], ib)
- || md.is_var_newer_than_brick(dl[1], ib);
+ || md.is_var_newer_than_brick(dl[0], ib)
+ || md.is_var_newer_than_brick(dl[1], ib);
if (recompute_matrix) {
- const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- size_type N = m.dim(), Q = mf_u.get_qdim();
- GMM_ASSERT1(Q == N, "isotropic linearized elasticity brick is only "
- "for vector field of the same dimension as the mesh");
- const mesh_im &mim = *mims[0];
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
- const mesh_fem *mf_lambda = md.pmesh_fem_of_variable(dl[0]);
- const model_real_plain_vector *lambda = &(md.real_variable(dl[0]));
- const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dl[1]);
- const model_real_plain_vector *mu = &(md.real_variable(dl[1]));
-
- size_type sl = gmm::vect_size(*lambda);
- if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
- size_type sm = gmm::vect_size(*mu);
- if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
-
- GMM_ASSERT1(sl == 1 && sm == 1, "Bad format of isotropic linearized "
- "elasticity brick coefficients");
- GMM_ASSERT1(mf_lambda == mf_mu,
- "The two coefficients should be described on the same "
- "finite element method.");
-
- GMM_TRACE2("Stiffness matrix assembly for isotropic linearized "
- "elasticity");
- gmm::clear(matl[0]);
- if (mf_lambda)
- asm_stiffness_matrix_for_linear_elasticity
- (matl[0], mim, mf_u, *mf_lambda, *lambda, *mu, rg);
- else
- asm_stiffness_matrix_for_homogeneous_linear_elasticity
- (matl[0], mim, mf_u, *lambda, *mu, rg);
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ size_type N = m.dim(), Q = mf_u.get_qdim();
+ GMM_ASSERT1(Q == N, "isotropic linearized elasticity brick is only "
+ "for vector field of the same dimension as the mesh");
+ const mesh_im &mim = *mims[0];
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+ const mesh_fem *mf_lambda = md.pmesh_fem_of_variable(dl[0]);
+ const model_real_plain_vector *lambda = &(md.real_variable(dl[0]));
+ const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dl[1]);
+ const model_real_plain_vector *mu = &(md.real_variable(dl[1]));
+
+ size_type sl = gmm::vect_size(*lambda);
+ if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
+ size_type sm = gmm::vect_size(*mu);
+ if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
+
+ GMM_ASSERT1(sl == 1 && sm == 1, "Bad format of isotropic linearized "
+ "elasticity brick coefficients");
+ GMM_ASSERT1(mf_lambda == mf_mu,
+ "The two coefficients should be described on the same "
+ "finite element method.");
+
+ GMM_TRACE2("Stiffness matrix assembly for isotropic linearized "
+ "elasticity");
+ gmm::clear(matl[0]);
+ if (mf_lambda)
+ asm_stiffness_matrix_for_linear_elasticity
+ (matl[0], mim, mf_u, *mf_lambda, *lambda, *mu, rg);
+ else
+ asm_stiffness_matrix_for_homogeneous_linear_elasticity
+ (matl[0], mim, mf_u, *lambda, *mu, rg);
}
if (dl.size() == 3) { // Pre-constraints given by an "initial"
- // displacement u0. Means that the computed displacement will be u - u0
- // The displacement u0 should be discribed on the same fem as the
- // variable.
- gmm::mult(matl[0],
- gmm::scaled(md.real_variable(dl[2]), scalar_type(-1)),
- vecl[0]);
-
+ // displacement u0. Means that the computed displacement will be u - u0
+ // The displacement u0 should be discribed on the same fem as the
+ // variable.
+ gmm::mult(matl[0],
+ gmm::scaled(md.real_variable(dl[2]), scalar_type(-1)),
+ vecl[0]);
}
}
virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type) const {
const model_real_plain_vector &u = md.real_variable(vl[0]);
return gmm::vect_sp(matl[0], u, u) / scalar_type(2);
}
@@ -2561,8 +3297,8 @@ namespace getfem {
iso_lin_elasticity_brick(void) {
set_flags("isotropic linearized elasticity", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, false /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, false /* is complex */);
}
};
@@ -2578,12 +3314,12 @@ namespace getfem {
dl.push_back(dataname2);
if (dataname3.size()) dl.push_back(dataname3);
return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
- model::mimlist(1, &mim), region);
+ model::mimlist(1, &mim), region);
}
void compute_isotropic_linearized_Von_Mises_or_Tresca
(model &md, const std::string &varname, const std::string &dataname_lambda,
- const std::string &dataname_mu, const mesh_fem &mf_vm,
+ const std::string &dataname_mu, const mesh_fem &mf_vm,
model_real_plain_vector &VM, bool tresca) {
const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
@@ -2591,32 +3327,32 @@ namespace getfem {
const model_real_plain_vector *lambda=&(md.real_variable(dataname_lambda));
const mesh_fem *mf_mu = md.pmesh_fem_of_variable(dataname_mu);
const model_real_plain_vector *mu = &(md.real_variable(dataname_mu));
-
+
size_type sl = gmm::vect_size(*lambda);
if (mf_lambda) sl = sl * mf_lambda->get_qdim() / mf_lambda->nb_dof();
size_type sm = gmm::vect_size(*mu);
if (mf_mu) sm = sm * mf_mu->get_qdim() / mf_mu->nb_dof();
-
+
GMM_ASSERT1(sl == 1 && sm == 1, "Bad format for Lamé coefficients");
GMM_ASSERT1(mf_lambda == mf_mu,
- "The two Lamé coefficients should be described on the same "
- "finite element method.");
+ "The two Lamé coefficients should be described on the same "
+ "finite element method.");
if (mf_lambda) {
getfem::interpolation_von_mises_or_tresca(mf_u, mf_vm,
- md.real_variable(varname), VM,
- *mf_lambda, *lambda,
- *mf_lambda, *mu,
- tresca);
+ md.real_variable(varname), VM,
+ *mf_lambda, *lambda,
+ *mf_lambda, *mu,
+ tresca);
} else {
mf_lambda = &(classical_mesh_fem(mf_u.linked_mesh(), 0));
model_real_plain_vector LAMBDA(mf_lambda->nb_dof(), (*lambda)[0]);
model_real_plain_vector MU(mf_lambda->nb_dof(), (*mu)[0]);
getfem::interpolation_von_mises_or_tresca(mf_u, mf_vm,
- md.real_variable(varname), VM,
- *mf_lambda, LAMBDA,
- *mf_lambda, MU,
- tresca);
+ md.real_variable(varname), VM,
+ *mf_lambda, LAMBDA,
+ *mf_lambda, MU,
+ tresca);
}
}
@@ -2627,25 +3363,25 @@ namespace getfem {
// ----------------------------------------------------------------------
struct linear_incompressibility_brick : public virtual_brick {
-
+
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type region,
- build_version) const {
-
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
+
GMM_ASSERT1((matl.size() == 1 && dl.size() == 0)
- || (matl.size() == 2 && dl.size() == 1),
- "Wrong term and/or data number for Linear incompressibility "
- "brick.");
+ || (matl.size() == 2 && dl.size() == 1),
+ "Wrong term and/or data number for Linear incompressibility "
+ "brick.");
GMM_ASSERT1(mims.size() == 1, "Linear incompressibility brick need one "
- "and only one mesh_im");
+ "and only one mesh_im");
GMM_ASSERT1(vl.size() == 2, "Wrong number of variables for linear "
- "incompressibility brick");
+ "incompressibility brick");
bool penalized = (dl.size() == 1);
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
@@ -2655,11 +3391,11 @@ namespace getfem {
const mesh_fem *mf_data = 0;
if (penalized) {
- COEFF = &(md.real_variable(dl[0]));
- mf_data = md.pmesh_fem_of_variable(dl[0]);
- size_type s = gmm::vect_size(*COEFF);
- if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
- GMM_ASSERT1(s == 1, "Bad format for the penalization parameter");
+ COEFF = &(md.real_variable(dl[0]));
+ mf_data = md.pmesh_fem_of_variable(dl[0]);
+ size_type s = gmm::vect_size(*COEFF);
+ if (mf_data) s = s * mf_data->get_qdim() / mf_data->nb_dof();
+ GMM_ASSERT1(s == 1, "Bad format for the penalization parameter");
}
mesh_region rg(region);
@@ -2670,27 +3406,26 @@ namespace getfem {
asm_stokes_B(matl[0], mim, mf_u, mf_p, rg);
if (penalized) {
- gmm::clear(matl[1]);
- if (mf_data) {
- asm_mass_matrix_param(matl[1], mim, mf_p, *mf_data, *COEFF, rg);
- gmm::scale(matl[1], scalar_type(-1));
- }
- else {
- asm_mass_matrix(matl[1], mim, mf_p, rg);
- gmm::scale(matl[1], -(*COEFF)[0]);
- }
+ gmm::clear(matl[1]);
+ if (mf_data) {
+ asm_mass_matrix_param(matl[1], mim, mf_p, *mf_data, *COEFF, rg);
+ gmm::scale(matl[1], scalar_type(-1));
+ }
+ else {
+ asm_mass_matrix(matl[1], mim, mf_p, rg);
+ gmm::scale(matl[1], -(*COEFF)[0]);
+ }
}
}
linear_incompressibility_brick(void) {
set_flags("Linear incompressibility brick",
- true /* is linear*/,
- true /* is symmetric */, false /* is coercive */,
- true /* is real */, false /* is complex */);
+ true /* is linear*/,
+ true /* is symmetric */, false /* is coercive */,
+ true /* is real */, false /* is complex */);
}
-
};
size_type add_linear_incompressibility
@@ -2721,111 +3456,111 @@ namespace getfem {
struct mass_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Mass brick has one and only one term");
+ "Mass brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Mass brick need one and only one mesh_im");
+ "Mass brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
- "Wrong number of variables for mass brick");
+ "Wrong number of variables for mass brick");
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
const mesh_im &mim = *mims[0];
mesh_region rg(region);
m.intersect_with_mpi_region(rg);
-
+
const mesh_fem *mf_rho = 0;
const model_real_plain_vector *rho = 0;
if (dl.size()) {
- mf_rho = md.pmesh_fem_of_variable(dl[0]);
- rho = &(md.real_variable(dl[0]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
+ mf_rho = md.pmesh_fem_of_variable(dl[0]);
+ rho = &(md.real_variable(dl[0]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
}
GMM_TRACE2("Mass matrix assembly");
gmm::clear(matl[0]);
if (dl.size() && mf_rho) {
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
} else {
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
}
}
virtual scalar_type asm_real_pseudo_potential(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::real_matlist &matl,
- model::real_veclist &,
- model::real_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::real_matlist &matl,
+ model::real_veclist &,
+ model::real_veclist &,
+ size_type) const {
const model_real_plain_vector &U = md.real_variable(vl[0]);
return gmm::vect_sp(matl[0], U, U) / scalar_type(2);
}
virtual void asm_complex_tangent_terms(const model &md, size_type,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type region,
- build_version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type region,
+ build_version) const {
GMM_ASSERT1(matl.size() == 1,
- "Mass brick has one and only one term");
+ "Mass brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Mass brick need one and only one mesh_im");
+ "Mass brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() <= 1,
- "Wrong number of variables for mass brick");
-
+ "Wrong number of variables for mass brick");
+
const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
const mesh &m = mf_u.linked_mesh();
const mesh_im &mim = *mims[0];
mesh_region rg(region);
m.intersect_with_mpi_region(rg);
-
+
const mesh_fem *mf_rho = 0;
const model_complex_plain_vector *rho = 0;
-
+
if (dl.size()) {
- mf_rho = md.pmesh_fem_of_variable(dl[0]);
- rho = &(md.complex_variable(dl[0]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
+ mf_rho = md.pmesh_fem_of_variable(dl[0]);
+ rho = &(md.complex_variable(dl[0]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format of mass brick coefficient");
}
-
+
GMM_TRACE2("Mass matrix assembly");
gmm::clear(matl[0]);
if (dl.size() && mf_rho) {
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
} else {
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size()) gmm::scale(matl[0], (*rho)[0]);
}
}
virtual scalar_type asm_complex_pseudo_potential(const model &md,size_type,
- const model::varnamelist &vl,
- const model::varnamelist &,
- const model::mimlist &,
- model::complex_matlist &matl,
- model::complex_veclist &,
- model::complex_veclist &,
- size_type) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &,
+ const model::mimlist &,
+ model::complex_matlist &matl,
+ model::complex_veclist &,
+ model::complex_veclist &,
+ size_type) const {
const model_complex_plain_vector &U = md.complex_variable(vl[0]);
return gmm::real(gmm::vect_hp(matl[0], U, U) / scalar_type(2));
}
@@ -2833,8 +3568,8 @@ namespace getfem {
mass_brick(void) {
set_flags("Mass brick", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
@@ -2849,7 +3584,7 @@ namespace getfem {
if (dataname_rho.size())
dl.push_back(dataname_rho);
return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
- model::mimlist(1, &mim), region);
+ model::mimlist(1, &mim), region);
}
@@ -2863,131 +3598,131 @@ namespace getfem {
struct basic_d_on_dt_brick : public virtual_brick {
virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(matl.size() == 1,
- "Basic d/dt brick has one and only one term");
+ "Basic d/dt brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Basic d/dt brick need one and only one mesh_im");
+ "Basic d/dt brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
- "Wrong number of variables for basic d/dt brick");
+ "Wrong number of variables for basic d/dt brick");
// It should me more convenient not to recompute the matrix if only
// dt is modified
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
- || (md.is_var_newer_than_brick(dl[1], ib));
+ || (md.is_var_newer_than_brick(dl[1], ib));
if (dl.size() > 2)
- recompute_matrix = recompute_matrix ||
- md.is_var_newer_than_brick(dl[2], ib);
+ recompute_matrix = recompute_matrix ||
+ md.is_var_newer_than_brick(dl[2], ib);
-
- if (recompute_matrix) {
- const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- const mesh_im &mim = *mims[0];
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
-
- const model_real_plain_vector &dt = md.real_variable(dl[1]);
- GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
-
- const mesh_fem *mf_rho = 0;
- const model_real_plain_vector *rho = 0;
-
- if (dl.size() > 2) {
- mf_rho = md.pmesh_fem_of_variable(dl[2]);
- rho = &(md.real_variable(dl[2]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format for density");
- }
- GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
- if (dl.size() > 2 && mf_rho) {
- gmm::clear(matl[0]);
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
- gmm::scale(matl[0], scalar_type(1) / dt[0]);
- } else {
- gmm::clear(matl[0]);
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
- else gmm::scale(matl[0], scalar_type(1) / dt[0]);
- }
+ if (recompute_matrix) {
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ const mesh_im &mim = *mims[0];
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+
+ const model_real_plain_vector &dt = md.real_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
+
+ const mesh_fem *mf_rho = 0;
+ const model_real_plain_vector *rho = 0;
+
+ if (dl.size() > 2) {
+ mf_rho = md.pmesh_fem_of_variable(dl[2]);
+ rho = &(md.real_variable(dl[2]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format for density");
+ }
+
+ GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
+ if (dl.size() > 2 && mf_rho) {
+ gmm::clear(matl[0]);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ gmm::scale(matl[0], scalar_type(1) / dt[0]);
+ } else {
+ gmm::clear(matl[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
+ else gmm::scale(matl[0], scalar_type(1) / dt[0]);
+ }
}
gmm::mult(matl[0], md.real_variable(dl[0], 1), vecl[0]);
}
-
+
virtual void asm_complex_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(matl.size() == 1,
- "Basic d/dt brick has one and only one term");
+ "Basic d/dt brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Basic d/dt brick need one and only one mesh_im");
+ "Basic d/dt brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() >= 2 && dl.size() <= 3,
- "Wrong number of variables for basic d/dt brick");
+ "Wrong number of variables for basic d/dt brick");
// It should me more convenient not to recompute the matrix if only
// dt is modified
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0)
- || (md.is_var_newer_than_brick(dl[1], ib));
+ || (md.is_var_newer_than_brick(dl[1], ib));
if (dl.size() > 2)
- recompute_matrix = recompute_matrix ||
- md.is_var_newer_than_brick(dl[2], ib);
-
- if (recompute_matrix) {
- const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- const mesh_im &mim = *mims[0];
+ recompute_matrix = recompute_matrix ||
+ md.is_var_newer_than_brick(dl[2], ib);
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
-
- const model_complex_plain_vector &dt = md.complex_variable(dl[1]);
- GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
-
- const mesh_fem *mf_rho = 0;
- const model_complex_plain_vector *rho = 0;
-
- if (dl.size() > 2) {
- mf_rho = md.pmesh_fem_of_variable(dl[2]);
- rho = &(md.complex_variable(dl[2]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format for density");
- }
-
- GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
- if (dl.size() > 2 && mf_rho) {
- gmm::clear(matl[0]);
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
- gmm::scale(matl[0], scalar_type(1) / dt[0]);
- } else {
- gmm::clear(matl[0]);
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
- else gmm::scale(matl[0], scalar_type(1) / dt[0]);
- }
+ if (recompute_matrix) {
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ const mesh_im &mim = *mims[0];
+
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+
+ const model_complex_plain_vector &dt = md.complex_variable(dl[1]);
+ GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
+
+ const mesh_fem *mf_rho = 0;
+ const model_complex_plain_vector *rho = 0;
+
+ if (dl.size() > 2) {
+ mf_rho = md.pmesh_fem_of_variable(dl[2]);
+ rho = &(md.complex_variable(dl[2]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format for density");
+ }
+
+ GMM_TRACE2("Mass matrix assembly for d_on_dt brick");
+ if (dl.size() > 2 && mf_rho) {
+ gmm::clear(matl[0]);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ gmm::scale(matl[0], scalar_type(1) / dt[0]);
+ } else {
+ gmm::clear(matl[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size() > 2) gmm::scale(matl[0], (*rho)[0] / dt[0]);
+ else gmm::scale(matl[0], scalar_type(1) / dt[0]);
+ }
}
gmm::mult(matl[0], md.complex_variable(dl[0], 1), vecl[0]);
}
basic_d_on_dt_brick(void) {
set_flags("Basic d/dt brick", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
@@ -3004,7 +3739,7 @@ namespace getfem {
if (dataname_rho.size())
dl.push_back(dataname_rho);
return md.add_brick(pbr, model::varnamelist(1, varname), dl, tl,
- model::mimlist(1, &mim), region);
+ model::mimlist(1, &mim), region);
}
// ----------------------------------------------------------------------
@@ -3020,26 +3755,26 @@ namespace getfem {
mutable scalar_type old_alphadt2;
virtual void asm_real_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::real_matlist &matl,
- model::real_veclist &vecl,
- model::real_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::real_matlist &matl,
+ model::real_veclist &vecl,
+ model::real_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(matl.size() == 1,
- "Basic d2/dt2 brick has one and only one term");
+ "Basic d2/dt2 brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Basic d2/dt2 brick need one and only one mesh_im");
+ "Basic d2/dt2 brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() >= 4 && dl.size() <= 5,
- "Wrong number of variables for basic d2/dt2 brick");
+ "Wrong number of variables for basic d2/dt2 brick");
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0);
if (dl.size() > 4)
- recompute_matrix = recompute_matrix ||
- md.is_var_newer_than_brick(dl[4], ib);
+ recompute_matrix = recompute_matrix ||
+ md.is_var_newer_than_brick(dl[4], ib);
const model_real_plain_vector &dt = md.real_variable(dl[2]);
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
@@ -3048,64 +3783,64 @@ namespace getfem {
scalar_type alphadt2 = gmm::sqr(dt[0]) * alpha[0];
if (!recompute_matrix && alphadt2 != old_alphadt2)
- gmm::scale(matl[0], old_alphadt2/alphadt2);
+ gmm::scale(matl[0], old_alphadt2/alphadt2);
old_alphadt2 = alphadt2;
if (recompute_matrix) {
- const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- const mesh_im &mim = *mims[0];
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
-
- const mesh_fem *mf_rho = 0;
- const model_real_plain_vector *rho = 0;
-
- if (dl.size() > 4) {
- mf_rho = md.pmesh_fem_of_variable(dl[4]);
- rho = &(md.real_variable(dl[4]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format for density");
- }
-
- GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
- if (dl.size() > 4 && mf_rho) {
- gmm::clear(matl[0]);
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
- gmm::scale(matl[0], scalar_type(1) / alphadt2);
- } else {
- gmm::clear(matl[0]);
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
- else gmm::scale(matl[0], scalar_type(1) / alphadt2);
- }
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ const mesh_im &mim = *mims[0];
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+
+ const mesh_fem *mf_rho = 0;
+ const model_real_plain_vector *rho = 0;
+
+ if (dl.size() > 4) {
+ mf_rho = md.pmesh_fem_of_variable(dl[4]);
+ rho = &(md.real_variable(dl[4]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format for density");
+ }
+
+ GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
+ if (dl.size() > 4 && mf_rho) {
+ gmm::clear(matl[0]);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ gmm::scale(matl[0], scalar_type(1) / alphadt2);
+ } else {
+ gmm::clear(matl[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
+ else gmm::scale(matl[0], scalar_type(1) / alphadt2);
+ }
}
gmm::mult(matl[0], md.real_variable(dl[0], 1), vecl[0]);
gmm::mult_add(matl[0], gmm::scaled(md.real_variable(dl[1], 1), dt[0]),
- vecl[0]);
+ vecl[0]);
}
-
+
virtual void asm_complex_tangent_terms(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- const model::mimlist &mims,
- model::complex_matlist &matl,
- model::complex_veclist &vecl,
- model::complex_veclist &,
- size_type region,
- build_version version) const {
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ const model::mimlist &mims,
+ model::complex_matlist &matl,
+ model::complex_veclist &vecl,
+ model::complex_veclist &,
+ size_type region,
+ build_version version) const {
GMM_ASSERT1(matl.size() == 1,
- "Basic d2/dt2 brick has one and only one term");
+ "Basic d2/dt2 brick has one and only one term");
GMM_ASSERT1(mims.size() == 1,
- "Basic d2/dt2 brick need one and only one mesh_im");
+ "Basic d2/dt2 brick need one and only one mesh_im");
GMM_ASSERT1(vl.size() == 1 && dl.size() >= 4 && dl.size() <= 5,
- "Wrong number of variables for basic d2/dt2 brick");
-
+ "Wrong number of variables for basic d2/dt2 brick");
+
bool recompute_matrix = !((version & model::BUILD_ON_DATA_CHANGE) != 0);
if (dl.size() > 4)
- recompute_matrix = recompute_matrix ||
- md.is_var_newer_than_brick(dl[4], ib);
+ recompute_matrix = recompute_matrix ||
+ md.is_var_newer_than_brick(dl[4], ib);
const model_complex_plain_vector &dt = md.complex_variable(dl[2]);
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
@@ -3114,48 +3849,48 @@ namespace getfem {
scalar_type alphadt2 = gmm::real(gmm::sqr(dt[0]) * alpha[0]);
if (!recompute_matrix && alphadt2 != old_alphadt2)
- gmm::scale(matl[0], old_alphadt2/alphadt2);
+ gmm::scale(matl[0], old_alphadt2/alphadt2);
old_alphadt2 = alphadt2;
if (recompute_matrix) {
- const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
- const mesh &m = mf_u.linked_mesh();
- const mesh_im &mim = *mims[0];
- mesh_region rg(region);
- m.intersect_with_mpi_region(rg);
-
- const mesh_fem *mf_rho = 0;
- const model_complex_plain_vector *rho = 0;
-
- if (dl.size() > 4) {
- mf_rho = md.pmesh_fem_of_variable(dl[4]);
- rho = &(md.complex_variable(dl[4]));
- size_type sl = gmm::vect_size(*rho);
- if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
- GMM_ASSERT1(sl == 1, "Bad format for density");
- }
-
- GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
- if (dl.size() > 4 && mf_rho) {
- gmm::clear(matl[0]);
- asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
- gmm::scale(matl[0], scalar_type(1) / alphadt2);
- } else {
- gmm::clear(matl[0]);
- asm_mass_matrix(matl[0], mim, mf_u, rg);
- if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
- else gmm::scale(matl[0], scalar_type(1) / alphadt2);
- }
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(vl[0]);
+ const mesh &m = mf_u.linked_mesh();
+ const mesh_im &mim = *mims[0];
+ mesh_region rg(region);
+ m.intersect_with_mpi_region(rg);
+
+ const mesh_fem *mf_rho = 0;
+ const model_complex_plain_vector *rho = 0;
+
+ if (dl.size() > 4) {
+ mf_rho = md.pmesh_fem_of_variable(dl[4]);
+ rho = &(md.complex_variable(dl[4]));
+ size_type sl = gmm::vect_size(*rho);
+ if (mf_rho) sl = sl * mf_rho->get_qdim() / mf_rho->nb_dof();
+ GMM_ASSERT1(sl == 1, "Bad format for density");
+ }
+
+ GMM_TRACE2("Mass matrix assembly for d2_on_dt2 brick");
+ if (dl.size() > 4 && mf_rho) {
+ gmm::clear(matl[0]);
+ asm_mass_matrix_param(matl[0], mim, mf_u, *mf_rho, *rho, rg);
+ gmm::scale(matl[0], scalar_type(1) / alphadt2);
+ } else {
+ gmm::clear(matl[0]);
+ asm_mass_matrix(matl[0], mim, mf_u, rg);
+ if (dl.size() > 4) gmm::scale(matl[0], (*rho)[0] / alphadt2);
+ else gmm::scale(matl[0], scalar_type(1) / alphadt2);
+ }
}
gmm::mult(matl[0], md.complex_variable(dl[0], 1), vecl[0]);
gmm::mult_add(matl[0], gmm::scaled(md.complex_variable(dl[1], 1), dt[0]),
- vecl[0]);
+ vecl[0]);
}
basic_d2_on_dt2_brick(void) {
set_flags("Basic d2/dt2 brick", true /* is linear*/,
- true /* is symmetric */, true /* is coercive */,
- true /* is real */, true /* is complex */);
+ true /* is symmetric */, true /* is coercive */,
+ true /* is real */, true /* is complex */);
}
};
@@ -3177,7 +3912,7 @@ namespace getfem {
if (dataname_rho.size())
dl.push_back(dataname_rho);
return md.add_brick(pbr, model::varnamelist(1, varnameU), dl, tl,
- model::mimlist(1, &mim), region);
+ model::mimlist(1, &mim), region);
}
@@ -3205,9 +3940,9 @@ namespace getfem {
void set_dispatch_coeff(const model &md, size_type ib) const {
scalar_type theta;
if (md.is_complex())
- theta = gmm::real(md.complex_variable(param_names[0])[0]);
+ theta = gmm::real(md.complex_variable(param_names[0])[0]);
else
- theta = md.real_variable(param_names[0])[0];
+ theta = md.real_variable(param_names[0])[0];
// coefficient for the matrix term
md.matrix_coeff_of_brick(ib) = theta;
// coefficient for the standard rhs
@@ -3219,13 +3954,13 @@ namespace getfem {
template <typename MATLIST, typename VECTLIST>
inline void next_iter(const model &md, size_type ib,
- const model::varnamelist &/* vl */,
- const model::varnamelist &/* dl */,
- MATLIST &/* matl */,
- VECTLIST &vectl, VECTLIST &vectl_sym,
- bool first_iter) const {
+ const model::varnamelist &/* vl */,
+ const model::varnamelist &/* dl */,
+ MATLIST &/* matl */,
+ VECTLIST &vectl, VECTLIST &vectl_sym,
+ bool first_iter) const {
if (first_iter) md.update_brick(ib, model::BUILD_RHS);
-
+
// shift the rhs
transfert(vectl[0], vectl[1]);
transfert(vectl_sym[0], vectl_sym[1]);
@@ -3271,7 +4006,7 @@ namespace getfem {
: virtual_dispatcher(2) {
param_names.push_back(THETA);
}
-
+
};
void add_theta_method_dispatcher
@@ -3284,7 +4019,7 @@ namespace getfem {
void velocity_update_for_order_two_theta_method
(model &md, const std::string &U, const std::string &V,
const std::string &pdt, const std::string &ptheta) {
-
+
// V^{n+1} = (1-1/theta)*V^n + (1/theta)*(U^{n+1} - U^n)/dt
if (md.is_complex()) {
@@ -3292,31 +4027,31 @@ namespace getfem {
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
const model_complex_plain_vector &theta = md.complex_variable(ptheta);
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for parameter theta");
-
+
gmm::copy(gmm::scaled(md.complex_variable(V, 1),
- scalar_type(1) - scalar_type(1) / theta[0]),
- md.set_complex_variable(V, 0));
+ scalar_type(1) - scalar_type(1) / theta[0]),
+ md.set_complex_variable(V, 0));
gmm::add(gmm::scaled(md.complex_variable(U, 0),
- scalar_type(1) / (theta[0]*dt[0])),
- md.set_complex_variable(V, 0));
+ scalar_type(1) / (theta[0]*dt[0])),
+ md.set_complex_variable(V, 0));
gmm::add(gmm::scaled(md.complex_variable(U, 1),
- -scalar_type(1) / (theta[0]*dt[0])),
- md.set_complex_variable(V, 0));
+ -scalar_type(1) / (theta[0]*dt[0])),
+ md.set_complex_variable(V, 0));
} else {
const model_real_plain_vector &dt = md.real_variable(pdt);
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for time step");
const model_real_plain_vector &theta = md.real_variable(ptheta);
GMM_ASSERT1(gmm::vect_size(dt) == 1, "Bad format for parameter theta");
-
+
gmm::copy(gmm::scaled(md.real_variable(V, 1),
- scalar_type(1) - scalar_type(1) / theta[0]),
- md.set_real_variable(V, 0));
+ scalar_type(1) - scalar_type(1) / theta[0]),
+ md.set_real_variable(V, 0));
gmm::add(gmm::scaled(md.real_variable(U, 0),
- scalar_type(1) / (theta[0]*dt[0])),
- md.set_real_variable(V, 0));
+ scalar_type(1) / (theta[0]*dt[0])),
+ md.set_real_variable(V, 0));
gmm::add(gmm::scaled(md.real_variable(U, 1),
- -scalar_type(1) / (theta[0]*dt[0])),
- md.set_real_variable(V, 0));
+ -scalar_type(1) / (theta[0]*dt[0])),
+ md.set_real_variable(V, 0));
}
}
@@ -3332,41 +4067,41 @@ namespace getfem {
const std::string &pgamma) {
md.disable_brick(id2dt2b);
-
+
if (md.is_complex()) {
- typedef std::complex<scalar_type> complex_type;
-
+ // typedef std::complex<scalar_type> complex_type;
+
complex_type twobeta = md.complex_variable(ptwobeta)[0];
complex_type gamma = md.complex_variable(pgamma)[0];
complex_type dt = md.complex_variable(pdt)[0];
// Modification of the parameter for the theta-method.
if (twobeta != gamma) {
- md.set_complex_variable(ptwobeta)[0] = gamma;
- md.set_dispatch_coeff(); // valid the change of coefficients.
+ md.set_complex_variable(ptwobeta)[0] = gamma;
+ md.set_dispatch_coeff(); // valid the change of coefficients.
}
-
+
// Computation of the residual (including the linear parts).
md.assembly(model::BUILD_COMPLETE_RHS);
size_type nbdof = gmm::vect_size(md.complex_variable(U));
model_complex_plain_vector W(nbdof), RHS(nbdof);
gmm::copy(gmm::sub_vector(md.complex_rhs(), md.interval_of_variable(U)),
- RHS);
+ RHS);
// Compute the velocity. Inversion with CG.
gmm::iteration iter(1e-12, 0, 100000);
gmm::cg(md.linear_complex_matrix_term(id2dt2b, 0),
- W, RHS, gmm::identity_matrix(), iter);
+ W, RHS, gmm::identity_matrix(), iter);
GMM_ASSERT1(iter.converged(), "Velocity not well computed");
gmm::add(md.complex_variable(V, 1),
- gmm::scaled(W, complex_type(1)/(twobeta*dt)),
- md.set_complex_variable(V, 0));
-
+ gmm::scaled(W, complex_type(1)/(twobeta*dt)),
+ md.set_complex_variable(V, 0));
+
// Cancel the modification of the parameter for the theta-method.
if (twobeta != gamma) {
- md.set_complex_variable(ptwobeta)[0] = twobeta;
- md.set_dispatch_coeff(); // valid the change of coefficients.
+ md.set_complex_variable(ptwobeta)[0] = twobeta;
+ md.set_dispatch_coeff(); // valid the change of coefficients.
}
@@ -3375,40 +4110,40 @@ namespace getfem {
scalar_type twobeta = md.real_variable(ptwobeta)[0];
scalar_type gamma = md.real_variable(pgamma)[0];
scalar_type dt = md.real_variable(pdt)[0];
-
-
+
+
// Modification of the parameter for the theta-method.
if (twobeta != gamma) {
- md.set_real_variable(ptwobeta)[0] = gamma;
- md.set_dispatch_coeff(); // valid the change of coefficients.
+ md.set_real_variable(ptwobeta)[0] = gamma;
+ md.set_dispatch_coeff(); // valid the change of coefficients.
}
-
+
// Computation of the residual (including the linear parts).
md.assembly(model::BUILD_COMPLETE_RHS);
size_type nbdof = gmm::vect_size(md.real_variable(U));
model_real_plain_vector W(nbdof), RHS(nbdof);
gmm::copy(gmm::sub_vector(md.real_rhs(), md.interval_of_variable(U)),
- RHS);
+ RHS);
// Compute the velocity. Inversion with CG.
gmm::iteration iter(1e-12, 0, 100000);
gmm::cg(md.linear_real_matrix_term(id2dt2b, 0),
- W, RHS, gmm::identity_matrix(), iter);
+ W, RHS, gmm::identity_matrix(), iter);
GMM_ASSERT1(iter.converged(), "Velocity not well computed");
gmm::add(md.real_variable(V, 1),
- gmm::scaled(W, scalar_type(1)/(twobeta*dt)),
- md.set_real_variable(V, 0));
-
+ gmm::scaled(W, scalar_type(1)/(twobeta*dt)),
+ md.set_real_variable(V, 0));
+
// Cancel the modification of the parameter for the theta-method.
if (twobeta != gamma) {
- md.set_real_variable(ptwobeta)[0] = twobeta;
- md.set_dispatch_coeff(); // valid the change of coefficients.
+ md.set_real_variable(ptwobeta)[0] = twobeta;
+ md.set_dispatch_coeff(); // valid the change of coefficients.
}
}
- md.unable_brick(id2dt2b);
+ md.enable_brick(id2dt2b);
}
@@ -3432,31 +4167,31 @@ namespace getfem {
md.rhs_coeffs_of_brick(ib)[0] = scalar_type(1);
md.rhs_coeffs_of_brick(ib)[1] = scalar_type(1)/scalar_type(2);
}
-
+
template <typename MATLIST, typename VECTLIST>
inline void next_iter(const model &md, size_type ib,
- const model::varnamelist &vl,
- const model::varnamelist &dl,
- MATLIST &/* matl */,
- VECTLIST &vectl, VECTLIST &vectl_sym,
- bool first_iter) const {
-
- pbrick pbr = md.get_brick(ib);
-
- if (first_iter) { // For the moment, temporaries are deleted by
- // model::first_iter before the call to virtual_dispatcher::next_iter
- if (!(pbr->is_linear()))
- md.add_temporaries(vl, id_num); // add temporaries for all variables
- md.add_temporaries(dl, id_num); // add temporaries for versionned data
- clear(vectl[1]); clear(vectl_sym[1]);
+ const model::varnamelist &vl,
+ const model::varnamelist &dl,
+ MATLIST &/* matl */,
+ VECTLIST &vectl, VECTLIST &vectl_sym,
+ bool first_iter) const {
+
+ pbrick pbr = md.brick_pointer(ib);
+
+ if (first_iter) { // For the moment, temporaries are deleted by
+ // model::first_iter before the call to virtual_dispatcher::next_iter
+ if (!(pbr->is_linear()))
+ md.add_temporaries(vl, id_num); // add temporaries for all variables
+ md.add_temporaries(dl, id_num); // add temporaries for versionned data
+ clear(vectl[1]); clear(vectl_sym[1]);
}
if (pbr->is_linear()) { // If the problem is linear, add the term
- // coming from the previous iteration as a second rhs.
- // This rhs is only used for this.
- if (first_iter) md.update_brick(ib, model::BUILD_RHS);
- clear(vectl[1]); clear(vectl_sym[1]);
- md.linear_brick_add_to_rhs(ib, 1, 0);
+ // coming from the previous iteration as a second rhs.
+ // This rhs is only used for this.
+ if (first_iter) md.update_brick(ib, model::BUILD_RHS);
+ clear(vectl[1]); clear(vectl_sym[1]);
+ md.linear_brick_add_to_rhs(ib, 1, 0);
}
}
@@ -3483,47 +4218,47 @@ namespace getfem {
std::vector<model::real_veclist> &vectl,
std::vector<model::real_veclist> &vectl_sym,
build_version version) const {
-
+
scalar_type half = scalar_type(1)/scalar_type(2);
- pbrick pbr = md.get_brick(ib);
+ pbrick pbr = md.brick_pointer(ib);
size_type ind;
const model::varnamelist &vl = md.varnamelist_of_brick(ib);
const model::varnamelist &dl = md.datanamelist_of_brick(ib);
if (!(pbr->is_linear())) { // compute the mean variables
- for (size_type i = 0; i < vl.size(); ++i) {
- bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
- if (!is_uptodate && ind != size_type(-1))
- gmm::add(gmm::scaled(md.real_variable(vl[i], 0), half),
- gmm::scaled(md.real_variable(vl[i], 1), half),
- md.set_real_variable(vl[i], ind));
- md.set_default_iter_of_variable(vl[i], ind);
- }
+ for (size_type i = 0; i < vl.size(); ++i) {
+ bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
+ if (!is_uptodate && ind != size_type(-1))
+ gmm::add(gmm::scaled(md.real_variable(vl[i], 0), half),
+ gmm::scaled(md.real_variable(vl[i], 1), half),
+ md.set_real_variable(vl[i], ind));
+ md.set_default_iter_of_variable(vl[i], ind);
+ }
}
// compute the mean data
for (size_type i = 0; i < dl.size(); ++i) {
- bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
- if (!is_uptodate && ind != size_type(-1)) {
- gmm::add(gmm::scaled(md.real_variable(dl[i], 0), half),
- gmm::scaled(md.real_variable(dl[i], 1), half),
- md.set_real_variable(dl[i], ind));
- }
- md.set_default_iter_of_variable(dl[i], ind);
+ bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
+ if (!is_uptodate && ind != size_type(-1)) {
+ gmm::add(gmm::scaled(md.real_variable(dl[i], 0), half),
+ gmm::scaled(md.real_variable(dl[i], 1), half),
+ md.set_real_variable(dl[i], ind));
+ }
+ md.set_default_iter_of_variable(dl[i], ind);
}
-
+
// call the brick for the mid-time step.
md.brick_call(ib, version, 0);
if (pbr->is_linear()) { // update second rhs (is updated by next_iter
- // but the call to the brick may have changed the matrices.
- clear(vectl[1]); clear(vectl_sym[1]);
- md.linear_brick_add_to_rhs(ib, 1, 1);
+ // but the call to the brick may have changed the matrices.
+ clear(vectl[1]); clear(vectl_sym[1]);
+ md.linear_brick_add_to_rhs(ib, 1, 1);
}
-
+
md.reset_default_iter_of_variables(dl);
if (!(pbr->is_linear()))
- md.reset_default_iter_of_variables(vl);
+ md.reset_default_iter_of_variables(vl);
}
virtual void asm_complex_tangent_terms
@@ -3531,52 +4266,52 @@ namespace getfem {
std::vector<model::complex_veclist> &vectl,
std::vector<model::complex_veclist> &vectl_sym,
build_version version) const {
-
+
scalar_type half = scalar_type(1)/scalar_type(2);
- pbrick pbr = md.get_brick(ib);
+ pbrick pbr = md.brick_pointer(ib);
size_type ind;
const model::varnamelist &vl = md.varnamelist_of_brick(ib);
const model::varnamelist &dl = md.datanamelist_of_brick(ib);
if (!(pbr->is_linear())) { // compute the mean variables
- for (size_type i = 0; i < vl.size(); ++i) {
- bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
- if (!is_uptodate && ind != size_type(-1))
- gmm::add(gmm::scaled(md.complex_variable(vl[i], 0), half),
- gmm::scaled(md.complex_variable(vl[i], 1), half),
- md.set_complex_variable(vl[i], ind));
- md.set_default_iter_of_variable(vl[i], ind);
- }
+ for (size_type i = 0; i < vl.size(); ++i) {
+ bool is_uptodate = md.temporary_uptodate(vl[i], id_num, ind);
+ if (!is_uptodate && ind != size_type(-1))
+ gmm::add(gmm::scaled(md.complex_variable(vl[i], 0), half),
+ gmm::scaled(md.complex_variable(vl[i], 1), half),
+ md.set_complex_variable(vl[i], ind));
+ md.set_default_iter_of_variable(vl[i], ind);
+ }
}
// compute the mean data
for (size_type i = 0; i < dl.size(); ++i) {
- bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
- if (!is_uptodate && ind != size_type(-1)) {
- gmm::add(gmm::scaled(md.complex_variable(dl[i], 0), half),
- gmm::scaled(md.complex_variable(dl[i], 1), half),
- md.set_complex_variable(dl[i], ind));
- }
- md.set_default_iter_of_variable(dl[i], ind);
+ bool is_uptodate = md.temporary_uptodate(dl[i], id_num, ind);
+ if (!is_uptodate && ind != size_type(-1)) {
+ gmm::add(gmm::scaled(md.complex_variable(dl[i], 0), half),
+ gmm::scaled(md.complex_variable(dl[i], 1), half),
+ md.set_complex_variable(dl[i], ind));
+ }
+ md.set_default_iter_of_variable(dl[i], ind);
}
-
+
// call the brick for the mid-time step.
md.brick_call(ib, version, 0);
if (pbr->is_linear()) { // update second rhs (is updated by next_iter
- // but the call to the brick may have changed the matrices.
- clear(vectl[1]); clear(vectl_sym[1]);
- md.linear_brick_add_to_rhs(ib, 1, 1);
+ // but the call to the brick may have changed the matrices.
+ clear(vectl[1]); clear(vectl_sym[1]);
+ md.linear_brick_add_to_rhs(ib, 1, 1);
}
-
+
md.reset_default_iter_of_variables(dl);
if (!(pbr->is_linear()))
- md.reset_default_iter_of_variables(vl);
+ md.reset_default_iter_of_variables(vl);
}
midpoint_dispatcher(void) : virtual_dispatcher(2)
{ id_num = act_counter(); }
-
+
};
void add_midpoint_dispatcher(model &md, dal::bit_vector ibricks) {
@@ -3586,6 +4321,5 @@ namespace getfem {
}
-
} /* end of namespace getfem. */
diff --git a/src/getfem_nonlinear_elasticity.cc b/src/getfem_nonlinear_elasticity.cc
index 0809d89..3b26f96 100644
--- a/src/getfem_nonlinear_elasticity.cc
+++ b/src/getfem_nonlinear_elasticity.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_models.h"
@@ -26,7 +26,7 @@
namespace getfem {
- /* Usefull functions to compute the invariants and their derivatives
+ /* Useful functions to compute the invariants and their derivatives
Note that the second derivative is symmetrized (see the user
documentation for more details). The matrix E is assumed to be symmetric.
*/
@@ -69,7 +69,7 @@ namespace getfem {
di1_c = true;
}
- void compute_ddi1(void) { // not very usefull, null tensor
+ void compute_ddi1(void) { // not very useful, null tensor
ddi1 = base_tensor(N, N, N, N);
ddi1_c = true;
}
@@ -282,7 +282,12 @@ namespace getfem {
void abstract_hyperelastic_law::random_E(base_matrix &E) {
size_type N = gmm::mat_nrows(E);
- base_matrix Phi(N,N); gmm::fill_random(Phi);
+ base_matrix Phi(N,N);
+ scalar_type d;
+ do {
+ gmm::fill_random(Phi);
+ d = gmm::lu_det(Phi);
+ } while (d < scalar_type(0.01));
gmm::mult(gmm::transposed(Phi),Phi,E);
gmm::scale(E,-1.); gmm::add(gmm::identity_matrix(),E);
gmm::scale(E,-0.5);
@@ -302,9 +307,11 @@ namespace getfem {
getfem::base_tensor tdsigma(N,N,N,N);
base_matrix dsigma(N,N);
gmm::copy(E, E2); gmm::add(DE, E2);
- sigma(E, sigma1, param); sigma(E2, sigma2, param);
+ sigma(E, sigma1, param, scalar_type(1));
+ sigma(E2, sigma2, param, scalar_type(1));
- scalar_type d = strain_energy(E2, param) - strain_energy(E, param);
+ scalar_type d = strain_energy(E2, param, scalar_type(1))
+ - strain_energy(E, param, scalar_type(1));
scalar_type d2 = 0;
for (size_type i=0; i < N; ++i)
for (size_type j=0; j < N; ++j) d2 += sigma1(i,j)*DE(i,j);
@@ -314,7 +321,7 @@ namespace getfem {
ok = false;
}
- grad_sigma(E,tdsigma,param);
+ grad_sigma(E,tdsigma,param, scalar_type(1));
for (size_type i=0; i < N; ++i) {
for (size_type j=0; j < N; ++j) {
dsigma(i,j) = 0;
@@ -325,7 +332,7 @@ namespace getfem {
}
sigma2(i,j) -= sigma1(i,j);
if (gmm::abs(dsigma(i,j) - sigma2(i,j))
- /(gmm::abs(dsigma(i,j)) + 1e-40) > 1e-4) {
+ /(gmm::abs(dsigma(i,j)) + 1e-40) > 1.5e-4) {
cout << "Test " << count << " wrong derivative of sigma, i="
<< i << ", j=" << j << ", dsigma=" << dsigma(i,j)/h
<< ", var sigma = " << sigma2(i,j)/h << endl;
@@ -337,20 +344,65 @@ namespace getfem {
GMM_ASSERT1(ok, "Derivative test has failed");
}
+ void abstract_hyperelastic_law::cauchy_updated_lagrangian(const base_matrix& F,
+ const base_matrix &E,
+ base_matrix &cauchy_stress,
+ const base_vector ¶ms,
+ scalar_type det_trans) const
+ {
+ size_type N = E.ncols();
+ base_matrix PK2(N,N);
+ sigma(E,PK2,params,det_trans);//second Piola-Kirchhoff stress
+ base_matrix aux(N,N);
+ gmm::mult(F,PK2,aux);
+ gmm::mult(aux,gmm::transposed(F),cauchy_stress);
+ gmm::scale(cauchy_stress,scalar_type(1.0/det_trans)); //cauchy = 1/J*F*PK2*F^T
+ }
+
+
+ void abstract_hyperelastic_law::grad_sigma_updated_lagrangian(const base_matrix& F,
+ const base_matrix& E,
+ const base_vector ¶ms,
+ scalar_type det_trans,
+ base_tensor &grad_sigma_ul)const
+ {
+ size_type N = E.ncols();
+ base_tensor Cse(N,N,N,N);
+ grad_sigma(E,Cse,params,det_trans);
+ scalar_type mult = 1.0/det_trans;
+ // this is a general transformation for an anisotropic material, very non-efficient;
+ // more effiecient calculations can be overloaded for every specific material
+ for(size_type i = 0; i < N; ++i)
+ for(size_type j = 0; j < N; ++j)
+ for(size_type k = 0; k < N; ++k)
+ for(size_type l = 0; l < N; ++l)
+ {
+ grad_sigma_ul(i,j,k,l) = 0.0;
+ for(size_type m = 0; m < N; ++m)
+ { for(size_type n = 0; n < N; ++n)
+ for(size_type p = 0; p < N; ++p)
+ for(size_type q = 0; q < N; ++q)
+ grad_sigma_ul(i,j,k,l)+=
+ F(i,m)*F(j,n)*F(k,p)*F(l,q)*Cse(m,n,p,q);
+ }
+ grad_sigma_ul(i,j,k,l) *= mult;
+ }
+ }
+
scalar_type SaintVenant_Kirchhoff_hyperelastic_law::strain_energy
- (const base_matrix &E, const base_vector ¶ms) const {
+ (const base_matrix &E, const base_vector ¶ms, scalar_type) const {
return gmm::sqr(gmm::mat_trace(E)) * params[0] / scalar_type(2)
+ gmm::mat_euclidean_norm_sqr(E) * params[1];
}
void SaintVenant_Kirchhoff_hyperelastic_law::sigma
- (const base_matrix &E, base_matrix &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_matrix &result,const base_vector ¶ms, scalar_type) const {
gmm::copy(gmm::identity_matrix(), result);
gmm::scale(result, params[0] * gmm::mat_trace(E));
gmm::add(gmm::scaled(E, 2 * params[1]), result);
}
void SaintVenant_Kirchhoff_hyperelastic_law::grad_sigma
- (const base_matrix &E, base_tensor &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_tensor &result,const base_vector ¶ms, scalar_type) const {
std::fill(result.begin(), result.end(), scalar_type(0));
size_type N = gmm::mat_nrows(E);
for (size_type i = 0; i < N; ++i)
@@ -361,6 +413,26 @@ namespace getfem {
}
}
+ void SaintVenant_Kirchhoff_hyperelastic_law::grad_sigma_updated_lagrangian(const base_matrix& F,
+ const base_matrix& E,
+ const base_vector ¶ms,
+ scalar_type det_trans,
+ base_tensor &grad_sigma_ul)const
+ {
+ size_type N = E.ncols();
+ base_tensor Cse(N,N,N,N);
+ grad_sigma(E,Cse,params,det_trans);
+ base_matrix Cinv(N,N); // left Cauchy-Green deform. tens.
+ gmm::mult(F,gmm::transposed(F),Cinv);
+ scalar_type mult=1.0/det_trans;
+ for(size_type i = 0; i < N; ++i)
+ for(size_type j = 0; j < N; ++j)
+ for(size_type k = 0; k < N; ++k)
+ for(size_type l = 0; l < N; ++l)
+ grad_sigma_ul(i, j, k, l)= (Cinv(i,j)*Cinv(k,l)*params[0] +
+ params[1]*(Cinv(i,k)*Cinv(j,l) + Cinv(i,l)*Cinv(j,k)))*mult;
+ }
+
SaintVenant_Kirchhoff_hyperelastic_law::SaintVenant_Kirchhoff_hyperelastic_law(void) {
// an attempt, the first term is missing grad(h)sigma:grad(v)
// adapted_tangent_term_assembly_fem_data = "params=data$1(#2,2);"
@@ -386,18 +458,18 @@ namespace getfem {
}
scalar_type membrane_elastic_law::strain_energy
- (const base_matrix & /* E */, const base_vector & /* params */) const {
+ (const base_matrix & /* E */, const base_vector & /* params */, scalar_type) const {
// to be done if needed
GMM_ASSERT1(false, "To be done");
return 0;
}
void membrane_elastic_law::sigma
- (const base_matrix &E, base_matrix &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_matrix &result,const base_vector ¶ms, scalar_type det_trans) const {
// should be optimized, maybe deriving sigma from strain energy
base_tensor tt(2,2,2,2);
size_type N = gmm::mat_nrows(E);
- grad_sigma(E,tt,params);
+ grad_sigma(E,tt,params, det_trans);
for (size_type i = 0; i < N; ++i)
for (size_type j = 0; j < N; ++j) {
result(i,j)=0.0;
@@ -414,7 +486,7 @@ namespace getfem {
void membrane_elastic_law::grad_sigma
(const base_matrix & /* E */, base_tensor &result,
- const base_vector ¶ms) const {
+ const base_vector ¶ms, scalar_type) const {
// to be optimized!!
std::fill(result.begin(), result.end(), scalar_type(0));
scalar_type poisonXY=params[0]*params[1]/params[2]; //Ex*vYX=Ey*vXY
@@ -439,7 +511,7 @@ namespace getfem {
}
scalar_type Mooney_Rivlin_hyperelastic_law::strain_energy
- (const base_matrix &E, const base_vector ¶ms) const {
+ (const base_matrix &E, const base_vector ¶ms, scalar_type) const {
scalar_type C1 = params[0], C2 = params[1];
size_type N = gmm::mat_nrows(E);
GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -454,7 +526,7 @@ namespace getfem {
void Mooney_Rivlin_hyperelastic_law::sigma
(const base_matrix &E, base_matrix &result,
- const base_vector ¶ms) const {
+ const base_vector ¶ms, scalar_type) const {
scalar_type C1 = params[0], C2 = params[1];
size_type N = gmm::mat_nrows(E);
GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -471,7 +543,7 @@ namespace getfem {
void Mooney_Rivlin_hyperelastic_law::grad_sigma
(const base_matrix &E, base_tensor &result,
- const base_vector ¶ms) const {
+ const base_vector ¶ms, scalar_type) const {
scalar_type C1 = params[0], C2 = params[1];
size_type N = gmm::mat_nrows(E);
GMM_ASSERT1(N == 3, "Mooney Rivlin hyperelastic law only defined "
@@ -494,8 +566,123 @@ namespace getfem {
nb_params_ = 2;
}
+
+
+
+ scalar_type generalized_Blatz_Ko_hyperelastic_law::strain_energy
+ (const base_matrix &E, const base_vector ¶ms, scalar_type det_trans) const {
+ if (det_trans <= scalar_type(0)) return 1e200;
+ scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+ scalar_type n = params[4];
+ size_type N = gmm::mat_nrows(E);
+ GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+ "on dimension 3, sorry");
+ base_matrix C = E;
+ gmm::scale(C, scalar_type(2));
+ gmm::add(gmm::identity_matrix(), C);
+ compute_invariants ci(C);
+
+ return pow(a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+ + c*ci.i2() / ci.i3() + d, n);
+ }
+
+ void generalized_Blatz_Ko_hyperelastic_law::sigma
+ (const base_matrix &E, base_matrix &result,
+ const base_vector ¶ms, scalar_type det_trans) const {
+ scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+ scalar_type n = params[4];
+ size_type N = gmm::mat_nrows(E);
+ GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+ "on dimension 3, sorry");
+ base_matrix C = E;
+ gmm::scale(C, scalar_type(2));
+ gmm::add(gmm::identity_matrix(), C);
+ compute_invariants ci(C);
+
+ scalar_type z = a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+ + c*ci.i2() / ci.i3() + d;
+ scalar_type nz = n * pow(z, n-1.);
+ scalar_type di1 = nz * a;
+ scalar_type di2 = nz * c / ci.i3();
+ scalar_type di3 = nz *
+ (b / (2. * sqrt(gmm::abs(ci.i3()))) - c * ci.i2() / gmm::sqr(ci.i3()));
+
+ gmm::copy(gmm::scaled(ci.grad_i1(), di1 * 2.0), result);
+ gmm::add(gmm::scaled(ci.grad_i2(), di2 * 2.0), result);
+ gmm::add(gmm::scaled(ci.grad_i3(), di3 * 2.0), result);
+ if (det_trans <= scalar_type(0))
+ gmm::add(gmm::scaled(C, 1e200), result);
+
+ }
+
+ void generalized_Blatz_Ko_hyperelastic_law::grad_sigma
+ (const base_matrix &E, base_tensor &result,
+ const base_vector ¶ms, scalar_type) const {
+ scalar_type a = params[0], b = params[1], c = params[2], d = params[3];
+ scalar_type n = params[4];
+ size_type N = gmm::mat_nrows(E);
+ GMM_ASSERT1(N == 3, "Generalized Blatz Ko hyperelastic law only defined "
+ "on dimension 3, sorry");
+ base_matrix C = E;
+ gmm::scale(C, scalar_type(2));
+ gmm::add(gmm::identity_matrix(), C);
+ compute_invariants ci(C);
+
+
+ scalar_type z = a*ci.i1() + b*sqrt(gmm::abs(ci.i3()))
+ + c*ci.i2() / ci.i3() + d;
+ scalar_type nz = n * pow(z, n-1.);
+ scalar_type di1 = nz * a;
+ scalar_type di2 = nz * c / ci.i3();
+ scalar_type y = (b / (2. * sqrt(gmm::abs(ci.i3()))) - c * ci.i2() / gmm::sqr(ci.i3()));
+ scalar_type di3 = nz * y;
+
+ gmm::copy(gmm::scaled(ci.sym_grad_grad_i1().as_vector(),
+ scalar_type(4)*di1), result.as_vector());
+ gmm::add(gmm::scaled(ci.sym_grad_grad_i2().as_vector(),
+ scalar_type(4)*di2), result.as_vector());
+ gmm::add(gmm::scaled(ci.sym_grad_grad_i3().as_vector(),
+ scalar_type(4)*di3), result.as_vector());
+
+ scalar_type nnz = n * (n-1.) * pow(z, n-2.);
+ base_matrix A(3, 3); // second derivatives of W with respect to invariants
+ A(0, 0) = nnz * a * a;
+ A(1, 0) = A(0, 1) = nnz * a * c / ci.i3();
+ A(2, 0) = A(0, 2) = nnz * a * y;
+ A(1, 1) = nnz * c * c / gmm::sqr(ci.i3());
+ A(2, 1) = A(1, 2) = nnz * y * c / ci.i3() - nz * c / gmm::sqr(ci.i3());
+ A(2, 2) = nnz * y * y + nz * (2. * c * ci.i2() / pow(ci.i3(), 3.) - b / (4. * pow(ci.i3(), 1.5)));
+
+ typedef const base_matrix * pointer_base_matrix__;
+ pointer_base_matrix__ di[3];
+ di[0] = &(ci.grad_i1());
+ di[1] = &(ci.grad_i2());
+ di[2] = &(ci.grad_i3());
+
+ for (size_type j = 0; j < N; ++j)
+ for (size_type k = 0; k < N; ++k) {
+ for (size_type l1 = 0; l1 < N; ++l1)
+ for (size_type l2 = 0; l2 < N; ++l2)
+ for (size_type l3 = 0; l3 < N; ++l3)
+ for (size_type l4 = 0; l4 < N; ++l4)
+ result(l1, l2, l3, l4)
+ += 4. * A(j, k) * (*di[j])(l1, l2) * (*di[k])(l3, l4);
+ }
+
+// GMM_ASSERT1(check_symmetry(result) == 7,
+// "Fourth order tensor not symmetric : " << result);
+ }
+
+ generalized_Blatz_Ko_hyperelastic_law::generalized_Blatz_Ko_hyperelastic_law(void) {
+ nb_params_ = 5;
+ base_vector V(5);
+ V[0] = 1.0; V[1] = 1.0, V[2] = 1.5; V[3] = -0.5; V[4] = 1.5;
+ }
+
+
scalar_type Ciarlet_Geymonat_hyperelastic_law::strain_energy
- (const base_matrix &E, const base_vector ¶ms) const {
+ (const base_matrix &E, const base_vector ¶ms, scalar_type det_trans) const {
+ if (det_trans <= scalar_type(0)) return 1e200;
size_type N = gmm::mat_nrows(E);
scalar_type a = params[1] + params[2] / scalar_type(2);
scalar_type b = -(params[1] + params[2]) / scalar_type(2);
@@ -514,7 +701,7 @@ namespace getfem {
}
void Ciarlet_Geymonat_hyperelastic_law::sigma
- (const base_matrix &E, base_matrix &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_matrix &result, const base_vector ¶ms, scalar_type det_trans) const {
size_type N = gmm::mat_nrows(E);
scalar_type a = params[1] + params[2] / scalar_type(2);
scalar_type b = -(params[1] + params[2]) / scalar_type(2);
@@ -528,12 +715,16 @@ namespace getfem {
gmm::copy(gmm::identity_matrix(), result);
gmm::scale(result, scalar_type(2) * (a + b * gmm::mat_trace(C)));
gmm::add(gmm::scaled(C, -scalar_type(2) * b), result);
- scalar_type det = gmm::lu_inverse(C);
- gmm::add(gmm::scaled(C, scalar_type(2) * c * det - d), result);
+ if (det_trans <= scalar_type(0))
+ gmm::add(gmm::scaled(C, 1e200), result);
+ else {
+ scalar_type det = gmm::lu_inverse(C);
+ gmm::add(gmm::scaled(C, scalar_type(2) * c * det - d), result);
+ }
}
void Ciarlet_Geymonat_hyperelastic_law::grad_sigma
- (const base_matrix &E, base_tensor &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_tensor &result,const base_vector ¶ms, scalar_type) const {
size_type N = gmm::mat_nrows(E);
scalar_type b2 = -(params[1] + params[2]); // b * 2
scalar_type c = (params[0] - 2*b2) / scalar_type(4);
@@ -556,8 +747,8 @@ namespace getfem {
+ (C(i, j) * C(k, l)) * det*c*scalar_type(4);
}
- GMM_ASSERT1(check_symmetry(result) == 7,
- "Fourth order tensor not symmetric : " << result);
+// GMM_ASSERT1(check_symmetry(result) == 7,
+// "Fourth order tensor not symmetric : " << result);
}
@@ -575,30 +766,30 @@ namespace getfem {
scalar_type plane_strain_hyperelastic_law::strain_energy
- (const base_matrix &E, const base_vector ¶ms) const {
+ (const base_matrix &E, const base_vector ¶ms, scalar_type det_trans) const {
GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
base_matrix E3D(3,3);
E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1);
- return pl->strain_energy(E3D, params);
+ return pl->strain_energy(E3D, params, det_trans);
}
void plane_strain_hyperelastic_law::sigma
- (const base_matrix &E, base_matrix &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_matrix &result,const base_vector ¶ms, scalar_type det_trans) const {
GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
base_matrix E3D(3,3), result3D(3,3);
E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1);
- pl->sigma(E3D, result3D, params);
+ pl->sigma(E3D, result3D, params, det_trans);
result(0,0) = result3D(0,0); result(1,0) = result3D(1,0);
result(0,1) = result3D(0,1); result(1,1) = result3D(1,1);
}
void plane_strain_hyperelastic_law::grad_sigma
- (const base_matrix &E, base_tensor &result,const base_vector ¶ms) const {
+ (const base_matrix &E, base_tensor &result,const base_vector ¶ms, scalar_type det_trans) const {
GMM_ASSERT1(gmm::mat_nrows(E) == 2, "Plane strain law is for 2D only.");
base_matrix E3D(3,3);
base_tensor result3D(3,3,3,3);
E3D(0,0)=E(0,0); E3D(1,0)=E(1,0); E3D(0,1)=E(0,1); E3D(1,1)=E(1,1);
- pl->grad_sigma(E3D, result3D, params);
+ pl->grad_sigma(E3D, result3D, params, det_trans);
result(0,0,0,0) = result3D(0,0,0,0); result(1,0,0,0) = result3D(1,0,0,0);
result(0,1,0,0) = result3D(0,1,0,0); result(1,1,0,0) = result3D(1,1,0,0);
result(0,0,1,0) = result3D(0,0,1,0); result(1,0,1,0) = result3D(1,0,1,0);
@@ -779,7 +970,7 @@ namespace getfem {
gmm::scale(E, scalar_type(1)/scalar_type(2));
if (mf_params)
gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*NP,NP)), p);
- AHL.sigma(E, sigmahathat, p);
+ AHL.sigma(E, sigmahathat, p, scalar_type(1));
if (NFem == 3 && N == 2) {
//jyh : compute ez, normal on deformed surface
for (unsigned int l = 0; l <NFem; ++l) {
@@ -824,6 +1015,86 @@ namespace getfem {
}
}
}
+
+
+ void compute_sigmahathat(model &md,
+ const std::string &varname,
+ const abstract_hyperelastic_law &AHL,
+ const std::string &dataname,
+ const mesh_fem &mf_sigma,
+ model_real_plain_vector &SIGMA) {
+ const mesh_fem &mf_u = md.mesh_fem_of_variable(varname);
+ const model_real_plain_vector &u = md.real_variable(varname);
+ const mesh_fem *mf_params = md.pmesh_fem_of_variable(dataname);
+ const model_real_plain_vector ¶ms = md.real_variable(dataname);
+
+ size_type sl = gmm::vect_size(params);
+ if (mf_params) sl = sl * mf_params->get_qdim() / mf_params->nb_dof();
+ GMM_ASSERT1(sl == AHL.nb_params(), "Wrong number of coefficients for "
+ "the nonlinear constitutive elastic law");
+
+ unsigned N = unsigned(mf_u.linked_mesh().dim());
+ unsigned NP = unsigned(AHL.nb_params()), NFem = mf_u.get_qdim();
+ GMM_ASSERT1(mf_sigma.nb_dof() > 0, "Bad mf_sigma");
+ size_type qqdim = mf_sigma.get_qdim();
+ size_type ratio = N*N / qqdim;
+
+ GMM_ASSERT1(((ratio == 1) || (ratio == N*N)) &&
+ (gmm::vect_size(SIGMA) == mf_sigma.nb_dof()*ratio),
+ "The vector has not the good size");
+
+ model_real_plain_vector GRAD(mf_sigma.nb_dof()*ratio*NFem/N);
+ model_real_plain_vector PARAMS(mf_sigma.nb_dof()*NP);
+
+
+ getfem::mesh_trans_inv mti(mf_sigma.linked_mesh());
+ if (mf_params) {
+ for (size_type i = 0; i < mf_sigma.nb_dof(); ++i)
+ mti.add_point(mf_sigma.point_of_basic_dof(i));
+ interpolation(*mf_params, mti, params, PARAMS);
+ }
+
+ compute_gradient(mf_u, mf_sigma, u, GRAD);
+ base_matrix E(N, N), gradphi(NFem,N),gradphit(N,NFem), Id(N, N),
+ sigmahathat(N,N),aux(NFem,N), sigma(NFem,NFem),
+ IdNFem(NFem, NFem);
+
+
+ base_vector p(NP);
+ if (!mf_params) gmm::copy(params, p);
+ base_vector eig(NFem);
+ base_vector ez(NFem); // vector normal at deformed surface, (ex X ey)
+ gmm::copy(gmm::identity_matrix(), Id);
+ gmm::copy(gmm::identity_matrix(), IdNFem);
+
+ // cout << "GRAD = " << GRAD << endl;
+ // GMM_ASSERT1(false, "oops");
+
+
+ for (size_type i = 0; i < mf_sigma.nb_dof()/qqdim; ++i) {
+// cout << "GRAD size = " << gmm::vect_size(GRAD) << endl;
+// cout << "i = " << i << endl;
+// cout << "i*NFem*N = " << i*NFem*N << endl;
+
+ gmm::resize(gradphi,NFem,N);
+ std::copy(GRAD.begin()+i*NFem*N, GRAD.begin()+(i+1)*NFem*N,
+ gradphit.begin());
+ // cout << "GRAD = " << gradphit << endl;
+ gmm::copy(gmm::transposed(gradphit),gradphi);
+ for (unsigned int alpha = 0; alpha <N; ++alpha)
+ gradphi(alpha, alpha) += scalar_type(1);
+ gmm::mult(gmm::transposed(gradphi), gradphi, E);
+ gmm::add(gmm::scaled(Id, -scalar_type(1)), E);
+ gmm::scale(E, scalar_type(1)/scalar_type(2));
+ if (mf_params)
+ gmm::copy(gmm::sub_vector(PARAMS, gmm::sub_interval(i*ratio*NP,NP)),p);
+ // cout << "E = " << E << endl;
+ AHL.sigma(E, sigmahathat, p, scalar_type(1));
+ // cout << "ok" << endl;
+ std::copy(sigmahathat.begin(), sigmahathat.end(), SIGMA.begin()+i*N*N);
+ }
+ }
+
// ----------------------------------------------------------------------
diff --git a/src/getfem_partial_mesh_fem.cc b/src/getfem_partial_mesh_fem.cc
index d08ec21..7ad9f80 100644
--- a/src/getfem_partial_mesh_fem.cc
+++ b/src/getfem_partial_mesh_fem.cc
@@ -1,32 +1,32 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_partial_mesh_fem.h"
namespace getfem {
-
+
void partial_mesh_fem::clear(void)
{ mesh_fem::clear(); is_adapted = false; }
-
+
partial_mesh_fem::partial_mesh_fem(const mesh_fem &mef)
: mesh_fem(mef.linked_mesh()), mf(mef)
{ is_adapted = false; }
@@ -39,7 +39,7 @@ namespace getfem {
DAL_SIMPLE_KEY(special_partialmf_key, pfem);
void partial_mesh_fem::adapt(const dal::bit_vector &kept_dofs,
- const dal::bit_vector &rejected_elt) {
+ const dal::bit_vector &rejected_elt) {
mf.context_check();
if (mf.get_qdim_m() != QdimM || mf.get_qdim_n() != QdimN) {
@@ -56,17 +56,17 @@ namespace getfem {
size_type j = 0;
for (dal::bv_visitor i(kept_dofs); !i.finished(); ++i, ++j)
RR(j, i) = scalar_type(1);
-
+
R_ = REDUCTION_MATRIX(kept_dofs.card(), mf.nb_basic_dof());
E_ = EXTENSION_MATRIX(mf.nb_basic_dof(), kept_dofs.card());
if (mf.is_reduced()) {
gmm::row_matrix<gmm::rsvector<scalar_type> >
- A(kept_dofs.card(), mf.nb_basic_dof());
+ A(kept_dofs.card(), mf.nb_basic_dof());
gmm::mult(RR, mf.reduction_matrix(), A);
gmm::copy(A, R_);
gmm::row_matrix<gmm::rsvector<scalar_type> >
- B(mf.nb_basic_dof(), kept_dofs.card());
+ B(mf.nb_basic_dof(), kept_dofs.card());
gmm::mult(mf.extension_matrix(), gmm::transposed(RR), B);
gmm::copy(B, E_);
}
@@ -88,7 +88,7 @@ namespace getfem {
}
void partial_mesh_fem::write_to_file(const std::string &name,
- bool with_mesh) const {
+ bool with_mesh) const {
std::ofstream o(name.c_str());
GMM_ASSERT1(o, "impossible to open file '" << name << "'");
o << "% GETFEM MESH_FEM FILE " << '\n';
@@ -98,7 +98,7 @@ namespace getfem {
}
dal::bit_vector select_dofs_from_im(const mesh_fem &mf, const mesh_im &mim,
- unsigned P) {
+ unsigned P) {
const mesh &m = mf.linked_mesh();
unsigned N = m.dim();
if (P == unsigned(-1)) P = N;
@@ -108,7 +108,7 @@ namespace getfem {
getfem::pfem pf_old = 0;
getfem::pfem_precomp pfp = 0;
pintegration_method pim1 = 0;
-
+
std::vector<scalar_type> areas(mf.nb_basic_dof());
std::vector<scalar_type> area_supports(mf.nb_basic_dof());
dal::bit_vector kept_dofs;
@@ -120,16 +120,16 @@ namespace getfem {
if (pim == im_none()) continue;
getfem::pfem pf = mf.fem_of_element(cv);
GMM_ASSERT1(pim->type() == IM_APPROX,
- "Works only with approximate integration");
+ "Works only with approximate integration");
papprox_integration pai2= pim->approx_method();
static papprox_integration pai2_old = 0;
if (pgt_old != pgt || pai2 != pai2_old) {
- pim1 = getfem::classical_approx_im(pgt, 2);
- pgp2 = bgeot::geotrans_precomp(pgt,&(pai2->integration_points()),pim);
+ pim1 = getfem::classical_approx_im(pgt, 2);
+ pgp2 = bgeot::geotrans_precomp(pgt,&(pai2->integration_points()),pim);
}
if (pai2 != pai2_old || pf != pf_old) {
- pf_old = pf;
- pfp = getfem::fem_precomp(pf, &(pai2->integration_points()), pim);
+ pf_old = pf;
+ pfp = getfem::fem_precomp(pf, &(pai2->integration_points()), pim);
}
pai2_old = pai2;
pgt_old = pgt;
@@ -137,26 +137,30 @@ namespace getfem {
bgeot::geotrans_interpolation_context c2(pgp2, 0, G);
scalar_type area1 = convex_area_estimate(pgt, G, pim1);
+ size_type tdim = mf.get_qdim() / pf->target_dim();
+
for (size_type i = 0; i < pai2->nb_points_on_convex(); ++i) {
- for (unsigned d = 0; d < pf->nb_dof(cv); ++d) {
- // deals with Qdim eventually ...
- if (i == 0) areas[mf.ind_basic_dof_of_element(cv)[d]] += area1;
- c2.set_ii(i);
- area_supports[mf.ind_basic_dof_of_element(cv)[d]]
- += pai2->coeff(i) * c2.J() * gmm::sqr(pfp->val(i)[d]);
- // * ((gmm::abs(pfp->val(i)[d]) < 1e-10) ? 0.0 : 1.0);
- }
+ for (unsigned d = 0; d < pf->nb_dof(cv); ++d) {
+ for (size_type j = 0; j < tdim; ++j) {
+ if (i == 0)
+ areas[mf.ind_basic_dof_of_element(cv)[d*tdim+j]] += area1;
+ c2.set_ii(i);
+ area_supports[mf.ind_basic_dof_of_element(cv)[d*tdim+j]]
+ += pai2->coeff(i) * c2.J() * gmm::sqr(pfp->val(i)[d]);
+ }
+ // * ((gmm::abs(pfp->val(i)[d]) < 1e-10) ? 0.0 : 1.0);
+ }
}
}
-
+
std::vector<scalar_type> areas2(mf.nb_dof());
std::vector<scalar_type> area_supports2(mf.nb_dof());
if (mf.is_reduced()) {
gmm::mult(gmm::transposed(mf.extension_matrix()), areas, areas2);
gmm::mult(gmm::transposed(mf.extension_matrix()), area_supports,
- area_supports2);
+ area_supports2);
}
else {
gmm::copy(areas, areas2);
@@ -165,7 +169,7 @@ namespace getfem {
for (size_type i = 0; i < mf.nb_dof(); ++i) {
if (area_supports2[i] > pow(1e-14 * areas2[i], scalar_type(P) / N))
- kept_dofs.add(i);
+ kept_dofs.add(i);
}
return kept_dofs;
diff --git a/src/getfem_plasticity.cc b/src/getfem_plasticity.cc
index 2286500..376b290 100644
--- a/src/getfem_plasticity.cc
+++ b/src/getfem_plasticity.cc
@@ -1,30 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software;
-// you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published
-// by the Free Software Foundation;
-// either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of
-// the GNU Lesser General Public License
-// along with this program;
-// if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_models.h"
diff --git a/src/getfem_projected_fem.cc b/src/getfem_projected_fem.cc
new file mode 100644
index 0000000..1e0c22d
--- /dev/null
+++ b/src/getfem_projected_fem.cc
@@ -0,0 +1,783 @@
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Yves Renard, Konstantinos Poulios
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+#include "getfem/getfem_projected_fem.h"
+
+namespace getfem {
+
+ typedef bgeot::convex<base_node>::dref_convex_pt_ct dref_convex_pt_ct;
+// typedef bgeot::basic_mesh::ref_mesh_face_pt_ct ref_mesh_face_pt_ct;
+
+ /* calculates the projection of a point on the face of a convex
+ * Input:
+ * pgt : the geometric transformation of the convex
+ * G_cv: the nodes of the convex, stored in columns
+ * fc : the face of the convex to project on
+ * pt : the point to be projected
+ * Output:
+ * proj_ref: the projected point in the reference element
+ */
+ void projection_on_convex_face
+ (const bgeot::pgeometric_trans pgt, const base_matrix &G_cv,
+ const short_type fc, const base_node &pt,
+ base_node &proj_ref) {
+
+ size_type N = gmm::mat_nrows(G_cv); // dimension of the target space
+ size_type P = pgt->dim(); // dimension of the reference element space
+
+ size_type nb_pts_cv = gmm::mat_ncols(G_cv);
+ size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+ GMM_ASSERT1( N == pt.size(), "Dimensions mismatch");
+ GMM_ASSERT1( nb_pts_cv == pgt->nb_points(), "Dimensions mismatch");
+
+ bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+
+ base_matrix G_fc(N, nb_pts_fc);
+ for (size_type i=0; i < nb_pts_fc; i++)
+ gmm::copy(gmm::mat_col(G_cv,ind_pts_fc[i]),gmm::mat_col(G_fc,i));
+
+ // Local base on reference face
+ base_matrix base_ref_fc(N,P-1);
+ {
+ dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+ GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+ for (size_type i = 0; i < P-1; ++i)
+ gmm::copy(dref_pts_fc[i+1] - dref_pts_fc[0], gmm::mat_col(base_ref_fc,i));
+ }
+
+ proj_ref.resize(P);
+
+ base_node proj(N); // the projected point in the real element
+ base_node vres(P); // residual vector
+ scalar_type res= 1.;
+
+ // initial guess
+ proj_ref = gmm::mean_value(pgt->convex_ref()->points_of_face(fc));
+
+ base_vector val(nb_pts_fc);
+ pgt->poly_vector_val(proj_ref, ind_pts_fc, val);
+ gmm::mult(G_fc, val, proj);
+
+ base_matrix K(N,P-1);
+
+ base_matrix grad_fc(nb_pts_fc, P);
+ base_matrix grad_fc1(nb_pts_fc, P-1);
+ base_matrix B(N,P-1), BB(N,P), CS(P-1,P-1);
+
+ scalar_type EPS = 10E-12;
+ unsigned cnt = 50;
+ while (res > EPS && --cnt) {
+ // computation of the pseudo inverse matrix B at point proj_ref
+ pgt->poly_vector_grad(proj_ref, ind_pts_fc, grad_fc);
+ gmm::mult(grad_fc, base_ref_fc, grad_fc1);
+ gmm::mult(G_fc, grad_fc1, K);
+ gmm::mult(gmm::transposed(K), K, CS);
+ gmm::lu_inverse(CS);
+ gmm::mult(K, CS, B);
+ gmm::mult(B, gmm::transposed(base_ref_fc), BB);
+
+ // Projection onto the face of the convex
+ gmm::mult_add(gmm::transposed(BB), pt - proj, proj_ref);
+ pgt->poly_vector_val(proj_ref, ind_pts_fc, val);
+ gmm::mult(G_fc, val, proj);
+
+ gmm::mult(gmm::transposed(BB), pt - proj, vres);
+ res = gmm::vect_norm2(vres);
+ }
+ GMM_ASSERT1( res <= EPS,
+ "Iterative pojection on convex face did not converge");
+ }
+
+
+ /* calculates the normal at a specific point on the face of a convex
+ * Input:
+ * pgt : the geometric transformation of the convex
+ * G_cv : the nodes of the convex, stored in columns
+ * fc : the face of the convex to project on
+ * ref_pt: the point in the reference element
+ * Output:
+ * normal : the surface normal in the real element corresponding at
+ * the location of ref_pt in the refernce element
+ */
+ void normal_on_convex_face
+ (const bgeot::pgeometric_trans pgt, const base_matrix &G_cv,
+ const short_type fc, const base_node &ref_pt, base_node &normal) {
+
+ size_type N = gmm::mat_nrows(G_cv); // dimension of the target space
+ size_type P = pgt->dim(); // dimension of the reference element space
+
+ size_type nb_pts_cv = gmm::mat_ncols(G_cv);
+ size_type nb_pts_fc = pgt->structure()->nb_points_of_face(fc);
+
+ GMM_ASSERT1( nb_pts_cv == pgt->nb_points(), "Dimensions mismatch");
+
+ bgeot::convex_ind_ct ind_pts_fc = pgt->structure()->ind_points_of_face(fc);
+
+ base_matrix G_fc(N, nb_pts_fc);
+ for (size_type i=0; i < nb_pts_fc; i++)
+ gmm::copy(gmm::mat_col(G_cv,ind_pts_fc[i]),gmm::mat_col(G_fc,i));
+
+ // Local base on reference face
+ base_matrix base_ref_fc(N,P-1);
+ {
+ dref_convex_pt_ct dref_pts_fc = pgt->convex_ref()->dir_points_of_face(fc);
+ GMM_ASSERT1( dref_pts_fc.size() == P, "Dimensions mismatch");
+ for (size_type i = 0; i < P-1; ++i)
+ gmm::copy(dref_pts_fc[i+1] - dref_pts_fc[0], gmm::mat_col(base_ref_fc,i));
+ }
+
+ normal.resize(N);
+
+ base_matrix K(N,P-1);
+ { // calculate K at the final point
+ base_matrix grad_fc(nb_pts_fc, P);
+ base_matrix grad_fc1(nb_pts_fc, P-1);
+ pgt->poly_vector_grad(ref_pt, ind_pts_fc, grad_fc);
+ gmm::mult(grad_fc, base_ref_fc, grad_fc1);
+ gmm::mult(G_fc, grad_fc1, K);
+ }
+
+ base_matrix KK(N,P);
+ { // calculate KK
+ base_matrix grad_cv(nb_pts_cv, P);
+ pgt->poly_vector_grad(ref_pt, grad_cv);
+ gmm::mult(G_cv, grad_cv, KK);
+ }
+
+ base_matrix bases_product(P-1, P);
+ gmm::mult(gmm::transposed(K), KK, bases_product);
+
+ for (size_type i = 0; i < P; ++i) {
+ std::vector<size_type> ind(0);
+ for (size_type j = 0; j < P; ++j)
+ if (j != i ) ind.push_back(j);
+ scalar_type det = gmm::lu_det(gmm::sub_matrix(bases_product,
+ gmm::sub_interval(0, P-1),
+ gmm::sub_index(ind) ) );
+ gmm::add(gmm::scaled(gmm::mat_col(KK, i), (i % 2) ? -det : +det ), normal);
+ }
+
+ // normalizing
+ gmm::scale(normal, 1/gmm::vect_norm2(normal));
+
+ // ensure that normal points outwards
+ base_node cv_center(N), fc_center(N);
+ for (size_type i=0; i < nb_pts_cv; i++)
+ gmm::add(gmm::mat_col(G_cv,i), cv_center);
+ for (size_type i=0; i < nb_pts_fc; i++)
+ gmm::add(gmm::mat_col(G_fc,i), fc_center);
+ gmm::scale(cv_center, scalar_type(1)/scalar_type(nb_pts_cv));
+ gmm::scale(fc_center, scalar_type(1)/scalar_type(nb_pts_fc));
+ if (gmm::vect_sp(normal, fc_center -cv_center) < 0)
+ gmm::scale(normal, scalar_type(-1));
+ }
+
+ void projected_fem::build_kdtree(void) const {
+ tree.clear();
+ dal::bit_vector dofs=mf_source.dof_on_region(-1);
+ dofs.setminus(blocked_dofs);
+ dim_type qdim=target_dim();
+ for (size_type dof=0; dof < mf_source.nb_dof(); dof += qdim) {
+ if (dofs.is_in(dof))
+ tree.add_point_with_id(mf_source.point_of_basic_dof(dof), dof);
+ }
+ }
+
+ bool projected_fem::find_a_projected_point(base_node pt, base_node &ptr_proj,
+ size_type &cv_proj, short_type &fc_proj) const {
+
+ bgeot::index_node_pair ipt;
+ //scalar_type dist =
+ tree.nearest_neighbor(ipt, pt);
+
+ size_type cv_sel(-1);
+ short_type fc_sel(-1);
+ scalar_type is_in_sel(1e10);
+ base_node proj_ref, proj_ref_sel;
+ const getfem::mesh::ind_cv_ct cvs = mf_source.convex_to_basic_dof(ipt.i);
+ for (size_type i=0; i < cvs.size(); ++i) {
+ size_type cv = cvs[i];
+ const bgeot::pgeometric_trans pgt = mf_source.linked_mesh().trans_of_convex(cv);
+ if (rg_source.is_in(cv)) { // project on the convex
+ bool gt_invertible;
+ gic = bgeot::geotrans_inv_convex(mf_source.linked_mesh().convex(cv), pgt);
+ gic.invert(pt, proj_ref, gt_invertible);
+ if (gt_invertible) {
+ scalar_type is_in = pgt->convex_ref()->is_in(proj_ref);
+ if (is_in < is_in_sel) {
+ is_in_sel = is_in;
+ cv_sel = cv;
+ fc_sel = short_type(-1);
+ proj_ref_sel = proj_ref;
+ }
+ }
+ }
+ else { // project on convex faces
+ mesh_region::face_bitset faces = rg_source.faces_of_convex(cv);
+ if (faces.count() > 0) {
+ bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(cv));
+ // this should rarely be more than one face
+ for (short_type f = 0; f < faces.size(); ++f) {
+ if (faces.test(f)) {
+ projection_on_convex_face(pgt, G, f, pt, proj_ref);
+ scalar_type is_in = pgt->convex_ref()->is_in(proj_ref);
+ if (is_in < is_in_sel) {
+ is_in_sel = is_in;
+ cv_sel = cv;
+ fc_sel = f;
+ proj_ref_sel = proj_ref;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (cv_sel != size_type(-1) && is_in_sel < 0.05) { //FIXME
+ cv_proj = cv_sel;
+ fc_proj = fc_sel;
+ ptr_proj = proj_ref_sel;
+ return true;
+ }
+ return false;
+ }
+
+ void projected_fem::update_from_context(void) const {
+ fictx_cv = size_type(-1);
+ dim_ = dim_type(-1);
+
+ dim_type N = mf_source.linked_mesh().dim();
+ GMM_ASSERT1( N == mim_target.linked_mesh().dim(),
+ "Dimensions mismatch between the source and the target meshes");
+
+ build_kdtree();
+
+ elements.clear();
+ ind_dof.resize(mf_source.nb_basic_dof());
+ size_type max_dof = 0;
+ if (rg_target.id() != mesh_region::all_convexes().id() &&
+ rg_target.is_empty()) {
+ dim_ = mim_target.linked_mesh().dim();
+ return;
+ }
+
+ for (mr_visitor i(rg_target); !i.finished(); ++i) {
+ size_type cv = i.cv(); // refers to the target mesh
+ short_type f = i.f(); // refers to the target mesh
+
+ dim_type dim__ = mim_target.linked_mesh().structure_of_convex(cv)->dim();
+ if (dim_ == dim_type(-1)) {
+ dim_ = dim__;
+ if (i.is_face()) dim__ = dim_type(dim__ - 1);
+ GMM_ASSERT1(dim__ < N, "The projection should take place in lower "
+ "dimensions than the mesh dimension. Otherwise "
+ "use the interpolated_fem object instead.");
+ }
+ else
+ GMM_ASSERT1(dim_ == dim__,
+ "Convexes/faces of different dimension in the target mesh");
+
+ pintegration_method pim = mim_target.int_method_of_element(cv);
+ GMM_ASSERT1(pim->type() == IM_APPROX,
+ "You have to use approximated integration to project a fem");
+ papprox_integration pai = pim->approx_method();
+ bgeot::pgeometric_trans pgt = mim_target.linked_mesh().trans_of_convex(cv);
+ dal::bit_vector dofs;
+ size_type last_cv(-1); // refers to the source mesh
+ short_type last_f(-1); // refers to the source mesh
+ size_type nb_pts = i.is_face() ? pai->nb_points_on_face(f) : pai->nb_points();
+ size_type start_pt = i.is_face() ? pai->ind_first_point_on_face(f) : 0;
+ elt_projection_data &e = elements[cv];
+ for (size_type k = 0; k < nb_pts; ++k) {
+ gausspt_projection_data &gppd = e.gausspt[start_pt + k];
+ /* todo: use a geotrans_interpolation_context */
+ base_node gpt = pgt->transform(i.is_face() ? pai->point_on_face(f,k) : pai->point(k),
+ mim_target.linked_mesh().points_of_convex(cv));
+
+ gppd.iflags = find_a_projected_point(gpt, gppd.ptref, gppd.cv, gppd.f) ? 1 : 0;
+ if (gppd.iflags) {
+ // calculate gppd.normal
+ const bgeot::pgeometric_trans pgt_source = mf_source.linked_mesh().trans_of_convex(gppd.cv);
+ bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(gppd.cv));
+ normal_on_convex_face(pgt_source, G, gppd.f, gppd.ptref, gppd.normal);
+ // calculate gppd.gap
+ base_node ppt = pgt_source->transform(gppd.ptref, G);
+ gppd.gap = gmm::vect_sp(gpt-ppt, gppd.normal);
+ }
+
+ if (gppd.iflags && (last_cv != gppd.cv || last_f != gppd.f)) {
+ if (gppd.f == short_type(-1)) { // convex
+ size_type nbdof = mf_source.nb_basic_dof_of_element(gppd.cv);
+ for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+ size_type idof = mf_source.ind_basic_dof_of_element(gppd.cv)[loc_dof];
+ if (!(blocked_dofs[idof])) dofs.add(idof);
+ }
+ }
+ else { // convex face
+ size_type nbdof = mf_source.nb_basic_dof_of_face_of_element(gppd.cv, gppd.f);
+ for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+ size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+ if (!(blocked_dofs[idof])) dofs.add(idof);
+ }
+ }
+ last_cv = gppd.cv;
+ last_f = gppd.f;
+ }
+ }
+ e.nb_dof = dofs.card();
+ e.pim = pim;
+ e.inddof.resize(dofs.card());
+ max_dof = std::max(max_dof, dofs.card());
+ size_type cnt = 0;
+ for (dal::bv_visitor idof(dofs); !idof.finished(); ++idof)
+ { e.inddof[cnt] = idof; ind_dof[idof] = cnt++; }
+ for (size_type k = 0; k < nb_pts; ++k) {
+ gausspt_projection_data &gppd = e.gausspt[start_pt + k];
+ if (gppd.iflags) {
+ if (gppd.f == short_type(-1)) { // convex
+ size_type nbdof = mf_source.nb_basic_dof_of_element(gppd.cv);
+ for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) {
+ size_type idof = mf_source.ind_basic_dof_of_element(gppd.cv)[loc_dof];
+ gppd.local_dof[loc_dof] = dofs.is_in(idof) ? ind_dof[idof]
+ : size_type(-1);
+ }
+ }
+ else { // convex face
+ size_type nbdof = mf_source.nb_basic_dof_of_face_of_element(gppd.cv, gppd.f);
+ pfem pf = mf_source.fem_of_element(gppd.cv);
+ bgeot::convex_ind_ct ind_pts_fc = pf->structure(gppd.cv)->ind_points_of_face(gppd.f);
+ unsigned rdim = target_dim() / pf->target_dim();
+ if (rdim == 1)
+ for (size_type loc_dof = 0; loc_dof < nbdof; ++loc_dof) { // local dof with respect to the source convex face
+ size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+ size_type loc_dof2 = ind_pts_fc[loc_dof]; // local dof with respect to the source convex
+ gppd.local_dof[loc_dof2] = dofs.is_in(idof) ? ind_dof[idof]
+ : size_type(-1);
+ }
+ else
+ for (size_type ii = 0; ii < nbdof/rdim; ++ii)
+ for (size_type jj = 0; jj < rdim; ++jj) {
+ size_type loc_dof = ii*rdim + jj; // local dof with respect to the source convex face
+ size_type idof = mf_source.ind_basic_dof_of_face_of_element(gppd.cv, gppd.f)[loc_dof];
+ size_type loc_dof2 = ind_pts_fc[ii]*rdim + jj; // local dof with respect to the source convex
+ gppd.local_dof[loc_dof2] = dofs.is_in(idof) ? ind_dof[idof]
+ : size_type(-1);
+ }
+ }
+ }
+ }
+ }
+ /** setup global dofs, with dummy coordinates */
+ base_node P(dim()); gmm::fill(P,1./20);
+ node_tab_.resize(max_dof);
+ std::fill(node_tab_.begin(), node_tab_.end(), P);
+ pspt_valid = false;
+ dof_types_.resize(max_dof);
+ std::fill(dof_types_.begin(), dof_types_.end(),
+ global_dof(dim()));
+
+ /* ind_dof should be kept full of -1 ( real_base_value and
+ grad_base_value expect that)
+ */
+ std::fill(ind_dof.begin(), ind_dof.end(), size_type(-1));
+ }
+
+ size_type projected_fem::nb_dof(size_type cv) const
+ {
+ context_check();
+ GMM_ASSERT1(mim_target.linked_mesh().convex_index().is_in(cv),
+ "Wrong convex number: " << cv);
+ std::map<size_type,elt_projection_data>::const_iterator eit;
+ eit = elements.find(cv);
+ return (eit != elements.end()) ? eit->second.nb_dof : 0;
+ }
+
+ size_type projected_fem::index_of_global_dof(size_type cv, size_type i) const
+ {
+ std::map<size_type,elt_projection_data>::const_iterator eit;
+ eit = elements.find(cv);
+ GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << cv);
+ return eit->second.inddof[i];
+ }
+
+ bgeot::pconvex_ref projected_fem::ref_convex(size_type cv) const
+ { return mim_target.int_method_of_element(cv)->approx_method()->ref_convex(); }
+
+ const bgeot::convex<base_node> &projected_fem::node_convex(size_type cv) const
+ {
+ GMM_ASSERT1(mim_target.linked_mesh().convex_index().is_in(cv),
+ "Wrong convex number: " << cv);
+ return *(bgeot::generic_dummy_convex_ref
+ (dim(), nb_dof(cv),
+ mim_target.linked_mesh().structure_of_convex(cv)->nb_faces()));
+ }
+
+ bgeot::pstored_point_tab projected_fem::node_tab(size_type)
+ const {
+ if (!pspt_valid)
+ { pspt = bgeot::store_point_tab(node_tab_); pspt_valid = true; }
+ return pspt;
+ }
+
+ void projected_fem::base_value(const base_node &, base_tensor &) const
+ { GMM_ASSERT1(false, "No base values, real only element."); }
+ void projected_fem::grad_base_value(const base_node &,
+ base_tensor &) const
+ { GMM_ASSERT1(false, "No grad values, real only element."); }
+ void projected_fem::hess_base_value(const base_node &,
+ base_tensor &) const
+ { GMM_ASSERT1(false, "No hess values, real only element."); }
+
+ inline void projected_fem::actualize_fictx(pfem pf, size_type cv,
+ const base_node &ptr) const {
+ if (fictx_cv != cv) {
+ bgeot::vectors_to_base_matrix
+ (G, mf_source.linked_mesh().points_of_convex(cv));
+ fictx = fem_interpolation_context
+ (mf_source.linked_mesh().trans_of_convex(cv), pf, base_node(), G, cv,
+ size_type(-1));
+ fictx_cv = cv;
+ }
+ fictx.set_xref(ptr);
+ }
+
+ void projected_fem::real_base_value(const fem_interpolation_context& c,
+ base_tensor &t, bool) const {
+ std::map<size_type,elt_projection_data>::iterator eit;
+ eit = elements.find(c.convex_num());
+ if (eit == elements.end()) {
+ mi2[1] = target_dim(); mi2[0] = short_type(0);
+ t.adjust_sizes(mi2);
+ std::fill(t.begin(), t.end(), scalar_type(0));
+ return;
+ }
+// GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+ elt_projection_data &e = eit->second;
+
+ mi2[1] = target_dim(); mi2[0] = short_type(e.nb_dof);
+ t.adjust_sizes(mi2);
+ std::fill(t.begin(), t.end(), scalar_type(0));
+ if (e.nb_dof == 0) return;
+
+ std::map<size_type,gausspt_projection_data>::iterator git;
+ git = e.gausspt.find(c.ii());
+ if (c.have_pgp() &&
+ (&c.pgp()->get_point_tab()
+ == &e.pim->approx_method()->integration_points()) &&
+ git != e.gausspt.end()) {
+ gausspt_projection_data &gppd = git->second;
+ if (gppd.iflags & 1) {
+ if (gppd.iflags & 2) {
+ t = gppd.base_val;
+ return;
+ }
+ size_type cv = gppd.cv;
+ pfem pf = mf_source.fem_of_element(cv);
+ actualize_fictx(pf, cv, gppd.ptref);
+ pf->real_base_value(fictx, taux);
+ unsigned rdim = target_dim() / pf->target_dim();
+ std::map<size_type,size_type>::const_iterator ii;
+ if (rdim == 1) // mdim == 0
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+ ii = gppd.local_dof.find(i);
+ if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+ for (size_type j = 0; j < target_dim(); ++j)
+ t(ii->second,j) = taux(i,j);
+ }
+ else // mdim == 1
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+ for (size_type j = 0; j < target_dim(); ++j) {
+ ii = gppd.local_dof.find(i*rdim+j);
+ if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+ t(ii->second,j) = taux(i,0);
+ }
+
+ if (store_values) {
+ gppd.base_val = t;
+ gppd.iflags |= 2;
+ }
+ }
+ }
+ else {
+ size_type cv;
+ short_type f;
+ if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+ pfem pf = mf_source.fem_of_element(cv);
+ actualize_fictx(pf, cv, ptref);
+ pf->real_base_value(fictx, taux);
+
+ for (size_type i = 0; i < e.nb_dof; ++i)
+ ind_dof.at(e.inddof[i]) = i;
+
+ unsigned rdim = target_dim() / pf->target_dim();
+ if (rdim == 1) // mdim == 0
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+ size_type ii = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i]);
+ if (ii != size_type(-1)) {
+ for (size_type j = 0; j < target_dim(); ++j)
+ t(ii,j) = taux(i,j);
+ }
+ }
+ else // mdim == 1
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+ for (size_type j = 0; j < target_dim(); ++j) {
+ size_type ij = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i*rdim+j]);
+ if (ij != size_type(-1))
+ t(ij,j) = taux(i,0);
+ }
+
+ for (size_type i = 0; i < e.nb_dof; ++i)
+ ind_dof[e.inddof[i]] = size_type(-1);
+ }
+ }
+
+ }
+
+ void projected_fem::real_grad_base_value(const fem_interpolation_context& c,
+ base_tensor &t, bool) const {
+ std::map<size_type,elt_projection_data>::iterator eit;
+ eit = elements.find(c.convex_num());
+ if (eit == elements.end()) {
+ mi3[2] = mf_source.linked_mesh().dim(); mi3[1] = target_dim(); mi3[0] = short_type(0);
+ t.adjust_sizes(mi2);
+ std::fill(t.begin(), t.end(), scalar_type(0));
+ return;
+ }
+// GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+ elt_projection_data &e = eit->second;
+
+ size_type N = mf_source.linked_mesh().dim();
+ mi3[2] = short_type(N); mi3[1] = target_dim(); mi3[0] = short_type(e.nb_dof);
+ t.adjust_sizes(mi3);
+ std::fill(t.begin(), t.end(), scalar_type(0));
+ if (e.nb_dof == 0) return;
+
+ std::map<size_type,gausspt_projection_data>::iterator git;
+ git = e.gausspt.find(c.ii());
+ if (c.have_pgp() &&
+ (&c.pgp()->get_point_tab()
+ == &e.pim->approx_method()->integration_points()) &&
+ git != e.gausspt.end()) {
+ gausspt_projection_data &gppd = git->second;
+ if (gppd.iflags & 1) {
+ if (gppd.iflags & 4) {
+ t = gppd.grad_val;
+ return;
+ }
+ size_type cv = gppd.cv;
+ pfem pf = mf_source.fem_of_element(cv);
+ actualize_fictx(pf, cv, gppd.ptref);
+ pf->real_grad_base_value(fictx, taux);
+
+ unsigned rdim = target_dim() / pf->target_dim();
+ std::map<size_type,size_type>::const_iterator ii;
+ if (rdim == 1) // mdim == 0
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+ ii = gppd.local_dof.find(i);
+ if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+ for (size_type j = 0; j < target_dim(); ++j)
+ for (size_type k = 0; k < N; ++k)
+ t(ii->second, j, k) = taux(i, j, k);
+ }
+ else // mdim == 1
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+ for (size_type j = 0; j < target_dim(); ++j) {
+ ii = gppd.local_dof.find(i*rdim+j);
+ if (ii != gppd.local_dof.end() && ii->second != size_type(-1))
+ for (size_type k = 0; k < N; ++k)
+ t(ii->second, j, k) = taux(i, 0, k);
+ }
+ if (store_values) {
+ gppd.grad_val = t;
+ gppd.iflags |= 4;
+ }
+ }
+ }
+ else {
+ size_type cv;
+ short_type f;
+ if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+ pfem pf = mf_source.fem_of_element(cv);
+ actualize_fictx(pf, cv, ptref);
+ pf->real_grad_base_value(fictx, taux);
+ for (size_type i = 0; i < e.nb_dof; ++i)
+ ind_dof.at(e.inddof[i]) = i;
+
+ unsigned rdim = target_dim() / pf->target_dim();
+ if (rdim == 1) // mdim == 0
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i) {
+ size_type ii = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i]);
+ if (ii != size_type(-1))
+ for (size_type j = 0; j < target_dim(); ++j)
+ for (size_type k = 0; k < N; ++k)
+ t(ii,j,k) = taux(i,j,k);
+ }
+ else // mdim == 1
+ for (size_type i = 0; i < pf->nb_dof(cv); ++i)
+ for (size_type j = 0; j < target_dim(); ++j) {
+ size_type ij = ind_dof.at(mf_source.ind_basic_dof_of_element(cv)[i*rdim+j]);
+ if (ij != size_type(-1))
+ for (size_type k = 0; k < N; ++k)
+ t(ij,j,k) = taux(i,0,k);
+ }
+
+ for (size_type i = 0; i < e.nb_dof; ++i)
+ ind_dof[e.inddof[i]] = size_type(-1);
+ }
+ }
+ }
+
+ void projected_fem::real_hess_base_value
+ (const fem_interpolation_context&, base_tensor &, bool) const
+ { GMM_ASSERT1(false, "Sorry, to be done."); }
+
+ void projected_fem::projection_data(const fem_interpolation_context& c,
+ base_node &normal, scalar_type &gap) const {
+ std::map<size_type,elt_projection_data>::iterator eit;
+ eit = elements.find(c.convex_num());
+ GMM_ASSERT1(eit != elements.end(), "Wrong convex number: " << c.convex_num());
+ elt_projection_data &e = eit->second;
+ if (e.nb_dof == 0) { // return undefined normal vector and huge gap
+ normal = base_node(c.N());
+ gap = 1e12;
+ return;
+ }
+
+ std::map<size_type,gausspt_projection_data>::iterator git;
+ git = e.gausspt.find(c.ii());
+ if (c.have_pgp() &&
+ (&c.pgp()->get_point_tab()
+ == &e.pim->approx_method()->integration_points()) &&
+ git != e.gausspt.end()) {
+ gausspt_projection_data &gppd = git->second;
+ if (gppd.iflags & 1) {
+ normal = gppd.normal;
+ gap = gppd.gap;
+ }
+ else { // return undefined normal vector and huge gap
+ normal = base_node(c.N());
+ gap = 1e12;
+ }
+ }
+ else {
+ size_type cv;
+ short_type f;
+ if (find_a_projected_point(c.xreal(), ptref, cv, f)) {
+ const bgeot::pgeometric_trans pgt = mf_source.linked_mesh().trans_of_convex(cv);
+ bgeot::vectors_to_base_matrix(G, mf_source.linked_mesh().points_of_convex(cv));
+ normal_on_convex_face(pgt, G, f, ptref, normal);
+ base_node ppt = pgt->transform(ptref, G);
+ gap = gmm::vect_sp(c.xreal()-ppt, normal);
+ }
+ else { // return undefined normal vector and huge gap
+ normal = base_node(c.N());
+ gap = 1e12;
+ }
+ }
+
+ }
+
+ dal::bit_vector projected_fem::projected_convexes() const {
+ dal::bit_vector bv;
+ std::map<size_type,elt_projection_data>::const_iterator eit;
+ for (eit = elements.begin(); eit != elements.end(); ++eit) {
+ std::map<size_type,gausspt_projection_data>::const_iterator git;
+ for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+ if (git->second.iflags)
+ bv.add(git->second.cv);
+ }
+ }
+ return bv;
+ }
+
+ void projected_fem::gauss_pts_stats(unsigned &ming, unsigned &maxg,
+ scalar_type &meang) const {
+ std::vector<unsigned> v(mf_source.linked_mesh().convex_index().last_true()+1);
+ std::map<size_type,elt_projection_data>::const_iterator eit;
+ for (eit = elements.begin(); eit != elements.end(); ++eit) {
+ std::map<size_type,gausspt_projection_data>::const_iterator git;
+ for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+ if (git->second.iflags)
+ v[git->second.cv]++;
+ }
+ }
+
+ ming = 100000; maxg = 0; meang = 0;
+ unsigned cntg = 0;
+ for (dal::bv_visitor cv(mf_source.linked_mesh().convex_index());
+ !cv.finished(); ++cv) {
+ ming = std::min(ming, v[cv]);
+ maxg = std::max(maxg, v[cv]);
+ meang += v[cv];
+ if (v[cv] > 0) ++cntg;
+ }
+ meang /= scalar_type(cntg);
+ }
+
+ size_type projected_fem::memsize() const {
+ size_type sz = 0;
+ sz += blocked_dofs.memsize();
+ sz += sizeof(*this);
+ sz += elements.size() * sizeof(elt_projection_data); // Wrong for std::map
+ std::map<size_type,elt_projection_data>::const_iterator eit;
+ for (eit = elements.begin(); eit != elements.end(); ++eit) {
+ sz += eit->second.gausspt.size() * sizeof(gausspt_projection_data); // Wrong for std::map
+ sz += eit->second.inddof.capacity() * sizeof(size_type);
+ std::map<size_type,gausspt_projection_data>::const_iterator git;
+ for (git = eit->second.gausspt.begin(); git != eit->second.gausspt.end(); ++git) {
+ sz += git->second.local_dof.size() * sizeof(size_type); // Wrong for std::map
+ }
+ }
+ return sz;
+ }
+
+ projected_fem::projected_fem(const mesh_fem &mf_source_,
+ const mesh_im &mim_target_,
+ size_type rg_source_,
+ size_type rg_target_,
+ dal::bit_vector blocked_dofs_, bool store_val)
+ : mf_source(mf_source_), mim_target(mim_target_),
+ rg_source(mf_source.linked_mesh().region(rg_source_)),
+ rg_target(mim_target.linked_mesh().region(rg_target_)),
+ store_values(store_val), blocked_dofs(blocked_dofs_), mi2(2), mi3(3) {
+ this->add_dependency(mf_source);
+ this->add_dependency(mim_target);
+ is_pol = is_lag = false; es_degree = 5;
+ is_equiv = real_element_defined = true;
+ ntarget_dim = mf_source.get_qdim();
+
+ update_from_context();
+ }
+
+ DAL_SIMPLE_KEY(special_projfem_key, pfem);
+
+ pfem new_projected_fem(const mesh_fem &mf_source_, const mesh_im &mim_target_,
+ size_type rg_source_, size_type rg_target_,
+ dal::bit_vector blocked_dofs_, bool store_val) {
+ pfem pf = new projected_fem(mf_source_, mim_target_, rg_source_, rg_target_,
+ blocked_dofs_, store_val);
+ dal::add_stored_object(new special_projfem_key(pf), pf);
+ return pf;
+ }
+
+
+} /* end of namespace getfem. */
+
diff --git a/src/getfem_regular_meshes.cc b/src/getfem_regular_meshes.cc
index c49880a..1fb900f 100644
--- a/src/getfem_regular_meshes.cc
+++ b/src/getfem_regular_meshes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1999-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 1999-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_regular_meshes.h"
diff --git a/src/getfem_superlu.cc b/src/getfem_superlu.cc
index a0d2f9a..64a5233 100644
--- a/src/getfem_superlu.cc
+++ b/src/getfem_superlu.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Julien Pommier
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_superlu.h"
@@ -138,7 +138,7 @@ namespace gmm {
/* ********************************************************************* */
template<typename T>
- void SuperLU_solve(const gmm::csc_matrix<T> &csc_A, T *sol, T *rhs,
+ int SuperLU_solve(const gmm::csc_matrix<T> &csc_A, T *sol, T *rhs,
double& rcond_, int permc_spec) {
/*
* Get column permutation vector perm_c[], according to permc_spec:
@@ -211,13 +211,16 @@ namespace gmm {
if (SU.Store) Destroy_CompCol_Matrix(&SU);
StatFree(&stat);
GMM_ASSERT1(info != -333333333, "SuperLU was cancelled."); // user interruption (for matlab interface)
- GMM_ASSERT1(info == 0, "SuperLU solve failed: info=" << info);
+
+ GMM_ASSERT1(info >= 0, "SuperLU solve failed: info =" << info);
+ if (info > 0) GMM_WARNING1("SuperLU solve failed: info =" << info);
+ return info;
}
- template void SuperLU_solve(const gmm::csc_matrix<float> &csc_A, float *sol, float *rhs, double& rcond_, int permc_spec);
- template void SuperLU_solve(const gmm::csc_matrix<double> &csc_A, double *sol, double *rhs, double& rcond_, int permc_spec);
- template void SuperLU_solve(const gmm::csc_matrix<std::complex<float> > &csc_A, std::complex<float> *sol, std::complex<float> *rhs, double& rcond_, int permc_spec);
- template void SuperLU_solve(const gmm::csc_matrix<std::complex<double> > &csc_A, std::complex<double> *sol, std::complex<double> *rhs, double& rcond_, int permc_spec);
+ template int SuperLU_solve(const gmm::csc_matrix<float> &csc_A, float *sol, float *rhs, double& rcond_, int permc_spec);
+ template int SuperLU_solve(const gmm::csc_matrix<double> &csc_A, double *sol, double *rhs, double& rcond_, int permc_spec);
+ template int SuperLU_solve(const gmm::csc_matrix<std::complex<float> > &csc_A, std::complex<float> *sol, std::complex<float> *rhs, double& rcond_, int permc_spec);
+ template int SuperLU_solve(const gmm::csc_matrix<std::complex<double> > &csc_A, std::complex<double> *sol, std::complex<double> *rhs, double& rcond_, int permc_spec);
struct SuperLU_factor_impl_common {
mutable SuperMatrix SA, SL, SB, SU, SX;
diff --git a/src/gmm/gmm.h b/src/gmm/gmm.h
index 3dc6cb1..b6f50a5 100644
--- a/src/gmm/gmm.h
+++ b/src/gmm/gmm.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_MUMPS_interface.h b/src/gmm/gmm_MUMPS_interface.h
index 09cc008..71a9b44 100644
--- a/src/gmm/gmm_MUMPS_interface.h
+++ b/src/gmm/gmm_MUMPS_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_MUMPS_interface.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -133,7 +134,7 @@ namespace gmm {
* Works only with sparse or skyline matrices
*/
template <typename MAT, typename VECTX, typename VECTB>
- void MUMPS_solve(const MAT &A, const VECTX &X_, const VECTB &B) {
+ bool MUMPS_solve(const MAT &A, const VECTX &X_, const VECTB &B) {
VECTX &X = const_cast<VECTX &>(X_);
typedef typename linalg_traits<MAT>::value_type T;
@@ -175,44 +176,31 @@ namespace gmm {
#endif
#define ICNTL(I) icntl[(I)-1]
-#define INFO(I) info[(I)-1]
id.ICNTL(1) = -1; // output stream for error messages
id.ICNTL(2) = -1; // output stream for other messages
id.ICNTL(3) = -1; // output stream for global information
id.ICNTL(4) = 0; // verbosity level
- id.ICNTL(14) += 40; /* small boost to the workspace size as we have encountered some problem
+ id.ICNTL(14) += 80; /* small boost to the workspace size as we have encountered some problem
who did not fit in the default settings of mumps..
by default, ICNTL(14) = 15 or 20
*/
//cout << "ICNTL(14): " << id.ICNTL(14) << "\n";
- id.ICNTL(22) = 1; /* enables out-of-core support */
+ // id.ICNTL(22) = 1; /* enables out-of-core support */
id.job = 6;
mumps_interf<T>::mumps_c(id);
- if (id.INFO(1) < 0) {
- switch (id.INFO(1)) {
- case -6 : case -10 :
- GMM_ASSERT1(false, "Solve with MUMPS failed: matrix is singular");
- case -13 :
- GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
- case -9:
- GMM_ASSERT1(false, "Solve with MUMPS failed: error "
- << id.INFO(1) << ", increase ICNTL(14)");
- default :
- GMM_ASSERT1(false, "Solve with MUMPS failed with error "
- << id.INFO(1));
- }
- }
+ bool ok = mumps_error_check(id);
id.job = JOB_END;
mumps_interf<T>::mumps_c(id);
gmm::copy(rhs, X);
+ return ok;
+
#undef ICNTL
-#undef INFO
}
@@ -222,7 +210,7 @@ namespace gmm {
* Works only with sparse or skyline matrices
*/
template <typename MAT, typename VECTX, typename VECTB>
- void MUMPS_distributed_matrix_solve(const MAT &A, const VECTX &X_,
+ bool MUMPS_distributed_matrix_solve(const MAT &A, const VECTX &X_,
const VECTB &B) {
VECTX &X = const_cast<VECTX &>(X_);
@@ -266,7 +254,6 @@ namespace gmm {
#endif
#define ICNTL(I) icntl[(I)-1]
-#define INFO(I) info[(I)-1]
id.ICNTL(1) = -1; // output stream for error messages
id.ICNTL(2) = 6; // id.ICNTL(2) = -1; // output stream for other messages
id.ICNTL(3) = 6; // id.ICNTL(3) = -1; // output stream for global information
@@ -277,20 +264,7 @@ namespace gmm {
id.job = 6;
mumps_interf<T>::mumps_c(id);
- if (id.INFO(1) < 0) {
- switch (id.INFO(1)) {
- case -6 : case -10 :
- GMM_ASSERT1(false, "Solve with MUMPS failed: matrix is singular");
- case -13:
- GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
- case -9:
- GMM_ASSERT1(false, "Solve with MUMPS failed: error "
- << id.INFO(1) << ", increase ICNTL(14)");
- default :
- GMM_ASSERT1(false, "Solve with MUMPS failed with error "
- << id.INFO(1));
- }
- }
+ bool ok = mumps_error_check(id);
id.job = JOB_END;
mumps_interf<T>::mumps_c(id);
@@ -299,12 +273,37 @@ namespace gmm {
#endif
gmm::copy(rhs, X);
+ return ok;
+
#undef ICNTL
-#undef INFO
}
+ template <typename MUMPS_STRUCT>
+ static inline bool mumps_error_check(MUMPS_STRUCT &id) {
+#define INFO(I) info[(I)-1]
+ if (id.INFO(1) < 0) {
+ switch (id.INFO(1)) {
+ case -2:
+ GMM_ASSERT1(false, "Solve with MUMPS failed: NZ = " << id.INFO(2)
+ << " is out of range");
+ case -6 : case -10 :
+ GMM_WARNING1("Solve with MUMPS failed: matrix is singular");
+ return false;
+ case -9:
+ GMM_ASSERT1(false, "Solve with MUMPS failed: error "
+ << id.INFO(1) << ", increase ICNTL(14)");
+ case -13 :
+ GMM_ASSERT1(false, "Solve with MUMPS failed: not enough memory");
+ default :
+ GMM_ASSERT1(false, "Solve with MUMPS failed with error "
+ << id.INFO(1));
+ }
+ }
+ return true;
+#undef INFO
+ }
}
diff --git a/src/gmm/gmm_algobase.h b/src/gmm/gmm_algobase.h
index 9fdebff..700c8b2 100644
--- a/src/gmm/gmm_algobase.h
+++ b/src/gmm/gmm_algobase.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file gmm_algobase.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_blas.h b/src/gmm/gmm_blas.h
index 6c8cd00..558784b 100644
--- a/src/gmm/gmm_blas.h
+++ b/src/gmm/gmm_blas.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_blas.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -529,7 +530,7 @@ namespace gmm {
mat_trace(const M &m) {
typedef typename linalg_traits<M>::value_type T;
T res(0);
- for (size_type i = 0; i < std::max(mat_nrows(m), mat_ncols(m)); ++i)
+ for (size_type i = 0; i < std::min(mat_nrows(m), mat_ncols(m)); ++i)
res += m(i,i);
return res;
}
diff --git a/src/gmm/gmm_blas_interface.h b/src/gmm/gmm_blas_interface.h
index 14f8f46..32ae2fd 100644
--- a/src/gmm/gmm_blas_interface.h
+++ b/src/gmm/gmm_blas_interface.h
@@ -1,35 +1,35 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_blas_interface.h
- @author Caroline Lecalvez, Caroline.Lecalvez at gmm.insa-tlse.fr,
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date October 7, 2003.
@brief gmm interface for fortran BLAS.
diff --git a/src/gmm/gmm_condition_number.h b/src/gmm/gmm_condition_number.h
index 2a2aa2a..fa40ddb 100644
--- a/src/gmm/gmm_condition_number.h
+++ b/src/gmm/gmm_condition_number.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_condition_number.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>, Julien Pommier <Julien.Pommier at insa-toulouse.fr>
diff --git a/src/gmm/gmm_conjugated.h b/src/gmm/gmm_conjugated.h
index 905b646..3be6608 100644
--- a/src/gmm/gmm_conjugated.h
+++ b/src/gmm/gmm_conjugated.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_conjugated.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_def.h b/src/gmm/gmm_def.h
index deb6ef4..84f5e9e 100644
--- a/src/gmm/gmm_def.h
+++ b/src/gmm/gmm_def.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_def.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -359,6 +360,7 @@ namespace gmm {
template <typename T> inline T pos(T a) { return (a < T(0)) ? T(0) : a; }
template <typename T> inline T neg(T a) { return (a < T(0)) ? T(-a) : T(0); }
template <typename T> inline T sgn(T a) { return (a < T(0)) ? T(-1) : T(1); }
+ template <typename T> inline T Heaviside(T a) { return (a < T(0)) ? T(0) : T(1); }
inline double random() { return double(rand())/(RAND_MAX+0.5); }
template <typename T> inline T random(T)
{ return T(rand()*2.0)/(T(RAND_MAX)+T(1)/T(2)) - T(1); }
diff --git a/src/gmm/gmm_dense_Householder.h b/src/gmm/gmm_dense_Householder.h
index 708b0e0..6f2ff52 100644
--- a/src/gmm/gmm_dense_Householder.h
+++ b/src/gmm/gmm_dense_Householder.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard, Caroline Lecalvez
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_dense_Householder.h
@author Caroline Lecalvez <Caroline.Lecalvez at gmm.insa-toulouse.fr>
diff --git a/src/gmm/gmm_dense_lu.h b/src/gmm/gmm_dense_lu.h
index e683eb7..c803af3 100644
--- a/src/gmm/gmm_dense_lu.h
+++ b/src/gmm/gmm_dense_lu.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of lu.h from MTL.
// See http://osl.iu.edu/research/mtl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_dense_qr.h b/src/gmm/gmm_dense_qr.h
index 1b32def..b082791 100644
--- a/src/gmm/gmm_dense_qr.h
+++ b/src/gmm/gmm_dense_qr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_dense_qr.h
@author Caroline Lecalvez, Caroline.Lecalvez at gmm.insa-tlse.fr, Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_dense_sylvester.h b/src/gmm/gmm_dense_sylvester.h
index fb017a6..fbb4871 100644
--- a/src/gmm/gmm_dense_sylvester.h
+++ b/src/gmm/gmm_dense_sylvester.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file gmm_dense_sylvester.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_domain_decomp.h b/src/gmm/gmm_domain_decomp.h
index 6ddf0d2..aa1ecf3 100644
--- a/src/gmm/gmm_domain_decomp.h
+++ b/src/gmm/gmm_domain_decomp.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file gmm_domain_decomp.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_except.h b/src/gmm/gmm_except.h
index f432c09..f02e136 100644
--- a/src/gmm/gmm_except.h
+++ b/src/gmm/gmm_except.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file gmm_except.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -65,39 +66,49 @@ namespace gmm {
// defined.
// GMM_ASSERT3 : For internal checks. Hidden by default. Active
// only when DEBUG_MODE is defined.
-
-#ifdef __EXCEPTIONS
+// __EXCEPTIONS is defined by gcc, _CPPUNWIND is defined by visual c++
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
inline void short_error_throw(const char *file, int line, const char *func,
const char *errormsg) {
std::stringstream msg;
msg << "Error in " << file << ", line " << line << " " << func
- << ": \n" << errormsg << ends;
+ << ": \n" << errormsg << std::ends;
throw gmm::gmm_error(msg.str());
}
# define GMM_THROW_(type, errormsg) { \
std::stringstream msg; \
- msg << "Error in "__FILE__ << ", line " \
+ msg << "Error in " << __FILE__ << ", line " \
<< __LINE__ << " " << GMM_PRETTY_FUNCTION << ": \n" \
- << errormsg << ends; \
+ << errormsg << std::ends; \
throw (type)(msg.str()); \
}
#else
+#ifndef _MSC_VER
+# define abort_no_return() ::abort()
+#else
+// apparently ::abort() on windows is not declared with __declspec(noreturn) so the compiler spits a lot of warnings when abort is used.
+# define abort_no_return() { assert("GMM ABORT"==0); throw "GMM ABORT"; }
+#endif
+
inline void short_error_throw(const char *file, int line, const char *func,
const char *errormsg) {
std::stringstream msg;
msg << "Error in " << file << ", line " << line << " " << func
- << ": \n" << errormsg << ends;
- ::abort();
+ << ": \n" << errormsg << std::ends;
+ std::cerr << msg.str() << std::endl;
+ abort_no_return();
}
+
# define GMM_THROW_(type, errormsg) { \
std::stringstream msg; \
- msg << "Error in "__FILE__ << ", line " \
+ msg << "Error in " << __FILE__ << ", line " \
<< __LINE__ << " " << GMM_PRETTY_FUNCTION << ": \n" \
- << errormsg << ends; \
- ::abort(); \
+ << errormsg; \
+ std::cerr << msg.str() << std::endl; \
+ abort_no_return(); \
}
#endif
-
+
# define GMM_ASSERT1(test, errormsg) \
{ if (!(test)) GMM_THROW_(gmm::gmm_error, errormsg); }
@@ -106,8 +117,8 @@ namespace gmm {
#define GMM_THROW(a, b) { GMM_THROW_(a,b); gmm::GMM_THROW(); }
#if defined(NDEBUG)
-# define GMM_ASSERT2(test, errormsg)
-# define GMM_ASSERT3(test, errormsg)
+# define GMM_ASSERT2(test, errormsg) {}
+# define GMM_ASSERT3(test, errormsg) {}
#elif !defined(GMM_FULL_NDEBUG)
# define GMM_ASSERT2(test, errormsg) \
{ if (!(test)) gmm::short_error_throw(__FILE__, __LINE__, \
@@ -148,8 +159,8 @@ namespace gmm {
#define GMM_WARNING_MSG(level_, thestr) { \
std::stringstream msg; \
- msg << "Level " << level_ << " Warning in "__FILE__ << ", line " \
- << __LINE__ << ": " << thestr << ends; \
+ msg << "Level " << level_ << " Warning in " << __FILE__ << ", line " \
+ << __LINE__ << ": " << thestr; \
std::cerr << msg.str() << std::endl; \
}
@@ -210,9 +221,8 @@ namespace gmm {
#define GMM_TRACE_MSG(level_, thestr) { \
GMM_TRACE_MSG_MPI { \
std::stringstream msg; \
- msg << "Trace " << level_ << " in "__FILE__ << ", line " \
- << __LINE__ << ": " << thestr \
- << ends; \
+ msg << "Trace " << level_ << " in " << __FILE__ << ", line " \
+ << __LINE__ << ": " << thestr; \
std::cout << msg.str() << std::endl; \
} \
}
@@ -269,54 +279,54 @@ namespace gmm {
#define GMM_STANDARD_CATCH_ERROR catch(std::logic_error e) \
{ \
- cerr << "============================================\n"; \
- cerr << "| An error has been detected !!! |\n"; \
- cerr << "============================================\n"; \
- cerr << e.what() << endl << endl; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| An error has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << e.what() << std::endl << std::endl; \
exit(1); \
} \
catch(std::runtime_error e) \
{ \
- cerr << "============================================\n"; \
- cerr << "| An error has been detected !!! |\n"; \
- cerr << "============================================\n"; \
- cerr << e.what() << endl << endl; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| An error has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << e.what() << std::endl << std::endl; \
exit(1); \
} \
catch(std::bad_alloc) { \
- cerr << "============================================\n"; \
- cerr << "| A bad allocation has been detected !!! |\n"; \
- cerr << "============================================\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| A bad allocation has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
exit(1); \
} \
catch(std::bad_typeid) { \
- cerr << "============================================\n"; \
- cerr << "| A bad typeid has been detected !!! |\n"; \
- cerr << "============================================\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| A bad typeid has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
exit(1); \
} \
catch(std::bad_exception) { \
- cerr << "============================================\n"; \
- cerr << "| A bad exception has been detected !!! |\n"; \
- cerr << "============================================\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| A bad exception has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
exit(1); \
} \
catch(std::bad_cast) { \
- cerr << "============================================\n"; \
- cerr << "| A bad cast has been detected !!! |\n"; \
- cerr << "============================================\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| A bad cast has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
exit(1); \
} \
catch(...) { \
- cerr << "============================================\n"; \
- cerr << "| An unknown error has been detected !!! |\n"; \
- cerr << "============================================\n"; \
+ std::cerr << "============================================\n"; \
+ std::cerr << "| An unknown error has been detected !!! |\n"; \
+ std::cerr << "============================================\n"; \
exit(1); \
}
// catch(ios_base::failure) {
- // cerr << "============================================\n";
- // cerr << "| A ios_base::failure has been detected !!!|\n";
- // cerr << "============================================\n";
+ // std::cerr << "============================================\n";
+ // std::cerr << "| A ios_base::failure has been detected !!!|\n";
+ // std::cerr << "============================================\n";
// exit(1);
// }
diff --git a/src/gmm/gmm_inoutput.h b/src/gmm/gmm_inoutput.h
index 27060dd..f7fc6b4 100644
--- a/src/gmm/gmm_inoutput.h
+++ b/src/gmm/gmm_inoutput.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard, Julien Pommier
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_inoutput.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -209,7 +210,7 @@ namespace gmm {
int i,ind,col,offset,count;
int Ptrperline, Ptrwidth, Indperline, Indwidth;
int Valperline, Valwidth, Valprec, Nentries;
- int Valflag; /* Indicates 'E','D', or 'F' float format */
+ int Valflag = 'D'; /* Indicates 'E','D', or 'F' float format */
char line[BUFSIZ];
gmm::standard_locale sl;
diff --git a/src/gmm/gmm_interface.h b/src/gmm/gmm_interface.h
index c199a60..8101f4b 100644
--- a/src/gmm/gmm_interface.h
+++ b/src/gmm/gmm_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_interface.h
@@ -831,8 +832,8 @@ namespace gmm {
}
void fill(T a, T b = T(0)) {
- std::fill(begin_, end+nbc*nbl, b);
- iterator p = begin_, e = end+nbc*nbl;
+ std::fill(begin_, begin_+nbc*nbl, b);
+ iterator p = begin_, e = begin_+nbc*nbl;
while (p < e) { *p = a; p += nbl+1; }
}
inline size_type nrows(void) const { return nbl; }
@@ -957,8 +958,8 @@ namespace gmm {
}
void fill(T a, T b = T(0)) {
- std::fill(begin_, end+nbc*nbl, b);
- iterator p = begin_, e = end+nbc*nbl;
+ std::fill(begin_, begin_+nbc*nbl, b);
+ iterator p = begin_, e = begin_+nbc*nbl;
while (p < e) { *p = a; p += nbc+1; }
}
inline size_type nrows(void) const { return nbl; }
diff --git a/src/gmm/gmm_interface_bgeot.h b/src/gmm/gmm_interface_bgeot.h
index 6e1b7b5..d7a3bef 100644
--- a/src/gmm/gmm_interface_bgeot.h
+++ b/src/gmm/gmm_interface_bgeot.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_interface_bgeot.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_iter.h b/src/gmm/gmm_iter.h
index 029e340..5a3a9de 100644
--- a/src/gmm/gmm_iter.h
+++ b/src/gmm/gmm_iter.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_iter.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -55,6 +56,8 @@ namespace gmm {
int noise; /* if noise > 0 iterations are printed. */
double resmax; /* maximum residu. */
double resminreach, resadd;
+ double diverged_res; /* Threshold beyond which the iterative */
+ /* is considered to diverge. */
size_type nit; /* iteration number. */
double res; /* last computed residu. */
std::string name; /* eventually, name of the method. */
@@ -64,12 +67,14 @@ namespace gmm {
void init(void) {
nit = 0; res = 0.0; written = false;
- resminreach = 1E50; resadd = 0.0;
+ resminreach = 1E200; resadd = 0.0;
callback = 0;
}
- iteration(double r = 1.0E-8, int noi = 0, size_type mit = size_type(-1))
- : rhsn(1.0), maxiter(mit), noise(noi), resmax(r) { init(); }
+ iteration(double r = 1.0E-8, int noi = 0, size_type mit = size_type(-1),
+ double div_res = 1E200)
+ : rhsn(1.0), maxiter(mit), noise(noi), resmax(r), diverged_res(div_res)
+ { init(); }
void operator ++(int) { nit++; written = false; resadd += res; }
void operator ++() { (*this)++; }
@@ -85,12 +90,17 @@ namespace gmm {
void set_resmax(double r) { resmax = r; }
double get_res() const { return res; }
+ void enforce_converged(bool c = true)
+ { if (c) res = double(0); else res = rhsn * resmax + double(1); }
/* change the user-definable callback, called after each iteration */
void set_callback(void (*t)(const gmm::iteration&)) {
callback = t;
}
+ double get_diverged_residual(void) const { return diverged_res; }
+ void set_diverged_residual(double r) { diverged_res = r; }
+
size_type get_iteration(void) const { return nit; }
void set_iteration(size_type i) { nit = i; }
@@ -107,6 +117,12 @@ namespace gmm {
}
template <typename VECT> bool converged(const VECT &v)
{ return converged(gmm::vect_norm2(v)); }
+ bool diverged(void)
+ { return (nit>=maxiter) || (res>=rhsn*diverged_res && nit > 4); }
+ bool diverged(double nr) {
+ res = gmm::abs(nr); resminreach = std::min(resminreach, res);
+ return diverged();
+ }
bool finished(double nr) {
if (callback) callback(*this);
@@ -123,7 +139,7 @@ namespace gmm {
cout << endl;
written = true;
}
- return (nit >= maxiter || converged(nr));
+ return (converged(nr) || diverged(nr));
}
template <typename VECT> bool finished_vect(const VECT &v)
{ return finished(double(gmm::vect_norm2(v))); }
diff --git a/src/gmm/gmm_iter_solvers.h b/src/gmm/gmm_iter_solvers.h
index 395c5af..f7a1ad3 100644
--- a/src/gmm/gmm_iter_solvers.h
+++ b/src/gmm/gmm_iter_solvers.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_iter_solvers.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_kernel.h b/src/gmm/gmm_kernel.h
index a460303..a52a5cd 100644
--- a/src/gmm/gmm_kernel.h
+++ b/src/gmm/gmm_kernel.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_kernel.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_lapack_interface.h b/src/gmm/gmm_lapack_interface.h
index cdf6a64..ac694a6 100644
--- a/src/gmm/gmm_lapack_interface.h
+++ b/src/gmm/gmm_lapack_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_lapack_interface.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_least_squares_cg.h b/src/gmm/gmm_least_squares_cg.h
index f21c05a..442d4d3 100644
--- a/src/gmm/gmm_least_squares_cg.h
+++ b/src/gmm/gmm_least_squares_cg.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Benjamin Schleimer
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_leastsquares_cg.h
@author Benjamin Schleimer <bensch128 (at) yahoo (dot) com>
diff --git a/src/gmm/gmm_matrix.h b/src/gmm/gmm_matrix.h
index d49a717..c7801bc 100644
--- a/src/gmm/gmm_matrix.h
+++ b/src/gmm/gmm_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/** @file gmm_matrix.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -347,17 +348,19 @@ namespace gmm
typedef typename std::vector<T>::size_type size_type;
typedef typename std::vector<T>::iterator iterator;
typedef typename std::vector<T>::const_iterator const_iterator;
+ typedef typename std::vector<T>::reference reference;
+ typedef typename std::vector<T>::const_reference const_reference;
protected:
size_type nbc, nbl;
public:
- inline const T& operator ()(size_type l, size_type c) const {
+ inline const_reference operator ()(size_type l, size_type c) const {
GMM_ASSERT2(l < nbl && c < nbc, "out of range");
return *(this->begin() + c*nbl+l);
}
- inline T& operator ()(size_type l, size_type c) {
+ inline reference operator ()(size_type l, size_type c) {
GMM_ASSERT2(l < nbl && c < nbc, "out of range");
return *(this->begin() + c*nbl+l);
}
@@ -479,6 +482,7 @@ namespace gmm
template<typename T> std::ostream &operator <<
(std::ostream &o, const dense_matrix<T>& m) { gmm::write(o,m); return o; }
+
/* ******************************************************************** */
/* */
/* Read only compressed sparse column matrix */
@@ -557,7 +561,6 @@ namespace gmm
template <typename T, int shift>
void csc_matrix<T, shift>::init_with_identity(size_type n) {
- if (pr) { delete[] pr; delete[] ir; delete[] jc; }
nc = nr = n;
pr.resize(nc); ir.resize(nc); jc.resize(nc+1);
for (size_type j = 0; j < nc; ++j)
diff --git a/src/gmm/gmm_modified_gram_schmidt.h b/src/gmm/gmm_modified_gram_schmidt.h
index 1f5b624..f49a1d2 100644
--- a/src/gmm/gmm_modified_gram_schmidt.h
+++ b/src/gmm/gmm_modified_gram_schmidt.h
@@ -1,30 +1,60 @@
-// -*- c++ -*- (enables emacs c++ mode)
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
//===========================================================================
//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// * Neither the name of the University of Notre Dame nor the
+// names of its contributors may be used to endorse or promote products
+// derived from this software without specific prior written permission.
//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
+// THIS SOFTWARE IS PROVIDED BY THE TRUSTEES OF INDIANA UNIVERSITY AND
+// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES
+// OF INDIANA UNIVERSITY AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//===========================================================================
diff --git a/src/gmm/gmm_opt.h b/src/gmm/gmm_opt.h
index 40d62f9..c62a130 100644
--- a/src/gmm/gmm_opt.h
+++ b/src/gmm/gmm_opt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_opt.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond.h b/src/gmm/gmm_precond.h
index 12a39d9..bd76606 100644
--- a/src/gmm/gmm_precond.h
+++ b/src/gmm/gmm_precond.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GMM_PRECOND_H
#define GMM_PRECOND_H
diff --git a/src/gmm/gmm_precond_diagonal.h b/src/gmm/gmm_precond_diagonal.h
index fa698c4..b0ad075 100644
--- a/src/gmm/gmm_precond_diagonal.h
+++ b/src/gmm/gmm_precond_diagonal.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_precond_diagonal.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_ildlt.h b/src/gmm/gmm_precond_ildlt.h
index bd0effc..bce1fb0 100644
--- a/src/gmm/gmm_precond_ildlt.h
+++ b/src/gmm/gmm_precond_ildlt.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of cholesky.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_precond_ildltt.h b/src/gmm/gmm_precond_ildltt.h
index adcebe7..ca73c5b 100644
--- a/src/gmm/gmm_precond_ildltt.h
+++ b/src/gmm/gmm_precond_ildltt.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_precond_ildltt.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_ilu.h b/src/gmm/gmm_precond_ilu.h
index a71ef80..71f24d0 100644
--- a/src/gmm/gmm_precond_ilu.h
+++ b/src/gmm/gmm_precond_ilu.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of ilu.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
@@ -192,16 +192,16 @@ namespace gmm {
qn = j + 1;
rn = U_ptr[i];
- for (pn++; U_ind[pn] < i && pn < U_ptr[L_ind[j]+1]; pn++) {
- while (L_ind[qn] < U_ind[pn] && qn < L_ptr[i+1])
+ for (pn++; pn < U_ptr[L_ind[j]+1] && U_ind[pn] < i; pn++) {
+ while (qn < L_ptr[i+1] && L_ind[qn] < U_ind[pn])
qn++;
- if (U_ind[pn] == L_ind[qn] && qn < L_ptr[i+1])
+ if (qn < L_ptr[i+1] && U_ind[pn] == L_ind[qn])
L_val[qn] -= multiplier * U_val[pn];
}
for (; pn < U_ptr[L_ind[j]+1]; pn++) {
- while (U_ind[rn] < U_ind[pn] && rn < U_ptr[i+1])
+ while (rn < U_ptr[i+1] && U_ind[rn] < U_ind[pn])
rn++;
- if (U_ind[pn] == U_ind[rn] && rn < U_ptr[i+1])
+ if (rn < U_ptr[i+1] && U_ind[pn] == U_ind[rn])
U_val[rn] -= multiplier * U_val[pn];
}
}
diff --git a/src/gmm/gmm_precond_ilut.h b/src/gmm/gmm_precond_ilut.h
index ec22e3c..7273532 100644
--- a/src/gmm/gmm_precond_ilut.h
+++ b/src/gmm/gmm_precond_ilut.h
@@ -1,32 +1,66 @@
-// -*- c++ -*- (enables emacs c++ mode)
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+// This file is a modified version of ilut.h from ITL.
+// See http://osl.iu.edu/research/itl/
+// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (C) 1997-2009 Yves Renard
-//
-// This file is a part of GETFEM++
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// * Neither the name of the University of Notre Dame nor the
+// names of its contributors may be used to endorse or promote products
+// derived from this software without specific prior written permission.
//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
+// THIS SOFTWARE IS PROVIDED BY THE TRUSTEES OF INDIANA UNIVERSITY AND
+// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES
+// OF INDIANA UNIVERSITY AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//===========================================================================
+
#ifndef GMM_PRECOND_ILUT_H
#define GMM_PRECOND_ILUT_H
diff --git a/src/gmm/gmm_precond_ilutp.h b/src/gmm/gmm_precond_ilutp.h
index 1880285..41a2147 100644
--- a/src/gmm/gmm_precond_ilutp.h
+++ b/src/gmm/gmm_precond_ilutp.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2009 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_precond_ilutp.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_precond_mr_approx_inverse.h b/src/gmm/gmm_precond_mr_approx_inverse.h
index 498ede9..80733cf 100644
--- a/src/gmm/gmm_precond_mr_approx_inverse.h
+++ b/src/gmm/gmm_precond_mr_approx_inverse.h
@@ -1,40 +1,41 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
// This file is a modified version of approximate_inverse.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +44,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_range_basis.h b/src/gmm/gmm_range_basis.h
index 04735c9..9422d76 100644
--- a/src/gmm/gmm_range_basis.h
+++ b/src/gmm/gmm_range_basis.h
@@ -1,37 +1,38 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_range_basis.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date March 10, 2009.
- @brief Extract a basis of the range of a (large sparse) matrix from the
+ @brief Extract a basis of the range of a (large sparse) matrix from the
columns of this matrix.
*/
#ifndef GMM_RANGE_BASIS_H
@@ -62,29 +63,29 @@ namespace gmm {
size_type n = diag.size(), q = 0, p, ite = 0;
if (n == 0) return;
if (n == 1) { eigval[0] = gmm::real(diag[0]); return; }
-
+
symmetric_qr_stop_criterion(diag, sdiag, p, q, tol);
-
+
while (q < n) {
sub_interval SUBI(p, n-p-q), SUBJ(0, mat_ncols(eigvect)), SUBK(p, n-p-q);
if (!compvect) SUBK = sub_interval(0,0);
-
+
symmetric_Wilkinson_qr_step(sub_vector(diag, SUBI),
- sub_vector(sdiag, SUBI),
- sub_matrix(eigvect, SUBJ, SUBK), compvect);
+ sub_vector(sdiag, SUBI),
+ sub_matrix(eigvect, SUBJ, SUBK), compvect);
symmetric_qr_stop_criterion(diag, sdiag, p, q, tol*R(3));
++ite;
GMM_ASSERT1(ite < n*100, "QR algorithm failed.");
}
-
+
gmm::copy(diag, eigval);
}
// Range basis with a restarted Lanczos method
template <typename Mat>
void range_basis_eff_Lanczos(const Mat &BB, std::set<size_type> &columns,
- double EPS=1E-12) {
+ double EPS=1E-12) {
typedef std::set<size_type> TAB;
typedef typename linalg_traits<Mat>::value_type T;
typedef typename number_traits<T>::magnitude_type R;
@@ -93,36 +94,36 @@ namespace gmm {
col_matrix< rsvector<T> > B(mat_nrows(BB), mat_ncols(BB));
k = 0;
- for (TAB::iterator it = columns.begin(); it!=columns.end(); ++it, ++k)
+ for (TAB::iterator it = columns.begin(); it!=columns.end(); ++it, ++k){
gmm::copy(scaled(mat_col(BB, *it), T(1)/vect_norm2(mat_col(BB, *it))),
- mat_col(B, *it));
-
+ mat_col(B, *it));
+ }
std::vector<T> w(mat_nrows(B));
size_type restart = 120;
std::vector<T> sdiag(restart);
std::vector<R> eigval(restart), diag(restart);
dense_matrix<T> eigvect(restart, restart);
-
+
R rho = R(-1), rho2;
-
while (nc_r) {
std::vector<T> v(nc_r), v0(nc_r), wl(nc_r);
dense_matrix<T> lv(nc_r, restart);
if (rho < R(0)) { // Estimate of the spectral radius of B^* B
- gmm::fill_random(v);
- for (size_type i = 0; i < 100; ++i) {
- gmm::scale(v, T(1)/vect_norm2(v));
- gmm::copy(v, v0);
- k = 0; gmm::clear(w);
- for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
- add(scaled(mat_col(B, *it), v[k]), w);
- k = 0;
- for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
- v[k] = vect_hp(w, mat_col(B, *it));
- rho = gmm::abs(vect_hp(v, v0) / vect_hp(v0, v0));
- }
+ gmm::fill_random(v);
+ for (size_type i = 0; i < 100; ++i) {
+ gmm::scale(v, T(1)/vect_norm2(v));
+ gmm::copy(v, v0);
+ k = 0; gmm::clear(w);
+ for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+ add(scaled(mat_col(B, *it), v[k]), w);
+ k = 0;
+ for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+ v[k] = vect_hp(w, mat_col(B, *it));
+ rho = gmm::abs(vect_hp(v, v0) / vect_hp(v0, v0));
+ }
+ rho *= R(2);
}
// Computing vectors of the null space of de B^* B with restarted Lanczos
@@ -130,50 +131,60 @@ namespace gmm {
gmm::fill_random(v);
size_type iter = 0;
for(;;++iter) {
- R rho_old = rho2;
- R beta = R(0), alpha;
- gmm::scale(v, T(1)/vect_norm2(v));
- for (size_type i = 0; i < restart; ++i) { // Lanczos iterations
- gmm::copy(v, mat_col(lv, i));
- gmm::clear(w);
- k = 0;
- for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
- add(scaled(mat_col(B, *it), v[k]), w);
- k = 0;
- for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
- wl[k] = v[k]*rho - vect_hp(w, mat_col(B, *it)) - beta*v0[k];
- alpha = gmm::real(vect_hp(wl, v));
- diag[i] = alpha;
- gmm::add(gmm::scaled(v, -alpha), wl);
- sdiag[i] = beta = vect_norm2(wl);
- gmm::copy(v, v0);
- gmm::copy(gmm::scaled(wl, T(1) / beta), v);
- }
-
- tridiag_qr_algorithm(diag, sdiag, eigval, eigvect, true);
-
- size_type num = size_type(-1);
- rho2 = R(0);
- for (size_type j = 0; j < restart; ++j)
- { R nvp=gmm::abs(eigval[j]); if (nvp > rho2) { rho2=nvp; num=j; } }
- GMM_ASSERT1(num != size_type(-1), "Internal error");
-
- gmm::mult(lv, mat_col(eigvect, num), v);
-
- if (gmm::abs(rho2-rho_old) < rho_old*R(EPS)*R(1000)) break;
- if (gmm::abs(rho-rho2) <= rho*R(gmm::sqrt(EPS))) break;
- }
+ R rho_old = rho2;
+ R beta = R(0), alpha;
+ gmm::scale(v, T(1)/vect_norm2(v));
+ size_type eff_restart = restart;
+ if (sdiag.size() != restart) {
+ sdiag.resize(restart); eigval.resize(restart); diag.resize(restart); gmm::resize(eigvect, restart, restart);
+ gmm::resize(lv, nc_r, restart);
+ }
+
+ for (size_type i = 0; i < restart; ++i) { // Lanczos iterations
+ gmm::copy(v, mat_col(lv, i));
+ gmm::clear(w);
+ k = 0;
+ for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+ add(scaled(mat_col(B, *it), v[k]), w);
+
+ k = 0;
+ for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++k)
+ wl[k] = v[k]*rho - vect_hp(w, mat_col(B, *it)) - beta*v0[k];
+ alpha = gmm::real(vect_hp(wl, v));
+ diag[i] = alpha;
+ gmm::add(gmm::scaled(v, -alpha), wl);
+ sdiag[i] = beta = vect_norm2(wl);
+ gmm::copy(v, v0);
+ if (beta < EPS) { eff_restart = i+1; break; }
+ gmm::copy(gmm::scaled(wl, T(1) / beta), v);
+ }
+ if (eff_restart != restart) {
+ sdiag.resize(eff_restart); eigval.resize(eff_restart); diag.resize(eff_restart);
+ gmm::resize(eigvect, eff_restart, eff_restart); gmm::resize(lv, nc_r, eff_restart);
+ }
+ tridiag_qr_algorithm(diag, sdiag, eigval, eigvect, true);
- // cout << " iter = " << iter << endl;
+ size_type num = size_type(-1);
+ rho2 = R(0);
+ for (size_type j = 0; j < eff_restart; ++j)
+ { R nvp=gmm::abs(eigval[j]); if (nvp > rho2) { rho2=nvp; num=j; }}
- if (gmm::abs(rho-rho2) < rho*R(gmm::sqrt(EPS))) {
- size_type j_max = size_type(-1), j = 0;
- R val_max = R(0);
- for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++j)
- if (gmm::abs(v[j]) > val_max)
- { val_max = gmm::abs(v[j]); j_max = *it; }
- // cout << "Eliminate " << j_max << endl;
- columns.erase(j_max); nc_r = columns.size();
+ GMM_ASSERT1(num != size_type(-1), "Internal error");
+
+ gmm::mult(lv, mat_col(eigvect, num), v);
+
+ if (gmm::abs(rho2-rho_old) < rho_old*R(EPS)) break;
+ // if (gmm::abs(rho-rho2) < rho*R(gmm::sqrt(EPS))) break;
+ if (gmm::abs(rho-rho2) < rho*R(EPS)*R(100)) break;
+ }
+
+ if (gmm::abs(rho-rho2) < rho*R(EPS*10.)) {
+ size_type j_max = size_type(-1), j = 0;
+ R val_max = R(0);
+ for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it, ++j)
+ if (gmm::abs(v[j]) > val_max)
+ { val_max = gmm::abs(v[j]); j_max = *it; }
+ columns.erase(j_max); nc_r = columns.size();
}
else break;
}
@@ -183,8 +194,8 @@ namespace gmm {
// Complex version not verified
template <typename Mat>
void range_basis_eff_lu(const Mat &B, std::set<size_type> &columns,
- std::vector<bool> &c_ortho, double EPS) {
-
+ std::vector<bool> &c_ortho, double EPS) {
+
typedef std::set<size_type> TAB;
typedef typename linalg_traits<Mat>::value_type T;
typedef typename number_traits<T>::magnitude_type R;
@@ -195,17 +206,17 @@ namespace gmm {
if (!(c_ortho[*it])) ++nc_r; else nc_o++;
if (nc_r > 0) {
-
+
gmm::row_matrix< gmm::rsvector<T> > Hr(nc, nc_r), Ho(nc, nc_o);
gmm::row_matrix< gmm::rsvector<T> > BBr(nr, nc_r), BBo(nr, nc_o);
-
+
i = j = 0;
for (TAB::iterator it=columns.begin(); it!=columns.end(); ++it)
- if (!(c_ortho[*it]))
- { Hr(*it, i) = T(1)/ vect_norminf(mat_col(B, *it)); ++i; }
- else
- { Ho(*it, j) = T(1)/ vect_norm2(mat_col(B, *it)); ++j; }
-
+ if (!(c_ortho[*it]))
+ { Hr(*it, i) = T(1)/ vect_norminf(mat_col(B, *it)); ++i; }
+ else
+ { Ho(*it, j) = T(1)/ vect_norm2(mat_col(B, *it)); ++j; }
+
gmm::mult(B, Hr, BBr);
gmm::mult(B, Ho, BBo);
gmm::dense_matrix<T> M(nc_r, nc_r), BBB(nc_r, nc_o), MM(nc_r, nc_r);
@@ -213,20 +224,20 @@ namespace gmm {
gmm::mult(gmm::conjugated(BBr), BBo, BBB);
gmm::mult(BBB, gmm::conjugated(BBB), MM);
gmm::add(gmm::scaled(MM, T(-1)), M);
-
+
std::vector<int> ipvt(nc_r);
gmm::lu_factor(M, ipvt);
-
+
R emax = R(0);
for (i = 0; i < nc_r; ++i) emax = std::max(emax, gmm::abs(M(i,i)));
i = 0;
std::set<size_type> c = columns;
for (TAB::iterator it = c.begin(); it != c.end(); ++it)
- if (!(c_ortho[*it])) {
- if (gmm::abs(M(i,i)) <= R(EPS)*emax) columns.erase(*it);
- ++i;
- }
+ if (!(c_ortho[*it])) {
+ if (gmm::abs(M(i,i)) <= R(EPS)*emax) columns.erase(*it);
+ ++i;
+ }
}
}
@@ -237,10 +248,10 @@ namespace gmm {
// Complex version not verified
template <typename Mat>
void range_basis_eff_Gram_Schmidt_sparse(const Mat &BB,
- std::set<size_type> &columns,
- std::vector<bool> &c_ortho,
- double EPS) {
-
+ std::set<size_type> &columns,
+ std::vector<bool> &c_ortho,
+ double EPS) {
+
typedef std::set<size_type> TAB;
typedef typename linalg_traits<Mat>::value_type T;
typedef typename number_traits<T>::magnitude_type R;
@@ -250,39 +261,39 @@ namespace gmm {
gmm::col_matrix< rsvector<T> > B(nr, nc);
for (std::set<size_type>::iterator it = columns.begin();
- it != columns.end(); ++it) {
+ it != columns.end(); ++it) {
gmm::copy(mat_col(BB, *it), mat_col(B, *it));
gmm::scale(mat_col(B, *it), T(1)/vect_norm2(mat_col(B, *it)));
}
for (std::set<size_type>::iterator it = c.begin(); it != c.end(); ++it)
if (c_ortho[*it]) {
- for (std::set<size_type>::iterator it2 = rc.begin();
- it2 != rc.end(); ++it2)
- if (!(c_ortho[*it2])) {
- T r = -vect_hp(mat_col(B, *it2), mat_col(B, *it));
- if (r != T(0)) add(scaled(mat_col(B, *it), r), mat_col(B, *it2));
- }
- rc.erase(*it);
+ for (std::set<size_type>::iterator it2 = rc.begin();
+ it2 != rc.end(); ++it2)
+ if (!(c_ortho[*it2])) {
+ T r = -vect_hp(mat_col(B, *it2), mat_col(B, *it));
+ if (r != T(0)) add(scaled(mat_col(B, *it), r), mat_col(B, *it2));
+ }
+ rc.erase(*it);
}
-
+
while (rc.size()) {
R nmax = R(0); size_type cmax = size_type(-1);
for (std::set<size_type>::iterator it=rc.begin(); it != rc.end();) {
- TAB::iterator itnext = it; ++itnext;
- R n = vect_norm2(mat_col(B, *it));
- if (nmax < n) { nmax = n; cmax = *it; }
- if (n < R(EPS)) { columns.erase(*it); rc.erase(*it); }
- it = itnext;
+ TAB::iterator itnext = it; ++itnext;
+ R n = vect_norm2(mat_col(B, *it));
+ if (nmax < n) { nmax = n; cmax = *it; }
+ if (n < R(EPS)) { columns.erase(*it); rc.erase(*it); }
+ it = itnext;
}
-
+
if (nmax < R(EPS)) break;
-
+
gmm::scale(mat_col(B, cmax), T(1)/vect_norm2(mat_col(B, cmax)));
rc.erase(cmax);
for (std::set<size_type>::iterator it=rc.begin(); it!=rc.end(); ++it) {
- T r = -vect_hp(mat_col(B, *it), mat_col(B, cmax));
- if (r != T(0)) add(scaled(mat_col(B, cmax), r), mat_col(B, *it));
+ T r = -vect_hp(mat_col(B, *it), mat_col(B, cmax));
+ if (r != T(0)) add(scaled(mat_col(B, cmax), r), mat_col(B, *it));
}
}
for (std::set<size_type>::iterator it=rc.begin(); it!=rc.end(); ++it)
@@ -293,35 +304,35 @@ namespace gmm {
// Range basis with Gram-Schmidt orthogonalization (dense version)
template <typename Mat>
void range_basis_eff_Gram_Schmidt_dense(const Mat &B,
- std::set<size_type> &columns,
- std::vector<bool> &c_ortho,
- double EPS) {
-
+ std::set<size_type> &columns,
+ std::vector<bool> &c_ortho,
+ double EPS) {
+
typedef std::set<size_type> TAB;
typedef typename linalg_traits<Mat>::value_type T;
typedef typename number_traits<T>::magnitude_type R;
size_type nc_r = columns.size(), nc = mat_ncols(B), nr = mat_nrows(B), i;
std::set<size_type> rc;
-
+
row_matrix< gmm::rsvector<T> > H(nc, nc_r), BB(nr, nc_r);
std::vector<T> v(nc_r);
std::vector<size_type> ind(nc_r);
-
+
i = 0;
for (TAB::iterator it = columns.begin(); it != columns.end(); ++it, ++i)
H(*it, i) = T(1) / vect_norm2(mat_col(B, *it));
-
+
mult(B, H, BB);
dense_matrix<T> M(nc_r, nc_r);
mult(gmm::conjugated(BB), BB, M);
-
+
i = 0;
for (TAB::iterator it = columns.begin(); it != columns.end(); ++it, ++i)
if (c_ortho[*it]) {
- gmm::copy(mat_row(M, i), v);
- rank_one_update(M, scaled(v, T(-1)), v);
- M(i, i) = T(1);
+ gmm::copy(mat_row(M, i), v);
+ rank_one_update(M, scaled(v, T(-1)), v);
+ M(i, i) = T(1);
}
else { rc.insert(i); ind[i] = *it; }
@@ -330,11 +341,11 @@ namespace gmm {
// Next pivot
R nmax = R(0); size_type imax = size_type(-1);
for (TAB::iterator it = rc.begin(); it != rc.end();) {
- TAB::iterator itnext = it; ++itnext;
- R a = gmm::abs(M(*it, *it));
- if (a > nmax) { nmax = a; imax = *it; }
- if (a < R(EPS)) { columns.erase(ind[*it]); rc.erase(*it); }
- it = itnext;
+ TAB::iterator itnext = it; ++itnext;
+ R a = gmm::abs(M(*it, *it));
+ if (a > nmax) { nmax = a; imax = *it; }
+ if (a < R(EPS)) { columns.erase(ind[*it]); rc.erase(*it); }
+ it = itnext;
}
if (nmax < R(EPS)) break;
@@ -342,7 +353,7 @@ namespace gmm {
// Normalization
gmm::scale(mat_row(M, imax), T(1) / sqrt(nmax));
gmm::scale(mat_col(M, imax), T(1) / sqrt(nmax));
-
+
// orthogonalization
copy(mat_row(M, imax), v);
rank_one_update(M, scaled(v, T(-1)), v);
@@ -354,7 +365,7 @@ namespace gmm {
columns.erase(ind[*it]);
}
- template <typename L> size_type nnz_eps(const L& l, double eps) {
+ template <typename L> size_type nnz_eps(const L& l, double eps) {
typename linalg_traits<L>::const_iterator it = vect_const_begin(l),
ite = vect_const_end(l);
size_type res(0);
@@ -371,15 +382,15 @@ namespace gmm {
if (gmm::abs(*it) >= eps && b[it.index()]) ok = false;
if (ok) {
for (it = vect_const_begin(l); it != ite; ++it)
- if (gmm::abs(*it) >= eps) b[it.index()] = true;
+ if (gmm::abs(*it) >= eps) b[it.index()] = true;
}
return ok;
}
template <typename Mat>
void range_basis(const Mat &B, std::set<size_type> &columns,
- double EPS, col_major, bool skip_init=false) {
-
+ double EPS, col_major, bool skip_init=false) {
+
typedef typename linalg_traits<Mat>::value_type T;
typedef typename number_traits<T>::magnitude_type R;
@@ -390,25 +401,25 @@ namespace gmm {
std::vector< std::set<size_type> > nnzs(mat_nrows(B));
if (!skip_init) {
-
+
R norm_max = R(0);
for (size_type i = 0; i < nc; ++i) {
- norms[i] = vect_norminf(mat_col(B, i));
- norm_max = std::max(norm_max, norms[i]);
+ norms[i] = vect_norminf(mat_col(B, i));
+ norm_max = std::max(norm_max, norms[i]);
}
-
+
columns.clear();
for (size_type i = 0; i < nc; ++i)
- if (norms[i] > norm_max*R(EPS)) {
- columns.insert(i);
- nnzs[nnz_eps(mat_col(B, i), R(EPS) * norms[i])].insert(i);
- }
-
+ if (norms[i] > norm_max*R(EPS)) {
+ columns.insert(i);
+ nnzs[nnz_eps(mat_col(B, i), R(EPS) * norms[i])].insert(i);
+ }
+
for (size_type i = 1; i < nr; ++i)
- for (std::set<size_type>::iterator it = nnzs[i].begin();
- it != nnzs[i].end(); ++it)
- if (reserve__rb(mat_col(B, *it), booked, R(EPS) * norms[*it]))
- c_ortho[*it] = true;
+ for (std::set<size_type>::iterator it = nnzs[i].begin();
+ it != nnzs[i].end(); ++it)
+ if (reserve__rb(mat_col(B, *it), booked, R(EPS) * norms[*it]))
+ c_ortho[*it] = true;
}
size_type sizesm[7] = {125, 200, 350, 550, 800, 1100, 1500}, actsize;
@@ -417,26 +428,26 @@ namespace gmm {
std::set<size_type> c1, cres;
actsize = sizesm[k];
for (std::set<size_type>::iterator it = columns.begin();
- it != columns.end(); ++it) {
- c1.insert(*it);
- if (c1.size() >= actsize) {
- range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
- for (std::set<size_type>::iterator it2=c1.begin(); it2 != c1.end();
- ++it2) cres.insert(*it2);
- c1.clear();
- }
+ it != columns.end(); ++it) {
+ c1.insert(*it);
+ if (c1.size() >= actsize) {
+ range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
+ for (std::set<size_type>::iterator it2=c1.begin(); it2 != c1.end();
+ ++it2) cres.insert(*it2);
+ c1.clear();
+ }
}
if (c1.size() > 10)
- range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
+ range_basis_eff_Gram_Schmidt_dense(B, c1, c_ortho, EPS);
for (std::set<size_type>::iterator it = c1.begin(); it != c1.end(); ++it)
- cres.insert(*it);
+ cres.insert(*it);
columns = cres;
if (nc_r <= actsize) return;
if (columns.size() == nc_r) break;
if (sizesm[k] >= 350 && columns.size() > (nc_r*19)/20) break;
}
-
- if (columns.size() > std::max(size_type(500), actsize))
+ // cout << "size of columns " << columns.size() << endl;
+ if (columns.size() > std::max(size_type(10), actsize))
range_basis_eff_Lanczos(B, columns, EPS);
else
range_basis_eff_Gram_Schmidt_dense(B, columns, c_ortho, EPS);
@@ -445,18 +456,18 @@ namespace gmm {
template <typename Mat>
void range_basis(const Mat &B, std::set<size_type> &columns,
- double EPS, row_major) {
+ double EPS, row_major) {
typedef typename linalg_traits<Mat>::value_type T;
gmm::col_matrix< rsvector<T> > BB(mat_nrows(B), mat_ncols(B));
GMM_WARNING3("A copy of a row matrix is done into a column matrix "
- "for range basis algorithm.");
+ "for range basis algorithm.");
gmm::copy(B, BB);
range_basis(BB, columns, EPS);
}
- /** Range Basis :
+ /** Range Basis :
Extract a basis of the range of a (large sparse) matrix selecting some
- column vectors of this matrix. This is in particular usefull to select
+ column vectors of this matrix. This is in particular useful to select
an independent set of linear constraints.
The algorithm is optimized for two cases :
@@ -478,10 +489,10 @@ namespace gmm {
*/
template <typename Mat>
void range_basis(const Mat &B, std::set<size_type> &columns,
- double EPS=1E-12) {
+ double EPS=1E-12) {
range_basis(B, columns, EPS,
- typename principal_orientation_type
- <typename linalg_traits<Mat>::sub_orientation>::potype());
+ typename principal_orientation_type
+ <typename linalg_traits<Mat>::sub_orientation>::potype());
}
}
diff --git a/src/gmm/gmm_real_part.h b/src/gmm/gmm_real_part.h
index 9289319..31439d6 100644
--- a/src/gmm/gmm_real_part.h
+++ b/src/gmm/gmm_real_part.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_real_part.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_ref.h b/src/gmm/gmm_ref.h
index fc3ca6d..e2dbcbe 100644
--- a/src/gmm/gmm_ref.h
+++ b/src/gmm/gmm_ref.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2000-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
#ifndef GMM_REF_H__
diff --git a/src/gmm/gmm_scaled.h b/src/gmm/gmm_scaled.h
index a9922d8..5a0e5ad 100644
--- a/src/gmm/gmm_scaled.h
+++ b/src/gmm/gmm_scaled.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_scaled.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_solver_Newton.h b/src/gmm/gmm_solver_Newton.h
deleted file mode 100644
index 18dc62d..0000000
--- a/src/gmm/gmm_solver_Newton.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
-
-/**@file gmm_solver_Newton.h
- @author Yves Renard <Yves.Renard at insa-lyon.fr>
- @author Michel Fournie <fournie at mip.ups-tlse.fr>
- @date January 24, 2006.
-*/
-#ifndef GMM_SOLVERS_NEWTON_H__
-#define GMM_SOLVERS_NEWTON_H__
-
-namespace gmm {
-
-#include "gmm_kernel.h"
-
- /* ***************************************************************** */
- /* Line search definition */
- /* ***************************************************************** */
-
- struct abstract_newton_line_search {
- double conv_alpha, conv_r;
- size_t it, itmax, glob_it;
- // size_t tot_it;
- virtual void init_search(double r, size_t git) = 0;
- virtual double next_try(void) = 0;
- virtual bool is_converged(double) = 0;
- virtual double converged_value(void) {
- // tot_it += it; cout << "tot_it = " << tot_it << endl; it = 0;
- return conv_alpha;
- };
- virtual double converged_residual(void) { return conv_r; };
- virtual ~abstract_newton_line_search() { }
- };
-
-
- struct simplest_newton_line_search : public abstract_newton_line_search {
- double alpha, alpha_mult, first_res, alpha_max_ratio, alpha_min;
- virtual void init_search(double r, size_t git) {
- glob_it = git;
- conv_alpha = alpha = double(1); conv_r = first_res = r; it = 0;
- }
- virtual double next_try(void)
- { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
- virtual bool is_converged(double r) {
- conv_r = r;
- return ((it <= 1 && r < first_res)
- || (r <= first_res * alpha_max_ratio)
- || (conv_alpha <= alpha_min)
- || it >= itmax);
- }
- simplest_newton_line_search
- (size_t imax = size_t(-1), double a_max_ratio = 6.0/5.0,
- double a_min = 1.0/1000.0, double a_mult = 3.0/5.0)
- : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio), alpha_min(a_min)
- { itmax = imax; }
- };
-
- struct default_newton_line_search : public gmm::abstract_newton_line_search {
- double alpha, alpha_mult, first_res, alpha_max_ratio;
- double alpha_min, prev_res;
- bool first;
- virtual void init_search(double r, size_t git) {
- alpha_min = pow(10.0, -gmm::random() * 4.0);
- alpha_max_ratio = 1 + gmm::random();
- // cout << "alpha_min = " << alpha_min << endl;
- glob_it = git;
- conv_alpha = alpha = double(1);
- prev_res = conv_r = first_res = r; it = 0; first = true;
- }
- virtual double next_try(void)
- { double a = alpha; alpha *= alpha_mult; ++it; return a; }
- virtual bool is_converged(double r) {
- // cout << "alpha = " << alpha
- // << " first_res = " << first_res << " r = " << r << endl;
- if (r < conv_r || first)
- { conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
- if (r < first_res * 0.9) return true;
- if ((alpha <= alpha_min*alpha_mult && r < first_res*alpha_max_ratio)
- // || (gmm::abs(r - first_res) < 0.011 && alpha < 0.1)
- || it >= itmax) return true;
- return false;
- }
- default_newton_line_search(size_t imax = size_t(-1), double a_mult = 0.5)
- : alpha_mult(a_mult), alpha_min(0.1) { itmax = imax; }
- };
-
-// struct default_newton_line_search : public abstract_newton_line_search {
-// double alpha, alpha_mult, first_res, alpha_max_ratio;
-// double alpha_min, prev_res, alpha_max_augment;
-// virtual void init_search(double r, size_t git) {
-// glob_it = git;
-// conv_alpha = alpha = double(1);
-// prev_res = conv_r = first_res = r; it = 0;
-// }
-// virtual double next_try(void)
-// { conv_alpha = alpha; alpha *= alpha_mult; ++it; return conv_alpha; }
-// virtual bool is_converged(double r) {
-// if (glob_it == 0 || (r < first_res / double(2))
-// || (conv_alpha <= alpha_min && r < first_res * alpha_max_augment)
-// || it >= itmax)
-// { conv_r = r; return true; }
-// if (it > 1 && r > prev_res && prev_res < alpha_max_ratio * first_res)
-// return true;
-// prev_res = conv_r = r;
-// return false;
-// }
-// default_newton_line_search
-// (size_t imax = size_t(-1),
-// double a_max_ratio = 5.0/3.0,
-// double a_min = 1.0/1000.0, double a_mult = 3.0/5.0, double a_augm = 2.0)
-// : alpha_mult(a_mult), alpha_max_ratio(a_max_ratio),
-// alpha_min(a_min), alpha_max_augment(a_augm) { itmax = imax; }
-// };
-
-
- struct systematic_newton_line_search : public abstract_newton_line_search {
- double alpha, alpha_mult, first_res;
- double alpha_min, prev_res;
- bool first;
- virtual void init_search(double r, size_t git) {
- glob_it = git;
- conv_alpha = alpha = double(1);
- prev_res = conv_r = first_res = r; it = 0; first = true;
- }
- virtual double next_try(void)
- { double a = alpha; alpha *= alpha_mult; ++it; return a; }
- virtual bool is_converged(double r) {
- // cout << "a = " << alpha / alpha_mult << " r = " << r << endl;
- if (r < conv_r || first)
- { conv_r = r; conv_alpha = alpha / alpha_mult; first = false; }
- if ((alpha <= alpha_min*alpha_mult) || it >= itmax) return true;
- return false;
- }
- systematic_newton_line_search
- (size_t imax = size_t(-1),
- double a_min = 1.0/10000.0, double a_mult = 3.0/5.0)
- : alpha_mult(a_mult), alpha_min(a_min) { itmax = imax; }
- };
-
-}
-
-
-#endif
diff --git a/src/gmm/gmm_solver_Schwarz_additive.h b/src/gmm/gmm_solver_Schwarz_additive.h
index 8f7445d..21b094c 100644
--- a/src/gmm/gmm_solver_Schwarz_additive.h
+++ b/src/gmm/gmm_solver_Schwarz_additive.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_solver_Schwarz_additive.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -43,7 +44,6 @@
#include "gmm_solver_gmres.h"
#include "gmm_solver_bicgstab.h"
#include "gmm_solver_qmr.h"
-#include "gmm_solver_Newton.h"
namespace gmm {
@@ -595,7 +595,69 @@ namespace gmm {
void mult(const AS_exact_gradient<Matrixt, MatrixBi> &M,
const Vector2 &p, const Vector3 &p2, const Vector4 &q)
{ mult(M, p, const_cast<Vector4 &>(q)); add(p2, q); }
-
+
+ struct S_default_newton_line_search {
+
+ double conv_alpha, conv_r;
+ size_t it, itmax, glob_it;
+
+ double alpha, alpha_old, alpha_mult, first_res, alpha_max_ratio;
+ double alpha_min_ratio, alpha_min;
+ size_type count, count_pat;
+ bool max_ratio_reached;
+ double alpha_max_ratio_reached, r_max_ratio_reached;
+ size_type it_max_ratio_reached;
+
+
+ double converged_value(void) { return conv_alpha; };
+ double converged_residual(void) { return conv_r; };
+
+ virtual void init_search(double r, size_t git, double = 0.0) {
+ alpha_min_ratio = 0.9;
+ alpha_min = 1e-10;
+ alpha_max_ratio = 10.0;
+ alpha_mult = 0.25;
+ itmax = size_type(-1);
+ glob_it = git; if (git <= 1) count_pat = 0;
+ conv_alpha = alpha = alpha_old = 1.;
+ conv_r = first_res = r; it = 0;
+ count = 0;
+ max_ratio_reached = false;
+ }
+ virtual double next_try(void) {
+ alpha_old = alpha;
+ if (alpha >= 0.4) alpha *= 0.5; else alpha *= alpha_mult; ++it;
+ return alpha_old;
+ }
+ virtual bool is_converged(double r, double = 0.0) {
+ // cout << "r = " << r << " alpha = " << alpha / alpha_mult << " count_pat = " << count_pat << endl;
+ if (!max_ratio_reached && r < first_res * alpha_max_ratio) {
+ alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+ it_max_ratio_reached = it; max_ratio_reached = true;
+ }
+ if (max_ratio_reached && r < r_max_ratio_reached * 0.5
+ && r > first_res * 1.1 && it <= it_max_ratio_reached+1) {
+ alpha_max_ratio_reached = alpha_old; r_max_ratio_reached = r;
+ it_max_ratio_reached = it;
+ }
+ if (count == 0 || r < conv_r)
+ { conv_r = r; conv_alpha = alpha_old; count = 1; }
+ if (conv_r < first_res) ++count;
+
+ if (r < first_res * alpha_min_ratio)
+ { count_pat = 0.; return true; }
+ if (count >= 5 || (alpha < alpha_min && max_ratio_reached)) {
+ if (conv_r < first_res * 0.99) count_pat = 0;
+ if (/*gmm::random() * 50. < -log(conv_alpha)-4.0 ||*/ count_pat >= 3)
+ { conv_r=r_max_ratio_reached; conv_alpha=alpha_max_ratio_reached; }
+ if (conv_r >= first_res * 0.9999) count_pat++;
+ return true;
+ }
+ return false;
+ }
+ S_default_newton_line_search(void) { count_pat = 0; }
+ };
+
template <typename Matrixt, typename MatrixBi, typename Vector,
@@ -611,10 +673,8 @@ namespace gmm {
double residual = iter.get_resmax();
- default_newton_line_search internal_ls;
- default_newton_line_search external_ls;
-
- // systematic_newton_line_search external_ls(size_t(-1), 1.0/10000.0, 3.0/100.0);
+ S_default_newton_line_search internal_ls;
+ S_default_newton_line_search external_ls;
typename chgt_precond::APrecond PP = chgt_precond::transform(P);
iter.set_rhsnorm(mtype(1));
diff --git a/src/gmm/gmm_solver_bfgs.h b/src/gmm/gmm_solver_bfgs.h
index 88512a6..80d7c2e 100644
--- a/src/gmm/gmm_solver_bfgs.h
+++ b/src/gmm/gmm_solver_bfgs.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2004-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_solver_bfgs.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_solver_bicgstab.h b/src/gmm/gmm_solver_bicgstab.h
index c702b20..43ac687 100644
--- a/src/gmm/gmm_solver_bicgstab.h
+++ b/src/gmm/gmm_solver_bicgstab.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of bicgstab.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_solver_cg.h b/src/gmm/gmm_solver_cg.h
index c42aad6..8a70730 100644
--- a/src/gmm/gmm_solver_cg.h
+++ b/src/gmm/gmm_solver_cg.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of cg.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
@@ -102,10 +102,6 @@ namespace gmm {
rho = vect_hp(PS, z, r);
copy(z, p);
-// #ifdef GMM_USES_MPI
-// double t_ref, t_prec = MPI_Wtime(), t_tot = 0;
-// static double tmult_tot = 0.0;
-// #endif
while (!iter.finished_vect(r)) {
if (!iter.first()) {
@@ -113,24 +109,13 @@ namespace gmm {
rho = vect_hp(PS, z, r);
add(z, scaled(p, rho / rho_1), p);
}
-// #ifdef GMM_USES_MPI
-// t_ref = MPI_Wtime();
-// cout << "mult CG " << endl;
-// #endif
mult(A, p, q);
-// #ifdef GMM_USES_MPI
-// tmult_tot += MPI_Wtime()-t_ref;
-// cout << "tmult_tot CG = " << tmult_tot << endl;
-// #endif
+
a = rho / vect_hp(PS, q, p);
add(scaled(p, a), x);
add(scaled(q, -a), r);
rho_1 = rho;
-// #ifdef GMM_USES_MPI
-// t_tot = MPI_Wtime() - t_prec;
-// cout << "temps CG : " << t_tot << endl;
-// #endif
++iter;
}
}
@@ -155,34 +140,17 @@ namespace gmm {
rho = vect_hp(PS, r, r);
copy(r, p);
-// #ifdef GMM_USES_MPI
-// double t_ref, t_prec = MPI_Wtime(), t_tot = 0;
-// static double tmult_tot = 0.0;
-// #endif
while (!iter.finished_vect(r)) {
if (!iter.first()) {
rho = vect_hp(PS, r, r);
add(r, scaled(p, rho / rho_1), p);
- }
-// #ifdef GMM_USES_MPI
-// t_ref = MPI_Wtime();
-// cout << "mult CG " << endl;
-// #endif
+ }
mult(A, p, q);
-// #ifdef GMM_USES_MPI
-// tmult_tot += MPI_Wtime()-t_ref;
-// cout << "tmult_tot CG = " << tmult_tot << endl;
-// #endif
a = rho / vect_hp(PS, q, p);
add(scaled(p, a), x);
add(scaled(q, -a), r);
rho_1 = rho;
-
-// #ifdef GMM_USES_MPI
-// t_tot = MPI_Wtime() - t_prec;
-// cout << "temps CG : " << t_tot << endl;
-// #endif
++iter;
}
}
@@ -205,7 +173,7 @@ namespace gmm {
void cg(const Matrix& A, const Vector1& x, const Vector2& b,
const Precond &P, iteration &iter)
{ cg(A, x , b , identity_matrix(), P , iter); }
-
+
}
diff --git a/src/gmm/gmm_solver_constrained_cg.h b/src/gmm/gmm_solver_constrained_cg.h
index 7761412..7d6e5b7 100644
--- a/src/gmm/gmm_solver_constrained_cg.h
+++ b/src/gmm/gmm_solver_constrained_cg.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_solver_constrained_cg.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -53,7 +54,6 @@ namespace gmm {
// optimisable : copie de la ligne, precalcul de C * trans(C).
typedef VectorX TmpVec;
- typedef size_t size_type;
typedef typename linalg_traits<VectorX>::value_type value_type;
size_type nr = mat_nrows(C), nc = mat_ncols(C);
@@ -101,7 +101,6 @@ namespace gmm {
typedef typename temporary_vector<CMatrix>::vector_type TmpCVec;
typedef row_matrix<TmpCVec> TmpCmat;
- typedef size_t size_type;
typedef typename linalg_traits<VectorX>::value_type value_type;
value_type rho = 1.0, rho_1, lambda, gamma;
TmpVec p(vect_size(x)), q(vect_size(x)), q2(vect_size(x)),
diff --git a/src/gmm/gmm_solver_gmres.h b/src/gmm/gmm_solver_gmres.h
index fd88d24..38f760a 100644
--- a/src/gmm/gmm_solver_gmres.h
+++ b/src/gmm/gmm_solver_gmres.h
@@ -1,40 +1,40 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of gmres.h from ITL.
// See http://osl.iu.edu/research/itl/
// Following the corresponding Copyright notice.
//===========================================================================
//
-// Copyright (c) 1997-2001, The Trustees of Indiana University.
-// All rights reserved.
+// Copyright (c) 1998-2001, University of Notre Dame. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
@@ -43,7 +43,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_solver_idgmres.h b/src/gmm/gmm_solver_idgmres.h
index 166b642..1f69d8a 100644
--- a/src/gmm/gmm_solver_idgmres.h
+++ b/src/gmm/gmm_solver_idgmres.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard, Caroline Lecalvez
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_solver_idgmres.h
@author Caroline Lecalvez <Caroline.Lecalvez at gmm.insa-tlse.fr>
diff --git a/src/gmm/gmm_solver_qmr.h b/src/gmm/gmm_solver_qmr.h
index f236e83..5257d70 100644
--- a/src/gmm/gmm_solver_qmr.h
+++ b/src/gmm/gmm_solver_qmr.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1997-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
// This file is a modified version of qmr.h from ITL.
// See http://osl.iu.edu/research/itl/
@@ -43,7 +44,7 @@
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
-// * Neither the name of the University of California, Berkeley nor the
+// * Neither the name of the University of Notre Dame nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
diff --git a/src/gmm/gmm_std.h b/src/gmm/gmm_std.h
index aa05be9..cc1d7e0 100644
--- a/src/gmm/gmm_std.h
+++ b/src/gmm/gmm_std.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 1995-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_std.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>,
@@ -130,11 +131,12 @@
#include <numeric>
-using std::endl; using std::cout; using std::cerr;
-using std::ends; using std::cin;
-
namespace gmm {
+ using std::endl; using std::cout; using std::cerr;
+ using std::ends; using std::cin;
+
+
/* ********************************************************************* */
/* Change locale temporarily. */
/* ********************************************************************* */
diff --git a/src/gmm/gmm_sub_index.h b/src/gmm/gmm_sub_index.h
index e56e6fc..690078b 100644
--- a/src/gmm/gmm_sub_index.h
+++ b/src/gmm/gmm_sub_index.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_sub_index.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -128,7 +129,7 @@ namespace gmm {
template <typename CONT> sub_index(const CONT &c)
: ind(index_generator::create_index(c.begin(), c.end())),
rind(index_generator::create_rindex(ind))
- { comp_extr(); }
+ { comp_extr(); }
~sub_index()
{ index_generator::unattach(rind); index_generator::unattach(ind); }
sub_index(const sub_index &si) : first_(si.first_), last_(si.last_),
@@ -144,12 +145,15 @@ namespace gmm {
};
struct unsorted_sub_index : public sub_index {
+ typedef basic_index base_type;
+ typedef base_type::const_iterator const_iterator;
+
template <typename IT> unsorted_sub_index(IT it, IT ite)
: sub_index(it, ite) {}
template <typename CONT> unsorted_sub_index(const CONT &c)
: sub_index(c) {}
unsorted_sub_index() {}
- unsorted_sub_index(const unsorted_sub_index &si) : sub_index(si) {}
+ unsorted_sub_index(const unsorted_sub_index &si) : sub_index((sub_index &)(si)) { }
unsorted_sub_index &operator =(const unsorted_sub_index &si)
{ sub_index::operator =(si); return *this; }
void swap(size_type i, size_type j) {
diff --git a/src/gmm/gmm_sub_matrix.h b/src/gmm/gmm_sub_matrix.h
index 54daf5f..4439020 100644
--- a/src/gmm/gmm_sub_matrix.h
+++ b/src/gmm/gmm_sub_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_sub_matrix.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_sub_vector.h b/src/gmm/gmm_sub_vector.h
index c9f60e8..9b74091 100644
--- a/src/gmm/gmm_sub_vector.h
+++ b/src/gmm/gmm_sub_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_sub_vector.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_superlu_interface.h b/src/gmm/gmm_superlu_interface.h
index 6c1309d..c3761bc 100644
--- a/src/gmm/gmm_superlu_interface.h
+++ b/src/gmm/gmm_superlu_interface.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_superlu_interface.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@@ -157,7 +158,7 @@ namespace gmm {
/* ********************************************************************* */
template <typename MAT, typename VECTX, typename VECTB>
- void SuperLU_solve(const MAT &A, const VECTX &X_, const VECTB &B,
+ int SuperLU_solve(const MAT &A, const VECTX &X_, const VECTB &B,
double& rcond_, int permc_spec = 3) {
VECTX &X = const_cast<VECTX &>(X_);
/*
@@ -231,8 +232,10 @@ namespace gmm {
Destroy_SuperNode_Matrix(&SL);
Destroy_CompCol_Matrix(&SU);
StatFree(&stat);
- GMM_ASSERT1(info == 0, "SuperLU solve failed: info=" << info);
+ GMM_ASSERT1(info >= 0, "SuperLU solve failed: info =" << info);
+ if (info > 0) GMM_WARNING1("SuperLU solve failed: info =" << info);
gmm::copy(sol, X);
+ return info;
}
template <class T> class SuperLU_factor {
diff --git a/src/gmm/gmm_transposed.h b/src/gmm/gmm_transposed.h
index 4fcf571..dbdada0 100644
--- a/src/gmm/gmm_transposed.h
+++ b/src/gmm/gmm_transposed.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_transposed.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/src/gmm/gmm_tri_solve.h b/src/gmm/gmm_tri_solve.h
index b110ac8..4ece1d9 100644
--- a/src/gmm/gmm_tri_solve.h
+++ b/src/gmm/gmm_tri_solve.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_tri_solve.h
@author Yves Renard
diff --git a/src/gmm/gmm_vector.h b/src/gmm/gmm_vector.h
index 3b0e91f..2d2a5ca 100644
--- a/src/gmm/gmm_vector.h
+++ b/src/gmm/gmm_vector.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_vector.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
@date October 13, 2002.
@@ -242,7 +243,7 @@ namespace gmm {
template<typename T> void wsvector<T>::resize(size_type n) {
if (n < nbl) {
iterator it = this->begin(), itf = it, ite = this->end();
- while (it != ite) { ++itf; if (it->first >= n) erase(it); it = itf; }
+ while (it != ite) { ++itf; if (it->first >= n) this->erase(it); it=itf; }
}
nbl = n;
}
diff --git a/src/gmm/gmm_vector_to_matrix.h b/src/gmm/gmm_vector_to_matrix.h
index 81217fc..42baf3f 100644
--- a/src/gmm/gmm_vector_to_matrix.h
+++ b/src/gmm/gmm_vector_to_matrix.h
@@ -1,32 +1,33 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2003-2008 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-// As a special exception, you may use this file as it is a part of a free
-// software library without restriction. Specifically, if other files
-// instantiate templates or use macros or inline functions from this file,
-// or you compile this file and link it with other files to produce an
-// executable, this file does not by itself cause the resulting executable
-// to be covered by the GNU Lesser General Public License. This exception
-// does not however invalidate any other reasons why the executable file
-// might be covered by the GNU Lesser General Public License.
-//
-//===========================================================================
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, you may use this file as it is a part of a free
+ software library without restriction. Specifically, if other files
+ instantiate templates or use macros or inline functions from this file,
+ or you compile this file and link it with other files to produce an
+ executable, this file does not by itself cause the resulting executable
+ to be covered by the GNU Lesser General Public License. This exception
+ does not however invalidate any other reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
/**@file gmm_vector_to_matrix.h
@author Yves Renard <Yves.Renard at insa-lyon.fr>
diff --git a/superlu/BLAS.c b/superlu/BLAS.c
old mode 100755
new mode 100644
diff --git a/superlu/BLAS_f2c.h b/superlu/BLAS_f2c.h
old mode 100755
new mode 100644
diff --git a/superlu/License.txt b/superlu/License.txt
old mode 100755
new mode 100644
diff --git a/superlu/Makefile.am b/superlu/Makefile.am
old mode 100755
new mode 100644
diff --git a/superlu/Makefile.in b/superlu/Makefile.in
index 17ae443..2dec839 100644
--- a/superlu/Makefile.in
+++ b/superlu/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -188,6 +188,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -206,6 +207,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -222,6 +224,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -286,6 +289,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -321,7 +325,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -524,7 +527,7 @@ clean-noinstLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libsuperlu.la: $(libsuperlu_la_OBJECTS) $(libsuperlu_la_DEPENDENCIES)
+libsuperlu.la: $(libsuperlu_la_OBJECTS) $(libsuperlu_la_DEPENDENCIES) $(EXTRA_libsuperlu_la_DEPENDENCIES)
$(LINK) $(libsuperlu_la_OBJECTS) $(libsuperlu_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -1665,10 +1668,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/superlu/ccolumn_bmod.c b/superlu/ccolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/ccolumn_dfs.c b/superlu/ccolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/ccopy_to_ucol.c b/superlu/ccopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/cgscon.c b/superlu/cgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/cgsequ.c b/superlu/cgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/cgsrfs.c b/superlu/cgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/cgssv.c b/superlu/cgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/cgssvx.c b/superlu/cgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/cgstrf.c b/superlu/cgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/cgstrs.c b/superlu/cgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/clacon.c b/superlu/clacon.c
old mode 100755
new mode 100644
diff --git a/superlu/clangs.c b/superlu/clangs.c
old mode 100755
new mode 100644
diff --git a/superlu/claqgs.c b/superlu/claqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/cmemory.c b/superlu/cmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/cmyblas2.c b/superlu/cmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/colamd.c b/superlu/colamd.c
old mode 100755
new mode 100644
diff --git a/superlu/colamd.h b/superlu/colamd.h
old mode 100755
new mode 100644
diff --git a/superlu/cpanel_bmod.c b/superlu/cpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/cpanel_dfs.c b/superlu/cpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/cpivotL.c b/superlu/cpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/cpivotgrowth.c b/superlu/cpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/cpruneL.c b/superlu/cpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/creadhb.c b/superlu/creadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/csnode_bmod.c b/superlu/csnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/csnode_dfs.c b/superlu/csnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/csp_blas2.c b/superlu/csp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/csp_blas3.c b/superlu/csp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/cutil.c b/superlu/cutil.c
old mode 100755
new mode 100644
diff --git a/superlu/dcolumn_bmod.c b/superlu/dcolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dcolumn_dfs.c b/superlu/dcolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dcomplex.c b/superlu/dcomplex.c
old mode 100755
new mode 100644
diff --git a/superlu/dcopy_to_ucol.c b/superlu/dcopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/dgscon.c b/superlu/dgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/dgsequ.c b/superlu/dgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/dgsrfs.c b/superlu/dgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dgssv.c b/superlu/dgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/dgssvx.c b/superlu/dgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/dgstrf.c b/superlu/dgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/dgstrs.c b/superlu/dgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/dlacon.c b/superlu/dlacon.c
old mode 100755
new mode 100644
diff --git a/superlu/dlamch.c b/superlu/dlamch.c
old mode 100755
new mode 100644
diff --git a/superlu/dlangs.c b/superlu/dlangs.c
old mode 100755
new mode 100644
diff --git a/superlu/dlaqgs.c b/superlu/dlaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/dmemory.c b/superlu/dmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/dmyblas2.c b/superlu/dmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/dpanel_bmod.c b/superlu/dpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dpanel_dfs.c b/superlu/dpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dpivotL.c b/superlu/dpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/dpivotgrowth.c b/superlu/dpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/dpruneL.c b/superlu/dpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/dreadhb.c b/superlu/dreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/dsnode_bmod.c b/superlu/dsnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/dsnode_dfs.c b/superlu/dsnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/dsp_blas2.c b/superlu/dsp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/dsp_blas3.c b/superlu/dsp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/dutil.c b/superlu/dutil.c
old mode 100755
new mode 100644
diff --git a/superlu/dzsum1.c b/superlu/dzsum1.c
old mode 100755
new mode 100644
diff --git a/superlu/f2c_lite.c b/superlu/f2c_lite.c
old mode 100755
new mode 100644
diff --git a/superlu/get_perm_c.c b/superlu/get_perm_c.c
old mode 100755
new mode 100644
diff --git a/superlu/heap_relax_snode.c b/superlu/heap_relax_snode.c
old mode 100755
new mode 100644
diff --git a/superlu/icmax1.c b/superlu/icmax1.c
old mode 100755
new mode 100644
diff --git a/superlu/izmax1.c b/superlu/izmax1.c
old mode 100755
new mode 100644
diff --git a/superlu/lsame.c b/superlu/lsame.c
old mode 100755
new mode 100644
diff --git a/superlu/memory.c b/superlu/memory.c
old mode 100755
new mode 100644
diff --git a/superlu/mmd.c b/superlu/mmd.c
old mode 100755
new mode 100644
diff --git a/superlu/relax_snode.c b/superlu/relax_snode.c
old mode 100755
new mode 100644
diff --git a/superlu/scolumn_bmod.c b/superlu/scolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/scolumn_dfs.c b/superlu/scolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/scomplex.c b/superlu/scomplex.c
old mode 100755
new mode 100644
diff --git a/superlu/scopy_to_ucol.c b/superlu/scopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/scsum1.c b/superlu/scsum1.c
old mode 100755
new mode 100644
diff --git a/superlu/sgscon.c b/superlu/sgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/sgsequ.c b/superlu/sgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/sgsrfs.c b/superlu/sgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/sgssv.c b/superlu/sgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/sgssvx.c b/superlu/sgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/sgstrf.c b/superlu/sgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/sgstrs.c b/superlu/sgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/slacon.c b/superlu/slacon.c
old mode 100755
new mode 100644
diff --git a/superlu/slamch.c b/superlu/slamch.c
old mode 100755
new mode 100644
diff --git a/superlu/slangs.c b/superlu/slangs.c
old mode 100755
new mode 100644
diff --git a/superlu/slaqgs.c b/superlu/slaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/slu_Cnames.h b/superlu/slu_Cnames.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_cdefs.h b/superlu/slu_cdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_dcomplex.h b/superlu/slu_dcomplex.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_ddefs.h b/superlu/slu_ddefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_scomplex.h b/superlu/slu_scomplex.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_sdefs.h b/superlu/slu_sdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_util.h b/superlu/slu_util.h
old mode 100755
new mode 100644
diff --git a/superlu/slu_zdefs.h b/superlu/slu_zdefs.h
old mode 100755
new mode 100644
diff --git a/superlu/smemory.c b/superlu/smemory.c
old mode 100755
new mode 100644
diff --git a/superlu/smyblas2.c b/superlu/smyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_coletree.c b/superlu/sp_coletree.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_ienv.c b/superlu/sp_ienv.c
old mode 100755
new mode 100644
diff --git a/superlu/sp_preorder.c b/superlu/sp_preorder.c
old mode 100755
new mode 100644
diff --git a/superlu/spanel_bmod.c b/superlu/spanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/spanel_dfs.c b/superlu/spanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/spivotL.c b/superlu/spivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/spivotgrowth.c b/superlu/spivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/spruneL.c b/superlu/spruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/sreadhb.c b/superlu/sreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/ssnode_bmod.c b/superlu/ssnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/ssnode_dfs.c b/superlu/ssnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/ssp_blas2.c b/superlu/ssp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/ssp_blas3.c b/superlu/ssp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/superlu_timer.c b/superlu/superlu_timer.c
old mode 100755
new mode 100644
index 10eb877..fb1deae
--- a/superlu/superlu_timer.c
+++ b/superlu/superlu_timer.c
@@ -7,7 +7,9 @@
* compilation to choose the appropriate function.
*
*/
-
+#ifdef _MSC_VER
+#define NO_TIMER
+#endif
#ifdef SUN
/*
diff --git a/superlu/supermatrix.h b/superlu/supermatrix.h
old mode 100755
new mode 100644
diff --git a/superlu/sutil.c b/superlu/sutil.c
old mode 100755
new mode 100644
diff --git a/superlu/util.c b/superlu/util.c
old mode 100755
new mode 100644
diff --git a/superlu/zcolumn_bmod.c b/superlu/zcolumn_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zcolumn_dfs.c b/superlu/zcolumn_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zcopy_to_ucol.c b/superlu/zcopy_to_ucol.c
old mode 100755
new mode 100644
diff --git a/superlu/zgscon.c b/superlu/zgscon.c
old mode 100755
new mode 100644
diff --git a/superlu/zgsequ.c b/superlu/zgsequ.c
old mode 100755
new mode 100644
diff --git a/superlu/zgsrfs.c b/superlu/zgsrfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zgssv.c b/superlu/zgssv.c
old mode 100755
new mode 100644
diff --git a/superlu/zgssvx.c b/superlu/zgssvx.c
old mode 100755
new mode 100644
diff --git a/superlu/zgstrf.c b/superlu/zgstrf.c
old mode 100755
new mode 100644
diff --git a/superlu/zgstrs.c b/superlu/zgstrs.c
old mode 100755
new mode 100644
diff --git a/superlu/zlacon.c b/superlu/zlacon.c
old mode 100755
new mode 100644
diff --git a/superlu/zlangs.c b/superlu/zlangs.c
old mode 100755
new mode 100644
diff --git a/superlu/zlaqgs.c b/superlu/zlaqgs.c
old mode 100755
new mode 100644
diff --git a/superlu/zmemory.c b/superlu/zmemory.c
old mode 100755
new mode 100644
diff --git a/superlu/zmyblas2.c b/superlu/zmyblas2.c
old mode 100755
new mode 100644
diff --git a/superlu/zpanel_bmod.c b/superlu/zpanel_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zpanel_dfs.c b/superlu/zpanel_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zpivotL.c b/superlu/zpivotL.c
old mode 100755
new mode 100644
diff --git a/superlu/zpivotgrowth.c b/superlu/zpivotgrowth.c
old mode 100755
new mode 100644
diff --git a/superlu/zpruneL.c b/superlu/zpruneL.c
old mode 100755
new mode 100644
diff --git a/superlu/zreadhb.c b/superlu/zreadhb.c
old mode 100755
new mode 100644
diff --git a/superlu/zsnode_bmod.c b/superlu/zsnode_bmod.c
old mode 100755
new mode 100644
diff --git a/superlu/zsnode_dfs.c b/superlu/zsnode_dfs.c
old mode 100755
new mode 100644
diff --git a/superlu/zsp_blas2.c b/superlu/zsp_blas2.c
old mode 100755
new mode 100644
diff --git a/superlu/zsp_blas3.c b/superlu/zsp_blas3.c
old mode 100755
new mode 100644
diff --git a/superlu/zutil.c b/superlu/zutil.c
old mode 100755
new mode 100644
diff --git a/tests-2.0/Makefile.in b/tests-2.0/Makefile.in
index 433cf09..5807ed3 100644
--- a/tests-2.0/Makefile.in
+++ b/tests-2.0/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -285,6 +285,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -303,6 +304,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -319,6 +321,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -383,6 +386,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -418,7 +422,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -566,88 +569,88 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES)
+bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) $(EXTRA_bilaplacian_DEPENDENCIES)
@rm -f bilaplacian$(EXEEXT)
$(CXXLINK) $(bilaplacian_OBJECTS) $(bilaplacian_LDADD) $(LIBS)
-dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES)
+dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) $(EXTRA_dynamic_array_DEPENDENCIES)
@rm -f dynamic_array$(EXEEXT)
$(CXXLINK) $(dynamic_array_OBJECTS) $(dynamic_array_LDADD) $(LIBS)
-dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES)
+dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) $(EXTRA_dynamic_friction_DEPENDENCIES)
@rm -f dynamic_friction$(EXEEXT)
$(CXXLINK) $(dynamic_friction_OBJECTS) $(dynamic_friction_LDADD) $(LIBS)
-dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES)
+dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) $(EXTRA_dynamic_tas_DEPENDENCIES)
@rm -f dynamic_tas$(EXEEXT)
$(CXXLINK) $(dynamic_tas_OBJECTS) $(dynamic_tas_LDADD) $(LIBS)
-elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES)
+elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) $(EXTRA_elastostatic_DEPENDENCIES)
@rm -f elastostatic$(EXEEXT)
$(CXXLINK) $(elastostatic_OBJECTS) $(elastostatic_LDADD) $(LIBS)
-geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES)
+geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) $(EXTRA_geo_trans_inv_DEPENDENCIES)
@rm -f geo_trans_inv$(EXEEXT)
$(CXXLINK) $(geo_trans_inv_OBJECTS) $(geo_trans_inv_LDADD) $(LIBS)
-helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES)
+helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) $(EXTRA_helmholtz_DEPENDENCIES)
@rm -f helmholtz$(EXEEXT)
$(CXXLINK) $(helmholtz_OBJECTS) $(helmholtz_LDADD) $(LIBS)
-integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES)
+integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES)
@rm -f integration$(EXEEXT)
$(CXXLINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS)
-laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES)
+laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) $(EXTRA_laplacian_DEPENDENCIES)
@rm -f laplacian$(EXEEXT)
$(CXXLINK) $(laplacian_OBJECTS) $(laplacian_LDADD) $(LIBS)
-nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES)
+nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) $(EXTRA_nonlinear_elastostatic_DEPENDENCIES)
@rm -f nonlinear_elastostatic$(EXEEXT)
$(CXXLINK) $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_LDADD) $(LIBS)
-plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES)
+plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) $(EXTRA_plasticity_DEPENDENCIES)
@rm -f plasticity$(EXEEXT)
$(CXXLINK) $(plasticity_OBJECTS) $(plasticity_LDADD) $(LIBS)
-plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES)
+plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) $(EXTRA_plate_DEPENDENCIES)
@rm -f plate$(EXEEXT)
$(CXXLINK) $(plate_OBJECTS) $(plate_LDADD) $(LIBS)
-poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES)
+poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) $(EXTRA_poly_DEPENDENCIES)
@rm -f poly$(EXEEXT)
$(CXXLINK) $(poly_OBJECTS) $(poly_LDADD) $(LIBS)
-schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES)
+schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) $(EXTRA_schwarz_additive_DEPENDENCIES)
@rm -f schwarz_additive$(EXEEXT)
$(CXXLINK) $(schwarz_additive_OBJECTS) $(schwarz_additive_LDADD) $(LIBS)
-stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES)
+stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) $(EXTRA_stokes_DEPENDENCIES)
@rm -f stokes$(EXEEXT)
$(CXXLINK) $(stokes_OBJECTS) $(stokes_LDADD) $(LIBS)
-test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES)
+test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) $(EXTRA_test_assembly_DEPENDENCIES)
@rm -f test_assembly$(EXEEXT)
$(CXXLINK) $(test_assembly_OBJECTS) $(test_assembly_LDADD) $(LIBS)
-test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES)
+test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) $(EXTRA_test_int_set_DEPENDENCIES)
@rm -f test_int_set$(EXEEXT)
$(CXXLINK) $(test_int_set_OBJECTS) $(test_int_set_LDADD) $(LIBS)
-test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES)
+test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) $(EXTRA_test_interpolated_fem_DEPENDENCIES)
@rm -f test_interpolated_fem$(EXEEXT)
$(CXXLINK) $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_LDADD) $(LIBS)
-test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES)
+test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) $(EXTRA_test_interpolation_DEPENDENCIES)
@rm -f test_interpolation$(EXEEXT)
$(CXXLINK) $(test_interpolation_OBJECTS) $(test_interpolation_LDADD) $(LIBS)
-test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES)
+test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) $(EXTRA_test_kdtree_DEPENDENCIES)
@rm -f test_kdtree$(EXEEXT)
$(CXXLINK) $(test_kdtree_OBJECTS) $(test_kdtree_LDADD) $(LIBS)
-test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES)
+test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) $(EXTRA_test_mat_elem_DEPENDENCIES)
@rm -f test_mat_elem$(EXEEXT)
$(CXXLINK) $(test_mat_elem_OBJECTS) $(test_mat_elem_LDADD) $(LIBS)
-test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES)
+test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) $(EXTRA_test_mesh_DEPENDENCIES)
@rm -f test_mesh$(EXEEXT)
$(CXXLINK) $(test_mesh_OBJECTS) $(test_mesh_LDADD) $(LIBS)
-test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES)
+test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) $(EXTRA_test_mesh_im_level_set_DEPENDENCIES)
@rm -f test_mesh_im_level_set$(EXEEXT)
$(CXXLINK) $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_LDADD) $(LIBS)
-test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES)
+test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) $(EXTRA_test_norm_DEPENDENCIES)
@rm -f test_norm$(EXEEXT)
$(CXXLINK) $(test_norm_OBJECTS) $(test_norm_LDADD) $(LIBS)
-test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES)
+test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) $(EXTRA_test_rtree_DEPENDENCIES)
@rm -f test_rtree$(EXEEXT)
$(CXXLINK) $(test_rtree_OBJECTS) $(test_rtree_LDADD) $(LIBS)
-test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES)
+test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) $(EXTRA_test_slice_DEPENDENCIES)
@rm -f test_slice$(EXEEXT)
$(CXXLINK) $(test_slice_OBJECTS) $(test_slice_LDADD) $(LIBS)
-test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES)
+test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) $(EXTRA_test_small_vector_DEPENDENCIES)
@rm -f test_small_vector$(EXEEXT)
$(CXXLINK) $(test_small_vector_OBJECTS) $(test_small_vector_LDADD) $(LIBS)
-test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES)
+test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) $(EXTRA_test_tree_sorted_DEPENDENCIES)
@rm -f test_tree_sorted$(EXEEXT)
$(CXXLINK) $(test_tree_sorted_OBJECTS) $(test_tree_sorted_LDADD) $(LIBS)
@@ -846,14 +849,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -903,10 +907,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/tests-2.0/bilaplacian.cc b/tests-2.0/bilaplacian.cc
index 993d585..29b4bce 100644
--- a/tests-2.0/bilaplacian.cc
+++ b/tests-2.0/bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file bilaplacian.cc
@@ -42,6 +42,9 @@
#include <getfem/getfem_derivatives.h>
#include <gmm/gmm_inoutput.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/bilaplacian.pl b/tests-2.0/bilaplacian.pl
index 3e2dc15..5a435de 100755
--- a/tests-2.0/bilaplacian.pl
+++ b/tests-2.0/bilaplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/dynamic_array.cc b/tests-2.0/dynamic_array.cc
index 7759451..e85d6a5 100644
--- a/tests-2.0/dynamic_array.cc
+++ b/tests-2.0/dynamic_array.cc
@@ -1,27 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/dal_basic.h>
#include <deque>
#include <complex>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
typedef std::deque<int>::size_type size_type;
template<typename T> struct dyndeque : public std::deque<T> {
T &operator[](unsigned i) {
diff --git a/tests-2.0/dynamic_array.pl b/tests-2.0/dynamic_array.pl
index 14efa07..653f111 100755
--- a/tests-2.0/dynamic_array.pl
+++ b/tests-2.0/dynamic_array.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/dynamic_friction.cc b/tests-2.0/dynamic_friction.cc
index 9e604a8..4997d34 100644
--- a/tests-2.0/dynamic_friction.cc
+++ b/tests-2.0/dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier, Houari Khenous.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier, Houari Khenous.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Dynamic friction in linear elasticity.
@@ -37,6 +37,10 @@
#include <gmm/gmm.h>
#include <fstream>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/dynamic_friction.pl b/tests-2.0/dynamic_friction.pl
index 5e97051..2849726 100755
--- a/tests-2.0/dynamic_friction.pl
+++ b/tests-2.0/dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/dynamic_tas.cc b/tests-2.0/dynamic_tas.cc
index bd67af9..abd8af2 100644
--- a/tests-2.0/dynamic_tas.cc
+++ b/tests-2.0/dynamic_tas.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/dal_tas.h>
using namespace std;
diff --git a/tests-2.0/dynamic_tas.pl b/tests-2.0/dynamic_tas.pl
index 2e41ea2..b8c17db 100755
--- a/tests-2.0/dynamic_tas.pl
+++ b/tests-2.0/dynamic_tas.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/elastostatic.cc b/tests-2.0/elastostatic.cc
index 2e609ab..c759ed4 100644
--- a/tests-2.0/elastostatic.cc
+++ b/tests-2.0/elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file elastostatic.cc
@@ -42,6 +42,10 @@
#include <getfem/getfem_error_estimate.h>
#include <getfem/getfem_import.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/elastostatic.param b/tests-2.0/elastostatic.param
old mode 100755
new mode 100644
index ddc4052..0f012d4
--- a/tests-2.0/elastostatic.param
+++ b/tests-2.0/elastostatic.param
@@ -68,7 +68,7 @@ if (N == 2 && QUAD)
MESH_FILE='structured:GT="GT_LINEAR_QK(2,1)";SIZES=[1,1];NOISED=0';
% MESH_FILE='structured:GT="GT_QK(2,1)";SIZES=[1,1];NOISED=1';
FEM_TYPE = 'FEM_QK(2,2)'; % Q1 for quadrilaterons
- FEM_TYPE = 'FEM_INCOMPLETE_Q2';
+ FEM_TYPE = 'FEM_Q2_INCOMPLETE';
INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2,6)';
if (MIXED_PRESSURE)
FEM_TYPE_P = 'FEM_QK_DISCONTINUOUS(2,0)';
diff --git a/tests-2.0/elastostatic.pl b/tests-2.0/elastostatic.pl
index 9e1d14c..23e4be5 100755
--- a/tests-2.0/elastostatic.pl
+++ b/tests-2.0/elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/geo_trans_inv.cc b/tests-2.0/geo_trans_inv.cc
index d6bd68e..73205f0 100644
--- a/tests-2.0/geo_trans_inv.cc
+++ b/tests-2.0/geo_trans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
various checks for the geometric transformations inversion
@@ -27,6 +27,10 @@
#include <getfem/bgeot_geotrans_inv.h>
#include <getfem/getfem_regular_meshes.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
using bgeot::size_type;
using bgeot::dim_type;
using bgeot::scalar_type;
diff --git a/tests-2.0/geo_trans_inv.pl b/tests-2.0/geo_trans_inv.pl
index 424554d..064173d 100755
--- a/tests-2.0/geo_trans_inv.pl
+++ b/tests-2.0/geo_trans_inv.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/helmholtz.cc b/tests-2.0/helmholtz.cc
index 0f6faed..d00b475 100644
--- a/tests-2.0/helmholtz.cc
+++ b/tests-2.0/helmholtz.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file helmholtz.cc
@@ -35,6 +35,9 @@
#include <getfem/getfem_model_solvers.h>
#include <gmm/gmm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/helmholtz.pl b/tests-2.0/helmholtz.pl
index 4ab67af..8318b60 100755
--- a/tests-2.0/helmholtz.pl
+++ b/tests-2.0/helmholtz.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/integration.cc b/tests-2.0/integration.cc
index 181cc86..eca7c2d 100644
--- a/tests-2.0/integration.cc
+++ b/tests-2.0/integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <numeric>
#include <getfem/getfem_integration.h>
#include <getfem/bgeot_comma_init.h>
@@ -26,6 +26,9 @@
#include <iomanip>
#include <map>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using getfem::size_type;
using bgeot::base_tensor;
using bgeot::base_matrix;
diff --git a/tests-2.0/integration.pl b/tests-2.0/integration.pl
index 53eb07d..7d913e0 100755
--- a/tests-2.0/integration.pl
+++ b/tests-2.0/integration.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/laplacian.cc b/tests-2.0/laplacian.cc
index 5ed37f1..f006b89 100644
--- a/tests-2.0/laplacian.cc
+++ b/tests-2.0/laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file laplacian.cc
@brief Laplacian (Poisson) problem.
@@ -38,6 +38,10 @@
#include <getfem/getfem_superlu.h>
#include <gmm/gmm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests-2.0/laplacian.pl b/tests-2.0/laplacian.pl
index 9f8a36c..bf3af84 100755
--- a/tests-2.0/laplacian.pl
+++ b/tests-2.0/laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/nonlinear_elastostatic.cc b/tests-2.0/nonlinear_elastostatic.cc
index f6060f1..7fc0495 100644
--- a/tests-2.0/nonlinear_elastostatic.cc
+++ b/tests-2.0/nonlinear_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file nonlinear_elastostatic.cc
@@ -37,6 +37,10 @@
#include <getfem/getfem_superlu.h>
#include <gmm/gmm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/nonlinear_elastostatic.pl b/tests-2.0/nonlinear_elastostatic.pl
index aa71d78..f618240 100755
--- a/tests-2.0/nonlinear_elastostatic.pl
+++ b/tests-2.0/nonlinear_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/plasticity.cc b/tests-2.0/plasticity.cc
index ca746e0..e95ab61 100644
--- a/tests-2.0/plasticity.cc
+++ b/tests-2.0/plasticity.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file plasticity.cc
@@ -33,6 +33,10 @@
#include <getfem/getfem_plasticity.h>
#include <getfem/getfem_export.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/plasticity.pl b/tests-2.0/plasticity.pl
index 4f8d9f1..385f348 100755
--- a/tests-2.0/plasticity.pl
+++ b/tests-2.0/plasticity.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/plate.cc b/tests-2.0/plate.cc
index 68a40f8..06205f4 100644
--- a/tests-2.0/plate.cc
+++ b/tests-2.0/plate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Michel Salaün.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Michel Salaün.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file plate.cc
@@ -34,6 +34,10 @@
#include <getfem/getfem_model_solvers.h>
#include <gmm/gmm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -74,7 +78,7 @@ struct plate_problem {
// sol_ref = 1 : homogeneous on the vertical edges
// sol_ref = 2 : homogeneous on the 4 vertical
// edges with solution u3 = sin²(x)*sin²(y)
- scalar_type eta; // usefull only if sol_ref == 2 :
+ scalar_type eta; // useful only if sol_ref == 2 :
// eta = 0 => Kirchoff-Love
// eta = small => Mindlin
size_type N_Four ;
diff --git a/tests-2.0/plate.param b/tests-2.0/plate.param
old mode 100755
new mode 100644
index b66785e..8944d6b
--- a/tests-2.0/plate.param
+++ b/tests-2.0/plate.param
@@ -29,15 +29,15 @@ STUDY_FLAG = 0 ; % if equal to 1 then all the loadings applied are chosen
% in order to have a maximum vertical displacement equal to 1.
PRESSURE = 0.0005; % pressure on the top surface of the plate
- % (only usefull if SOL_REF = 0 or 1)
+ % (only useful if SOL_REF = 0 or 1)
% will be multiplied by EPSILON^3.
-ETA = 1e-8; % only usefull if SOL_REF = 2 :
+ETA = 1e-8; % only useful if SOL_REF = 2 :
% if eta = 0 => solution of the Kirchoff-Love model
% if eta != 0 => solution of the Mindlin-Reissner model
% To be taken of order epsilon^2 ?
-N_Four = 100 % only usefull if SOL_REF = 4
+N_Four = 100 % only useful if SOL_REF = 4
%%%%% parameters for computation :
diff --git a/tests-2.0/plate.pl b/tests-2.0/plate.pl
index 6b9fcd2..de43b38 100755
--- a/tests-2.0/plate.pl
+++ b/tests-2.0/plate.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/poly.cc b/tests-2.0/poly.cc
index 458d67e..d3f3cbd 100644
--- a/tests-2.0/poly.cc
+++ b/tests-2.0/poly.cc
@@ -1,25 +1,27 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/bgeot_poly.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::short_type;
std::string horner_print(bgeot::short_type degree, bgeot::power_index &mi,
diff --git a/tests-2.0/poly.pl b/tests-2.0/poly.pl
index a64b8f5..bfb1c56 100755
--- a/tests-2.0/poly.pl
+++ b/tests-2.0/poly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/schwarz_additive.cc b/tests-2.0/schwarz_additive.cc
index c5e6979..ef2b29c 100644
--- a/tests-2.0/schwarz_additive.cc
+++ b/tests-2.0/schwarz_additive.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#define GMM_USES_SUPERLU
/**************************************************************************/
/* */
@@ -37,6 +37,8 @@
#include <mpi++.h>
#endif
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_vector;
using bgeot::base_node;
using bgeot::size_type;
diff --git a/tests-2.0/schwarz_additive.pl b/tests-2.0/schwarz_additive.pl
index 777bada..51bb855 100755
--- a/tests-2.0/schwarz_additive.pl
+++ b/tests-2.0/schwarz_additive.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/stokes.cc b/tests-2.0/stokes.cc
index 1e854d6..85c0a4e 100644
--- a/tests-2.0/stokes.cc
+++ b/tests-2.0/stokes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file stokes.cc
@@ -37,6 +37,9 @@
#include <getfem/getfem_model_solvers.h>
#include <gmm/gmm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/stokes.pl b/tests-2.0/stokes.pl
index ce5c1fb..23d8e17 100755
--- a/tests-2.0/stokes.pl
+++ b/tests-2.0/stokes.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_assembly.cc b/tests-2.0/test_assembly.cc
index a7a7ee9..eb26048 100644
--- a/tests-2.0/test_assembly.cc
+++ b/tests-2.0/test_assembly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_assembling.h>
#include <getfem/getfem_assembling.h>
#include <getfem/getfem_export.h>
@@ -29,6 +29,9 @@
#endif
#include <unistd.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using bgeot::base_vector;
using bgeot::base_matrix;
using bgeot::base_small_vector;
diff --git a/tests-2.0/test_assembly.pl b/tests-2.0/test_assembly.pl
index a2ca8a6..bc37083 100755
--- a/tests-2.0/test_assembly.pl
+++ b/tests-2.0/test_assembly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_int_set.cc b/tests-2.0/test_int_set.cc
index 29ff859..1cd9c73 100644
--- a/tests-2.0/test_int_set.cc
+++ b/tests-2.0/test_int_set.cc
@@ -1,26 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/dal_bit_vector.h>
#include <deque>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
typedef size_t size_type;
bool quick = false;
diff --git a/tests-2.0/test_int_set.pl b/tests-2.0/test_int_set.pl
index 1a734e5..83b3cb5 100755
--- a/tests-2.0/test_int_set.pl
+++ b/tests-2.0/test_int_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_interpolated_fem.cc b/tests-2.0/test_interpolated_fem.cc
index 6dfbc7e..ebe49fc 100644
--- a/tests-2.0/test_interpolated_fem.cc
+++ b/tests-2.0/test_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/***************************************************************************/
/* */
/* Test the interpolated fem method. */
@@ -31,6 +31,9 @@
#include <getfem/getfem_interpolated_fem.h>
#include <getfem/getfem_mesh_fem_sum.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using bgeot::base_vector;
using bgeot::base_small_vector;
using bgeot::base_node;
diff --git a/tests-2.0/test_interpolated_fem.pl b/tests-2.0/test_interpolated_fem.pl
index 6905e03..31d3b5d 100755
--- a/tests-2.0/test_interpolated_fem.pl
+++ b/tests-2.0/test_interpolated_fem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_interpolation.cc b/tests-2.0/test_interpolation.cc
index 95870cf..3ae2255 100644
--- a/tests-2.0/test_interpolation.cc
+++ b/tests-2.0/test_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_export.h>
#include <getfem/getfem_export.h>
#include <getfem/getfem_regular_meshes.h>
@@ -27,6 +27,9 @@
#include <unistd.h>
#include <iomanip>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using getfem::scalar_type;
using getfem::size_type;
diff --git a/tests-2.0/test_interpolation.pl b/tests-2.0/test_interpolation.pl
index 862b970..ee3cb9e 100755
--- a/tests-2.0/test_interpolation.pl
+++ b/tests-2.0/test_interpolation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_kdtree.cc b/tests-2.0/test_kdtree.cc
index d626f5f..6057d5f 100644
--- a/tests-2.0/test_kdtree.cc
+++ b/tests-2.0/test_kdtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/bgeot_kdtree.h>
#include <getfem/bgeot_kdtree.h>
#include <getfem/dal_bit_vector.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_node;
using bgeot::size_type;
using bgeot::dim_type;
diff --git a/tests-2.0/test_kdtree.pl b/tests-2.0/test_kdtree.pl
index 6447aec..2d064eb 100755
--- a/tests-2.0/test_kdtree.pl
+++ b/tests-2.0/test_kdtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_mat_elem.cc b/tests-2.0/test_mat_elem.cc
index 5826416..999ed4c 100644
--- a/tests-2.0/test_mat_elem.cc
+++ b/tests-2.0/test_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/* *********************************************************************** */
/* */
/* Program to test the efficiency of elementary matrices computation. */
@@ -28,7 +28,8 @@
#include <getfem/getfem_export.h>
#include <getfem/getfem_regular_meshes.h>
#include <getfem/getfem_mat_elem.h>
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_vector;
using bgeot::base_small_vector;
using bgeot::base_node;
diff --git a/tests-2.0/test_mat_elem.pl b/tests-2.0/test_mat_elem.pl
index 3bf1da9..38d5309 100755
--- a/tests-2.0/test_mat_elem.pl
+++ b/tests-2.0/test_mat_elem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_mesh.cc b/tests-2.0/test_mesh.cc
index a32d5d7..ba4758c 100644
--- a/tests-2.0/test_mesh.cc
+++ b/tests-2.0/test_mesh.cc
@@ -1,29 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_regular_meshes.h>
#include <getfem/bgeot_poly_composite.h>
#include <getfem/bgeot_comma_init.h>
#include <getfem/getfem_export.h>
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using getfem::size_type;
using getfem::short_type;
using getfem::dim_type;
diff --git a/tests-2.0/test_mesh.pl b/tests-2.0/test_mesh.pl
index ab43067..1230c2e 100755
--- a/tests-2.0/test_mesh.pl
+++ b/tests-2.0/test_mesh.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_mesh_im_level_set.cc b/tests-2.0/test_mesh_im_level_set.cc
index 43d82c2..cde00ff 100644
--- a/tests-2.0/test_mesh_im_level_set.cc
+++ b/tests-2.0/test_mesh_im_level_set.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_mesh_im_level_set.h>
#include <getfem/getfem_mesh_im_level_set.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests-2.0/test_mesh_im_level_set.pl b/tests-2.0/test_mesh_im_level_set.pl
index 5b2d0c8..9f4376b 100755
--- a/tests-2.0/test_mesh_im_level_set.pl
+++ b/tests-2.0/test_mesh_im_level_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_norm.cc b/tests-2.0/test_norm.cc
index b75d6fc..e99d508 100644
--- a/tests-2.0/test_norm.cc
+++ b/tests-2.0/test_norm.cc
@@ -1,28 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/getfem_assembling.h> /* import assembly methods (and comp. of norms) */
#include <getfem/getfem_assembling.h> /* import assembly methods (and comp. of norms) */
#include <getfem/getfem_regular_meshes.h>
#include <getfem/getfem_norm.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small(dim < 16) vectors */
using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests-2.0/test_norm.pl b/tests-2.0/test_norm.pl
index b339f56..b9ab3fa 100755
--- a/tests-2.0/test_norm.pl
+++ b/tests-2.0/test_norm.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_rtree.cc b/tests-2.0/test_rtree.cc
index f2ca677..edd758d 100644
--- a/tests-2.0/test_rtree.cc
+++ b/tests-2.0/test_rtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/bgeot_rtree.h>
#include <getfem/bgeot_rtree.h>
#include <getfem/dal_bit_vector.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_node;
using bgeot::size_type;
using bgeot::dim_type;
diff --git a/tests-2.0/test_rtree.pl b/tests-2.0/test_rtree.pl
index fedb116..de0b459 100755
--- a/tests-2.0/test_rtree.pl
+++ b/tests-2.0/test_rtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_slice.cc b/tests-2.0/test_slice.cc
index a6dc7db..2c1f633 100644
--- a/tests-2.0/test_slice.cc
+++ b/tests-2.0/test_slice.cc
@@ -1,27 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <getfem/bgeot_comma_init.h>
#include <getfem/bgeot_comma_init.h>
#include <getfem/getfem_mesh_slice.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using getfem::size_type;
namespace getfem {
std::ostream& operator<<(std::ostream& o, const bgeot::mesh_structure& m) {
diff --git a/tests-2.0/test_slice.pl b/tests-2.0/test_slice.pl
index 8d3c7f4..d1b7db4 100755
--- a/tests-2.0/test_slice.pl
+++ b/tests-2.0/test_slice.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_small_vector.cc b/tests-2.0/test_small_vector.cc
index 39fa9a5..88e27c2 100644
--- a/tests-2.0/test_small_vector.cc
+++ b/tests-2.0/test_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
#ifndef DEBUG_SMALL_VECTOR
@@ -32,6 +32,10 @@
#include <getfem/bgeot_small_vector.h>
#include <unistd.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
using bgeot::size_type;
using bgeot::short_type;
using bgeot::dim_type;
diff --git a/tests-2.0/test_small_vector.pl b/tests-2.0/test_small_vector.pl
index 610fdcd..6c932f3 100755
--- a/tests-2.0/test_small_vector.pl
+++ b/tests-2.0/test_small_vector.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests-2.0/test_tree_sorted.cc b/tests-2.0/test_tree_sorted.cc
index 5954725..b42f810 100644
--- a/tests-2.0/test_tree_sorted.cc
+++ b/tests-2.0/test_tree_sorted.cc
@@ -1,29 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#ifndef GETFEM_VERIFY__
#define GETFEM_VERIFY__
#endif
#include <getfem/dal_tree_sorted.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
int main(void)
diff --git a/tests-2.0/test_tree_sorted.pl b/tests-2.0/test_tree_sorted.pl
index 49bcb0a..b82cdfa 100755
--- a/tests-2.0/test_tree_sorted.pl
+++ b/tests-2.0/test_tree_sorted.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 24bf71f..6912559 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -7,42 +7,44 @@ optprogs =
optpl =
endif
-check_PROGRAMS = \
- dynamic_array \
- dynamic_tas \
- test_int_set \
- test_tree_sorted \
- poly \
- test_small_vector \
- test_kdtree \
- test_rtree \
- test_mesh \
- test_slice \
- integration \
- geo_trans_inv \
- test_mat_elem \
- test_interpolation \
- test_assembly \
- test_norm \
- test_interpolated_fem \
- test_range_basis \
- laplacian \
- laplacian_with_bricks \
- elastostatic \
- stokes \
- helmholtz \
- plate \
- nonlinear_elastostatic \
- nonlinear_membrane \
- schwarz_additive \
- $(optprogs) \
- plasticity \
- plasticity_old_brick \
- dynamic_friction \
- bilaplacian \
- heat_equation \
- wave_equation \
- cyl_slicer
+check_PROGRAMS = \
+ dynamic_array \
+ dynamic_tas \
+ test_int_set \
+ test_tree_sorted \
+ poly \
+ test_small_vector \
+ test_kdtree \
+ test_rtree \
+ test_mesh \
+ test_slice \
+ integration \
+ geo_trans_inv \
+ test_mat_elem \
+ test_interpolation \
+ test_assembly \
+ test_norm \
+ test_interpolated_fem \
+ test_range_basis \
+ laplacian \
+ laplacian_with_bricks \
+ elastostatic \
+ stokes \
+ helmholtz \
+ plate \
+ nonlinear_elastostatic \
+ nonlinear_membrane \
+ schwarz_additive \
+ $(optprogs) \
+ plasticity \
+ plasticity_old_brick \
+ dynamic_friction \
+ bilaplacian \
+ heat_equation \
+ wave_equation \
+ cyl_slicer \
+ test_large_sliding_contact \
+ test_continuation
CLEANFILES = \
laplacian.res laplacian.mesh laplacian.dataelt \
@@ -52,7 +54,8 @@ CLEANFILES = \
nonlinear_elastostatic.dx nonlinear_elastostatic.vtk \
plasticity.mesh plasticity.U plasticity.sigmabar plasticity.vtk \
plasticity.meshfem plasticity.coef elasto_static_err.vtk \
- ii_files/* auto_gmm* dyn*.txt dynamic_friction.data *.sl time FN0 \
+ ii_files/* auto_gmm* dyn*.txt dynamic_friction.data \
+ dynamic_friction.U dynamic_friction.mfu *.sl time FN0 \
nonlinear_elastostatic.U crack.mesh cut.mesh nonlinear_membrane.mfd \
nonlinear_membrane.mesh test_range_basis.mesh nonlinear_membrane.mf \
nonlinear_membrane.vtk feminterpolation.vtk circleslice.vtk
@@ -96,47 +99,51 @@ bilaplacian_SOURCES = bilaplacian.cc
heat_equation_SOURCES = heat_equation.cc
wave_equation_SOURCES = wave_equation.cc
cyl_slicer_SOURCES = cyl_slicer.cc
+test_continuation_SOURCES = test_continuation.cc
+test_large_sliding_contact_SOURCES = test_large_sliding_contact.cc
+
SUPLDFLAGS = @SUPLDFLAGS@
INCLUDES = -I$(top_srcdir)/src -I../src
LDADD = ../src/libgetfem.la -lm $(SUPLDFLAGS)
TESTS = \
- $(top_srcdir)/tests/dynamic_array.pl \
- $(top_srcdir)/tests/dynamic_tas.pl \
- $(top_srcdir)/tests/test_int_set.pl \
- $(top_srcdir)/tests/test_tree_sorted.pl \
- $(top_srcdir)/tests/poly.pl \
- $(top_srcdir)/tests/test_small_vector.pl \
- $(top_srcdir)/tests/test_kdtree.pl \
- $(top_srcdir)/tests/test_rtree.pl \
- $(top_srcdir)/tests/geo_trans_inv.pl \
- $(top_srcdir)/tests/test_norm.pl \
- $(top_srcdir)/tests/test_mesh.pl \
- $(top_srcdir)/tests/test_interpolation.pl \
- $(top_srcdir)/tests/test_mat_elem.pl \
- $(top_srcdir)/tests/test_slice.pl \
- $(top_srcdir)/tests/integration.pl \
- $(top_srcdir)/tests/test_assembly.pl \
- $(top_srcdir)/tests/test_interpolated_fem.pl \
- $(top_srcdir)/tests/test_range_basis.pl \
- $(top_srcdir)/tests/laplacian.pl \
- $(top_srcdir)/tests/laplacian_with_bricks.pl \
- $(top_srcdir)/tests/elastostatic.pl \
- $(top_srcdir)/tests/stokes.pl \
- $(top_srcdir)/tests/plate.pl \
- $(optpl) \
- $(top_srcdir)/tests/nonlinear_elastostatic.pl \
- $(top_srcdir)/tests/nonlinear_membrane.pl \
- $(top_srcdir)/tests/dynamic_friction.pl \
- $(top_srcdir)/tests/plasticity.pl \
- $(top_srcdir)/tests/plasticity_old_brick.pl \
- $(top_srcdir)/tests/helmholtz.pl \
- $(top_srcdir)/tests/schwarz_additive.pl \
- $(top_srcdir)/tests/bilaplacian.pl \
- $(top_srcdir)/tests/heat_equation.pl \
- $(top_srcdir)/tests/wave_equation.pl \
- $(top_srcdir)/tests/cyl_slicer.pl \
+ $(top_srcdir)/tests/dynamic_array.pl \
+ $(top_srcdir)/tests/dynamic_tas.pl \
+ $(top_srcdir)/tests/test_int_set.pl \
+ $(top_srcdir)/tests/test_tree_sorted.pl \
+ $(top_srcdir)/tests/poly.pl \
+ $(top_srcdir)/tests/test_small_vector.pl \
+ $(top_srcdir)/tests/test_kdtree.pl \
+ $(top_srcdir)/tests/test_rtree.pl \
+ $(top_srcdir)/tests/geo_trans_inv.pl \
+ $(top_srcdir)/tests/test_norm.pl \
+ $(top_srcdir)/tests/test_mesh.pl \
+ $(top_srcdir)/tests/test_interpolation.pl \
+ $(top_srcdir)/tests/test_mat_elem.pl \
+ $(top_srcdir)/tests/test_slice.pl \
+ $(top_srcdir)/tests/integration.pl \
+ $(top_srcdir)/tests/test_assembly.pl \
+ $(top_srcdir)/tests/test_interpolated_fem.pl \
+ $(top_srcdir)/tests/test_range_basis.pl \
+ $(top_srcdir)/tests/laplacian.pl \
+ $(top_srcdir)/tests/laplacian_with_bricks.pl \
+ $(top_srcdir)/tests/elastostatic.pl \
+ $(top_srcdir)/tests/stokes.pl \
+ $(top_srcdir)/tests/plate.pl \
+ $(optpl) \
+ $(top_srcdir)/tests/nonlinear_elastostatic.pl \
+ $(top_srcdir)/tests/nonlinear_membrane.pl \
+ $(top_srcdir)/tests/dynamic_friction.pl \
+ $(top_srcdir)/tests/plasticity.pl \
+ $(top_srcdir)/tests/plasticity_old_brick.pl \
+ $(top_srcdir)/tests/helmholtz.pl \
+ $(top_srcdir)/tests/schwarz_additive.pl \
+ $(top_srcdir)/tests/bilaplacian.pl \
+ $(top_srcdir)/tests/heat_equation.pl \
+ $(top_srcdir)/tests/wave_equation.pl \
+ $(top_srcdir)/tests/test_large_sliding_contact.pl \
+ $(top_srcdir)/tests/cyl_slicer.pl \
$(top_srcdir)/tests/make_gmm_test.pl
EXTRA_DIST = \
@@ -189,12 +196,15 @@ EXTRA_DIST = \
plasticity_old_brick.param \
nonlinear_elastostatic.param \
test_interpolated_fem.param \
+ test_large_sliding_contact.pl \
+ test_large_sliding_contact.param \
geo_trans_inv.param \
heat_equation.pl \
heat_equation.param \
wave_equation.pl \
wave_equation.param \
- cyl_slicer.pl \
+ cyl_slicer.pl \
+ test_continuation.param \
make_gmm_test.pl \
gmm_torture01_lusolve.cc \
gmm_torture05_mult.cc \
@@ -204,21 +214,22 @@ EXTRA_DIST = \
gmm_torture20_iterative_solvers.cc \
meshes/disc_2D_degree3.mesh \
meshes/donut_regulier_72_elements.mesh \
- meshes/disc_P2_h0.15.mesh \
+ meshes/disc_P2_h0_3.mesh \
meshes/donut_regulier_8_elements_288ddl.mesh \
- meshes/disc_P2_h0.25.mesh \
- meshes/disc_P2_h0.5.mesh \
+ meshes/disc_P2_h0_5.mesh \
meshes/disc_P2_h1.mesh \
meshes/disc_P2_h2.mesh \
+ meshes/disc_P2_h4.mesh \
meshes/sphere_with_quadratic_tetra_16000_elts.mesh \
- meshes/disc_P2_h3.mesh \
+ meshes/disc_P2_h6.mesh \
meshes/sphere_with_quadratic_tetra_2000_elts.mesh \
- meshes/disc_P2_h4.mesh \
+ meshes/disc_P2_h8.mesh \
meshes/sphere_with_quadratic_tetra_400_elts.mesh \
- meshes/disc_P2_h5.5.mesh \
+ meshes/disc_P2_h10.mesh \
meshes/sphere_with_quadratic_tetra_80_elts.mesh \
meshes/donut_regulier_32_elements.mesh \
meshes/sphere_with_quadratic_tetra_8_elts.mesh \
+ meshes/disc_with_a_hole.mesh \
meshes/donut_regulier_512_elements.mesh
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f3fb505..f2459f4 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 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.
@@ -48,7 +48,8 @@ check_PROGRAMS = dynamic_array$(EXEEXT) dynamic_tas$(EXEEXT) \
$(am__EXEEXT_1) plasticity$(EXEEXT) \
plasticity_old_brick$(EXEEXT) dynamic_friction$(EXEEXT) \
bilaplacian$(EXEEXT) heat_equation$(EXEEXT) \
- wave_equation$(EXEEXT) cyl_slicer$(EXEEXT)
+ wave_equation$(EXEEXT) cyl_slicer$(EXEEXT) \
+ test_large_sliding_contact$(EXEEXT) test_continuation$(EXEEXT)
TESTS = $(top_srcdir)/tests/dynamic_array.pl \
$(top_srcdir)/tests/dynamic_tas.pl \
$(top_srcdir)/tests/test_int_set.pl \
@@ -81,6 +82,7 @@ TESTS = $(top_srcdir)/tests/dynamic_array.pl \
$(top_srcdir)/tests/bilaplacian.pl \
$(top_srcdir)/tests/heat_equation.pl \
$(top_srcdir)/tests/wave_equation.pl \
+ $(top_srcdir)/tests/test_large_sliding_contact.pl \
$(top_srcdir)/tests/cyl_slicer.pl \
$(top_srcdir)/tests/make_gmm_test.pl
subdir = tests
@@ -197,6 +199,11 @@ am_test_assembly_OBJECTS = test_assembly.$(OBJEXT)
test_assembly_OBJECTS = $(am_test_assembly_OBJECTS)
test_assembly_LDADD = $(LDADD)
test_assembly_DEPENDENCIES = ../src/libgetfem.la $(am__DEPENDENCIES_1)
+am_test_continuation_OBJECTS = test_continuation.$(OBJEXT)
+test_continuation_OBJECTS = $(am_test_continuation_OBJECTS)
+test_continuation_LDADD = $(LDADD)
+test_continuation_DEPENDENCIES = ../src/libgetfem.la \
+ $(am__DEPENDENCIES_1)
am_test_int_set_OBJECTS = test_int_set.$(OBJEXT)
test_int_set_OBJECTS = $(am_test_int_set_OBJECTS)
test_int_set_LDADD = $(LDADD)
@@ -215,6 +222,13 @@ am_test_kdtree_OBJECTS = test_kdtree.$(OBJEXT)
test_kdtree_OBJECTS = $(am_test_kdtree_OBJECTS)
test_kdtree_LDADD = $(LDADD)
test_kdtree_DEPENDENCIES = ../src/libgetfem.la $(am__DEPENDENCIES_1)
+am_test_large_sliding_contact_OBJECTS = \
+ test_large_sliding_contact.$(OBJEXT)
+test_large_sliding_contact_OBJECTS = \
+ $(am_test_large_sliding_contact_OBJECTS)
+test_large_sliding_contact_LDADD = $(LDADD)
+test_large_sliding_contact_DEPENDENCIES = ../src/libgetfem.la \
+ $(am__DEPENDENCIES_1)
am_test_mat_elem_OBJECTS = test_mat_elem.$(OBJEXT)
test_mat_elem_OBJECTS = $(am_test_mat_elem_OBJECTS)
test_mat_elem_LDADD = $(LDADD)
@@ -292,9 +306,10 @@ SOURCES = $(bilaplacian_SOURCES) $(crack_SOURCES) \
$(nonlinear_membrane_SOURCES) $(plasticity_SOURCES) \
$(plasticity_old_brick_SOURCES) $(plate_SOURCES) \
$(poly_SOURCES) $(schwarz_additive_SOURCES) $(stokes_SOURCES) \
- $(test_assembly_SOURCES) $(test_int_set_SOURCES) \
- $(test_interpolated_fem_SOURCES) $(test_interpolation_SOURCES) \
- $(test_kdtree_SOURCES) $(test_mat_elem_SOURCES) \
+ $(test_assembly_SOURCES) $(test_continuation_SOURCES) \
+ $(test_int_set_SOURCES) $(test_interpolated_fem_SOURCES) \
+ $(test_interpolation_SOURCES) $(test_kdtree_SOURCES) \
+ $(test_large_sliding_contact_SOURCES) $(test_mat_elem_SOURCES) \
$(test_mesh_SOURCES) $(test_mesh_generation_SOURCES) \
$(test_mesh_im_level_set_SOURCES) $(test_norm_SOURCES) \
$(test_range_basis_SOURCES) $(test_rtree_SOURCES) \
@@ -311,9 +326,10 @@ DIST_SOURCES = $(bilaplacian_SOURCES) $(am__crack_SOURCES_DIST) \
$(nonlinear_membrane_SOURCES) $(plasticity_SOURCES) \
$(plasticity_old_brick_SOURCES) $(plate_SOURCES) \
$(poly_SOURCES) $(schwarz_additive_SOURCES) $(stokes_SOURCES) \
- $(test_assembly_SOURCES) $(test_int_set_SOURCES) \
- $(test_interpolated_fem_SOURCES) $(test_interpolation_SOURCES) \
- $(test_kdtree_SOURCES) $(test_mat_elem_SOURCES) \
+ $(test_assembly_SOURCES) $(test_continuation_SOURCES) \
+ $(test_int_set_SOURCES) $(test_interpolated_fem_SOURCES) \
+ $(test_interpolation_SOURCES) $(test_kdtree_SOURCES) \
+ $(test_large_sliding_contact_SOURCES) $(test_mat_elem_SOURCES) \
$(test_mesh_SOURCES) $(am__test_mesh_generation_SOURCES_DIST) \
$(am__test_mesh_im_level_set_SOURCES_DIST) \
$(test_norm_SOURCES) $(test_range_basis_SOURCES) \
@@ -352,6 +368,7 @@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DISTCLEANMESH = @DISTCLEANMESH@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -370,6 +387,7 @@ GFSERVERFLAGS = @GFSERVERFLAGS@
GREP = @GREP@
HAVE_SCILAB = @HAVE_SCILAB@
IM_METHODS = @IM_METHODS@
+IM_METHODS_LOC = @IM_METHODS_LOC@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -386,6 +404,7 @@ LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MATLAB_COM_EXT = @MATLAB_COM_EXT@
MATLAB_INC_DIR = @MATLAB_INC_DIR@
MATLAB_OBJ_DIRS = @MATLAB_OBJ_DIRS@
@@ -450,6 +469,7 @@ 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_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
@@ -485,7 +505,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -519,7 +538,8 @@ CLEANFILES = \
nonlinear_elastostatic.dx nonlinear_elastostatic.vtk \
plasticity.mesh plasticity.U plasticity.sigmabar plasticity.vtk \
plasticity.meshfem plasticity.coef elasto_static_err.vtk \
- ii_files/* auto_gmm* dyn*.txt dynamic_friction.data *.sl time FN0 \
+ ii_files/* auto_gmm* dyn*.txt dynamic_friction.data \
+ dynamic_friction.U dynamic_friction.mfu *.sl time FN0 \
nonlinear_elastostatic.U crack.mesh cut.mesh nonlinear_membrane.mfd \
nonlinear_membrane.mesh test_range_basis.mesh nonlinear_membrane.mf \
nonlinear_membrane.vtk feminterpolation.vtk circleslice.vtk
@@ -561,6 +581,8 @@ bilaplacian_SOURCES = bilaplacian.cc
heat_equation_SOURCES = heat_equation.cc
wave_equation_SOURCES = wave_equation.cc
cyl_slicer_SOURCES = cyl_slicer.cc
+test_continuation_SOURCES = test_continuation.cc
+test_large_sliding_contact_SOURCES = test_large_sliding_contact.cc
INCLUDES = -I$(top_srcdir)/src -I../src
LDADD = ../src/libgetfem.la -lm $(SUPLDFLAGS)
EXTRA_DIST = \
@@ -613,12 +635,15 @@ EXTRA_DIST = \
plasticity_old_brick.param \
nonlinear_elastostatic.param \
test_interpolated_fem.param \
+ test_large_sliding_contact.pl \
+ test_large_sliding_contact.param \
geo_trans_inv.param \
heat_equation.pl \
heat_equation.param \
wave_equation.pl \
wave_equation.param \
- cyl_slicer.pl \
+ cyl_slicer.pl \
+ test_continuation.param \
make_gmm_test.pl \
gmm_torture01_lusolve.cc \
gmm_torture05_mult.cc \
@@ -628,21 +653,22 @@ EXTRA_DIST = \
gmm_torture20_iterative_solvers.cc \
meshes/disc_2D_degree3.mesh \
meshes/donut_regulier_72_elements.mesh \
- meshes/disc_P2_h0.15.mesh \
+ meshes/disc_P2_h0_3.mesh \
meshes/donut_regulier_8_elements_288ddl.mesh \
- meshes/disc_P2_h0.25.mesh \
- meshes/disc_P2_h0.5.mesh \
+ meshes/disc_P2_h0_5.mesh \
meshes/disc_P2_h1.mesh \
meshes/disc_P2_h2.mesh \
+ meshes/disc_P2_h4.mesh \
meshes/sphere_with_quadratic_tetra_16000_elts.mesh \
- meshes/disc_P2_h3.mesh \
+ meshes/disc_P2_h6.mesh \
meshes/sphere_with_quadratic_tetra_2000_elts.mesh \
- meshes/disc_P2_h4.mesh \
+ meshes/disc_P2_h8.mesh \
meshes/sphere_with_quadratic_tetra_400_elts.mesh \
- meshes/disc_P2_h5.5.mesh \
+ meshes/disc_P2_h10.mesh \
meshes/sphere_with_quadratic_tetra_80_elts.mesh \
meshes/donut_regulier_32_elements.mesh \
meshes/sphere_with_quadratic_tetra_8_elts.mesh \
+ meshes/disc_with_a_hole.mesh \
meshes/donut_regulier_512_elements.mesh
TESTS_ENVIRONMENT = perl
@@ -689,115 +715,121 @@ clean-checkPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES)
+bilaplacian$(EXEEXT): $(bilaplacian_OBJECTS) $(bilaplacian_DEPENDENCIES) $(EXTRA_bilaplacian_DEPENDENCIES)
@rm -f bilaplacian$(EXEEXT)
$(CXXLINK) $(bilaplacian_OBJECTS) $(bilaplacian_LDADD) $(LIBS)
-crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES)
+crack$(EXEEXT): $(crack_OBJECTS) $(crack_DEPENDENCIES) $(EXTRA_crack_DEPENDENCIES)
@rm -f crack$(EXEEXT)
$(CXXLINK) $(crack_OBJECTS) $(crack_LDADD) $(LIBS)
-cyl_slicer$(EXEEXT): $(cyl_slicer_OBJECTS) $(cyl_slicer_DEPENDENCIES)
+cyl_slicer$(EXEEXT): $(cyl_slicer_OBJECTS) $(cyl_slicer_DEPENDENCIES) $(EXTRA_cyl_slicer_DEPENDENCIES)
@rm -f cyl_slicer$(EXEEXT)
$(CXXLINK) $(cyl_slicer_OBJECTS) $(cyl_slicer_LDADD) $(LIBS)
-dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES)
+dynamic_array$(EXEEXT): $(dynamic_array_OBJECTS) $(dynamic_array_DEPENDENCIES) $(EXTRA_dynamic_array_DEPENDENCIES)
@rm -f dynamic_array$(EXEEXT)
$(CXXLINK) $(dynamic_array_OBJECTS) $(dynamic_array_LDADD) $(LIBS)
-dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES)
+dynamic_friction$(EXEEXT): $(dynamic_friction_OBJECTS) $(dynamic_friction_DEPENDENCIES) $(EXTRA_dynamic_friction_DEPENDENCIES)
@rm -f dynamic_friction$(EXEEXT)
$(CXXLINK) $(dynamic_friction_OBJECTS) $(dynamic_friction_LDADD) $(LIBS)
-dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES)
+dynamic_tas$(EXEEXT): $(dynamic_tas_OBJECTS) $(dynamic_tas_DEPENDENCIES) $(EXTRA_dynamic_tas_DEPENDENCIES)
@rm -f dynamic_tas$(EXEEXT)
$(CXXLINK) $(dynamic_tas_OBJECTS) $(dynamic_tas_LDADD) $(LIBS)
-elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES)
+elastostatic$(EXEEXT): $(elastostatic_OBJECTS) $(elastostatic_DEPENDENCIES) $(EXTRA_elastostatic_DEPENDENCIES)
@rm -f elastostatic$(EXEEXT)
$(CXXLINK) $(elastostatic_OBJECTS) $(elastostatic_LDADD) $(LIBS)
-geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES)
+geo_trans_inv$(EXEEXT): $(geo_trans_inv_OBJECTS) $(geo_trans_inv_DEPENDENCIES) $(EXTRA_geo_trans_inv_DEPENDENCIES)
@rm -f geo_trans_inv$(EXEEXT)
$(CXXLINK) $(geo_trans_inv_OBJECTS) $(geo_trans_inv_LDADD) $(LIBS)
-heat_equation$(EXEEXT): $(heat_equation_OBJECTS) $(heat_equation_DEPENDENCIES)
+heat_equation$(EXEEXT): $(heat_equation_OBJECTS) $(heat_equation_DEPENDENCIES) $(EXTRA_heat_equation_DEPENDENCIES)
@rm -f heat_equation$(EXEEXT)
$(CXXLINK) $(heat_equation_OBJECTS) $(heat_equation_LDADD) $(LIBS)
-helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES)
+helmholtz$(EXEEXT): $(helmholtz_OBJECTS) $(helmholtz_DEPENDENCIES) $(EXTRA_helmholtz_DEPENDENCIES)
@rm -f helmholtz$(EXEEXT)
$(CXXLINK) $(helmholtz_OBJECTS) $(helmholtz_LDADD) $(LIBS)
-integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES)
+integration$(EXEEXT): $(integration_OBJECTS) $(integration_DEPENDENCIES) $(EXTRA_integration_DEPENDENCIES)
@rm -f integration$(EXEEXT)
$(CXXLINK) $(integration_OBJECTS) $(integration_LDADD) $(LIBS)
-laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES)
+laplacian$(EXEEXT): $(laplacian_OBJECTS) $(laplacian_DEPENDENCIES) $(EXTRA_laplacian_DEPENDENCIES)
@rm -f laplacian$(EXEEXT)
$(CXXLINK) $(laplacian_OBJECTS) $(laplacian_LDADD) $(LIBS)
-laplacian_with_bricks$(EXEEXT): $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_DEPENDENCIES)
+laplacian_with_bricks$(EXEEXT): $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_DEPENDENCIES) $(EXTRA_laplacian_with_bricks_DEPENDENCIES)
@rm -f laplacian_with_bricks$(EXEEXT)
$(CXXLINK) $(laplacian_with_bricks_OBJECTS) $(laplacian_with_bricks_LDADD) $(LIBS)
-nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES)
+nonlinear_elastostatic$(EXEEXT): $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_DEPENDENCIES) $(EXTRA_nonlinear_elastostatic_DEPENDENCIES)
@rm -f nonlinear_elastostatic$(EXEEXT)
$(CXXLINK) $(nonlinear_elastostatic_OBJECTS) $(nonlinear_elastostatic_LDADD) $(LIBS)
-nonlinear_membrane$(EXEEXT): $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_DEPENDENCIES)
+nonlinear_membrane$(EXEEXT): $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_DEPENDENCIES) $(EXTRA_nonlinear_membrane_DEPENDENCIES)
@rm -f nonlinear_membrane$(EXEEXT)
$(CXXLINK) $(nonlinear_membrane_OBJECTS) $(nonlinear_membrane_LDADD) $(LIBS)
-plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES)
+plasticity$(EXEEXT): $(plasticity_OBJECTS) $(plasticity_DEPENDENCIES) $(EXTRA_plasticity_DEPENDENCIES)
@rm -f plasticity$(EXEEXT)
$(CXXLINK) $(plasticity_OBJECTS) $(plasticity_LDADD) $(LIBS)
-plasticity_old_brick$(EXEEXT): $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_DEPENDENCIES)
+plasticity_old_brick$(EXEEXT): $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_DEPENDENCIES) $(EXTRA_plasticity_old_brick_DEPENDENCIES)
@rm -f plasticity_old_brick$(EXEEXT)
$(CXXLINK) $(plasticity_old_brick_OBJECTS) $(plasticity_old_brick_LDADD) $(LIBS)
-plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES)
+plate$(EXEEXT): $(plate_OBJECTS) $(plate_DEPENDENCIES) $(EXTRA_plate_DEPENDENCIES)
@rm -f plate$(EXEEXT)
$(CXXLINK) $(plate_OBJECTS) $(plate_LDADD) $(LIBS)
-poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES)
+poly$(EXEEXT): $(poly_OBJECTS) $(poly_DEPENDENCIES) $(EXTRA_poly_DEPENDENCIES)
@rm -f poly$(EXEEXT)
$(CXXLINK) $(poly_OBJECTS) $(poly_LDADD) $(LIBS)
-schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES)
+schwarz_additive$(EXEEXT): $(schwarz_additive_OBJECTS) $(schwarz_additive_DEPENDENCIES) $(EXTRA_schwarz_additive_DEPENDENCIES)
@rm -f schwarz_additive$(EXEEXT)
$(CXXLINK) $(schwarz_additive_OBJECTS) $(schwarz_additive_LDADD) $(LIBS)
-stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES)
+stokes$(EXEEXT): $(stokes_OBJECTS) $(stokes_DEPENDENCIES) $(EXTRA_stokes_DEPENDENCIES)
@rm -f stokes$(EXEEXT)
$(CXXLINK) $(stokes_OBJECTS) $(stokes_LDADD) $(LIBS)
-test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES)
+test_assembly$(EXEEXT): $(test_assembly_OBJECTS) $(test_assembly_DEPENDENCIES) $(EXTRA_test_assembly_DEPENDENCIES)
@rm -f test_assembly$(EXEEXT)
$(CXXLINK) $(test_assembly_OBJECTS) $(test_assembly_LDADD) $(LIBS)
-test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES)
+test_continuation$(EXEEXT): $(test_continuation_OBJECTS) $(test_continuation_DEPENDENCIES) $(EXTRA_test_continuation_DEPENDENCIES)
+ @rm -f test_continuation$(EXEEXT)
+ $(CXXLINK) $(test_continuation_OBJECTS) $(test_continuation_LDADD) $(LIBS)
+test_int_set$(EXEEXT): $(test_int_set_OBJECTS) $(test_int_set_DEPENDENCIES) $(EXTRA_test_int_set_DEPENDENCIES)
@rm -f test_int_set$(EXEEXT)
$(CXXLINK) $(test_int_set_OBJECTS) $(test_int_set_LDADD) $(LIBS)
-test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES)
+test_interpolated_fem$(EXEEXT): $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_DEPENDENCIES) $(EXTRA_test_interpolated_fem_DEPENDENCIES)
@rm -f test_interpolated_fem$(EXEEXT)
$(CXXLINK) $(test_interpolated_fem_OBJECTS) $(test_interpolated_fem_LDADD) $(LIBS)
-test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES)
+test_interpolation$(EXEEXT): $(test_interpolation_OBJECTS) $(test_interpolation_DEPENDENCIES) $(EXTRA_test_interpolation_DEPENDENCIES)
@rm -f test_interpolation$(EXEEXT)
$(CXXLINK) $(test_interpolation_OBJECTS) $(test_interpolation_LDADD) $(LIBS)
-test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES)
+test_kdtree$(EXEEXT): $(test_kdtree_OBJECTS) $(test_kdtree_DEPENDENCIES) $(EXTRA_test_kdtree_DEPENDENCIES)
@rm -f test_kdtree$(EXEEXT)
$(CXXLINK) $(test_kdtree_OBJECTS) $(test_kdtree_LDADD) $(LIBS)
-test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES)
+test_large_sliding_contact$(EXEEXT): $(test_large_sliding_contact_OBJECTS) $(test_large_sliding_contact_DEPENDENCIES) $(EXTRA_test_large_sliding_contact_DEPENDENCIES)
+ @rm -f test_large_sliding_contact$(EXEEXT)
+ $(CXXLINK) $(test_large_sliding_contact_OBJECTS) $(test_large_sliding_contact_LDADD) $(LIBS)
+test_mat_elem$(EXEEXT): $(test_mat_elem_OBJECTS) $(test_mat_elem_DEPENDENCIES) $(EXTRA_test_mat_elem_DEPENDENCIES)
@rm -f test_mat_elem$(EXEEXT)
$(CXXLINK) $(test_mat_elem_OBJECTS) $(test_mat_elem_LDADD) $(LIBS)
-test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES)
+test_mesh$(EXEEXT): $(test_mesh_OBJECTS) $(test_mesh_DEPENDENCIES) $(EXTRA_test_mesh_DEPENDENCIES)
@rm -f test_mesh$(EXEEXT)
$(CXXLINK) $(test_mesh_OBJECTS) $(test_mesh_LDADD) $(LIBS)
-test_mesh_generation$(EXEEXT): $(test_mesh_generation_OBJECTS) $(test_mesh_generation_DEPENDENCIES)
+test_mesh_generation$(EXEEXT): $(test_mesh_generation_OBJECTS) $(test_mesh_generation_DEPENDENCIES) $(EXTRA_test_mesh_generation_DEPENDENCIES)
@rm -f test_mesh_generation$(EXEEXT)
$(CXXLINK) $(test_mesh_generation_OBJECTS) $(test_mesh_generation_LDADD) $(LIBS)
-test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES)
+test_mesh_im_level_set$(EXEEXT): $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_DEPENDENCIES) $(EXTRA_test_mesh_im_level_set_DEPENDENCIES)
@rm -f test_mesh_im_level_set$(EXEEXT)
$(CXXLINK) $(test_mesh_im_level_set_OBJECTS) $(test_mesh_im_level_set_LDADD) $(LIBS)
-test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES)
+test_norm$(EXEEXT): $(test_norm_OBJECTS) $(test_norm_DEPENDENCIES) $(EXTRA_test_norm_DEPENDENCIES)
@rm -f test_norm$(EXEEXT)
$(CXXLINK) $(test_norm_OBJECTS) $(test_norm_LDADD) $(LIBS)
-test_range_basis$(EXEEXT): $(test_range_basis_OBJECTS) $(test_range_basis_DEPENDENCIES)
+test_range_basis$(EXEEXT): $(test_range_basis_OBJECTS) $(test_range_basis_DEPENDENCIES) $(EXTRA_test_range_basis_DEPENDENCIES)
@rm -f test_range_basis$(EXEEXT)
$(CXXLINK) $(test_range_basis_OBJECTS) $(test_range_basis_LDADD) $(LIBS)
-test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES)
+test_rtree$(EXEEXT): $(test_rtree_OBJECTS) $(test_rtree_DEPENDENCIES) $(EXTRA_test_rtree_DEPENDENCIES)
@rm -f test_rtree$(EXEEXT)
$(CXXLINK) $(test_rtree_OBJECTS) $(test_rtree_LDADD) $(LIBS)
-test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES)
+test_slice$(EXEEXT): $(test_slice_OBJECTS) $(test_slice_DEPENDENCIES) $(EXTRA_test_slice_DEPENDENCIES)
@rm -f test_slice$(EXEEXT)
$(CXXLINK) $(test_slice_OBJECTS) $(test_slice_LDADD) $(LIBS)
-test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES)
+test_small_vector$(EXEEXT): $(test_small_vector_OBJECTS) $(test_small_vector_DEPENDENCIES) $(EXTRA_test_small_vector_DEPENDENCIES)
@rm -f test_small_vector$(EXEEXT)
$(CXXLINK) $(test_small_vector_OBJECTS) $(test_small_vector_LDADD) $(LIBS)
-test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES)
+test_tree_sorted$(EXEEXT): $(test_tree_sorted_OBJECTS) $(test_tree_sorted_DEPENDENCIES) $(EXTRA_test_tree_sorted_DEPENDENCIES)
@rm -f test_tree_sorted$(EXEEXT)
$(CXXLINK) $(test_tree_sorted_OBJECTS) $(test_tree_sorted_LDADD) $(LIBS)
-wave_equation$(EXEEXT): $(wave_equation_OBJECTS) $(wave_equation_DEPENDENCIES)
+wave_equation$(EXEEXT): $(wave_equation_OBJECTS) $(wave_equation_DEPENDENCIES) $(EXTRA_wave_equation_DEPENDENCIES)
@rm -f wave_equation$(EXEEXT)
$(CXXLINK) $(wave_equation_OBJECTS) $(wave_equation_LDADD) $(LIBS)
@@ -829,10 +861,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/schwarz_additive.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stokes.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_assembly.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_continuation.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_int_set.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_interpolated_fem.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_interpolation.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_kdtree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_large_sliding_contact.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mat_elem.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mesh.Po at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_mesh_generation.Po at am__quote@
@@ -1005,14 +1039,15 @@ check-TESTS: $(TESTS)
fi; \
dashes=`echo "$$dashes" | sed s/./=/g`; \
if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
+ col="$$grn"; \
else \
- echo "$$red$$dashes"; \
+ col="$$red"; \
fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
@@ -1062,10 +1097,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ 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:
diff --git a/tests/bilaplacian.cc b/tests/bilaplacian.cc
index d024679..d3f177f 100644
--- a/tests/bilaplacian.cc
+++ b/tests/bilaplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2006-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2006-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file bilaplacian.cc
@@ -42,6 +42,9 @@
#include "getfem/getfem_derivatives.h"
#include "gmm/gmm_inoutput.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/bilaplacian.param b/tests/bilaplacian.param
index d2cd08f..d5288bd 100644
--- a/tests/bilaplacian.param
+++ b/tests/bilaplacian.param
@@ -6,9 +6,9 @@
%%%%% pde parameters : %%%%%
LX = 1.0; LY = LX; LZ = LX; % sizes of the domain.
N = 2;
-QUAD = 1;
-MESH_NOISED = 1; % Set to one if you want to "shake" the mesh
-NX = 80; % space step.
+QUAD = 0;
+MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
+NX = 8; % space step.
DIRICHLET_VERSION = 0; % 0=multipliers, 1=penalization, 2=elimination
EPS_DIRICHLET_PENAL = 1e10; % Parametre de penalisation
FT = 10.0; % parameter for the exact solution
@@ -39,9 +39,9 @@ if (N == 2 && ~QUAD)
if 0 % hermite element
FEM_TYPE = 'FEM_HERMITE(2)'; % not conformal -> problem
DIRICHLET_FEM_TYPE = 'FEM_PK(2,3)';
- elseif 0 % argyris element
+ elseif 1 % argyris element
FEM_TYPE = 'FEM_ARGYRIS';
- DIRICHLET_FEM_TYPE = 'FEM_PK(2,5)';
+ DIRICHLET_FEM_TYPE = 'FEM_PK(2,3)';
else
% FEM_TYPE = 'FEM_HCT_TRIANGLE';
FEM_TYPE = 'FEM_REDUCED_HCT_TRIANGLE';
diff --git a/tests/bilaplacian.pl b/tests/bilaplacian.pl
index 9c707c4..af75f19 100644
--- a/tests/bilaplacian.pl
+++ b/tests/bilaplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -22,7 +23,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; LY = LX; LZ = LX;
MESH_NOISED = 0;
MESH_TYPE = 'GT_PK(2,1)';
@@ -37,6 +38,7 @@ ROOTFILENAME = 'bilaplacian';
DIRICHLET_VERSION = 0;
D = 1.0;
KL = 0;
+BOUNDARY_REF = 1;
;
diff --git a/tests/crack.cc b/tests/crack.cc
index 30e7c1f..02d0de4 100644
--- a/tests/crack.cc
+++ b/tests/crack.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Linear Elastostatic problem with a crack.
@@ -41,6 +41,9 @@
#include "gmm/gmm.h"
#include "gmm/gmm_inoutput.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -227,13 +230,13 @@ void sol_ref_infinite_plane(scalar_type nu, scalar_type E, scalar_type sigma,
+9*cost*s2*mu*c2*c2)/(lambda-3*mu);
}
} else GMM_ASSERT1(false, "Unvalid mode");
- if (isnan(U[0]))
+ if (!finite(U[0]))
cerr << "raaah not a number ... nu=" << nu << ", E=" << E << ", sig="
<< sigma << ", a=" << a << ", xx=" << xx << ", y=" << y << ", r="
<< r << ", sqrtr=" << sqrtr << ", cost=" << cost << ", U=" << U[0]
<< "," << U[1] << endl;
- assert(!isnan(U[0]));
- assert(!isnan(U[1]));
+ assert(finite(U[0]));
+ assert(finite(U[1]));
}
struct exact_solution {
diff --git a/tests/crack.pl b/tests/crack.pl
index d106d57..9f8882c 100644
--- a/tests/crack.pl
+++ b/tests/crack.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -22,7 +23,7 @@ $SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
MU = 1.0;
LAMBDA = 1.0;
MESH_NOISED = 0;
diff --git a/tests/cyl_slicer.cc b/tests/cyl_slicer.cc
index 567a1b8..36cb643 100644
--- a/tests/cyl_slicer.cc
+++ b/tests/cyl_slicer.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2010 Roman Putanowicz.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2010-2012 Roman Putanowicz.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file cyl_slicer.cc
@@ -39,6 +39,10 @@
#include <getfem/getfem_regular_meshes.h>
#include <getfem/bgeot_config.h>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
bgeot::scalar_type func(const bgeot::base_node& x) {
return x[0];
}
diff --git a/tests/cyl_slicer.pl b/tests/cyl_slicer.pl
index 3f54dfe..7a6244e 100644
--- a/tests/cyl_slicer.pl
+++ b/tests/cyl_slicer.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/dynamic_array.cc b/tests/dynamic_array.cc
old mode 100755
new mode 100644
index 9d9c94e..bcc935e
--- a/tests/dynamic_array.cc
+++ b/tests/dynamic_array.cc
@@ -1,27 +1,31 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_basic.h"
#include <deque>
#include <complex>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
typedef std::deque<int>::size_type size_type;
template<typename T> struct dyndeque : public std::deque<T> {
T &operator[](unsigned i) {
diff --git a/tests/dynamic_array.pl b/tests/dynamic_array.pl
old mode 100755
new mode 100644
index 68fede3..4fb2e0f
--- a/tests/dynamic_array.pl
+++ b/tests/dynamic_array.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/dynamic_friction.cc b/tests/dynamic_friction.cc
index 8e5a024..8597d70 100644
--- a/tests/dynamic_friction.cc
+++ b/tests/dynamic_friction.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard, Julien Pommier, Houari Khenous.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier, Houari Khenous.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
* Dynamic friction in linear elasticity.
@@ -37,6 +37,9 @@
#include "gmm/gmm.h"
#include <fstream>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -636,8 +639,8 @@ void friction_problem::solve(void) {
if (UN[i] < -1E-13) FRICTION.get_gap()[i] = 1.E13;
}
- gmm::default_newton_line_search ls;
- // gmm::simplest_newton_line_search ls(100000, 1.4, 0.001, 0.8);
+ getfem::default_newton_line_search ls;
+ // getfem::simplest_newton_line_search ls(100000, 1.4, 0.001, 0.8);
getfem::standard_solve(MS, PERIODIC, iter,
getfem::default_linear_solver(PERIODIC), ls);
diff --git a/tests/dynamic_friction.pl b/tests/dynamic_friction.pl
index 878d3b5..68f0a1e 100644
--- a/tests/dynamic_friction.pl
+++ b/tests/dynamic_friction.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
MU = 30;
LAMBDA = 55;
FRICTION_COEF = 0.0; % Friction coefficient.
diff --git a/tests/dynamic_tas.cc b/tests/dynamic_tas.cc
old mode 100755
new mode 100644
index f473ce3..e422303
--- a/tests/dynamic_tas.cc
+++ b/tests/dynamic_tas.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_tas.h"
using namespace std;
diff --git a/tests/dynamic_tas.pl b/tests/dynamic_tas.pl
old mode 100755
new mode 100644
index 2e41ea2..b8c17db
--- a/tests/dynamic_tas.pl
+++ b/tests/dynamic_tas.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/elastostatic.cc b/tests/elastostatic.cc
index 30cfd3c..f4cfb74 100644
--- a/tests/elastostatic.cc
+++ b/tests/elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file elastostatic.cc
@@ -42,6 +42,10 @@
#include "getfem/getfem_error_estimate.h"
#include "getfem/getfem_import.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/elastostatic.pl b/tests/elastostatic.pl
old mode 100755
new mode 100644
index 0149ec3..a8643a5
--- a/tests/elastostatic.pl
+++ b/tests/elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -22,7 +23,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
MU = 1.0;
LAMBDA = 1.0;
FT = 0.1;
diff --git a/tests/geo_trans_inv.cc b/tests/geo_trans_inv.cc
index d484767..8746ead 100644
--- a/tests/geo_trans_inv.cc
+++ b/tests/geo_trans_inv.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/*
various checks for the geometric transformations inversion
@@ -27,6 +27,9 @@
#include "getfem/bgeot_geotrans_inv.h"
#include "getfem/getfem_regular_meshes.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using bgeot::size_type;
using bgeot::short_type;
using bgeot::dim_type;
diff --git a/tests/geo_trans_inv.pl b/tests/geo_trans_inv.pl
old mode 100755
new mode 100644
index 424554d..064173d
--- a/tests/geo_trans_inv.pl
+++ b/tests/geo_trans_inv.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/gmm_torture01_lusolve.cc b/tests/gmm_torture01_lusolve.cc
old mode 100755
new mode 100644
index 5d5fad4..858a61b
--- a/tests/gmm_torture01_lusolve.cc
+++ b/tests/gmm_torture01_lusolve.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// SQUARED_MATRIX_PARAM;
// DENSE_VECTOR_PARAM;
// VECTOR_PARAM;
@@ -27,6 +27,8 @@
#include "gmm/gmm_dense_lu.h"
#include "gmm/gmm_condition_number.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using gmm::size_type;
bool print_debug = false;
diff --git a/tests/gmm_torture05_mult.cc b/tests/gmm_torture05_mult.cc
index 0b35a9a..5df2582 100644
--- a/tests/gmm_torture05_mult.cc
+++ b/tests/gmm_torture05_mult.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// SQUARED_MATRIX_PARAM
// VECTOR_PARAM;
// VECTOR_PARAM;
@@ -31,6 +31,8 @@
#include "gmm/gmm_dense_qr.h"
#include "gmm/gmm_condition_number.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using gmm::size_type;
template <typename MAT1 , typename MAT2, typename VECT1, typename VECT2,
diff --git a/tests/gmm_torture06_mat_mult.cc b/tests/gmm_torture06_mat_mult.cc
old mode 100755
new mode 100644
index ec0404e..d1d7a0a
--- a/tests/gmm_torture06_mat_mult.cc
+++ b/tests/gmm_torture06_mat_mult.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// RECTANGULAR_MATRIX_PARAM
// RECTANGULAR_MATRIX_PARAM;
// RECTANGULAR_MATRIX_PARAM;
@@ -25,6 +25,8 @@
#include "gmm/gmm_kernel.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using gmm::size_type;
template <typename MAT1, typename MAT2, typename MAT3>
diff --git a/tests/gmm_torture10_qr.cc b/tests/gmm_torture10_qr.cc
old mode 100755
new mode 100644
index 6040fea..4928241
--- a/tests/gmm_torture10_qr.cc
+++ b/tests/gmm_torture10_qr.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// RECTANGULAR_MATRIX_PARAM
// SQUARED_MATRIX_PARAM
// ENDPARAM;
@@ -27,7 +27,8 @@
#include "gmm/gmm_dense_qr.h"
#include "gmm/gmm_condition_number.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using gmm::size_type;
bool print_debug = false;
diff --git a/tests/gmm_torture15_sub.cc b/tests/gmm_torture15_sub.cc
old mode 100755
new mode 100644
index 715e605..3b83b94
--- a/tests/gmm_torture15_sub.cc
+++ b/tests/gmm_torture15_sub.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// SQUARED_MATRIX_PARAM
// VECTOR_PARAM;
// VECTOR_PARAM;
@@ -27,6 +27,8 @@
#include "gmm/gmm_dense_lu.h"
#include "gmm/gmm_condition_number.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using gmm::size_type;
bool print_debug = false;
diff --git a/tests/gmm_torture20_iterative_solvers.cc b/tests/gmm_torture20_iterative_solvers.cc
old mode 100755
new mode 100644
index b9e1b75..3fd66da
--- a/tests/gmm_torture20_iterative_solvers.cc
+++ b/tests/gmm_torture20_iterative_solvers.cc
@@ -1,30 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
// SQUARED_MATRIX_PARAM;
// DENSE_VECTOR_PARAM;
// VECTOR_PARAM;
// ENDPARAM;
-using namespace std; // in order to test a using namespace std;
#include "gmm/gmm.h"
+using namespace std; // in order to test a using namespace std;
using gmm::size_type;
diff --git a/tests/heat_equation.cc b/tests/heat_equation.cc
index a2bfd35..b4e0323 100644
--- a/tests/heat_equation.cc
+++ b/tests/heat_equation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file heat_equation.cc
@brief Transient heat equation.
@@ -36,6 +36,9 @@
#include "getfem/getfem_regular_meshes.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests/heat_equation.pl b/tests/heat_equation.pl
index 02d000a..4988d06 100644
--- a/tests/heat_equation.pl
+++ b/tests/heat_equation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
diff --git a/tests/helmholtz.cc b/tests/helmholtz.cc
index 09f9e38..5c826d1 100644
--- a/tests/helmholtz.cc
+++ b/tests/helmholtz.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file helmholtz.cc
@@ -34,6 +34,8 @@
#include "getfem/getfem_regular_meshes.h"
#include "getfem/getfem_model_solvers.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/helmholtz.pl b/tests/helmholtz.pl
index 4ab67af..02623e4 100755
--- a/tests/helmholtz.pl
+++ b/tests/helmholtz.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
WAVENUM_R = 3;
WAVENUM_I = 0;
R0 = 2.;
diff --git a/tests/integration.cc b/tests/integration.cc
index e58f115..9097499 100644
--- a/tests/integration.cc
+++ b/tests/integration.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include <numeric>
#include "getfem/getfem_integration.h"
#include "getfem/bgeot_comma_init.h"
@@ -25,6 +25,9 @@
#include "getfem/getfem_mat_elem.h"
#include <iomanip>
#include <map>
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using getfem::size_type;
using getfem::short_type;
diff --git a/tests/integration.pl b/tests/integration.pl
old mode 100755
new mode 100644
index 53eb07d..7d913e0
--- a/tests/integration.pl
+++ b/tests/integration.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/laplacian.cc b/tests/laplacian.cc
index af74f56..669516a 100644
--- a/tests/laplacian.cc
+++ b/tests/laplacian.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file laplacian.cc
@brief Laplacian (Poisson) problem.
@@ -37,6 +37,8 @@
#include "getfem/getfem_derivatives.h"
#include "getfem/getfem_superlu.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/laplacian.pl b/tests/laplacian.pl
old mode 100755
new mode 100644
index 7e54f60..d25371d
--- a/tests/laplacian.pl
+++ b/tests/laplacian.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
diff --git a/tests/laplacian_with_bricks.cc b/tests/laplacian_with_bricks.cc
index 5e2b875..3d086b2 100644
--- a/tests/laplacian_with_bricks.cc
+++ b/tests/laplacian_with_bricks.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file laplacian.cc
@brief Laplacian (Poisson) problem.
@@ -35,6 +35,8 @@
#include "getfem/getfem_export.h"
#include "getfem/getfem_regular_meshes.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/laplacian_with_bricks.pl b/tests/laplacian_with_bricks.pl
index 25c1b1b..2d5f304 100644
--- a/tests/laplacian_with_bricks.pl
+++ b/tests/laplacian_with_bricks.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
diff --git a/tests/make_gmm_test.pl b/tests/make_gmm_test.pl
index d176dfc..d4a1416 100755
--- a/tests/make_gmm_test.pl
+++ b/tests/make_gmm_test.pl
@@ -1,16 +1,16 @@
-# -*- perl -*-
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -146,6 +146,7 @@ for ($iter = 1; $iter <= $nb_iter; ++$iter) {
while (($li = <DATAF> )&& ($reading_param)) {
chomp($li);
+ if ($li=~/^\/\//) {
if ($li=~/ENDPARAM/) { $reading_param = 0; }
elsif ($li=~/DENSE_VECTOR_PARAM/) { $param[$nb_param++] = 1; }
elsif ($li=~/VECTOR_PARAM/) { $param[$nb_param++] = 2; }
@@ -154,6 +155,7 @@ for ($iter = 1; $iter <= $nb_iter; ++$iter) {
elsif ($li=~/\/\//) { }
else { die "Error in parameter list"; }
}
+ }
$TYPES[0] = "float";
$TYPES[1] = "std::complex<float> ";
diff --git a/tests/meshes/disc_P2_h0.5.mesh b/tests/meshes/disc_P2_h0.5.mesh
deleted file mode 100755
index 90ef1cb..0000000
--- a/tests/meshes/disc_P2_h0.5.mesh
+++ /dev/null
@@ -1,8429 +0,0 @@
-% GETFEM MESH FILE
-% GETFEM VERSION 1.7-20040316
-
-
-
-BEGIN POINTS LIST
-
- POINT 0 0 0
- POINT 1 0 20
- POINT 2 -20 20
- POINT 3 20 20
- POINT 4 0 40
- POINT 5 -5.494590158705203 0.769568933904214
- POINT 6 -4.555054354703293 0.5256199116454576
- POINT 7 -3.62510614201392 0.3312784996295808
- POINT 8 -2.686413338358856 0.1812416288131739
- POINT 9 -1.753728402849995 0.077037451999329
- POINT 10 -0.851420720971519 0.01813114404021269
- POINT 11 0.8514160122311216 0.01813095400480157
- POINT 12 1.753719324465416 0.07703666291032139
- POINT 13 2.686401050802698 0.181239963250821
- POINT 14 3.625091324513498 0.3312757686489166
- POINT 15 4.555037637659274 0.5256160015391538
- POINT 16 5.494572548479121 0.7695639022537971
- POINT 17 -8.14748720023632 1.73477478041978
- POINT 18 -7.204326158760607 1.342623855477397
- POINT 19 -6.323306730319925 1.025917887963812
- POINT 20 -5.012043637681486 1.487026562234344
- POINT 21 -4.001504680231534 1.348769869720156
- POINT 22 -3.020446348008669 1.193123454693629
- POINT 23 -2.033096162687354 1.074468404199018
- POINT 24 -1.029250259109854 0.9952937048620419
- POINT 25 -4.743693576426955e-06 0.9550846747893821
- POINT 26 1.029241591782402 0.9952938914888843
- POINT 27 2.033087778001799 1.074468514560464
- POINT 28 3.020437785114206 1.193122951441658
- POINT 29 4.001495610537607 1.348768371554737
- POINT 30 5.012033480242295 1.487023534523747
- POINT 31 6.323291483458299 1.025912806798219
- POINT 32 7.20431240676467 1.342618545311957
- POINT 33 8.147472348609107 1.734768155628285
- POINT 34 -9.874839229995656 2.607830779866931
- POINT 35 -8.967401898964656 2.123039878590955
- POINT 36 -7.43893966884391 2.316523461127632
- POINT 37 -6.505937339794322 2.123067897852342
- POINT 38 -5.617471023440036 2.128732087831175
- POINT 39 -4.504938941140685 2.292372023343256
- POINT 40 -3.474895393652287 2.188889537474249
- POINT 41 -2.477789827740728 2.069417744488129
- POINT 42 -1.486533939627704 1.978390111577929
- POINT 43 -0.4945351927920381 1.920788208193323
- POINT 44 0.494530028654747 1.920788180673721
- POINT 45 1.48652903784696 1.978390363793194
- POINT 46 2.477785286357576 2.069417875067633
- POINT 47 3.474891314117997 2.188889007881329
- POINT 48 4.504935616060729 2.292369967247126
- POINT 49 5.617468616717059 2.128722558769742
- POINT 50 6.505934206344425 2.123064219351945
- POINT 51 7.438934955645484 2.316522386860346
- POINT 52 8.967386714216421 2.123032261658711
- POINT 53 9.874824441340188 2.607822383246229
- POINT 54 -11.51772618471706 3.649404184131703
- POINT 55 -10.65697220336667 3.075788247109521
- POINT 56 -9.073837487095867 3.098945367911463
- POINT 57 -8.146481814508759 2.93463496665957
- POINT 58 -7.049600453276345 3.146247627644996
- POINT 59 -6.068284496299216 3.100104651100007
- POINT 60 -5.072988891537222 3.091827459666651
- POINT 61 -3.993877927928949 3.131132225510109
- POINT 62 -2.967955349130637 3.051608081751008
- POINT 63 -1.969358890547338 2.964205195218535
- POINT 64 -0.9811566490131486 2.90071553814206
- POINT 65 -1.32163243384692e-06 2.877135624667564
- POINT 66 0.9811540073798326 2.900715668778548
- POINT 67 1.969356448130425 2.964205359405151
- POINT 68 2.967953292680015 3.051607771536507
- POINT 69 3.993876536191101 3.131130560601491
- POINT 70 5.07298836313739 3.09182201424316
- POINT 71 6.06828189330052 3.10009883043144
- POINT 72 7.049596028910742 3.146246238867447
- POINT 73 8.146475803362755 2.934633378296194
- POINT 74 9.073829870567886 3.098941319319342
- POINT 75 10.65695825761416 3.075779465645408
- POINT 76 11.51771371828971 3.649395402508161
- POINT 77 -12.25874124373426 4.197365310835768
- POINT 78 -10.64940593588828 4.039054822049597
- POINT 79 -9.738991551137142 3.788828249782045
- POINT 80 -8.645496432574655 3.944646023442154
- POINT 81 -7.660083249538626 3.927642758322452
- POINT 82 -6.59386271210862 4.037468940686985
- POINT 83 -5.568600019856155 4.018665115993096
- POINT 84 -4.542276038525629 3.999836078704063
- POINT 85 -3.491369657240189 3.994992924822852
- POINT 86 -2.474009349355216 3.935011777572696
- POINT 87 -1.477288819485819 3.874958764735967
- POINT 88 -0.4912058119350093 3.84024391890156
- POINT 89 0.4912045861343114 3.840244004832297
- POINT 90 1.477287661196852 3.874958892229309
- POINT 91 2.474008420090503 3.935011605232642
- POINT 92 3.491369140152303 3.994991746916046
- POINT 93 4.542275958327673 3.999832734657181
- POINT 94 5.568598961382722 4.018661009084565
- POINT 95 6.593859756639968 4.037466906689763
- POINT 96 7.660079741658018 3.927642484330992
- POINT 97 8.64549214777098 3.944645135772696
- POINT 98 9.738984400934594 3.788824210856252
- POINT 99 10.64939834126311 4.039049114973768
- POINT 100 12.25873013918693 4.197356696596919
- POINT 101 -13.06808399305144 4.859815696281542
- POINT 102 -12.14172415206427 5.120456490850303
- POINT 103 -11.26850058845588 4.78253504757261
- POINT 104 -10.17404214944296 4.845047406793981
- POINT 105 -9.208059651222554 4.766866668801151
- POINT 106 -8.164339019401956 4.857476344060355
- POINT 107 -7.149967162775942 4.875867152053067
- POINT 108 -6.093958019589567 4.926093683238227
- POINT 109 -5.058077545048842 4.913790131101954
- POINT 110 -4.028039828119854 4.894648028971938
- POINT 111 -2.995365612046738 4.876648223313875
- POINT 112 -1.984673486096534 4.833837916766388
- POINT 113 -0.9889438049108867 4.797769562520688
- POINT 114 -2.362747113168751e-07 4.784386125986646
- POINT 115 0.9889433725237518 4.797769655939185
- POINT 116 1.984673180431574 4.833837841092998
- POINT 117 2.995365534870316 4.876647488912344
- POINT 118 4.028039920473764 4.894645987409467
- POINT 119 5.05807704187145 4.913787423329794
- POINT 120 6.09395626231969 4.926092028666856
- POINT 121 7.149964792987238 4.875866809291987
- POINT 122 8.164336682555421 4.857476643496101
- POINT 123 9.208056699547432 4.766865857979807
- POINT 124 10.17403815454237 4.845044126893953
- POINT 125 11.26849448251217 4.782529900161253
- POINT 126 12.14171794981946 5.120450644819872
- POINT 127 13.06807455950774 4.859807553827244
- POINT 128 -13.79621135610305 5.520201927590952
- POINT 129 -12.80117439670994 5.856589459482491
- POINT 130 -11.67938537881067 5.871675730352508
- POINT 131 -10.7214199084595 5.705740655756915
- POINT 132 -9.682832193302595 5.735754340027762
- POINT 133 -8.688206795148123 5.723107658281122
- POINT 134 -7.655630079002389 5.775975918064022
- POINT 135 -6.627659763072258 5.792669306732381
- POINT 136 -5.582314228446745 5.814411012773447
- POINT 137 -4.548885425945512 5.805126115268295
- POINT 138 -3.522722077771634 5.788884500830754
- POINT 139 -2.501187311366817 5.770380462326169
- POINT 140 -1.494394371192296 5.742942846788264
- POINT 141 -0.4971264884626344 5.724801584483487
- POINT 142 0.4971264114179549 5.724801616093884
- POINT 143 1.494394375253193 5.742942820679326
- POINT 144 2.501187449167741 5.770380046330405
- POINT 145 3.522722282985142 5.788883304381674
- POINT 146 4.548885254065114 5.80512440450948
- POINT 147 5.582313237121974 5.814409778421799
- POINT 148 6.627658274246912 5.792668907910858
- POINT 149 7.655628672903336 5.775976131426517
- POINT 150 8.688205683983837 5.723107897941759
- POINT 151 9.682831053695072 5.735753339275631
- POINT 152 10.72141774219851 5.705737949417665
- POINT 153 11.67938249802985 5.871671763668828
- POINT 154 12.80116985277255 5.856584114327579
- POINT 155 13.79620361018442 5.52019455095268
- POINT 156 -15.07551414433484 6.857364294633759
- POINT 157 -14.47383155813855 6.197529205731446
- POINT 158 -13.45485475009742 6.553837837714978
- POINT 159 -12.31042185688016 6.683440243020864
- POINT 160 -11.21350161895065 6.69819718995942
- POINT 161 -10.20833342071787 6.628047644175917
- POINT 162 -9.180105769142591 6.64834742192738
- POINT 163 -8.167115514052471 6.65576641169878
- POINT 164 -7.135706515094646 6.685162961807312
- POINT 165 -6.105345078296335 6.696209760357505
- POINT 166 -5.069576645378604 6.705314119570696
- POINT 167 -4.041800732917723 6.698207423904568
- POINT 168 -3.020761532842517 6.685782557740071
- POINT 169 -2.005808074374162 6.671737301319939
- POINT 170 -1.000288933333046 6.656398725132026
- POINT 171 4.397573777348285e-08 6.650034053590167
- POINT 172 1.000289057350326 6.656398701633271
- POINT 173 2.005808282761941 6.671737074424545
- POINT 174 3.020761779503171 6.685781881995771
- POINT 175 4.041800760087482 6.698206389869481
- POINT 176 5.069576162857779 6.705313264812579
- POINT 177 6.10534421344702 6.69620937563182
- POINT 178 7.135705654446768 6.685162970448084
- POINT 179 8.167114943754402 6.655766632853415
- POINT 180 9.180105544149159 6.648347310133159
- POINT 181 10.20833306114628 6.628046599517105
- POINT 182 11.21350079915651 6.698194920239427
- POINT 183 12.31041989729133 6.683437342390677
- POINT 184 13.45485102688512 6.553833543240082
- POINT 185 14.47382501191121 6.197522339217816
- POINT 186 15.07550853647004 6.85735785101832
- POINT 187 -15.74070185460795 7.661835423193954
- POINT 188 -14.74687538651157 7.702960989661571
- POINT 189 -13.93188920478376 7.345232089754496
- POINT 190 -12.86506131544698 7.471088086950771
- POINT 191 -11.77211701495691 7.547677194388092
- POINT 192 -10.70587046671523 7.565284924165475
- POINT 193 -9.687660424643854 7.54461386330666
- POINT 194 -8.662563218479574 7.560951116274378
- POINT 195 -7.642034647994548 7.571360794157137
- POINT 196 -6.613518858753616 7.588082984279957
- POINT 197 -5.586073186048593 7.595112879441636
- POINT 198 -4.558140690092682 7.598809924577656
- POINT 199 -3.535939593111036 7.59366155618144
- POINT 200 -2.519295513626756 7.585207729094968
- POINT 201 -1.507828110570193 7.576464832977407
- POINT 202 -0.5019148548267611 7.569504441473947
- POINT 203 0.5019150140751154 7.569504419051911
- POINT 204 1.507828313373964 7.576464701318211
- POINT 205 2.51929574421762 7.58520735259712
- POINT 206 3.535939709005314 7.593660949468794
- POINT 207 4.558140510818687 7.598809363042038
- POINT 208 5.58607274341326 7.595112562629756
- POINT 209 6.613518369190103 7.588082887213245
- POINT 210 7.642034309561478 7.571360854887308
- POINT 211 8.662563167404116 7.560951138691602
- POINT 212 9.687660573872202 7.54461354186692
- POINT 213 10.70587058429081 7.565283863779716
- POINT 214 11.77211666522259 7.547675581264719
- POINT 215 12.8650605916635 7.471085619230291
- POINT 216 13.93188849368163 7.345227696048455
- POINT 217 14.74687398655421 7.702958601368711
- POINT 218 15.74069772046266 7.661830148963676
- POINT 219 -16.34008243157374 8.467363435476578
- POINT 220 -15.28567534644808 8.552905620836993
- POINT 221 -14.22089501094071 8.468579625245626
- POINT 222 -13.29774920244363 8.333212052076258
- POINT 223 -12.27300453476784 8.396001904827241
- POINT 224 -11.224449672806 8.44025834990769
- POINT 225 -10.1842020715159 8.457472361197105
- POINT 226 -9.163914101356678 8.456332255719779
- POINT 227 -8.14059852678059 8.468750713098206
- POINT 228 -7.118690004259524 8.477698841262107
- POINT 229 -6.093911741800466 8.487745637900247
- POINT 230 -5.070537359203934 8.492297494254309
- POINT 231 -4.048497389531928 8.493845716618845
- POINT 232 -3.030710235690668 8.490541970764172
- POINT 233 -2.017113078017005 8.485534154569866
- POINT 234 -1.007152862458606 8.481122761690685
- POINT 235 8.070285670638833e-08 8.479054147646179
- POINT 236 1.007153037203349 8.481122683637645
- POINT 237 2.017113267583667 8.485533940823723
- POINT 238 3.030710370157321 8.490541618084078
- POINT 239 4.048497363984429 8.493845358028667
- POINT 240 5.070537168629906 8.49229725406053
- POINT 241 6.093911495339211 8.487745514844656
- POINT 242 7.11868981343622 8.477698810261961
- POINT 243 8.140598491031323 8.468750699179775
- POINT 244 9.163914246108916 8.456332131143173
- POINT 245 10.18420232498191 8.457471896486332
- POINT 246 11.22444978036375 8.440257512134613
- POINT 247 12.27300442131762 8.396000443618357
- POINT 248 13.29774885774807 8.333209357606099
- POINT 249 14.22089386884885 8.468576880391957
- POINT 250 15.28567398016187 8.552903295969026
- POINT 251 16.34007933974851 8.46735905480778
- POINT 252 -16.89879506132182 9.30277019619324
- POINT 253 -15.84083890009481 9.368103783320413
- POINT 254 -14.75936630448394 9.376434710940254
- POINT 255 -13.72667446491556 9.338668036765469
- POINT 256 -12.7458829592818 9.286293637722791
- POINT 257 -11.72514144039831 9.317880286978371
- POINT 258 -10.69307226518711 9.344364735918155
- POINT 259 -9.663652464211705 9.358107425253532
- POINT 260 -8.642457994516798 9.362656816289235
- POINT 261 -7.620361904257799 9.371754129812164
- POINT 262 -6.599324604837983 9.378698501517102
- POINT 263 -5.577936443480438 9.385133261260403
- POINT 264 -4.558210845970175 9.388247898190615
- POINT 265 -3.540361900824579 9.389121481751587
- POINT 266 -2.52566238019628 9.387374370414491
- POINT 267 -1.513887157671833 9.384925984750414
- POINT 268 -0.504297186178584 9.383298051709803
- POINT 269 0.5042973320602566 9.383298015668299
- POINT 270 1.51388730668141 9.384925862954564
- POINT 271 2.525662501619651 9.387374163645836
- POINT 272 3.540361939509808 9.389121254735599
- POINT 273 4.558210789027288 9.388247723190803
- POINT 274 5.577936342341931 9.385133146588913
- POINT 275 6.599324518449944 9.378698438465905
- POINT 276 7.62036189183867 9.371754085979447
- POINT 277 8.642458092973191 9.362656736309578
- POINT 278 9.663652671231812 9.358107201585797
- POINT 279 10.6930724783395 9.344364317591429
- POINT 280 11.72514158518201 9.31787949717938
- POINT 281 12.74588295478644 9.286292109076781
- POINT 282 13.72667400654556 9.338666111495892
- POINT 283 14.75936532452434 9.376432764986804
- POINT 284 15.84083766707554 9.368101537096484
- POINT 285 16.8987927411374 9.302766530916411
- POINT 286 -17.41541814741128 10.16622093237684
- POINT 287 -16.36597467943507 10.20674001010058
- POINT 288 -15.30570510771474 10.23673169382489
- POINT 289 -14.25334124093768 10.24705991000825
- POINT 290 -13.22518371810642 10.23169262743967
- POINT 291 -12.21928286812764 10.21375315134102
- POINT 292 -11.19741423399891 10.23174369517853
- POINT 293 -10.17050417537597 10.2482576748095
- POINT 294 -9.145044199699443 10.25842856407609
- POINT 295 -8.123750354518931 10.26388718261748
- POINT 296 -7.10298550942124 10.2706284602633
- POINT 297 -6.083575083515306 10.2759394046698
- POINT 298 -5.065015567249327 10.28034882788564
- POINT 299 -4.048200146803218 10.28265723277545
- POINT 300 -3.033238075903394 10.28342728339184
- POINT 301 -2.02054894726801 10.28280355683485
- POINT 302 -1.009738819288446 10.28194446006377
- POINT 303 5.919699467074602e-08 10.28162989140187
- POINT 304 1.009738935910972 10.2819443965436
- POINT 305 2.020549047902884 10.28280343604998
- POINT 306 3.033238133655776 10.28342713958931
- POINT 307 4.048200151873941 10.2826571076832
- POINT 308 5.065015543299326 10.28034873191634
- POINT 309 6.083575061485952 10.27593933706552
- POINT 310 7.102985523625926 10.27062840654225
- POINT 311 8.123750433256964 10.26388711645833
- POINT 312 9.14504435731642 10.25842843597803
- POINT 313 10.17050438210141 10.24825745265531
- POINT 314 11.19741445812459 10.23174327923734
- POINT 315 12.21928304966143 10.21375232985006
- POINT 316 13.22518366386299 10.23169143671009
- POINT 317 14.25334082737309 10.24705856617686
- POINT 318 15.30570438725816 10.2367300912412
- POINT 319 16.36597364727631 10.20673788845324
- POINT 320 17.41541641117195 10.16621785753401
- POINT 321 -17.88625803484845 11.05115797933476
- POINT 322 -16.85120422054986 11.06936232054822
- POINT 323 -15.81832377296524 11.10623835603135
- POINT 324 -14.77936586062894 11.12671433185663
- POINT 325 -13.74209116444094 11.13500853711859
- POINT 326 -12.71605470869173 11.13080637203836
- POINT 327 -11.69940028612606 11.12659743667363
- POINT 328 -10.67625961071982 11.13773567839252
- POINT 329 -9.651329983156939 11.14840741093704
- POINT 330 -8.627923790323184 11.15586543586765
- POINT 331 -7.607383209356573 11.16085887302131
- POINT 332 -6.588183874293925 11.16597912139563
- POINT 333 -5.570592864708988 11.17006260278196
- POINT 334 -4.55434815440509 11.17325037576849
- POINT 335 -3.539757168979546 11.17505634294026
- POINT 336 -2.526758778403693 11.17584237662288
- POINT 337 -1.515331628371982 11.17586700307951
- POINT 338 -0.5049906539082446 11.17574820189833
- POINT 339 0.5049907444555864 11.17574817768458
- POINT 340 1.5153317094028 11.17586693621212
- POINT 341 2.526758836407911 11.17584228689916
- POINT 342 3.539757198178682 11.17505625511356
- POINT 343 4.554348166128215 11.17325029975345
- POINT 344 5.570592875755479 11.17006254133163
- POINT 345 6.588183905050538 11.16597906858908
- POINT 346 7.6073832793965 11.16085881572795
- POINT 347 8.62792391457109 11.15586535027681
- POINT 348 9.651330158548348 11.14840727911036
- POINT 349 10.67625983071012 11.13773544977034
- POINT 350 11.69940052274761 11.12659700092283
- POINT 351 12.71605485286965 11.13080569362486
- POINT 352 13.74209110304109 11.13500768317192
- POINT 353 14.7793655795263 11.12671327386668
- POINT 354 15.81832324916032 11.10623695423282
- POINT 355 16.85120337097398 11.06936033777372
- POINT 356 17.88625674904034 11.05115540936097
- POINT 357 -18.30877322305379 11.9508495437846
- POINT 358 -17.29354589755249 11.94920666314173
- POINT 359 -16.29455300391288 11.99583596159888
- POINT 360 -15.27946629704285 12.01498717612042
- POINT 361 -14.25474205301729 12.02594878618006
- POINT 362 -13.22681809875847 12.03063506970706
- POINT 363 -12.20220308495755 12.03009391767082
- POINT 364 -11.18106431040382 12.03032682581759
- POINT 365 -10.15753313450907 12.03745704775757
- POINT 366 -9.134027318052762 12.04457505277963
- POINT 367 -8.11232875700758 12.05009863957686
- POINT 368 -7.093073740706956 12.05428798841279
- POINT 369 -6.075537130934441 12.0582085939917
- POINT 370 -5.05970021646697 12.06132294542906
- POINT 371 -4.045326070247903 12.06366127251691
- POINT 372 -3.032406410591747 12.06506238376489
- POINT 373 -2.020741740391878 12.06579002116175
- POINT 374 -1.010099115438543 12.06604601638048
- POINT 375 3.404314703400746e-08 12.06609631184198
- POINT 376 1.010099179329847 12.06604598427999
- POINT 377 2.02074179197248 12.06578996792154
- POINT 378 3.032406446294575 12.06506232425981
- POINT 379 4.045326095644757 12.06366121500955
- POINT 380 5.059700241198946 12.06132289396818
- POINT 381 6.075537167668678 12.05820854699794
- POINT 382 7.093073802862654 12.05428793944949
- POINT 383 8.112328856771683 12.05009857666489
- POINT 384 9.134027460561303 12.04457496575233
- POINT 385 10.15753332314846 12.03745691162176
- POINT 386 11.18106453668301 12.03032658694119
- POINT 387 12.20220329614919 12.03009354250335
- POINT 388 13.22681822001311 12.03063456472911
- POINT 389 14.25474204169832 12.02594812574046
- POINT 390 15.27946612080948 12.01498628420012
- POINT 391 16.29455261172639 11.99583469575495
- POINT 392 17.29354519100736 11.94920477604054
- POINT 393 18.30877230037898 11.95084744504889
- POINT 394 -18.68349051939805 12.86367167154098
- POINT 395 -17.69955044194535 12.83783554399056
- POINT 396 -16.74680072099509 12.90757935532751
- POINT 397 -15.76140667037218 12.9221400730053
- POINT 398 -14.75567094155959 12.92630257350449
- POINT 399 -13.73682065989795 12.92743559025777
- POINT 400 -12.71214391446095 12.92742694362712
- POINT 401 -11.68737838806575 12.92678450620815
- POINT 402 -10.66414648577376 12.92775785019992
- POINT 403 -9.640754341022918 12.93234383939904
- POINT 404 -8.618552582613498 12.93719911566106
- POINT 405 -7.598448596921033 12.94129728244754
- POINT 406 -6.580657830892998 12.94461961735053
- POINT 407 -5.564721623493883 12.94754856845896
- POINT 408 -4.550449594156615 12.94982267896038
- POINT 409 -3.537564068386769 12.95146460765515
- POINT 410 -2.525883376596742 12.95246017188719
- POINT 411 -1.515118380882561 12.95300971020892
- POINT 412 -0.5049676356087293 12.95322346487957
- POINT 413 0.5049676844956841 12.95322345397402
- POINT 414 1.515118423968893 12.95300968152577
- POINT 415 2.525883411194239 12.95246013386642
- POINT 416 3.537564097060069 12.95146456643065
- POINT 417 4.550449622545449 12.94982263848316
- POINT 418 5.56472165978088 12.9475485292704
- POINT 419 6.580657884493699 12.94461957666239
- POINT 420 7.598448677339204 12.9412972341219
- POINT 421 8.618552696870632 12.93719905370227
- POINT 422 9.640754495709061 12.93234375105686
- POINT 423 10.66414668192525 12.927757709954
- POINT 424 11.6873786049825 12.9267842939533
- POINT 425 12.7121441131643 12.92742665289655
- POINT 426 13.73682080368874 12.92743519895239
- POINT 427 14.75567099253752 12.92630202967495
- POINT 428 15.76140658474425 12.92213928078801
- POINT 429 16.74680044196923 12.90757816273018
- POINT 430 17.69954984610879 12.8378336756992
- POINT 431 18.6834899076131 12.8636700698384
- POINT 432 -19.02238328735229 13.82351766220752
- POINT 433 -18.13955550450578 13.72808332961303
- POINT 434 -17.24747413019177 13.83334150399983
- POINT 435 -16.27671854460964 13.8444824687452
- POINT 436 -15.27456079944098 13.83853174040222
- POINT 437 -14.25616310884793 13.83020331307981
- POINT 438 -13.22989658164751 13.82408308329856
- POINT 439 -12.20135161049109 13.82071634572721
- POINT 440 -11.17413867021331 13.81944883534201
- POINT 441 -10.14926702413137 13.8202526514499
- POINT 442 -9.126057836010542 13.82327629540207
- POINT 443 -8.104996732868651 13.82665424545745
- POINT 444 -7.086340525468896 13.82965017200467
- POINT 445 -6.069982091125469 13.83211598100588
- POINT 446 -5.055493375580907 13.83414727908586
- POINT 447 -4.042551432867163 13.8356365177082
- POINT 448 -3.030821469833524 13.83664074843842
- POINT 449 -2.020032225634883 13.83720573920392
- POINT 450 -1.009850751894021 13.83750425714042
- POINT 451 1.810922449496655e-08 13.83759275454394
- POINT 452 1.009850786298219 13.83750424406298
- POINT 453 2.020032256013255 13.83720571680718
- POINT 454 3.030821497136831 13.83664072069242
- POINT 455 4.042551460337563 13.83563648775698
- POINT 456 5.055493408535647 13.83414724818297
- POINT 457 6.069982136283464 13.83211594828056
- POINT 458 7.086340590263971 13.82965013439014
- POINT 459 8.10499682427386 13.82665419928439
- POINT 460 9.126057961450252 13.82327623361172
- POINT 461 10.14926718918715 13.82025256130822
- POINT 462 11.17413887129433 13.81944870576308
- POINT 463 12.20135183449013 13.82071617071633
- POINT 464 13.2298968126255 13.82408284872117
- POINT 465 14.25616332583766 13.83020298488662
- POINT 466 15.27456097333428 13.83853124901386
- POINT 467 16.27671863417596 13.84448169655714
- POINT 468 17.24747406497697 13.8333402848443
- POINT 469 18.13955510497579 13.72808140596411
- POINT 470 19.02238297028846 13.82351668571184
- POINT 471 -19.27564676568709 14.66619818849089
- POINT 472 -18.09766041208614 14.63187219093411
- POINT 473 -16.95614347083327 14.72460549592841
- POINT 474 -15.86921119998628 14.73780837074977
- POINT 475 -14.81075412562909 14.72985007775523
- POINT 476 -13.76486885106658 14.71947853532306
- POINT 477 -12.72555276796724 14.71230313005461
- POINT 478 -11.69126114605113 14.70886227379599
- POINT 479 -10.66153612521807 14.70791746350395
- POINT 480 -9.635755859587105 14.70873065251559
- POINT 481 -8.613020109485847 14.71088365791704
- POINT 482 -7.593121578733488 14.71326619553437
- POINT 483 -6.575848554049146 14.71535684285003
- POINT 484 -5.560852653819958 14.71698338764731
- POINT 485 -4.547650629124863 14.71814844465915
- POINT 486 -3.535804015609155 14.71887158153257
- POINT 487 -2.524929077240439 14.71927025322356
- POINT 488 -1.51473317861481 14.71940316393901
- POINT 489 -0.5048698269273962 14.71947361417091
- POINT 490 0.5048698535429671 14.71947360989954
- POINT 491 1.514733203827875 14.71940315211682
- POINT 492 2.524929101236818 14.7192702358374
- POINT 493 3.535804040216305 14.718871560705
- POINT 494 4.547650657766261 14.71814842161689
- POINT 495 5.560852691237506 14.71698336234047
- POINT 496 6.575848605965658 14.71535681381056
- POINT 497 7.593121651312162 14.71326616047178
- POINT 498 8.613020209763325 14.71088361248173
- POINT 499 9.635755994552092 14.70873058948735
- POINT 500 10.66153629879202 14.70791737591909
- POINT 501 11.6912613588511 14.70886215652677
- POINT 502 12.72555302053373 14.71230297372473
- POINT 503 13.76486914422805 14.71947831783373
- POINT 504 14.81075446037261 14.72984974915426
- POINT 505 15.86921157538354 14.73780783221082
- POINT 506 16.95614383875429 14.72460459306813
- POINT 507 18.09766051890814 14.63187085031223
- POINT 508 19.27564662677329 14.66619768647507
- POINT 509 -19.50127447943532 15.56149871265921
- POINT 510 -18.49586950943177 15.47325546362292
- POINT 511 -17.47213216627488 15.54874531288023
- POINT 512 -16.40580641559685 15.60593665709938
- POINT 513 -15.34601737544395 15.61677435076866
- POINT 514 -14.2947172695349 15.61000643038673
- POINT 515 -13.24977965914606 15.60136804308813
- POINT 516 -12.21061092357855 15.59603464741921
- POINT 517 -11.1766690651603 15.59374881308825
- POINT 518 -10.14751831522785 15.59340802755161
- POINT 519 -9.122560414444946 15.59426088206107
- POINT 520 -8.101062346441838 15.595824538575
- POINT 521 -7.082603470679119 15.59741857217645
- POINT 522 -6.066776863361147 15.59867868119486
- POINT 523 -5.053111971733885 15.59945020989904
- POINT 524 -4.041063833280758 15.59972861882586
- POINT 525 -3.030084669706362 15.599680671072
- POINT 526 -2.019763038193452 15.59951607389083
- POINT 527 -1.009857003554932 15.59925577449675
- POINT 528 1.024755921091858e-08 15.599193476494
- POINT 529 1.009857023845601 15.59925576915614
- POINT 530 2.019763058357887 15.59951606388146
- POINT 531 3.030084690801801 15.59968065751039
- POINT 532 4.041063857507812 15.59972860263055
- POINT 533 5.053112002382292 15.59945019127528
- POINT 534 6.066776904670986 15.59867865945828
- POINT 535 7.082603527619012 15.59741854590029
- POINT 536 8.101062424891389 15.59582450492322
- POINT 537 9.122560520746296 15.59426083642217
- POINT 538 10.14751845483047 15.59340796487829
- POINT 539 11.17666924233262 15.59374872859052
- POINT 540 12.21061114276325 15.59603453344294
- POINT 541 13.24977992549936 15.60136788386504
- POINT 542 14.29471758842084 15.61000619229367
- POINT 543 15.34601774658832 15.61677396966515
- POINT 544 16.40580680537335 15.60593604543914
- POINT 545 17.47213241791181 15.54874447015032
- POINT 546 18.4958693388047 15.47325456203676
- POINT 547 19.50127443887344 15.56149853444409
- POINT 548 -19.69120777770086 16.49909493767488
- POINT 549 -18.82453814407551 16.39668162048823
- POINT 550 -17.91856863118067 16.45118061991079
- POINT 551 -16.92410838554749 16.48124398607248
- POINT 552 -15.88164018773895 16.50096422915104
- POINT 553 -14.82887068531301 16.49821045669536
- POINT 554 -13.77807911254733 16.48886297653494
- POINT 555 -12.7333784111039 16.48193539493605
- POINT 556 -11.69485118291488 16.47821714148055
- POINT 557 -10.66193355150254 16.47685701531462
- POINT 558 -9.634017284309458 16.47687882871921
- POINT 559 -8.610421523166179 16.47761153274202
- POINT 560 -7.59043875501705 16.47862741976457
- POINT 561 -6.573526910504127 16.47948404375377
- POINT 562 -5.55916420169899 16.47991242318579
- POINT 563 -4.546789160014427 16.4797742368711
- POINT 564 -3.535766395032657 16.47908711802946
- POINT 565 -2.525390013898583 16.4782315399178
- POINT 566 -1.515222446789751 16.47755978237018
- POINT 567 -0.505160915759866 16.47693907152057
- POINT 568 0.5051609320854129 16.4769390697559
- POINT 569 1.515222463409069 16.47755977720512
- POINT 570 2.525390031591372 16.47823153173884
- POINT 571 3.535766415254718 16.47908710738646
- POINT 572 4.546789185065328 16.47977422398127
- POINT 573 5.559164234676066 16.47991240775378
- POINT 574 6.573526955235264 16.47948402492305
- POINT 575 7.590438816148497 16.47862739571796
- POINT 576 8.610421605901228 16.47761150046795
- POINT 577 9.634017393679581 16.47687878455547
- POINT 578 10.66193369197147 16.47685695525197
- POINT 579 11.6948513586376 16.47821705943312
- POINT 580 12.73337862581002 16.48193527915152
- POINT 581 13.77807936895742 16.48886280392126
- POINT 582 14.82887098061904 16.49821018706623
- POINT 583 15.88164049446434 16.50096381647671
- POINT 584 16.92410861282034 16.48124342897973
- POINT 585 17.91856863399398 16.45118006156937
- POINT 586 18.82453798513463 16.39668072056363
- POINT 587 19.69120781864528 16.4990951679711
- POINT 588 -19.82328465846074 17.34719293018973
- POINT 589 -18.68356651268673 17.31043580953861
- POINT 590 -17.56673240514328 17.36123106358058
- POINT 591 -16.47414590791442 17.37598986974012
- POINT 592 -15.39064716739153 17.37819173206542
- POINT 593 -14.32006602394481 17.37102412556857
- POINT 594 -13.2634493215721 17.36491520744474
- POINT 595 -12.21741851257929 17.36094404730209
- POINT 596 -11.17940525689727 17.35901220028596
- POINT 597 -10.14779283686373 17.35850451428117
- POINT 598 -9.121467989502685 17.35873940174785
- POINT 599 -8.09954906046551 17.35924582268215
- POINT 600 -7.081277449497645 17.35971278396684
- POINT 601 -6.066028455702323 17.35983944191427
- POINT 602 -5.053197717776997 17.35940141983762
- POINT 603 -4.042124698542789 17.35824695931711
- POINT 604 -3.032009115389205 17.3564023422576
- POINT 605 -2.021821824817601 17.35459015065573
- POINT 606 -1.011040264187739 17.35340280443575
- POINT 607 6.814640345076395e-09 17.35243938843107
- POINT 608 1.011040278028748 17.35340280223508
- POINT 609 2.021821839659843 17.35459014619961
- POINT 610 3.032009132287029 17.35640233585637
- POINT 611 4.042124719169761 17.35824695109229
- POINT 612 5.053197744437713 17.35940140968951
- POINT 613 6.066028491348846 17.35983942938084
- POINT 614 7.081277497793296 17.35971276796347
- POINT 615 8.099549125655424 17.35924580133723
- POINT 616 9.121468076013995 17.3587393726077
- POINT 617 10.14779294895601 17.35850447445268
- POINT 618 11.17940539853177 17.3590121455207
- POINT 619 12.21741868699975 17.36094396965026
- POINT 620 13.26344953055692 17.36491509096027
- POINT 621 14.32006626614396 17.37102394370543
- POINT 622 15.39064742969177 17.37819145776436
- POINT 623 16.47414614962407 17.37598951033426
- POINT 624 17.56673257253595 17.36123068035427
- POINT 625 18.68356665984462 17.31043516903573
- POINT 626 19.82328469438627 17.3471931986458
- POINT 627 -19.92361530225037 18.25370297831815
- POINT 628 -19.07203628626812 18.19876552320404
- POINT 629 -18.09128424245282 18.22378292531755
- POINT 630 -17.02794564635327 18.24352791034031
- POINT 631 -15.94398258752478 18.24421394845224
- POINT 632 -14.86112859360125 18.24245684590457
- POINT 633 -13.79465161119509 18.24206223663435
- POINT 634 -12.74159853322912 18.24073858102732
- POINT 635 -11.698529613906 18.23959715961889
- POINT 636 -10.66316644369302 18.23915626546558
- POINT 637 -9.633977641977911 18.2392237253931
- POINT 638 -8.609886644138397 18.23947670834334
- POINT 639 -7.590062391072585 18.23966317253559
- POINT 640 -6.573799873479021 18.2395756905061
- POINT 641 -5.560467629070432 18.23897213290731
- POINT 642 -4.549395686991836 18.2375962202419
- POINT 643 -3.53974763298982 18.23518325778423
- POINT 644 -2.530321009293305 18.23165172954483
- POINT 645 -1.519299961772805 18.22830303022641
- POINT 646 -0.5061568241133134 18.22651105869159
- POINT 647 0.5061568361746052 18.22651105818931
- POINT 648 1.519299974627625 18.2283030281956
- POINT 649 2.530321023719614 18.23165172623696
- POINT 650 3.539747650302188 18.23518325320082
- POINT 651 4.549395708977971 18.23759621436859
- POINT 652 5.560467658068336 18.23897212554887
- POINT 653 6.573799912439206 18.23957568110988
- POINT 654 7.590062443504756 18.23966316006795
- POINT 655 8.609886713904036 18.23947669135741
- POINT 656 9.633977733038876 18.23922370211182
- POINT 657 10.66316655986387 18.23915623336316
- POINT 658 11.69852975826159 18.23959711417069
- POINT 659 12.74159870680618 18.24073851295247
- POINT 660 13.79465181041776 18.24206212883075
- POINT 661 14.86112880502805 18.24245668253721
- POINT 662 15.94398277539668 18.24421374106404
- POINT 663 17.02794575643996 18.24352769585881
- POINT 664 18.09128426867969 18.22378260511285
- POINT 665 19.07203607838779 18.19876510589028
- POINT 666 19.92361533574309 18.25370336043873
- POINT 667 -19.9802449810712 19.11128711446231
- POINT 668 -18.80619197016033 19.09425379941037
- POINT 669 -17.66225403113433 19.09510203515607
- POINT 670 -16.52583190669753 19.09866237624121
- POINT 671 -15.41432354959155 19.0986301021614
- POINT 672 -14.33063667844831 19.1105065301146
- POINT 673 -13.26794614671815 19.11638402180332
- POINT 674 -12.21904679432654 19.11829199267038
- POINT 675 -11.17975304147024 19.11894075428319
- POINT 676 -10.14765766280284 19.11928688527702
- POINT 677 -9.121321606407902 19.1195239082655
- POINT 678 -8.099811768765214 19.11961774535636
- POINT 679 -7.082440474765014 19.11946501955149
- POINT 680 -6.068617555176951 19.11889174400767
- POINT 681 -5.057733760576324 19.11759686938207
- POINT 682 -4.048951495282913 19.11510440717879
- POINT 683 -3.040860967573059 19.11069978972926
- POINT 684 -2.031062116367802 19.10382972217813
- POINT 685 -1.01638199358576 19.09746934675944
- POINT 686 5.469910147222479e-09 19.09799582548251
- POINT 687 1.016382005544462 19.09746934612121
- POINT 688 2.031062129425211 19.10382972109414
- POINT 689 3.040860982727736 19.11069978795467
- POINT 690 4.048951514001514 19.1151044047146
- POINT 691 5.057733784810108 19.11759686619456
- POINT 692 6.06861758741177 19.11889173991558
- POINT 693 7.082440518000469 19.11946501414825
- POINT 694 8.099811826393989 19.11961773801307
- POINT 695 9.121321682045322 19.11952389818466
- POINT 696 10.14765776004377 19.11928687136565
- POINT 697 11.1797531633058 19.11894073468605
- POINT 698 12.21904694182174 19.11829196363125
- POINT 699 13.26794631623689 19.11638397571452
- POINT 700 14.33063685706478 19.11050645765263
- POINT 701 15.41432371433398 19.09863001492938
- POINT 702 16.52583203632977 19.09866230844884
- POINT 703 17.6622541458637 19.09510191838969
- POINT 704 18.80619204599507 19.09425361367645
- POINT 705 19.9802449892912 19.11128730390016
- POINT 706 -19.18788556876717 20.00005139493198
- POINT 707 -18.23752403849579 19.99984302247159
- POINT 708 -17.29064226017514 19.99925376166535
- POINT 709 -16.47440002277868 20.00254940092639
- POINT 710 -15.69589026095225 19.99922347246529
- POINT 711 -14.75829776969549 19.99999149402495
- POINT 712 -13.75224907606844 20.00002238976034
- POINT 713 -12.72358628344629 20.00001314522074
- POINT 714 -11.69063170189132 20.00000296247429
- POINT 715 -10.65968425579931 19.99999907815186
- POINT 716 -9.632679418332129 19.99999847573628
- POINT 717 -8.610092788959356 19.9999987802438
- POINT 718 -7.592007815489902 19.99999919201484
- POINT 719 -6.578584325048967 19.99999952078446
- POINT 720 -5.570430449173512 19.99999973968279
- POINT 721 -4.569141973011657 19.99999986982209
- POINT 722 -3.578262228261103 19.99999994088966
- POINT 723 -2.605187956284842 19.99999997690123
- POINT 724 -1.66466516281073 19.99999999380757
- POINT 725 -0.7826655107941599 20.0000000016338
- POINT 726 0.7826655154907771 20.00000000163381
- POINT 727 1.664665170888243 19.99999999380764
- POINT 728 2.605187967544461 19.99999997690146
- POINT 729 3.578262243238 19.99999994089031
- POINT 730 4.569141992985899 19.9999998698238
- POINT 731 5.570430476094784 19.99999973968696
- POINT 732 6.578584361468833 19.999999520794
- POINT 733 7.592007864442903 19.99999919203552
- POINT 734 8.610092853801689 19.99999878028637
- POINT 735 9.632679502529101 19.99999847581969
- POINT 736 10.6596843624034 19.99999907830713
- POINT 737 11.69063183223476 20.00000296274612
- POINT 738 12.72358643409481 20.00001314569264
- POINT 739 13.75224923254777 20.00002239071156
- POINT 740 14.75829790050601 19.99999149614534
- POINT 741 15.69589033419841 19.99922348070548
- POINT 742 16.47440003681302 20.0025493901109
- POINT 743 17.29064231060998 19.99925377353345
- POINT 744 18.23752405131307 19.99984302941273
- POINT 745 19.18788543351031 20.00005138833587
- POINT 746 -19.98023779283576 20.88887437456774
- POINT 747 -18.80580843557483 20.90547874653299
- POINT 748 -17.66161201461446 20.90415650737443
- POINT 749 -16.52591330812703 20.90273438014319
- POINT 750 -15.41490978144221 20.90067949213849
- POINT 751 -14.33087263381866 20.8894508385836
- POINT 752 -13.26804240623713 20.88362475434566
- POINT 753 -12.21908307283113 20.88171102490173
- POINT 754 -11.1797653194024 20.88105596204579
- POINT 755 -10.14766089752007 20.88070896143329
- POINT 756 -9.121321787680523 20.8804729634606
- POINT 757 -8.099811171529218 20.88038023214702
- POINT 758 -7.082439863957721 20.88053378104001
- POINT 759 -6.068617118328885 20.88110759648338
- POINT 760 -5.057733492537352 20.88240279408681
- POINT 761 -4.048951345696993 20.88489543523155
- POINT 762 -3.040860889905527 20.88930014517067
- POINT 763 -2.031062079165233 20.89617025723036
- POINT 764 -1.016381979500983 20.90253065295888
- POINT 765 5.469943456515303e-09 20.90200417751546
- POINT 766 1.016381991459812 20.90253065359715
- POINT 767 2.03106209222298 20.89617025831457
- POINT 768 3.040860905061069 20.88930014694594
- POINT 769 4.048951364417659 20.88489543769765
- POINT 770 5.057733516775839 20.8824027972792
- POINT 771 6.06861715057387 20.88110760058708
- POINT 772 7.082439907213993 20.88053378646916
- POINT 773 8.099811229198181 20.8803802395451
- POINT 774 9.121321863390992 20.88047297365156
- POINT 775 10.14766099488602 20.88070897555551
- POINT 776 11.17976544143952 20.88105598202432
- POINT 777 12.21908322063199 20.88171105459812
- POINT 778 13.26804257619063 20.88362480166985
- POINT 779 14.33087281298531 20.88945091392941
- POINT 780 15.41490994607966 20.90067958866326
- POINT 781 16.52591344201236 20.90273444864004
- POINT 782 17.66161214257477 20.90415664260873
- POINT 783 18.80580852434392 20.90547893935344
- POINT 784 19.98023780197282 20.88887416458981
- POINT 785 -19.92358828250518 21.74660526428339
- POINT 786 -19.07217434439901 21.80073889981208
- POINT 787 -18.09112945874565 21.77562907330344
- POINT 788 -17.02812405581322 21.75701137151901
- POINT 789 -15.94366066593676 21.75622850710521
- POINT 790 -14.86126409690214 21.75722234436677
- POINT 791 -13.79471434661022 21.75787709872358
- POINT 792 -12.74162038561464 21.75924454538805
- POINT 793 -11.69853414597164 21.7603937981996
- POINT 794 -10.66316512661045 21.76083746123114
- POINT 795 -9.633974994254842 21.76077236820268
- POINT 796 -8.609884257109169 21.76052103489894
- POINT 797 -7.590060667734138 21.76033556874065
- POINT 798 -6.573798770236956 21.76042363684251
- POINT 799 -5.560466980079595 21.76102752854904
- POINT 800 -4.549395330869891 21.76240362299502
- POINT 801 -3.53974744971968 21.76481667916055
- POINT 802 -2.5303209212877 21.76834825283947
- POINT 803 -1.519299924135361 21.77169697292803
- POINT 804 -0.5061568134041036 21.7734889506532
- POINT 805 0.5061568254655004 21.77348895115548
- POINT 806 1.519299936990494 21.77169697495886
- POINT 807 2.530320935714927 21.76834825614754
- POINT 808 3.539747467034398 21.76481668374473
- POINT 809 4.549395352861634 21.76240362887052
- POINT 810 5.560467009090089 21.76102753591302
- POINT 811 6.573798809223865 21.76042364625162
- POINT 812 7.590060720219843 21.76033558123638
- POINT 813 8.609884326976061 21.76052105194263
- POINT 814 9.633975085497147 21.76077239159665
- POINT 815 10.66316524309085 21.76083749354136
- POINT 816 11.69853429083621 21.7603938440048
- POINT 817 12.74162056001178 21.75924461407503
- POINT 818 13.79471454718983 21.75787720786278
- POINT 819 14.86126431068448 21.75722251199929
- POINT 820 15.94366086082416 21.756228717586
- POINT 821 17.02812417119083 21.75701159238045
- POINT 822 18.09112949141926 21.77562941392504
- POINT 823 19.07217412140869 21.80073933755012
- POINT 824 19.92358831980405 21.74660483881377
- POINT 825 -19.823263456196 22.65296550038718
- POINT 826 -18.68347167777789 22.6889724670474
- POINT 827 -17.5669100312704 22.63883478838346
- POINT 828 -16.47409263224828 22.6242054542872
- POINT 829 -15.3904367336017 22.62202395225419
- POINT 830 -14.32006894483515 22.62885094013076
- POINT 831 -13.26345062953686 22.63505078113978
- POINT 832 -12.21741436155782 22.63904422561734
- POINT 833 -11.17939965412427 22.64098178723362
- POINT 834 -10.14778782482358 22.64149205572087
- POINT 835 -9.121464141616515 22.64125877788618
- POINT 836 -8.099546383139796 22.64075324216461
- POINT 837 -7.081275727631735 22.64028674537108
- POINT 838 -6.066027421514116 22.64016033445862
- POINT 839 -5.053197134698077 22.64059848599732
- POINT 840 -4.042124389521369 22.64175301143073
- POINT 841 -3.032008961880832 22.64359765889142
- POINT 842 -2.021821754586955 22.64540986356159
- POINT 843 -1.011040237264479 22.64659721372332
- POINT 844 6.814665224480487e-09 22.6475606308115
- POINT 845 1.011040251105664 22.64659721592393
- POINT 846 2.021821769429846 22.64540986801763
- POINT 847 3.032008978780493 22.6435976652927
- POINT 848 4.042124410152931 22.64175301965603
- POINT 849 5.053197161369463 22.64059849614706
- POINT 850 6.066027457183961 22.64016034699624
- POINT 851 7.081275775975558 22.6402867613839
- POINT 852 8.099546448423908 22.64075326352899
- POINT 853 9.121464228302864 22.64125880706316
- POINT 854 10.14778793722731 22.64149209561295
- POINT 855 11.17939979629603 22.64098184209338
- POINT 856 12.21741453689023 22.6390443033786
- POINT 857 13.26345084008729 22.63505089777322
- POINT 858 14.32006918987354 22.62885112279828
- POINT 859 15.39043700219516 22.62202422695843
- POINT 860 16.47409288234377 22.62420581860266
- POINT 861 17.56691020844972 22.63883518337205
- POINT 862 18.68347184009588 22.68897314250563
- POINT 863 19.82326349779923 22.652965189523
- POINT 864 -19.69117813060965 23.501071811403
- POINT 865 -18.8246775584696 23.60270488921595
- POINT 866 -17.91872317447207 23.54877686754418
- POINT 867 -16.92421077812897 23.51878118738913
- POINT 868 -15.88162933414794 23.49913833184728
- POINT 869 -14.82876942700178 23.5019021870122
- POINT 870 -13.77806312245109 23.51109818218014
- POINT 871 -12.7333690497193 23.51805365247506
- POINT 872 -11.69484326979592 23.5217794620292
- POINT 873 -10.661927166753 23.52314139532949
- POINT 874 -9.634012473512842 23.52312044026287
- POINT 875 -8.610418120559023 23.52238820743955
- POINT 876 -7.590436502923668 23.52137251796749
- POINT 877 -6.573525514872875 23.52051596810155
- POINT 878 -5.559163390593181 23.52008761426355
- POINT 879 -4.54678871790041 23.52022580633416
- POINT 880 -3.535766169521851 23.52091292302367
- POINT 881 -2.525389907129223 23.5217684966976
- POINT 882 -1.515222401501546 23.52244024975234
- POINT 883 -0.505160903546754 23.52306095823609
- POINT 884 0.5051609198722887 23.52306096000069
- POINT 885 1.515222418121158 23.52244025491717
- POINT 886 2.525389924823131 23.52176850487623
- POINT 887 3.535766189747005 23.52091293366626
- POINT 888 4.546788742958842 23.52022581922355
- POINT 889 5.559163423587246 23.52008762969507
- POINT 890 6.573525559639977 23.52051598693144
- POINT 891 7.590436564126859 23.52137254201168
- POINT 892 8.610418203429177 23.52238823970576
- POINT 893 9.634012583123939 23.5231204844028
- POINT 894 10.66192730763136 23.52314145532485
- POINT 895 11.69484344618557 23.52177954389795
- POINT 896 12.73336926547453 23.51805376783202
- POINT 897 13.77806338049386 23.51109835404176
- POINT 898 14.82876972514016 23.50190245509659
- POINT 899 15.88162964366185 23.49913874577929
- POINT 900 16.92421100623148 23.5187817528495
- POINT 901 17.9187231720003 23.54877744101314
- POINT 902 18.82467738720799 23.60270583207815
- POINT 903 19.69117818073977 23.50107152945477
- POINT 904 -19.50128258193048 24.4384656875654
- POINT 905 -18.49603377721733 24.52645328847083
- POINT 906 -17.47222047478762 24.45122954140129
- POINT 907 -16.40586225838657 24.39407159976292
- POINT 908 -15.34601775579845 24.38327897298187
- POINT 909 -14.29467265709022 24.390055636783
- POINT 910 -13.24976676348197 24.39862650284665
- POINT 911 -12.21060209619167 24.40396573526314
- POINT 912 -11.17666203331493 24.40625240812431
- POINT 913 -10.14751294202745 24.40659288968487
- POINT 914 -9.122556531432314 24.40573982553234
- POINT 915 -8.101059706484772 24.40417598818402
- POINT 916 -7.082601789515715 24.40258179050725
- POINT 917 -6.066775861079858 24.401321559102
- POINT 918 -5.053111412995462 24.40054994850132
- POINT 919 -4.041063542992159 24.40027148711376
- POINT 920 -3.030084530115851 24.40031940219774
- POINT 921 -2.019762977092939 24.40048397969316
- POINT 922 -1.009856981565384 24.40074426873068
- POINT 923 1.024744895883334e-08 24.40080656348254
- POINT 924 1.009857001855979 24.40074427407103
- POINT 925 2.019762997257817 24.40048398970201
- POINT 926 3.030084551212998 24.40031941575852
- POINT 927 4.041063567223794 24.40027150330772
- POINT 928 5.053111443654583 24.40054996712262
- POINT 929 6.066775902412783 24.40132158083352
- POINT 930 7.082601846501917 24.40258181677218
- POINT 931 8.101059785020986 24.40417602181029
- POINT 932 9.122556637884827 24.40573987111417
- POINT 933 10.14751308187546 24.40659295223369
- POINT 934 11.17666221085666 24.40625249235723
- POINT 935 12.21060231588698 24.40396584869259
- POINT 936 13.24976703047505 24.39862666102139
- POINT 937 14.29467297678669 24.39005587293844
- POINT 938 15.34601812724821 24.38327935339093
- POINT 939 16.40586264749961 24.39407221667886
- POINT 940 17.47222072302032 24.45123039885839
- POINT 941 18.49603359613996 24.52645421647772
- POINT 942 19.50128254843763 24.438465834723
- POINT 943 -19.27566297736843 25.33374322431333
- POINT 944 -18.09775178956348 25.36799483110871
- POINT 945 -16.95620348221256 25.27537035025225
- POINT 946 -15.86925210584145 25.2621959819831
- POINT 947 -14.81076315314948 25.27017923896646
- POINT 948 -13.76485149074431 25.28055642554051
- POINT 949 -12.72554494747265 25.2877018915422
- POINT 950 -11.69125466472678 25.29114191583416
- POINT 951 -10.66153084238642 25.29208544028669
- POINT 952 -9.635751893753024 25.29127123899427
- POINT 953 -8.613017330938026 25.28911759029576
- POINT 954 -7.593119760102007 25.28673460993404
- POINT 955 -6.575847443318799 25.28464366208886
- POINT 956 -5.56085202263591 25.28301692601594
- POINT 957 -4.547650297377339 25.28185175153692
- POINT 958 -3.535803856092467 25.28112854408795
- POINT 959 -2.524929008354851 25.28072983104776
- POINT 960 -1.514733152989468 25.28059689769103
- POINT 961 -0.5048698207562641 25.28052643741724
- POINT 962 0.5048698473713688 25.28052644168841
- POINT 963 1.51473317820234 25.28059690951267
- POINT 964 2.524929032351727 25.28072984843296
- POINT 965 3.535803880701605 25.28112856491395
- POINT 966 4.54765032602379 25.28185177457648
- POINT 967 5.560852060064414 25.28301695131759
- POINT 968 6.575847495256659 25.28464369111745
- POINT 969 7.593119832718212 25.28673464497304
- POINT 970 8.613017431274047 25.28911763568033
- POINT 971 9.635752028795475 25.29127130191628
- POINT 972 10.66153101603581 25.29208552765603
- POINT 973 11.6912548775394 25.29114203268002
- POINT 974 12.72554519985952 25.28770204706892
- POINT 975 13.76485178333624 25.28055664153414
- POINT 976 14.81076348639632 25.27017956625211
- POINT 977 15.86925247881834 25.26219652228766
- POINT 978 16.95620384751598 25.27537126258778
- POINT 979 18.09775189289379 25.36799618984021
- POINT 980 19.27566284513804 25.33374370218195
- POINT 981 -19.02239954985974 26.17643225215792
- POINT 982 -18.13957375669325 26.27182967555013
- POINT 983 -17.24752991244937 26.16660408857279
- POINT 984 -16.27676195998304 26.15550609242113
- POINT 985 -15.27459027941854 26.16147153179269
- POINT 986 -14.25617297779009 26.16981316221108
- POINT 987 -13.2298905244963 26.17593671197166
- POINT 988 -12.20134707994185 26.17929019701242
- POINT 989 -11.17413433418612 26.18055581832264
- POINT 990 -10.14926347567323 26.17975046130899
- POINT 991 -9.126055233191323 26.1767257214049
- POINT 992 -8.104994973232515 26.17334704655403
- POINT 993 -7.086339423772932 26.17035063568784
- POINT 994 -6.069981455507479 26.16788451762503
- POINT 995 -5.055493041319419 26.16585302924196
- POINT 996 -4.042551276201685 26.16436367569299
- POINT 997 -3.030821407389114 26.16335937686056
- POINT 998 -2.020032206493706 26.16279434727297
- POINT 999 -1.009850748200918 26.16249580956691
- POINT 1000 1.810878547461869e-08 26.16240730616165
- POINT 1001 1.009850782604362 26.16249582264381
- POINT 1002 2.020032236871754 26.1627943696687
- POINT 1003 3.030821434692971 26.163359404605
- POINT 1004 4.04255130367432 26.16436370564181
- POINT 1005 5.055493074279512 26.16585306014084
- POINT 1006 6.069981500676009 26.16788455034281
- POINT 1007 7.086339488585687 26.17035067328725
- POINT 1008 8.104995064661678 26.17334709269614
- POINT 1009 9.126055358650662 26.17672578313303
- POINT 1010 10.14926364070988 26.17975055132968
- POINT 1011 11.17413453512518 26.18055594767594
- POINT 1012 12.20134730349981 26.17929037161421
- POINT 1013 13.22989075441856 26.17593694579172
- POINT 1014 14.25617319248297 26.1698134895775
- POINT 1015 15.27459044923737 26.16147202351487
- POINT 1016 16.27676204411003 26.15550686826468
- POINT 1017 17.24752984252422 26.16660531696369
- POINT 1018 18.13957335417382 26.27183161770785
- POINT 1019 19.02239923981158 26.17643320705552
- POINT 1020 -18.68351052659932 27.13627594775126
- POINT 1021 -17.69958032840385 27.16211878258065
- POINT 1022 -16.74683156791625 27.09239213947461
- POINT 1023 -15.76142860035137 27.07785332363176
- POINT 1024 -14.75568523901815 27.07369952580982
- POINT 1025 -13.73682530497883 27.07257389333525
- POINT 1026 -12.71214081282853 27.07258462878146
- POINT 1027 -11.68737540619582 27.07322119480453
- POINT 1028 -10.66414374485063 27.07224624332165
- POINT 1029 -9.640752201106791 27.06765889268107
- POINT 1030 -8.618551085348614 27.06280265021007
- POINT 1031 -7.598447638413528 27.0587038340893
- POINT 1032 -6.580657275128921 27.05538108021106
- POINT 1033 -5.564721338620957 27.05245186732603
- POINT 1034 -4.55044947250108 27.05017759593697
- POINT 1035 -3.537564033075582 27.04853556963036
- POINT 1036 -2.525883378397752 27.04753994742007
- POINT 1037 -1.515118391171542 27.04699037668727
- POINT 1038 -0.5049676403738673 27.04677660797433
- POINT 1039 0.5049676892594587 27.04677661887949
- POINT 1040 1.515118434256783 27.04699040536934
- POINT 1041 2.525883412994776 27.04753998543922
- POINT 1042 3.537564061749419 27.04853561085263
- POINT 1043 4.550449500892171 27.05017763641098
- POINT 1044 5.564721374913006 27.05245190650947
- POINT 1045 6.580657328738541 27.0553811208901
- POINT 1046 7.598447718844161 27.05870388239782
- POINT 1047 8.618551199616206 27.0628027121368
- POINT 1048 9.640752355782366 27.06765898096566
- POINT 1049 10.66414394092225 27.07224638347101
- POINT 1050 11.6873756228595 27.07322140691138
- POINT 1051 12.71214101090778 27.07258491927569
- POINT 1052 13.7368254473805 27.07257428445428
- POINT 1053 14.75568528734847 27.07370007007758
- POINT 1054 15.76142851055736 27.07785411803665
- POINT 1055 16.74683128376763 27.09239333698052
- POINT 1056 17.6995797272013 27.16212066124442
- POINT 1057 18.68350991969133 27.13627753669932
- POINT 1058 -18.3087899994487 28.0491122961534
- POINT 1059 -17.29356305303868 28.05076474633064
- POINT 1060 -16.29456855134103 28.00414807613013
- POINT 1061 -15.27947676947299 27.98500923824287
- POINT 1062 -14.25474850756761 27.97405313016844
- POINT 1063 -13.22681991964508 27.96937104967781
- POINT 1064 -12.20220140205727 27.96991345424442
- POINT 1065 -11.18106269960114 27.96967783441059
- POINT 1066 -10.1575317295533 27.96254624095482
- POINT 1067 -9.134026282902123 27.9554271272794
- POINT 1068 -8.11232808124951 27.94990275991905
- POINT 1069 -7.093073357937705 27.94571290375888
- POINT 1070 -6.075536956332379 27.94179197610055
- POINT 1071 -5.059700169738454 27.9386774220445
- POINT 1072 -4.045326088931555 27.93633896816423
- POINT 1073 -3.03240645241726 27.93493777823327
- POINT 1074 -2.020741779449279 27.93421009321045
- POINT 1075 -1.010099138076054 27.93395407311486
- POINT 1076 3.404211895013942e-08 27.93390377024507
- POINT 1077 1.010099201965424 27.93395410521433
- POINT 1078 2.020741831028424 27.93421014644879
- POINT 1079 3.032406488119535 27.93493783773603
- POINT 1080 4.045326114328983 27.93633902566877
- POINT 1081 5.059700194472554 27.93867747350166
- POINT 1082 6.075536993070713 27.94179202308874
- POINT 1083 7.09307342009923 27.94571295271277
- POINT 1084 8.112328181018478 27.94990282281439
- POINT 1085 9.134026425405688 27.95542721427844
- POINT 1086 10.15753191815605 27.96254637704741
- POINT 1087 11.18106292576653 27.96967807323303
- POINT 1088 12.2022016129779 27.96991382936287
- POINT 1089 13.22682004031123 27.9693715547119
- POINT 1090 14.25474849512003 27.97405379109089
- POINT 1091 15.27947659137026 27.98501013174536
- POINT 1092 16.29456815670813 28.00414934511754
- POINT 1093 17.29356234408891 28.05076663883557
- POINT 1094 18.30878908050798 28.04911438640772
- POINT 1095 -17.88627195115217 28.94881420577205
- POINT 1096 -16.85121623860757 28.93061933343462
- POINT 1097 -15.81833314037684 28.89375235827191
- POINT 1098 -14.77937167335351 28.87328385036637
- POINT 1099 -13.74209446540223 28.86499338776666
- POINT 1100 -12.71605582999688 28.86919825138711
- POINT 1101 -11.69940001494518 28.87340789918018
- POINT 1102 -10.67625922348492 28.86226791658786
- POINT 1103 -9.65132961605895 28.851595071435
- POINT 1104 -8.627923539340028 28.8441361901345
- POINT 1105 -7.607383097319782 28.83914218931285
- POINT 1106 -6.588183876610444 28.834021579554
- POINT 1107 -5.570592938796751 28.82993786493235
- POINT 1108 -4.554348259497055 28.82674994031302
- POINT 1109 -3.539757274765657 28.82494387416716
- POINT 1110 -2.526758864903647 28.82415777580468
- POINT 1111 -1.515331685041841 28.82413311065559
- POINT 1112 -0.5049906739901562 28.82425189305842
- POINT 1113 0.5049907645346323 28.82425191727151
- POINT 1114 1.515331766070061 28.82413317752096
- POINT 1115 2.526758922906133 28.82415786552549
- POINT 1116 3.539757303964481 28.82494396199095
- POINT 1117 4.554348271221096 28.82675001632507
- POINT 1118 5.5705929498453 28.82993792637928
- POINT 1119 6.588183907369825 28.83402163235582
- POINT 1120 7.607383167361471 28.83914224659848
- POINT 1121 8.627923663583609 28.84413627571221
- POINT 1122 9.651329791428106 28.85159520324159
- POINT 1123 10.67625944341114 28.86226814518679
- POINT 1124 11.69940025142002 28.87340833491707
- POINT 1125 12.71605597388189 28.86919892986707
- POINT 1126 13.74209440347107 28.86499424204478
- POINT 1127 14.77937139138959 28.87328490937882
- POINT 1128 15.81833261547568 28.89375376208559
- POINT 1129 16.85121538818617 28.93062131895283
- POINT 1130 17.88627066804774 28.94881677035237
- POINT 1131 -17.41542967730917 29.83375864838565
- POINT 1132 -16.36598381746591 29.79324716653365
- POINT 1133 -15.30571123700743 29.76326236085124
- POINT 1134 -14.25334486558897 29.75293926663301
- POINT 1135 -13.22518619984562 29.7683098214614
- POINT 1136 -12.21928477595643 29.78625116079143
- POINT 1137 -11.19741514236947 29.76826012438021
- POINT 1138 -10.17050471136325 29.75174492628818
- POINT 1139 -9.145044524339205 29.74157318849883
- POINT 1140 -8.1237506134133 29.73611400010283
- POINT 1141 -7.102985757155311 29.72937235399485
- POINT 1142 -6.083575327030116 29.72406116587013
- POINT 1143 -5.065015794708289 29.71965157618854
- POINT 1144 -4.048200344643696 29.7173430556003
- POINT 1145 -3.033238232867113 29.71657292251867
- POINT 1146 -2.020549058249011 29.71719659405831
- POINT 1147 -1.009738878373672 29.71805565528834
- POINT 1148 5.919503985596375e-08 29.71837020929849
- POINT 1149 1.009738994992378 29.71805571880686
- POINT 1150 2.020549158880593 29.71719671483972
- POINT 1151 3.033238290617864 29.71657306631699
- POINT 1152 4.048200349715117 29.71734318068954
- POINT 1153 5.065015770760248 29.7196516721558
- POINT 1154 6.083575305003133 29.72406123347293
- POINT 1155 7.102985771361372 29.72937240771407
- POINT 1156 8.123750692148713 29.73611406625849
- POINT 1157 9.145044681942796 29.74157331659041
- POINT 1158 10.17050491805136 29.75174514843446
- POINT 1159 11.19741536641047 29.76826054031946
- POINT 1160 12.2192849573198 29.78625198231071
- POINT 1161 13.22518614531627 29.76831101236639
- POINT 1162 14.25334445158184 29.75294061103708
- POINT 1163 15.30571051603222 29.76326396462168
- POINT 1164 16.36598278510637 29.79324928955189
- POINT 1165 17.41542794295087 29.83376171990615
- POINT 1166 -16.89880493119268 30.69721421200391
- POINT 1167 -15.84084671744584 30.63188582080215
- POINT 1168 -14.75937079783184 30.62356117741139
- POINT 1169 -13.72667803874304 30.6613328279952
- POINT 1170 -12.74588714172752 30.71371027983801
- POINT 1171 -11.72514438910883 30.68212290710705
- POINT 1172 -10.69307402425253 30.65563776551792
- POINT 1173 -9.663653547397562 30.64189426397848
- POINT 1174 -8.642458727492786 30.63734439158867
- POINT 1175 -7.620362459906692 30.62824675701598
- POINT 1176 -6.599325061244341 30.62130216573695
- POINT 1177 -5.577936826951563 30.6148672434393
- POINT 1178 -4.558211164728247 30.61175248302345
- POINT 1179 -3.540362154667188 30.61087880095583
- POINT 1180 -2.525662571249494 30.61262583895858
- POINT 1181 -1.513887280056144 30.61507416610434
- POINT 1182 -0.5042972278699956 30.61670205839328
- POINT 1183 0.5042973737465498 30.61670209443389
- POINT 1184 1.513887429060817 30.61507428789713
- POINT 1185 2.525662692669032 30.61262604572162
- POINT 1186 3.54036219335181 30.61087902796626
- POINT 1187 4.558211107788653 30.61175265802142
- POINT 1188 5.577936725817437 30.61486735811178
- POINT 1189 6.599324974859706 30.62130222879121
- POINT 1190 7.620362447487361 30.62824680085264
- POINT 1191 8.642458825941324 30.63734447157217
- POINT 1192 9.663653754394943 30.64189448764897
- POINT 1193 10.69307423735651 30.65563818384975
- POINT 1194 11.72514453379872 30.68212369692436
- POINT 1195 12.74588713706405 30.71371180853617
- POINT 1196 13.72667758015037 30.66133475353996
- POINT 1197 14.75936981763983 30.62356312399664
- POINT 1198 15.84084548444188 30.63188806768807
- POINT 1199 16.89880261226452 30.69721787530422
- POINT 1200 -16.34009128149359 31.53262402545307
- POINT 1201 -15.28568336821521 31.44708435232277
- POINT 1202 -14.2209000727431 31.53141889752363
- POINT 1203 -13.2977569951397 31.66679256172576
- POINT 1204 -12.27301009857187 31.6040005347632
- POINT 1205 -11.22445310392184 31.55974332082998
- POINT 1206 -10.18420406298538 31.54252893027452
- POINT 1207 -9.163915367393241 31.5436687933713
- POINT 1208 -8.140599406135669 31.53125016600776
- POINT 1209 -7.118690682844557 31.52230190448825
- POINT 1210 -6.093912293860901 31.51225498074955
- POINT 1211 -5.07053781765046 31.50770300997673
- POINT 1212 -4.04849776527412 31.50615467955022
- POINT 1213 -3.030710538587649 31.50945833368958
- POINT 1214 -2.017113296966526 31.51446605862232
- POINT 1215 -1.007152972521004 31.5188773687048
- POINT 1216 8.069955546863294e-08 31.52094595365134
- POINT 1217 1.007153147259242 31.51887744675579
- POINT 1218 2.017113486527146 31.51446627236329
- POINT 1219 3.030710673050414 31.50945868636081
- POINT 1220 4.048497739728965 31.5061550381337
- POINT 1221 5.070537627085144 31.50770325017226
- POINT 1222 6.093912047408612 31.51225510381275
- POINT 1223 7.118690492026126 31.52230193550043
- POINT 1224 8.140599370382356 31.53125017994062
- POINT 1225 9.163915512128149 31.54366891796288
- POINT 1226 10.18420431641738 31.5425293949968
- POINT 1227 11.22445321142737 31.55974415861684
- POINT 1228 12.27300998503818 31.60400199599792
- POINT 1229 13.29775665030186 31.66679525624402
- POINT 1230 14.22089893057988 31.53142164267454
- POINT 1231 15.28568200198485 31.44708667752904
- POINT 1232 16.34008819047632 31.53262840498486
- POINT 1233 -15.74070991046201 32.33815429935463
- POINT 1234 -14.74688528329741 32.29702825850423
- POINT 1235 -13.93190385661229 32.65477363083443
- POINT 1236 -12.86506936822592 32.52891304941449
- POINT 1237 -11.77212159391218 32.45232300476276
- POINT 1238 -10.70587315849742 32.4347153350411
- POINT 1239 -9.687662057866612 32.45538673008075
- POINT 1240 -8.662564266803992 32.43904962117873
- POINT 1241 -7.6420354397583 32.42864000943801
- POINT 1242 -6.613519518949163 32.41191777411576
- POINT 1243 -5.586073763699214 32.40488779735104
- POINT 1244 -4.558141198059786 32.40119064612167
- POINT 1245 -3.535940044697491 32.40633890872039
- POINT 1246 -2.519295876494282 32.41479259504359
- POINT 1247 -1.507828324987365 32.42353533511525
- POINT 1248 -0.5019149230875003 32.43049565557803
- POINT 1249 0.5019150823275319 32.43049567799903
- POINT 1250 1.507828527783088 32.42353546677084
- POINT 1251 2.519296107078045 32.41479297153293
- POINT 1252 3.535940160588894 32.40633951541907
- POINT 1253 4.558141018794441 32.40119120765029
- POINT 1254 5.58607332108212 32.40488811417254
- POINT 1255 6.613519029401044 32.41191787120312
- POINT 1256 7.642035101328529 32.4286399487375
- POINT 1257 8.662564215711519 32.43904959879422
- POINT 1258 9.687662207059672 32.45538705154674
- POINT 1259 10.70587327603016 32.43471639543523
- POINT 1260 11.77212124413756 32.45232461789568
- POINT 1261 12.86506864437663 32.5289155171651
- POINT 1262 13.9319031453721 32.65477802453022
- POINT 1263 14.74688388336436 32.29703064706029
- POINT 1264 15.74070577682765 32.33815957294095
- POINT 1265 -15.07552072766293 33.14262814282181
- POINT 1266 -14.47383699079426 33.80246509548604
- POINT 1267 -13.45485613851754 33.44616152809291
- POINT 1268 -12.31042376721847 33.31655850201416
- POINT 1269 -11.2135033566313 33.30180198841559
- POINT 1270 -10.20833474124087 33.37195219581763
- POINT 1271 -9.180106558323141 33.35165297473918
- POINT 1272 -8.167116093012913 33.3442344487901
- POINT 1273 -7.135707070230799 33.31483801144155
- POINT 1274 -6.105345665605076 33.30379118897195
- POINT 1275 -5.06957725725357 33.29468673625933
- POINT 1276 -4.041801375578952 33.30179332186751
- POINT 1277 -3.020762110140957 33.31421796476505
- POINT 1278 -2.005808444215231 33.32826293060971
- POINT 1279 -1.000289102538041 33.34360137140605
- POINT 1280 4.397051474314129e-08 33.34996601347633
- POINT 1281 1.000289226544982 33.34360139490249
- POINT 1282 2.005808652593252 33.32826315749907
- POINT 1283 3.020762356793561 33.31421864049496
- POINT 1284 4.04180140274841 33.30179435588055
- POINT 1285 5.069576774752012 33.29468759101248
- POINT 1286 6.105344800786285 33.30379157372327
- POINT 1287 7.135706209600581 33.31483800284786
- POINT 1288 8.167115522703435 33.3442342276991
- POINT 1289 9.180106333286005 33.35165308658632
- POINT 1290 10.20833438162417 33.37195324049043
- POINT 1291 11.21350253681438 33.30180425811116
- POINT 1292 12.31042180764285 33.31656140263814
- POINT 1293 13.4548524153751 33.44616582254692
- POINT 1294 14.47383044482127 33.80247196173818
- POINT 1295 15.07551512015369 33.14263458603429
- POINT 1296 -13.79621587368983 34.47979377169069
- POINT 1297 -12.80117612552641 34.14340935306568
- POINT 1298 -11.67938708456585 34.12832297638581
- POINT 1299 -10.72142132443546 34.29425844362311
- POINT 1300 -9.682832980733666 34.26424534470635
- POINT 1301 -8.688207103612132 34.27689307018375
- POINT 1302 -7.65563025945943 34.22402537362621
- POINT 1303 -6.627660152089107 34.20733211365729
- POINT 1304 -5.582314868145199 34.18559033550888
- POINT 1305 -4.548886327711884 34.19487513879358
- POINT 1306 -3.522722983675548 34.21111636664738
- POINT 1307 -2.501187911497048 34.22961986771382
- POINT 1308 -1.494394684397123 34.25705724567609
- POINT 1309 -0.4971265849464807 34.27519845138761
- POINT 1310 0.4971265078887681 34.27519841977612
- POINT 1311 1.494394688445157 34.25705727178087
- POINT 1312 2.501188049285862 34.22962028369921
- POINT 1313 3.522723188878942 34.21111756307139
- POINT 1314 4.548886155833521 34.19487684951891
- POINT 1315 5.582313876849914 34.18559156986573
- POINT 1316 6.627658663296168 34.20733251253952
- POINT 1317 7.655628853358176 34.22402516036131
- POINT 1318 8.68820599240011 34.27689283063138
- POINT 1319 9.682831841060921 34.26424634549341
- POINT 1320 10.72141915815556 34.29426114991747
- POINT 1321 11.67938420379727 34.12832694300539
- POINT 1322 12.80117158164824 34.14341469815486
- POINT 1323 13.79620812794538 34.47980114816573
- POINT 1324 -13.06808813704192 35.14018072687722
- POINT 1325 -12.14172620096994 34.87954210817981
- POINT 1326 -11.26850255798744 35.2174633859475
- POINT 1327 -10.17404344203454 35.15495143560162
- POINT 1328 -9.208060341626505 35.23313312650344
- POINT 1329 -8.164338718552617 35.1425249690552
- POINT 1330 -7.149966973739355 35.12413503072115
- POINT 1331 -6.093958485983832 35.07390856861841
- POINT 1332 -5.058078832983085 35.0862120839201
- POINT 1333 -4.028041239492521 35.10535340409478
- POINT 1334 -2.995366542760057 35.12335223032324
- POINT 1335 -1.984673994347679 35.16616214935111
- POINT 1336 -0.9889440302704526 35.202230425387
- POINT 1337 -2.362829220701329e-07 35.21561385455021
- POINT 1338 0.9889435978667032 35.20223033196604
- POINT 1339 1.984673688665513 35.16616222501731
- POINT 1340 2.995366465565271 35.12335296470669
- POINT 1341 4.028041331825868 35.10535544561446
- POINT 1342 5.05807832979828 35.08621479165007
- POINT 1343 6.093956728733247 35.07391022323044
- POINT 1344 7.149964603949941 35.12413537360996
- POINT 1345 8.16433638165371 35.14252466978046
- POINT 1346 9.208057389898194 35.23313393742545
- POINT 1347 10.17403944712447 35.15495471543825
- POINT 1348 11.26849645211291 35.21746853325359
- POINT 1349 12.14171999880287 34.87954795411678
- POINT 1350 13.0680787036588 35.14018886919808
- POINT 1351 -12.25874524554923 35.80263158479386
- POINT 1352 -10.64940816662681 35.9609434482652
- POINT 1353 -9.738993523076187 36.21117036120386
- POINT 1354 -8.645496887251596 36.05535363229623
- POINT 1355 -7.660082219217359 36.07236004253533
- POINT 1356 -6.59386247522779 35.96253496561209
- POINT 1357 -5.568601871711349 35.98133911135642
- POINT 1358 -4.542278169739824 36.00016620825533
- POINT 1359 -3.491371001354527 36.00500762088945
- POINT 1360 -2.474010083407105 36.06498819452312
- POINT 1361 -1.477289195045545 36.12504113606641
- POINT 1362 -0.4912059285544867 36.15975599214231
- POINT 1363 0.4912047027322386 36.15975590621064
- POINT 1364 1.477288036732875 36.12504100856928
- POINT 1365 2.474009154113311 36.06498836685221
- POINT 1366 3.491370484225889 36.005008798768
- POINT 1367 4.542278089478654 36.00016955223765
- POINT 1368 5.568600813180165 35.98134321823733
- POINT 1369 6.593859519726857 35.96253699972355
- POINT 1370 7.660078711252875 36.07236031674334
- POINT 1371 8.64549260236045 36.05535452011431
- POINT 1372 9.738986372954258 36.21117440008044
- POINT 1373 10.64940057210636 35.96094915519707
- POINT 1374 12.25873414120749 35.80264019887823
- POINT 1375 -11.51773025350177 36.35059294972418
- POINT 1376 -10.65697659081121 36.92420899016856
- POINT 1377 -9.073839610332337 36.90105300548846
- POINT 1378 -8.146483166419303 37.06536476868484
- POINT 1379 -7.049598100139526 36.85375720886346
- POINT 1380 -6.068285778904927 36.89990321056391
- POINT 1381 -5.072991493907814 36.90817616854977
- POINT 1382 -3.99387954502805 36.86886824762014
- POINT 1383 -2.967956221366422 36.948391661155
- POINT 1384 -1.969359381657599 37.03579454421214
- POINT 1385 -0.9811568690244843 37.09928427270614
- POINT 1386 -1.321646322029191e-06 37.12286421524274
- POINT 1387 0.9811542273605319 37.09928414206929
- POINT 1388 1.969356939200988 37.03579438002285
- POINT 1389 2.967954164856175 36.94839197135881
- POINT 1390 3.993878153189894 36.86886991249742
- POINT 1391 5.072990965328807 36.90818161389328
- POINT 1392 6.068283175739424 36.89990903124271
- POINT 1393 7.049593675630685 36.85375859784719
- POINT 1394 8.146477155142176 37.06536635726837
- POINT 1395 9.073831993817508 36.90105705402716
- POINT 1396 10.65696264541113 36.92421777141614
- POINT 1397 11.51771778734179 36.35060173116444
- POINT 1398 -9.874844025420192 37.39216649740979
- POINT 1399 -8.96740748095799 37.87695732138048
- POINT 1400 -7.438938982686154 37.68347468260948
- POINT 1401 -6.50593626267252 37.87694008295671
- POINT 1402 -5.61747021210558 37.87127533952164
- POINT 1403 -4.50493919684402 37.70762847888211
- POINT 1404 -3.474895680182776 37.81110994000395
- POINT 1405 -2.47779011320007 37.9305818016129
- POINT 1406 -1.486534122834006 38.0216095618874
- POINT 1407 -0.4945352453330601 38.07921156797903
- POINT 1408 0.4945300811634933 38.07921159550066
- POINT 1409 1.486529221010789 38.02160930967654
- POINT 1410 2.477785571750189 37.9305816710405
- POINT 1411 3.474891600531238 37.81111046960394
- POINT 1412 4.504935871545127 37.70763053498042
- POINT 1413 5.617467804911568 37.87128486851104
- POINT 1414 6.505933128734337 37.87694376153858
- POINT 1415 7.438934268999978 37.68347575716164
- POINT 1416 8.967392296606542 37.87696493811983
- POINT 1417 9.874829237160435 37.39217489381149
- POINT 1418 -8.147493943469181 38.26522221165496
- POINT 1419 -7.204335412055579 38.65737257146897
- POINT 1420 -6.323312496190199 38.97408019050001
- POINT 1421 -5.01203726983948 38.51297624845616
- POINT 1422 -4.001501092985738 38.651230540567
- POINT 1423 -3.020444675311309 38.806876475282
- POINT 1424 -2.033095442850132 38.92553139969691
- POINT 1425 -1.029249995848707 39.00470609623093
- POINT 1426 -4.74370389105111e-06 39.04491520100409
- POINT 1427 1.029241328499785 39.00470590960975
- POINT 1428 2.033087058128695 38.92553128934863
- POINT 1429 3.020436112344315 38.80687697855863
- POINT 1430 4.001492023142893 38.65123203877156
- POINT 1431 5.01202711215084 38.51297927624825
- POINT 1432 6.323297249481397 38.97408527161986
- POINT 1433 7.204321660158831 38.6573778816041
- POINT 1434 8.147479092148298 38.26522883631657
- POINT 1435 -5.49459488339432 39.2304297161394
- POINT 1436 -4.555054134591538 39.47438013983862
- POINT 1437 -3.625104797446435 39.66872174818514
- POINT 1438 -2.68641217378018 39.8187585290443
- POINT 1439 -1.753727660812683 39.92296262335634
- POINT 1440 -0.8514203504713909 39.98186887129251
- POINT 1441 0.8514156417348741 39.98186906132761
- POINT 1442 1.753718582443226 39.92296341244428
- POINT 1443 2.686399886263002 39.81876019460063
- POINT 1444 3.625089980059974 39.66872447914377
- POINT 1445 4.555037417817725 39.47438404988157
- POINT 1446 5.494577273669186 39.23043474765144
- POINT 1447 -10.17836236469941 9.351236080585844
- POINT 1448 -10.43178822028154 9.796311205363828
- POINT 1449 -9.917078319793836 9.803182550031517
- POINT 1450 -0.4257127323325477 0.4866079094147974
- POINT 1451 -2.371846788213477e-06 0.477542337394691
- POINT 1452 -0.4258068646365975 0.004533301166143754
- POINT 1453 -7.678410559861725 1.532677211575885
- POINT 1454 -7.321632913802258 1.829573658302515
- POINT 1455 -7.793213434540115 2.025649120773706
- POINT 1456 -0.4257125470876409 39.5133920361483
- POINT 1457 -2.371851945525555e-06 39.52245760050205
- POINT 1458 -0.4258066792652949 39.99546670279175
- POINT 1459 19.49788122060637 21.77367208818195
- POINT 1460 19.87859224467908 22.20035688754039
- POINT 1461 19.44771880960396 22.22685226353656
- POINT 1462 19.95652174895268 21.31804389755909
- POINT 1463 19.52620596169076 21.34480675106996
- POINT 1464 -18.50178077972164 27.59500547042333
- POINT 1465 -18.00418516392628 27.60561553936703
- POINT 1466 -18.19154542750159 27.14919736516595
- POINT 1467 2.318125029883721 20.44808511760801
- POINT 1468 2.823024436302765 20.4446500619237
- POINT 1469 2.535961498642024 20.89273520263026
- POINT 1470 -18.1915204806717 12.85075360776577
- POINT 1471 -18.00416183249957 12.39434254388758
- POINT 1472 -18.50176221811813 12.40494933886966
- POINT 1473 -10.43863716835151 8.90091854855763
- POINT 1474 -9.923927267863803 8.907789893225319
- POINT 1475 -10.95968604283294 7.131741057062447
- POINT 1476 -11.49280931695378 7.122937192173756
- POINT 1477 -11.23899374083607 7.556481059276784
- POINT 1478 -10.96516006976062 8.002771637036583
- POINT 1479 -11.49828334388146 7.993967772147892
- POINT 1480 -10.70432587216095 8.448865355552398
- POINT 1481 -10.95876096899656 8.892311542912923
- POINT 1482 -10.44503626911557 8.01137864268129
- POINT 1483 14.20285675279642 6.771375017633135
- POINT 1484 14.50369851507584 7.101292773533388
- POINT 1485 14.77834984324904 6.524081630761735
- POINT 1486 12.23551226998423 9.30208580312808
- POINT 1487 11.99907300324982 8.856939970398869
- POINT 1488 12.50944368805203 8.841146276347569
- POINT 1489 11.97221231742172 9.765815913514722
- POINT 1490 12.48258300222394 9.750022219463421
- POINT 1491 -0.4905789853227912 2.888925581404812
- POINT 1492 -0.7361812304740789 3.37047972852181
- POINT 1493 -0.2456035667837216 3.358689771784562
- POINT 1494 -4.783548996192389 1.006323236939901
- POINT 1495 -5.026302453506227 0.6418935979999102
- POINT 1496 -5.253316898193344 1.128297748069279
- POINT 1497 -4.278279517467413 0.9371948906828067
- POINT 1498 -4.50677415895651 1.41789821597725
- POINT 1499 -3.813305411122727 0.8400241846748683
- POINT 1500 -4.09123434595309 0.4229266387245523
- POINT 1501 1.893402820285961 39.42424735089645
- POINT 1502 2.359743472195849 39.37214574197463
- POINT 1503 2.220670538841968 39.87633322383852
- POINT 1504 0.2472626687298011 38.56206339825238
- POINT 1505 -2.582084783431249e-06 38.07921158173984
- POINT 1506 -0.2472699945184756 38.56206338449157
- POINT 1507 10.65318160875874 36.4425834633066
- POINT 1508 11.08355917972408 36.15577544318076
- POINT 1509 11.09104919162302 36.64297534268243
- POINT 1510 4.506759567646867 38.5821056575099
- POINT 1511 4.758481491847984 38.11030490561433
- POINT 1512 4.25321394734401 38.179431286876
- POINT 1513 4.783532264984283 38.9936816630649
- POINT 1514 5.253302192910013 38.87170701194984
- POINT 1515 5.026287577931008 39.35811027344018
- POINT 1516 4.278264720480308 39.06280804432657
- POINT 1517 2.271388089598089 31.06354615904246
- POINT 1518 1.765500457793982 31.06477028013021
- POINT 1519 2.019775060864925 30.61385016680937
- POINT 1520 2.52391207978878 31.51196247936205
- POINT 1521 2.778186682859723 31.06104236604121
- POINT 1522 19.58406521140076 19.55566934611801
- POINT 1523 19.59394271675515 20.00002569416793
- POINT 1524 19.99506063684425 19.5555338953416
- POINT 1525 19.58406161774156 20.44446277646284
- POINT 1526 19.99505884072375 20.44454692352635
- POINT 1527 17.47612722659238 20.45170520807109
- POINT 1528 17.94956809694392 20.45199983601073
- POINT 1529 17.76408318096152 19.99954840147309
- POINT 1530 17.09376279229357 20.90344554562439
- POINT 1531 16.90827787631117 20.45099411108675
- POINT 1532 17.65639440029453 29.39423957186695
- POINT 1533 17.13332166556852 29.38219151942949
- POINT 1534 17.36874302811696 28.9397190446526
- POINT 1535 13.61482989783698 32.16078664038712
- POINT 1536 14.07640103797599 32.09309983360238
- POINT 1537 13.75932779044087 31.59910844945928
- POINT 1538 16.10341413477412 30.21256867861998
- POINT 1539 16.63239269868544 30.24523358242805
- POINT 1540 16.3698240483532 30.66455297149614
- POINT 1541 16.89070536402862 29.81350550472902
- POINT 1542 16.60859908664627 29.36193530425236
- POINT 1543 17.1625462541375 30.26873928275396
- POINT 1544 16.0904668374591 31.08225823633646
- POINT 1545 16.6246937806281 31.11843321269683
- POINT 1546 15.81288509623059 31.48985754125695
- POINT 1547 16.04545280411266 31.9391559472781
- POINT 1548 15.51319388940625 31.89262312523499
- POINT 1549 15.56326374321337 31.03948737260855
- POINT 1550 13.77222000363087 24.39434126697991
- POINT 1551 13.50730940690564 24.83959165127776
- POINT 1552 14.02976238006146 24.83530625723629
- POINT 1553 12.98553330932471 9.758991772893435
- POINT 1554 12.72223335676221 10.22272188328008
- POINT 1555 16.25410351335674 12.9148587217591
- POINT 1556 16.01906260946011 13.38331048867258
- POINT 1557 16.5117595380726 13.37602992964366
- POINT 1558 16.89069502922413 10.18647787299363
- POINT 1559 16.60858850912514 10.63804911311348
- POINT 1560 17.13330989107297 10.61778909765387
- POINT 1561 16.09214844821832 10.65648742134303
- POINT 1562 16.33476331006715 11.08779864600327
- POINT 1563 -17.80117652624369 28.04993852124202
- POINT 1564 -17.49657169072127 27.60644176445565
- POINT 1565 -19.58406168080147 20.44446288474986
- POINT 1566 -19.59394278438359 20.00002569746599
- POINT 1567 -19.99505883837563 20.44454702859078
- POINT 1568 -18.996847002171 20.45276507073249
- POINT 1569 -19.3930231142053 20.89717656055036
- POINT 1570 -19.58406527491918 19.55566925469715
- POINT 1571 -19.99506063472496 19.55553380055498
- POINT 1572 -18.99703876946375 19.54715259717118
- POINT 1573 -19.39321847561576 19.10277045693634
- POINT 1574 -1.233845495929245 37.56044691729677
- POINT 1575 -0.9905346840835332 38.05041056493322
- POINT 1576 -0.7378460571787722 37.58924792034259
- POINT 1577 -1.759814782842069 38.47357048079215
- POINT 1578 -1.982162118017038 37.97609568175015
- POINT 1579 -2.255442778025101 38.42805660065491
- POINT 1580 -1.503048773376636 33.33593215100788
- POINT 1581 -1.756818384601298 32.87589913286249
- POINT 1582 -1.254058713762703 32.88356835326066
- POINT 1583 13.51221711522611 31.16406500489199
- POINT 1584 13.97378825536513 31.09637819810725
- POINT 1585 1.775181014606737 21.33393361663671
- POINT 1586 1.267840964225153 21.33711381427801
- POINT 1587 1.523722041841396 20.89935045595586
- POINT 1588 1.265170094048079 22.20914709544139
- POINT 1589 1.77056085321017 22.20855342148825
- POINT 1590 1.516431010267755 22.64600354197079
- POINT 1591 1.012728381227997 21.77259296305717
- POINT 1592 0.7612694084626562 21.33800980237632
- POINT 1593 0.758598538285582 22.21004308353971
- POINT 1594 1.847863631555612 20.4480851260611
- POINT 1595 1.340523581174028 20.45126532370239
- POINT 1596 2.134926569216352 19.99999998535455
- POINT 1597 2.280691513968954 21.33225925723105
- POINT 1598 2.785590920387998 21.32882420154674
- POINT 1599 2.02481043635271 21.7700226155532
- POINT 1600 2.78116495724771 22.20597296072012
- POINT 1601 2.276071352572386 22.20687906208259
- POINT 1602 2.52691537410517 22.64450376665516
- POINT 1603 -9.899143737765993 12.4849004435783
- POINT 1604 -9.387390829537839 12.48845944608934
- POINT 1605 -9.645780226280916 12.0410160502686
- POINT 1606 -11.94630637827111 14.2647893097616
- POINT 1607 -12.46345218922917 14.26650973789091
- POINT 1608 -12.20840695700918 14.7105827019253
- POINT 1609 -13.22907293656634 11.13290745457848
- POINT 1610 -13.48445463159971 11.58282180341283
- POINT 1611 -12.9714364037251 11.58072072087271
- POINT 1612 -12.45912889682464 11.58045014485459
- POINT 1613 -11.9508016855418 11.57834567717223
- POINT 1614 -12.20772749740889 11.128701904356
- POINT 1615 -12.71451059185801 12.03036449368894
- POINT 1616 -13.62553305310023 6.037019882652965
- POINT 1617 -14.1390779208095 5.854807348663457
- POINT 1618 -13.96434315411798 6.375683521723212
- POINT 1619 -13.39847526011537 7.408160088352634
- POINT 1620 -13.61481920361369 7.839222070915377
- POINT 1621 -13.0814052589453 7.902150069513514
- POINT 1622 -13.69337197744059 6.949534963734737
- POINT 1623 -13.1599580327722 7.012462962332874
- POINT 1624 -14.5037016745593 7.101298192194127
- POINT 1625 -14.20286038146115 6.771380647742971
- POINT 1626 -14.7783559058492 6.524088291719242
- POINT 1627 -13.23627871209868 9.312480837244131
- POINT 1628 -13.51221183367959 8.835940044420862
- POINT 1629 -13.02181608086271 8.809752844899524
- POINT 1630 -16.36981698070831 9.335436989756825
- POINT 1631 -16.09046066583428 8.917733609398496
- POINT 1632 -16.62468707069794 8.881556790786455
- POINT 1633 -15.56325712327145 8.960504702078703
- POINT 1634 -15.81287888901091 8.510134528156787
- POINT 1635 -15.51318860052802 8.107370522015474
- POINT 1636 -16.04544791423854 8.060837516432803
- POINT 1637 -12.46766878840969 10.67227976168969
- POINT 1638 -11.95934157712685 10.67017529400733
- POINT 1639 -10.71091751983426 6.663122417067669
- POINT 1640 -10.45710194371655 7.096666284170696
- POINT 1641 -10.46487666458869 6.166894149966415
- POINT 1642 -10.96746076370507 6.201968922858168
- POINT 1643 -10.44773102895123 5.275394031275448
- POINT 1644 -10.20212605088105 5.720747497892338
- POINT 1645 -9.928437171372778 5.290400873410871
- POINT 1646 -9.945582807010235 6.18190099210184
- POINT 1647 -13.2986928764065 5.688395693536721
- POINT 1648 -13.12801457340368 6.205213648598734
- POINT 1649 -11.74872710378692 8.418130127367466
- POINT 1650 -12.02256077486237 7.971839549607667
- POINT 1651 -12.50944374702482 8.841147771275015
- POINT 1652 -12.78537686860573 8.36460697845175
- POINT 1653 -12.56903292510741 7.933544995889006
- POINT 1654 -12.31858916520195 7.509382640669432
- POINT 1655 13.43619694655841 5.185526953886848
- POINT 1656 12.93462220614015 5.358195834077412
- POINT 1657 13.29868673147849 5.68838933264013
- POINT 1658 12.6048962546636 4.990129099323558
- POINT 1659 12.47144390129601 5.488517379573725
- POINT 1660 12.66773340441992 4.523290710179079
- POINT 1661 12.20022404450319 4.658903670708396
- POINT 1662 10.71091693015139 6.663120759878266
- POINT 1663 10.46487540167239 6.166892274467385
- POINT 1664 10.96745927067751 6.201966434828546
- POINT 1665 11.47479568277288 8.879068504656995
- POINT 1666 11.74872710084068 8.418128977876485
- POINT 1667 10.41171824790274 4.44204662093386
- POINT 1668 9.95651127773848 4.316934168875102
- POINT 1669 10.19419137109885 3.91393666291501
- POINT 1670 10.72126631852727 4.813787013527604
- POINT 1671 10.99495611235534 5.244133924789459
- POINT 1672 10.44772794837044 5.275391038155809
- POINT 1673 10.95894641188764 4.410789507567511
- POINT 1674 11.39310410040094 4.215962651334707
- POINT 1675 11.08355602977641 3.844222258740964
- POINT 1676 11.76361231084955 4.489943298379086
- POINT 1677 11.89137865119184 3.919107181901866
- POINT 1678 11.70510621616581 4.951490272490563
- POINT 1679 10.26855741345323 2.837344939506088
- POINT 1680 10.19797132927438 3.43230183825083
- POINT 1681 9.806904421137391 3.198323297051241
- POINT 1682 10.65317829943864 3.557414290309588
- POINT 1683 11.09104496327604 3.357021849792107
- POINT 1684 15.24378585350844 7.682394375166194
- POINT 1685 14.91119126151212 7.280158226193516
- POINT 1686 15.41335252508149 7.2552534786716
- POINT 1687 14.33938124011792 7.524093148708583
- POINT 1688 14.48388392770153 8.085767740880334
- POINT 1689 14.07639118126524 7.906902288220206
- POINT 1690 13.61481867571485 7.839218526827278
- POINT 1691 13.75932136329846 8.400893118999029
- POINT 1692 13.02181590626726 8.80975073334144
- POINT 1693 12.78537663953285 8.364604900612228
- POINT 1694 13.47592883520427 9.785178774102992
- POINT 1695 13.99000741695932 9.792862338836377
- POINT 1696 13.73926224561804 10.23937500144348
- POINT 1697 13.236278480666 9.312479110286336
- POINT 1698 13.51221143214682 8.835937734550996
- POINT 1699 13.97378393769721 8.903621495943923
- POINT 1700 11.4612780216533 9.774811388208361
- POINT 1701 11.70834875389301 10.2227478045437
- POINT 1702 1.893403551233607 0.5757525887353929
- POINT 1703 2.220671493500129 0.1236668831597823
- POINT 1704 2.359744414402249 0.6278542389056427
- POINT 1705 -9.020619693030262 2.610992623251209
- POINT 1706 -9.424238324783893 2.359599448271815
- POINT 1707 -9.474338358545761 2.853388073889197
- POINT 1708 -9.406414519116504 3.443886808846754
- POINT 1709 -9.192243991855898 3.8667371366121
- POINT 1710 -8.859666959835261 3.521795695676809
- POINT 1711 -9.806915390566399 3.198329514824488
- POINT 1712 -10.19798187725191 3.432308248445783
- POINT 1713 -10.26857176218753 2.83735353592188
- POINT 1714 -0.2472699682428073 1.437936441491353
- POINT 1715 -2.582068645534674e-06 1.920788194433522
- POINT 1716 0.2472626424805853 1.437936427731552
- POINT 1717 -0.247268257212236 2.398961916430443
- POINT 1718 0.2472643535111566 2.398961902670643
- POINT 1719 -0.7378459209025934 2.410751873167692
- POINT 1720 -3.510975514120101 1.270946662206892
- POINT 1721 -3.322776245011294 0.762200977161605
- POINT 1722 -2.853429843183762 0.6871825417534015
- POINT 1723 -3.156651266211425 0.2506822223484442
- POINT 1724 -2.526771255348011 1.133795929446323
- POINT 1725 -2.359754750523105 0.6278550165060958
- POINT 1726 -2.749118087874698 1.631270599590879
- POINT 1727 -2.255442995214041 1.571943074343573
- POINT 1728 1.53116419331424 38.96511859947919
- POINT 1729 1.391479955471506 39.46383466102701
- POINT 1730 0.7618857048316392 38.5419587525552
- POINT 1731 0.5146182923979471 39.02481055530693
- POINT 1732 1.257885274755287 38.51315760964314
- POINT 1733 1.759808139569742 38.47357029951259
- POINT 1734 0.9905296510871409 38.0504104525886
- POINT 1735 -0.4905790953354032 37.11107424397444
- POINT 1736 -0.2472682834896911 37.60103789161089
- POINT 1737 0.2472643797585856 37.6010379053717
- POINT 1738 1.263131334613411 23.08451873542055
- POINT 1739 1.768522093775502 23.0839250614674
- POINT 1740 10.17836399587573 30.64876633574936
- POINT 1741 10.43178957770394 30.2036916661421
- POINT 1742 9.917079336223154 30.19681981804171
- POINT 1743 2.526761585236505 38.86620413395363
- POINT 1744 2.853417999303659 39.31281858657962
- POINT 1745 4.533434559259351 36.88852576319535
- POINT 1746 4.788963418436968 37.30790607443685
- POINT 1747 4.24940701236751 37.28825022373893
- POINT 1748 -0.7511020128127708 32.88704851349204
- POINT 1749 -1.004871624037433 32.42701549534664
- POINT 1750 0.7570181843694639 30.16737890662038
- POINT 1751 0.2521487164707948 30.16753615186619
- POINT 1752 0.5048695270937089 29.71821296405268
- POINT 1753 1.009092401403684 30.61588819116551
- POINT 1754 1.261813212026598 30.16656500335199
- POINT 1755 5.068073916803044 30.6133100080666
- POINT 1756 4.814374367436898 31.05972795409684
- POINT 1757 5.32423717645129 31.06128530414202
- POINT 1758 16.9971372534731 13.37045922378724
- POINT 1759 16.76209634957647 13.83891099070072
- POINT 1760 18.58096903763212 13.77579904583797
- POINT 1761 18.85904395297749 13.34143701271937
- POINT 1762 18.41152250629444 13.29587573790125
- POINT 1763 18.68665357284071 14.64903426839365
- POINT 1764 18.29676492885642 15.05256270617449
- POINT 1765 18.88575798278899 15.06972612425592
- POINT 1766 17.78489646840998 15.09030766023127
- POINT 1767 17.98400087835825 15.51099951609354
- POINT 1768 18.5600217445983 14.22769376801203
- POINT 1769 18.11860781194196 14.17997612813817
- POINT 1770 19.15364966814478 14.24346421008305
- POINT 1771 17.67256729194256 14.23260556757826
- POINT 1772 17.69351458497638 13.7807108454042
- POINT 1773 18.99703873975269 19.54715250100616
- POINT 1774 19.39321851764313 19.1027704587883
- POINT 1775 18.52185804865407 19.54704832154459
- POINT 1776 18.71270474241169 19.9999472088743
- POINT 1777 17.69535052595289 15.99996226585984
- POINT 1778 18.20721898639934 15.96221731180307
- POINT 1779 14.56172135096343 23.94597916401752
- POINT 1780 15.08739392619418 23.94259090424376
- POINT 1781 14.82034555201745 24.38666761316468
- POINT 1782 19.39302316315837 20.89717655197163
- POINT 1783 18.9389913228763 21.35310913845178
- POINT 1784 18.99684697892711 20.45276516384465
- POINT 1785 18.5216662878285 20.45266098438309
- POINT 1786 18.23371033345935 20.90481779098108
- POINT 1787 18.44846900788159 21.34055417663924
- POINT 1788 18.58165180641398 21.78818437573758
- POINT 1789 17.87637081699702 21.33989302826688
- POINT 1790 14.33939351436823 32.47590433579525
- POINT 1791 14.48389140697212 31.91422614486741
- POINT 1792 15.01628294267461 31.87205866229466
- POINT 1793 14.75329046628237 31.48925416010179
- POINT 1794 15.24379483009601 32.31759511000062
- POINT 1795 13.51391520548446 23.95486250753157
- POINT 1796 13.2557163229842 23.51457606093689
- POINT 1797 12.99156814797479 23.95834021442671
- POINT 1798 14.03636817864028 23.9505771134901
- POINT 1799 14.30341655281701 23.50650040456918
- POINT 1800 14.0490662851837 23.06997473842002
- POINT 1801 14.57441945750685 23.06537678894744
- POINT 1802 14.06279368008757 21.3236640608961
- POINT 1803 13.53137856169023 21.32075100476631
- POINT 1804 13.79945769458797 20.88653785779963
- POINT 1805 16.48589251600749 21.75662015498322
- POINT 1806 16.7770188066016 21.32987302051025
- POINT 1807 16.23478715141826 21.32948158311302
- POINT 1808 17.3448681568828 21.33058411749459
- POINT 1809 17.55962683130505 21.76632050315274
- POINT 1810 16.93904168525997 24.42265130776862
- POINT 1811 17.21421228526815 24.86330083072308
- POINT 1812 16.6810332475078 24.83472173963332
- POINT 1813 17.1982158646259 23.98500607585395
- POINT 1814 16.66503682686555 23.95642698476418
- POINT 1815 19.16297996782281 24.02058583340057
- POINT 1816 19.25792778397388 23.55188868076646
- POINT 1817 19.6018346474257 23.97090400112769
- POINT 1818 18.66035549167398 24.06458002427793
- POINT 1819 18.99865807228879 24.48246002560036
- POINT 1820 14.55271823159151 24.83011771959528
- POINT 1821 15.07839080682226 24.82672945982152
- POINT 1822 14.28780763486628 25.27536810389313
- POINT 1823 13.48363738345204 10.68334955994101
- POINT 1824 13.99771596520709 10.69103312467439
- POINT 1825 17.49654751855807 12.39351922586987
- POINT 1826 17.22317514403901 12.87270591921469
- POINT 1827 17.0201728164883 12.42839146938536
- POINT 1828 17.91955247554229 13.28295754083165
- POINT 1829 18.19151987686094 12.8507518727688
- POINT 1830 17.47351195554288 13.33558698027175
- POINT 1831 18.00416107324389 12.39434056037404
- POINT 1832 18.50176146164216 12.40494748537886
- POINT 1833 17.80115874569317 11.95002611054472
- POINT 1834 16.79404890136688 11.97251973589774
- POINT 1835 16.52067652684781 12.45170642924257
- POINT 1836 16.02797959823532 12.45898698827148
- POINT 1837 15.78700936626793 12.00541048997754
- POINT 1838 15.52043635277687 12.46856278249407
- POINT 1839 16.05643793044336 11.55103582499389
- POINT 1840 15.5488946849849 11.56061161921647
- POINT 1841 16.57287799135018 11.53259751676433
- POINT 1842 17.07237428099067 11.50928255690713
- POINT 1843 15.83583901726724 10.22173398984722
- POINT 1844 15.57327102716685 9.802415814168842
- POINT 1845 16.10340565717593 9.787419712774863
- POINT 1846 15.56201381820924 10.67148352273701
- POINT 1847 16.63238319420686 9.754752209684828
- POINT 1848 17.16253549533622 9.731242758971581
- POINT 1849 16.36981520410647 9.335434034006447
- POINT 1850 16.62468438429443 8.881552759389605
- POINT 1851 16.09045850341202 8.917730295952133
- POINT 1852 -18.71270480363148 19.99994720870178
- POINT 1853 -18.52166623703531 20.45266088450229
- POINT 1854 -18.52185800432806 19.54704841094098
- POINT 1855 -19.52620606861738 21.34480663718991
- POINT 1856 -19.49788131345209 21.77367208204773
- POINT 1857 -19.95652172785348 21.31804421550326
- POINT 1858 -18.93899138998692 21.35310882317254
- POINT 1859 -15.41336472355292 32.74473177212385
- POINT 1860 -14.91120300548017 32.71982820066302
- POINT 1861 -15.24379759687971 32.31759127892943
- POINT 1862 -15.51319663933861 31.8926193258387
- POINT 1863 -15.01628432575631 31.8720563054135
- POINT 1864 -15.8128873248544 31.48985418888792
- POINT 1865 -16.04545639284706 31.93915110915433
- POINT 1866 -13.73926553271729 29.7606245440472
- POINT 1867 -13.9977196654956 29.30896632719983
- POINT 1868 -13.48364033262393 29.31665160461403
- POINT 1869 -16.63239437432929 30.24523068926878
- POINT 1870 -16.89070674738754 29.81350290745965
- POINT 1871 -17.16254826435143 30.26873590905672
- POINT 1872 -17.58991750209542 28.49978947605134
- POINT 1873 -18.10312108953776 28.50158849460802
- POINT 1874 -14.02976207391727 24.83530603116176
- POINT 1875 -13.50730912711314 24.83959146419358
- POINT 1876 -13.7722197102861 24.39434106981482
- POINT 1877 -9.910917163711101 29.30166999886159
- POINT 1878 -10.16379441977193 28.85693149401143
- POINT 1879 -10.42338196742408 29.30700642143803
- POINT 1880 -8.865707288319939 20.4402358718522
- POINT 1881 -8.354951980244287 20.44018950619541
- POINT 1882 -8.61056647960487 20.88042659780381
- POINT 1883 -8.86570719768363 19.55976134425465
- POINT 1884 -8.354952278862285 19.55980826280008
- POINT 1885 -8.610566687586559 19.11957082681093
- POINT 1886 -9.121386103645744 19.99999862799004
- POINT 1887 -9.377000603006326 20.44023571959844
- POINT 1888 -9.377000512370016 19.55976119200088
- POINT 1889 -8.865603022394847 21.32049699917977
- POINT 1890 -8.354847714319193 21.32045063352298
- POINT 1891 -8.099972462421654 21.76042830181979
- POINT 1892 -7.844935919631678 21.32035790044383
- POINT 1893 -8.354715320124482 22.20063713853177
- POINT 1894 -7.844803525436967 22.20054440545263
- POINT 1895 -8.865674199362843 22.20088990639256
- POINT 1896 -8.610505262378155 22.6410060100254
- POINT 1897 -8.354985291815844 16.91842867771209
- POINT 1898 -8.610508524984098 17.358992612215
- POINT 1899 -8.865944756334432 16.91817546724494
- POINT 1900 -5.563175305433118 20.88175519528509
- POINT 1901 -5.819523783751198 20.44055366808308
- POINT 1902 -5.314081970855431 20.4412012668848
- POINT 1903 -6.323600721688926 20.44055355863392
- POINT 1904 -6.07450738711124 19.99999963023362
- POINT 1905 -7.845909792127558 19.5598084686856
- POINT 1906 -7.337224145127458 19.55973210578316
- POINT 1907 -7.591126121765114 19.11954138245392
- POINT 1908 -7.085296070269434 19.99999935639965
- POINT 1909 -6.83051239990699 19.55973227016798
- POINT 1910 -8.101050302224628 19.99999898612932
- POINT 1911 -7.84590949350956 20.44018971208093
- POINT 1912 -4.813437732774505 20.44120133195445
- POINT 1913 -5.069786211092584 19.99999980475244
- POINT 1914 -4.81343786679399 19.55879836960208
- POINT 1915 -5.314082104874918 19.55879830453243
- POINT 1916 -4.309046734147286 19.55755213850044
- POINT 1917 -4.553342627929618 19.11635063828043
- POINT 1918 -4.309046659354325 20.44244765252682
- POINT 1919 -4.553342419117173 20.88364911465918
- POINT 1920 -6.321208714327986 18.67923371725688
- POINT 1921 -5.814542592123692 18.67893193845749
- POINT 1922 -6.067133751274726 18.23927391170671
- POINT 1923 -5.563175657876638 19.11824430669487
- POINT 1924 -5.309100694823378 18.67828450114469
- POINT 1925 -6.575529014970982 19.11917838177958
- POINT 1926 -6.828120174122017 18.6795203550288
- POINT 1927 -5.819524002175232 19.55944574184523
- POINT 1928 -6.323600940112959 19.55944563239606
- POINT 1929 -0.5146273697762991 39.02481064861751
- POINT 1930 -0.7618926205908836 38.54195883210498
- POINT 1931 -1.257892059341357 38.51315782905916
- POINT 1932 -1.53117271934942 38.96511874796391
- POINT 1933 -0.940335173160049 39.49328748376172
- POINT 1934 -1.391488828330695 39.46383435979364
- POINT 1935 -1.302906939267033 39.95751571405174
- POINT 1936 -1.893411551831407 39.42424701152662
- POINT 1937 -1.723324288351572 36.58041784013928
- POINT 1938 -1.475258125341042 37.06753940845914
- POINT 1939 -1.229223032035015 36.61216270438628
- POINT 1940 -2.223574747428835 37.48318817291252
- POINT 1941 -2.46865780151201 36.99209310268357
- POINT 1942 -2.722873167283246 37.43948673138395
- POINT 1943 -1.727946752245803 37.52870205304977
- POINT 1944 9.124384730034761 25.2901944687983
- POINT 1945 9.380903693723068 25.73399854252466
- POINT 1946 8.869536394962354 25.73292170940668
- POINT 1947 8.867787034579436 24.84742875339725
- POINT 1948 8.611808211452907 24.40495794646223
- POINT 1949 8.357038608147516 24.84664682874531
- POINT 1950 9.37915433334015 24.84850558651523
- POINT 1951 9.635034859880143 24.40616641167393
- POINT 1952 9.891632555335468 24.84893212707499
- POINT 1953 8.10306863199613 25.28792614032669
- POINT 1954 7.847089808869599 24.84545533339167
- POINT 1955 7.337860839610064 24.84465823087261
- POINT 1956 7.591830815761451 24.40337891929124
- POINT 1957 7.084483663987436 25.28568916804524
- POINT 1958 6.829224670879288 24.84361275394481
- POINT 1959 11.17838537690847 23.52246049961141
- POINT 1960 11.4371216212408 23.08138069299567
- POINT 1961 10.9206635519637 23.08206164870911
- POINT 1962 15.02252590981234 31.03532490076284
- POINT 1963 14.49013437410986 31.07749238333559
- POINT 1964 14.2430236988951 30.6424489387683
- POINT 1965 15.30010765104086 30.62772559584235
- POINT 1966 2.526915485973436 17.35549624102799
- POINT 1967 2.276071431689728 17.79312093621829
- POINT 1968 2.781165078003321 17.79402703104667
- POINT 1969 6.346618006894577 8.933221976655281
- POINT 1970 6.606300654387716 8.482722162553308
- POINT 1971 6.859007165943082 8.928198624363933
- POINT 1972 5.835923918840571 8.936439330716784
- POINT 1973 6.088630430395938 9.381915792527408
- POINT 1974 3.813293467525553 0.8400220701018267
- POINT 1975 4.278266624098441 0.9371921865469454
- POINT 1976 4.091218596162663 0.4229233416757498
- POINT 1977 0.7378420180172898 2.410751924726134
- POINT 1978 1.233841522613396 2.439553016285871
- POINT 1979 0.9905295332508535 1.949589272233458
- POINT 1980 0.4905763428736994 2.888925646723056
- POINT 1981 8.615527392862056 13.82496521644805
- POINT 1982 8.869539085606789 14.26707992304672
- POINT 1983 8.359008517018593 14.26876890588306
- POINT 1984 7.109843205144307 9.375226262222675
- POINT 1985 7.369525852637445 8.924726448120705
- POINT 1986 3.536686478737197 13.8361386042247
- POINT 1987 3.790057778698816 13.39355052709382
- POINT 1988 3.284192797098449 13.39405264356153
- POINT 1989 3.789177750276934 14.27725402423099
- POINT 1990 3.283312768676568 14.27775614069871
- POINT 1991 3.540719142764858 10.28304212363626
- POINT 1992 3.793978675026311 10.72885668139838
- POINT 1993 3.286497665917229 10.72924169735144
- POINT 1994 6.845584714338232 10.71830373756566
- POINT 1995 7.355184401511213 10.7157436111351
- POINT 1996 7.09778359222352 11.16341894215851
- POINT 1997 7.361673707732298 9.821191246260845
- POINT 1998 6.851155021037934 9.824663422504075
- POINT 1999 4.296500541441507 13.39272956312007
- POINT 2000 4.044006859802759 12.95064360245691
- POINT 2001 4.802971515540548 13.39198494333306
- POINT 2002 4.549022434436605 13.83489186796998
- POINT 2003 4.297887859095104 12.50674192674635
- POINT 2004 3.791445096352413 12.5075628907201
- POINT 2005 4.805074931872197 12.50557276622567
- POINT 2006 4.552513168421852 12.06249205448886
- POINT 2007 4.301274159001078 10.72795370371833
- POINT 2008 4.809681854713771 10.7267995158349
- POINT 2009 4.556607847586633 10.28150291979977
- POINT 2010 4.047052682153449 11.17415327743351
- POINT 2011 4.299837130886486 11.6184557573815
- POINT 2012 3.79254164691172 11.61935873506155
- POINT 2013 4.80702420366358 11.61728659686082
- POINT 2014 0.7573648401832791 10.72884628711409
- POINT 2015 0.2524954018262905 10.72868903454322
- POINT 2016 0.5048694975539831 10.28178714397273
- POINT 2017 2.779998485031843 10.72963471324423
- POINT 2018 3.033258017293297 11.17544927100636
- POINT 2019 1.22366534318951 19.99999999772072
- POINT 2020 0.8995237534752946 20.45126532761548
- POINT 2021 1.847863650156727 19.55191485745089
- POINT 2022 2.318125048484836 19.5519148489978
- POINT 2023 -18.93911412821423 18.64650966130721
- POINT 2024 -18.58166026436047 18.21127422426079
- POINT 2025 -18.44873810630657 18.65901836236396
- POINT 2026 -19.52614063366966 18.65502631883318
- POINT 2027 -18.87780139947743 17.75460066637132
- POINT 2028 -18.38742537756978 17.76710936742808
- POINT 2029 -19.25342558557374 17.32881436986417
- POINT 2030 -19.44766047236443 17.77297922669689
- POINT 2031 -11.69163369768068 12.03021037174421
- POINT 2032 -11.44023229826493 11.57846213124561
- POINT 2033 -11.43422134923478 12.47855566601287
- POINT 2034 -11.94479073651165 12.47843921193948
- POINT 2035 -10.92866196056182 11.58403125210506
- POINT 2036 -10.41689637261445 11.58759636307505
- POINT 2037 -10.66929872245644 12.03389193678758
- POINT 2038 -11.18782994842294 11.13216655753308
- POINT 2039 -9.904431558833004 11.59293222934731
- POINT 2040 -9.39267865060485 11.59649123185834
- POINT 2041 -9.139626886740061 11.15213642340234
- POINT 2042 -8.880975554187973 11.60022024432364
- POINT 2043 -10.16379479693838 11.14307154466478
- POINT 2044 -9.910917079266454 10.69833254287327
- POINT 2045 -10.4233818930479 10.69299667660101
- POINT 2046 -8.370126273665381 11.60298203772225
- POINT 2047 -8.62317803753017 12.04733684617825
- POINT 2048 -6.319914164590672 17.79970756621019
- POINT 2049 -5.813248042386378 17.79940578741079
- POINT 2050 -5.812970532530068 16.03929555219032
- POINT 2051 -6.066345556101558 16.47969823346978
- POINT 2052 -6.320151886932637 16.03908136247431
- POINT 2053 -5.812596328700657 16.91987593255003
- POINT 2054 -6.319777683103225 16.91966174283402
- POINT 2055 -5.306138086716437 16.03968131654242
- POINT 2056 -5.559944417547516 15.59906444554695
- POINT 2057 -4.799950565874155 16.03961222338507
- POINT 2058 -5.052976680856709 16.47984333002844
- POINT 2059 -6.574690167020133 15.59804862668566
- POINT 2060 -6.828065190591623 16.03845130796511
- POINT 2061 -15.25853880596588 12.9242213232549
- POINT 2062 -15.52043648370752 12.46856362456286
- POINT 2063 -15.01756861930122 12.47064487481246
- POINT 2064 -14.50591702520376 13.37825294329215
- POINT 2065 -13.99649188437294 13.37881945166879
- POINT 2066 -14.24624580072877 12.92686908188113
- POINT 2067 -14.50520649728844 12.47612567984228
- POINT 2068 -14.76710417503007 12.02046798115024
- POINT 2069 -13.99841660872912 11.58047866164933
- POINT 2070 -13.74078007588788 12.02829192794356
- POINT 2071 -13.99578135645762 12.47669218821891
- POINT 2072 -13.48181937932821 12.47903532998241
- POINT 2073 -17.13331118398057 10.61779162646253
- POINT 2074 -17.656383083496 10.60573919584698
- POINT 2075 -17.36873112769916 11.06026014994149
- POINT 2076 -16.02797983714253 12.45898801730209
- POINT 2077 -16.52067686245398 12.45170765846319
- POINT 2078 -16.25410369568363 12.9148597141664
- POINT 2079 -15.78700965047787 12.00541156885965
- POINT 2080 -17.58990196620047 11.50018232123824
- POINT 2081 -17.80115956030314 11.95002810346316
- POINT 2082 -18.10310561939233 11.49837858894322
- POINT 2083 -17.07237505905118 11.50928449184498
- POINT 2084 -17.49654816974892 12.39352110356614
- POINT 2085 -16.79404945073268 11.9725213123703
- POINT 2086 -16.57287861223137 11.53259914107355
- POINT 2087 -17.02017330927379 12.42839300923462
- POINT 2088 -17.22317558147022 12.87270744965903
- POINT 2089 -10.15245041339834 12.93005084479948
- POINT 2090 -10.41083981014142 12.48260744897875
- POINT 2091 -10.92260539808879 12.47904233800876
- POINT 2092 -11.17576243691975 12.92727117820404
- POINT 2093 -12.45674776247602 13.37407164467716
- POINT 2094 -12.19976115126335 12.92710572491763
- POINT 2095 -11.94436499927842 13.37375042596768
- POINT 2096 -12.45717349970925 12.47876043064897
- POINT 2097 -12.96948100660971 12.47903100666709
- POINT 2098 -13.22448228717945 12.92743126694244
- POINT 2099 -12.7156240960693 13.82239971451288
- POINT 2100 -12.97772467480737 14.26819310667658
- POINT 2101 -13.74302984524772 13.82714319818918
- POINT 2102 -13.48335862077273 13.37575933677816
- POINT 2103 -12.97102024805423 13.37575501346284
- POINT 2104 -12.66774364330618 4.523299107507239
- POINT 2105 -12.60490407255786 4.990136093565923
- POINT 2106 -12.20023269789926 4.658910900843035
- POINT 2107 -12.93462919488069 5.358202577882016
- POINT 2108 -12.47144927438711 5.488522975166397
- POINT 2109 -13.43620550685972 5.185534732811357
- POINT 2110 -14.33938229564766 7.524096539708034
- POINT 2111 -14.9111947654232 7.280162642147666
- POINT 2112 -15.24378862055976 7.682398206427763
- POINT 2113 -15.41335736818264 7.255259352596772
- POINT 2114 -15.01627536647982 8.127933305249282
- POINT 2115 -15.30010260228938 9.372269247130333
- POINT 2116 -15.02252082546601 8.964670165888624
- POINT 2117 -14.24302038469975 9.357551373852861
- POINT 2118 -14.50635377271081 9.811747310474253
- POINT 2119 -13.99000785292662 9.792863973386861
- POINT 2120 -16.10340678976494 9.787421896710498
- POINT 2121 -16.63238487037844 9.754755103146911
- POINT 2122 -16.89069641342317 10.18648047123871
- POINT 2123 -17.16253750713551 9.731246135309691
- POINT 2124 -16.60858944999246 10.6380511653244
- POINT 2125 -11.70834855106328 10.22274842325977
- POINT 2126 -11.44840726006248 10.67917056592608
- POINT 2127 -10.94524324959301 9.788054215548343
- POINT 2128 -10.68395920468744 10.24000068499402
- POINT 2129 -10.93683692235937 10.68473968678553
- POINT 2130 -11.47479555660216 8.87906931844303
- POINT 2131 -11.20910685279271 9.331122511448264
- POINT 2132 -11.46127783719861 9.774811991078451
- POINT 2133 -11.97221215426297 9.765816719159695
- POINT 2134 -12.23551219984005 9.302086962350581
- POINT 2135 -12.48258291370472 9.750023394531905
- POINT 2136 -11.99907298758307 8.856941095902805
- POINT 2137 -13.48363744127368 10.68335058227913
- POINT 2138 -12.97061921339908 10.68124949973901
- POINT 2139 -12.72223329311703 10.22272288939034
- POINT 2140 -13.73926247952205 10.23937626872396
- POINT 2141 -13.99771620268931 10.69103422356342
- POINT 2142 -13.47592909151099 9.785180332102566
- POINT 2143 -12.98553333869411 9.758993132581228
- POINT 2144 -10.99496024845769 5.244137851664762
- POINT 2145 -10.72127136894942 4.813791227183295
- POINT 2146 -11.76362091609507 4.48995017920419
- POINT 2147 -11.70511237026007 4.951495769211457
- POINT 2148 -11.39311338658647 4.215969615852156
- POINT 2149 -11.89139041445578 3.919115893213245
- POINT 2150 -12.24027988776031 5.8641325949175
- POINT 2151 -11.91055476543747 5.496066110601405
- POINT 2152 -11.20040264363509 5.788708193054712
- POINT 2153 -11.44644349888066 6.284936460155964
- POINT 2154 -11.47394298363328 5.327105388962559
- POINT 2155 -12.58774158616357 7.077264164985817
- POINT 2156 -12.04126943591853 7.115558718704478
- POINT 2157 -11.99490361784541 6.277557986686686
- POINT 2158 -12.55579812679505 6.270014851251677
- POINT 2159 -12.88263830348879 6.618639040367921
- POINT 2160 -11.7619617379154 6.690818716490142
- POINT 2161 12.04126828125696 7.115556461827698
- POINT 2162 11.49280873218955 7.122935250752073
- POINT 2163 11.76196034822392 6.690816131315052
- POINT 2164 11.49828322279317 7.993966546699665
- POINT 2165 12.0225605432701 7.971838012441538
- POINT 2166 12.88263546208822 6.61863544281538
- POINT 2167 13.12801043982883 6.205208828783831
- POINT 2168 12.55579487503194 6.270010728359129
- POINT 2169 13.69336976028337 6.949530619644269
- POINT 2170 13.96433801939816 6.375677941228949
- POINT 2171 13.62552731853477 6.037014047096381
- POINT 2172 14.13907079774611 5.854800214333848
- POINT 2173 11.99490119766059 6.277554553029752
- POINT 2174 11.44644164859318 6.284933341954128
- POINT 2175 11.20040012011418 5.788704856543246
- POINT 2176 11.91055022392465 5.49606120424435
- POINT 2177 12.2402761754012 5.864127938998204
- POINT 2178 11.47393849027101 5.327100831915041
- POINT 2179 9.945582057420673 6.181899969396367
- POINT 2180 10.20212439794679 5.720745644346648
- POINT 2181 9.928434604118719 5.290398733084792
- POINT 2182 8.556931258789588 2.528832819977453
- POINT 2183 8.146974075985931 2.334700766962239
- POINT 2184 8.559631278214885 1.92425070776564
- POINT 2185 15.01627398335804 8.127930948668869
- POINT 2186 15.51318585031227 8.107366722466351
- POINT 2187 15.56325582361871 8.960502416532755
- POINT 2188 15.81287665995519 8.510131175388402
- POINT 2189 16.04544432483895 8.060832677422217
- POINT 2190 14.75328392450536 8.510740088180491
- POINT 2191 13.08140472470578 7.902147488418196
- POINT 2192 13.39847454267256 7.408156657639373
- POINT 2193 13.15995580927431 7.012459581235187
- POINT 2194 12.58774024447741 7.077261480810485
- POINT 2195 12.31858862844304 7.509380600247505
- POINT 2196 12.56903250649056 7.933543031424325
- POINT 2197 10.94524346823205 9.788053798414385
- POINT 2198 11.20910703176076 9.331121907385405
- POINT 2199 10.95876112935163 8.892310914863021
- POINT 2200 10.43863740166071 8.90091810703888
- POINT 2201 10.70432605267283 8.448864704310473
- POINT 2202 10.17836257478566 9.351235759588613
- POINT 2203 9.923927498106863 8.907789549036064
- POINT 2204 10.43178843022046 9.796310885123368
- POINT 2205 9.917078526666614 9.803182327120552
- POINT 2206 10.683959420113 10.24000036594633
- POINT 2207 0.4257056342687726 0.4866078143970918
- POINT 2208 0.4258045314381747 0.00453325099778762
- POINT 2209 -8.556941856736707 2.528837422625263
- POINT 2210 -8.610159650802313 3.016790167285516
- POINT 2211 -8.395989123541707 3.439640495050862
- POINT 2212 -8.14698450737254 2.334704873539675
- POINT 2213 -7.792710741676334 2.625579213893601
- POINT 2214 -8.55964628277413 1.924257823018384
- POINT 2215 -9.473525601179848 4.277847459291598
- POINT 2216 -8.926778041898604 4.355756346121653
- POINT 2217 -9.691050900332758 4.805957037797565
- POINT 2218 -9.956516850290052 4.316937828288013
- POINT 2219 -8.686199335312255 4.812171506430753
- POINT 2220 -8.404917725988305 4.401061183751255
- POINT 2221 -9.445445922262575 5.251310504414456
- POINT 2222 -10.19419874351271 3.913941535915821
- POINT 2223 -10.41172404266562 4.442051114421789
- POINT 2224 -10.95895326217208 4.410794934811104
- POINT 2225 -11.08356606030267 3.84422950309065
- POINT 2226 -10.65318906962747 3.557421534579559
- POINT 2227 -11.09105814178689 3.357030647526714
- POINT 2228 -9.694219594930232 6.638197533051649
- POINT 2229 -9.431468981222594 6.192050880977571
- POINT 2230 -0.7570180027335149 9.832621255886785
- POINT 2231 -0.5048693800457256 10.28178717573282
- POINT 2232 -0.2521485634907947 9.832463971555836
- POINT 2233 -6.855131749277465 1.732845876664869
- POINT 2234 -6.972438504319116 2.219795679489987
- POINT 2235 -6.414622035057123 1.574492892908077
- POINT 2236 -6.765669841096464 1.179115021389632
- POINT 2237 -1.004871482698477 7.572984637225677
- POINT 2238 -1.257490486514399 8.028793797334046
- POINT 2239 -0.7545338586426834 8.025313601582315
- POINT 2240 -1.762470594293599 8.030999493773637
- POINT 2241 -1.512132970237805 8.483328458130275
- POINT 2242 -1.229222734249484 3.387837151439014
- POINT 2243 -0.9842473157104142 3.857601341818763
- POINT 2244 -2.760974422104667 6.228081510033119
- POINT 2245 -2.253497692870489 6.221058881823054
- POINT 2246 -2.513284803608339 6.678759929530004
- POINT 2247 -2.22068215594449 0.1236680774559861
- POINT 2248 -1.893412282768675 0.5757529280991733
- POINT 2249 -0.7618927259509458 1.458040956527683
- POINT 2250 -0.514627501401715 0.975189189825712
- POINT 2251 -0.9403354900406863 0.5067124244511273
- POINT 2252 -1.391489330979924 0.5361655784306855
- POINT 2253 -1.302907496264832 0.04248432242006185
- POINT 2254 -1.531173210898604 1.03488105453053
- POINT 2255 -1.759815051157529 1.526429257888473
- POINT 2256 -1.982161883684216 2.023903928033029
- POINT 2257 -0.9905345662098708 1.949589159885626
- POINT 2258 -1.233845294320426 2.439552824859994
- POINT 2259 -1.257892099368779 1.486841908219986
- POINT 2260 -4.253221810686109 1.820570946531706
- POINT 2261 -4.758491289411085 1.8896992927888
- POINT 2262 0.9403284851173297 39.49328748546868
- POINT 2263 1.302900066834092 39.9575161643721
- POINT 2264 0.4257054490154915 39.51339213116585
- POINT 2265 0.4258043460689575 39.99546675296004
- POINT 2266 0.7378421542620126 37.58924786878497
- POINT 2267 1.23384172418566 37.56044672587291
- POINT 2268 0.4905764528571049 37.11107417865601
- POINT 2269 -0.2485634106147014 34.74540615296891
- POINT 2270 -0.4944721332766874 35.20892213996861
- POINT 2271 -0.7430353076084667 34.7387144383873
- POINT 2272 0.248563135802923 34.74540613716317
- POINT 2273 -3.852885629984648e-08 34.27519843558186
- POINT 2274 -0.984247561800016 36.14239856410436
- POINT 2275 -0.7361813987894855 36.62952013242423
- POINT 2276 -0.2456036251004044 36.64131010369253
- POINT 2277 -0.7400749794124697 35.68099320876465
- POINT 2278 -1.233116612657999 35.66363578072671
- POINT 2279 -0.2456030824187044 35.68768492334626
- POINT 2280 -0.5050495520169673 27.93392892167996
- POINT 2281 -0.2524953199740186 28.37907783165175
- POINT 2282 -0.7575449060331049 28.37910298308664
- POINT 2283 0.5049254003565739 26.16245156440273
- POINT 2284 0.2524838536841221 26.60459196252057
- POINT 2285 0.7574092359319105 26.60463622076165
- POINT 2286 1.262484608430572 26.60474311400658
- POINT 2287 1.010043061758121 27.04688351212442
- POINT 2288 1.767930132642603 27.49060027590907
- POINT 2289 2.02050092362578 27.04726519540428
- POINT 2290 2.2733126220116 27.490875065944
- POINT 2291 4.294356946623791 24.8410616389421
- POINT 2292 4.547087505439189 24.40041073521517
- POINT 2293 4.800380884839186 24.84120087084955
- POINT 2294 4.293926155091318 23.96024866126563
- POINT 2295 4.799950093306713 23.96038789317308
- POINT 2296 3.788414878485399 23.96059221848699
- POINT 2297 4.041277466352923 23.5205693764449
- POINT 2298 1.514809999556898 24.40061413188652
- POINT 2299 1.767492707689488 23.96146212230959
- POINT 2300 1.262539709988568 23.9615922644941
- POINT 2301 7.321627964579404 38.17042681938287
- POINT 2302 7.793206680574138 37.97435229673911
- POINT 2303 7.678404262385088 38.46732542318286
- POINT 2304 6.972433698867157 37.78020975935011
- POINT 2305 6.855127394446583 38.26716082157134
- POINT 2306 6.414615189107867 38.42551451657923
- POINT 2307 6.765662894204413 38.82088748771397
- POINT 2308 5.835924386613025 31.06356123096226
- POINT 2309 6.346618511134158 31.06677866630198
- POINT 2310 6.088630850338571 30.61808479345149
- POINT 2311 5.582224837246878 31.5099791769925
- POINT 2312 10.95894851210964 35.58920884422533
- POINT 2313 11.39310711972735 35.78403513220901
- POINT 2314 10.72126794961869 35.18621162434592
- POINT 2315 10.41172000961541 35.55795193531766
- POINT 2316 10.44772930264001 34.72460793267786
- POINT 2317 10.99495780513424 34.75586484158553
- POINT 2318 9.020612145212025 37.38901099607349
- POINT 2319 9.424228545153195 37.64040579751443
- POINT 2320 9.474330615488972 37.14661597391932
- POINT 2321 8.40491449200708 35.59893959494738
- POINT 2322 8.926774996129321 35.64424422876988
- POINT 2323 8.686196885775953 35.18782930360295
- POINT 2324 8.152785656806662 36.06385741842882
- POINT 2325 7.912207546453292 35.6074424932619
- POINT 2326 9.956512910039363 35.68306455775935
- POINT 2327 9.473521881426226 35.72215416875295
- POINT 2328 9.691048418511331 35.19404432643185
- POINT 2329 10.19419347253031 36.08606177763876
- POINT 2330 9.192239487657353 36.13326446009738
- POINT 2331 9.406409183385882 36.55611572705381
- POINT 2332 8.859662298088979 36.47820578707073
- POINT 2333 10.19797450918269 36.5676960857483
- POINT 2334 9.806907805057346 36.80167464694597
- POINT 2335 10.26856200452538 37.16265232046304
- POINT 2336 6.871912061838399 35.54333618666676
- POINT 2337 7.405021657601408 35.59824784517664
- POINT 2338 7.126969115489866 36.01744865823345
- POINT 2339 7.657150492801826 35.13333002169522
- POINT 2340 6.621960666341595 35.0990227984202
- POINT 2341 6.888811633623055 34.66573394307474
- POINT 2342 6.360807696014708 34.64062136788498
- POINT 2343 6.343908124230053 35.518223611477
- POINT 2344 7.402796728654058 34.67408026698564
- POINT 2345 7.141643758327172 34.21567883645042
- POINT 2346 7.909982617505943 34.68327491507089
- POINT 2347 3.322763046202144 39.2378007288512
- POINT 2348 3.15663647718721 39.74932014657087
- POINT 2349 3.813291001601433 39.15997825895766
- POINT 2350 4.091217816567636 39.57707682242515
- POINT 2351 3.510964067743604 38.72905450866509
- POINT 2352 2.255436314939442 38.42805648019456
- POINT 2353 1.982157396380489 37.97609549035852
- POINT 2354 2.749110842047252 38.36872932479956
- POINT 2355 6.081230166453511 35.97194010898045
- POINT 2356 5.818441994459794 36.44062612474002
- POINT 2357 6.331071347733141 36.43122301548313
- POINT 2358 5.320795889254486 36.4447624160653
- POINT 2359 5.570637070534115 36.904045322568
- POINT 2360 5.831278770956706 35.52762672073389
- POINT 2361 5.970382527196483 38.42268507006546
- POINT 2362 6.061700466822952 37.87411431502481
- POINT 2363 5.314747458531205 38.19213207237964
- POINT 2364 5.061201838228348 37.78945770174573
- POINT 2365 5.345229385120188 37.38973324120216
- POINT 2366 5.842875490325496 37.38559694987687
- POINT 2367 6.287108152236881 37.38842639639064
- POINT 2368 5.556022539290377 38.55085980808124
- POINT 2369 5.910327271106762 39.10675356293056
- POINT 2370 4.527223806949365e-08 28.82425190516497
- POINT 2371 0.2524954118648361 29.271311063285
- POINT 2372 -0.2524953073975582 29.27131105117846
- POINT 2373 0.7573648797635052 29.27115381803919
- POINT 2374 0.2524953992883756 28.37907784375829
- POINT 2375 2.273105925774813 30.16491138028067
- POINT 2376 1.767218293970705 30.16613550136842
- POINT 2377 1.515144076936485 29.71762621682329
- POINT 2378 2.526574159573979 27.93457399209241
- POINT 2379 2.779582705512834 28.37954785163075
- POINT 2380 2.273750376967278 28.37918400598714
- POINT 2381 3.286081896042008 28.37994089986349
- POINT 2382 3.033258113435307 28.82455091375822
- POINT 2383 3.538866301224259 27.9356384317024
- POINT 2384 3.792541709146731 28.38064149382986
- POINT 2385 2.779144950557156 27.49123891158762
- POINT 2386 -0.2509574395584928 32.89023083452718
- POINT 2387 -0.5001445292837633 33.34678369244119
- POINT 2388 -0.248563270487983 33.81258223243197
- POINT 2389 -0.7487078437422611 33.80939991139683
- POINT 2390 0.2485632759296414 33.81258221662623
- POINT 2391 0.7557252605028959 31.06778977059484
- POINT 2392 0.5035766139793988 31.51991170020357
- POINT 2393 0.2521487272230526 31.06882402404262
- POINT 2394 1.512133316893194 31.51667185955954
- POINT 2395 1.257490837521165 31.97120645676332
- POINT 2396 1.762471007155117 31.96900086956706
- POINT 2397 1.26052028816003 31.06697586732646
- POINT 2398 4.299971210771425 32.85149278176542
- POINT 2399 4.813858896773226 32.84793939933139
- POINT 2400 4.555689088750212 33.29824097344651
- POINT 2401 4.047040589691667 32.40376536153468
- POINT 2402 3.788870781668652 32.85406693564981
- POINT 2403 1.99779136886551 34.24333877774004
- POINT 2404 1.739534188555335 34.71160974839909
- POINT 2405 2.242930868975687 34.69789125435826
- POINT 2406 1.750101670519205 33.79266021463997
- POINT 2407 2.253498350939557 33.77894172059914
- POINT 2408 4.811613439274451 30.16570216508861
- POINT 2409 4.556608060237682 29.71849742642267
- POINT 2410 4.303205728751885 30.16454791935548
- POINT 2411 5.321476248288842 30.16725951513379
- POINT 2412 5.830756015410285 30.16946429579235
- POINT 2413 6.341450139931419 30.17268173113207
- POINT 2414 5.574295537881691 29.72185645281436
- POINT 2415 4.303354423758809 31.05895384807756
- POINT 2416 4.559517683407055 31.50692914415298
- POINT 2417 4.303319379261703 31.953673122892
- POINT 2418 4.814339322939793 31.95444722891127
- POINT 2419 3.792218950158929 31.95624727677639
- POINT 2420 3.53960420638969 31.50780686224725
- POINT 2421 3.283325416819654 31.95789910088994
- POINT 2422 18.93911406219143 18.64650935978337
- POINT 2423 19.5261405338395 18.65502620489522
- POINT 2424 19.39362763295739 15.11254594470878
- POINT 2425 18.99857188883907 15.51737654824043
- POINT 2426 19.25787290188996 16.44788794426737
- POINT 2427 18.75405232248962 16.85355794479968
- POINT 2428 19.18738723924495 16.90476516850342
- POINT 2429 18.37155330956431 16.4239303910665
- POINT 2430 18.3010676469193 16.88080761530255
- POINT 2431 18.66020366196966 15.9349676413002
- POINT 2432 19.16290621200404 15.97908962750386
- POINT 2433 19.60184782770187 16.0291610895696
- POINT 2434 17.74265060326497 16.90620537096182
- POINT 2435 18.12514961619028 17.335832924695
- POINT 2436 15.35519968440101 23.50052060043794
- POINT 2437 15.61382388545503 23.94120904958511
- POINT 2438 16.14374614558074 23.94660548122907
- POINT 2439 15.87594038737391 24.38867578503489
- POINT 2440 16.40292032494667 23.50896024931439
- POINT 2441 14.04156102276654 20.44473665232049
- POINT 2442 13.5101459043692 20.44182359619071
- POINT 2443 13.23791783332129 20.0000177682021
- POINT 2444 12.99581450514272 20.44181897368124
- POINT 2445 14.32798942893715 21.75754985993104
- POINT 2446 14.59066675027901 22.19303681739878
- POINT 2447 14.05739186853169 22.19336416533053
- POINT 2448 14.59606856183489 21.32333671296435
- POINT 2449 17.02043936108002 17.36861009534426
- POINT 2450 16.75104595303201 17.80975860309653
- POINT 2451 17.29733916448795 17.80237918810654
- POINT 2452 16.8825211737115 20.00090158182218
- POINT 2453 16.50015673941269 20.45264191937547
- POINT 2454 16.08514518550571 20.00088643540819
- POINT 2455 16.11090188810538 20.45097896467276
- POINT 2456 15.67928540345191 21.32845415312463
- POINT 2457 15.97041169404601 20.90170701865165
- POINT 2458 15.55540014013904 20.44995153468437
- POINT 2459 15.13808712838207 21.32895105033127
- POINT 2460 15.40246258575432 21.75672561479265
- POINT 2461 14.87289137953249 20.89506525129633
- POINT 2462 16.20906446251038 17.81010162569915
- POINT 2463 16.48596426591832 18.24387071846142
- POINT 2464 17.67264086770901 25.76730075340195
- POINT 2465 17.52697787020489 25.32168372621399
- POINT 2466 17.1018668450201 25.72098828977573
- POINT 2467 17.78498630795706 24.9096132943493
- POINT 2468 18.29689274451687 24.94722520315896
- POINT 2469 17.98412715958014 24.48884230766805
- POINT 2470 18.19154482344632 27.14919909897187
- POINT 2471 18.00418440385464 27.60561752382607
- POINT 2472 18.50178002760287 27.59500731331329
- POINT 2473 17.22320550548447 27.12725699911247
- POINT 2474 16.99718056314592 26.6294993269721
- POINT 2475 17.47355478486276 26.66436298910405
- POINT 2476 14.77835587396051 33.47591176927389
- POINT 2477 14.5037091327629 32.89870630528225
- POINT 2478 14.20286679509669 33.2286249931342
- POINT 2479 14.91119950175903 32.71983261654729
- POINT 2480 15.41335988088872 32.74473764552774
- POINT 2481 13.26816755360081 21.75856091096891
- POINT 2482 13.0048315681012 21.32143470787244
- POINT 2483 16.7511085267673 22.19060870549156
- POINT 2484 16.20887687158396 22.19021726809433
- POINT 2485 16.17786126300281 23.06167228219098
- POINT 2486 16.69915194428762 23.07149378572608
- POINT 2487 16.13755756315898 24.82813436948326
- POINT 2488 16.41272816316716 25.26878389243772
- POINT 2489 15.60763530303328 24.82273793783929
- POINT 2490 15.34000798260733 25.26618804426989
- POINT 2491 15.57192146402785 25.71183427290126
- POINT 2492 15.04267696781684 25.71582579488349
- POINT 2493 19.39363952846237 24.88740687823191
- POINT 2494 18.885848220639 24.93009895932983
- POINT 2495 18.68670736901592 25.35086994601108
- POINT 2496 19.15366600169464 25.75648146541981
- POINT 2497 18.56007556635269 25.77221469844787
- POINT 2498 17.29751718982028 22.19792338787625
- POINT 2499 17.82901984993449 22.20723229864854
- POINT 2500 17.02050154539675 22.63152050098736
- POINT 2501 17.2455606073406 23.07880846811078
- POINT 2502 17.69547194751031 24.00000391993576
- POINT 2503 18.20737838407013 24.03761582874543
- POINT 2504 18.37170027960414 23.57574163654564
- POINT 2505 17.42146708911589 23.53377959693132
- POINT 2506 17.74281669022501 23.0938063121926
- POINT 2507 15.25853878864088 12.92422065523148
- POINT 2508 15.0175685566735 12.47064415693754
- POINT 2509 17.58990097002385 11.50018009270076
- POINT 2510 17.36873006000716 11.06025787356734
- POINT 2511 18.10310452692819 11.49837625079764
- POINT 2512 17.65638158620408 10.60573636868109
- POINT 2513 15.04253498339223 10.68172168255394
- POINT 2514 14.51635320344969 10.68688592002177
- POINT 2515 14.77952260731562 10.24189432870903
- POINT 2516 14.26072834128369 11.1308604785193
- POINT 2517 15.29884441434331 11.11647511404975
- POINT 2518 15.02941585016789 11.5708497790334
- POINT 2519 -5.559612278106096 22.64037941022797
- POINT 2520 -5.812595406053648 23.08012397436108
- POINT 2521 -5.306180262645629 23.08034305013044
- POINT 2522 -11.43576012403759 16.0359829772844
- POINT 2523 -10.91930130833142 16.03530291420144
- POINT 2524 -11.17839236720871 16.47753707839758
- POINT 2525 -11.95093603481484 15.1524484606076
- POINT 2526 -12.46808184577289 15.15416888873691
- POINT 2527 -11.69363999436943 15.59489173025373
- POINT 2528 -11.43396510560572 15.15130554344212
- POINT 2529 -11.95273105324672 16.03712589444988
- POINT 2530 -11.43712821990608 16.91861467088325
- POINT 2531 -10.92066940419991 16.91793460780029
- POINT 2532 -10.6635990468805 17.35875835728356
- POINT 2533 -10.40486319418314 16.91768076479789
- POINT 2534 -10.92128585029515 17.79908423287577
- POINT 2535 -10.40547964027838 17.79883038987337
- POINT 2536 -11.17515797884532 20.00000102031307
- POINT 2537 -11.43519237168078 19.55947185837874
- POINT 2538 -10.91971864863478 19.55946991621752
- POINT 2539 -17.69355183457131 26.21921688206146
- POINT 2540 -17.91957704254855 26.71697422906539
- POINT 2541 -17.47355512042661 26.66436143557672
- POINT 2542 -18.41154214164629 26.7040528116507
- POINT 2543 -18.5809866532765 26.22413096385403
- POINT 2544 -18.85906250548473 26.65851045942693
- POINT 2545 -18.58165190157233 21.78818398655776
- POINT 2546 -18.38730056826177 22.23230077017542
- POINT 2547 -18.87782301108845 22.24485568342974
- POINT 2548 -18.44846894716024 21.34055390991821
- POINT 2549 -12.97062101492125 29.31875403642425
- POINT 2550 -12.46767030297665 29.32772470608927
- POINT 2551 -12.72223548790102 29.77728049112642
- POINT 2552 -13.22907514769955 28.86709581957689
- POINT 2553 -14.51635826947124 29.31311155849969
- POINT 2554 -14.26073306937787 28.86913861906651
- POINT 2555 -14.51706009046056 28.4236684902674
- POINT 2556 -13.99842148648492 28.41952325896755
- POINT 2557 -14.7795280512982 29.75810081374213
- POINT 2558 -15.03254101741964 30.19341176913132
- POINT 2559 -14.50635783171041 30.1882502220222
- POINT 2560 -15.04254145518047 29.31827310560881
- POINT 2561 -15.56202218869213 29.32850735956158
- POINT 2562 -16.09215847892137 29.34349976240278
- POINT 2563 -15.83584752723667 29.77825476369244
- POINT 2564 -15.29885240686518 28.88351810431914
- POINT 2565 -15.56326504283053 31.03948508656246
- POINT 2566 -16.09046899946972 31.08225492312761
- POINT 2567 -16.36982582431926 30.66455001640303
- POINT 2568 -16.62469646598935 31.11842918285091
- POINT 2569 -16.10341526745587 30.2125664936679
- POINT 2570 -15.57327897722664 30.1975740908267
- POINT 2571 -15.30010875763884 30.62772349910677
- POINT 2572 -15.02252708302353 31.03532276486708
- POINT 2573 -17.36874409487987 28.93971676960333
- POINT 2574 -17.07238964582313 28.49069203988263
- POINT 2575 -16.33477468949221 28.91218584585327
- POINT 2576 -16.60860002803674 29.36193324998413
- POINT 2577 -17.13332295795837 29.38218899091014
- POINT 2578 -17.65639589526919 29.39423674904752
- POINT 2579 -16.5728923949743 28.46738370478237
- POINT 2580 -16.79406580218986 28.02745641123038
- POINT 2581 -16.05645084585894 28.44895021720102
- POINT 2582 -11.43421905289848 27.52144951460756
- POINT 2583 -11.6916320508292 27.96979564432751
- POINT 2584 -11.94478840412654 27.52156732452448
- POINT 2585 -10.92260322222589 27.52096203886612
- POINT 2586 -11.17575957552322 27.07273371906309
- POINT 2587 -14.54458520175707 20.44472116630428
- POINT 2588 -14.04156085494355 20.44473661417197
- POINT 2589 -14.25527342288196 20.00000694189264
- POINT 2590 -13.74078421360634 27.97171208992312
- POINT 2591 -13.48445719252365 28.41718221872224
- POINT 2592 -12.97143787482097 28.41928465053246
- POINT 2593 -12.71451066085117 27.96964225196112
- POINT 2594 -12.45912861602707 28.41955585281577
- POINT 2595 -16.25413008413381 27.08512273155318
- POINT 2596 -16.52070005962864 27.54827010780237
- POINT 2597 -16.0279985758462 27.54100069988094
- POINT 2598 -17.02019731047746 27.57157844290263
- POINT 2599 -17.22320594816005 27.12725546102763
- POINT 2600 -16.99718074018281 26.6294981140237
- POINT 2601 -15.51800943988496 26.61966242771222
- POINT 2602 -15.01513775921834 26.61758552880125
- POINT 2603 -15.25855691968476 27.07577642472079
- POINT 2604 -12.20839980609971 25.28942190368818
- POINT 2605 -12.46344601370725 25.73349604427731
- POINT 2606 -11.94630087233431 25.73521605642329
- POINT 2607 -12.46807352183216 24.84583381340267
- POINT 2608 -11.95092838045923 24.84755382554865
- POINT 2609 -12.98765585547731 24.84316419719443
- POINT 2610 -12.73018442983683 24.40129611905489
- POINT 2611 -13.24519821910848 25.28412915854135
- POINT 2612 -9.129651643227703 27.06523077144557
- POINT 2613 -8.876288684125369 27.50911488874473
- POINT 2614 -9.387389242004456 27.51154300998024
- POINT 2615 -11.43269449945645 25.7358488670784
- POINT 2616 -11.68774070706399 26.17992300766753
- POINT 2617 -11.43075487019097 26.62688850656359
- POINT 2618 -11.94436124306884 26.62625569590848
- POINT 2619 -10.91913903951838 26.62640103082215
- POINT 2620 -11.43575265155543 23.96401593507675
- POINT 2621 -10.91929460003396 23.9646969017269
- POINT 2622 -11.17838521827446 23.52246042867934
- POINT 2623 -11.43395834902085 24.84869716197923
- POINT 2624 -11.6936320647533 24.40510907169372
- POINT 2625 -11.9527226829938 23.96287259864617
- POINT 2626 -9.674059715189312 31.54309886182291
- POINT 2627 -9.923928805191473 31.0922115971265
- POINT 2628 -9.413784457395401 31.09278152867489
- POINT 2629 -7.33625026584593 21.32043467489033
- POINT 2630 -7.591125517743469 20.88045700659352
- POINT 2631 -7.337223839723812 20.44026648652743
- POINT 2632 -6.830512094503344 20.44026665091224
- POINT 2633 -6.575528491143303 20.88082068876169
- POINT 2634 -6.828119317097339 21.32047870894126
- POINT 2635 -7.081929718985547 21.76037960279158
- POINT 2636 -6.321207944282921 21.32076561666295
- POINT 2637 -8.865941131087769 23.08182349266286
- POINT 2638 -8.35498225184941 23.08157072480208
- POINT 2639 -8.866487325995669 23.96406401648594
- POINT 2640 -8.355738913521897 23.96328209781178
- POINT 2641 -8.611808118958542 24.40495790685818
- POINT 2642 -9.122215297035932 23.52275432385121
- POINT 2643 -9.377738307564679 23.08218960907453
- POINT 2644 -9.378284502472578 23.9644301328976
- POINT 2645 -11.43519851064686 20.44052946226004
- POINT 2646 -10.91972478760085 20.44052752009882
- POINT 2647 -10.92146522300643 21.32094671163846
- POINT 2648 -11.18084963629104 21.76061562971537
- POINT 2649 -11.43914973268702 21.32072488012269
- POINT 2650 -8.354717852301953 17.79936126551275
- POINT 2651 -8.865677316820541 17.7991080550456
- POINT 2652 -8.865604125273149 18.67950030830442
- POINT 2653 -8.354849206451807 18.67954722684985
- POINT 2654 -7.8449370799189 18.67964045894598
- POINT 2655 -7.336251432918799 18.67956409604354
- POINT 2656 -7.081931132275803 18.23961943152085
- POINT 2657 -8.09997451760549 18.23956994043947
- POINT 2658 -7.844805725769048 17.79945449760887
- POINT 2659 -8.100430139091614 16.47811947625329
- POINT 2660 -7.845750550729444 16.03722597916978
- POINT 2661 -8.355741934804009 16.03671803565851
- POINT 2662 -7.84499390774128 16.91893662122336
- POINT 2663 -7.336521112848085 16.03802299597051
- POINT 2664 -7.591832908560479 15.59662155537573
- POINT 2665 -7.081982832760588 16.47905573175917
- POINT 2666 -3.54490611780126 20.88709779020111
- POINT 2667 -3.290304169812604 21.32705841216561
- POINT 2668 -3.794349397708337 21.32485605719605
- POINT 2669 -4.07370210063638 19.99999990535588
- POINT 2670 -3.813606861772008 19.55755217403422
- POINT 2671 -3.813606786979048 20.4424476880606
- POINT 2672 -3.309561597917081 19.55534986530946
- POINT 2673 -3.544906231427986 19.11290209845403
- POINT 2674 -3.309561559083315 20.44465004303017
- POINT 2675 -2.976342896691423 37.87084587080842
- POINT 2676 -3.221425950774599 37.37975080057947
- POINT 2677 -2.526770059080721 38.86620393748946
- POINT 2678 -2.74911739425569 38.36872913844745
- POINT 2679 -3.247670177747043 38.30899320764298
- POINT 2680 -3.510972884148524 38.7290535079245
- POINT 2681 -3.738198386584258 38.23117024028548
- POINT 2682 -2.221684732532352 36.55039136936763
- POINT 2683 -2.720983152386764 36.50668992783906
- POINT 2684 -1.975649639226325 36.09501466529477
- POINT 2685 -2.229342038877392 35.61557517193711
- POINT 2686 -2.490020268553868 35.14475718983718
- POINT 2687 -2.734688313083581 35.59417021242318
- POINT 2688 -1.730981594696612 35.64560164270876
- POINT 2689 -1.486809012309066 35.18419628736905
- POINT 2690 -4.303354465001183 31.05895358128684
- POINT 2691 -4.55951779146229 31.50692884476348
- POINT 2692 -4.814374491189353 31.05972774650009
- POINT 2693 -4.303319481666954 31.95367266283595
- POINT 2694 -4.814339507855124 31.9544468280492
- POINT 2695 -3.794429959970654 31.05851674025303
- POINT 2696 -3.285536346627419 31.06016856732271
- POINT 2697 -3.539604151930885 31.5078065066199
- POINT 2698 -4.049286659697717 30.61131564198964
- POINT 2699 -3.792218904985805 31.95624679413531
- POINT 2700 -3.28332529164257 31.95789862120499
- POINT 2701 -4.047040621378638 32.40376477742103
- POINT 2702 7.293827708476641e-08 30.61670207641359
- POINT 2703 -0.2521485735852201 31.06882400602231
- POINT 2704 -0.2521485843374779 30.16753613384589
- POINT 2705 -0.7573647761819143 29.27115377417338
- POINT 2706 -0.5048694095893164 29.71821293229341
- POINT 2707 -0.757018053121834 30.16737885684081
- POINT 2708 -1.261813079214908 30.16656491069634
- POINT 2709 -1.00909225396307 30.61588811224881
- POINT 2710 -1.750101564306177 33.7926600881429
- POINT 2711 -1.247341893467582 33.80032930854107
- POINT 2712 -0.9957606346718019 34.26612784853185
- POINT 2713 -1.241669357333788 34.72964383553155
- POINT 2714 -1.739534339372401 34.71160969751359
- POINT 2715 -11.99490542589216 33.72244073919998
- POINT 2716 -12.55579994637244 33.72998392753992
- POINT 2717 -12.24028160504613 34.13586616472574
- POINT 2718 -12.58774656772219 32.92273577571433
- POINT 2719 -12.04127268056533 32.88444075338846
- POINT 2720 -12.31859548106905 32.49061802708863
- POINT 2721 -11.76196356192489 33.30918024521488
- POINT 2722 -11.49281247527174 32.87706249658918
- POINT 2723 -11.44644522059858 33.7150624824007
- POINT 2724 -10.96746234053338 33.79803021601935
- POINT 2725 -10.46487803283816 33.83310531972037
- POINT 2726 -10.71091904893609 33.33687709211661
- POINT 2727 -11.20040420450066 34.21129071000446
- POINT 2728 -11.46127976573915 30.22519151574363
- POINT 2729 -11.70834995916295 29.77725564258582
- POINT 2730 -11.97221458253263 30.23418703394924
- POINT 2731 -10.68395992686636 29.76000252533419
- POINT 2732 -10.93683718292719 29.31526402048404
- POINT 2733 -13.99001145216601 30.2071360473141
- POINT 2734 -14.24302441828744 30.64244700270329
- POINT 2735 -13.47593211929433 30.2148213247283
- POINT 2736 -12.882639952868 33.38136001505353
- POINT 2737 -13.12801613202197 33.79478544057929
- POINT 2738 -13.15996275337173 32.9875372887537
- POINT 2739 -12.56903973339889 32.06645679208884
- POINT 2740 -12.02256584624203 32.02816176976298
- POINT 2741 -8.913239817098617 31.99135920727501
- POINT 2742 -8.40158183646983 31.98514989359324
- POINT 2743 -8.652257386764454 31.53745947968953
- POINT 2744 -8.921335412563566 32.89535129795895
- POINT 2745 -8.673611325668027 33.34794371176464
- POINT 2746 -8.414840179908452 32.89164203498441
- POINT 2747 -5.072107480879501 32.40303922173636
- POINT 2748 -5.328305790674837 31.95629540366389
- POINT 2749 10.14864152241564 25.29167841478616
- POINT 2750 10.40452204895563 24.84933923994486
- POINT 2751 7.345760569471696 27.50220841755529
- POINT 2752 6.836865374418886 27.50054703680143
- POINT 2753 7.089552523791351 27.05704250164396
- POINT 2754 2.525426835782363 26.16307688713685
- POINT 2755 2.272480634611741 25.72176210905083
- POINT 2756 2.777875233522349 25.72204462651898
- POINT 2757 1.767575335564268 26.60489238751902
- POINT 2758 1.514941509738058 26.16264509615625
- POINT 2759 2.272957824933265 26.60516717755396
- POINT 2760 2.778352423843874 26.60544969502211
- POINT 2761 4.805074847682363 27.49442755495632
- POINT 2762 4.552513154400769 27.93750824958521
- POINT 2763 4.297887807610577 27.49325833103988
- POINT 2764 6.57468887445735 24.40195169880285
- POINT 2765 6.321311698834721 24.84298263597548
- POINT 2766 7.849057448689945 25.73004086883459
- POINT 2767 8.359006247967862 25.73123236418823
- POINT 2768 8.61552521165617 26.17503643791459
- POINT 2769 9.404349218168869 30.19173390211969
- POINT 2770 9.65777479999708 29.74665923251244
- POINT 2771 10.40670379081607 26.62599846740034
- POINT 2772 10.66169908791753 26.18015324950281
- POINT 2773 10.91913923802371 26.62640116557348
- POINT 2774 10.40539732837285 25.73591803949286
- POINT 2775 10.91783277558049 25.73632073766599
- POINT 2776 9.89250783475268 25.73551092662298
- POINT 2777 9.637659499680273 26.17823816723135
- POINT 2778 12.98765611516729 24.84316435404515
- POINT 2779 13.24519849159788 25.28412934430153
- POINT 2780 12.97771797713904 25.73181949643032
- POINT 2781 13.4973712688774 25.72824679366293
- POINT 2782 13.74303197345077 26.17287521768461
- POINT 2783 13.99649931993174 26.62119388701589
- POINT 2784 13.48335810089953 26.624255615123
- POINT 2785 14.0105124879096 25.72518506555582
- POINT 2786 14.53346833943965 25.71999652791481
- POINT 2787 14.76538182086017 26.16564275654618
- POINT 2788 12.97101588266317 26.6242609325337
- POINT 2789 13.22448322914414 27.07257960186498
- POINT 2790 11.18782984741558 28.86783824005193
- POINT 2791 11.44023158859328 28.42154320407505
- POINT 2792 10.92866118458883 28.41597310920991
- POINT 2793 15.8358466505693 29.77825662708678
- POINT 2794 15.57327800023705 30.19757601615488
- POINT 2795 15.03254016683603 30.19341354430916
- POINT 2796 -0.8995237521899599 19.54873467419662
- POINT 2797 -1.223665336802445 19.99999999772069
- POINT 2798 -1.340523578198245 19.5487346702835
- POINT 2799 -0.8995237451475713 20.45126532729634
- POINT 2800 -1.340523571155856 20.45126532338323
- POINT 2801 -1.523722054976781 19.10064953446878
- POINT 2802 -1.775181039070304 18.66606637620227
- POINT 2803 -1.267840977679282 18.66288618849292
- POINT 2804 -1.847863639589266 19.55191485799285
- POINT 2805 3.030578223423045 16.47865931956265
- POINT 2806 2.7786995819392 16.9173169337976
- POINT 2807 3.283887773770873 16.91774472162141
- POINT 2808 2.273605935625607 16.91641083896922
- POINT 2809 2.777737361196587 16.03895609462461
- POINT 2810 2.272576544974629 16.03887379781015
- POINT 2811 2.524923874579844 15.59959836069592
- POINT 2812 3.282925553028259 16.03938388244843
- POINT 2813 -0.7612694088495366 18.66199020272551
- POINT 2814 -1.012728392943059 18.227407044459
- POINT 2815 -0.758598544150526 17.78995693156367
- POINT 2816 -1.265170112980272 17.79085291733108
- POINT 2817 4.506764545389951 1.417895953039242
- POINT 2818 4.783535558950785 1.00631976803145
- POINT 2819 4.758484548151512 1.889696750885436
- POINT 2820 4.253215613299169 1.820569169400931
- POINT 2821 3.510966697825907 1.270945661498197
- POINT 2822 3.322764554813852 0.7621993600452871
- POINT 2823 2.853419417958452 0.6871814573462394
- POINT 2824 3.15663773239814 0.2506800547597778
- POINT 2825 2.526762781558002 1.133795733001061
- POINT 2826 0.7361792967570719 3.370479836805422
- POINT 2827 0.984246123665582 3.857601448530803
- POINT 2828 1.229220834288343 3.387837280503928
- POINT 2829 0.2456021749298 4.312315065409472
- POINT 2830 -6.12900348972989e-07 3.840243961866928
- POINT 2831 -0.2456030241048603 4.312315022444103
- POINT 2832 0.2456016322509388 3.358689814749931
- POINT 2833 0.5049285170465799 15.59922462282507
- POINT 2834 0.2524349318952632 15.15933354319677
- POINT 2835 0.7573634386942838 15.15936468952784
- POINT 2836 -0.2524349044090859 14.27853318435742
- POINT 2837 1.330778542918409e-08 14.71947361203522
- POINT 2838 0.2524349358260958 14.27853318222174
- POINT 2839 -0.2524349083399185 15.15933354533245
- POINT 2840 -0.7573634152411641 15.15936469433383
- POINT 2841 -0.5049284966536864 15.59922462549537
- POINT 2842 0.5049254022037216 13.83754849930346
- POINT 2843 0.7574092353969514 13.3953638490185
- POINT 2844 0.2524838513024543 13.39540810425898
- POINT 2845 0.7573603199205929 14.27848892698126
- POINT 2846 1.262484605133556 13.39525696279437
- POINT 2847 1.010043054232288 12.95311656774989
- POINT 2848 1.767575339991074 13.39510769916648
- POINT 2849 1.514941521155737 13.83735498043508
- POINT 2850 1.262295113836738 15.15932946063648
- POINT 2851 1.767248131092881 15.15945960799914
- POINT 2852 1.514810041101744 15.5993859165188
- POINT 2853 1.009801528685421 14.71943838100818
- POINT 2854 1.262291995063047 14.2784536980899
- POINT 2855 1.767382729920565 14.278304434462
- POINT 2856 10.41084000253686 12.48260731078788
- POINT 2857 9.899143909428762 12.48490033133931
- POINT 2858 10.15245058881716 12.93005073050543
- POINT 2859 7.613367978441445 10.26725776150029
- POINT 2860 7.865566856326732 10.71237296609314
- POINT 2861 7.872056162547818 9.817820601218891
- POINT 2862 6.840628853956597 11.61013350401928
- POINT 2863 7.350228541129577 11.60757337758872
- POINT 2864 7.602701329817169 12.05219325805719
- POINT 2865 7.859856068084092 11.60547869619642
- POINT 2866 6.584305485265666 12.05624824322372
- POINT 2867 6.331860536359608 11.61209380779351
- POINT 2868 7.345761240100929 12.4977925867857
- POINT 2869 7.855388767055443 12.4956979053934
- POINT 2870 6.836865843678177 12.49945375805594
- POINT 2871 6.328097526081189 12.50141406183017
- POINT 2872 7.089553280916451 12.94295840539215
- POINT 2873 8.370126385671387 11.60298196347085
- POINT 2874 8.117653596983795 11.15836208300238
- POINT 2875 8.375837173914027 10.70987623336757
- POINT 2876 4.295101059051913 14.27689245468694
- POINT 2877 4.801572033150954 14.27614783489993
- POINT 2878 5.054251674501884 14.71756589197868
- POINT 2879 5.308173049886577 14.27556530526172
- POINT 2880 4.041727348991283 14.71850999116095
- POINT 2881 4.800381330074277 15.15879930644609
- POINT 2882 5.3069823468099 15.15821677680788
- POINT 2883 7.849059237793011 14.26996017987809
- POINT 2884 8.103070930537744 14.71207488647675
- POINT 2885 5.815417413760485 14.27454965531052
- POINT 2886 5.562737772409555 13.83313159823176
- POINT 2887 -0.2521485527378636 8.931176099677991
- POINT 2888 -0.5035763908778745 8.480088454668433
- POINT 2889 -0.7557250243185949 8.932210406700243
- POINT 2890 -0.2509573870619522 8.024279294560063
- POINT 2891 0.2509575473889861 8.024279283349045
- POINT 2892 7.962417714058034e-08 7.56950443026293
- POINT 2893 6.593280292555939 10.27328387180388
- POINT 2894 6.335879483268245 10.7209592028273
- POINT 2895 5.830755701913942 9.830536241827216
- POINT 2896 5.574295302392639 10.27814403449093
- POINT 2897 5.321475942820628 9.832740939252627
- POINT 2898 6.341449789967948 9.827318887765713
- POINT 2899 5.062470520941847 11.17165642054254
- POINT 2900 5.317804209527402 10.72520563662399
- POINT 2901 5.827083968620716 10.72300093919858
- POINT 2902 6.079388390403009 11.16802080496036
- POINT 2903 5.823065021712079 11.61413554416479
- POINT 2904 5.315146558477212 11.61569271764991
- POINT 2905 5.567618704433812 12.05976572048306
- POINT 2906 1.26260880164937 12.50952783290288
- POINT 2907 0.7575334319127655 12.509634719127
- POINT 2908 1.515420485651163 12.06591797610076
- POINT 2909 1.767930107970686 12.50939982472365
- POINT 2910 2.779582641351243 11.62045230557948
- POINT 2911 2.526574119133528 12.06542614609067
- POINT 2912 2.273750314190195 11.62081612741035
- POINT 2913 3.538866270969666 12.06436176963468
- POINT 2914 3.284985271677322 12.50826344534523
- POINT 2915 3.286081822236629 11.62005928968668
- POINT 2916 2.273653942155398 10.72932286147457
- POINT 2917 2.52689359077933 10.28311528781965
- POINT 2918 2.021045272905355 11.17585461155564
- POINT 2919 1.76803675068764 11.62082845206683
- POINT 2920 1.262715444366323 11.62095646024605
- POINT 2921 1.010161226929193 11.17580755694835
- POINT 2922 0.7575449618927166 11.62089708098228
- POINT 2923 1.767940378652842 10.72933518613105
- POINT 2924 1.262535322656886 10.72890566637786
- POINT 2925 1.515143991906928 10.28237391629679
- POINT 2926 0.253078415467722 21.33774656433547
- POINT 2927 0.5081909984648777 20.90226741555631
- POINT 2928 -0.3913327526621082 20.45100208957463
- POINT 2929 2.734971728257651e-09 20.45100208875773
- POINT 2930 -0.39133275539708 20.0000000008169
- POINT 2931 -0.5081909870155196 20.90226741523717
- POINT 2932 0.3913327604803603 20.45100208957464
- POINT 2933 0.3913327577453886 20.0000000008169
- POINT 2934 0.2530784161400829 22.21052479098349
- POINT 2935 0.5055201289601644 22.64707892336772
- POINT 2936 -2.785590905596614 21.32882419900507
- POINT 2937 -3.03503418550369 21.76658246600001
- POINT 2938 1.770560907143734 17.79144658719761
- POINT 2939 2.024810499173619 18.22997737721628
- POINT 2940 1.775181052026418 18.66606637464487
- POINT 2941 2.280691576572412 18.66774072366555
- POINT 2942 1.265170126328186 17.79085291521534
- POINT 2943 1.012728405401115 18.22740704319246
- POINT 2944 0.7585985571016766 17.7899569302122
- POINT 2945 1.516431058844295 17.35399647421735
- POINT 2946 0.8995237605176197 19.54873467387751
- POINT 2947 1.340523588216353 19.54873466996442
- POINT 2948 1.523722067484837 19.10064953360767
- POINT 2949 1.267840990086043 18.66288618715841
- POINT 2950 0.7612694208595338 18.66199020215526
- POINT 2951 5.813248074708591 17.79940577746486
- POINT 2952 6.319914201894026 17.79970755524536
- POINT 2953 6.067133785253771 18.23927390332938
- POINT 2954 3.535574274154806 15.59970463007047
- POINT 2955 3.788415136381265 16.0394078550085
- POINT 2956 4.29392652128657 16.03975141330591
- POINT 2957 4.547087929945052 15.59958939695291
- POINT 2958 4.79995059372381 16.03961220762827
- POINT 2959 4.041277800160023 16.47943066568386
- POINT 2960 3.788433948862058 15.15930008166777
- POINT 2961 3.282944365509053 15.1592761091077
- POINT 2962 4.294357257637037 15.15893851212372
- POINT 2963 3.794349415726029 21.32485606072119
- POINT 2964 3.290304186047734 21.32705841534533
- POINT 2965 3.544906134739364 20.8870977923218
- POINT 2966 3.035034201374663 21.76658246994613
- POINT 2967 3.285878222907446 22.20420717451871
- POINT 2968 3.81360680382783 20.44244768929398
- POINT 2969 4.073702118111949 19.99999990535705
- POINT 2970 4.30904667870178 20.44244765376073
- POINT 2971 3.813606878619757 19.55755217280245
- POINT 2972 4.309046753493707 19.5575521372692
- POINT 2973 3.091725105391231 19.99999995889588
- POINT 2974 3.309561574149535 20.44465004391812
- POINT 2975 2.535961556076473 19.1072647545244
- POINT 2976 2.785591003223675 18.67117575709582
- POINT 2977 2.823024475136099 19.55534988242807
- POINT 2978 3.309561612982868 19.55534986442249
- POINT 2979 3.544906248364625 19.11290209633464
- POINT 2980 4.553342649405812 19.11635063545458
- POINT 2981 4.813437888898004 19.55879836800918
- POINT 2982 3.78894556721224 16.91866702923937
- POINT 2983 3.537066925728395 17.35732464347433
- POINT 2984 4.294456952117544 16.91901058753678
- POINT 2985 10.40485762242933 23.0823167754689
- POINT 2986 10.66359386676167 22.64123696885316
- POINT 2987 7.336519205314388 23.96197717939193
- POINT 2988 7.845748174573922 23.96277428191098
- POINT 2989 7.847092038101775 15.1545453326975
- POINT 2990 8.357041317327358 15.15335405870247
- POINT 2991 7.335858156970897 16.91917008184071
- POINT 2992 6.82740222651428 16.91959839644326
- POINT 2993 7.081982885691881 16.4790557103205
- POINT 2994 6.573652994571071 17.35977609867216
- POINT 2995 6.82753870511625 17.79964422453667
- POINT 2996 6.319777723292055 16.91966172715194
- POINT 2997 8.865603095183527 21.32049701279709
- POINT 2998 8.610566546294587 20.88042660659833
- POINT 2999 8.354847778087121 21.32045064574386
- POINT 3000 -19.49782579425925 18.2262342507611
- POINT 3001 -19.95653724886555 18.68219083235013
- POINT 3002 -19.87861801615688 17.79987597964446
- POINT 3003 -18.66020382675364 15.93496854205557
- POINT 3004 -19.16290631175541 15.97909016657372
- POINT 3005 -18.99857199443355 15.51737708814106
- POINT 3006 -17.91955297322556 13.2829594368018
- POINT 3007 -18.41152301195191 13.295877500577
- POINT 3008 -9.129653461818208 12.93477147753005
- POINT 3009 -8.876289950333131 12.49088708422035
- POINT 3010 -8.365440669810539 12.49364887761896
- POINT 3011 -8.108500589767266 12.9392481990543
- POINT 3012 -7.855388676964306 12.4956979610122
- POINT 3013 -8.361774657741075 13.38192668055925
- POINT 3014 -7.851722664894842 13.38397576395249
- POINT 3015 -4.80356472378408 18.67759654481199
- POINT 3016 -4.299173591137375 18.67635031371034
- POINT 3017 -5.054931658031134 18.23828417657461
- POINT 3018 -2.280691562830554 18.66774072586148
- POINT 3019 -2.024810485533055 18.22997737988562
- POINT 3020 -2.785590988433182 18.67117575963704
- POINT 3021 -2.535961541970431 19.1072647559537
- POINT 3022 -5.306982312776921 15.15821679877318
- POINT 3023 -5.813814758590553 15.15783103442108
- POINT 3024 -4.547087902507322 15.59958941436245
- POINT 3025 -4.293926496647592 16.03975142784848
- POINT 3026 -7.337862524706304 15.15534238385541
- POINT 3027 -7.847091962587663 15.15454536705468
- POINT 3028 -9.890905060586594 16.91769167150019
- POINT 3029 -10.147975417906 16.47686792201691
- POINT 3030 -9.122219403737819 16.47724518073061
- POINT 3031 -9.377742636906071 16.91780911523353
- POINT 3032 -9.634630413183206 17.35862195801451
- POINT 3033 -15.51798373490658 13.38033590670376
- POINT 3034 -15.01511587050028 13.38241715695336
- POINT 3035 -14.76536195414445 13.83436752674101
- POINT 3036 -11.6877451403522 13.82008259053461
- POINT 3037 -11.43269990813222 14.264155554569
- POINT 3038 -11.43075852913953 13.37311667077508
- POINT 3039 -10.91914257799354 13.37360334277097
- POINT 3040 -14.49013065771233 8.92250716809294
- POINT 3041 -13.97378473792814 8.903623831005547
- POINT 3042 -13.75932210669217 8.400895838660942
- POINT 3043 -14.48388519872614 8.085770307453599
- POINT 3044 -14.7532851786944 8.51074262304131
- POINT 3045 -14.07639210786223 7.906905857500061
- POINT 3046 -16.05643838843906 11.55103715881512
- POINT 3047 -16.33476399675755 11.08780033828979
- POINT 3048 -16.09214922620015 10.65648918306597
- POINT 3049 -15.54889503500405 11.56061276607589
- POINT 3050 11.2389936247567 7.556479722522218
- POINT 3051 10.95968569172366 7.131739392009571
- POINT 3052 10.96516018232728 8.002770687957165
- POINT 3053 10.45710182271854 7.09666523164841
- POINT 3054 10.19676557908151 7.554948702823318
- POINT 3055 9.947996817509239 7.086330070692012
- POINT 3056 10.44503645463636 8.011377880133024
- POINT 3057 9.935931449427057 8.001042719176626
- POINT 3058 9.433883059010681 7.09648042600004
- POINT 3059 9.694219302647717 6.638196954825132
- POINT 3060 9.431468298922116 6.192050324704395
- POINT 3061 8.921334355776636 7.10464922441238
- POINT 3062 9.175111870638158 7.552782340279261
- POINT 3063 9.020608292392154 2.610986790489027
- POINT 3064 9.474327155954036 2.853381851282785
- POINT 3065 9.424223358758637 2.359591439050014
- POINT 3066 8.61015283696532 3.016787348807768
- POINT 3067 9.406407135751241 3.443882765087797
- POINT 3068 14.24301966553495 9.357549438241348
- POINT 3069 14.4901295966866 8.92250482268938
- POINT 3070 15.02251965234311 8.964668030477915
- POINT 3071 14.50635307594872 9.811745665581833
- POINT 3072 15.03253485589125 9.806581428114002
- POINT 3073 15.30010149579994 9.372267151041644
- POINT 3074 1.391480458123909 0.5361652771996028
- POINT 3075 1.5311646848921 1.034881203024674
- POINT 3076 0.9403288020067619 0.5067124227468429
- POINT 3077 1.30290062382262 0.04248387209852996
- POINT 3078 0.5146184240444129 0.9751892831391331
- POINT 3079 0.7618858102185746 1.458041036081303
- POINT 3080 1.257885314814681 1.486842127641039
- POINT 3081 1.759808407924379 1.526429439176829
- POINT 3082 -7.903282532023693 3.431138862491011
- POINT 3083 -8.152789841056642 3.936144390882303
- POINT 3084 -7.405025206157284 4.401754955187759
- POINT 3085 -7.126972980823624 3.982555849504718
- POINT 3086 -6.871914937442281 4.456668046370027
- POINT 3087 -7.912211134470291 4.392559551191403
- POINT 3088 -7.657153091088949 4.866671748056711
- POINT 3089 -9.947996922680865 7.086330753741288
- POINT 3090 -10.19676544567954 7.554949393736067
- POINT 3091 -9.433883096893222 7.096480642617021
- POINT 3092 -9.935931248079878 8.001043112251882
- POINT 3093 4.527367092332923e-08 11.17574818979146
- POINT 3094 -0.252495297355625 10.7286890466501
- POINT 3095 -0.7573647365983451 10.72884633098105
- POINT 3096 -6.777768896535333 2.634657762748669
- POINT 3097 -7.244270061060128 2.731385544386314
- POINT 3098 -7.354841851407485 3.536945192983723
- POINT 3099 -6.821731582692482 3.591858284165991
- POINT 3100 -7.598041133892552 3.040441297152283
- POINT 3101 -2.770028523234636 7.135495143417519
- POINT 3102 -2.262551794000459 7.128472515207454
- POINT 3103 -2.013561812098475 7.580836281036188
- POINT 3104 -1.756818092472177 7.124101067148673
- POINT 3105 -2.268204295821881 8.035370941832417
- POINT 3106 -1.975649084420517 3.904985271154332
- POINT 3107 -2.229341417725875 4.384424847169543
- POINT 3108 -1.730981152791177 4.354398340751177
- POINT 3109 -1.233116312198353 4.336364163628327
- POINT 3110 -1.48680864550371 4.815803739643538
- POINT 3111 -0.7430351466867606 5.261285573502088
- POINT 3112 -0.494472020592799 4.791077844253667
- POINT 3113 -0.2485633623686729 5.254593855235067
- POINT 3114 -0.740074808422948 4.319006740711124
- POINT 3115 -3.989917167396486 2.240630780408752
- POINT 3116 -3.738200036941911 1.768829703597202
- POINT 3117 -3.247670870830478 1.691006496083939
- POINT 3118 -2.976342610696507 2.129153640981189
- POINT 3119 -3.734386660790618 2.660010881492179
- POINT 3120 -4.249408434534817 2.711752124426682
- POINT 3121 -6.558942474787781 3.123176139372501
- POINT 3122 -6.331073604203918 3.568786795893496
- POINT 3123 -6.287110918046769 2.611586274476174
- POINT 3124 -6.621962591182754 4.900980417645647
- POINT 3125 -6.343910365849093 4.481781311962606
- POINT 3126 1.975648595423093 36.09501468771074
- POINT 3127 1.730980862699194 35.6456016167933
- POINT 3128 2.229341421389412 35.61557529593476
- POINT 3129 1.767382707537047 25.72169563959068
- POINT 3130 2.019831105277033 25.28066337897281
- POINT 3131 1.262291980403351 25.72154636607824
- POINT 3132 1.767248087730079 24.84054044960734
- POINT 3133 2.272346014804772 24.84060691906749
- POINT 3134 1.262295090029159 24.84067059179185
- POINT 3135 -0.2524838111325409 26.60459195706799
- POINT 3136 2.444279567637153e-08 27.04677661342691
- POINT 3137 -0.2524838031658742 27.4903401891097
- POINT 3138 0.2524838616507888 27.49034019456228
- POINT 3139 -0.7575333892249605 27.4903653405446
- POINT 3140 3.788433723962699 24.84070003411083
- POINT 3141 4.041727103362698 25.28149016974522
- POINT 3142 3.283312657697288 25.72224398475948
- POINT 3143 3.030366456526666 25.28092920667346
- POINT 3144 3.789177592187962 25.72274613527788
- POINT 3145 4.295100814849055 25.72310774010915
- POINT 3146 3.536686369183645 26.16386155512341
- POINT 3147 2.272576461040474 23.96112624728912
- POINT 3148 2.020306171472144 23.5221043798967
- POINT 3149 2.273605847126488 23.08358918644693
- POINT 3150 2.778699451801812 23.08268308508446
- POINT 3151 3.030578057285068 23.52134071927124
- POINT 3152 3.283887584263749 23.08225529947948
- POINT 3153 6.82172659767877 36.40814779878537
- POINT 3154 7.35483619344178 36.46305945729526
- POINT 3155 6.558938425685055 36.87683381454495
- POINT 3156 6.777763402182511 37.36535117969289
- POINT 3157 7.244263972315331 37.26861717750442
- POINT 3158 5.845709060934203 32.8543398439479
- POINT 3159 5.327825047917067 32.84978785259251
- POINT 3160 5.587460787769149 33.29923958236787
- POINT 3161 5.07210716993828 32.40303966091142
- POINT 3162 5.839992684245366 31.95857160899264
- POINT 3163 5.328305474083631 31.9562956821724
- POINT 3164 11.7636152966602 35.51005436606592
- POINT 3165 11.89138268840086 36.08088984207926
- POINT 3166 13.96434143009819 33.62431889214255
- POINT 3167 13.62553027166024 33.96298348535633
- POINT 3168 14.13907578790397 34.14519481201172
- POINT 3169 13.6933777803736 33.05047192353857
- POINT 3170 11.47394032795509 34.67289773812949
- POINT 3171 11.20040168097641 34.21129404646143
- POINT 3172 11.44644337030582 33.71506560055828
- POINT 3173 10.96746084748497 33.79803270401432
- POINT 3174 9.928435644092694 34.70960053046583
- POINT 3175 9.445444615479557 34.74869014145943
- POINT 3176 10.20212549960824 34.27925374770544
- POINT 3177 8.55693472587436 37.47116564769411
- POINT 3178 8.610154574479843 36.98321170564777
- POINT 3179 7.792705712071077 37.37442105721501
- POINT 3180 8.146978123645237 37.66529759679247
- POINT 3181 8.559637437237384 38.07574638038857
- POINT 3182 8.395984878751314 36.56036043869134
- POINT 3183 7.903277933197526 36.56886333700585
- POINT 3184 7.59803541538643 36.95956247755778
- POINT 3185 13.23628235860721 30.68752328103807
- POINT 3186 13.02182189368296 31.19025353239009
- POINT 3187 13.39848589487437 32.59184677084766
- POINT 3188 13.08141264733925 32.09785538670456
- POINT 3189 13.15996052987587 32.98754066985602
- POINT 3190 3.734384876860566 37.33999019105068
- POINT 3191 3.989913736038182 37.75937050229219
- POINT 3192 3.738191811837065 38.23117125418775
- POINT 3193 3.247663856437776 38.30899372408128
- POINT 3194 2.976338586140713 37.87084607032222
- POINT 3195 0.7575449832500279 28.37910301124292
- POINT 3196 0.5050496180037712 27.9339289377297
- POINT 3197 1.262608818111103 27.49047225529183
- POINT 3198 1.515420516496924 27.93408212583156
- POINT 3199 0.7575334456124412 27.49036536204691
- POINT 3200 2.526893724749228 29.71688489057836
- POINT 3201 2.779450491643448 30.16459955601931
- POINT 3202 3.286497797291172 29.27075851415398
- POINT 3203 3.54071932016649 29.71695812350327
- POINT 3204 3.793978826839798 29.27114357134025
- POINT 3205 2.779998606761999 29.27036546592124
- POINT 3206 2.273654040893363 29.2706772901826
- POINT 3207 0.2509575631490233 32.89023084573768
- POINT 3208 7.962001580263944e-08 32.43049566678853
- POINT 3209 0.2509575815135437 31.97572081582519
- POINT 3210 -0.2509574211939724 31.97572080461469
- POINT 3211 0.7545341147933871 31.97468656237741
- POINT 3212 1.00487180505531 32.42701557238493
- POINT 3213 2.262552379835649 32.871528064516
- POINT 3214 2.013562317430567 32.41916421915188
- POINT 3215 1.75681859018817 32.87589931213495
- POINT 3216 2.268204796802595 31.96462962194811
- POINT 3217 2.77500339006423 31.96212582894687
- POINT 3218 3.027618133833469 32.410566243476
- POINT 3219 1.247341957495069 33.80032933334168
- POINT 3220 1.503048939569117 33.33593227620078
- POINT 3221 0.7511021544362571 32.88704853645076
- POINT 3222 0.5001446352577484 33.34678370418941
- POINT 3223 0.7487078672168751 33.80939990733931
- POINT 3224 0.9957605981669626 34.2661278457785
- POINT 3225 1.254058877164035 32.88356843083666
- POINT 3226 4.807634527403731 36.45417558306546
- POINT 3227 4.268078121334274 36.43451973236753
- POINT 3228 5.055439451329409 35.99075638523749
- POINT 3229 4.016824286852271 36.00258917550283
- POINT 3230 3.742624318707891 36.43693935563272
- POINT 3231 4.285159710652261 35.55276249892606
- POINT 3232 3.759705908025878 35.55518212219123
- POINT 3233 5.313339571489223 35.5337790049437
- POINT 3234 5.576017529265764 35.08006250744026
- POINT 3235 4.800178209638467 35.54319217194386
- POINT 3236 4.543059830812075 35.09578511863226
- POINT 3237 6.593280538182253 29.7267168205935
- POINT 3238 6.845584839365598 29.28169702003494
- POINT 3239 6.335879606186479 29.27904143291438
- POINT 3240 6.851155373110538 30.17533731825264
- POINT 3241 7.361674109424366 30.17880960428335
- POINT 3242 7.109843711173534 30.62477451482192
- POINT 3243 7.613368231755042 29.73274323698628
- POINT 3244 7.872056569818037 30.18218043355557
- POINT 3245 3.794429966540387 31.05851703304998
- POINT 3246 4.049286650570231 30.61131584299384
- POINT 3247 3.794281271533463 30.1641111043279
- POINT 3248 3.033012443010421 30.61175253684394
- POINT 3249 3.285536433201112 31.06016885716353
- POINT 3250 3.286800241984837 30.16372604714163
- POINT 3251 19.49782570706544 18.22623423316451
- POINT 3252 19.95653726784996 18.68219111832597
- POINT 3253 18.58166017353374 18.21127385550157
- POINT 3254 18.44873815733738 18.65901810939465
- POINT 3255 17.82900842060782 17.79250664273356
- POINT 3256 17.55961501255982 18.23365515048583
- POINT 3257 18.38742546426215 17.76710888707429
- POINT 3258 18.87780136911621 17.75460013746301
- POINT 3259 17.52690217883121 14.67823772169018
- POINT 3260 17.21413812833305 15.13667453160922
- POINT 3261 17.10180895186563 14.27897243895621
- POINT 3262 16.61643123646513 14.28454314481263
- POINT 3263 16.41267770706892 14.73120621263948
- POINT 3264 16.07296510477975 14.29114476438398
- POINT 3265 14.25527356652689 20.00000694342845
- POINT 3266 14.54458535674566 20.44472120503738
- POINT 3267 15.08660392329284 20.4503355424043
- POINT 3268 15.22709411735221 19.99960748842541
- POINT 3269 14.54446737878539 19.55524897689899
- POINT 3270 14.04144304480628 19.5552644241821
- POINT 3271 15.12585065643982 22.18962336947886
- POINT 3272 15.66704893150966 22.18912647227221
- POINT 3273 15.93226494226947 22.62311502278055
- POINT 3274 15.63603332292851 23.06058148636886
- POINT 3275 15.10960336366766 23.06196334102751
- POINT 3276 14.85525309603435 22.62543767487836
- POINT 3277 15.07838610348047 15.1733118594097
- POINT 3278 15.60761466098593 15.17729090093799
- POINT 3279 15.33998301787808 14.73382879068254
- POINT 3280 14.82036766750458 15.61339008097941
- POINT 3281 15.08744436360368 16.05749207836569
- POINT 3282 14.56179428451994 16.05410818967995
- POINT 3283 14.55273602439673 15.16992797072396
- POINT 3284 15.87591227598083 15.61135500755215
- POINT 3285 16.13750919037845 15.17187193882498
- POINT 3286 16.68097532206382 15.16527031925363
- POINT 3287 16.93896961164258 15.57734025779473
- POINT 3288 17.24542059267814 16.921237054667
- POINT 3289 17.42133862340716 16.46621174527455
- POINT 3290 16.6991273812222 16.92861646965699
- POINT 3291 17.19812051536607 16.01499394956502
- POINT 3292 16.66495770909684 16.04358973720944
- POINT 3293 16.50011603657139 19.55060584927988
- POINT 3294 16.11086118526408 19.54894289457717
- POINT 3295 16.23490740586323 18.67143802475644
- POINT 3296 16.77688889638486 18.67109500215383
- POINT 3297 16.90823717346987 19.54895804099115
- POINT 3298 15.66731510254423 17.81120259941419
- POINT 3299 15.93239678965792 17.3770904840493
- POINT 3300 15.12588811735991 17.81032407015078
- POINT 3301 15.40255579021237 18.24333521180063
- POINT 3302 14.85535684791786 17.37460770073489
- POINT 3303 15.10975920515541 16.93820082241529
- POINT 3304 14.5744686233815 16.93461706538583
- POINT 3305 14.59059753558601 17.80674031312132
- POINT 3306 16.79406525039852 28.02745799197655
- POINT 3307 17.07238886613754 28.4906939788942
- POINT 3308 16.57289177244715 28.46738533203519
- POINT 3309 17.4965710356451 27.60644365003999
- POINT 3310 17.80117571229844 28.04994051262165
- POINT 3311 17.02019681392827 27.57157998790804
- POINT 3312 16.52069972023788 27.54827134104903
- POINT 3313 17.58991650606833 28.49979170459397
- POINT 3314 18.10312000032976 28.50159082583126
- POINT 3315 18.41154163693258 26.70405457720359
- POINT 3316 18.5809862969927 26.22413241238169
- POINT 3317 18.8590620588132 26.65851173471512
- POINT 3318 17.91957654068757 26.71697613947613
- POINT 3319 17.69355159834902 26.21921846733577
- POINT 3320 18.11866262353381 25.81991390377403
- POINT 3321 16.25412989716249 27.08512372750859
- POINT 3322 16.02799833363274 27.5410017315771
- POINT 3323 12.4713348273634 20.44086210014538
- POINT 3324 12.74356289841131 20.88266792813398
- POINT 3325 12.48035189032188 21.32047783433658
- POINT 3326 11.9561289915379 23.08041192363828
- POINT 3327 12.47539190118238 23.07854903560531
- POINT 3328 12.21410635583005 23.51991665586499
- POINT 3329 11.69840716659313 22.64001307273599
- POINT 3330 13.00253570004953 22.19714775592412
- POINT 3331 13.52908269363856 22.196464052818
- POINT 3332 13.52075711029057 23.07307462590749
- POINT 3333 13.79176001498042 22.63195101028575
- POINT 3334 12.99841005278091 23.07655233280262
- POINT 3335 12.74043268848876 22.63704760057591
- POINT 3336 12.47951754845101 22.19914445872682
- POINT 3337 16.76214594331712 26.16105609261419
- POINT 3338 16.616482945813 25.71543906542623
- POINT 3339 16.07300726146418 25.70885169527617
- POINT 3340 15.7756762466737 26.15848944588978
- POINT 3341 16.01909527733369 26.61668049315067
- POINT 3342 15.51800947989736 26.61966307077576
- POINT 3343 16.51179666393882 26.6239501026226
- POINT 3344 18.1251910242728 22.66390416293884
- POINT 3345 18.38730066575757 22.23230127821533
- POINT 3346 18.87782298075228 22.24485624002787
- POINT 3347 18.30109750604809 23.11887529175939
- POINT 3348 18.75407461365194 23.14583948729189
- POINT 3349 19.25336766894756 22.67096916601431
- POINT 3350 19.18732501041783 23.0950223359802
- POINT 3351 19.76177108442964 23.07772703249995
- POINT 3352 13.22907297795537 11.13290668839839
- POINT 3353 12.97061925836632 10.68124856516747
- POINT 3354 12.46766895126554 10.67227901173746
- POINT 3355 12.97143653644138 11.58072012917699
- POINT 3356 13.4844546615271 11.58282112395052
- POINT 3357 12.45912907450942 11.5804496180641
- POINT 3358 12.71451075808115 12.03036405361623
- POINT 3359 -7.335668197682937 22.20031115705586
- POINT 3360 -7.590411055385765 22.64051999376785
- POINT 3361 -6.827537248934346 22.20035519110679
- POINT 3362 -6.573651574572926 22.64022353991485
- POINT 3363 -6.319913095875537 22.20029198565057
- POINT 3364 -5.813247200796855 22.20059393150383
- POINT 3365 -5.306832057388836 22.20081300727318
- POINT 3366 -6.067132875158276 21.76072558269578
- POINT 3367 -5.81454204920424 21.32106756251621
- POINT 3368 -5.309100236308474 21.32171516131793
- POINT 3369 -9.89088523942082 17.79886411983713
- POINT 3370 -10.14857204283547 18.23918999542934
- POINT 3371 -9.377722815740299 17.79898156357048
- POINT 3372 -9.121932143058153 18.23935021686822
- POINT 3373 -9.377649624192905 18.6793738168293
- POINT 3374 -10.66209369019408 15.59357842031993
- POINT 3375 -10.4047259333652 16.03513252143312
- POINT 3376 -9.890767799768657 16.03514342813541
- POINT 3377 -15.5551069052719 19.54892678731335
- POINT 3378 -15.97007772814454 19.09864623920131
- POINT 3379 -16.11086108382489 19.54894292435325
- POINT 3380 -15.08631065964352 19.54931079809318
- POINT 3381 -15.22709401532387 19.99960748324512
- POINT 3382 -11.95485738736122 20.44085699368801
- POINT 3383 -12.47133467813871 20.44086208506123
- POINT 3384 -12.2071089926688 20.00000805384752
- POINT 3385 -12.48035172922288 21.32047778514489
- POINT 3386 -11.95880860940138 21.32105241155066
- POINT 3387 -12.22007726579314 21.75981917179383
- POINT 3388 -11.69942419611676 20.88138349347376
- POINT 3389 -17.47644814565474 19.54717789841071
- POINT 3390 -17.94988903481506 19.54747252881383
- POINT 3391 -17.76408314933547 19.99954839206847
- POINT 3392 -18.23422300064733 19.09467791728322
- POINT 3393 -17.87676913679358 18.65944248023681
- POINT 3394 -17.09404296891593 19.09688220569864
- POINT 3395 -16.90823708343633 19.54895806895328
- POINT 3396 -19.76177103771798 23.07772732892936
- POINT 3397 -19.25336756698695 22.67096898371729
- POINT 3398 -19.18732490419377 23.0950221392252
- POINT 3399 -19.4477189002975 22.22685220009963
- POINT 3400 -19.87859220361732 22.20035725566065
- POINT 3401 -19.25792784453962 23.55188835030948
- POINT 3402 -18.75407461812375 23.14583867813167
- POINT 3403 -19.16298007020004 24.02058528839067
- POINT 3404 -19.60183463285162 23.97090406750409
- POINT 3405 -17.87637073668006 21.33989279033893
- POINT 3406 -17.34486803521384 21.33058393944672
- POINT 3407 -17.55962675727944 21.76632022241122
- POINT 3408 -17.09376266137075 20.90344544375881
- POINT 3409 -16.77701868197013 21.3298728758311
- POINT 3410 -17.4761271373948 20.45170513451989
- POINT 3411 -16.90827778415109 20.45099407090427
- POINT 3412 -17.94956802655513 20.45199976492301
- POINT 3413 -18.23371022509465 20.90481762695371
- POINT 3414 -15.02942422141325 28.42914654430462
- POINT 3415 -14.7671126385203 27.97953118420565
- POINT 3416 -15.52045268491218 27.53143128093732
- POINT 3417 -15.78702266040701 27.9945786571865
- POINT 3418 -15.54890495492492 28.43938079825739
- POINT 3419 -15.01758100424557 27.52935438202635
- POINT 3420 -14.50521687329288 27.52387632798913
- POINT 3421 -9.904430672806125 28.40707065619491
- POINT 3422 -10.41689547651911 28.41240707877134
- POINT 3423 -10.66929721457722 27.96611203768271
- POINT 3424 -10.92866096154303 28.41597287549923
- POINT 3425 -9.645779006227713 27.95898668411711
- POINT 3426 -9.392677949480536 28.4035110993572
- POINT 3427 -10.41083773720197 27.51739624213824
- POINT 3428 -9.899141965330045 27.51510256681794
- POINT 3429 -10.15244797297871 27.06995256800136
- POINT 3430 -12.99581434484171 20.4418189497832
- POINT 3431 -13.51014574115279 20.441823572053
- POINT 3432 -13.23791767975737 20.00001776749054
- POINT 3433 -13.00483139592588 21.32143464986686
- POINT 3434 -13.53137837642367 21.32075092653462
- POINT 3435 -13.26816736611243 21.75856082205582
- POINT 3436 -12.74356273953413 20.88266788962369
- POINT 3437 -13.79945752002789 20.88653779646463
- POINT 3438 -14.06279349021444 21.32366396865359
- POINT 3439 -13.00253550757575 22.19714766326392
- POINT 3440 -13.52908248807354 22.19646393993168
- POINT 3441 -16.2347869870319 21.3294814436242
- POINT 3442 -16.48589236087499 21.75661993931211
- POINT 3443 -12.19975810951217 27.07290291179299
- POINT 3444 -12.4571711074429 27.52124904151294
- POINT 3445 -12.9694803662368 27.52097783922964
- POINT 3446 -12.45674394638519 26.62593741289694
- POINT 3447 -13.99578690627322 27.52331351175184
- POINT 3448 -14.24625527199849 27.07313670957253
- POINT 3449 -13.48182261231196 27.52097247150653
- POINT 3450 -13.22448305890368 27.07257926105835
- POINT 3451 -16.51179676394965 26.62394911594787
- POINT 3452 -16.76214593621621 26.16105509049696
- POINT 3453 -16.01909528016721 26.61667970802645
- POINT 3454 -15.77567611970079 26.15848881210691
- POINT 3455 -16.6164827210978 25.71543822133669
- POINT 3456 -17.10186669733096 25.72098721941252
- POINT 3457 -14.2878073219469 25.27536783225349
- POINT 3458 -14.55271790511985 24.83011743787473
- POINT 3459 -8.872303159269968 26.61976418580748
- POINT 3460 -9.383403717149058 26.62219230704299
- POINT 3461 -8.615525103211919 26.17503638397946
- POINT 3462 -8.361773029290564 26.61807484838205
- POINT 3463 -6.072689306874938 27.05391647376855
- POINT 3464 -5.820129147476668 27.49712192171329
- POINT 3465 -6.32809711573065 27.4985865281558
- POINT 3466 -8.108499361881071 27.06075324214968
- POINT 3467 -7.851721305823022 26.61602544032166
- POINT 3468 -7.342393531093229 26.61452723488857
- POINT 3469 -7.595667198502723 26.17184884112093
- POINT 3470 -7.089552456771225 27.05704245715018
- POINT 3471 -6.833498349450926 26.61286585794945
- POINT 3472 -8.86778693118517 24.84742870791405
- POINT 3473 -9.124384612345526 25.29019441464502
- POINT 3474 -9.37915421259267 24.8485055322633
- POINT 3475 -8.869536282064676 25.73292165585033
- POINT 3476 -9.380903563472174 25.73399848019958
- POINT 3477 -8.359006152085271 25.7312323184249
- POINT 3478 -8.357038518711398 24.84664678923989
- POINT 3479 -10.66208748767119 24.40642264890459
- POINT 3480 -10.40472005439022 23.96486714250717
- POINT 3481 -9.890762707770147 23.96485666497387
- POINT 3482 -10.14796982013292 23.52313091779618
- POINT 3483 -9.635034736729882 24.4061663576086
- POINT 3484 -9.891632417890238 24.84893206433957
- POINT 3485 -10.91783258828627 25.73632062930466
- POINT 3486 -11.1763927535566 25.29161367806042
- POINT 3487 -10.91909643785067 24.8491689242055
- POINT 3488 -10.40452189220693 24.84933916498578
- POINT 3489 -10.14864136806972 25.29167833964048
- POINT 3490 -11.74873160124686 31.58187192779659
- POINT 3491 -11.49828734891701 32.00603316279637
- POINT 3492 -11.47479874651534 31.12093311396852
- POINT 3493 -11.99907724384035 31.14306172093513
- POINT 3494 -8.903187047443012 31.09050659247998
- POINT 3495 -8.391529066814227 31.08429727879821
- POINT 3496 -9.153056137445173 30.63961932778357
- POINT 3497 -9.398187070199079 29.29658412996691
- POINT 3498 -9.657774617851228 29.74665905739351
- POINT 3499 -8.893751625915996 30.18945879004375
- POINT 3500 -8.634397568876253 29.73884359430083
- POINT 3501 -8.383104670453044 30.18672919584575
- POINT 3502 -9.404349035868384 30.19173372623865
- POINT 3503 -9.917079129380406 30.19681959513333
- POINT 3504 -11.43712146196009 23.08138062463141
- POINT 3505 -10.92066341043863 23.08206159128155
- POINT 3506 -10.92128239036736 22.20090962423238
- POINT 3507 -11.43896690004795 22.20068779271661
- POINT 3508 -10.40485749578829 23.08231672552517
- POINT 3509 -9.890900149168209 23.08230624799187
- POINT 3510 -9.634625983220046 22.64137541680352
- POINT 3511 -10.66359373947392 22.64123692147724
- POINT 3512 -10.40547647571701 22.201164758476
- POINT 3513 -10.66371310846123 20.88088246173954
- POINT 3514 -10.40367257665969 20.44035401979257
- POINT 3515 -10.40541301206526 21.32077321133221
- POINT 3516 -9.8901701579261 20.44035371858478
- POINT 3517 -10.14618183706572 19.99999877694407
- POINT 3518 -9.634491342600295 20.88059096244695
- POINT 3519 -6.573652952599984 17.35977611294056
- POINT 3520 -6.827538661488333 17.79964423723647
- POINT 3521 -7.335669920285115 17.79968797825121
- POINT 3522 -6.827402180000886 16.91959841386031
- POINT 3523 -7.335858102257347 16.9191701018657
- POINT 3524 -7.590413254981577 17.35947930332449
- POINT 3525 -3.091725092272973 19.99999995889544
- POINT 3526 -2.823024423095185 20.44465006103595
- POINT 3527 -2.82302446192895 19.55534988331524
- POINT 3528 -2.318125036326323 19.55191484953968
- POINT 3529 -2.134926559547786 19.9999999853544
- POINT 3530 -2.359753808315156 39.37214496437061
- POINT 3531 -2.220681201259319 39.87633202954547
- POINT 3532 -2.853428424545745 39.31281750216315
- POINT 3533 -3.322774736378872 39.23779911173357
- POINT 3534 -3.813302945216087 39.15997614437607
- POINT 3535 -4.091233566165744 39.57707352541702
- POINT 3536 -4.278277613788639 39.06280534020281
- POINT 3537 -3.156650010923889 39.74931797899575
- POINT 3538 -3.033012362958341 30.6117523199572
- POINT 3539 -2.778186554918571 31.06104208632408
- POINT 3540 -2.27138793410801 31.06354594879045
- POINT 3541 -2.523911917777087 31.51196219615595
- POINT 3542 -2.019774925652819 30.61385000253146
- POINT 3543 -1.765500288511335 31.06477011236333
- POINT 3544 -2.779450402058304 30.16459938073862
- POINT 3545 -3.286800193767151 30.16372586173725
- POINT 3546 -3.794281249655442 30.16411092827807
- POINT 3547 -3.540719288755405 29.71695798905948
- POINT 3548 -4.303205754685972 30.16454776931187
- POINT 3549 -3.027617960595887 32.41056575188199
- POINT 3550 -2.775003207540966 31.96212546436659
- POINT 3551 -2.268204586730404 31.96462932683296
- POINT 3552 -2.013562100740824 32.41916396507942
- POINT 3553 -1.762470810976946 31.96900069686879
- POINT 3554 -2.77002899331762 32.86450527990432
- POINT 3555 -3.278351077419224 32.86027843674272
- POINT 3556 -2.262552160354756 32.87152776282665
- POINT 3557 -2.513285277178094 33.32124044768738
- POINT 3558 -1.512133134743765 31.51667171366356
- POINT 3559 -1.257490648754185 31.97120635191003
- POINT 3560 -0.7545339478042523 31.97468651214141
- POINT 3561 -0.5035764459107245 31.51991166117807
- POINT 3562 -0.7557251001955001 31.06778971354904
- POINT 3563 -1.260520126288574 31.06697576740457
- POINT 3564 -1.997791297947086 34.24333855669495
- POINT 3565 -2.25349817785614 33.77894139916177
- POINT 3566 -2.760975010819003 33.77191891623943
- POINT 3567 -3.011955447586298 34.2203681171806
- POINT 3568 -3.271742546908253 33.76266716570622
- POINT 3569 -2.748277227128552 34.67648604901853
- POINT 3570 -3.259044763217802 34.66723429848531
- POINT 3571 -2.242930952922364 34.69789100853247
- POINT 3572 -10.99496194121145 34.7558609147853
- POINT 3573 -11.47394482127665 34.67289318116666
- POINT 3574 -10.72127300001099 35.18620741077456
- POINT 3575 -10.447732383235 34.72460493961236
- POINT 3576 -11.39311640574461 35.78402816783584
- POINT 3577 -11.76362390176834 35.51004748537068
- POINT 3578 -11.89139445142899 36.08088113093766
- POINT 3579 -10.945244583311 30.21194894494906
- POINT 3580 -11.20910920668068 30.66888033631249
- POINT 3581 -10.95876356408719 31.10769054317395
- POINT 3582 -10.43863904361896 31.09908334789622
- POINT 3583 -10.70432858345361 31.55113612555225
- POINT 3584 -10.17836378582505 30.6487660147482
- POINT 3585 -10.43178936780789 30.20369134590305
- POINT 3586 -12.20772792247103 28.87130307528364
- POINT 3587 -11.95934239545081 29.3298295299858
- POINT 3588 -11.44840757865733 29.32083401178019
- POINT 3589 -11.18782961921505 28.86783790788402
- POINT 3590 -11.95080070850122 28.4216606767123
- POINT 3591 -11.44023135727316 28.42154286679538
- POINT 3592 -12.78538354685579 31.63539654824448
- POINT 3593 -13.08141318168281 32.09785280557013
- POINT 3594 -13.69337999756491 33.05046757946367
- POINT 3595 -14.20287042370327 33.22861936316023
- POINT 3596 -13.9643465646559 33.62431331178948
- POINT 3597 -14.50371229213761 32.89870088682812
- POINT 3598 -14.7783619362536 33.47590510864688
- POINT 3599 -14.33939456995485 32.47590094466933
- POINT 3600 -13.3984866124191 32.59184334012446
- POINT 3601 -13.61483042587599 32.16078309628009
- POINT 3602 -12.5094486201497 31.15885540730061
- POINT 3603 -12.23551576541817 30.69791659347253
- POINT 3604 -12.48258595884198 30.24998072031472
- POINT 3605 -13.02182206843361 31.19025142078188
- POINT 3606 -13.23628259023528 30.6875215539166
- POINT 3607 -13.51221751694137 31.16406269486048
- POINT 3608 -12.98553667078657 30.24101005064971
- POINT 3609 -9.935933060425999 31.99895783017763
- POINT 3610 -9.425788712629927 31.99952776172602
- POINT 3611 -9.175113162335302 32.44721817562974
- POINT 3612 -9.433884308094877 32.90351985240996
- POINT 3613 -9.947998399553743 32.91366946294919
- POINT 3614 -9.694220649782007 33.36180258527841
- POINT 3615 -5.845709714652145 32.8543394931615
- POINT 3616 -6.35943259227712 32.85785448154385
- POINT 3617 -6.099796641324188 32.4084027857334
- POINT 3618 -6.620526367917938 33.30931460020675
- POINT 3619 -6.874613294589981 32.86337789277866
- POINT 3620 -5.843830266875138 33.74469076224041
- POINT 3621 -6.366502908847091 33.75556165131462
- POINT 3622 -6.104987510117153 34.19646122458308
- POINT 3623 -6.881683611159954 33.76108506254942
- POINT 3624 -8.152299853281146 32.43384481530836
- POINT 3625 -7.904575766385607 32.88643722911405
- POINT 3626 -7.38887125499455 32.87173901043978
- POINT 3627 -7.651411581621856 33.32953623011583
- POINT 3628 -7.891317422946985 31.97994508772288
- POINT 3629 -7.127777479353732 32.42027889177689
- POINT 3630 5.815416780370211 25.7254507508302
- POINT 3631 6.068349777660536 25.28383032121751
- POINT 3632 6.322914497966334 25.72626412073013
- POINT 3633 5.813813981238598 24.84216926607556
- POINT 3634 5.054251193044102 25.28243436294704
- POINT 3635 5.306981751859498 24.8417834592201
- POINT 3636 5.559943673033683 24.40093577397807
- POINT 3637 6.584305206584972 27.94375248790075
- POINT 3638 6.331860450220269 28.38790682772228
- POINT 3639 6.840628663734527 28.38986729253429
- POINT 3640 6.328097160904627 27.49858657198942
- POINT 3641 5.31221078469278 27.49556469000557
- POINT 3642 5.057585437902588 27.05131477146023
- POINT 3643 5.817351437794507 26.61016822842614
- POINT 3644 6.072689351825773 27.05391651369978
- POINT 3645 6.325319414707275 26.61163283561645
- POINT 3646 5.82012918399186 27.49712196479911
- POINT 3647 5.567618593771634 27.9402347482952
- POINT 3648 4.047052787592788 28.82584698915801
- POINT 3649 4.29983719277504 28.38154452099692
- POINT 3650 4.807024232846825 28.38271374491336
- POINT 3651 4.301274310468107 29.2720465985073
- POINT 3652 4.809682020990673 29.27320084424044
- POINT 3653 4.549022188976916 26.16510838289133
- POINT 3654 4.802971287585841 26.60801534827591
- POINT 3655 4.296500402283245 26.6072706710264
- POINT 3656 5.310107224596258 26.60915248332515
- POINT 3657 5.56273728747776 26.16686880524183
- POINT 3658 5.308172567171963 25.72443500572921
- POINT 3659 4.801571700151651 25.72385241735866
- POINT 3660 3.790057682711869 26.60644965824722
- POINT 3661 4.044006781320794 27.04935662363181
- POINT 3662 3.284985274934477 27.49173672429433
- POINT 3663 3.031723737372097 27.04803779814592
- POINT 3664 3.284192748221195 26.60594750772882
- POINT 3665 3.791445088039201 27.4924373182607
- POINT 3666 7.595667276623683 26.1718488829917
- POINT 3667 7.339729660651949 25.72854265913015
- POINT 3668 6.831093491921173 25.72749718220235
- POINT 3669 6.578160494630848 26.16911761181503
- POINT 3670 6.833498408662114 26.61286589708867
- POINT 3671 7.342393603714925 26.61452727784253
- POINT 3672 7.851721391752919 26.61602548754698
- POINT 3673 10.16379461741962 28.8569316742142
- POINT 3674 9.910917354739734 29.30167017583803
- POINT 3675 10.42338218073125 29.30700664681063
- POINT 3676 9.398187236685452 29.296584259916
- POINT 3677 11.1763929467876 25.29161378016803
- POINT 3678 11.43269470633229 25.73584899017798
- POINT 3679 11.17575978189087 27.0727338951912
- POINT 3680 11.43421927431302 27.52144974007221
- POINT 3681 10.92260343334439 27.52096222835202
- POINT 3682 11.43075507899234 26.62688867729366
- POINT 3683 11.95934260436991 29.32983015861389
- POINT 3684 12.46767046560084 29.32772545608889
- POINT 3685 12.20772811265096 28.87130363239207
- POINT 3686 12.48258604719192 30.24998189542344
- POINT 3687 11.97221474555926 30.23418783961753
- POINT 3688 12.23551583543139 30.69791775273026
- POINT 3689 12.9694805256095 27.52097823699379
- POINT 3690 13.48182274384587 27.52097291958309
- POINT 3691 13.74078426771563 27.97171267290139
- POINT 3692 13.99578697125026 27.52331403777258
- POINT 3693 -0.2530784093217016 18.66225344208705
- POINT 3694 0.2530784208222577 18.66225344183592
- POINT 3695 6.030645871568652e-09 18.22651105844045
- POINT 3696 0.5081910055071862 19.09773258580186
- POINT 3697 -0.5081909940579249 19.09773258612098
- POINT 3698 0.3913327604803437 19.54899791355816
- POINT 3699 2.734955073611239e-09 19.54899791274126
- POINT 3700 -0.3913327526621249 19.54899791355815
- POINT 3701 3.794281045691874 9.835889181209401
- POINT 3702 3.286800036582792 9.836274197162457
- POINT 3703 2.229340800261039 4.38442472316282
- POINT 3704 1.730980420814213 4.354398366661153
- POINT 3705 1.975648040643678 3.904985248730975
- POINT 3706 5.253303014360708 1.128293718388772
- POINT 3707 5.02628530891481 0.6418891392761246
- POINT 3708 2.255436532179687 1.571943194814049
- POINT 3709 1.982157162102268 2.023904119430414
- POINT 3710 2.749111535735891 1.631270413254645
- POINT 3711 -1.254058521951619 7.116431779054716
- POINT 3712 -0.7511018940799036 7.112951583302987
- POINT 3713 -1.503048503853604 6.664068013225982
- POINT 3714 -1.997790841279557 5.756661654557217
- POINT 3715 -1.739533928644415 5.288390381777326
- POINT 3716 -2.242930398731676 5.302109189546279
- POINT 3717 -1.241669088051592 5.270356204654476
- POINT 3718 -0.9957604298274654 5.733872215635875
- POINT 3719 -1.247341652262671 6.199670785960144
- POINT 3720 -0.7487077108978402 6.190600154807756
- POINT 3721 -1.750101222783229 6.207340074054102
- POINT 3722 0.2525804711664861 16.03806627312495
- POINT 3723 0.7575089779655068 16.03809741945602
- POINT 3724 2.02030624750022 16.47789565447198
- POINT 3725 1.768522151534456 16.91607496170236
- POINT 3726 1.263131370718908 16.9154812897201
- POINT 3727 1.010191697747241 16.47724942348051
- POINT 3728 0.7581006050570804 16.91517093599549
- POINT 3729 1.767492760883478 16.03853792054329
- POINT 3730 1.262539743627335 16.03840777318063
- POINT 3731 2.020500917581566 12.9527349076961
- POINT 3732 2.27331260158336 12.50912505089398
- POINT 3733 2.779144928744407 12.50876122906312
- POINT 3734 3.031723754127154 12.95196235014854
- POINT 3735 2.778352454165535 13.39455042727942
- POINT 3736 2.272957833603747 13.3948329253368
- POINT 3737 2.525426876575043 13.8369232187498
- POINT 3738 2.777506896019309 15.1594754466739
- POINT 3739 2.272346079797352 15.15939314985943
- POINT 3740 2.019831152532347 14.71933669397711
- POINT 3741 3.030366570726561 14.7190708982712
- POINT 3742 2.272480678625036 14.27823797632229
- POINT 3743 2.777875299186825 14.27795547826491
- POINT 3744 10.93683714441736 10.68473936450384
- POINT 3745 10.42338210640577 10.69299645121282
- POINT 3746 10.16379499462924 11.14307136444035
- POINT 3747 9.91091727032488 10.69833236588283
- POINT 3748 10.41689657692929 11.58759618069605
- POINT 3749 9.904431740848405 11.59293209536606
- POINT 3750 8.383104263115078 9.813271926383957
- POINT 3751 8.131409992405931 9.367205411144512
- POINT 3752 9.398187257932385 10.70341785754419
- POINT 3753 9.657774369708918 10.25334294431667
- POINT 3754 8.893751225144806 9.810542586143804
- POINT 3755 8.634397395286692 10.26115777621818
- POINT 3756 8.886484135943755 10.70714689312742
- POINT 3757 9.13962703655972 11.15213631469359
- POINT 3758 9.404348514274115 9.808267818781912
- POINT 3759 9.153055382102501 9.360381968947689
- POINT 3760 8.872305329160442 13.38023764365699
- POINT 3761 8.361774760572246 13.38192662649333
- POINT 3762 8.108500687104918 12.93924814391208
- POINT 3763 7.851722750806532 13.38397571670315
- POINT 3764 9.129653596289845 12.93477140237956
- POINT 3765 9.383406228579656 13.37780999233429
- POINT 3766 8.365440776821156 12.49364881518358
- POINT 3767 8.880975687566195 11.60022015801457
- POINT 3768 8.623178158666493 12.04733677120861
- POINT 3769 8.876290078715968 12.4908870097273
- POINT 3770 9.387390978135182 12.48845935840459
- POINT 3771 9.645780391854883 12.04101593868705
- POINT 3772 9.392678809554825 11.59649112243135
- POINT 3773 7.336521171883755 16.03802297080912
- POINT 3774 6.828065241427138 16.03845128541167
- POINT 3775 7.5918329762552 15.59662152541176
- POINT 3776 7.845750620519943 16.03722595032059
- POINT 3777 7.337862589465587 15.15534235318604
- POINT 3778 5.057585641163165 12.94868558387678
- POINT 3779 5.310107534158264 13.39084788872668
- POINT 3780 5.817351898032172 13.38983223877548
- POINT 3781 6.07268977213729 12.94608405296639
- POINT 3782 6.325320010388582 13.38836776247147
- POINT 3783 5.312210950489913 12.50443571161929
- POINT 3784 5.820129413724779 12.50287853813417
- POINT 3785 7.339731120788066 14.27145814743096
- POINT 3786 7.595668707268915 13.82815216683726
- POINT 3787 6.578161363273717 13.83088304133535
- POINT 3788 6.833499237378835 13.38713485552626
- POINT 3789 7.342394633801588 13.38547368425602
- POINT 3790 0.252580463343477 23.08531079540609
- POINT 3791 8.162767350938793e-09 23.52306095911839
- POINT 3792 -0.2525804483660444 23.08531079452379
- POINT 3793 0.7575089608641339 23.96190261703586
- POINT 3794 1.010191668996723 23.52275060745893
- POINT 3795 0.7581005854889762 23.08482908796231
- POINT 3796 0.2525804650598689 23.96193376174162
- POINT 3797 -0.2525804466496525 23.96193376085932
- POINT 3798 0.5049285060517139 24.40077541877679
- POINT 3799 -0.5055201152249069 22.64707892226741
- POINT 3800 -0.7581005704056165 23.08482908597971
- POINT 3801 -2.280691500226466 21.33225925503491
- POINT 3802 -2.53596148453538 20.89273520120051
- POINT 3803 -2.318125017725038 20.44808511706579
- POINT 3804 -1.847863620987981 20.44808512551896
- POINT 3805 -1.523722029333108 20.89935045509462
- POINT 3806 5.812596363012457 16.91987591856731
- POINT 3807 6.066345594955665 16.47969821633841
- POINT 3808 5.052976709870697 16.47984331586753
- POINT 3809 5.306138118529179 16.03968129951453
- POINT 3810 3.790935938593665 22.20328485170038
- POINT 3811 3.537066694466712 22.64267534247436
- POINT 3812 3.788945299949968 23.08133297666114
- POINT 3813 4.294456576555887 23.08098941943979
- POINT 3814 5.814542622740053 18.67893193273223
- POINT 3815 6.321208749925488 18.67923371051273
- POINT 3816 5.56317568611094 19.11824430305507
- POINT 3817 5.309100721439222 18.67828449587171
- POINT 3818 5.55961311789328 17.35962041953518
- POINT 3819 5.306832701253025 17.79918676761919
- POINT 3820 5.306180989556889 16.91965690872165
- POINT 3821 4.547661231803737 17.3588241803909
- POINT 3822 4.799993464751521 16.91958781683539
- POINT 3823 4.801296726707842 17.79849881202905
- POINT 3824 4.295760214073866 17.79792158273044
- POINT 3825 5.054931683523153 18.23828416995873
- POINT 3826 4.80356474689404 18.67759654028158
- POINT 3827 4.299173611489742 18.6763503095416
- POINT 3828 3.290304316514962 18.67294152057774
- POINT 3829 3.035034337010901 18.23341748971889
- POINT 3830 3.285878391294609 17.79579279452859
- POINT 3831 3.790936184735975 17.79671510214655
- POINT 3832 4.04457167964008 18.2363897337847
- POINT 3833 3.794349582151851 18.67514382895771
- POINT 3834 10.40547659015908 22.20116479457716
- POINT 3835 10.92128251969344 22.20090966781737
- POINT 3836 10.14796994537765 23.52313096986383
- POINT 3837 9.8907628324997 23.96485671831825
- POINT 3838 10.40472019475341 23.96486720377927
- POINT 3839 9.890900260175624 23.08230629000788
- POINT 3840 9.378284610504384 23.96443017775849
- POINT 3841 9.377738405713401 23.08218964573298
- POINT 3842 9.634626082765084 22.64137545133806
- POINT 3843 8.099972523597952 21.7604283165895
- POINT 3844 7.844935974709012 21.32035791039074
- POINT 3845 5.052976083273045 23.52015672445931
- POINT 3846 5.306137433620915 23.96031879840885
- POINT 3847 5.812969663000015 23.9607046052643
- POINT 3848 8.610566754219654 19.11957081809886
- POINT 3849 8.86560419797468 18.67950029477104
- POINT 3850 8.354849270149012 18.67954721468524
- POINT 3851 4.553342440596749 20.88364911748843
- POINT 3852 4.813437754880869 20.4412013335515
- POINT 3853 7.59041331172436 17.35947928465035
- POINT 3854 7.84499397090196 16.91893659852759
- POINT 3855 -19.25787296088819 16.44788827908155
- POINT 3856 -19.60184782149814 16.02916106451099
- POINT 3857 -19.1873871451938 16.90476537360675
- POINT 3858 -19.76179636729207 16.92243533655163
- POINT 3859 -18.75405232838112 16.85355871501342
- POINT 3860 -17.47351228606856 13.33558852399519
- POINT 3861 -16.99713742559343 13.37046042966367
- POINT 3862 -17.69351481734877 13.78071241680643
- POINT 3863 -17.67256727113895 14.23260684746697
- POINT 3864 -17.10180880051252 14.27897349996412
- POINT 3865 -17.52690194145971 14.67823884343126
- POINT 3866 -18.11860795829596 14.17997776027357
- POINT 3867 -8.872305209312021 13.38023770553157
- POINT 3868 -8.615527284439597 13.82496527042976
- POINT 3869 -9.383406088516729 13.37781006740056
- POINT 3870 -3.29030430028144 18.67294152375674
- POINT 3871 -3.794349564136366 18.67514383248151
- POINT 3872 -4.044571659990828 18.23638973901306
- POINT 3873 -3.790936165766305 17.79671510855067
- POINT 3874 -4.295760192767313 17.79792158977951
- POINT 3875 -3.035034321141562 18.23341749366453
- POINT 3876 -4.801296702384416 17.79849882003976
- POINT 3877 -4.547661208159893 17.35882418957737
- POINT 3878 -5.306180959737993 16.91965692151171
- POINT 3879 -5.55961308673966 17.35962043087595
- POINT 3880 -5.306832673423715 17.79918677637247
- POINT 3881 -4.799993438895712 16.91958782835436
- POINT 3882 -4.294456929278608 16.9190105980941
- POINT 3883 -2.272576526046017 16.03887380690432
- POINT 3884 -2.777737341802472 16.0389561054949
- POINT 3885 -2.524923853949907 15.59959837248141
- POINT 3886 -1.009801502771103 14.71943838905496
- POINT 3887 -1.262295091084871 15.15932946921788
- POINT 3888 -1.767248108404131 15.15945961891492
- POINT 3889 -1.514810020874192 15.59938592419379
- POINT 3890 -3.788433924444957 15.15930010017922
- POINT 3891 -3.282944342657759 15.15927612630229
- POINT 3892 -3.53557425149356 15.59970464494893
- POINT 3893 -7.339731052101191 14.27145818376952
- POINT 3894 -7.595668629168774 13.82815220873106
- POINT 3895 -7.849059155801069 14.26996022049591
- POINT 3896 -7.342394561194965 13.3854737272261
- POINT 3897 -7.084485066391316 14.7143115191922
- POINT 3898 -6.829226012364133 15.15638770751324
- POINT 3899 -6.321312708705147 15.15701776202244
- POINT 3900 -6.068350603934552 14.71617011524867
- POINT 3901 -6.322915322587308 14.27373641192795
- POINT 3902 -5.815417372472714 14.27454968432659
- POINT 3903 -6.831094539759021 14.27250350742734
- POINT 3904 -6.578161308297183 13.83088307650527
- POINT 3905 -8.866490968805563 16.03593620740154
- POINT 3906 -8.611811380443392 15.59504271031803
- POINT 3907 -9.378288849377203 16.03556985539014
- POINT 3908 -9.6350393648364 15.59383445480634
- POINT 3909 -9.379158137016026 15.15149576728833
- POINT 3910 -9.89163708740748 15.1510693400336
- POINT 3911 -15.8358398935749 10.22173585196274
- POINT 3912 -15.57327200390477 9.802417738572654
- POINT 3913 -15.56201444033999 10.67148502492812
- POINT 3914 -15.03253570609934 9.806583202382573
- POINT 3915 -14.77952317432621 10.24189580191657
- POINT 3916 9.425787409990559 8.000472836505047
- POINT 3917 9.674058285545414 8.456902013814751
- POINT 3918 8.913238706756516 8.008641634917387
- POINT 3919 9.413783458670364 8.907219666364485
- POINT 3920 8.903186169541055 8.909494433726376
- POINT 3921 8.934155614066498 6.185727604037459
- POINT 3922 9.185518368839453 5.729430618608695
- POINT 3923 8.426271183269629 5.29029227071893
- POINT 3924 8.171917178443586 5.749542014684138
- POINT 3925 7.909982677729378 5.316726387461308
- POINT 3926 7.65715073777133 4.866671726394044
- POINT 3927 7.405022267322629 4.401754646811489
- POINT 3928 7.912208212106719 4.392559563913546
- POINT 3929 7.402796732945287 5.325921470359251
- POINT 3930 8.404914415163201 4.401060889634398
- POINT 3931 8.152785944714498 3.936143810051844
- POINT 3932 8.395983975566867 3.439639257034445
- POINT 3933 7.903277772510386 3.431137931313593
- POINT 3934 8.859661009169432 3.521793227546019
- POINT 3935 9.192238274352787 3.866734673314474
- POINT 3936 4.268076247259387 3.565481647629336
- POINT 3937 4.016822549239988 3.997412240786614
- POINT 3938 3.742622838171702 3.563061153758769
- POINT 3939 7.792705379504119 2.62557788257827
- POINT 3940 7.793203652127295 2.025645271244315
- POINT 3941 7.321623681205077 1.829570466086152
- POINT 3942 7.678396273741249 1.532671260083118
- POINT 3943 -9.67405808643629 8.456902308458442
- POINT 3944 -9.413783282784191 8.907219840486656
- POINT 3945 -9.425787263000267 8.000473059513219
- POINT 3946 -9.404348331955575 9.808267994664813
- POINT 3947 -9.657774187537704 10.2533431194428
- POINT 3948 -9.398187091428191 10.70341798750657
- POINT 3949 -8.886483995011314 10.70714699997187
- POINT 3950 -8.634397277109187 10.26115787334679
- POINT 3951 -8.375837072421056 10.70987630924256
- POINT 3952 -7.859855983182076 11.60547875629908
- POINT 3953 -8.117653499839879 11.15836215444448
- POINT 3954 -7.865566781937751 10.71237302781939
- POINT 3955 -7.402798620889166 5.325921535058544
- POINT 3956 -7.909984549202172 5.316726131062188
- POINT 3957 -7.91137279652743 6.215871164881401
- POINT 3958 -7.395668297048518 6.230569439935667
- POINT 3959 -7.651411014573558 6.670464686753046
- POINT 3960 -7.127776753374082 7.579721889218547
- POINT 3961 -7.388870581544597 7.128261877982224
- POINT 3962 -6.874612686924131 7.136622973043634
- POINT 3963 -7.904575081023509 7.113563602927958
- POINT 3964 -2.775002874658712 8.037874849929569
- POINT 3965 -2.523911656853837 8.48803806266702
- POINT 3966 -2.748276461706778 5.323514342820022
- POINT 3967 -2.490019549071636 4.855243070040132
- POINT 3968 -2.734687480700977 4.405830000443286
- POINT 3969 -2.221684119951277 3.449608486395616
- POINT 3970 -1.723323855016578 3.419581979977251
- POINT 3971 -1.475257769780243 2.932460366680298
- POINT 3972 -1.727946415087521 2.471297653398232
- POINT 3973 -2.223574359144033 2.516811469853332
- POINT 3974 -3.221425371391462 2.620248809612628
- POINT 3975 -3.480916638529793 3.091370153630558
- POINT 3976 -2.468657119838987 3.007906638484771
- POINT 3977 -2.720982349242926 3.493309929661852
- POINT 3978 -2.722872588435682 2.560512913119568
- POINT 3979 -5.842877759869626 2.614418369465591
- POINT 3980 -6.061704181617179 2.125899992841759
- POINT 3981 -5.97038887687998 1.577324987897494
- POINT 3982 -5.06120498229036 2.210552055587216
- POINT 3983 -5.314757330560761 1.807879325032759
- POINT 3984 -5.55603059107262 1.449150510867695
- POINT 3985 -5.910338424284915 0.8932498958018659
- POINT 3986 -5.818442258077686 3.559384883546551
- POINT 3987 -6.081231365982387 4.02806702834004
- POINT 3988 -5.831279019722861 4.472379399615662
- POINT 3989 -5.313338782452499 4.466227623547525
- POINT 3990 -5.576017782319205 4.91994190717009
- POINT 3991 -6.359431968524975 7.142146372318731
- POINT 3992 -6.620525796695491 6.690686361082408
- POINT 3993 1.233115817299789 35.66363567026767
- POINT 3994 1.486808643266108 35.18419627849168
- POINT 3995 0.4944716807918905 35.20892209325812
- POINT 3996 0.7430350528777356 34.73871437587108
- POINT 3997 1.24166914315593 34.72964380187346
- POINT 3998 1.723322487966932 36.58041769429607
- POINT 3999 1.47525558328076 37.06753926104606
- POINT 4000 1.229221132046703 36.61216257531929
- POINT 4001 1.727943080105888 37.52870184484969
- POINT 4002 2.223571255475589 37.48318802553167
- POINT 4003 2.221683046657149 36.55039137343753
- POINT 4004 -6.12911124076021e-07 36.15975594917647
- POINT 4005 0.2456022332246583 35.68768488038043
- POINT 4006 0.7400741502994709 35.68099311908834
- POINT 4007 0.9842463697325569 36.14239845738996
- POINT 4008 0.7361794650463853 36.62952002413996
- POINT 4009 0.2456016905429583 36.6413100607267
- POINT 4010 -3.793978809704677 29.27114346488373
- POINT 4011 -3.286497753816385 29.27075839834291
- POINT 4012 -4.047052767131356 28.82584690724009
- POINT 4013 -4.301274302070375 29.27204649795666
- POINT 4014 -1.010043015772705 27.0468834923308
- POINT 4015 -1.262608764623798 27.49047222490107
- POINT 4016 -1.767930085310411 27.49060023494886
- POINT 4017 -1.515420458762666 27.93408208316265
- POINT 4018 0.2524349327400771 25.72146687392503
- POINT 4019 0.7573603149878654 25.72151113216611
- POINT 4020 1.009801512786854 25.28056167560054
- POINT 4021 0.7573634246136738 24.84063535787972
- POINT 4022 0.2524349288094089 24.84066650258547
- POINT 4023 2.777737238018064 23.96104396031738
- POINT 4024 2.524923774235408 24.40040170273027
- POINT 4025 2.777506791782362 24.84052463209574
- POINT 4026 3.535574059218396 24.40029545953312
- POINT 4027 3.282925370480001 23.96061617471239
- POINT 4028 3.282944215957301 24.84072399033624
- POINT 4029 12.20022707000518 35.34109407649751
- POINT 4030 11.70510822545789 35.04850824368519
- POINT 4031 11.91055210130007 34.50393744856109
- POINT 4032 12.60489935123083 35.00986841165744
- POINT 4033 12.66773748228985 35.47670596579247
- POINT 4034 8.893751753942059 30.18945889408129
- POINT 4035 9.153056290168134 30.63961947961057
- POINT 4036 8.131410636714342 30.63279563621241
- POINT 4037 8.383104759045018 30.18672926891533
- POINT 4038 8.634397687045755 29.73884369142445
- POINT 4039 12.58774522600974 32.92273845990162
- POINT 4040 12.88263711150898 33.38136361259253
- POINT 4041 11.99490300572006 33.72244417282177
- POINT 4042 11.76196217222862 33.30918283037465
- POINT 4043 10.44503879622377 31.98862289521601
- POINT 4044 9.935933261738526 31.99895822327177
- POINT 4045 10.19676774154491 32.44505172349099
- POINT 4046 10.43863927688695 31.09908378942327
- POINT 4047 9.923929035406161 31.09221194132288
- POINT 4048 12.04127152589021 32.88444301026691
- POINT 4049 12.3185949442571 32.49062006753039
- POINT 4050 11.23899726008386 32.44352050666546
- POINT 4051 11.49281189047597 32.87706443800342
- POINT 4052 10.95968790642227 32.8682603267732
- POINT 4053 1.262715484017742 28.37904364136764
- POINT 4054 1.768036798549242 28.37917166198487
- POINT 4055 1.010161265302347 28.82419254739624
- POINT 4056 2.021045344488098 28.82414552152322
- POINT 4057 1.767940462475327 29.27066494618034
- POINT 4058 1.26253538053122 29.27109444816391
- POINT 4059 2.770029231935803 32.86450580601395
- POINT 4060 2.513285504693407 33.32124089899702
- POINT 4061 3.271742772836252 33.76266810178318
- POINT 4062 3.531281879770986 33.30800649818775
- POINT 4063 3.782262295813676 33.75645595947597
- POINT 4064 3.278351258691227 32.86027907795702
- POINT 4065 2.760975203039712 33.77191946209709
- POINT 4066 3.011955619082402 34.2203689233853
- POINT 4067 3.24336847489558 35.56418088173734
- POINT 4068 3.51170389869557 35.11435420516057
- POINT 4069 3.259044827222107 34.66723526388904
- POINT 4070 2.748277257425567 34.67648662420295
- POINT 4071 3.775382260352405 34.65823650434292
- POINT 4072 2.490020077115392 35.144757594862
- POINT 4073 2.734687809839291 35.59417066577944
- POINT 4074 2.982689819169599 36.0349985828101
- POINT 4075 5.320196103324097 34.6359031807579
- POINT 4076 5.838135302791581 34.62975089654809
- POINT 4077 5.843829338818099 33.7446915717945
- POINT 4078 5.325945325800963 33.74013958043911
- POINT 4079 6.104986270073042 34.19646204120262
- POINT 4080 6.366501732041227 33.75556204313139
- POINT 4081 7.355184469361421 29.28425732715628
- POINT 4082 7.097783537365648 28.83658193947715
- POINT 4083 7.865566929755092 29.28762815642849
- POINT 4084 7.350228293730351 28.39242759965563
- POINT 4085 19.44766038638703 17.77297915226804
- POINT 4086 19.25342567711544 17.32881418384076
- POINT 4087 19.87861805246748 17.79987630487601
- POINT 4088 19.7617964066728 16.92243558592404
- POINT 4089 18.23422309592939 19.09467776603307
- POINT 4090 17.94988909858838 19.54747247390121
- POINT 4091 17.87676920727169 18.65944226175127
- POINT 4092 17.47644822823684 19.54717784596157
- POINT 4093 17.34509995115183 18.66931480712425
- POINT 4094 17.09404309109673 19.09688211341927
- POINT 4095 14.28781180230033 14.72466403349399
- POINT 4096 14.01051623503285 14.27484065136018
- POINT 4097 14.53345889310514 14.28002636702044
- POINT 4098 14.02979336632444 15.1647422550637
- POINT 4099 9.380906978001171 14.26600341154953
- POINT 4100 9.12438810215771 14.70980710098454
- POINT 4101 15.04265771685345 14.28419049908406
- POINT 4102 14.76536214958597 13.83436711695024
- POINT 4103 15.51798377903927 13.38033526490094
- POINT 4104 15.77563980375512 13.8415064727855
- POINT 4105 15.57188627435891 14.28816954061234
- POINT 4106 15.0151159829359 13.3824166393444
- POINT 4107 14.50591715918759 13.37825250728078
- POINT 4108 14.32789030772291 18.24225940568398
- POINT 4109 14.06264433374127 18.67628429324169
- POINT 4110 14.59588283104642 18.67648157009492
- POINT 4111 14.05735903828086 17.80654303626809
- POINT 4112 15.97007787533187 19.09864616168911
- POINT 4113 15.55510702426619 19.54892674781743
- POINT 4114 15.67915324486533 18.67142187799671
- POINT 4115 15.13772625968102 18.6705433487333
- POINT 4116 14.87248028569938 19.104568236291
- POINT 4117 15.08631080741999 19.54931075553736
- POINT 4118 16.40287455364234 16.49110362272822
- POINT 4119 16.17789332204421 16.93847666340548
- POINT 4120 15.63614396207806 16.93957763712053
- POINT 4121 16.14372364991884 16.05344993095792
- POINT 4122 15.61382912052633 16.05886889307093
- POINT 4123 15.35525573754169 16.49958700177147
- POINT 4124 15.52045255096381 27.53143212489101
- POINT 4125 15.7870223740392 27.99457973843145
- POINT 4126 15.02942399137993 28.42914752056209
- POINT 4127 14.76711254324515 27.97953196141813
- POINT 4128 14.51705994325481 28.42366935023485
- POINT 4129 14.50592923991572 26.62175677982754
- POINT 4130 14.24625536736449 27.07313717726593
- POINT 4131 14.50521689123425 27.52387693058424
- POINT 4132 15.01513786829292 26.61758604679623
- POINT 4133 15.25855689895291 27.07577709405712
- POINT 4134 15.01758093935937 27.52935510091147
- POINT 4135 12.9694811665887 12.47903060881283
- POINT 4136 12.45717370465674 12.47876009769995
- POINT 4137 14.50520651711792 12.4761250777077
- POINT 4138 14.7671040812539 12.02046720497029
- POINT 4139 13.74078013085571 12.02829134523479
- POINT 4140 13.9984165723697 11.58047790445619
- POINT 4141 14.51705381061231 11.57633069980357
- POINT 4142 11.4484074904361 10.67917014008009
- POINT 4143 11.95934178620452 10.67017466538644
- POINT 4144 12.20772768780863 11.12870134727384
- POINT 4145 11.18783017672887 11.13216622534658
- POINT 4146 11.9508019094484 11.57834527171309
- POINT 4147 -6.319776468193496 23.08033815128008
- POINT 4148 -6.066344452733028 23.52030179118255
- POINT 4149 -6.827400621252306 23.08040135673631
- POINT 4150 -5.054931155474743 21.76171557577203
- POINT 4151 -4.801296232783984 22.20150105449617
- POINT 4152 -4.299173338283442 21.32364952911328
- POINT 4153 -4.044571390294786 21.76361015107778
- POINT 4154 -4.803564411703622 21.32240320854091
- POINT 4155 -9.890817652390373 18.67925530533506
- POINT 4156 -10.40541205324793 18.6792215753713
- POINT 4157 -10.66370535213654 19.1191138197801
- POINT 4158 -10.92145974258163 18.67904850987438
- POINT 4159 -10.40367095930107 19.55964298171444
- POINT 4160 -9.890168540567483 19.55964268050665
- POINT 4161 -9.634489634605369 19.11940539677126
- POINT 4162 -10.40452722022296 15.15066274552778
- POINT 4163 -10.91910259518919 15.1508331382961
- POINT 4164 -11.1763986356346 14.70838986864997
- POINT 4165 -10.91783739771569 14.26368314942298
- POINT 4166 -10.14864599240259 14.70832405800977
- POINT 4167 -12.73019529136231 15.59870134525367
- POINT 4168 -12.98766621355665 15.15683558657137
- POINT 4169 -15.04265746253503 14.28419090907873
- POINT 4170 -14.53345861723851 14.28002669541752
- POINT 4171 -17.78489628918051 15.09030875190717
- POINT 4172 -17.98400083785333 15.51100038825157
- POINT 4173 -18.29676496075896 15.05256382727852
- POINT 4174 -17.21413781855408 15.13667540440432
- POINT 4175 -18.37155338762809 16.42393112019951
- POINT 4176 -18.3010675719337 16.8808082147247
- POINT 4177 -18.20721907030622 15.96221804176685
- POINT 4178 -17.69535039872778 15.99996296639551
- POINT 4179 -11.18084802879951 18.23937671254223
- POINT 4180 -11.43914132768812 18.67926895695104
- POINT 4181 -11.43896743540164 17.79930467995242
- POINT 4182 -12.99576621508222 19.55819858351203
- POINT 4183 -13.5100976113933 19.55820320578183
- POINT 4184 -14.85535659566817 17.374607928817
- POINT 4185 -14.59059730877303 17.80674048573657
- POINT 4186 -15.12588788049639 17.81032428898499
- POINT 4187 -14.57446835462891 16.93461729113196
- POINT 4188 -15.10975892635227 16.93820109438039
- POINT 4189 -16.50015666545286 20.45264189053479
- POINT 4190 -16.08514514186547 20.00088643669584
- POINT 4191 -16.11090178453964 20.45097892630424
- POINT 4192 -16.88252114147691 20.00090158129587
- POINT 4193 -16.50011596473811 19.5506058885838
- POINT 4194 -18.66035566784347 24.06457908884339
- POINT 4195 -18.99865817957391 24.48245948801812
- POINT 4196 -18.88584837729288 24.93009825639208
- POINT 4197 -19.39363960589392 24.88740656466259
- POINT 4198 -17.82901974500803 22.20723193084345
- POINT 4199 -17.29751704354181 22.19792307995124
- POINT 4200 -18.12519085452415 22.66390362771543
- POINT 4201 -17.42146697630052 23.53377902746666
- POINT 4202 -17.69547182462984 24.00000320447274
- POINT 4203 -17.19821562645829 23.98500536439521
- POINT 4204 -18.2073784758447 24.03761507800751
- POINT 4205 -17.98412712600248 24.48884141493606
- POINT 4206 -18.37170036647084 23.57574087838007
- POINT 4207 -17.74281660287124 23.09380582796382
- POINT 4208 -17.24556040469969 23.0788079878863
- POINT 4209 -18.30109742612498 23.11887466729579
- POINT 4210 -12.74043249554734 22.63704750337856
- POINT 4211 -12.47951737358623 22.1991443855027
- POINT 4212 -11.95797425376473 22.19971901190847
- POINT 4213 -11.69840700784104 22.64001300642548
- POINT 4214 -11.95612881567687 23.08041184382327
- POINT 4215 -13.79175978718601 22.63195086063527
- POINT 4216 -14.05739164572269 22.19336401942717
- POINT 4217 -16.69915170518863 23.07149332083817
- POINT 4218 -16.17786098319811 23.06167189306724
- POINT 4219 -16.40292005613846 23.50895975961821
- POINT 4220 -16.20887664909252 22.19021698069621
- POINT 4221 -16.75110834403075 22.1906084129031
- POINT 4222 -17.02050133175934 22.63152012133533
- POINT 4223 -13.99649914138446 26.62119352777317
- POINT 4224 -14.50592910840412 26.62175634401045
- POINT 4225 -14.76538162860431 26.16564234700188
- POINT 4226 -14.53346806546978 25.71999620058877
- POINT 4227 -14.0105122342672 25.72518479387579
- POINT 4228 -15.04267671628401 25.71582538537957
- POINT 4229 -16.66503651825777 23.95642639357603
- POINT 4230 -16.14374579626725 23.9466049658051
- POINT 4231 -16.93904136658709 24.42265057058211
- POINT 4232 -16.68103287029956 24.83472097500758
- POINT 4233 -17.21421197850009 24.86329994582677
- POINT 4234 -9.637659354432278 26.17823809135695
- POINT 4235 -9.895007838390011 26.62370467699503
- POINT 4236 -10.40670361026193 26.62599835231532
- POINT 4237 -10.66169890492968 26.18015313981581
- POINT 4238 -10.40539715902982 25.73591795079784
- POINT 4239 -9.892507684713129 25.73551085015163
- POINT 4240 -3.538866270674407 27.93563837319875
- POINT 4241 -3.791445061003568 27.4924372688973
- POINT 4242 -3.284985242746421 27.49173667393181
- POINT 4243 -3.792541681848606 28.3806414211657
- POINT 4244 -4.299837174214305 28.38154445423863
- POINT 4245 -3.286081863591458 28.37994082620021
- POINT 4246 -6.578160439640206 26.16911757665643
- POINT 4247 -6.3253193653182 26.61163279891804
- POINT 4248 -5.817351397064218 26.61016819247553
- POINT 4249 -6.322914449413139 25.72626408985695
- POINT 4250 -6.831093433545865 25.72749714888835
- POINT 4251 -5.815416739071694 25.72545072182048
- POINT 4252 -6.068349732977355 25.2838302940524
- POINT 4253 -8.103068545520017 25.2879261001149
- POINT 4254 -7.847089733293389 24.84545529905903
- POINT 4255 -7.33972959193747 25.72854262281094
- POINT 4256 -7.084483601710403 25.28568913601146
- POINT 4257 -7.84905736666726 25.73004082824404
- POINT 4258 -7.337860774808862 24.84465820022065
- POINT 4259 -6.829224616417257 24.84361272629806
- POINT 4260 -7.591830748000244 24.40337888934564
- POINT 4261 -10.95968825756436 32.86825866172835
- POINT 4262 -11.2389973762048 32.44351916990193
- POINT 4263 -10.96516313120963 31.99722932793554
- POINT 4264 -10.45710394986915 32.90333376542937
- POINT 4265 -10.19676760818201 32.44505103256093
- POINT 4266 -10.4450386107414 31.98862213265781
- POINT 4267 -5.839993028780057 31.9585713890503
- POINT 4268 -5.58222505575568 31.50997899536313
- POINT 4269 -6.353715906405032 31.96208637743266
- POINT 4270 -9.890881409539208 22.20113221196177
- POINT 4271 -9.377719567935678 22.20101557304443
- POINT 4272 -9.890817945887456 21.32074066481798
- POINT 4273 -9.377648390967682 21.32062266583164
- POINT 4274 -10.14857006043265 21.76080491471691
- POINT 4275 -9.121929625682005 21.76064670155081
- POINT 4276 -3.989917438513398 37.75936920944303
- POINT 4277 -4.253220144914879 38.17942950972456
- POINT 4278 -5.0612047044748 37.78945190920187
- POINT 4279 -4.788965345375917 37.30790232371594
- POINT 4280 -5.345230853006697 37.3897257540357
- POINT 4281 -3.511703891126289 35.11435281720901
- POINT 4282 -3.775382111584034 34.65823488537108
- POINT 4283 -4.288463783602202 34.65011427144418
- POINT 4284 -4.035804655693716 34.20299575272048
- POINT 4285 -13.43620984438418 34.81446134683805
- POINT 4286 -13.29869599960812 34.31160156237819
- POINT 4287 -12.93463213128416 34.64179503997145
- POINT 4288 -13.62553600610368 33.9629776498918
- POINT 4289 -14.13908291075123 34.14518767789303
- POINT 4290 -12.60490716900593 35.00986141752851
- POINT 4291 -12.20023572325958 35.34108684648683
- POINT 4292 -12.66774772099321 35.47669756860905
- POINT 4293 -11.70511437947869 35.04850274706365
- POINT 4294 -11.9105566427679 34.50393254228281
- POINT 4295 -12.47145116324818 34.51147573062274
- POINT 4296 -9.806918774248189 36.80166842930682
- POINT 4297 -10.26857635288579 37.16264372426561
- POINT 4298 -10.1979850569437 36.56768967568621
- POINT 4299 -1.515143968311342 29.71762612467332
- POINT 4300 -1.767218169152578 30.16613538008133
- POINT 4301 -2.273105814749252 30.16491121650845
- POINT 4302 -2.526893645558062 29.71688475828849
- POINT 4303 -4.295343851645418 33.74833423033055
- POINT 4304 -3.78226217962725 33.75645484425745
- POINT 4305 -3.531281742859955 33.30800564331628
- POINT 4306 -3.788870710138221 32.85406611529395
- POINT 4307 -4.299971286819369 32.85149198399459
- POINT 4308 -10.95895536230713 35.58920341710635
- POINT 4309 -10.41172580433067 35.55794744193341
- POINT 4310 -11.08356921006429 36.15576819899469
- POINT 4311 -10.1942008448515 36.08605690473453
- POINT 4312 -9.956518482555364 35.68306089840274
- POINT 4313 -10.65319237871901 36.44257621921687
- POINT 4314 -11.0910623698248 36.64296654514917
- POINT 4315 -13.7593285339414 31.59910572962469
- POINT 4316 -13.97378905574307 31.09637586275941
- POINT 4317 -14.49013543528747 31.07749003746751
- POINT 4318 -14.0764019646777 32.09309626417902
- POINT 4319 -14.48389267802026 31.91422357801393
- POINT 4320 -14.75329172047915 31.4892516249232
- POINT 4321 -5.587461461429323 33.29923896261564
- POINT 4322 -5.325946062699384 33.7401385358841
- POINT 4323 -5.327825510476393 32.84978726680519
- POINT 4324 -4.809231792482727 33.74478093752646
- POINT 4325 -5.065600597928541 34.19023273715123
- POINT 4326 -4.555689316416261 33.29824002906342
- POINT 4327 -4.813859227656678 32.8479386911905
- POINT 4328 5.823064971458006 28.38586497473401
- POINT 4329 5.315146572158927 28.38430769994047
- POINT 4330 5.062470610533198 28.82834397135218
- POINT 4331 6.079388428607562 28.83197977936755
- POINT 4332 5.317804360302774 29.27479479926754
- POINT 4333 5.827084127424216 29.27699957992611
- POINT 4334 10.41689568078359 28.4124072611171
- POINT 4335 10.66929742196129 27.96611222514022
- POINT 4336 9.904430854792075 28.4070707901445
- POINT 4337 10.41083792953915 27.51739638025921
- POINT 4338 8.886484172763202 29.29285479615131
- POINT 4339 8.37583717786616 29.29012517098535
- POINT 4340 9.139626727505856 28.8478657394769
- POINT 4341 8.117653415472539 28.84163926115534
- POINT 4342 11.95092859671319 24.8475539406863
- POINT 4343 12.46807375787325 24.84583394788076
- POINT 4344 12.20840003869946 25.28942203987447
- POINT 4345 11.95272288103627 23.96287269629527
- POINT 4346 12.47198579068075 23.9610098082623
- POINT 4347 12.73018467318101 24.40129625485699
- POINT 4348 11.43575282852112 23.96401601812759
- POINT 4349 10.91929475924401 23.96469697384104
- POINT 4350 11.43395854419803 24.84869726251862
- POINT 4351 10.91909661344623 24.84916901000663
- POINT 4352 11.69363226337182 24.40510917052491
- POINT 4353 10.66208764636606 24.40642272229546
- POINT 4354 12.45674415720379 26.62593764544495
- POINT 4355 12.71561902895919 26.17761365870297
- POINT 4356 12.46344625167966 25.73349620934157
- POINT 4357 11.9463010905196 25.73521620214711
- POINT 4358 11.68774091931249 26.17992315964508
- POINT 4359 11.94436146317965 26.6262558892628
- POINT 4360 12.19975831688364 27.07290316309354
- POINT 4361 11.70835016186513 29.77725626131508
- POINT 4362 11.44840780891525 29.32083443761827
- POINT 4363 10.94524480188349 30.2119493620846
- POINT 4364 10.68396014223092 29.76000284437696
- POINT 4365 11.4612799501046 30.22519211862191
- POINT 4366 11.20910938557762 30.66888094038705
- POINT 4367 10.9368374049108 29.31526434275312
- POINT 4368 11.95080093219896 28.42166108213997
- POINT 4369 12.4591287934299 28.41955637961497
- POINT 4370 12.71451082664457 27.96964269203738
- POINT 4371 12.97143800709656 28.41928524228948
- POINT 4372 11.69163226937222 27.96979595129795
- POINT 4373 12.45717131194284 27.52124937431928
- POINT 4374 11.9447886179187 27.52156761813713
- POINT 4375 15.29885200343264 28.8835193357322
- POINT 4376 15.56202156575395 29.32850886335364
- POINT 4377 15.04254095371091 29.31827443700025
- POINT 4378 16.0564503860919 28.44895155360157
- POINT 4379 16.33477400183093 28.91218754051921
- POINT 4380 15.54890460342297 28.43938194691547
- POINT 4381 16.09215770029102 29.34350152581874
- POINT 4382 12.72223555131803 29.77728149733855
- POINT 4383 12.97062105959908 29.31875497111673
- POINT 4384 12.98553664119016 30.24101141045128
- POINT 4385 13.47593186273332 30.21482288295318
- POINT 4386 14.77952748380703 29.75810228782938
- POINT 4387 14.50635713461083 30.18825186751686
- POINT 4388 14.51635792148571 29.31311276020795
- POINT 4389 13.9900110158661 30.20713768228853
- POINT 4390 13.73926529844905 29.76062581170174
- POINT 4391 2.273105774761268 9.83508879984791
- POINT 4392 2.779450317637714 9.835400651617574
- POINT 4393 3.033012220564729 9.388247709190718
- POINT 4394 5.582224331984559 8.490021384452593
- POINT 4395 5.324236755485918 8.938715200324722
- POINT 4396 4.303205470450614 9.835452415437004
- POINT 4397 4.811613166163307 9.834298227553571
- POINT 4398 4.049286364268548 9.3886844889632
- POINT 4399 5.068073565684609 9.386690434889857
- POINT 4400 4.814373978828597 8.940272488625666
- POINT 4401 2.221682434110464 3.449608482318896
- POINT 4402 1.723322054663639 3.41958212581723
- POINT 4403 1.475255227755129 2.932460514091849
- POINT 4404 1.727942742988692 2.471297861599172
- POINT 4405 2.223570867244001 2.516811617236392
- POINT 4406 3.247664549616101 1.691005979661493
- POINT 4407 3.738193462327802 1.768828689718033
- POINT 4408 2.976338300237787 2.129153441474481
- POINT 4409 3.989913465089363 2.240629487564227
- POINT 4410 3.734383925154549 2.66000978424141
- POINT 4411 4.249406076125915 2.711750263924309
- POINT 4412 -0.2525804527561534 16.03806627400728
- POINT 4413 -0.7575089596573991 16.03809742300865
- POINT 4414 8.162773457165429e-09 16.47693907063823
- POINT 4415 0.5055201424216942 17.35292109533307
- POINT 4416 0.2530784214946227 17.78947522331019
- POINT 4417 0.2525804694500266 16.91468922909349
- POINT 4418 -0.2525804544726128 16.91468922997582
- POINT 4419 -0.2530784086493366 17.78947522356133
- POINT 4420 -0.5055201286865491 17.35292109643341
- POINT 4421 -0.7581005899738023 16.91517093797816
- POINT 4422 10.92866218369657 11.58403101835576
- POINT 4423 10.66929892991574 12.03389174928147
- POINT 4424 10.92260560930413 12.47904214844759
- POINT 4425 11.44023252971531 11.57846179393201
- POINT 4426 11.6916339164161 12.03021006472227
- POINT 4427 6.829226066792335 15.15638767985543
- POINT 4428 7.08448512863891 14.71431148714117
- POINT 4429 6.32291537112456 14.27373638104556
- POINT 4430 6.068350648601582 14.71617008807552
- POINT 4431 6.831094598114815 14.27250347410035
- POINT 4432 6.574690216144999 15.59804860267928
- POINT 4433 6.320151929953125 16.03908134219066
- POINT 4434 5.812970569673526 16.03929553360603
- POINT 4435 5.559944453526639 15.59906442536678
- POINT 4436 5.813814797954246 15.15783101089938
- POINT 4437 6.321312755318322 15.15701773663442
- POINT 4438 -1.775181001650297 21.33393361507919
- POINT 4439 -1.267840951818172 21.33711381294345
- POINT 4440 -2.024810422711531 21.77002261288375
- POINT 4441 -0.7585985253342913 22.21004308218826
- POINT 4442 -0.2530784032947191 22.21052479073235
- POINT 4443 -0.25307840396708 21.33774656408433
- POINT 4444 6.030698440628868e-09 21.77348895090434
- POINT 4445 -0.761269396452543 21.33800980180604
- POINT 4446 -1.012728368769732 21.77259296179061
- POINT 4447 -1.26517008069992 22.20914709332568
- POINT 4448 6.57552905270612 19.11917837703191
- POINT 4449 6.830512439734651 19.55973226747113
- POINT 4450 6.323600974440302 19.55944563035479
- POINT 4451 7.337224191221686 19.55973210309189
- POINT 4452 7.085296112955868 19.99999935641476
- POINT 4453 7.591126172197229 19.11954137608066
- POINT 4454 7.845909845418445 19.55980846502429
- POINT 4455 6.828120215219838 18.67952034762907
- POINT 4456 5.819524031753277 19.55944573980127
- POINT 4457 6.074507418781808 19.99999963024048
- POINT 4458 5.819523813334327 20.44055367013701
- POINT 4459 6.323600756021351 20.44055356069054
- POINT 4460 5.314082130452446 19.55879830294076
- POINT 4461 5.069786234540341 19.99999980475538
- POINT 4462 5.314081996435311 20.44120126848308
- POINT 4463 5.563175333674854 20.88175519893314
- POINT 4464 8.866487420657002 23.96406405540996
- POINT 4465 8.355738994225081 23.96328213075802
- POINT 4466 8.100427383778017 23.52188039085872
- POINT 4467 9.122215393276559 23.52275436205428
- POINT 4468 8.86594121586602 23.08182352338446
- POINT 4469 11.18084976696353 21.76061566877308
- POINT 4470 11.43896704356612 22.20068784304909
- POINT 4471 11.95797441386322 22.1997190736917
- POINT 4472 11.9588087557341 21.32105244930146
- POINT 4473 12.22007742542399 21.75981922903992
- POINT 4474 10.148570164294 21.76080494256901
- POINT 4475 9.890881511362227 22.2011322436048
- POINT 4476 9.377719656900005 22.20101559932991
- POINT 4477 9.377648474444069 21.3206226826241
- POINT 4478 9.121929706236603 21.76064672176964
- POINT 4479 8.865674277639464 22.2008899295029
- POINT 4480 7.336250313716918 21.32043468385277
- POINT 4481 7.591125568206087 20.88045701300713
- POINT 4482 7.337223885828448 20.44026648925234
- POINT 4483 7.845909546820542 20.44018971579031
- POINT 4484 6.830512134341413 20.44026665363158
- POINT 4485 6.575528528893932 20.88082069352811
- POINT 4486 4.547660785761197 22.64117575790155
- POINT 4487 4.799992952164152 23.08041215768531
- POINT 4488 5.306180292478354 23.08034306292107
- POINT 4489 8.865707267923504 19.55976133923551
- POINT 4490 8.354952340097839 19.55980825914972
- POINT 4491 8.865707358596341 20.44023587696896
- POINT 4492 8.354952041499935 20.44018950991573
- POINT 4493 9.121386178165395 19.99999862805303
- POINT 4494 9.377000682960047 20.44023572473563
- POINT 4495 9.37700059228721 19.55976118700218
- POINT 4496 8.101050359122295 19.99999898616094
- POINT 4497 -18.88575813755943 15.0697268260569
- POINT 4498 -19.39362771734272 15.11254628586869
- POINT 4499 -18.68665358888661 14.6490351897125
- POINT 4500 -15.77563967202531 13.84150710457371
- POINT 4501 -16.01906260749091 13.38331127087525
- POINT 4502 -16.51175963280237 13.37603091203635
- POINT 4503 -16.76209633740071 13.83891198637251
- POINT 4504 -16.61643100772146 14.28454398233681
- POINT 4505 -3.285878374189513 17.79579280002091
- POINT 4506 -3.537066906965997 17.35732465078735
- POINT 4507 -2.781165062341254 17.79402703590121
- POINT 4508 -2.272346057716946 15.15939316355719
- POINT 4509 -2.777506873473401 15.15947546214778
- POINT 4510 -2.019831127927625 14.71933670858128
- POINT 4511 -3.030366546424797 14.71907091737807
- POINT 4512 -4.29435723120281 15.1589385317425
- POINT 4513 -4.800381300429374 15.1587993272791
- POINT 4514 -4.041727322367009 14.71851001309586
- POINT 4515 -5.05425164147241 14.71756591615323
- POINT 4516 -4.295101030996014 14.27689248118367
- POINT 4517 -3.789177724238159 14.27725404962039
- POINT 4518 -8.103070844109666 14.7120749267257
- POINT 4519 -8.357041227963842 15.15335409824602
- POINT 4520 -8.867790261965396 15.15257226998905
- POINT 4521 -8.359008421177249 14.26876895168724
- POINT 4522 -9.124387984536476 14.70980715521631
- POINT 4523 -8.869538972748195 14.26707997665955
- POINT 4524 -9.380906847798823 14.26600347395883
- POINT 4525 -15.04253548417184 10.68172301284076
- POINT 4526 -14.51635355078331 10.68688712093244
- POINT 4527 -14.26072851253494 11.13086143448761
- POINT 4528 -15.29884481679709 11.11647634394399
- POINT 4529 -15.0294160788359 11.57085075398853
- POINT 4530 -14.51705395682312 11.57633155901834
- POINT 4531 8.673610243951781 6.652056971493288
- POINT 4532 8.414839055579259 7.108358885772509
- POINT 4533 7.90457462665794 7.113563743870362
- POINT 4534 8.152298738482797 7.566155996789455
- POINT 4535 7.651410299100585 6.670464801650749
- POINT 4536 7.388869982004122 7.128261912667696
- POINT 4537 7.91137180832887 6.215871382139966
- POINT 4538 7.395667163675052 6.2305695509373
- POINT 4539 8.427660313869119 6.189437265397586
- POINT 4540 8.401580829217719 8.014850918935689
- POINT 4541 7.8913164002964 8.020055777033541
- POINT 4542 8.65225636857012 8.462541415161475
- POINT 4543 7.629644152233771 8.473224754720867
- POINT 4544 7.380362061498849 8.024529832574634
- POINT 4545 8.391528292002256 8.915703717744677
- POINT 4546 7.880480191434996 8.920252392579611
- POINT 4547 8.948131191765635 5.244986877960783
- POINT 4548 8.686196691051427 4.812171250737954
- POINT 4549 8.926774423659207 4.355755496876252
- POINT 4550 9.445443876621251 5.251309598627719
- POINT 4551 9.6910474270449 4.80595499243688
- POINT 4552 9.473520550241012 4.27784503441803
- POINT 4553 6.871912274813603 4.456666857990875
- POINT 4554 6.343908009479829 4.48177946767831
- POINT 4555 6.621960527653464 4.900979418979421
- POINT 4556 7.126969749148993 3.982554695510378
- POINT 4557 4.533432449664246 3.111476287422326
- POINT 4558 4.788961989599059 2.692095990745143
- POINT 4559 4.807632160732531 3.545827374450171
- POINT 4560 6.855123306554548 1.732841382331951
- POINT 4561 6.414612844901361 1.574488513075082
- POINT 4562 6.765655367225731 1.179109809653417
- POINT 4563 6.972434580994955 2.219793303106146
- POINT 4564 -7.602701248857268 12.05219331399483
- POINT 4565 -7.345761168813994 12.49779263543017
- POINT 4566 -7.350228475031765 11.60757343071705
- POINT 4567 -5.308173014700433 14.27556533336659
- POINT 4568 -5.562737733353188 13.83313163004587
- POINT 4569 -4.801572002352885 14.27614786187251
- POINT 4570 -4.549022404224035 13.83489189839703
- POINT 4571 -1.261812988480139 9.83343522240709
- POINT 4572 -1.009092171925209 9.384112018230109
- POINT 4573 -1.260520010065219 8.933024373220549
- POINT 4574 -1.765500117844419 8.93523006966014
- POINT 4575 -5.068073644725306 9.38669057972551
- POINT 4576 -4.811613206609751 9.83429836303813
- POINT 4577 -5.321476005364882 9.832741044573023
- POINT 4578 -8.171918437075256 5.749541788172571
- POINT 4579 -8.426272907275038 5.290292001170738
- POINT 4580 -8.948133223185337 5.244987163541136
- POINT 4581 -9.185519494225359 5.729430999154442
- POINT 4582 -8.934156282145356 6.185727540104251
- POINT 4583 -8.427661154600298 6.18943703498995
- POINT 4584 -8.673610641597531 6.652056916813081
- POINT 4585 -6.360808891330913 5.359381494985303
- POINT 4586 -6.8888134629241 5.334268229392724
- POINT 4587 -7.141644921037324 5.784322612398201
- POINT 4588 -6.881683139083452 6.238916134269846
- POINT 4589 -6.366502420684297 6.244439533544943
- POINT 4590 -8.913238659918125 8.008641685997079
- POINT 4591 -9.175111821561714 7.552782489790519
- POINT 4592 -8.152298933237061 7.566155955215757
- POINT 4593 -8.414839366266023 7.108358763986579
- POINT 4594 -8.401580872630081 8.014850914686292
- POINT 4595 -8.652256314068634 8.462541484408993
- POINT 4596 -7.891316587387569 8.020055753627672
- POINT 4597 -8.921334493811083 7.104649269100879
- POINT 4598 0.5050496066864969 12.06607114806098
- POINT 4599 0.2524838592694156 12.509659882908
- POINT 4600 -0.5050495406976978 12.06607116411123
- POINT 4601 -0.2524953099325488 11.62092225687016
- POINT 4602 -0.7575448846733936 11.62089710913941
- POINT 4603 0.2524953892493668 11.62092224476328
- POINT 4604 -3.283324914400852 8.042101763472806
- POINT 4605 -3.027617553368896 7.589434642638204
- POINT 4606 -3.78887016301438 7.145934490043004
- POINT 4607 -4.047040141601858 7.596235740379548
- POINT 4608 -4.299970711505202 7.148508674241112
- POINT 4609 -3.792218491321482 8.043753636400142
- POINT 4610 -4.303319039812305 8.04632782059825
- POINT 4611 -3.539603812611298 8.492193843691508
- POINT 4612 -3.278350562976776 7.139722056960755
- POINT 4613 -3.53128113288012 6.69199499082232
- POINT 4614 -3.259043844909186 5.332766362072315
- POINT 4615 -3.011954694569225 5.779632481578462
- POINT 4616 -3.271741805307075 6.237333529285412
- POINT 4617 -3.782261405344679 6.243545962367661
- POINT 4618 -4.035803751858573 5.797005308049524
- POINT 4619 -4.295343079431618 6.251666769586432
- POINT 4620 -3.775380952945744 5.341766264901346
- POINT 4621 -3.511702720083296 4.885648126142907
- POINT 4622 -4.543058686584349 4.904219080036945
- POINT 4623 -4.288462627032683 5.349887072120117
- POINT 4624 -4.803481485497177 5.359458123185124
- POINT 4625 -3.243367634643463 4.435820574068364
- POINT 4626 -2.982689503297702 3.965002351197774
- POINT 4627 -3.229662503185413 3.52330050328693
- POINT 4628 -3.742623792584569 3.563062575166481
- POINT 4629 -3.759704742680022 4.444820476897395
- POINT 4630 -5.320794455696689 3.555246287829873
- POINT 4631 -5.570636693918219 3.095966055383329
- POINT 4632 -5.345229957488629 2.610279773748913
- POINT 4633 -4.788963916338954 2.692099741504953
- POINT 4634 -4.533433409733085 3.11147984258838
- POINT 4635 -5.320195886747793 5.3641005719377
- POINT 4636 -5.065599827196129 5.809768564020871
- POINT 4637 -5.838136124018156 5.370252348005836
- POINT 4638 -6.104986995759502 5.803540159752914
- POINT 4639 -5.843829653371539 6.255310386565476
- POINT 4640 -5.845709132172464 7.14566131989957
- POINT 4641 -6.099796022401105 7.591597931860797
- POINT 4642 2.468655552028582 36.99209317569083
- POINT 4643 2.720981659484743 36.50669016910551
- POINT 4644 3.221422882693706 37.37975122048137
- POINT 4645 3.480916159023034 36.90863094192812
- POINT 4646 2.722869868303182 37.43948682119965
- POINT 4647 3.229662324541032 36.47670038506341
- POINT 4648 -2.273750322176463 28.37918393450756
- POINT 4649 -2.779582658660454 28.37954777701897
- POINT 4650 -2.526574115933269 27.93457393572186
- POINT 4651 -3.033258069834652 28.82455082498592
- POINT 4652 -2.77999854888538 29.27036534916167
- POINT 4653 -2.273653961576329 29.27067718493149
- POINT 4654 -4.295759860195631 22.20207831721287
- POINT 4655 -3.790935919620525 22.20328484529564
- POINT 4656 -4.547660762109723 22.64117574871403
- POINT 4657 -1.770560839361158 22.20855341824481
- POINT 4658 -2.276071337937328 22.20687905820053
- POINT 4659 -1.516430995925717 22.64600353864246
- POINT 4660 -0.7574091942873926 26.60463620877062
- POINT 4661 -0.5049253650460661 26.16245155786428
- POINT 4662 -1.26248456968623 26.60474309312709
- POINT 4663 -2.020500884784648 27.04726516205367
- POINT 4664 -2.273312578923515 27.49087502031526
- POINT 4665 -2.779144915407506 27.49123886282667
- POINT 4666 -3.031723705736667 27.04803775852522
- POINT 4667 9.674059914272764 31.54309915647984
- POINT 4668 9.425788859593911 31.99952798475481
- POINT 4669 8.903187169034737 31.09050669476753
- POINT 4670 9.413784633261546 31.09278170280593
- POINT 4671 7.395667531479379 33.76943158160459
- POINT 4672 6.881682436448375 33.76108525769369
- POINT 4673 6.620525505193433 33.30931478828556
- POINT 4674 6.099796175241582 32.40840299268783
- POINT 4675 6.359431915093664 32.8578547224632
- POINT 4676 6.874612619500812 32.86337793702549
- POINT 4677 7.127777065364786 32.42027890997031
- POINT 4678 7.388870655464554 32.87173897579268
- POINT 4679 6.353715538404828 31.96208648750794
- POINT 4680 8.934156162843058 33.81427295860885
- POINT 4681 9.185518916730516 34.2705695880624
- POINT 4682 9.431469087173463 33.80794971603986
- POINT 4683 8.171917422879144 34.25045899549634
- POINT 4684 8.426271187026909 34.70970875020592
- POINT 4685 8.948131691149152 34.75501338402842
- POINT 4686 7.651410866152008 33.32953611527348
- POINT 4687 7.904575312015982 32.8864370882183
- POINT 4688 7.911372188030805 33.78412969403021
- POINT 4689 8.427660757551774 33.81056352916524
- POINT 4690 8.673610927994719 33.34794365714271
- POINT 4691 9.694220357455089 33.36180316353837
- POINT 4692 9.945583111342547 33.81809979299192
- POINT 4693 10.71091845921928 33.33687874930079
- POINT 4694 10.46487676988987 33.83310719520395
- POINT 4695 9.947998294341922 32.91367014601859
- POINT 4696 9.43388427017284 32.90352006906653
- POINT 4697 10.45710382882717 32.90333481796283
- POINT 4698 12.55579669464555 33.7299880503965
- POINT 4699 13.12801199851167 33.79479026035089
- POINT 4700 12.47144579022556 34.51148132613582
- POINT 4701 12.93462514265352 34.64180178367647
- POINT 4702 12.24027789272276 34.13587082058012
- POINT 4703 13.29868985479681 34.3116079231603
- POINT 4704 13.43620128425083 34.8144691256151
- POINT 4705 12.50944856105111 31.15885690226704
- POINT 4706 11.99907725941845 31.14306284646113
- POINT 4707 12.78538331767002 31.63539862612097
- POINT 4708 12.5690393147074 32.06645875658151
- POINT 4709 12.02256561458787 32.0281633069468
- POINT 4710 5.065600016341717 34.19023420969232
- POINT 4711 4.803482242815901 34.64054582058449
- POINT 4712 4.035804672356232 34.20299720629515
- POINT 4713 4.295343779290965 33.74833560269973
- POINT 4714 4.809231465292767 33.74478222026569
- POINT 4715 4.288463743829695 34.65011614756668
- POINT 4716 9.637662575318704 13.82176439745997
- POINT 4717 9.895010842448107 13.37629815618254
- POINT 4718 9.892511591869622 14.26449157539778
- POINT 4719 10.4067069355562 13.37400513563111
- POINT 4720 13.52905067048734 17.80348860989551
- POINT 4721 13.79175789835044 17.36796951733285
- POINT 4722 13.00252411868155 17.80282680195637
- POINT 4723 13.26812525861197 18.24140032089161
- POINT 4724 12.74043410877834 17.36292953030527
- POINT 4725 12.47950869690297 17.80084124130137
- POINT 4726 13.51009777439233 19.55820318321305
- POINT 4727 13.79929158665083 19.11344521668358
- POINT 4728 13.53129906332733 18.67922305227264
- POINT 4729 13.00477251152154 18.6785612443335
- POINT 4730 12.99576637516585 19.55819856070358
- POINT 4731 12.74349662902931 19.11733796967289
- POINT 4732 12.47131668795828 19.55915255466194
- POINT 4733 12.48032282431396 18.67951523829186
- POINT 4734 11.43914986613786 21.32072491301456
- POINT 4735 11.69942433103575 20.88138351831122
- POINT 4736 10.92146534226518 21.32094673778284
- POINT 4737 12.71562432355781 13.82239950971875
- POINT 4738 12.9710204628949 13.37575475080886
- POINT 4739 12.45674797382721 13.37407141180644
- POINT 4740 12.97772491657961 14.26819291122295
- POINT 4741 12.46345242751193 14.26650957222053
- POINT 4742 13.49738297842677 14.27178058327745
- POINT 4743 13.74303006923158 13.8271429168039
- POINT 4744 13.24521108238089 14.71589064577923
- POINT 4745 13.22448245842652 12.92743092592447
- POINT 4746 13.48181951185093 12.47903488184075
- POINT 4747 13.99578142269353 12.47669166234643
- POINT 4748 14.24624589811313 12.92686861431367
- POINT 4749 13.48335880815712 13.37575902383678
- POINT 4750 13.9964920647632 13.37881909191951
- POINT 4751 -6.320150687976366 23.96091876360178
- POINT 4752 -5.812969625836519 23.96070458668278
- POINT 4753 -6.574688825297787 24.40195167480463
- POINT 4754 -6.828063652194295 23.9615488793044
- POINT 4755 -5.813813941857884 24.84216924255897
- POINT 4756 -6.321311652199329 24.84298261059543
- POINT 4757 -7.081981008898271 23.52094424303451
- POINT 4758 -7.336519146219691 23.96197715423737
- POINT 4759 -7.845748104704221 23.96277425307575
- POINT 4760 -7.335856115277702 23.08082963166928
- POINT 4761 -7.844991443031732 23.08106288006605
- POINT 4762 -8.100427311741345 23.52188036270352
- POINT 4763 -10.40540157467472 14.26408505747693
- POINT 4764 -10.66170284717234 13.81985074339596
- POINT 4765 -9.637662430070954 13.82176447342599
- POINT 4766 -9.895010682577141 13.37629824542447
- POINT 4767 -9.892511441859234 14.26449165198275
- POINT 4768 -10.40670675495256 13.37400525082491
- POINT 4769 -12.47199466734123 16.03898502117763
- POINT 4770 -12.21411479700939 16.4800762682083
- POINT 4771 -12.99157903512498 16.04165171901209
- POINT 4772 -14.28781148834783 14.72466430653915
- POINT 4773 -14.01051597995725 14.27484092420143
- POINT 4774 -13.50732425510632 15.16042328920559
- POINT 4775 -13.24521080951691 14.71589083268884
- POINT 4776 -13.49738271635704 14.27178080931081
- POINT 4777 -16.93896929093587 15.5773409849898
- POINT 4778 -16.68097494321506 15.16527107651389
- POINT 4779 -15.67915306855816 18.67142202530682
- POINT 4780 -15.40255559056302 18.2433353971784
- POINT 4781 -15.1377260715964 18.67054347403299
- POINT 4782 -15.66731487745816 17.81120284025883
- POINT 4783 -16.23490724711116 18.67143816234672
- POINT 4784 -11.95483924810893 19.55914747757233
- POINT 4785 -11.69939991789839 19.11861637347679
- POINT 4786 -11.95878820411627 18.67894457614464
- POINT 4787 -12.47131653888641 19.55915256894556
- POINT 4788 -12.48032266377783 18.67951528684885
- POINT 4789 -12.22006407356756 18.2401678703231
- POINT 4790 -12.74349647052235 19.11733800723685
- POINT 4791 -13.00477233997363 18.67856130141531
- POINT 4792 -14.87248011401993 19.104568316138
- POINT 4793 -14.5444672240719 19.55524901206978
- POINT 4794 -14.59588263602478 18.67648168800958
- POINT 4795 -14.04144287725837 19.55526445993747
- POINT 4796 -13.79929141258323 19.11344527595896
- POINT 4797 -13.53129887895662 18.67922312921883
- POINT 4798 -13.2681250722121 18.24140040883083
- POINT 4799 -14.0626441448217 18.67628438337447
- POINT 4800 -14.05735881756995 17.80654318110146
- POINT 4801 -14.32789010239817 18.24225954126945
- POINT 4802 -18.2968927833904 24.94722405978977
- POINT 4803 -18.68670738346595 25.35086902771102
- POINT 4804 -18.11866277312836 25.81991225332942
- POINT 4805 -18.56007566971161 25.77221354163332
- POINT 4806 -19.15366621552857 25.75648074725418
- POINT 4807 -17.67264085100642 25.76729945984075
- POINT 4808 -17.52697763588802 25.32168259068048
- POINT 4809 -17.78498613217555 24.909612186255
- POINT 4810 -12.47539170563856 23.0785489390462
- POINT 4811 -12.99840983962808 23.07655221680742
- POINT 4812 -12.47198557295549 23.9610096938691
- POINT 4813 -12.99156790660064 23.95834007766085
- POINT 4814 -12.21410615975761 23.51991655725213
- POINT 4815 -14.04906603364312 23.06997456115545
- POINT 4816 -13.52075687599397 23.07307448165996
- POINT 4817 -14.03636788977065 23.95057690948157
- POINT 4818 -13.51391494296653 23.95486234251339
- POINT 4819 -14.30341627472643 23.50650018459617
- POINT 4820 -14.561721042046 23.9459789118976
- POINT 4821 -14.57441918591847 23.06537656357148
- POINT 4822 -13.25571608608519 23.5145759173276
- POINT 4823 -14.5960683653604 21.32333659147519
- POINT 4824 -14.32798922175618 21.75754972154517
- POINT 4825 -14.59066652086865 22.19303664224877
- POINT 4826 -13.74303175114319 26.17287493709136
- POINT 4827 -13.48335791473757 26.62425530265345
- POINT 4828 -12.97771773598447 25.73181930175693
- POINT 4829 -12.71561880221907 26.17761345449204
- POINT 4830 -13.49737100762031 25.72824656875608
- POINT 4831 -12.97101566866241 26.62426067037656
- POINT 4832 -15.87594000709251 24.3886752863724
- POINT 4833 -15.61382354497319 23.94120865241457
- POINT 4834 -15.08739359140011 23.94259057999703
- POINT 4835 -15.35519938057486 23.50052025942974
- POINT 4836 -15.07839045447396 24.82672910597416
- POINT 4837 -14.82034520644433 24.38666730488244
- POINT 4838 -4.297887780716318 27.4932582820506
- POINT 4839 -4.044006752788331 27.04935658278367
- POINT 4840 -5.312210754179706 27.49556464468527
- POINT 4841 -5.567618563035417 27.94023469907253
- POINT 4842 -4.552513129335004 27.93750819510436
- POINT 4843 -4.807024214617755 28.38271368117876
- POINT 4844 -4.805074821119767 27.49442750899073
- POINT 4845 -5.057585405561018 27.0513147316315
- POINT 4846 -6.33587960182028 29.27904137271206
- POINT 4847 -6.593280542092714 29.72671675993249
- POINT 4848 -6.845584816882877 29.28169696677443
- POINT 4849 -9.139626577699488 28.84786563078475
- POINT 4850 -8.880974911121076 28.39978165870695
- POINT 4851 -8.886484031839617 29.29285468931666
- POINT 4852 -8.375837076376664 29.29012509511866
- POINT 4853 -6.606301488352729 31.5172784426189
- POINT 4854 -6.86610510089686 31.96710983930201
- POINT 4855 -7.380363061301429 31.97547095696313
- POINT 4856 -7.629645044490113 31.52677603524801
- POINT 4857 -3.734387612605413 37.33998909381205
- POINT 4858 -3.480917883197236 36.90862995438757
- POINT 4859 -4.249409370936035 37.28824836325113
- POINT 4860 -4.533435519467933 36.88852220808495
- POINT 4861 -4.758488233341749 38.11030236366913
- POINT 4862 -4.50676918141261 38.58210339451158
- POINT 4863 -4.783545702215509 38.99367819414739
- POINT 4864 -5.253316076616899 38.87170298229778
- POINT 4865 -5.026304722136116 39.35810581481412
- POINT 4866 -5.31475374097253 38.1921257939889
- POINT 4867 -5.55603254774995 38.55085252783052
- POINT 4868 -4.803482580347485 34.64054361135685
- POINT 4869 -5.320196850564142 34.63590120971449
- POINT 4870 -4.543060036237803 35.09578274400744
- POINT 4871 -9.474341817876265 37.14660975144912
- POINT 4872 -9.406416566704262 36.55611168334616
- POINT 4873 -9.473526932351346 35.72215174385364
- POINT 4874 -9.691051891830522 35.19404228105253
- POINT 4875 -7.395668664845115 33.76943169253389
- POINT 4876 -7.141645205774269 34.21567874364175
- POINT 4877 -7.911373176236172 33.78412991120815
- POINT 4878 -5.970391354147889 38.42267776501082
- POINT 4879 -5.910343674528779 39.10674848218104
- POINT 4880 9.899142136969207 27.51510267900654
- POINT 4881 10.15244814835231 27.06995268221834
- POINT 4882 9.895007998246125 26.62370476614767
- POINT 4883 9.383403857216514 26.62219238204935
- POINT 4884 9.645779171780866 27.95898679566293
- POINT 4885 9.392678108416897 28.40351120876002
- POINT 4886 8.880975044494647 28.39978174499532
- POINT 4887 9.387389390594027 27.51154309762205
- POINT 4888 14.26073289743033 28.8691395757118
- POINT 4889 13.99842144929555 28.41952401656783
- POINT 4890 13.99771942752645 29.30896742654093
- POINT 4891 13.48445722189115 28.41718289837834
- POINT 4892 13.22907518867648 28.86709658595593
- POINT 4893 13.48364027439367 29.31665262720558
- POINT 4894 2.778186435888486 8.938957890864957
- POINT 4895 3.285536154833564 8.93983143640984
- POINT 4896 0.503576558953103 8.480088415641912
- POINT 4897 0.7545340256392324 8.025313551344778
- POINT 4898 1.257490675288657 8.028793692477928
- POINT 4899 1.00487166372454 7.572984560185061
- POINT 4900 1.767218177292147 9.833864649502274
- POINT 4901 1.261813121296191 9.833435129749081
- POINT 4902 2.01977490415053 9.386150013300199
- POINT 4903 1.254058685362145 7.116431701475741
- POINT 4904 0.7511020357127205 7.112951560342591
- POINT 4905 1.503048670056133 6.664067888028908
- POINT 4906 1.756818298067953 7.124100887871379
- POINT 4907 3.221422303399006 2.620248389708918
- POINT 4908 3.480914914435558 3.091369166068999
- POINT 4909 2.72098085638526 3.493309688384574
- POINT 4910 3.229661216416159 3.523299759226276
- POINT 4911 2.982688780121403 3.965001676074344
- POINT 4912 2.46865487040522 3.007906565470829
- POINT 4913 2.722869289518796 2.56051282330207
- POINT 4914 -1.010191681274808 16.47724942694537
- POINT 4915 -1.263131355488745 16.91548129340297
- POINT 4916 -2.020306230344167 16.47789566114399
- POINT 4917 -1.767492742491601 16.03853792813051
- POINT 4918 -1.262539725172341 16.03840777843346
- POINT 4919 12.1997613590734 12.92710547342492
- POINT 4920 11.94479095056584 12.47843891822832
- POINT 4921 11.43422157083276 12.47855544044724
- POINT 4922 11.17576264345388 12.92727100195365
- POINT 4923 11.94436521973632 13.37375023233481
- POINT 4924 7.336251480752613 18.6795640871081
- POINT 4925 7.844937134949372 18.67964044904051
- POINT 4926 8.099974578704396 18.23956992571268
- POINT 4927 7.84480578458009 17.79945448070259
- POINT 4928 8.354717919779731 17.79936124634732
- POINT 4929 7.335669970649025 17.79968796401571
- POINT 4930 7.081931177971981 18.23961942058892
- POINT 4931 8.354982325926542 23.08157075161737
- POINT 4932 7.844991506275383 23.08106290277033
- POINT 4933 7.844803584321875 22.20054442238268
- POINT 4934 8.354715387699985 22.20063715773581
- POINT 4935 8.610505338363385 22.64100603529607
- POINT 4936 7.590411112199734 22.64052001245645
- POINT 4937 7.335856170051208 23.08082965169779
- POINT 4938 7.335668248097701 22.20031117131014
- POINT 4939 9.890818040191585 21.32074068357608
- POINT 4940 10.40541311898843 21.32077323454844
- POINT 4941 10.66371321816277 20.88088247878991
- POINT 4942 10.40367267864471 20.44035402693132
- POINT 4943 10.91972490192146 20.44052753016572
- POINT 4944 9.890170248707562 20.4403537256876
- POINT 4945 10.14618193246625 19.99999877706341
- POINT 4946 9.634491429138507 20.88059097460354
- POINT 4947 6.827400667807767 23.08040137415767
- POINT 4948 7.081981061883418 23.52094426447156
- POINT 4949 6.066344491613611 23.52030180831326
- POINT 4950 6.320150731026381 23.96091878388248
- POINT 4951 6.828063703070947 23.96154890185181
- POINT 4952 4.803564434818736 21.32240321307486
- POINT 4953 4.299173358639647 21.32364953328408
- POINT 4954 4.044571409948016 21.76361015630762
- POINT 4955 4.295759881507283 22.20207832426327
- POINT 4956 4.801296257115548 22.20150106250879
- POINT 4957 5.054931180975862 21.76171558239177
- POINT 4958 5.306832085229775 22.20081301603004
- POINT 4959 5.309100262932963 21.32171516659611
- POINT 4960 5.81454207983198 21.32106756825005
- POINT 4961 -18.56002184971921 14.22769492657082
- POINT 4962 -18.58096939592903 13.77580049591028
- POINT 4963 -19.15364988885438 14.24346495111939
- POINT 4964 -18.85904440570564 13.34143830515129
- POINT 4965 -15.33998266280768 14.7338292242525
- POINT 4966 -15.57188599971363 14.288170055576
- POINT 4967 -16.07296487229796 14.29114541974748
- POINT 4968 -16.41267733540978 14.73120693333909
- POINT 4969 -16.13750880779156 15.17187251392457
- POINT 4970 -3.788945546787723 16.91866703867328
- POINT 4971 -4.041277777523542 16.47943067745028
- POINT 4972 -3.283887755210931 16.91774473014353
- POINT 4973 -3.03057820446562 16.47865932897363
- POINT 4974 -2.778699564643894 16.9173169410877
- POINT 4975 -3.788415114156707 16.03940786842766
- POINT 4976 -3.282925532369509 16.03938389455073
- POINT 4977 -2.526915470103403 17.35549624645666
- POINT 4978 -2.273605919358092 16.91641084528677
- POINT 4979 -1.516431044502669 17.35399647754574
- POINT 4980 -1.770560893295203 17.79144659044107
- POINT 4981 -2.276071417055452 17.79312094010028
- POINT 4982 -1.768522135803676 16.91607496651296
- POINT 4983 6.366501243846965 6.244439141771339
- POINT 4984 6.881681964346839 6.238915939179471
- POINT 4985 6.620524933946894 6.690686173039952
- POINT 4986 7.141643473575124 5.784322519668687
- POINT 4987 6.888811533617075 5.334267858601422
- POINT 4988 6.360807268283301 5.359380468288856
- POINT 4989 5.328304956021583 8.043704908345143
- POINT 4990 5.839992119376236 8.041429038737206
- POINT 4991 5.072106627115973 7.596960962835897
- POINT 4992 4.814338839724297 8.045553308551284
- POINT 4993 6.874612011818435 7.136622928830665
- POINT 4994 7.12777633937579 7.579721871050277
- POINT 4995 6.359431291318561 7.142146131422533
- POINT 4996 6.866104091313161 8.032890848737603
- POINT 4997 6.099795556301682 7.591597724921501
- POINT 4998 5.84570847843014 7.145660969130788
- POINT 4999 6.353714932264657 8.037914201028951
- POINT 5000 6.081229359011346 4.028063957887165
- POINT 5001 5.831277611851206 4.472376518875711
- POINT 5002 5.818440427341621 3.559379919758002
- POINT 5003 6.331070824970244 3.568782868560602
- POINT 5004 5.320793662260057 3.555241511663863
- POINT 5005 5.570635128218955 3.0959604223373
- POINT 5006 5.055437459855198 4.009246871870873
- POINT 5007 6.821727892775355 3.591856572778605
- POINT 5008 6.558938961105631 3.123172534649443
- POINT 5009 6.777765117627584 2.634655229109696
- POINT 5010 6.287108049822472 2.611581524891692
- POINT 5011 7.244265492278114 2.731384312863897
- POINT 5012 7.354837885284381 3.536944361599219
- POINT 5013 7.598035916136748 3.04043980858182
- POINT 5014 4.299970635453084 7.14850787645576
- POINT 5015 3.788870234546398 7.145933669669137
- POINT 5016 4.047040109912 7.596235156255416
- POINT 5017 5.345228489927225 2.610272286506451
- POINT 5018 5.842875255008789 2.614410694600591
- POINT 5019 6.061701411530742 2.125893389060844
- POINT 5020 5.314751048479676 1.807873046646745
- POINT 5021 5.061202116388895 2.210546263008434
- POINT 5022 5.970380050087678 1.57731768278398
- POINT 5023 5.556020582598091 1.44914323051177
- POINT 5024 5.91032202053712 0.893244814956379
- POINT 5025 -6.836865785799978 12.49945380288166
- POINT 5026 -7.089553213907015 12.94295844989903
- POINT 5027 -6.833499178180947 13.3871348946776
- POINT 5028 -6.325319961009233 13.38836779917821
- POINT 5029 -1.767218052469922 9.83386477079263
- POINT 5030 -1.515143883278228 10.28237400844931
- POINT 5031 -4.303205496386696 9.835452565483031
- POINT 5032 -4.556607857026273 10.28150303033054
- POINT 5033 -3.794281023813899 9.835889357263516
- POINT 5034 -3.286799988363986 9.836274382571714
- POINT 5035 -3.540719111353306 10.28304225808364
- POINT 5036 -4.049286373397377 9.3886846899711
- POINT 5037 -3.285536068257624 8.939831726257879
- POINT 5038 -3.794429645178254 8.941483599185215
- POINT 5039 -4.303354117751051 8.94104680740473
- POINT 5040 -8.903186047936739 8.909494536004507
- POINT 5041 -9.153055229364252 9.360382120771384
- POINT 5042 -8.391528260648695 8.915703764693721
- POINT 5043 -8.131409949387299 9.367205473050699
- POINT 5044 -7.880480215519194 8.920252421455185
- POINT 5045 -8.893751097108121 9.810542690182665
- POINT 5046 -8.383104174517864 9.813271999453356
- POINT 5047 -7.872056129388366 9.81782065621482
- POINT 5048 -0.2524838087497524 13.39540810971175
- POINT 5049 2.44434774088198e-08 12.95322345942679
- POINT 5050 -0.2524838007827911 12.50965988836077
- POINT 5051 -0.757533375523636 12.50963474063003
- POINT 5052 -1.010043008245645 12.95311658754424
- POINT 5053 -1.262608748160552 12.5095278632947
- POINT 5054 -5.055438029190892 4.009250597348579
- POINT 5055 -4.800176791787235 4.456813104903008
- POINT 5056 -4.285157933322742 4.447242053838
- POINT 5057 -4.807632465031426 3.545831769185357
- POINT 5058 -4.268076983227289 3.565484152107086
- POINT 5059 -4.016822847882909 3.997414501763457
- POINT 5060 -4.555688689148163 6.701760771737632
- POINT 5061 -4.809231035662058 6.255220117419496
- POINT 5062 -5.325945436912674 6.259862566172071
- POINT 5063 -4.813858667735643 7.152062022074176
- POINT 5064 -5.327824915713599 7.150213499506166
- POINT 5065 -5.072106938070638 7.596961402009646
- POINT 5066 -5.587460861837469 6.7007619399641
- POINT 5067 -4.814374102587054 8.940272696222461
- POINT 5068 -4.559517374367931 8.493071605436576
- POINT 5069 -5.324236901342186 8.938715377757356
- POINT 5070 -4.814339024648308 8.045553709415984
- POINT 5071 -5.328305272626263 8.043705186847973
- POINT 5072 -2.021045274972744 28.82414544323013
- POINT 5073 -1.76803673224556 28.37917160193302
- POINT 5074 -1.262715411558947 28.37904359188522
- POINT 5075 -1.010161179515999 28.82419250185701
- POINT 5076 -1.767940371645426 29.27066485235695
- POINT 5077 -1.262535281707757 29.27109438297196
- POINT 5078 -3.537066675701101 22.64267533516108
- POINT 5079 -3.283887565701342 23.08225529095755
- POINT 5080 -3.78894527952161 23.0813329672272
- POINT 5081 -2.526915358233893 22.64450376122651
- POINT 5082 -2.781164941584266 22.20597295586544
- POINT 5083 -3.285878205800256 22.20420716902598
- POINT 5084 -2.777737218622537 23.96104394944767
- POINT 5085 -3.030578038325537 23.52134070986063
- POINT 5086 -3.282925349818851 23.96061616261071
- POINT 5087 -2.778699434505028 23.08268307779451
- POINT 5088 -2.273605830858089 23.08358918012959
- POINT 5089 -4.294456553710889 23.08098940888245
- POINT 5090 -4.04127744371113 23.52056936467892
- POINT 5091 -4.799992926299243 23.08041214616574
- POINT 5092 -5.052976054246795 23.52015671029886
- POINT 5093 -2.777506769235351 24.84052461662275
- POINT 5094 -3.030366432223659 25.28092918756785
- POINT 5095 -3.282944193104159 24.84072397314284
- POINT 5096 1.330755233786007e-08 25.28052643955282
- POINT 5097 -0.2524349013237393 25.72146687178944
- POINT 5098 -0.7573602844785909 25.72151112349207
- POINT 5099 -0.2524349052544075 24.84066650044989
- POINT 5100 -1.514941477347312 26.16264507841994
- POINT 5101 -1.767575298832624 26.60489236198012
- POINT 5102 -2.272957792445729 26.60516714734652
- POINT 5103 8.652257441255252 31.53745954895175
- POINT 5104 8.39152909816184 31.0842973257564
- POINT 5105 7.880480908934858 31.07974849039663
- POINT 5106 8.414839869207476 32.89164191324666
- POINT 5107 8.152299658520024 32.43384477376586
- POINT 5108 8.913239863919834 31.99135925837855
- POINT 5109 9.175113211385597 32.44721832517048
- POINT 5110 8.921335274498762 32.89535134269027
- POINT 5111 8.401581793046937 31.98514988936742
- POINT 5112 7.891317235855443 31.97994506433906
- POINT 5113 11.74873159823277 31.58187307730738
- POINT 5114 11.47479887261305 31.1209339277706
- POINT 5115 11.49828722778247 32.00603438825626
- POINT 5116 10.96516324372876 31.99723027702603
- POINT 5117 10.70432876392238 31.55113677680682
- POINT 5118 10.95876372439194 31.10769117123329
- POINT 5119 13.5073245348637 15.16042310084938
- POINT 5120 13.7722487569601 15.60568703807935
- POINT 5121 12.98766647301654 15.15683542879488
- POINT 5122 11.95878835004167 18.67894453890096
- POINT 5123 11.43914146078369 18.67926892442837
- POINT 5124 11.69940005256377 19.11861634915865
- POINT 5125 11.95797422263067 17.80027054191047
- POINT 5126 12.22006423253389 18.24016781356158
- POINT 5127 11.95483938702825 19.55914746318869
- POINT 5128 11.43519249777028 19.55947184871609
- POINT 5129 11.17515809731908 20.00000102052662
- POINT 5130 10.9197187628546 19.55946990649659
- POINT 5131 11.43519863683714 20.44052947238522
- POINT 5132 11.95485752643337 20.44085700867212
- POINT 5133 12.20710913316478 20.00000805421938
- POINT 5134 8.610508600834709 17.35899258697246
- POINT 5135 8.865677394959015 17.79910803198256
- POINT 5136 10.66370546167478 19.11911380302585
- POINT 5137 10.40367106122358 19.55964297483639
- POINT 5138 9.890168631286432 19.55964267359267
- POINT 5139 9.634489721044543 19.11940538477516
- POINT 5140 -4.8003808551864 24.84120085001912
- POINT 5141 -5.306981717815686 24.84178343725863
- POINT 5142 -5.054251160006624 25.28243433877643
- POINT 5143 -5.55994363703766 24.40093575380166
- POINT 5144 -5.306137401794322 23.96031878138243
- POINT 5145 -4.799950065447936 23.96038787741774
- POINT 5146 -11.95797406324265 17.80027060346049
- POINT 5147 -12.47950852290421 17.80084131416471
- POINT 5148 -12.4753984618416 16.92143972111907
- POINT 5149 -11.95613484774709 16.91958059439132
- POINT 5150 -11.69841188473828 17.35997812379403
- POINT 5151 -13.25572876182561 16.4853991857355
- POINT 5152 -13.51392938584669 16.04511550981153
- POINT 5153 -14.04907256824607 16.92994355105175
- POINT 5154 -14.30347489893017 16.49353671661515
- POINT 5155 -17.42133850836408 16.46621230299164
- POINT 5156 -17.19812027591119 16.01499464947636
- POINT 5157 -16.66495740057217 16.04359032158593
- POINT 5158 -16.48596411693903 18.24387092939627
- POINT 5159 -16.7768887765254 18.67109514329076
- POINT 5160 -17.3450998387438 18.66931497274819
- POINT 5161 -17.55961494440304 18.23365541782893
- POINT 5162 -15.13808693917218 21.32895091825263
- POINT 5163 -14.87289120763043 20.89506516536105
- POINT 5164 -15.08660377556885 20.45033549308172
- POINT 5165 -15.55540002119723 20.44995148230189
- POINT 5166 -15.67928522368949 21.32845399962185
- POINT 5167 -15.40246238141945 21.75672542573599
- POINT 5168 -15.97041154478462 20.90170693614084
- POINT 5169 -15.10960308030174 23.06196306963319
- POINT 5170 -14.85525283921842 22.62543744619248
- POINT 5171 -15.12585041525192 22.18962314831048
- POINT 5172 -15.63603303387482 23.06058114205074
- POINT 5173 -15.66704869976923 22.1891262296797
- POINT 5174 -15.93226468292499 22.62311470327069
- POINT 5175 -15.60763493081995 24.82273747748248
- POINT 5176 -16.13755718211401 24.82813379087301
- POINT 5177 -16.07300703291225 25.70885103720212
- POINT 5178 -16.41272779402701 25.26878316611768
- POINT 5179 -15.34000762949547 25.26618761047478
- POINT 5180 -15.57192119263 25.71183375688789
- POINT 5181 -4.801571669348379 25.72385239038944
- POINT 5182 -5.308172531977664 25.72443497762895
- POINT 5183 -5.562737248413449 26.16686877343349
- POINT 5184 -5.310107189970187 26.609152448284
- POINT 5185 -4.802971256910249 26.60801531258947
- POINT 5186 -6.341450194137229 30.17268166580354
- POINT 5187 -6.851155409199826 30.1753372598659
- POINT 5188 -6.859007872044449 31.0718020351126
- POINT 5189 -6.346618677552621 31.06677857324325
- POINT 5190 -5.827084132913434 29.27699951540124
- POINT 5191 -6.079388407703597 28.83197972224318
- POINT 5192 -5.823064947564565 28.38586492051645
- POINT 5193 -6.331860416471411 28.38790677782728
- POINT 5194 -5.315146554267603 28.38430764348843
- POINT 5195 -5.062470599146903 28.82834390262268
- POINT 5196 -4.556608069675993 29.71849731589442
- POINT 5197 -4.811613479718268 30.165702029606
- POINT 5198 -5.317804366752521 29.27479472056045
- POINT 5199 -5.574295560869203 29.72185637102933
- POINT 5200 -4.809682027102673 29.27320075825078
- POINT 5201 -8.37012581029477 28.39701947502677
- POINT 5202 -8.623177182075818 27.95266494359922
- POINT 5203 -8.365439583299061 27.50635270506456
- POINT 5204 -7.855387859831518 27.50430329700417
- POINT 5205 -5.055440020725587 35.99075265980588
- POINT 5206 -4.807634831823819 36.45417118840255
- POINT 5207 -5.320796682809582 36.4447576399531
- POINT 5208 -4.268078857383937 36.43451722793773
- POINT 5209 -4.800178501361454 35.54318914608771
- POINT 5210 -5.313340352347217 35.53377559763826
- POINT 5211 -4.285159704616173 35.55275980617505
- POINT 5212 -3.759706120423524 35.55518051249211
- POINT 5213 -3.243368772057292 35.56417992560635
- POINT 5214 -2.982690542380816 36.03499790770628
- POINT 5215 -4.016824585547176 36.00258691457239
- POINT 5216 -3.742625273191289 36.4369379342548
- POINT 5217 -3.229663611360475 36.47669964102222
- POINT 5218 -7.354840159678442 36.4630586256994
- POINT 5219 -7.903282692818332 36.56886240561009
- POINT 5220 -7.598040633279414 36.95956098877416
- POINT 5221 -7.126972347222575 36.01744750407371
- POINT 5222 -6.821730287683658 36.40814608723778
- POINT 5223 -9.020623545645163 37.38900516343447
- POINT 5224 -9.424243510782267 37.64039778849911
- POINT 5225 -8.55965244144466 38.07573926529626
- POINT 5226 -8.556945323688646 37.47116104503266
- POINT 5227 -8.146988554944242 37.6652934901699
- POINT 5228 -8.61016138837582 36.98320888708665
- POINT 5229 -8.948133722619318 34.7550130983436
- POINT 5230 -8.426272911082375 34.70970901961947
- POINT 5231 -8.68619953008956 35.18782904777932
- POINT 5232 -8.171918681535782 34.25045922190498
- POINT 5233 -7.909984489006024 34.68327517134071
- POINT 5234 -8.934156830967638 33.81427302246146
- POINT 5235 -8.427661598312522 33.81056375948693
- POINT 5236 -7.402798616599393 34.67408020217368
- POINT 5237 -7.657152846145986 35.13332999988818
- POINT 5238 -7.405024596478357 35.59824753662824
- POINT 5239 -7.912210468884988 35.60744250579526
- POINT 5240 -6.871914724483572 35.54333499816662
- POINT 5241 -6.888813562914232 34.66573357218922
- POINT 5242 -5.838136677064515 34.62974945206364
- POINT 5243 -6.36080931903647 34.64062034113785
- POINT 5244 -6.621962729861593 35.09902179966978
- POINT 5245 -6.34391048060581 35.51822176711525
- POINT 5246 -5.576018659483458 35.08006032626925
- POINT 5247 -5.831280178847591 35.52762383998741
- POINT 5248 -6.081232173469569 35.97193703848426
- POINT 5249 -6.414624379431359 38.42551013672836
- POINT 5250 -6.06170323738905 37.87410771123918
- POINT 5251 -6.85513583736405 38.26715632721284
- POINT 5252 -6.765677367949003 38.82088227601641
- POINT 5253 -5.842877995505253 37.38558927504278
- POINT 5254 -5.57063863640637 36.90403968955684
- POINT 5255 -5.818443825308139 36.44062116096016
- POINT 5256 -6.287111020788723 37.38842164676031
- POINT 5257 -6.558941939522226 36.87683020971369
- POINT 5258 -6.777767181406023 37.36534864591009
- POINT 5259 -6.331074127066358 36.431219088088
- POINT 5260 8.876288812510946 27.50911496320762
- POINT 5261 9.129651777699287 27.06523084655123
- POINT 5262 8.872303279133433 26.61976424763491
- POINT 5263 8.361773132138943 26.61807490241647
- POINT 5264 8.108499459230185 27.06075329726731
- POINT 5265 8.370125922301042 28.3970195492633
- POINT 5266 7.859855674189975 28.39452253470644
- POINT 5267 8.623177303212083 27.95266501854642
- POINT 5268 7.602700800558854 27.94780788776358
- POINT 5269 8.365439690317341 27.5063527674756
- POINT 5270 7.85538794993132 27.50430335260611
- POINT 5271 2.013562028795792 7.580836026957666
- POINT 5272 2.26255201348978 7.128472213510832
- POINT 5273 2.77500305718747 8.037874485340598
- POINT 5274 3.027617726611467 7.589434151032957
- POINT 5275 3.283325039581317 8.042101283776436
- POINT 5276 4.303354076505858 8.941046540609735
- POINT 5277 4.559517266307168 8.493071306044598
- POINT 5278 4.303318937401558 8.046327360535352
- POINT 5279 3.794429651747119 8.941483306382132
- POINT 5280 3.539603867070875 8.492193488056373
- POINT 5281 3.792218536494872 8.04375315374873
- POINT 5282 1.765500287132538 8.935229901889144
- POINT 5283 1.512133152393508 8.483328312230684
- POINT 5284 1.26052017194238 8.933024273296105
- POINT 5285 2.268204505900643 8.035370646710422
- POINT 5286 2.523911818870494 8.488037779453901
- POINT 5287 2.271387884601659 8.93645405223478
- POINT 5288 1.762470790478816 8.030999321070967
- POINT 5289 0.7570181339856141 9.832621206105948
- POINT 5290 0.2521486956286256 9.832463953535083
- POINT 5291 1.009092319370833 9.384111939311431
- POINT 5292 7.294083631537163e-08 9.383298033689051
- POINT 5293 0.755725184631803 8.932210349652973
- POINT 5294 0.2521487063815567 8.931176081657238
- POINT 5295 0.5001445506630317 6.653216377611718
- POINT 5296 0.2509575290254266 7.109769236321039
- POINT 5297 -0.2509574054255117 7.109769247532057
- POINT 5298 -0.5001444446786542 6.653216389361097
- POINT 5299 -0.2485632222434483 6.187417819036827
- POINT 5300 1.486808276477663 4.815803748516092
- POINT 5301 1.233115516860302 4.336364274084247
- POINT 5302 0.7400739793290316 4.319006830385741
- POINT 5303 0.4944715681245202 4.791077890962915
- POINT 5304 1.247341716301759 6.199670761156298
- POINT 5305 1.750101329007567 6.207339947551936
- POINT 5306 1.241668873888472 5.270356238309256
- POINT 5307 1.739533777842383 5.288390330886163
- POINT 5308 6.319776508411969 23.08033816696384
- POINT 5309 6.57365161657976 22.64022355419007
- POINT 5310 5.813247233137025 22.20059394145463
- POINT 5311 5.559612309276712 22.64037942157165
- POINT 5312 5.812595440385603 23.08012398834565
- POINT 5313 6.827537292599711 22.20035520381776
- POINT 5314 7.081929764721854 21.760379613744
- POINT 5315 6.067132909156976 21.76072559108232
- POINT 5316 6.321207979898867 21.32076562341935
- POINT 5317 6.319913133203913 22.20029199662393
- POINT 5318 6.828119358218929 21.32047871636039
- POINT 5319 -15.60761428771511 15.17729136075921
- POINT 5320 -15.8759118955204 15.61135550393402
- POINT 5321 -15.07838575053652 15.17331221426195
- POINT 5322 5.313338001627086 4.46622421620718
- POINT 5323 4.800176500099562 4.456810078993488
- POINT 5324 5.57601665209557 4.919939725998326
- POINT 5325 3.782261521536312 6.243544847125578
- POINT 5326 4.035803768525128 5.797003854445578
- POINT 5327 4.295343007076298 6.25166539718948
- POINT 5328 5.32782445313552 7.150212913721168
- POINT 5329 5.5874601881524 6.7007613202222
- POINT 5330 4.555688461472631 6.70175982734103
- POINT 5331 4.809230708461447 6.255218834661029
- POINT 5332 4.813858336838233 7.152061313927309
- POINT 5333 -5.310107499537395 13.39084792377241
- POINT 5334 -5.817351857309676 13.38983227473242
- POINT 5335 -6.07268972719344 12.94608409290475
- POINT 5336 -5.830755763497873 9.830536332965101
- POINT 5337 -5.574295325382317 10.27814411627772
- POINT 5338 -5.827083974112147 10.72300100372588
- POINT 5339 -5.317804215979157 10.7252057153338
- POINT 5340 -6.328097480913719 12.50141410567111
- POINT 5341 -6.584305435820698 12.05624829120225
- POINT 5342 -5.820129377214162 12.50287858122533
- POINT 5343 -2.273653862835852 10.72932296672886
- POINT 5344 -2.779998427153544 10.72963483000736
- POINT 5345 -2.526893511585702 10.28311542011334
- POINT 5346 -3.03325797369162 11.17544935978157
- POINT 5347 -3.286081789785646 11.62005936335257
- POINT 5348 -2.77958259449772 11.62045238019389
- POINT 5349 -3.793978657891382 10.72885678785785
- POINT 5350 -3.28649762244147 10.72924181316605
- POINT 5351 -3.033012140510429 9.388247926083039
- POINT 5352 -2.778186307943474 8.938958170589331
- POINT 5353 -2.271387729106642 8.936454262492179
- POINT 5354 -2.019774768934057 9.386150177582453
- POINT 5355 -2.273105663732145 9.835088963624671
- POINT 5356 -2.779450228049837 9.835400826903166
- POINT 5357 -5.5822245505022 8.490021566077278
- POINT 5358 -5.835924092640452 8.936439449580325
- POINT 5359 -5.83999246392453 8.041429258670941
- POINT 5360 -6.353715300277041 8.037914311090102
- POINT 5361 -0.7574091937513752 13.39536386100999
- POINT 5362 -0.5049253668923982 13.83754850584218
- POINT 5363 -1.262484566388291 13.39525698367467
- POINT 5364 -0.7573602894107085 14.27848893565566
- POINT 5365 -1.262291965254416 14.27845371053971
- POINT 5366 -3.28331274272134 14.2777561649855
- POINT 5367 -3.536686451350343 13.83613863307331
- POINT 5368 -2.777875273536981 14.27795550083099
- POINT 5369 -2.272576442111081 23.96112623819538
- POINT 5370 -2.524923753604395 24.40040169094545
- POINT 5371 -2.272345992723895 24.84060690537046
- POINT 5372 -1.009801486872866 25.28056166755413
- POINT 5373 -1.262291950595193 25.72154635362897
- POINT 5374 -1.767382679741587 25.721695622482
- POINT 5375 -2.01983108067216 25.2806633643694
- POINT 5376 -2.272480607424279 25.72176208916036
- POINT 5377 -1.767248065041203 24.84054043869209
- POINT 5378 -2.778352392893433 26.60544966214032
- POINT 5379 -3.284192720232348 26.60594747324546
- POINT 5380 -2.52542680694141 26.16307686206677
- POINT 5381 -2.777875207871983 25.72204460395416
- POINT 5382 -3.28331263174079 25.72224396047425
- POINT 5383 6.866104760713585 31.96710990335178
- POINT 5384 7.380362796677328 31.97547094211897
- POINT 5385 7.629644931204242 31.52677605772053
- POINT 5386 6.606301269717369 31.51727851965659
- POINT 5387 7.369526469756744 31.07527436817653
- POINT 5388 6.859007733442916 31.07180208214582
- POINT 5389 13.51392964722839 16.04511534389315
- POINT 5390 14.03639847868913 16.04943449810747
- POINT 5391 13.52076444975717 16.92688894744077
- POINT 5392 14.04907281755069 16.92994337381335
- POINT 5393 14.30347517478823 16.49353649549375
- POINT 5394 11.18084815906273 18.23937667376692
- POINT 5395 10.92145986158483 18.67904848402461
- POINT 5396 10.40541215995382 18.6792215523644
- POINT 5397 11.43896757839668 17.79930462984569
- POINT 5398 11.69841204276576 17.35997805758548
- POINT 5399 10.92128597919782 17.79908418944193
- POINT 5400 10.66359917374389 17.35875830998669
- POINT 5401 10.40547975440994 17.79883035390792
- POINT 5402 8.865944840957612 16.91817543653783
- POINT 5403 8.354985365778326 16.91842865090259
- POINT 5404 8.355742015396309 16.03671800269559
- POINT 5405 8.100430211024863 16.47811944809296
- POINT 5406 9.377722904526436 17.79898153735976
- POINT 5407 9.890885340997441 17.79886408828225
- POINT 5408 9.634630512485 17.35862192353019
- POINT 5409 10.14857214645137 18.23918996773749
- POINT 5410 9.89081774654132 18.67925528673874
- POINT 5411 9.377649707542098 18.67937380014824
- POINT 5412 9.121932223471456 18.23935019673461
- POINT 5413 12.7301955341313 15.59870120865399
- POINT 5414 12.46808208164849 15.15416875358384
- POINT 5415 10.66170303024074 13.81985063353565
- POINT 5416 10.91914277660979 13.37360320785854
- POINT 5417 11.43075873813842 13.37311649985818
- POINT 5418 11.68774535289223 13.8200824382397
- POINT 5419 -4.294356920184748 24.84106161932534
- POINT 5420 -3.788433699542313 24.84070001560085
- POINT 5421 -4.041727076734903 25.28149014781243
- POINT 5422 -4.547087477993811 24.40041071780754
- POINT 5423 -3.535574036554005 24.40029544465575
- POINT 5424 -3.788414856257005 23.96059220506871
- POINT 5425 -4.293926130446284 23.96024864672396
- POINT 5426 -13.52905046638359 17.80348872203954
- POINT 5427 -13.79175767275845 17.36796966650665
- POINT 5428 -13.52076421705971 16.92688909198984
- POINT 5429 -13.00252392740061 17.80282689423603
- POINT 5430 -12.998413866338 16.9234253011904
- POINT 5431 -12.7404339170757 17.36292962737342
- POINT 5432 -14.02979306030074 15.16474248285489
- POINT 5433 -14.55273569758199 15.16992825407098
- POINT 5434 -14.03639819104111 16.04943470346083
- POINT 5435 -14.56179397742396 16.05410844354104
- POINT 5436 -13.77224846434048 15.60568723673743
- POINT 5437 -14.82036732248942 15.61339039057769
- POINT 5438 -15.08744403037848 16.05749240373201
- POINT 5439 -16.2090642477196 17.81010190909618
- POINT 5440 -15.93239653765298 17.37709080090277
- POINT 5441 -16.75104577713385 17.80975889004021
- POINT 5442 -17.29733902574828 17.80237948696045
- POINT 5443 -17.82900832379805 17.79250699444906
- POINT 5444 -18.125149458915 17.3358334365596
- POINT 5445 -17.74265051816197 16.90620584174569
- POINT 5446 -17.02043915652885 17.36861046666035
- POINT 5447 -17.24542039534538 16.92123752482653
- POINT 5448 -16.69912714673096 16.9286169279063
- POINT 5449 -6.088630944097952 30.61808470458812
- POINT 5450 -5.83075607699084 30.16946420465471
- POINT 5451 -5.321476310829926 30.16725940981392
- POINT 5452 -5.068073995839905 30.61330986323137
- POINT 5453 -5.324237322301012 31.06128512670801
- POINT 5454 -5.835924560406232 31.06356111209442
- POINT 5455 -7.109843760575517 30.62477446137646
- POINT 5456 -7.369526571375625 31.07527433075212
- POINT 5457 -8.131410593699739 30.63279557430232
- POINT 5458 -7.880480933021181 31.07974846151187
- POINT 5459 -7.872056536659996 30.1821803785594
- POINT 5460 -7.361674108531002 30.17880955550542
- POINT 5461 -7.613368185284306 29.73274317704884
- POINT 5462 -7.859855589284646 28.39452247461595
- POINT 5463 -8.117653318329905 28.84163918972367
- POINT 5464 -7.097783486965113 28.83658188443342
- POINT 5465 -7.355184427237546 29.28425727165385
- POINT 5466 -7.865566855366541 29.28762809470784
- POINT 5467 -6.840628617274074 28.38986724165644
- POINT 5468 -6.584305157135041 27.94375243992971
- POINT 5469 -7.602700719593607 27.94780783183896
- POINT 5470 -7.345760498175617 27.50220836892409
- POINT 5471 -7.350228227628744 28.39242754653586
- POINT 5472 -6.836865316533313 27.50054699198497
- POINT 5473 -8.859668248791966 36.47820331889234
- POINT 5474 -9.192245205163893 36.13326199675004
- POINT 5475 -8.926778614439051 35.64424337939984
- POINT 5476 -8.395990026835449 36.56035920049054
- POINT 5477 -8.152789553234477 36.06385683741578
- POINT 5478 -8.404917802902107 35.59893930067572
- POINT 5479 -9.445446661180085 34.74868923560489
- POINT 5480 -9.928438211384101 34.70959839015399
- POINT 5481 -9.1855200421729 34.27056920744505
- POINT 5482 -10.20212715258456 34.27925189416473
- POINT 5483 -9.94558386098727 33.81809877026199
- POINT 5484 -9.431469769528404 33.80794915972277
- POINT 5485 -6.972437622679337 37.78020738278309
- POINT 5486 -7.24426854141284 37.26861594573647
- POINT 5487 -7.793216463077668 37.97434844713221
- POINT 5488 -7.792711074552729 37.37441972564716
- POINT 5489 -7.321637197370867 38.17042362703923
- POINT 5490 -7.678418548302079 38.46731947176784
- POINT 5491 2.770028761860395 7.135494617296446
- POINT 5492 2.513285031132556 6.678759478210158
- POINT 5493 3.271742031244156 6.237332593188722
- POINT 5494 3.531281269795326 6.691994135932626
- POINT 5495 3.278350744254242 7.139721415732282
- POINT 5496 0.2485632276968463 6.187417834842025
- POINT 5497 0.7487077343841402 6.190600158863577
- POINT 5498 0.9957603933355736 5.733872218386605
- POINT 5499 -3.852233976253672e-08 5.724801600288686
- POINT 5500 0.7430348919708534 5.261285636016535
- POINT 5501 0.2485630875716218 5.254593871040265
- POINT 5502 -15.61382878159145 16.05886928995985
- POINT 5503 -16.1437233016679 16.05345044312521
- POINT 5504 -16.40287428664322 16.49110410761176
- POINT 5505 -15.63614367756524 16.93957798060823
- POINT 5506 -15.35525543652598 16.4995873429232
- POINT 5507 -16.17789304782668 16.93847704944558
- POINT 5508 1.997790912210466 5.756661433504865
- POINT 5509 2.253497865964841 6.221058560377475
- POINT 5510 2.760974614335455 6.228080964163087
- POINT 5511 3.011954866076441 5.77963167535604
- POINT 5512 2.242930314799657 5.302108943711701
- POINT 5513 4.543058481172607 4.904216705369631
- POINT 5514 4.288462587269439 5.349885195959473
- POINT 5515 4.803481147968283 5.359455913919637
- POINT 5516 3.775381101729453 5.34176464589557
- POINT 5517 4.285157939400719 4.447239361033324
- POINT 5518 3.759704530313033 4.444818867162756
- POINT 5519 5.325944699989877 6.259861521617189
- POINT 5520 5.843828725284497 6.255309577026809
- POINT 5521 6.104985755684442 5.803539343166328
- POINT 5522 5.838134749720831 5.370250903544328
- POINT 5523 5.065599245593544 5.809767091465639
- POINT 5524 5.320195139496712 5.364098600875796
- POINT 5525 -4.802971484868761 13.39198497902312
- POINT 5526 -4.296500513511889 13.39272959833429
- POINT 5527 -5.057585608825249 12.94868562370967
- POINT 5528 -6.335879478904616 10.72095926303271
- POINT 5529 -6.079388369501457 11.1680208620888
- POINT 5530 -6.84062880750044 11.61013355490421
- POINT 5531 -7.097783541825249 11.16341899720847
- POINT 5532 -6.331860502614183 11.61209385769366
- POINT 5533 -5.823064997821714 11.61413559838683
- POINT 5534 -6.341449844176644 9.827318953093449
- POINT 5535 -6.08863052415921 9.381915881388753
- POINT 5536 -6.346618173319224 8.933222069708673
- POINT 5537 -2.273750259397786 11.62081619889232
- POINT 5538 -2.526574075491812 12.06542620246332
- POINT 5539 -2.27331255849431 12.50912509652447
- POINT 5540 -2.779144893594244 12.50876127782604
- POINT 5541 -1.767930060637219 12.50939986568534
- POINT 5542 -1.51542042791521 12.06591801877112
- POINT 5543 -2.020500878739651 12.95273494104806
- POINT 5544 -7.369525954258662 8.924726485537136
- POINT 5545 -7.629644265520056 8.473224777180157
- POINT 5546 -6.606300873029995 8.482722239581177
- POINT 5547 -6.86610443150657 8.032890912771032
- POINT 5548 -6.859007304548753 8.928198671389605
- POINT 5549 -7.109843254547891 9.375226315664634
- POINT 5550 -7.380362326127036 8.024529817709622
- POINT 5551 -2.525426847734203 13.83692324382117
- POINT 5552 -2.272480651437661 14.27823799621374
- POINT 5553 -1.767382702124846 14.27830445157146
- POINT 5554 -1.514941488764452 13.83735499817217
- POINT 5555 -1.767575303258722 13.39510772470642
- POINT 5556 -2.272957801115813 13.39483295554556
- POINT 5557 -2.778352423215133 13.39455046016281
- POINT 5558 -1.767492689297242 23.96146211472275
- POINT 5559 -2.020306154315385 23.52210437322497
- POINT 5560 -1.263131319383013 23.08451873173783
- POINT 5561 -1.01019165252415 23.52275060399421
- POINT 5562 -1.768522078044251 23.08392505665697
- POINT 5563 -1.262295067277426 24.84067058321086
- POINT 5564 -1.514809979329161 24.40061412421192
- POINT 5565 -0.7575089425560693 23.96190261348339
- POINT 5566 -0.5049284856589678 24.40077541610661
- POINT 5567 -0.7573634011608242 24.84063535307396
- POINT 5568 -1.262539691533465 23.96159225924151
- POINT 5569 -4.549022158760552 26.16510835246748
- POINT 5570 -4.295100786789511 25.72310771361495
- POINT 5571 -3.789177566147076 25.72274610989047
- POINT 5572 -3.5366863417954 26.16386152627678
- POINT 5573 -3.790057654638633 26.60644962266168
- POINT 5574 -4.296500374351382 26.60727063581498
- POINT 5575 10.92066954525162 16.91793455038633
- POINT 5576 10.40486332046374 16.91768071485232
- POINT 5577 10.40472607340097 16.03513246006513
- POINT 5578 10.91930146715205 16.03530284192124
- POINT 5579 10.66209384858155 15.5935783467344
- POINT 5580 12.47199488428663 16.03898490629723
- POINT 5581 12.99157927565469 16.04165158150828
- POINT 5582 12.99841407818347 16.92342518505589
- POINT 5583 12.47539865640488 16.92143962440089
- POINT 5584 13.25572899738372 16.48539904153639
- POINT 5585 11.95273125070042 16.03712579643803
- POINT 5586 11.43576030048511 16.03598289401182
- POINT 5587 11.69364019254794 15.59489163101673
- POINT 5588 11.17839252530453 16.47753700734255
- POINT 5589 11.43712837858468 16.91861460247691
- POINT 5590 11.95613502281867 16.91958051454169
- POINT 5591 12.21411499222381 16.48007616929232
- POINT 5592 11.95093625080717 15.15244834498486
- POINT 5593 11.43396530059186 15.15130544255865
- POINT 5594 11.43270011507272 14.26415543114492
- POINT 5595 11.94630659667062 14.26478916362155
- POINT 5596 12.20840718969241 14.71058256512575
- POINT 5597 9.122219499790404 16.47724514251171
- POINT 5598 9.377742734846787 16.91780907858158
- POINT 5599 9.890905171317794 16.91769162950407
- POINT 5600 10.14797554282553 16.47686786990372
- POINT 5601 9.890767924255025 16.03514337471688
- POINT 5602 10.91783758504318 14.26368304084108
- POINT 5603 10.40540174398959 14.26408496861366
- POINT 5604 10.40452737681125 15.15066267039869
- POINT 5605 10.91910277056232 15.15083305225481
- POINT 5606 11.17639882882156 14.70838976622293
- POINT 5607 10.14864614667206 14.70832398270322
- POINT 5608 9.89163722469128 15.15106927718282
- POINT 5609 3.51170272767204 4.885646738160905
- POINT 5610 3.243367337511309 4.435819617914195
- POINT 5611 2.748276492019028 5.323513767621375
- POINT 5612 2.490019357650945 4.85524266500267
- POINT 5613 3.259043908927729 5.332765396647009
- POINT 5614 2.734686977480409 4.405829547072493
- POINT 5615 -3.031723722491756 12.95196238977117
- POINT 5616 -3.284985239489258 12.50826349571002
- POINT 5617 -4.044006831271692 12.95064364330777
- POINT 5618 -3.790057750626966 13.39355056268168
- POINT 5619 -3.284192769110147 13.39405267804679
- POINT 5620 -3.792541619613724 11.61935880772859
- POINT 5621 -3.538866240419825 12.0643618281409
- POINT 5622 -3.791445069317336 12.50756294008603
- POINT 5623 -4.297887832202258 12.50674197573865
- POINT 5624 -6.851155057129612 9.824663480890202
- POINT 5625 -6.593280296468273 10.27328393246655
- POINT 5626 -7.355184359388906 10.7157436666423
- POINT 5627 -7.613367931970085 10.26725782144039
- POINT 5628 -7.36167370683952 9.821191295037732
- POINT 5629 -6.845584691857582 10.71830379082946
- POINT 5630 -1.76803668438193 11.62082851212063
- POINT 5631 -2.021045203387837 11.17585468985119
- POINT 5632 -1.767940287819996 10.72933527995718
- POINT 5633 -1.262715371905262 11.62095650973
- POINT 5634 -1.010161141140113 11.17580760248892
- POINT 5635 -1.262535223830214 10.72890573157164
- POINT 5636 9.378288957212938 16.03556981048882
- POINT 5637 8.866491063323762 16.03593616844507
- POINT 5638 8.611811472818843 15.5950426706727
- POINT 5639 8.867790365254811 15.15257222445195
- POINT 5640 9.379158257649195 15.15149571295476
- POINT 5641 9.635039487788383 15.59383440065023
- POINT 5642 -4.299837112326497 11.6184558241427
- POINT 5643 -4.047052661692318 11.17415335935438
- POINT 5644 -4.301274150604154 10.72795380427197
- POINT 5645 -5.062470509557039 11.17165648927523
- POINT 5646 -4.809681860827208 10.72679960182707
- POINT 5647 -4.805074905311793 12.50557281219472
- POINT 5648 -5.312210919980426 12.50443575694401
- POINT 5649 -4.552513143357436 12.06249210897299
- POINT 5650 -5.567618673700705 12.05976576971038
- POINT 5651 -4.807024185436029 11.61728666059878
- POINT 5652 -5.315146540587978 11.61569277410551
-
-END POINTS LIST
-
-
-
-BEGIN MESH STRUCTURE DESCRIPTION
-
-CONVEX 0 GT_PK(2,2) 258 1447 259 1448 1449 293
-CONVEX 1 GT_PK(2,2) 25 1450 10 1451 1452 0
-CONVEX 2 GT_PK(2,2) 18 1453 17 1454 1455 36
-CONVEX 3 GT_PK(2,2) 1426 1456 1440 1457 1458 4
-CONVEX 4 GT_PK(2,2) 824 1459 823 1460 1461 863
-CONVEX 5 GT_PK(2,2) 824 1462 784 1459 1463 823
-CONVEX 6 GT_PK(2,2) 1058 1464 1020 1465 1466 1021
-CONVEX 7 GT_PK(2,2) 728 1467 767 1468 1469 768
-CONVEX 8 GT_PK(2,2) 395 1470 394 1471 1472 357
-CONVEX 9 GT_PK(2,2) 225 1473 258 1474 1447 259
-CONVEX 10 GT_PK(2,2) 160 1475 192 1476 1477 191
-CONVEX 11 GT_PK(2,2) 224 1478 192 1479 1477 191
-CONVEX 12 GT_PK(2,2) 224 1480 225 1481 1473 258
-CONVEX 13 GT_PK(2,2) 224 1480 225 1478 1482 192
-CONVEX 14 GT_PK(2,2) 216 1483 185 1484 1485 186
-CONVEX 15 GT_PK(2,2) 280 1486 281 1487 1488 247
-CONVEX 16 GT_PK(2,2) 280 1486 281 1489 1490 315
-CONVEX 17 GT_PK(2,2) 64 1491 65 1492 1493 88
-CONVEX 18 GT_PK(2,2) 6 1494 20 1495 1496 5
-CONVEX 19 GT_PK(2,2) 21 1497 6 1498 1494 20
-CONVEX 20 GT_PK(2,2) 21 1497 6 1499 1500 7
-CONVEX 21 GT_PK(2,2) 1428 1501 1442 1502 1503 1443
-CONVEX 22 GT_PK(2,2) 1408 1504 1426 1505 1506 1407
-CONVEX 23 GT_PK(2,2) 1373 1507 1396 1508 1509 1397
-CONVEX 24 GT_PK(2,2) 1431 1510 1430 1511 1512 1412
-CONVEX 25 GT_PK(2,2) 1431 1513 1445 1514 1515 1446
-CONVEX 26 GT_PK(2,2) 1431 1510 1430 1513 1516 1445
-CONVEX 27 GT_PK(2,2) 1218 1517 1185 1518 1519 1184
-CONVEX 28 GT_PK(2,2) 1218 1517 1185 1520 1521 1219
-CONVEX 29 GT_PK(2,2) 745 1522 705 1523 1524 3
-CONVEX 30 GT_PK(2,2) 745 1525 784 1523 1526 3
-CONVEX 31 GT_PK(2,2) 782 1527 743 1528 1529 744
-CONVEX 32 GT_PK(2,2) 782 1527 743 1530 1531 781
-CONVEX 33 GT_PK(2,2) 1165 1532 1130 1533 1534 1129
-CONVEX 34 GT_PK(2,2) 1262 1535 1229 1536 1537 1230
-CONVEX 35 GT_PK(2,2) 1164 1538 1198 1539 1540 1199
-CONVEX 36 GT_PK(2,2) 1164 1541 1165 1542 1533 1129
-CONVEX 37 GT_PK(2,2) 1164 1541 1165 1539 1543 1199
-CONVEX 38 GT_PK(2,2) 1232 1544 1198 1545 1540 1199
-CONVEX 39 GT_PK(2,2) 1232 1546 1231 1547 1548 1264
-CONVEX 40 GT_PK(2,2) 1232 1546 1231 1544 1549 1198
-CONVEX 41 GT_PK(2,2) 936 1550 937 1551 1552 975
-CONVEX 42 GT_PK(2,2) 316 1553 281 1554 1490 315
-CONVEX 43 GT_PK(2,2) 428 1555 429 1556 1557 467
-CONVEX 44 GT_PK(2,2) 319 1558 320 1559 1560 355
-CONVEX 45 GT_PK(2,2) 319 1561 354 1559 1562 355
-CONVEX 46 GT_PK(2,2) 1059 1563 1058 1564 1465 1021
-CONVEX 47 GT_PK(2,2) 706 1565 746 1566 1567 2
-CONVEX 48 GT_PK(2,2) 706 1565 746 1568 1569 747
-CONVEX 49 GT_PK(2,2) 706 1570 667 1566 1571 2
-CONVEX 50 GT_PK(2,2) 706 1572 668 1570 1573 667
-CONVEX 51 GT_PK(2,2) 1406 1574 1385 1575 1576 1407
-CONVEX 52 GT_PK(2,2) 1406 1577 1424 1578 1579 1405
-CONVEX 53 GT_PK(2,2) 1278 1580 1279 1581 1582 1247
-CONVEX 54 GT_PK(2,2) 1196 1583 1229 1584 1537 1230
-CONVEX 55 GT_PK(2,2) 806 1585 767 1586 1587 766
-CONVEX 56 GT_PK(2,2) 806 1588 845 1589 1590 846
-CONVEX 57 GT_PK(2,2) 806 1591 805 1586 1592 766
-CONVEX 58 GT_PK(2,2) 806 1591 805 1588 1593 845
-CONVEX 59 GT_PK(2,2) 727 1594 767 1595 1587 766
-CONVEX 60 GT_PK(2,2) 727 1596 728 1594 1467 767
-CONVEX 61 GT_PK(2,2) 807 1597 767 1598 1469 768
-CONVEX 62 GT_PK(2,2) 807 1599 806 1597 1585 767
-CONVEX 63 GT_PK(2,2) 807 1600 847 1601 1602 846
-CONVEX 64 GT_PK(2,2) 807 1599 806 1601 1589 846
-CONVEX 65 GT_PK(2,2) 403 1603 365 1604 1605 366
-CONVEX 66 GT_PK(2,2) 439 1606 478 1607 1608 477
-CONVEX 67 GT_PK(2,2) 325 1609 326 1610 1611 362
-CONVEX 68 GT_PK(2,2) 363 1612 326 1613 1614 327
-CONVEX 69 GT_PK(2,2) 363 1612 326 1615 1611 362
-CONVEX 70 GT_PK(2,2) 128 1616 158 1617 1618 157
-CONVEX 71 GT_PK(2,2) 189 1619 190 1620 1621 222
-CONVEX 72 GT_PK(2,2) 189 1619 190 1622 1623 158
-CONVEX 73 GT_PK(2,2) 189 1624 156 1625 1626 157
-CONVEX 74 GT_PK(2,2) 189 1622 158 1625 1618 157
-CONVEX 75 GT_PK(2,2) 255 1627 256 1628 1629 222
-CONVEX 76 GT_PK(2,2) 253 1630 252 1631 1632 219
-CONVEX 77 GT_PK(2,2) 253 1633 220 1631 1634 219
-CONVEX 78 GT_PK(2,2) 187 1635 220 1636 1634 219
-CONVEX 79 GT_PK(2,2) 291 1637 326 1638 1614 327
-CONVEX 80 GT_PK(2,2) 161 1639 160 1640 1475 192
-CONVEX 81 GT_PK(2,2) 131 1641 161 1642 1639 160
-CONVEX 82 GT_PK(2,2) 131 1643 104 1644 1645 132
-CONVEX 83 GT_PK(2,2) 131 1641 161 1644 1646 132
-CONVEX 84 GT_PK(2,2) 129 1647 128 1648 1616 158
-CONVEX 85 GT_PK(2,2) 223 1649 224 1650 1479 191
-CONVEX 86 GT_PK(2,2) 223 1651 256 1652 1629 222
-CONVEX 87 GT_PK(2,2) 223 1653 190 1650 1654 191
-CONVEX 88 GT_PK(2,2) 223 1653 190 1652 1621 222
-CONVEX 89 GT_PK(2,2) 127 1655 155 1656 1657 154
-CONVEX 90 GT_PK(2,2) 127 1658 126 1656 1659 154
-CONVEX 91 GT_PK(2,2) 127 1660 100 1658 1661 126
-CONVEX 92 GT_PK(2,2) 181 1662 182 1663 1664 152
-CONVEX 93 GT_PK(2,2) 246 1665 280 1666 1487 247
-CONVEX 94 GT_PK(2,2) 124 1667 99 1668 1669 98
-CONVEX 95 GT_PK(2,2) 125 1670 124 1671 1672 152
-CONVEX 96 GT_PK(2,2) 125 1670 124 1673 1667 99
-CONVEX 97 GT_PK(2,2) 125 1673 99 1674 1675 76
-CONVEX 98 GT_PK(2,2) 125 1676 100 1674 1677 76
-CONVEX 99 GT_PK(2,2) 125 1676 100 1678 1661 126
-CONVEX 100 GT_PK(2,2) 75 1679 53 1680 1681 98
-CONVEX 101 GT_PK(2,2) 75 1682 99 1680 1669 98
-CONVEX 102 GT_PK(2,2) 75 1682 99 1683 1675 76
-CONVEX 103 GT_PK(2,2) 217 1684 218 1685 1686 186
-CONVEX 104 GT_PK(2,2) 217 1687 216 1685 1484 186
-CONVEX 105 GT_PK(2,2) 217 1687 216 1688 1689 249
-CONVEX 106 GT_PK(2,2) 248 1690 216 1691 1689 249
-CONVEX 107 GT_PK(2,2) 248 1692 281 1693 1488 247
-CONVEX 108 GT_PK(2,2) 282 1694 316 1695 1696 317
-CONVEX 109 GT_PK(2,2) 282 1694 316 1697 1553 281
-CONVEX 110 GT_PK(2,2) 282 1698 248 1699 1691 249
-CONVEX 111 GT_PK(2,2) 282 1698 248 1697 1692 281
-CONVEX 112 GT_PK(2,2) 314 1700 280 1701 1489 315
-CONVEX 113 GT_PK(2,2) 12 1702 27 1703 1704 13
-CONVEX 114 GT_PK(2,2) 35 1705 56 1706 1707 34
-CONVEX 115 GT_PK(2,2) 79 1708 56 1709 1710 80
-CONVEX 116 GT_PK(2,2) 79 1711 34 1712 1713 55
-CONVEX 117 GT_PK(2,2) 79 1708 56 1711 1707 34
-CONVEX 118 GT_PK(2,2) 43 1714 25 1715 1716 44
-CONVEX 119 GT_PK(2,2) 43 1717 65 1715 1718 44
-CONVEX 120 GT_PK(2,2) 43 1719 64 1717 1491 65
-CONVEX 121 GT_PK(2,2) 22 1720 21 1721 1499 7
-CONVEX 122 GT_PK(2,2) 22 1722 8 1721 1723 7
-CONVEX 123 GT_PK(2,2) 22 1722 8 1724 1725 23
-CONVEX 124 GT_PK(2,2) 22 1724 23 1726 1727 41
-CONVEX 125 GT_PK(2,2) 1427 1728 1428 1729 1501 1442
-CONVEX 126 GT_PK(2,2) 1427 1730 1408 1731 1504 1426
-CONVEX 127 GT_PK(2,2) 1427 1728 1428 1732 1733 1409
-CONVEX 128 GT_PK(2,2) 1427 1730 1408 1732 1734 1409
-CONVEX 129 GT_PK(2,2) 1386 1735 1385 1736 1576 1407
-CONVEX 130 GT_PK(2,2) 1386 1737 1408 1736 1505 1407
-CONVEX 131 GT_PK(2,2) 885 1738 845 1739 1590 846
-CONVEX 132 GT_PK(2,2) 1193 1740 1192 1741 1742 1158
-CONVEX 133 GT_PK(2,2) 1429 1743 1428 1744 1502 1443
-CONVEX 134 GT_PK(2,2) 1391 1745 1390 1746 1747 1412
-CONVEX 135 GT_PK(2,2) 1248 1748 1279 1749 1582 1247
-CONVEX 136 GT_PK(2,2) 1183 1750 1149 1751 1752 1148
-CONVEX 137 GT_PK(2,2) 1183 1750 1149 1753 1754 1184
-CONVEX 138 GT_PK(2,2) 1187 1755 1188 1756 1757 1221
-CONVEX 139 GT_PK(2,2) 468 1758 429 1759 1557 467
-CONVEX 140 GT_PK(2,2) 470 1760 469 1761 1762 431
-CONVEX 141 GT_PK(2,2) 507 1763 508 1764 1765 546
-CONVEX 142 GT_PK(2,2) 507 1766 545 1764 1767 546
-CONVEX 143 GT_PK(2,2) 507 1768 470 1769 1760 469
-CONVEX 144 GT_PK(2,2) 507 1768 470 1763 1770 508
-CONVEX 145 GT_PK(2,2) 507 1771 468 1769 1772 469
-CONVEX 146 GT_PK(2,2) 704 1773 745 1774 1522 705
-CONVEX 147 GT_PK(2,2) 704 1773 745 1775 1776 744
-CONVEX 148 GT_PK(2,2) 585 1777 545 1778 1767 546
-CONVEX 149 GT_PK(2,2) 898 1779 937 1780 1781 938
-CONVEX 150 GT_PK(2,2) 783 1782 784 1783 1463 823
-CONVEX 151 GT_PK(2,2) 783 1784 745 1782 1525 784
-CONVEX 152 GT_PK(2,2) 783 1784 745 1785 1776 744
-CONVEX 153 GT_PK(2,2) 783 1786 782 1785 1528 744
-CONVEX 154 GT_PK(2,2) 783 1783 823 1787 1788 822
-CONVEX 155 GT_PK(2,2) 783 1786 782 1787 1789 822
-CONVEX 156 GT_PK(2,2) 1263 1790 1262 1791 1536 1230
-CONVEX 157 GT_PK(2,2) 1263 1792 1231 1791 1793 1230
-CONVEX 158 GT_PK(2,2) 1263 1792 1231 1794 1548 1264
-CONVEX 159 GT_PK(2,2) 897 1795 936 1796 1797 896
-CONVEX 160 GT_PK(2,2) 897 1795 936 1798 1550 937
-CONVEX 161 GT_PK(2,2) 897 1799 898 1800 1801 858
-CONVEX 162 GT_PK(2,2) 897 1799 898 1798 1779 937
-CONVEX 163 GT_PK(2,2) 818 1802 779 1803 1804 778
-CONVEX 164 GT_PK(2,2) 821 1805 820 1806 1807 781
-CONVEX 165 GT_PK(2,2) 821 1808 782 1809 1789 822
-CONVEX 166 GT_PK(2,2) 821 1808 782 1806 1530 781
-CONVEX 167 GT_PK(2,2) 940 1810 939 1811 1812 978
-CONVEX 168 GT_PK(2,2) 940 1810 939 1813 1814 900
-CONVEX 169 GT_PK(2,2) 902 1815 942 1816 1817 903
-CONVEX 170 GT_PK(2,2) 902 1815 942 1818 1819 941
-CONVEX 171 GT_PK(2,2) 976 1820 937 1821 1781 938
-CONVEX 172 GT_PK(2,2) 976 1820 937 1822 1552 975
-CONVEX 173 GT_PK(2,2) 352 1823 316 1824 1696 317
-CONVEX 174 GT_PK(2,2) 430 1825 392 1826 1827 429
-CONVEX 175 GT_PK(2,2) 430 1828 469 1829 1762 431
-CONVEX 176 GT_PK(2,2) 430 1830 468 1826 1758 429
-CONVEX 177 GT_PK(2,2) 430 1830 468 1828 1772 469
-CONVEX 178 GT_PK(2,2) 393 1831 430 1832 1829 431
-CONVEX 179 GT_PK(2,2) 393 1831 430 1833 1825 392
-CONVEX 180 GT_PK(2,2) 391 1834 392 1835 1827 429
-CONVEX 181 GT_PK(2,2) 391 1836 428 1837 1838 390
-CONVEX 182 GT_PK(2,2) 391 1836 428 1835 1555 429
-CONVEX 183 GT_PK(2,2) 391 1839 354 1837 1840 390
-CONVEX 184 GT_PK(2,2) 391 1834 392 1841 1842 355
-CONVEX 185 GT_PK(2,2) 391 1839 354 1841 1562 355
-CONVEX 186 GT_PK(2,2) 318 1843 319 1844 1845 284
-CONVEX 187 GT_PK(2,2) 318 1843 319 1846 1561 354
-CONVEX 188 GT_PK(2,2) 285 1847 319 1848 1558 320
-CONVEX 189 GT_PK(2,2) 285 1849 284 1850 1851 251
-CONVEX 190 GT_PK(2,2) 285 1847 319 1849 1845 284
-CONVEX 191 GT_PK(2,2) 707 1852 706 1853 1568 747
-CONVEX 192 GT_PK(2,2) 707 1852 706 1854 1572 668
-CONVEX 193 GT_PK(2,2) 786 1855 746 1856 1857 785
-CONVEX 194 GT_PK(2,2) 786 1855 746 1858 1569 747
-CONVEX 195 GT_PK(2,2) 1265 1859 1233 1860 1861 1234
-CONVEX 196 GT_PK(2,2) 1201 1862 1233 1863 1861 1234
-CONVEX 197 GT_PK(2,2) 1201 1862 1233 1864 1865 1200
-CONVEX 198 GT_PK(2,2) 1134 1866 1135 1867 1868 1099
-CONVEX 199 GT_PK(2,2) 1132 1869 1166 1870 1871 1131
-CONVEX 200 GT_PK(2,2) 1095 1872 1059 1873 1563 1058
-CONVEX 201 GT_PK(2,2) 948 1874 909 1875 1876 910
-CONVEX 202 GT_PK(2,2) 1103 1877 1138 1878 1879 1102
-CONVEX 203 GT_PK(2,2) 717 1880 756 1881 1882 757
-CONVEX 204 GT_PK(2,2) 717 1883 677 1884 1885 678
-CONVEX 205 GT_PK(2,2) 717 1880 756 1886 1887 716
-CONVEX 206 GT_PK(2,2) 717 1883 677 1886 1888 716
-CONVEX 207 GT_PK(2,2) 796 1889 756 1890 1882 757
-CONVEX 208 GT_PK(2,2) 796 1891 797 1890 1892 757
-CONVEX 209 GT_PK(2,2) 796 1891 797 1893 1894 836
-CONVEX 210 GT_PK(2,2) 796 1895 835 1893 1896 836
-CONVEX 211 GT_PK(2,2) 599 1897 559 1898 1899 598
-CONVEX 212 GT_PK(2,2) 759 1900 760 1901 1902 720
-CONVEX 213 GT_PK(2,2) 759 1903 719 1901 1904 720
-CONVEX 214 GT_PK(2,2) 718 1905 678 1906 1907 679
-CONVEX 215 GT_PK(2,2) 718 1908 719 1906 1909 679
-CONVEX 216 GT_PK(2,2) 718 1910 717 1911 1881 757
-CONVEX 217 GT_PK(2,2) 718 1910 717 1905 1884 678
-CONVEX 218 GT_PK(2,2) 721 1912 760 1913 1902 720
-CONVEX 219 GT_PK(2,2) 721 1914 681 1913 1915 720
-CONVEX 220 GT_PK(2,2) 721 1914 681 1916 1917 682
-CONVEX 221 GT_PK(2,2) 721 1918 761 1912 1919 760
-CONVEX 222 GT_PK(2,2) 680 1920 640 1921 1922 641
-CONVEX 223 GT_PK(2,2) 680 1923 681 1921 1924 641
-CONVEX 224 GT_PK(2,2) 680 1920 640 1925 1926 679
-CONVEX 225 GT_PK(2,2) 680 1923 681 1927 1915 720
-CONVEX 226 GT_PK(2,2) 680 1928 719 1925 1909 679
-CONVEX 227 GT_PK(2,2) 680 1928 719 1927 1904 720
-CONVEX 228 GT_PK(2,2) 1425 1929 1426 1930 1506 1407
-CONVEX 229 GT_PK(2,2) 1425 1931 1406 1930 1575 1407
-CONVEX 230 GT_PK(2,2) 1425 1931 1406 1932 1577 1424
-CONVEX 231 GT_PK(2,2) 1425 1929 1426 1933 1456 1440
-CONVEX 232 GT_PK(2,2) 1425 1933 1440 1934 1935 1439
-CONVEX 233 GT_PK(2,2) 1425 1932 1424 1934 1936 1439
-CONVEX 234 GT_PK(2,2) 1384 1937 1361 1938 1939 1385
-CONVEX 235 GT_PK(2,2) 1384 1940 1405 1941 1942 1383
-CONVEX 236 GT_PK(2,2) 1384 1943 1406 1940 1578 1405
-CONVEX 237 GT_PK(2,2) 1384 1943 1406 1938 1574 1385
-CONVEX 238 GT_PK(2,2) 971 1944 970 1945 1946 1009
-CONVEX 239 GT_PK(2,2) 932 1947 970 1948 1949 931
-CONVEX 240 GT_PK(2,2) 932 1950 971 1951 1952 933
-CONVEX 241 GT_PK(2,2) 932 1950 971 1947 1944 970
-CONVEX 242 GT_PK(2,2) 969 1953 970 1954 1949 931
-CONVEX 243 GT_PK(2,2) 969 1955 930 1954 1956 931
-CONVEX 244 GT_PK(2,2) 969 1955 930 1957 1958 968
-CONVEX 245 GT_PK(2,2) 895 1959 894 1960 1961 855
-CONVEX 246 GT_PK(2,2) 1197 1962 1231 1963 1793 1230
-CONVEX 247 GT_PK(2,2) 1197 1964 1196 1963 1584 1230
-CONVEX 248 GT_PK(2,2) 1197 1962 1231 1965 1549 1198
-CONVEX 249 GT_PK(2,2) 609 1966 610 1967 1968 649
-CONVEX 250 GT_PK(2,2) 241 1969 275 1970 1971 242
-CONVEX 251 GT_PK(2,2) 241 1972 274 1969 1973 275
-CONVEX 252 GT_PK(2,2) 29 1974 14 1975 1976 15
-CONVEX 253 GT_PK(2,2) 66 1977 44 1978 1979 45
-CONVEX 254 GT_PK(2,2) 66 1980 65 1977 1718 44
-CONVEX 255 GT_PK(2,2) 460 1981 459 1982 1983 498
-CONVEX 256 GT_PK(2,2) 276 1984 275 1985 1971 242
-CONVEX 257 GT_PK(2,2) 455 1986 454 1987 1988 416
-CONVEX 258 GT_PK(2,2) 455 1986 454 1989 1990 493
-CONVEX 259 GT_PK(2,2) 307 1991 306 1992 1993 342
-CONVEX 260 GT_PK(2,2) 310 1994 345 1995 1996 346
-CONVEX 261 GT_PK(2,2) 310 1997 276 1998 1984 275
-CONVEX 262 GT_PK(2,2) 417 1999 455 2000 1987 416
-CONVEX 263 GT_PK(2,2) 417 1999 455 2001 2002 456
-CONVEX 264 GT_PK(2,2) 417 2003 379 2000 2004 416
-CONVEX 265 GT_PK(2,2) 417 2003 379 2005 2006 380
-CONVEX 266 GT_PK(2,2) 343 2007 307 2008 2009 308
-CONVEX 267 GT_PK(2,2) 343 2007 307 2010 1992 342
-CONVEX 268 GT_PK(2,2) 343 2011 379 2010 2012 342
-CONVEX 269 GT_PK(2,2) 343 2011 379 2013 2006 380
-CONVEX 270 GT_PK(2,2) 339 2014 304 2015 2016 303
-CONVEX 271 GT_PK(2,2) 341 2017 306 2018 1993 342
-CONVEX 272 GT_PK(2,2) 726 2019 727 2020 1595 766
-CONVEX 273 GT_PK(2,2) 688 2021 727 2022 1596 728
-CONVEX 274 GT_PK(2,2) 628 2023 668 2024 2025 629
-CONVEX 275 GT_PK(2,2) 628 2023 668 2026 1573 667
-CONVEX 276 GT_PK(2,2) 589 2027 628 2028 2024 629
-CONVEX 277 GT_PK(2,2) 589 2027 628 2029 2030 588
-CONVEX 278 GT_PK(2,2) 364 2031 363 2032 1613 327
-CONVEX 279 GT_PK(2,2) 364 2031 363 2033 2034 401
-CONVEX 280 GT_PK(2,2) 328 2035 364 2036 2037 365
-CONVEX 281 GT_PK(2,2) 328 2035 364 2038 2032 327
-CONVEX 282 GT_PK(2,2) 329 2039 365 2040 1605 366
-CONVEX 283 GT_PK(2,2) 329 2041 330 2040 2042 366
-CONVEX 284 GT_PK(2,2) 329 2043 328 2039 2036 365
-CONVEX 285 GT_PK(2,2) 329 2043 328 2044 2045 293
-CONVEX 286 GT_PK(2,2) 367 2046 330 2047 2042 366
-CONVEX 287 GT_PK(2,2) 601 2048 640 2049 1922 641
-CONVEX 288 GT_PK(2,2) 562 2050 522 2051 2052 561
-CONVEX 289 GT_PK(2,2) 562 2053 601 2051 2054 561
-CONVEX 290 GT_PK(2,2) 523 2055 562 2056 2050 522
-CONVEX 291 GT_PK(2,2) 523 2055 562 2057 2058 563
-CONVEX 292 GT_PK(2,2) 521 2059 522 2060 2052 561
-CONVEX 293 GT_PK(2,2) 397 2061 398 2062 2063 360
-CONVEX 294 GT_PK(2,2) 437 2064 398 2065 2066 399
-CONVEX 295 GT_PK(2,2) 361 2067 398 2068 2063 360
-CONVEX 296 GT_PK(2,2) 361 2069 325 2070 1610 362
-CONVEX 297 GT_PK(2,2) 361 2070 362 2071 2072 399
-CONVEX 298 GT_PK(2,2) 361 2067 398 2071 2066 399
-CONVEX 299 GT_PK(2,2) 286 2073 322 2074 2075 321
-CONVEX 300 GT_PK(2,2) 359 2076 397 2077 2078 396
-CONVEX 301 GT_PK(2,2) 359 2076 397 2079 2062 360
-CONVEX 302 GT_PK(2,2) 358 2080 321 2081 2082 357
-CONVEX 303 GT_PK(2,2) 358 2083 322 2080 2075 321
-CONVEX 304 GT_PK(2,2) 358 2084 395 2081 1471 357
-CONVEX 305 GT_PK(2,2) 358 2085 359 2083 2086 322
-CONVEX 306 GT_PK(2,2) 358 2084 395 2087 2088 396
-CONVEX 307 GT_PK(2,2) 358 2085 359 2087 2077 396
-CONVEX 308 GT_PK(2,2) 402 2089 403 2090 1603 365
-CONVEX 309 GT_PK(2,2) 402 2091 364 2092 2033 401
-CONVEX 310 GT_PK(2,2) 402 2091 364 2090 2037 365
-CONVEX 311 GT_PK(2,2) 400 2093 439 2094 2095 401
-CONVEX 312 GT_PK(2,2) 400 2096 363 2094 2034 401
-CONVEX 313 GT_PK(2,2) 400 2097 362 2098 2072 399
-CONVEX 314 GT_PK(2,2) 400 2096 363 2097 1615 362
-CONVEX 315 GT_PK(2,2) 438 2099 439 2100 1607 477
-CONVEX 316 GT_PK(2,2) 438 2101 437 2102 2065 399
-CONVEX 317 GT_PK(2,2) 438 2103 400 2102 2098 399
-CONVEX 318 GT_PK(2,2) 438 2103 400 2099 2093 439
-CONVEX 319 GT_PK(2,2) 101 2104 77 2105 2106 102
-CONVEX 320 GT_PK(2,2) 101 2107 129 2105 2108 102
-CONVEX 321 GT_PK(2,2) 101 2107 129 2109 1647 128
-CONVEX 322 GT_PK(2,2) 188 2110 189 2111 1624 156
-CONVEX 323 GT_PK(2,2) 188 2112 187 2111 2113 156
-CONVEX 324 GT_PK(2,2) 188 2112 187 2114 1635 220
-CONVEX 325 GT_PK(2,2) 254 2115 253 2116 1633 220
-CONVEX 326 GT_PK(2,2) 254 2117 255 2118 2119 289
-CONVEX 327 GT_PK(2,2) 287 2120 253 2121 1630 252
-CONVEX 328 GT_PK(2,2) 287 2122 286 2121 2123 252
-CONVEX 329 GT_PK(2,2) 287 2122 286 2124 2073 322
-CONVEX 330 GT_PK(2,2) 292 2125 291 2126 1638 327
-CONVEX 331 GT_PK(2,2) 292 2127 258 2128 1448 293
-CONVEX 332 GT_PK(2,2) 292 2129 328 2128 2045 293
-CONVEX 333 GT_PK(2,2) 292 2129 328 2126 2038 327
-CONVEX 334 GT_PK(2,2) 257 2130 224 2131 1481 258
-CONVEX 335 GT_PK(2,2) 257 2132 292 2131 2127 258
-CONVEX 336 GT_PK(2,2) 257 2132 292 2133 2125 291
-CONVEX 337 GT_PK(2,2) 257 2133 291 2134 2135 256
-CONVEX 338 GT_PK(2,2) 257 2136 223 2134 1651 256
-CONVEX 339 GT_PK(2,2) 257 2136 223 2130 1649 224
-CONVEX 340 GT_PK(2,2) 290 2137 325 2138 1609 326
-CONVEX 341 GT_PK(2,2) 290 2139 291 2138 1637 326
-CONVEX 342 GT_PK(2,2) 290 2137 325 2140 2141 289
-CONVEX 343 GT_PK(2,2) 290 2142 255 2140 2119 289
-CONVEX 344 GT_PK(2,2) 290 2142 255 2143 1627 256
-CONVEX 345 GT_PK(2,2) 290 2139 291 2143 2135 256
-CONVEX 346 GT_PK(2,2) 103 2144 131 2145 1643 104
-CONVEX 347 GT_PK(2,2) 103 2146 77 2147 2106 102
-CONVEX 348 GT_PK(2,2) 103 2148 54 2146 2149 77
-CONVEX 349 GT_PK(2,2) 130 2150 129 2151 2108 102
-CONVEX 350 GT_PK(2,2) 130 2152 131 2153 1642 160
-CONVEX 351 GT_PK(2,2) 130 2154 103 2151 2147 102
-CONVEX 352 GT_PK(2,2) 130 2154 103 2152 2144 131
-CONVEX 353 GT_PK(2,2) 159 2155 190 2156 1654 191
-CONVEX 354 GT_PK(2,2) 159 2157 130 2158 2150 129
-CONVEX 355 GT_PK(2,2) 159 2155 190 2159 1623 158
-CONVEX 356 GT_PK(2,2) 159 2158 129 2159 1648 158
-CONVEX 357 GT_PK(2,2) 159 2160 160 2156 1476 191
-CONVEX 358 GT_PK(2,2) 159 2157 130 2160 2153 160
-CONVEX 359 GT_PK(2,2) 214 2161 183 2162 2163 182
-CONVEX 360 GT_PK(2,2) 214 2164 246 2165 1666 247
-CONVEX 361 GT_PK(2,2) 184 2166 183 2167 2168 154
-CONVEX 362 GT_PK(2,2) 184 2169 216 2170 1483 185
-CONVEX 363 GT_PK(2,2) 184 2171 155 2167 1657 154
-CONVEX 364 GT_PK(2,2) 184 2170 185 2171 2172 155
-CONVEX 365 GT_PK(2,2) 153 2173 183 2174 2163 182
-CONVEX 366 GT_PK(2,2) 153 2174 182 2175 1664 152
-CONVEX 367 GT_PK(2,2) 153 2176 126 2177 1659 154
-CONVEX 368 GT_PK(2,2) 153 2173 183 2177 2168 154
-CONVEX 369 GT_PK(2,2) 153 2178 125 2175 1671 152
-CONVEX 370 GT_PK(2,2) 153 2178 125 2176 1678 126
-CONVEX 371 GT_PK(2,2) 151 2179 181 2180 1663 152
-CONVEX 372 GT_PK(2,2) 151 2181 124 2180 1672 152
-CONVEX 373 GT_PK(2,2) 73 2182 52 2183 2184 33
-CONVEX 374 GT_PK(2,2) 250 2185 217 2186 1684 218
-CONVEX 375 GT_PK(2,2) 250 2187 284 2188 1851 251
-CONVEX 376 GT_PK(2,2) 250 2186 218 2188 2189 251
-CONVEX 377 GT_PK(2,2) 250 2185 217 2190 1688 249
-CONVEX 378 GT_PK(2,2) 215 2191 248 2192 1690 216
-CONVEX 379 GT_PK(2,2) 215 2193 184 2192 2169 216
-CONVEX 380 GT_PK(2,2) 215 2193 184 2194 2166 183
-CONVEX 381 GT_PK(2,2) 215 2195 214 2194 2161 183
-CONVEX 382 GT_PK(2,2) 215 2191 248 2196 1693 247
-CONVEX 383 GT_PK(2,2) 215 2195 214 2196 2165 247
-CONVEX 384 GT_PK(2,2) 279 2197 314 2198 1700 280
-CONVEX 385 GT_PK(2,2) 279 2199 246 2200 2201 245
-CONVEX 386 GT_PK(2,2) 279 2199 246 2198 1665 280
-CONVEX 387 GT_PK(2,2) 279 2202 278 2200 2203 245
-CONVEX 388 GT_PK(2,2) 279 2202 278 2204 2205 313
-CONVEX 389 GT_PK(2,2) 279 2197 314 2204 2206 313
-CONVEX 390 GT_PK(2,2) 11 2207 25 2208 1451 0
-CONVEX 391 GT_PK(2,2) 57 2209 35 2210 1705 56
-CONVEX 392 GT_PK(2,2) 57 2210 56 2211 1710 80
-CONVEX 393 GT_PK(2,2) 57 2212 17 2213 1455 36
-CONVEX 394 GT_PK(2,2) 57 2209 35 2212 2214 17
-CONVEX 395 GT_PK(2,2) 105 2215 79 2216 1709 80
-CONVEX 396 GT_PK(2,2) 105 2215 79 2217 2218 104
-CONVEX 397 GT_PK(2,2) 105 2219 106 2216 2220 80
-CONVEX 398 GT_PK(2,2) 105 2217 104 2221 1645 132
-CONVEX 399 GT_PK(2,2) 78 2222 79 2223 2218 104
-CONVEX 400 GT_PK(2,2) 78 2224 103 2223 2145 104
-CONVEX 401 GT_PK(2,2) 78 2224 103 2225 2148 54
-CONVEX 402 GT_PK(2,2) 78 2225 54 2226 2227 55
-CONVEX 403 GT_PK(2,2) 78 2222 79 2226 1712 55
-CONVEX 404 GT_PK(2,2) 162 2228 161 2229 1646 132
-CONVEX 405 GT_PK(2,2) 302 2230 268 2231 2232 303
-CONVEX 406 GT_PK(2,2) 37 2233 18 2234 1454 36
-CONVEX 407 GT_PK(2,2) 37 2235 19 2233 2236 18
-CONVEX 408 GT_PK(2,2) 201 2237 202 2238 2239 234
-CONVEX 409 GT_PK(2,2) 201 2240 233 2238 2241 234
-CONVEX 410 GT_PK(2,2) 87 2242 64 2243 1492 88
-CONVEX 411 GT_PK(2,2) 139 2244 168 2245 2246 169
-CONVEX 412 GT_PK(2,2) 9 2247 8 2248 1725 23
-CONVEX 413 GT_PK(2,2) 24 2249 43 2250 1714 25
-CONVEX 414 GT_PK(2,2) 24 2250 25 2251 1450 10
-CONVEX 415 GT_PK(2,2) 24 2252 9 2251 2253 10
-CONVEX 416 GT_PK(2,2) 24 2252 9 2254 2248 23
-CONVEX 417 GT_PK(2,2) 42 2255 23 2256 1727 41
-CONVEX 418 GT_PK(2,2) 42 2257 43 2258 1719 64
-CONVEX 419 GT_PK(2,2) 42 2259 24 2255 2254 23
-CONVEX 420 GT_PK(2,2) 42 2259 24 2257 2249 43
-CONVEX 421 GT_PK(2,2) 39 2260 21 2261 1498 20
-CONVEX 422 GT_PK(2,2) 1441 2262 1427 2263 1729 1442
-CONVEX 423 GT_PK(2,2) 1441 2264 1426 2265 1457 4
-CONVEX 424 GT_PK(2,2) 1441 2262 1427 2264 1731 1426
-CONVEX 425 GT_PK(2,2) 1387 2266 1408 2267 1734 1409
-CONVEX 426 GT_PK(2,2) 1387 2268 1386 2266 1737 1408
-CONVEX 427 GT_PK(2,2) 1337 2269 1309 2270 2271 1336
-CONVEX 428 GT_PK(2,2) 1337 2269 1309 2272 2273 1310
-CONVEX 429 GT_PK(2,2) 1362 2274 1361 2275 1939 1385
-CONVEX 430 GT_PK(2,2) 1362 2276 1386 2275 1735 1385
-CONVEX 431 GT_PK(2,2) 1362 2274 1361 2277 2278 1336
-CONVEX 432 GT_PK(2,2) 1362 2279 1337 2277 2270 1336
-CONVEX 433 GT_PK(2,2) 1076 2280 1075 2281 2282 1112
-CONVEX 434 GT_PK(2,2) 1000 2283 1001 2284 2285 1039
-CONVEX 435 GT_PK(2,2) 1040 2286 1001 2287 2285 1039
-CONVEX 436 GT_PK(2,2) 1040 2288 1078 2289 2290 1041
-CONVEX 437 GT_PK(2,2) 927 2291 966 2292 2293 928
-CONVEX 438 GT_PK(2,2) 927 2294 888 2292 2295 928
-CONVEX 439 GT_PK(2,2) 927 2296 887 2294 2297 888
-CONVEX 440 GT_PK(2,2) 925 2298 924 2299 2300 885
-CONVEX 441 GT_PK(2,2) 1415 2301 1433 2302 2303 1434
-CONVEX 442 GT_PK(2,2) 1415 2304 1414 2301 2305 1433
-CONVEX 443 GT_PK(2,2) 1432 2306 1414 2307 2305 1433
-CONVEX 444 GT_PK(2,2) 1222 2308 1188 2309 2310 1189
-CONVEX 445 GT_PK(2,2) 1222 2308 1188 2311 1757 1221
-CONVEX 446 GT_PK(2,2) 1348 2312 1373 2313 1508 1397
-CONVEX 447 GT_PK(2,2) 1347 2314 1348 2315 2312 1373
-CONVEX 448 GT_PK(2,2) 1347 2314 1348 2316 2317 1320
-CONVEX 449 GT_PK(2,2) 1416 2318 1395 2319 2320 1417
-CONVEX 450 GT_PK(2,2) 1371 2321 1345 2322 2323 1346
-CONVEX 451 GT_PK(2,2) 1371 2321 1345 2324 2325 1370
-CONVEX 452 GT_PK(2,2) 1372 2326 1347 2327 2328 1346
-CONVEX 453 GT_PK(2,2) 1372 2326 1347 2329 2315 1373
-CONVEX 454 GT_PK(2,2) 1372 2330 1371 2327 2322 1346
-CONVEX 455 GT_PK(2,2) 1372 2330 1371 2331 2332 1395
-CONVEX 456 GT_PK(2,2) 1372 2329 1373 2333 1507 1396
-CONVEX 457 GT_PK(2,2) 1372 2333 1396 2334 2335 1417
-CONVEX 458 GT_PK(2,2) 1372 2331 1395 2334 2320 1417
-CONVEX 459 GT_PK(2,2) 1344 2336 1369 2337 2338 1370
-CONVEX 460 GT_PK(2,2) 1344 2339 1345 2337 2325 1370
-CONVEX 461 GT_PK(2,2) 1344 2340 1343 2341 2342 1316
-CONVEX 462 GT_PK(2,2) 1344 2340 1343 2336 2343 1369
-CONVEX 463 GT_PK(2,2) 1317 2344 1344 2345 2341 1316
-CONVEX 464 GT_PK(2,2) 1317 2344 1344 2346 2339 1345
-CONVEX 465 GT_PK(2,2) 1444 2347 1429 2348 1744 1443
-CONVEX 466 GT_PK(2,2) 1444 2349 1430 2350 1516 1445
-CONVEX 467 GT_PK(2,2) 1444 2347 1429 2349 2351 1430
-CONVEX 468 GT_PK(2,2) 1410 2352 1428 2353 1733 1409
-CONVEX 469 GT_PK(2,2) 1410 2354 1429 2352 1743 1428
-CONVEX 470 GT_PK(2,2) 1368 2355 1369 2356 2357 1392
-CONVEX 471 GT_PK(2,2) 1368 2358 1391 2356 2359 1392
-CONVEX 472 GT_PK(2,2) 1368 2360 1343 2355 2343 1369
-CONVEX 473 GT_PK(2,2) 1413 2361 1432 2362 2306 1414
-CONVEX 474 GT_PK(2,2) 1413 2363 1431 2364 1511 1412
-CONVEX 475 GT_PK(2,2) 1413 2365 1391 2364 1746 1412
-CONVEX 476 GT_PK(2,2) 1413 2362 1414 2366 2367 1392
-CONVEX 477 GT_PK(2,2) 1413 2365 1391 2366 2359 1392
-CONVEX 478 GT_PK(2,2) 1413 2363 1431 2368 1514 1446
-CONVEX 479 GT_PK(2,2) 1413 2361 1432 2368 2369 1446
-CONVEX 480 GT_PK(2,2) 1113 2370 1112 2371 2372 1148
-CONVEX 481 GT_PK(2,2) 1113 2373 1149 2371 1752 1148
-CONVEX 482 GT_PK(2,2) 1113 2374 1076 2370 2281 1112
-CONVEX 483 GT_PK(2,2) 1150 2375 1185 2376 1519 1184
-CONVEX 484 GT_PK(2,2) 1150 2377 1149 2376 1754 1184
-CONVEX 485 GT_PK(2,2) 1079 2378 1078 2379 2380 1115
-CONVEX 486 GT_PK(2,2) 1079 2381 1116 2379 2382 1115
-CONVEX 487 GT_PK(2,2) 1079 2381 1116 2383 2384 1080
-CONVEX 488 GT_PK(2,2) 1079 2378 1078 2385 2290 1041
-CONVEX 489 GT_PK(2,2) 1280 2386 1248 2387 1748 1279
-CONVEX 490 GT_PK(2,2) 1280 2388 1309 2387 2389 1279
-CONVEX 491 GT_PK(2,2) 1280 2388 1309 2390 2273 1310
-CONVEX 492 GT_PK(2,2) 1217 2391 1183 2392 2393 1216
-CONVEX 493 GT_PK(2,2) 1217 2394 1218 2395 2396 1250
-CONVEX 494 GT_PK(2,2) 1217 2394 1218 2397 1518 1184
-CONVEX 495 GT_PK(2,2) 1217 2391 1183 2397 1753 1184
-CONVEX 496 GT_PK(2,2) 1253 2398 1284 2399 2400 1285
-CONVEX 497 GT_PK(2,2) 1253 2401 1252 2398 2402 1284
-CONVEX 498 GT_PK(2,2) 1311 2403 1312 2404 2405 1339
-CONVEX 499 GT_PK(2,2) 1311 2406 1282 2403 2407 1312
-CONVEX 500 GT_PK(2,2) 1153 2408 1187 2409 2410 1152
-CONVEX 501 GT_PK(2,2) 1153 2408 1187 2411 1755 1188
-CONVEX 502 GT_PK(2,2) 1154 2412 1188 2413 2310 1189
-CONVEX 503 GT_PK(2,2) 1154 2414 1153 2412 2411 1188
-CONVEX 504 GT_PK(2,2) 1220 2415 1187 2416 1756 1221
-CONVEX 505 GT_PK(2,2) 1220 2417 1253 2416 2418 1221
-CONVEX 506 GT_PK(2,2) 1220 2419 1252 2420 2421 1219
-CONVEX 507 GT_PK(2,2) 1220 2417 1253 2419 2401 1252
-CONVEX 508 GT_PK(2,2) 665 2422 704 2423 1774 705
-CONVEX 509 GT_PK(2,2) 547 2424 508 2425 1765 546
-CONVEX 510 GT_PK(2,2) 586 2426 587 2427 2428 625
-CONVEX 511 GT_PK(2,2) 586 2429 585 2427 2430 625
-CONVEX 512 GT_PK(2,2) 586 2429 585 2431 1778 546
-CONVEX 513 GT_PK(2,2) 586 2432 547 2431 2425 546
-CONVEX 514 GT_PK(2,2) 586 2432 547 2426 2433 587
-CONVEX 515 GT_PK(2,2) 624 2434 585 2435 2430 625
-CONVEX 516 GT_PK(2,2) 899 2436 898 2437 1780 938
-CONVEX 517 GT_PK(2,2) 899 2438 939 2437 2439 938
-CONVEX 518 GT_PK(2,2) 899 2438 939 2440 1814 900
-CONVEX 519 GT_PK(2,2) 739 2441 779 2442 1804 778
-CONVEX 520 GT_PK(2,2) 739 2443 738 2442 2444 778
-CONVEX 521 GT_PK(2,2) 819 2445 818 2446 2447 858
-CONVEX 522 GT_PK(2,2) 819 2445 818 2448 1802 779
-CONVEX 523 GT_PK(2,2) 623 2449 624 2450 2451 663
-CONVEX 524 GT_PK(2,2) 742 2452 743 2453 1531 781
-CONVEX 525 GT_PK(2,2) 742 2454 741 2453 2455 781
-CONVEX 526 GT_PK(2,2) 780 2456 820 2457 1807 781
-CONVEX 527 GT_PK(2,2) 780 2458 741 2457 2455 781
-CONVEX 528 GT_PK(2,2) 780 2459 819 2456 2460 820
-CONVEX 529 GT_PK(2,2) 780 2459 819 2461 2448 779
-CONVEX 530 GT_PK(2,2) 662 2462 623 2463 2450 663
-CONVEX 531 GT_PK(2,2) 979 2464 1017 2465 2466 978
-CONVEX 532 GT_PK(2,2) 979 2467 940 2465 1811 978
-CONVEX 533 GT_PK(2,2) 979 2467 940 2468 2469 941
-CONVEX 534 GT_PK(2,2) 1056 2470 1057 2471 2472 1094
-CONVEX 535 GT_PK(2,2) 1055 2473 1056 2474 2475 1017
-CONVEX 536 GT_PK(2,2) 1295 2476 1294 2477 2478 1262
-CONVEX 537 GT_PK(2,2) 1295 2479 1263 2477 1790 1262
-CONVEX 538 GT_PK(2,2) 1295 2479 1263 2480 1794 1264
-CONVEX 539 GT_PK(2,2) 817 2481 818 2482 1803 778
-CONVEX 540 GT_PK(2,2) 860 2483 821 2484 1805 820
-CONVEX 541 GT_PK(2,2) 860 2485 899 2486 2440 900
-CONVEX 542 GT_PK(2,2) 977 2487 939 2488 1812 978
-CONVEX 543 GT_PK(2,2) 977 2487 939 2489 2439 938
-CONVEX 544 GT_PK(2,2) 977 2490 976 2489 1821 938
-CONVEX 545 GT_PK(2,2) 977 2490 976 2491 2492 1015
-CONVEX 546 GT_PK(2,2) 980 2493 942 2494 1819 941
-CONVEX 547 GT_PK(2,2) 980 2495 979 2496 2497 1019
-CONVEX 548 GT_PK(2,2) 980 2495 979 2494 2468 941
-CONVEX 549 GT_PK(2,2) 861 2498 821 2499 1809 822
-CONVEX 550 GT_PK(2,2) 861 2500 860 2501 2486 900
-CONVEX 551 GT_PK(2,2) 861 2500 860 2498 2483 821
-CONVEX 552 GT_PK(2,2) 901 2502 940 2503 2469 941
-CONVEX 553 GT_PK(2,2) 901 2504 902 2503 1818 941
-CONVEX 554 GT_PK(2,2) 901 2502 940 2505 1813 900
-CONVEX 555 GT_PK(2,2) 901 2506 861 2505 2501 900
-CONVEX 556 GT_PK(2,2) 427 2507 428 2508 1838 390
-CONVEX 557 GT_PK(2,2) 356 2509 392 2510 1842 355
-CONVEX 558 GT_PK(2,2) 356 2511 393 2509 1833 392
-CONVEX 559 GT_PK(2,2) 356 2512 320 2510 1560 355
-CONVEX 560 GT_PK(2,2) 353 2513 318 2514 2515 317
-CONVEX 561 GT_PK(2,2) 353 2516 352 2514 1824 317
-CONVEX 562 GT_PK(2,2) 353 2517 354 2518 1840 390
-CONVEX 563 GT_PK(2,2) 353 2513 318 2517 1846 354
-CONVEX 564 GT_PK(2,2) 838 2519 839 2520 2521 878
-CONVEX 565 GT_PK(2,2) 517 2522 556 2523 2524 557
-CONVEX 566 GT_PK(2,2) 516 2525 478 2526 1608 477
-CONVEX 567 GT_PK(2,2) 516 2527 517 2525 2528 478
-CONVEX 568 GT_PK(2,2) 516 2527 517 2529 2522 556
-CONVEX 569 GT_PK(2,2) 596 2530 556 2531 2524 557
-CONVEX 570 GT_PK(2,2) 596 2532 597 2531 2533 557
-CONVEX 571 GT_PK(2,2) 596 2532 597 2534 2535 636
-CONVEX 572 GT_PK(2,2) 714 2536 715 2537 2538 675
-CONVEX 573 GT_PK(2,2) 982 2539 983 2540 2541 1021
-CONVEX 574 GT_PK(2,2) 982 2542 1020 2540 1466 1021
-CONVEX 575 GT_PK(2,2) 982 2543 981 2542 2544 1020
-CONVEX 576 GT_PK(2,2) 787 2545 786 2546 2547 826
-CONVEX 577 GT_PK(2,2) 787 2545 786 2548 1858 747
-CONVEX 578 GT_PK(2,2) 1100 2549 1135 2550 2551 1136
-CONVEX 579 GT_PK(2,2) 1100 2549 1135 2552 1868 1099
-CONVEX 580 GT_PK(2,2) 1098 2553 1134 2554 1867 1099
-CONVEX 581 GT_PK(2,2) 1098 2555 1062 2554 2556 1099
-CONVEX 582 GT_PK(2,2) 1133 2557 1134 2558 2559 1168
-CONVEX 583 GT_PK(2,2) 1133 2560 1098 2557 2553 1134
-CONVEX 584 GT_PK(2,2) 1097 2561 1133 2562 2563 1132
-CONVEX 585 GT_PK(2,2) 1097 2561 1133 2564 2560 1098
-CONVEX 586 GT_PK(2,2) 1167 2565 1201 2566 1864 1200
-CONVEX 587 GT_PK(2,2) 1167 2567 1166 2566 2568 1200
-CONVEX 588 GT_PK(2,2) 1167 2569 1132 2567 1869 1166
-CONVEX 589 GT_PK(2,2) 1167 2570 1133 2569 2563 1132
-CONVEX 590 GT_PK(2,2) 1167 2565 1201 2571 2572 1168
-CONVEX 591 GT_PK(2,2) 1167 2570 1133 2571 2558 1168
-CONVEX 592 GT_PK(2,2) 1096 2573 1095 2574 1872 1059
-CONVEX 593 GT_PK(2,2) 1096 2575 1097 2576 2562 1132
-CONVEX 594 GT_PK(2,2) 1096 2576 1132 2577 1870 1131
-CONVEX 595 GT_PK(2,2) 1096 2573 1095 2577 2578 1131
-CONVEX 596 GT_PK(2,2) 1096 2574 1059 2579 2580 1060
-CONVEX 597 GT_PK(2,2) 1096 2575 1097 2579 2581 1060
-CONVEX 598 GT_PK(2,2) 1065 2582 1027 2583 2584 1064
-CONVEX 599 GT_PK(2,2) 1065 2582 1027 2585 2586 1028
-CONVEX 600 GT_PK(2,2) 751 2587 711 2588 2589 712
-CONVEX 601 GT_PK(2,2) 1063 2590 1062 2591 2556 1099
-CONVEX 602 GT_PK(2,2) 1063 2592 1100 2591 2552 1099
-CONVEX 603 GT_PK(2,2) 1063 2592 1100 2593 2594 1064
-CONVEX 604 GT_PK(2,2) 1022 2595 1023 2596 2597 1060
-CONVEX 605 GT_PK(2,2) 1022 2598 1059 2599 1564 1021
-CONVEX 606 GT_PK(2,2) 1022 2598 1059 2596 2580 1060
-CONVEX 607 GT_PK(2,2) 1022 2600 983 2599 2541 1021
-CONVEX 608 GT_PK(2,2) 985 2601 1023 2602 2603 1024
-CONVEX 609 GT_PK(2,2) 949 2604 950 2605 2606 988
-CONVEX 610 GT_PK(2,2) 949 2604 950 2607 2608 911
-CONVEX 611 GT_PK(2,2) 949 2607 911 2609 2610 910
-CONVEX 612 GT_PK(2,2) 949 2611 948 2609 1875 910
-CONVEX 613 GT_PK(2,2) 1030 2612 1029 2613 2614 1067
-CONVEX 614 GT_PK(2,2) 989 2615 950 2616 2606 988
-CONVEX 615 GT_PK(2,2) 989 2617 1027 2616 2618 988
-CONVEX 616 GT_PK(2,2) 989 2617 1027 2619 2586 1028
-CONVEX 617 GT_PK(2,2) 912 2620 872 2621 2622 873
-CONVEX 618 GT_PK(2,2) 912 2623 950 2624 2608 911
-CONVEX 619 GT_PK(2,2) 912 2620 872 2624 2625 911
-CONVEX 620 GT_PK(2,2) 1206 2626 1207 2627 2628 1173
-CONVEX 621 GT_PK(2,2) 758 2629 797 2630 1892 757
-CONVEX 622 GT_PK(2,2) 758 2631 718 2630 1911 757
-CONVEX 623 GT_PK(2,2) 758 2631 718 2632 1908 719
-CONVEX 624 GT_PK(2,2) 758 2633 759 2632 1903 719
-CONVEX 625 GT_PK(2,2) 758 2629 797 2634 2635 798
-CONVEX 626 GT_PK(2,2) 758 2633 759 2634 2636 798
-CONVEX 627 GT_PK(2,2) 875 2637 835 2638 1896 836
-CONVEX 628 GT_PK(2,2) 875 2639 914 2640 2641 915
-CONVEX 629 GT_PK(2,2) 875 2637 835 2642 2643 874
-CONVEX 630 GT_PK(2,2) 875 2639 914 2642 2644 874
-CONVEX 631 GT_PK(2,2) 754 2645 714 2646 2536 715
-CONVEX 632 GT_PK(2,2) 794 2647 754 2648 2649 793
-CONVEX 633 GT_PK(2,2) 638 2650 599 2651 1898 598
-CONVEX 634 GT_PK(2,2) 638 2652 677 2653 1885 678
-CONVEX 635 GT_PK(2,2) 639 2654 678 2655 1907 679
-CONVEX 636 GT_PK(2,2) 639 2656 640 2655 1926 679
-CONVEX 637 GT_PK(2,2) 639 2657 638 2654 2653 678
-CONVEX 638 GT_PK(2,2) 639 2657 638 2658 2650 599
-CONVEX 639 GT_PK(2,2) 560 2659 559 2660 2661 520
-CONVEX 640 GT_PK(2,2) 560 2662 599 2659 1897 559
-CONVEX 641 GT_PK(2,2) 560 2663 521 2660 2664 520
-CONVEX 642 GT_PK(2,2) 560 2663 521 2665 2060 561
-CONVEX 643 GT_PK(2,2) 762 2666 761 2667 2668 801
-CONVEX 644 GT_PK(2,2) 722 2669 721 2670 1916 682
-CONVEX 645 GT_PK(2,2) 722 2669 721 2671 1918 761
-CONVEX 646 GT_PK(2,2) 722 2672 683 2670 2673 682
-CONVEX 647 GT_PK(2,2) 722 2674 762 2671 2666 761
-CONVEX 648 GT_PK(2,2) 1404 2675 1405 2676 1942 1383
-CONVEX 649 GT_PK(2,2) 1423 2677 1424 2678 1579 1405
-CONVEX 650 GT_PK(2,2) 1423 2679 1404 2678 2675 1405
-CONVEX 651 GT_PK(2,2) 1423 2679 1404 2680 2681 1422
-CONVEX 652 GT_PK(2,2) 1360 2682 1384 2683 1941 1383
-CONVEX 653 GT_PK(2,2) 1360 2682 1384 2684 1937 1361
-CONVEX 654 GT_PK(2,2) 1335 2685 1360 2686 2687 1334
-CONVEX 655 GT_PK(2,2) 1335 2688 1361 2689 2278 1336
-CONVEX 656 GT_PK(2,2) 1335 2685 1360 2688 2684 1361
-CONVEX 657 GT_PK(2,2) 1212 2690 1178 2691 2692 1211
-CONVEX 658 GT_PK(2,2) 1212 2693 1244 2691 2694 1211
-CONVEX 659 GT_PK(2,2) 1179 2695 1212 2696 2697 1213
-CONVEX 660 GT_PK(2,2) 1179 2695 1212 2698 2690 1178
-CONVEX 661 GT_PK(2,2) 1245 2699 1212 2700 2697 1213
-CONVEX 662 GT_PK(2,2) 1245 2699 1212 2701 2693 1244
-CONVEX 663 GT_PK(2,2) 1182 2702 1183 2703 2393 1216
-CONVEX 664 GT_PK(2,2) 1182 2702 1183 2704 1751 1148
-CONVEX 665 GT_PK(2,2) 1147 2705 1112 2706 2372 1148
-CONVEX 666 GT_PK(2,2) 1147 2707 1182 2706 2704 1148
-CONVEX 667 GT_PK(2,2) 1147 2707 1182 2708 2709 1181
-CONVEX 668 GT_PK(2,2) 1308 2710 1278 2711 1580 1279
-CONVEX 669 GT_PK(2,2) 1308 2712 1309 2711 2389 1279
-CONVEX 670 GT_PK(2,2) 1308 2712 1309 2713 2271 1336
-CONVEX 671 GT_PK(2,2) 1308 2714 1335 2713 2689 1336
-CONVEX 672 GT_PK(2,2) 1268 2715 1298 2716 2717 1297
-CONVEX 673 GT_PK(2,2) 1268 2718 1236 2719 2720 1237
-CONVEX 674 GT_PK(2,2) 1268 2721 1269 2719 2722 1237
-CONVEX 675 GT_PK(2,2) 1268 2721 1269 2715 2723 1298
-CONVEX 676 GT_PK(2,2) 1299 2724 1269 2725 2726 1270
-CONVEX 677 GT_PK(2,2) 1299 2724 1269 2727 2723 1298
-CONVEX 678 GT_PK(2,2) 1137 2728 1171 2729 2730 1136
-CONVEX 679 GT_PK(2,2) 1137 2731 1138 2732 1879 1102
-CONVEX 680 GT_PK(2,2) 1169 2733 1134 2734 2559 1168
-CONVEX 681 GT_PK(2,2) 1169 2733 1134 2735 1866 1135
-CONVEX 682 GT_PK(2,2) 1267 2736 1268 2737 2716 1297
-CONVEX 683 GT_PK(2,2) 1267 2736 1268 2738 2718 1236
-CONVEX 684 GT_PK(2,2) 1204 2739 1236 2740 2720 1237
-CONVEX 685 GT_PK(2,2) 1240 2741 1207 2742 2743 1208
-CONVEX 686 GT_PK(2,2) 1271 2744 1240 2745 2746 1272
-CONVEX 687 GT_PK(2,2) 1243 2747 1244 2748 2694 1211
-CONVEX 688 GT_PK(2,2) 972 2749 971 2750 1952 933
-CONVEX 689 GT_PK(2,2) 1083 2751 1046 2752 2753 1045
-CONVEX 690 GT_PK(2,2) 1002 2754 1003 2755 2756 964
-CONVEX 691 GT_PK(2,2) 1002 2757 1040 2758 2286 1001
-CONVEX 692 GT_PK(2,2) 1002 2754 1003 2759 2760 1041
-CONVEX 693 GT_PK(2,2) 1002 2757 1040 2759 2289 1041
-CONVEX 694 GT_PK(2,2) 1081 2761 1043 2762 2763 1080
-CONVEX 695 GT_PK(2,2) 929 2764 930 2765 1958 968
-CONVEX 696 GT_PK(2,2) 1008 2766 969 2767 1953 970
-CONVEX 697 GT_PK(2,2) 1008 2767 970 2768 1946 1009
-CONVEX 698 GT_PK(2,2) 1157 2769 1192 2770 1742 1158
-CONVEX 699 GT_PK(2,2) 1010 2771 1049 2772 2773 1011
-CONVEX 700 GT_PK(2,2) 1010 2774 972 2772 2775 1011
-CONVEX 701 GT_PK(2,2) 1010 2776 971 2777 1945 1009
-CONVEX 702 GT_PK(2,2) 1010 2774 972 2776 2749 971
-CONVEX 703 GT_PK(2,2) 974 2778 936 2779 1551 975
-CONVEX 704 GT_PK(2,2) 974 2780 1013 2779 2781 975
-CONVEX 705 GT_PK(2,2) 1014 2782 1013 2783 2784 1052
-CONVEX 706 GT_PK(2,2) 1014 2782 1013 2785 2781 975
-CONVEX 707 GT_PK(2,2) 1014 2786 976 2785 1822 975
-CONVEX 708 GT_PK(2,2) 1014 2786 976 2787 2492 1015
-CONVEX 709 GT_PK(2,2) 1051 2788 1013 2789 2784 1052
-CONVEX 710 GT_PK(2,2) 1124 2790 1123 2791 2792 1087
-CONVEX 711 GT_PK(2,2) 1163 2793 1164 2794 1538 1198
-CONVEX 712 GT_PK(2,2) 1163 2795 1197 2794 1965 1198
-CONVEX 713 GT_PK(2,2) 725 2796 685 2797 2798 724
-CONVEX 714 GT_PK(2,2) 725 2799 764 2797 2800 724
-CONVEX 715 GT_PK(2,2) 684 2801 685 2802 2803 645
-CONVEX 716 GT_PK(2,2) 684 2801 685 2804 2798 724
-CONVEX 717 GT_PK(2,2) 570 2805 571 2806 2807 610
-CONVEX 718 GT_PK(2,2) 570 2808 609 2806 1966 610
-CONVEX 719 GT_PK(2,2) 570 2809 531 2810 2811 530
-CONVEX 720 GT_PK(2,2) 570 2809 531 2805 2812 571
-CONVEX 721 GT_PK(2,2) 646 2813 685 2814 2803 645
-CONVEX 722 GT_PK(2,2) 646 2815 606 2814 2816 645
-CONVEX 723 GT_PK(2,2) 30 2817 29 2818 1975 15
-CONVEX 724 GT_PK(2,2) 30 2817 29 2819 2820 48
-CONVEX 725 GT_PK(2,2) 28 2821 29 2822 1974 14
-CONVEX 726 GT_PK(2,2) 28 2822 14 2823 2824 13
-CONVEX 727 GT_PK(2,2) 28 2825 27 2823 1704 13
-CONVEX 728 GT_PK(2,2) 89 2826 66 2827 2828 90
-CONVEX 729 GT_PK(2,2) 89 2829 114 2830 2831 88
-CONVEX 730 GT_PK(2,2) 89 2832 65 2830 1493 88
-CONVEX 731 GT_PK(2,2) 89 2826 66 2832 1980 65
-CONVEX 732 GT_PK(2,2) 528 2833 529 2834 2835 490
-CONVEX 733 GT_PK(2,2) 489 2836 451 2837 2838 490
-CONVEX 734 GT_PK(2,2) 489 2839 528 2840 2841 527
-CONVEX 735 GT_PK(2,2) 489 2839 528 2837 2834 490
-CONVEX 736 GT_PK(2,2) 452 2842 451 2843 2844 413
-CONVEX 737 GT_PK(2,2) 452 2842 451 2845 2838 490
-CONVEX 738 GT_PK(2,2) 414 2846 452 2847 2843 413
-CONVEX 739 GT_PK(2,2) 414 2846 452 2848 2849 453
-CONVEX 740 GT_PK(2,2) 491 2850 529 2851 2852 530
-CONVEX 741 GT_PK(2,2) 491 2850 529 2853 2835 490
-CONVEX 742 GT_PK(2,2) 491 2854 452 2853 2845 490
-CONVEX 743 GT_PK(2,2) 491 2854 452 2855 2849 453
-CONVEX 744 GT_PK(2,2) 385 2856 423 2857 2858 422
-CONVEX 745 GT_PK(2,2) 311 2859 310 2860 1995 346
-CONVEX 746 GT_PK(2,2) 311 2859 310 2861 1997 276
-CONVEX 747 GT_PK(2,2) 382 2862 345 2863 1996 346
-CONVEX 748 GT_PK(2,2) 382 2864 383 2863 2865 346
-CONVEX 749 GT_PK(2,2) 382 2866 381 2862 2867 345
-CONVEX 750 GT_PK(2,2) 382 2868 420 2864 2869 383
-CONVEX 751 GT_PK(2,2) 382 2866 381 2870 2871 419
-CONVEX 752 GT_PK(2,2) 382 2868 420 2870 2872 419
-CONVEX 753 GT_PK(2,2) 347 2873 383 2874 2865 346
-CONVEX 754 GT_PK(2,2) 347 2875 311 2874 2860 346
-CONVEX 755 GT_PK(2,2) 494 2876 455 2877 2002 456
-CONVEX 756 GT_PK(2,2) 494 2878 495 2877 2879 456
-CONVEX 757 GT_PK(2,2) 494 2876 455 2880 1989 493
-CONVEX 758 GT_PK(2,2) 494 2878 495 2881 2882 533
-CONVEX 759 GT_PK(2,2) 497 2883 459 2884 1983 498
-CONVEX 760 GT_PK(2,2) 457 2885 495 2886 2879 456
-CONVEX 761 GT_PK(2,2) 235 2887 268 2888 2889 234
-CONVEX 762 GT_PK(2,2) 235 2890 202 2888 2239 234
-CONVEX 763 GT_PK(2,2) 235 2891 203 2890 2892 202
-CONVEX 764 GT_PK(2,2) 309 2893 310 2894 1994 345
-CONVEX 765 GT_PK(2,2) 309 2895 274 2896 2897 308
-CONVEX 766 GT_PK(2,2) 309 2895 274 2898 1973 275
-CONVEX 767 GT_PK(2,2) 309 2893 310 2898 1998 275
-CONVEX 768 GT_PK(2,2) 344 2899 343 2900 2008 308
-CONVEX 769 GT_PK(2,2) 344 2901 309 2900 2896 308
-CONVEX 770 GT_PK(2,2) 344 2901 309 2902 2894 345
-CONVEX 771 GT_PK(2,2) 344 2903 381 2902 2867 345
-CONVEX 772 GT_PK(2,2) 344 2903 381 2904 2905 380
-CONVEX 773 GT_PK(2,2) 344 2899 343 2904 2013 380
-CONVEX 774 GT_PK(2,2) 376 2906 414 2907 2847 413
-CONVEX 775 GT_PK(2,2) 376 2906 414 2908 2909 377
-CONVEX 776 GT_PK(2,2) 378 2910 341 2911 2912 377
-CONVEX 777 GT_PK(2,2) 378 2913 379 2914 2004 416
-CONVEX 778 GT_PK(2,2) 378 2913 379 2915 2012 342
-CONVEX 779 GT_PK(2,2) 378 2910 341 2915 2018 342
-CONVEX 780 GT_PK(2,2) 305 2916 341 2917 2017 306
-CONVEX 781 GT_PK(2,2) 340 2918 341 2919 2912 377
-CONVEX 782 GT_PK(2,2) 340 2920 376 2919 2908 377
-CONVEX 783 GT_PK(2,2) 340 2920 376 2921 2922 339
-CONVEX 784 GT_PK(2,2) 340 2923 305 2918 2916 341
-CONVEX 785 GT_PK(2,2) 340 2921 339 2924 2014 304
-CONVEX 786 GT_PK(2,2) 340 2923 305 2924 2925 304
-CONVEX 787 GT_PK(2,2) 765 2926 805 2927 1592 766
-CONVEX 788 GT_PK(2,2) 765 2928 725 2929 2930 1
-CONVEX 789 GT_PK(2,2) 765 2928 725 2931 2799 764
-CONVEX 790 GT_PK(2,2) 765 2932 726 2929 2933 1
-CONVEX 791 GT_PK(2,2) 765 2932 726 2927 2020 766
-CONVEX 792 GT_PK(2,2) 844 2934 805 2935 1593 845
-CONVEX 793 GT_PK(2,2) 802 2936 762 2937 2667 801
-CONVEX 794 GT_PK(2,2) 648 2938 609 2939 1967 649
-CONVEX 795 GT_PK(2,2) 648 2940 688 2939 2941 649
-CONVEX 796 GT_PK(2,2) 648 2942 608 2943 2944 647
-CONVEX 797 GT_PK(2,2) 648 2942 608 2938 2945 609
-CONVEX 798 GT_PK(2,2) 687 2946 726 2947 2019 727
-CONVEX 799 GT_PK(2,2) 687 2948 688 2947 2021 727
-CONVEX 800 GT_PK(2,2) 687 2949 648 2948 2940 688
-CONVEX 801 GT_PK(2,2) 687 2949 648 2950 2943 647
-CONVEX 802 GT_PK(2,2) 613 2951 652 2952 2953 653
-CONVEX 803 GT_PK(2,2) 532 2954 531 2955 2812 571
-CONVEX 804 GT_PK(2,2) 532 2956 572 2957 2958 533
-CONVEX 805 GT_PK(2,2) 532 2956 572 2955 2959 571
-CONVEX 806 GT_PK(2,2) 532 2954 531 2960 2961 493
-CONVEX 807 GT_PK(2,2) 532 2962 494 2957 2881 533
-CONVEX 808 GT_PK(2,2) 532 2962 494 2960 2880 493
-CONVEX 809 GT_PK(2,2) 808 2963 769 2964 2965 768
-CONVEX 810 GT_PK(2,2) 808 2966 807 2964 1598 768
-CONVEX 811 GT_PK(2,2) 808 2966 807 2967 1600 847
-CONVEX 812 GT_PK(2,2) 729 2968 769 2969 2970 730
-CONVEX 813 GT_PK(2,2) 729 2971 690 2969 2972 730
-CONVEX 814 GT_PK(2,2) 729 2973 728 2974 1468 768
-CONVEX 815 GT_PK(2,2) 729 2968 769 2974 2965 768
-CONVEX 816 GT_PK(2,2) 689 2975 688 2976 2941 649
-CONVEX 817 GT_PK(2,2) 689 2975 688 2977 2022 728
-CONVEX 818 GT_PK(2,2) 689 2978 729 2977 2973 728
-CONVEX 819 GT_PK(2,2) 689 2978 729 2979 2971 690
-CONVEX 820 GT_PK(2,2) 691 2980 690 2981 2972 730
-CONVEX 821 GT_PK(2,2) 611 2982 571 2983 2807 610
-CONVEX 822 GT_PK(2,2) 611 2984 572 2982 2959 571
-CONVEX 823 GT_PK(2,2) 854 2985 894 2986 1961 855
-CONVEX 824 GT_PK(2,2) 891 2987 930 2988 1956 931
-CONVEX 825 GT_PK(2,2) 536 2989 497 2990 2884 498
-CONVEX 826 GT_PK(2,2) 614 2991 575 2992 2993 574
-CONVEX 827 GT_PK(2,2) 614 2994 613 2995 2952 653
-CONVEX 828 GT_PK(2,2) 614 2994 613 2992 2996 574
-CONVEX 829 GT_PK(2,2) 774 2997 813 2998 2999 773
-CONVEX 830 GT_PK(2,2) 627 3000 628 3001 2026 667
-CONVEX 831 GT_PK(2,2) 627 3000 628 3002 2030 588
-CONVEX 832 GT_PK(2,2) 549 3003 510 3004 3005 509
-CONVEX 833 GT_PK(2,2) 433 3006 395 3007 1470 394
-CONVEX 834 GT_PK(2,2) 404 3008 403 3009 1604 366
-CONVEX 835 GT_PK(2,2) 404 3010 367 3009 2047 366
-CONVEX 836 GT_PK(2,2) 404 3010 367 3011 3012 405
-CONVEX 837 GT_PK(2,2) 404 3013 443 3011 3014 405
-CONVEX 838 GT_PK(2,2) 642 3015 681 3016 1917 682
-CONVEX 839 GT_PK(2,2) 642 3015 681 3017 1924 641
-CONVEX 840 GT_PK(2,2) 644 3018 684 3019 2802 645
-CONVEX 841 GT_PK(2,2) 644 3018 684 3020 3021 683
-CONVEX 842 GT_PK(2,2) 484 3022 523 3023 2056 522
-CONVEX 843 GT_PK(2,2) 524 3024 523 3025 2057 563
-CONVEX 844 GT_PK(2,2) 482 3026 521 3027 2664 520
-CONVEX 845 GT_PK(2,2) 558 3028 597 3029 2533 557
-CONVEX 846 GT_PK(2,2) 558 3030 559 3031 1899 598
-CONVEX 847 GT_PK(2,2) 558 3028 597 3031 3032 598
-CONVEX 848 GT_PK(2,2) 436 3033 397 3034 2061 398
-CONVEX 849 GT_PK(2,2) 436 3035 437 3034 2064 398
-CONVEX 850 GT_PK(2,2) 440 3036 439 3037 1606 478
-CONVEX 851 GT_PK(2,2) 440 3036 439 3038 2095 401
-CONVEX 852 GT_PK(2,2) 440 3039 402 3038 2092 401
-CONVEX 853 GT_PK(2,2) 221 3040 254 3041 2117 255
-CONVEX 854 GT_PK(2,2) 221 3041 255 3042 1628 222
-CONVEX 855 GT_PK(2,2) 221 3043 188 3044 2114 220
-CONVEX 856 GT_PK(2,2) 221 3040 254 3044 2116 220
-CONVEX 857 GT_PK(2,2) 221 3045 189 3042 1620 222
-CONVEX 858 GT_PK(2,2) 221 3043 188 3045 2110 189
-CONVEX 859 GT_PK(2,2) 323 3046 359 3047 2086 322
-CONVEX 860 GT_PK(2,2) 323 3048 287 3047 2124 322
-CONVEX 861 GT_PK(2,2) 323 3046 359 3049 2079 360
-CONVEX 862 GT_PK(2,2) 213 3050 214 3051 2162 182
-CONVEX 863 GT_PK(2,2) 213 3050 214 3052 2164 246
-CONVEX 864 GT_PK(2,2) 213 3053 181 3051 1662 182
-CONVEX 865 GT_PK(2,2) 213 3054 212 3053 3055 181
-CONVEX 866 GT_PK(2,2) 213 3052 246 3056 2201 245
-CONVEX 867 GT_PK(2,2) 213 3054 212 3056 3057 245
-CONVEX 868 GT_PK(2,2) 180 3058 212 3059 3055 181
-CONVEX 869 GT_PK(2,2) 180 3060 151 3059 2179 181
-CONVEX 870 GT_PK(2,2) 180 3061 211 3058 3062 212
-CONVEX 871 GT_PK(2,2) 74 3063 52 3064 3065 53
-CONVEX 872 GT_PK(2,2) 74 3066 73 3063 2182 52
-CONVEX 873 GT_PK(2,2) 74 3064 53 3067 1681 98
-CONVEX 874 GT_PK(2,2) 283 3068 282 3069 1699 249
-CONVEX 875 GT_PK(2,2) 283 3070 250 3069 2190 249
-CONVEX 876 GT_PK(2,2) 283 3068 282 3071 1695 317
-CONVEX 877 GT_PK(2,2) 283 3072 318 3071 2515 317
-CONVEX 878 GT_PK(2,2) 283 3072 318 3073 1844 284
-CONVEX 879 GT_PK(2,2) 283 3070 250 3073 2187 284
-CONVEX 880 GT_PK(2,2) 26 3074 12 3075 1702 27
-CONVEX 881 GT_PK(2,2) 26 3076 11 3074 3077 12
-CONVEX 882 GT_PK(2,2) 26 3076 11 3078 2207 25
-CONVEX 883 GT_PK(2,2) 26 3078 25 3079 1716 44
-CONVEX 884 GT_PK(2,2) 26 3079 44 3080 1979 45
-CONVEX 885 GT_PK(2,2) 26 3075 27 3080 3081 45
-CONVEX 886 GT_PK(2,2) 81 3082 57 3083 2211 80
-CONVEX 887 GT_PK(2,2) 81 3084 107 3085 3086 82
-CONVEX 888 GT_PK(2,2) 81 3087 106 3083 2220 80
-CONVEX 889 GT_PK(2,2) 81 3084 107 3087 3088 106
-CONVEX 890 GT_PK(2,2) 193 3089 161 3090 1640 192
-CONVEX 891 GT_PK(2,2) 193 3091 162 3089 2228 161
-CONVEX 892 GT_PK(2,2) 193 3092 225 3090 1482 192
-CONVEX 893 GT_PK(2,2) 338 3093 339 3094 2015 303
-CONVEX 894 GT_PK(2,2) 338 3095 302 3094 2231 303
-CONVEX 895 GT_PK(2,2) 58 3096 37 3097 2234 36
-CONVEX 896 GT_PK(2,2) 58 3098 81 3099 3085 82
-CONVEX 897 GT_PK(2,2) 58 3100 57 3097 2213 36
-CONVEX 898 GT_PK(2,2) 58 3098 81 3100 3082 57
-CONVEX 899 GT_PK(2,2) 200 3101 168 3102 2246 169
-CONVEX 900 GT_PK(2,2) 200 3103 201 3102 3104 169
-CONVEX 901 GT_PK(2,2) 200 3103 201 3105 2240 233
-CONVEX 902 GT_PK(2,2) 86 3106 87 3107 3108 112
-CONVEX 903 GT_PK(2,2) 113 3109 87 3110 3108 112
-CONVEX 904 GT_PK(2,2) 113 3111 141 3112 3113 114
-CONVEX 905 GT_PK(2,2) 113 3112 114 3114 2831 88
-CONVEX 906 GT_PK(2,2) 113 3109 87 3114 2243 88
-CONVEX 907 GT_PK(2,2) 40 3115 39 3116 2260 21
-CONVEX 908 GT_PK(2,2) 40 3117 22 3118 1726 41
-CONVEX 909 GT_PK(2,2) 40 3117 22 3116 1720 21
-CONVEX 910 GT_PK(2,2) 40 3115 39 3119 3120 61
-CONVEX 911 GT_PK(2,2) 59 3121 58 3122 3099 82
-CONVEX 912 GT_PK(2,2) 59 3121 58 3123 3096 37
-CONVEX 913 GT_PK(2,2) 108 3124 107 3125 3086 82
-CONVEX 914 GT_PK(2,2) 1364 3126 1365 3127 3128 1339
-CONVEX 915 GT_PK(2,2) 963 3129 1002 3130 2755 964
-CONVEX 916 GT_PK(2,2) 963 3129 1002 3131 2758 1001
-CONVEX 917 GT_PK(2,2) 963 3132 925 3130 3133 964
-CONVEX 918 GT_PK(2,2) 963 3132 925 3134 2298 924
-CONVEX 919 GT_PK(2,2) 1038 3135 1000 3136 2284 1039
-CONVEX 920 GT_PK(2,2) 1038 3137 1076 3136 3138 1039
-CONVEX 921 GT_PK(2,2) 1038 3137 1076 3139 2280 1075
-CONVEX 922 GT_PK(2,2) 965 3140 927 3141 2291 966
-CONVEX 923 GT_PK(2,2) 965 3142 1003 3143 2756 964
-CONVEX 924 GT_PK(2,2) 965 3144 1004 3141 3145 966
-CONVEX 925 GT_PK(2,2) 965 3144 1004 3142 3146 1003
-CONVEX 926 GT_PK(2,2) 886 3147 925 3148 2299 885
-CONVEX 927 GT_PK(2,2) 886 3148 885 3149 1739 846
-CONVEX 928 GT_PK(2,2) 886 3150 847 3149 1602 846
-CONVEX 929 GT_PK(2,2) 886 3151 887 3150 3152 847
-CONVEX 930 GT_PK(2,2) 1393 3153 1369 3154 2338 1370
-CONVEX 931 GT_PK(2,2) 1393 3153 1369 3155 2357 1392
-CONVEX 932 GT_PK(2,2) 1393 3156 1414 3155 2367 1392
-CONVEX 933 GT_PK(2,2) 1393 3157 1415 3156 2304 1414
-CONVEX 934 GT_PK(2,2) 1254 3158 1286 3159 3160 1285
-CONVEX 935 GT_PK(2,2) 1254 3161 1253 3159 2399 1285
-CONVEX 936 GT_PK(2,2) 1254 3162 1222 3163 2311 1221
-CONVEX 937 GT_PK(2,2) 1254 3161 1253 3163 2418 1221
-CONVEX 938 GT_PK(2,2) 1374 3164 1348 3165 2313 1397
-CONVEX 939 GT_PK(2,2) 1293 3166 1294 3167 3168 1323
-CONVEX 940 GT_PK(2,2) 1293 3166 1294 3169 2478 1262
-CONVEX 941 GT_PK(2,2) 1321 3170 1348 3171 2317 1320
-CONVEX 942 GT_PK(2,2) 1321 3172 1291 3171 3173 1320
-CONVEX 943 GT_PK(2,2) 1319 3174 1347 3175 2328 1346
-CONVEX 944 GT_PK(2,2) 1319 3174 1347 3176 2316 1320
-CONVEX 945 GT_PK(2,2) 1394 3177 1416 3178 2318 1395
-CONVEX 946 GT_PK(2,2) 1394 3179 1415 3180 2302 1434
-CONVEX 947 GT_PK(2,2) 1394 3177 1416 3180 3181 1434
-CONVEX 948 GT_PK(2,2) 1394 3182 1371 3183 2324 1370
-CONVEX 949 GT_PK(2,2) 1394 3182 1371 3178 2332 1395
-CONVEX 950 GT_PK(2,2) 1394 3184 1393 3183 3154 1370
-CONVEX 951 GT_PK(2,2) 1394 3184 1393 3179 3157 1415
-CONVEX 952 GT_PK(2,2) 1195 3185 1196 3186 1583 1229
-CONVEX 953 GT_PK(2,2) 1261 3187 1262 3188 1535 1229
-CONVEX 954 GT_PK(2,2) 1261 3189 1293 3187 3169 1262
-CONVEX 955 GT_PK(2,2) 1411 3190 1390 3191 1747 1412
-CONVEX 956 GT_PK(2,2) 1411 3192 1430 3191 1512 1412
-CONVEX 957 GT_PK(2,2) 1411 3193 1429 3192 2351 1430
-CONVEX 958 GT_PK(2,2) 1411 3194 1410 3193 2354 1429
-CONVEX 959 GT_PK(2,2) 1077 3195 1113 3196 2374 1076
-CONVEX 960 GT_PK(2,2) 1077 3197 1040 3198 2288 1078
-CONVEX 961 GT_PK(2,2) 1077 3196 1076 3199 3138 1039
-CONVEX 962 GT_PK(2,2) 1077 3197 1040 3199 2287 1039
-CONVEX 963 GT_PK(2,2) 1151 3200 1150 3201 2375 1185
-CONVEX 964 GT_PK(2,2) 1151 3202 1116 3203 3204 1152
-CONVEX 965 GT_PK(2,2) 1151 3202 1116 3205 2382 1115
-CONVEX 966 GT_PK(2,2) 1151 3200 1150 3205 3206 1115
-CONVEX 967 GT_PK(2,2) 1249 3207 1280 3208 2386 1248
-CONVEX 968 GT_PK(2,2) 1249 3208 1248 3209 3210 1216
-CONVEX 969 GT_PK(2,2) 1249 3211 1217 3212 2395 1250
-CONVEX 970 GT_PK(2,2) 1249 3211 1217 3209 2392 1216
-CONVEX 971 GT_PK(2,2) 1251 3213 1282 3214 3215 1250
-CONVEX 972 GT_PK(2,2) 1251 3216 1218 3214 2396 1250
-CONVEX 973 GT_PK(2,2) 1251 3216 1218 3217 1520 1219
-CONVEX 974 GT_PK(2,2) 1251 3218 1252 3217 2421 1219
-CONVEX 975 GT_PK(2,2) 1281 3219 1311 3220 2406 1282
-CONVEX 976 GT_PK(2,2) 1281 3221 1249 3222 3207 1280
-CONVEX 977 GT_PK(2,2) 1281 3222 1280 3223 2390 1310
-CONVEX 978 GT_PK(2,2) 1281 3219 1311 3223 3224 1310
-CONVEX 979 GT_PK(2,2) 1281 3220 1282 3225 3215 1250
-CONVEX 980 GT_PK(2,2) 1281 3221 1249 3225 3212 1250
-CONVEX 981 GT_PK(2,2) 1367 3226 1391 3227 1745 1390
-CONVEX 982 GT_PK(2,2) 1367 3228 1368 3226 2358 1391
-CONVEX 983 GT_PK(2,2) 1367 3229 1366 3227 3230 1390
-CONVEX 984 GT_PK(2,2) 1367 3229 1366 3231 3232 1341
-CONVEX 985 GT_PK(2,2) 1342 3233 1368 3234 2360 1343
-CONVEX 986 GT_PK(2,2) 1342 3235 1367 3233 3228 1368
-CONVEX 987 GT_PK(2,2) 1342 3235 1367 3236 3231 1341
-CONVEX 988 GT_PK(2,2) 1155 3237 1154 3238 3239 1119
-CONVEX 989 GT_PK(2,2) 1155 3237 1154 3240 2413 1189
-CONVEX 990 GT_PK(2,2) 1155 3241 1190 3240 3242 1189
-CONVEX 991 GT_PK(2,2) 1155 3241 1190 3243 3244 1156
-CONVEX 992 GT_PK(2,2) 1186 3245 1220 3246 2415 1187
-CONVEX 993 GT_PK(2,2) 1186 3246 1187 3247 2410 1152
-CONVEX 994 GT_PK(2,2) 1186 3248 1185 3249 1521 1219
-CONVEX 995 GT_PK(2,2) 1186 3245 1220 3249 2420 1219
-CONVEX 996 GT_PK(2,2) 1186 3250 1151 3247 3203 1152
-CONVEX 997 GT_PK(2,2) 1186 3250 1151 3248 3201 1185
-CONVEX 998 GT_PK(2,2) 666 3251 665 3252 2423 705
-CONVEX 999 GT_PK(2,2) 664 3253 665 3254 2422 704
-CONVEX 1000 GT_PK(2,2) 664 3255 624 3256 2451 663
-CONVEX 1001 GT_PK(2,2) 664 3253 665 3257 3258 625
-CONVEX 1002 GT_PK(2,2) 664 3255 624 3257 2435 625
-CONVEX 1003 GT_PK(2,2) 506 3259 507 3260 1766 545
-CONVEX 1004 GT_PK(2,2) 506 3259 507 3261 1771 468
-CONVEX 1005 GT_PK(2,2) 506 3261 468 3262 1759 467
-CONVEX 1006 GT_PK(2,2) 506 3263 505 3262 3264 467
-CONVEX 1007 GT_PK(2,2) 740 3265 739 3266 2441 779
-CONVEX 1008 GT_PK(2,2) 740 3267 780 3266 2461 779
-CONVEX 1009 GT_PK(2,2) 740 3267 780 3268 2458 741
-CONVEX 1010 GT_PK(2,2) 740 3265 739 3269 3270 700
-CONVEX 1011 GT_PK(2,2) 859 3271 819 3272 2460 820
-CONVEX 1012 GT_PK(2,2) 859 3273 860 3272 2484 820
-CONVEX 1013 GT_PK(2,2) 859 3273 860 3274 2485 899
-CONVEX 1014 GT_PK(2,2) 859 3274 899 3275 2436 898
-CONVEX 1015 GT_PK(2,2) 859 3275 898 3276 1801 858
-CONVEX 1016 GT_PK(2,2) 859 3271 819 3276 2446 858
-CONVEX 1017 GT_PK(2,2) 543 3277 504 3278 3279 505
-CONVEX 1018 GT_PK(2,2) 543 3280 542 3281 3282 582
-CONVEX 1019 GT_PK(2,2) 543 3277 504 3280 3283 542
-CONVEX 1020 GT_PK(2,2) 544 3284 543 3285 3278 505
-CONVEX 1021 GT_PK(2,2) 544 3286 506 3287 3260 545
-CONVEX 1022 GT_PK(2,2) 544 3286 506 3285 3263 505
-CONVEX 1023 GT_PK(2,2) 584 3288 624 3289 2434 585
-CONVEX 1024 GT_PK(2,2) 584 3290 623 3288 2449 624
-CONVEX 1025 GT_PK(2,2) 584 3289 585 3291 1777 545
-CONVEX 1026 GT_PK(2,2) 584 3292 544 3291 3287 545
-CONVEX 1027 GT_PK(2,2) 702 3293 742 3294 2454 741
-CONVEX 1028 GT_PK(2,2) 702 3295 662 3296 2463 663
-CONVEX 1029 GT_PK(2,2) 702 3293 742 3297 2452 743
-CONVEX 1030 GT_PK(2,2) 622 3298 662 3299 2462 623
-CONVEX 1031 GT_PK(2,2) 622 3298 662 3300 3301 661
-CONVEX 1032 GT_PK(2,2) 622 3302 621 3303 3304 582
-CONVEX 1033 GT_PK(2,2) 622 3302 621 3300 3305 661
-CONVEX 1034 GT_PK(2,2) 1093 3306 1092 3307 3308 1129
-CONVEX 1035 GT_PK(2,2) 1093 3309 1056 3310 2471 1094
-CONVEX 1036 GT_PK(2,2) 1093 3311 1055 3306 3312 1092
-CONVEX 1037 GT_PK(2,2) 1093 3311 1055 3309 2473 1056
-CONVEX 1038 GT_PK(2,2) 1093 3313 1130 3307 1534 1129
-CONVEX 1039 GT_PK(2,2) 1093 3310 1094 3313 3314 1130
-CONVEX 1040 GT_PK(2,2) 1018 3315 1057 3316 3317 1019
-CONVEX 1041 GT_PK(2,2) 1018 3318 1056 3315 2470 1057
-CONVEX 1042 GT_PK(2,2) 1018 3318 1056 3319 2475 1017
-CONVEX 1043 GT_PK(2,2) 1018 3320 979 3316 2497 1019
-CONVEX 1044 GT_PK(2,2) 1018 3320 979 3319 2464 1017
-CONVEX 1045 GT_PK(2,2) 1054 3321 1055 3322 3312 1092
-CONVEX 1046 GT_PK(2,2) 777 3323 738 3324 2444 778
-CONVEX 1047 GT_PK(2,2) 777 3325 817 3324 2482 778
-CONVEX 1048 GT_PK(2,2) 856 3326 895 3327 3328 896
-CONVEX 1049 GT_PK(2,2) 856 3326 895 3329 1960 855
-CONVEX 1050 GT_PK(2,2) 857 3330 817 3331 2481 818
-CONVEX 1051 GT_PK(2,2) 857 3332 897 3333 1800 858
-CONVEX 1052 GT_PK(2,2) 857 3331 818 3333 2447 858
-CONVEX 1053 GT_PK(2,2) 857 3332 897 3334 1796 896
-CONVEX 1054 GT_PK(2,2) 857 3335 856 3334 3327 896
-CONVEX 1055 GT_PK(2,2) 857 3335 856 3330 3336 817
-CONVEX 1056 GT_PK(2,2) 1016 3337 1017 3338 2466 978
-CONVEX 1057 GT_PK(2,2) 1016 3339 977 3338 2488 978
-CONVEX 1058 GT_PK(2,2) 1016 3339 977 3340 2491 1015
-CONVEX 1059 GT_PK(2,2) 1016 3341 1054 3340 3342 1015
-CONVEX 1060 GT_PK(2,2) 1016 3343 1055 3337 2474 1017
-CONVEX 1061 GT_PK(2,2) 1016 3341 1054 3343 3321 1055
-CONVEX 1062 GT_PK(2,2) 862 3344 861 3345 2499 822
-CONVEX 1063 GT_PK(2,2) 862 3346 823 3345 1788 822
-CONVEX 1064 GT_PK(2,2) 862 3347 901 3348 2504 902
-CONVEX 1065 GT_PK(2,2) 862 3347 901 3344 2506 861
-CONVEX 1066 GT_PK(2,2) 862 3346 823 3349 1461 863
-CONVEX 1067 GT_PK(2,2) 862 3350 903 3349 3351 863
-CONVEX 1068 GT_PK(2,2) 862 3348 902 3350 1816 903
-CONVEX 1069 GT_PK(2,2) 351 3352 352 3353 1823 316
-CONVEX 1070 GT_PK(2,2) 351 3353 316 3354 1554 315
-CONVEX 1071 GT_PK(2,2) 351 3355 388 3352 3356 352
-CONVEX 1072 GT_PK(2,2) 351 3355 388 3357 3358 387
-CONVEX 1073 GT_PK(2,2) 837 3359 797 3360 1894 836
-CONVEX 1074 GT_PK(2,2) 837 3359 797 3361 2635 798
-CONVEX 1075 GT_PK(2,2) 837 3362 838 3361 3363 798
-CONVEX 1076 GT_PK(2,2) 799 3364 838 3365 2519 839
-CONVEX 1077 GT_PK(2,2) 799 3364 838 3366 3363 798
-CONVEX 1078 GT_PK(2,2) 799 3367 759 3366 2636 798
-CONVEX 1079 GT_PK(2,2) 799 3367 759 3368 1900 760
-CONVEX 1080 GT_PK(2,2) 637 3369 597 3370 2535 636
-CONVEX 1081 GT_PK(2,2) 637 3369 597 3371 3032 598
-CONVEX 1082 GT_PK(2,2) 637 3372 638 3371 2651 598
-CONVEX 1083 GT_PK(2,2) 637 3372 638 3373 2652 677
-CONVEX 1084 GT_PK(2,2) 518 3374 517 3375 2523 557
-CONVEX 1085 GT_PK(2,2) 518 3376 558 3375 3029 557
-CONVEX 1086 GT_PK(2,2) 671 3377 710 3378 3379 670
-CONVEX 1087 GT_PK(2,2) 671 3380 711 3377 3381 710
-CONVEX 1088 GT_PK(2,2) 753 3382 714 3383 3384 713
-CONVEX 1089 GT_PK(2,2) 753 3385 792 3386 3387 793
-CONVEX 1090 GT_PK(2,2) 753 3388 754 3386 2649 793
-CONVEX 1091 GT_PK(2,2) 753 3388 754 3382 2645 714
-CONVEX 1092 GT_PK(2,2) 669 3389 708 3390 3391 707
-CONVEX 1093 GT_PK(2,2) 669 3392 668 3393 2025 629
-CONVEX 1094 GT_PK(2,2) 669 3390 707 3392 1854 668
-CONVEX 1095 GT_PK(2,2) 669 3389 708 3394 3395 670
-CONVEX 1096 GT_PK(2,2) 825 3396 864 3397 3398 826
-CONVEX 1097 GT_PK(2,2) 825 3399 786 3400 1856 785
-CONVEX 1098 GT_PK(2,2) 825 3399 786 3397 2547 826
-CONVEX 1099 GT_PK(2,2) 865 3401 864 3402 3398 826
-CONVEX 1100 GT_PK(2,2) 865 3401 864 3403 3404 904
-CONVEX 1101 GT_PK(2,2) 748 3405 787 3406 3407 788
-CONVEX 1102 GT_PK(2,2) 748 3408 749 3406 3409 788
-CONVEX 1103 GT_PK(2,2) 748 3408 749 3410 3411 708
-CONVEX 1104 GT_PK(2,2) 748 3410 708 3412 3391 707
-CONVEX 1105 GT_PK(2,2) 748 3412 707 3413 1853 747
-CONVEX 1106 GT_PK(2,2) 748 3405 787 3413 2548 747
-CONVEX 1107 GT_PK(2,2) 1061 3414 1098 3415 2555 1062
-CONVEX 1108 GT_PK(2,2) 1061 3416 1023 3417 2597 1060
-CONVEX 1109 GT_PK(2,2) 1061 3418 1097 3417 2581 1060
-CONVEX 1110 GT_PK(2,2) 1061 3418 1097 3414 2564 1098
-CONVEX 1111 GT_PK(2,2) 1061 3415 1062 3419 3420 1024
-CONVEX 1112 GT_PK(2,2) 1061 3416 1023 3419 2603 1024
-CONVEX 1113 GT_PK(2,2) 1066 3421 1103 3422 1878 1102
-CONVEX 1114 GT_PK(2,2) 1066 3423 1065 3422 3424 1102
-CONVEX 1115 GT_PK(2,2) 1066 3421 1103 3425 3426 1067
-CONVEX 1116 GT_PK(2,2) 1066 3423 1065 3427 2585 1028
-CONVEX 1117 GT_PK(2,2) 1066 3428 1029 3425 2614 1067
-CONVEX 1118 GT_PK(2,2) 1066 3428 1029 3427 3429 1028
-CONVEX 1119 GT_PK(2,2) 752 3430 713 3431 3432 712
-CONVEX 1120 GT_PK(2,2) 752 3433 792 3434 3435 791
-CONVEX 1121 GT_PK(2,2) 752 3436 753 3430 3383 713
-CONVEX 1122 GT_PK(2,2) 752 3436 753 3433 3385 792
-CONVEX 1123 GT_PK(2,2) 752 3437 751 3431 2588 712
-CONVEX 1124 GT_PK(2,2) 752 3437 751 3434 3438 791
-CONVEX 1125 GT_PK(2,2) 831 3439 792 3440 3435 791
-CONVEX 1126 GT_PK(2,2) 789 3441 749 3442 3409 788
-CONVEX 1127 GT_PK(2,2) 1026 3443 1027 3444 2584 1064
-CONVEX 1128 GT_PK(2,2) 1026 3445 1063 3444 2593 1064
-CONVEX 1129 GT_PK(2,2) 1026 3443 1027 3446 2618 988
-CONVEX 1130 GT_PK(2,2) 1025 3447 1062 3448 3420 1024
-CONVEX 1131 GT_PK(2,2) 1025 3449 1063 3447 2590 1062
-CONVEX 1132 GT_PK(2,2) 1025 3450 1026 3449 3445 1063
-CONVEX 1133 GT_PK(2,2) 984 3451 1022 3452 2600 983
-CONVEX 1134 GT_PK(2,2) 984 3451 1022 3453 2595 1023
-CONVEX 1135 GT_PK(2,2) 984 3454 985 3453 2601 1023
-CONVEX 1136 GT_PK(2,2) 984 3455 945 3452 3456 983
-CONVEX 1137 GT_PK(2,2) 947 3457 948 3458 1874 909
-CONVEX 1138 GT_PK(2,2) 991 3459 1030 3460 2612 1029
-CONVEX 1139 GT_PK(2,2) 991 3459 1030 3461 3462 992
-CONVEX 1140 GT_PK(2,2) 1033 3463 1032 3464 3465 1070
-CONVEX 1141 GT_PK(2,2) 1031 3466 1030 3467 3462 992
-CONVEX 1142 GT_PK(2,2) 1031 3468 993 3467 3469 992
-CONVEX 1143 GT_PK(2,2) 1031 3468 993 3470 3471 1032
-CONVEX 1144 GT_PK(2,2) 953 3472 914 3473 3474 952
-CONVEX 1145 GT_PK(2,2) 953 3475 991 3473 3476 952
-CONVEX 1146 GT_PK(2,2) 953 3475 991 3477 3461 992
-CONVEX 1147 GT_PK(2,2) 953 3472 914 3478 2641 915
-CONVEX 1148 GT_PK(2,2) 913 3479 912 3480 2621 873
-CONVEX 1149 GT_PK(2,2) 913 3480 873 3481 3482 874
-CONVEX 1150 GT_PK(2,2) 913 3483 914 3481 2644 874
-CONVEX 1151 GT_PK(2,2) 913 3483 914 3484 3474 952
-CONVEX 1152 GT_PK(2,2) 951 3485 989 3486 2615 950
-CONVEX 1153 GT_PK(2,2) 951 3487 912 3486 2623 950
-CONVEX 1154 GT_PK(2,2) 951 3488 913 3487 3479 912
-CONVEX 1155 GT_PK(2,2) 951 3488 913 3489 3484 952
-CONVEX 1156 GT_PK(2,2) 1205 3490 1204 3491 2740 1237
-CONVEX 1157 GT_PK(2,2) 1205 3490 1204 3492 3493 1171
-CONVEX 1158 GT_PK(2,2) 1174 3494 1207 3495 2743 1208
-CONVEX 1159 GT_PK(2,2) 1174 3494 1207 3496 2628 1173
-CONVEX 1160 GT_PK(2,2) 1139 3497 1103 3498 1877 1138
-CONVEX 1161 GT_PK(2,2) 1139 3499 1174 3500 3501 1140
-CONVEX 1162 GT_PK(2,2) 1139 3498 1138 3502 3503 1173
-CONVEX 1163 GT_PK(2,2) 1139 3499 1174 3502 3496 1173
-CONVEX 1164 GT_PK(2,2) 833 3504 872 3505 2622 873
-CONVEX 1165 GT_PK(2,2) 833 3506 794 3507 2648 793
-CONVEX 1166 GT_PK(2,2) 834 3508 873 3509 3482 874
-CONVEX 1167 GT_PK(2,2) 834 3510 835 3509 2643 874
-CONVEX 1168 GT_PK(2,2) 834 3511 833 3508 3505 873
-CONVEX 1169 GT_PK(2,2) 834 3511 833 3512 3506 794
-CONVEX 1170 GT_PK(2,2) 755 3513 754 3514 2646 715
-CONVEX 1171 GT_PK(2,2) 755 3515 794 3513 2647 754
-CONVEX 1172 GT_PK(2,2) 755 3514 715 3516 3517 716
-CONVEX 1173 GT_PK(2,2) 755 3518 756 3516 1887 716
-CONVEX 1174 GT_PK(2,2) 600 3519 601 3520 2048 640
-CONVEX 1175 GT_PK(2,2) 600 3521 639 3520 2656 640
-CONVEX 1176 GT_PK(2,2) 600 3519 601 3522 2054 561
-CONVEX 1177 GT_PK(2,2) 600 3523 560 3522 2665 561
-CONVEX 1178 GT_PK(2,2) 600 3521 639 3524 2658 599
-CONVEX 1179 GT_PK(2,2) 600 3523 560 3524 2662 599
-CONVEX 1180 GT_PK(2,2) 723 3525 722 3526 2674 762
-CONVEX 1181 GT_PK(2,2) 723 3525 722 3527 2672 683
-CONVEX 1182 GT_PK(2,2) 723 3528 684 3529 2804 724
-CONVEX 1183 GT_PK(2,2) 723 3528 684 3527 3021 683
-CONVEX 1184 GT_PK(2,2) 1438 3530 1424 3531 1936 1439
-CONVEX 1185 GT_PK(2,2) 1438 3532 1423 3530 2677 1424
-CONVEX 1186 GT_PK(2,2) 1437 3533 1423 3534 2680 1422
-CONVEX 1187 GT_PK(2,2) 1437 3535 1436 3534 3536 1422
-CONVEX 1188 GT_PK(2,2) 1437 3537 1438 3533 3532 1423
-CONVEX 1189 GT_PK(2,2) 1180 3538 1179 3539 2696 1213
-CONVEX 1190 GT_PK(2,2) 1180 3540 1214 3539 3541 1213
-CONVEX 1191 GT_PK(2,2) 1180 3540 1214 3542 3543 1181
-CONVEX 1192 GT_PK(2,2) 1180 3538 1179 3544 3545 1145
-CONVEX 1193 GT_PK(2,2) 1144 3546 1179 3547 3545 1145
-CONVEX 1194 GT_PK(2,2) 1144 3546 1179 3548 2698 1178
-CONVEX 1195 GT_PK(2,2) 1246 3549 1245 3550 2700 1213
-CONVEX 1196 GT_PK(2,2) 1246 3551 1214 3550 3541 1213
-CONVEX 1197 GT_PK(2,2) 1246 3551 1214 3552 3553 1247
-CONVEX 1198 GT_PK(2,2) 1246 3554 1277 3549 3555 1245
-CONVEX 1199 GT_PK(2,2) 1246 3556 1278 3552 1581 1247
-CONVEX 1200 GT_PK(2,2) 1246 3554 1277 3556 3557 1278
-CONVEX 1201 GT_PK(2,2) 1215 3558 1214 3559 3553 1247
-CONVEX 1202 GT_PK(2,2) 1215 3560 1248 3559 1749 1247
-CONVEX 1203 GT_PK(2,2) 1215 3560 1248 3561 3210 1216
-CONVEX 1204 GT_PK(2,2) 1215 3562 1182 3561 2703 1216
-CONVEX 1205 GT_PK(2,2) 1215 3558 1214 3563 3543 1181
-CONVEX 1206 GT_PK(2,2) 1215 3562 1182 3563 2709 1181
-CONVEX 1207 GT_PK(2,2) 1307 3564 1308 3565 2710 1278
-CONVEX 1208 GT_PK(2,2) 1307 3566 1277 3567 3568 1306
-CONVEX 1209 GT_PK(2,2) 1307 3566 1277 3565 3557 1278
-CONVEX 1210 GT_PK(2,2) 1307 3569 1334 3567 3570 1306
-CONVEX 1211 GT_PK(2,2) 1307 3571 1335 3569 2686 1334
-CONVEX 1212 GT_PK(2,2) 1307 3564 1308 3571 2714 1335
-CONVEX 1213 GT_PK(2,2) 1326 3572 1299 3573 2727 1298
-CONVEX 1214 GT_PK(2,2) 1326 3572 1299 3574 3575 1327
-CONVEX 1215 GT_PK(2,2) 1326 3576 1375 3577 3578 1351
-CONVEX 1216 GT_PK(2,2) 1172 3579 1137 3580 2728 1171
-CONVEX 1217 GT_PK(2,2) 1172 3581 1205 3580 3492 1171
-CONVEX 1218 GT_PK(2,2) 1172 3581 1205 3582 3583 1206
-CONVEX 1219 GT_PK(2,2) 1172 3582 1206 3584 2627 1173
-CONVEX 1220 GT_PK(2,2) 1172 3585 1138 3584 3503 1173
-CONVEX 1221 GT_PK(2,2) 1172 3579 1137 3585 2731 1138
-CONVEX 1222 GT_PK(2,2) 1101 3586 1100 3587 2550 1136
-CONVEX 1223 GT_PK(2,2) 1101 3588 1137 3587 2729 1136
-CONVEX 1224 GT_PK(2,2) 1101 3588 1137 3589 2732 1102
-CONVEX 1225 GT_PK(2,2) 1101 3586 1100 3590 2594 1064
-CONVEX 1226 GT_PK(2,2) 1101 3591 1065 3589 3424 1102
-CONVEX 1227 GT_PK(2,2) 1101 3591 1065 3590 2583 1064
-CONVEX 1228 GT_PK(2,2) 1203 3592 1204 3593 2739 1236
-CONVEX 1229 GT_PK(2,2) 1235 3594 1267 3595 3596 1266
-CONVEX 1230 GT_PK(2,2) 1235 3597 1265 3595 3598 1266
-CONVEX 1231 GT_PK(2,2) 1235 3597 1265 3599 1860 1234
-CONVEX 1232 GT_PK(2,2) 1235 3594 1267 3600 2738 1236
-CONVEX 1233 GT_PK(2,2) 1235 3601 1203 3600 3593 1236
-CONVEX 1234 GT_PK(2,2) 1170 3602 1204 3603 3493 1171
-CONVEX 1235 GT_PK(2,2) 1170 3603 1171 3604 2730 1136
-CONVEX 1236 GT_PK(2,2) 1170 3605 1203 3606 3607 1169
-CONVEX 1237 GT_PK(2,2) 1170 3605 1203 3602 3592 1204
-CONVEX 1238 GT_PK(2,2) 1170 3608 1135 3604 2551 1136
-CONVEX 1239 GT_PK(2,2) 1170 3606 1169 3608 2735 1135
-CONVEX 1240 GT_PK(2,2) 1239 3609 1206 3610 2626 1207
-CONVEX 1241 GT_PK(2,2) 1239 3611 1240 3610 2741 1207
-CONVEX 1242 GT_PK(2,2) 1239 3612 1271 3611 2744 1240
-CONVEX 1243 GT_PK(2,2) 1239 3612 1271 3613 3614 1270
-CONVEX 1244 GT_PK(2,2) 1274 3615 1243 3616 3617 1242
-CONVEX 1245 GT_PK(2,2) 1274 3618 1273 3616 3619 1242
-CONVEX 1246 GT_PK(2,2) 1274 3620 1304 3621 3622 1303
-CONVEX 1247 GT_PK(2,2) 1274 3618 1273 3621 3623 1303
-CONVEX 1248 GT_PK(2,2) 1241 3624 1240 3625 2746 1272
-CONVEX 1249 GT_PK(2,2) 1241 3626 1273 3625 3627 1272
-CONVEX 1250 GT_PK(2,2) 1241 3624 1240 3628 2742 1208
-CONVEX 1251 GT_PK(2,2) 1241 3626 1273 3629 3619 1242
-CONVEX 1252 GT_PK(2,2) 967 3630 1006 3631 3632 968
-CONVEX 1253 GT_PK(2,2) 967 3633 929 3631 2765 968
-CONVEX 1254 GT_PK(2,2) 967 3634 966 3635 2293 928
-CONVEX 1255 GT_PK(2,2) 967 3633 929 3635 3636 928
-CONVEX 1256 GT_PK(2,2) 1082 3637 1083 3638 3639 1119
-CONVEX 1257 GT_PK(2,2) 1082 3637 1083 3640 2752 1045
-CONVEX 1258 GT_PK(2,2) 1044 3641 1081 3642 2761 1043
-CONVEX 1259 GT_PK(2,2) 1044 3643 1006 3644 3645 1045
-CONVEX 1260 GT_PK(2,2) 1044 3646 1082 3644 3640 1045
-CONVEX 1261 GT_PK(2,2) 1044 3646 1082 3641 3647 1081
-CONVEX 1262 GT_PK(2,2) 1117 3648 1116 3649 2384 1080
-CONVEX 1263 GT_PK(2,2) 1117 3650 1081 3649 2762 1080
-CONVEX 1264 GT_PK(2,2) 1117 3648 1116 3651 3204 1152
-CONVEX 1265 GT_PK(2,2) 1117 3652 1153 3651 2409 1152
-CONVEX 1266 GT_PK(2,2) 1005 3653 1004 3654 3655 1043
-CONVEX 1267 GT_PK(2,2) 1005 3656 1044 3654 3642 1043
-CONVEX 1268 GT_PK(2,2) 1005 3656 1044 3657 3643 1006
-CONVEX 1269 GT_PK(2,2) 1005 3658 967 3657 3630 1006
-CONVEX 1270 GT_PK(2,2) 1005 3653 1004 3659 3145 966
-CONVEX 1271 GT_PK(2,2) 1005 3658 967 3659 3634 966
-CONVEX 1272 GT_PK(2,2) 1042 3660 1004 3661 3655 1043
-CONVEX 1273 GT_PK(2,2) 1042 3662 1079 3663 2385 1041
-CONVEX 1274 GT_PK(2,2) 1042 3664 1003 3663 2760 1041
-CONVEX 1275 GT_PK(2,2) 1042 3660 1004 3664 3146 1003
-CONVEX 1276 GT_PK(2,2) 1042 3661 1043 3665 2763 1080
-CONVEX 1277 GT_PK(2,2) 1042 3662 1079 3665 2383 1080
-CONVEX 1278 GT_PK(2,2) 1007 3666 1008 3667 2766 969
-CONVEX 1279 GT_PK(2,2) 1007 3667 969 3668 1957 968
-CONVEX 1280 GT_PK(2,2) 1007 3669 1006 3668 3632 968
-CONVEX 1281 GT_PK(2,2) 1007 3669 1006 3670 3645 1045
-CONVEX 1282 GT_PK(2,2) 1007 3671 1046 3670 2753 1045
-CONVEX 1283 GT_PK(2,2) 1007 3666 1008 3671 3672 1046
-CONVEX 1284 GT_PK(2,2) 1122 3673 1123 3674 3675 1158
-CONVEX 1285 GT_PK(2,2) 1122 3676 1157 3674 2770 1158
-CONVEX 1286 GT_PK(2,2) 973 3677 972 3678 2775 1011
-CONVEX 1287 GT_PK(2,2) 1050 3679 1049 3680 3681 1087
-CONVEX 1288 GT_PK(2,2) 1050 3679 1049 3682 2773 1011
-CONVEX 1289 GT_PK(2,2) 1160 3683 1124 3684 3685 1125
-CONVEX 1290 GT_PK(2,2) 1160 3686 1195 3687 3688 1194
-CONVEX 1291 GT_PK(2,2) 1089 3689 1051 3690 2789 1052
-CONVEX 1292 GT_PK(2,2) 1089 3691 1090 3690 3692 1052
-CONVEX 1293 GT_PK(2,2) 686 3693 646 3694 3695 647
-CONVEX 1294 GT_PK(2,2) 686 3696 687 3694 2950 647
-CONVEX 1295 GT_PK(2,2) 686 3693 646 3697 2813 685
-CONVEX 1296 GT_PK(2,2) 686 3698 726 3699 2933 1
-CONVEX 1297 GT_PK(2,2) 686 3696 687 3698 2946 726
-CONVEX 1298 GT_PK(2,2) 686 3700 725 3699 2930 1
-CONVEX 1299 GT_PK(2,2) 686 3700 725 3697 2796 685
-CONVEX 1300 GT_PK(2,2) 272 3701 307 3702 1991 306
-CONVEX 1301 GT_PK(2,2) 116 3703 91 3704 3705 90
-CONVEX 1302 GT_PK(2,2) 16 3706 30 3707 2818 15
-CONVEX 1303 GT_PK(2,2) 46 3708 27 3709 3081 45
-CONVEX 1304 GT_PK(2,2) 46 3710 28 3708 2825 27
-CONVEX 1305 GT_PK(2,2) 170 3711 201 3712 2237 202
-CONVEX 1306 GT_PK(2,2) 170 3711 201 3713 3104 169
-CONVEX 1307 GT_PK(2,2) 140 3714 139 3715 3716 112
-CONVEX 1308 GT_PK(2,2) 140 3717 113 3715 3110 112
-CONVEX 1309 GT_PK(2,2) 140 3717 113 3718 3111 141
-CONVEX 1310 GT_PK(2,2) 140 3719 170 3718 3720 141
-CONVEX 1311 GT_PK(2,2) 140 3714 139 3721 2245 169
-CONVEX 1312 GT_PK(2,2) 140 3719 170 3721 3713 169
-CONVEX 1313 GT_PK(2,2) 568 3722 528 3723 2833 529
-CONVEX 1314 GT_PK(2,2) 569 3724 570 3725 2808 609
-CONVEX 1315 GT_PK(2,2) 569 3726 608 3725 2945 609
-CONVEX 1316 GT_PK(2,2) 569 3727 568 3726 3728 608
-CONVEX 1317 GT_PK(2,2) 569 3724 570 3729 2810 530
-CONVEX 1318 GT_PK(2,2) 569 3730 529 3729 2852 530
-CONVEX 1319 GT_PK(2,2) 569 3727 568 3730 3723 529
-CONVEX 1320 GT_PK(2,2) 415 3731 414 3732 2909 377
-CONVEX 1321 GT_PK(2,2) 415 3733 378 3734 2914 416
-CONVEX 1322 GT_PK(2,2) 415 3733 378 3732 2911 377
-CONVEX 1323 GT_PK(2,2) 415 3735 454 3734 1988 416
-CONVEX 1324 GT_PK(2,2) 415 3736 453 3735 3737 454
-CONVEX 1325 GT_PK(2,2) 415 3731 414 3736 2848 453
-CONVEX 1326 GT_PK(2,2) 492 3738 531 3739 2811 530
-CONVEX 1327 GT_PK(2,2) 492 3740 491 3739 2851 530
-CONVEX 1328 GT_PK(2,2) 492 3738 531 3741 2961 493
-CONVEX 1329 GT_PK(2,2) 492 3740 491 3742 2855 453
-CONVEX 1330 GT_PK(2,2) 492 3743 454 3741 1990 493
-CONVEX 1331 GT_PK(2,2) 492 3742 453 3743 3737 454
-CONVEX 1332 GT_PK(2,2) 349 3744 314 3745 2206 313
-CONVEX 1333 GT_PK(2,2) 349 3746 348 3745 3747 313
-CONVEX 1334 GT_PK(2,2) 349 3748 385 3746 3749 348
-CONVEX 1335 GT_PK(2,2) 277 3750 311 3751 2861 276
-CONVEX 1336 GT_PK(2,2) 312 3752 348 3753 3747 313
-CONVEX 1337 GT_PK(2,2) 312 3754 277 3755 3750 311
-CONVEX 1338 GT_PK(2,2) 312 3756 347 3752 3757 348
-CONVEX 1339 GT_PK(2,2) 312 3756 347 3755 2875 311
-CONVEX 1340 GT_PK(2,2) 312 3758 278 3753 2205 313
-CONVEX 1341 GT_PK(2,2) 312 3754 277 3758 3759 278
-CONVEX 1342 GT_PK(2,2) 421 3760 460 3761 1981 459
-CONVEX 1343 GT_PK(2,2) 421 3762 420 3761 3763 459
-CONVEX 1344 GT_PK(2,2) 421 3760 460 3764 3765 422
-CONVEX 1345 GT_PK(2,2) 421 3762 420 3766 2869 383
-CONVEX 1346 GT_PK(2,2) 384 3767 347 3768 2873 383
-CONVEX 1347 GT_PK(2,2) 384 3769 421 3770 3764 422
-CONVEX 1348 GT_PK(2,2) 384 3769 421 3768 3766 383
-CONVEX 1349 GT_PK(2,2) 384 3771 385 3770 2857 422
-CONVEX 1350 GT_PK(2,2) 384 3771 385 3772 3749 348
-CONVEX 1351 GT_PK(2,2) 384 3767 347 3772 3757 348
-CONVEX 1352 GT_PK(2,2) 535 3773 575 3774 2993 574
-CONVEX 1353 GT_PK(2,2) 535 3775 536 3773 3776 575
-CONVEX 1354 GT_PK(2,2) 535 3775 536 3777 2989 497
-CONVEX 1355 GT_PK(2,2) 418 3778 417 3779 2001 456
-CONVEX 1356 GT_PK(2,2) 418 3780 457 3779 2886 456
-CONVEX 1357 GT_PK(2,2) 418 3780 457 3781 3782 419
-CONVEX 1358 GT_PK(2,2) 418 3778 417 3783 2005 380
-CONVEX 1359 GT_PK(2,2) 418 3784 381 3781 2871 419
-CONVEX 1360 GT_PK(2,2) 418 3784 381 3783 2905 380
-CONVEX 1361 GT_PK(2,2) 458 3785 497 3786 2883 459
-CONVEX 1362 GT_PK(2,2) 458 3787 457 3788 3782 419
-CONVEX 1363 GT_PK(2,2) 458 3789 420 3788 2872 419
-CONVEX 1364 GT_PK(2,2) 458 3789 420 3786 3763 459
-CONVEX 1365 GT_PK(2,2) 884 3790 844 3791 3792 883
-CONVEX 1366 GT_PK(2,2) 884 3793 924 3794 2300 885
-CONVEX 1367 GT_PK(2,2) 884 3794 885 3795 1738 845
-CONVEX 1368 GT_PK(2,2) 884 3790 844 3795 2935 845
-CONVEX 1369 GT_PK(2,2) 884 3791 883 3796 3797 923
-CONVEX 1370 GT_PK(2,2) 884 3793 924 3796 3798 923
-CONVEX 1371 GT_PK(2,2) 843 3799 844 3800 3792 883
-CONVEX 1372 GT_PK(2,2) 763 3801 802 3802 2936 762
-CONVEX 1373 GT_PK(2,2) 763 3803 723 3804 3529 724
-CONVEX 1374 GT_PK(2,2) 763 3803 723 3802 3526 762
-CONVEX 1375 GT_PK(2,2) 763 3805 764 3804 2800 724
-CONVEX 1376 GT_PK(2,2) 573 3806 613 3807 2996 574
-CONVEX 1377 GT_PK(2,2) 573 3808 572 3809 2958 533
-CONVEX 1378 GT_PK(2,2) 848 3810 808 3811 2967 847
-CONVEX 1379 GT_PK(2,2) 848 3812 887 3813 2297 888
-CONVEX 1380 GT_PK(2,2) 848 3812 887 3811 3152 847
-CONVEX 1381 GT_PK(2,2) 692 3814 652 3815 2953 653
-CONVEX 1382 GT_PK(2,2) 692 3816 691 3814 3817 652
-CONVEX 1383 GT_PK(2,2) 612 3818 613 3819 2951 652
-CONVEX 1384 GT_PK(2,2) 612 3820 573 3818 3806 613
-CONVEX 1385 GT_PK(2,2) 612 3821 611 3822 2984 572
-CONVEX 1386 GT_PK(2,2) 612 3820 573 3822 3808 572
-CONVEX 1387 GT_PK(2,2) 651 3823 612 3824 3821 611
-CONVEX 1388 GT_PK(2,2) 651 3823 612 3825 3819 652
-CONVEX 1389 GT_PK(2,2) 651 3826 691 3825 3817 652
-CONVEX 1390 GT_PK(2,2) 651 3826 691 3827 2980 690
-CONVEX 1391 GT_PK(2,2) 650 3828 689 3829 2976 649
-CONVEX 1392 GT_PK(2,2) 650 3830 610 3829 1968 649
-CONVEX 1393 GT_PK(2,2) 650 3831 611 3830 2983 610
-CONVEX 1394 GT_PK(2,2) 650 3832 651 3831 3824 611
-CONVEX 1395 GT_PK(2,2) 650 3828 689 3833 2979 690
-CONVEX 1396 GT_PK(2,2) 650 3832 651 3833 3827 690
-CONVEX 1397 GT_PK(2,2) 815 3834 854 3835 2986 855
-CONVEX 1398 GT_PK(2,2) 893 3836 894 3837 3838 933
-CONVEX 1399 GT_PK(2,2) 893 3839 854 3836 2985 894
-CONVEX 1400 GT_PK(2,2) 893 3840 932 3837 1951 933
-CONVEX 1401 GT_PK(2,2) 893 3841 853 3839 3842 854
-CONVEX 1402 GT_PK(2,2) 812 3843 813 3844 2999 773
-CONVEX 1403 GT_PK(2,2) 889 3845 888 3846 2295 928
-CONVEX 1404 GT_PK(2,2) 889 3847 929 3846 3636 928
-CONVEX 1405 GT_PK(2,2) 695 3848 694 3849 3850 655
-CONVEX 1406 GT_PK(2,2) 770 3851 769 3852 2970 730
-CONVEX 1407 GT_PK(2,2) 615 3853 614 3854 2991 575
-CONVEX 1408 GT_PK(2,2) 548 3855 549 3856 3004 509
-CONVEX 1409 GT_PK(2,2) 548 3857 589 3858 2029 588
-CONVEX 1410 GT_PK(2,2) 548 3855 549 3857 3859 589
-CONVEX 1411 GT_PK(2,2) 434 3860 395 3861 2088 396
-CONVEX 1412 GT_PK(2,2) 434 3862 433 3860 3006 395
-CONVEX 1413 GT_PK(2,2) 434 3863 472 3864 3865 473
-CONVEX 1414 GT_PK(2,2) 434 3863 472 3862 3866 433
-CONVEX 1415 GT_PK(2,2) 442 3867 404 3868 3013 443
-CONVEX 1416 GT_PK(2,2) 442 3867 404 3869 3008 403
-CONVEX 1417 GT_PK(2,2) 643 3870 683 3871 2673 682
-CONVEX 1418 GT_PK(2,2) 643 3872 642 3871 3016 682
-CONVEX 1419 GT_PK(2,2) 643 3872 642 3873 3874 603
-CONVEX 1420 GT_PK(2,2) 643 3875 644 3870 3020 683
-CONVEX 1421 GT_PK(2,2) 602 3876 642 3877 3874 603
-CONVEX 1422 GT_PK(2,2) 602 3878 562 3879 2053 601
-CONVEX 1423 GT_PK(2,2) 602 3879 601 3880 2049 641
-CONVEX 1424 GT_PK(2,2) 602 3876 642 3880 3017 641
-CONVEX 1425 GT_PK(2,2) 602 3878 562 3881 2058 563
-CONVEX 1426 GT_PK(2,2) 602 3877 603 3881 3882 563
-CONVEX 1427 GT_PK(2,2) 565 3883 526 3884 3885 525
-CONVEX 1428 GT_PK(2,2) 488 3886 489 3887 2840 527
-CONVEX 1429 GT_PK(2,2) 488 3888 526 3887 3889 527
-CONVEX 1430 GT_PK(2,2) 486 3890 524 3891 3892 525
-CONVEX 1431 GT_PK(2,2) 444 3893 482 3894 3895 443
-CONVEX 1432 GT_PK(2,2) 444 3894 443 3896 3014 405
-CONVEX 1433 GT_PK(2,2) 483 3897 482 3898 3026 521
-CONVEX 1434 GT_PK(2,2) 483 3898 521 3899 2059 522
-CONVEX 1435 GT_PK(2,2) 483 3900 484 3899 3023 522
-CONVEX 1436 GT_PK(2,2) 483 3900 484 3901 3902 445
-CONVEX 1437 GT_PK(2,2) 483 3903 444 3901 3904 445
-CONVEX 1438 GT_PK(2,2) 483 3903 444 3897 3893 482
-CONVEX 1439 GT_PK(2,2) 519 3905 559 3906 2661 520
-CONVEX 1440 GT_PK(2,2) 519 3907 558 3905 3030 559
-CONVEX 1441 GT_PK(2,2) 519 3908 518 3909 3910 480
-CONVEX 1442 GT_PK(2,2) 519 3908 518 3907 3376 558
-CONVEX 1443 GT_PK(2,2) 288 3911 287 3912 2120 253
-CONVEX 1444 GT_PK(2,2) 288 3913 323 3911 3048 287
-CONVEX 1445 GT_PK(2,2) 288 3914 254 3912 2115 253
-CONVEX 1446 GT_PK(2,2) 288 3914 254 3915 2118 289
-CONVEX 1447 GT_PK(2,2) 244 3916 212 3917 3057 245
-CONVEX 1448 GT_PK(2,2) 244 3918 211 3916 3062 212
-CONVEX 1449 GT_PK(2,2) 244 3919 278 3917 2203 245
-CONVEX 1450 GT_PK(2,2) 244 3920 277 3919 3759 278
-CONVEX 1451 GT_PK(2,2) 150 3921 180 3922 3060 151
-CONVEX 1452 GT_PK(2,2) 150 3923 122 3924 3925 149
-CONVEX 1453 GT_PK(2,2) 121 3926 122 3927 3928 96
-CONVEX 1454 GT_PK(2,2) 121 3926 122 3929 3925 149
-CONVEX 1455 GT_PK(2,2) 97 3930 122 3931 3928 96
-CONVEX 1456 GT_PK(2,2) 97 3932 73 3931 3933 96
-CONVEX 1457 GT_PK(2,2) 97 3934 74 3932 3066 73
-CONVEX 1458 GT_PK(2,2) 97 3934 74 3935 3067 98
-CONVEX 1459 GT_PK(2,2) 93 3936 69 3937 3938 92
-CONVEX 1460 GT_PK(2,2) 51 3939 73 3940 2183 33
-CONVEX 1461 GT_PK(2,2) 51 3941 32 3940 3942 33
-CONVEX 1462 GT_PK(2,2) 226 3943 225 3944 1474 259
-CONVEX 1463 GT_PK(2,2) 226 3945 193 3943 3092 225
-CONVEX 1464 GT_PK(2,2) 294 3946 259 3947 1449 293
-CONVEX 1465 GT_PK(2,2) 294 3948 329 3947 2044 293
-CONVEX 1466 GT_PK(2,2) 294 3948 329 3949 2041 330
-CONVEX 1467 GT_PK(2,2) 294 3950 295 3949 3951 330
-CONVEX 1468 GT_PK(2,2) 331 3952 367 3953 2046 330
-CONVEX 1469 GT_PK(2,2) 331 3954 295 3953 3951 330
-CONVEX 1470 GT_PK(2,2) 134 3955 107 3956 3088 106
-CONVEX 1471 GT_PK(2,2) 134 3957 163 3958 3959 164
-CONVEX 1472 GT_PK(2,2) 195 3960 196 3961 3962 164
-CONVEX 1473 GT_PK(2,2) 195 3963 163 3961 3959 164
-CONVEX 1474 GT_PK(2,2) 232 3964 200 3965 3105 233
-CONVEX 1475 GT_PK(2,2) 111 3966 139 3967 3716 112
-CONVEX 1476 GT_PK(2,2) 111 3968 86 3967 3107 112
-CONVEX 1477 GT_PK(2,2) 63 3969 86 3970 3106 87
-CONVEX 1478 GT_PK(2,2) 63 3970 87 3971 2242 64
-CONVEX 1479 GT_PK(2,2) 63 3972 42 3973 2256 41
-CONVEX 1480 GT_PK(2,2) 63 3972 42 3971 2258 64
-CONVEX 1481 GT_PK(2,2) 62 3974 40 3975 3119 61
-CONVEX 1482 GT_PK(2,2) 62 3976 63 3977 3969 86
-CONVEX 1483 GT_PK(2,2) 62 3974 40 3978 3118 41
-CONVEX 1484 GT_PK(2,2) 62 3976 63 3978 3973 41
-CONVEX 1485 GT_PK(2,2) 38 3979 59 3980 3123 37
-CONVEX 1486 GT_PK(2,2) 38 3980 37 3981 2235 19
-CONVEX 1487 GT_PK(2,2) 38 3982 39 3983 2261 20
-CONVEX 1488 GT_PK(2,2) 38 3983 20 3984 1496 5
-CONVEX 1489 GT_PK(2,2) 38 3981 19 3984 3985 5
-CONVEX 1490 GT_PK(2,2) 83 3986 59 3987 3122 82
-CONVEX 1491 GT_PK(2,2) 83 3988 108 3987 3125 82
-CONVEX 1492 GT_PK(2,2) 83 3988 108 3989 3990 109
-CONVEX 1493 GT_PK(2,2) 165 3991 196 3992 3962 164
-CONVEX 1494 GT_PK(2,2) 1338 3993 1364 3994 3127 1339
-CONVEX 1495 GT_PK(2,2) 1338 3995 1337 3996 2272 1310
-CONVEX 1496 GT_PK(2,2) 1338 3997 1311 3994 2404 1339
-CONVEX 1497 GT_PK(2,2) 1338 3997 1311 3996 3224 1310
-CONVEX 1498 GT_PK(2,2) 1388 3998 1364 3999 4000 1387
-CONVEX 1499 GT_PK(2,2) 1388 3999 1387 4001 2267 1409
-CONVEX 1500 GT_PK(2,2) 1388 4002 1410 4001 2353 1409
-CONVEX 1501 GT_PK(2,2) 1388 3998 1364 4003 3126 1365
-CONVEX 1502 GT_PK(2,2) 1363 4004 1362 4005 2279 1337
-CONVEX 1503 GT_PK(2,2) 1363 4006 1338 4005 3995 1337
-CONVEX 1504 GT_PK(2,2) 1363 4006 1338 4007 3993 1364
-CONVEX 1505 GT_PK(2,2) 1363 4007 1364 4008 4000 1387
-CONVEX 1506 GT_PK(2,2) 1363 4008 1387 4009 2268 1386
-CONVEX 1507 GT_PK(2,2) 1363 4004 1362 4009 2276 1386
-CONVEX 1508 GT_PK(2,2) 1109 4010 1144 4011 3547 1145
-CONVEX 1509 GT_PK(2,2) 1109 4010 1144 4012 4013 1108
-CONVEX 1510 GT_PK(2,2) 1037 4014 1038 4015 3139 1075
-CONVEX 1511 GT_PK(2,2) 1037 4016 1074 4015 4017 1075
-CONVEX 1512 GT_PK(2,2) 962 4018 1000 4019 2283 1001
-CONVEX 1513 GT_PK(2,2) 962 4020 963 4019 3131 1001
-CONVEX 1514 GT_PK(2,2) 962 4021 924 4022 3798 923
-CONVEX 1515 GT_PK(2,2) 962 4020 963 4021 3134 924
-CONVEX 1516 GT_PK(2,2) 926 4023 886 4024 3147 925
-CONVEX 1517 GT_PK(2,2) 926 4024 925 4025 3133 964
-CONVEX 1518 GT_PK(2,2) 926 4026 927 4027 2296 887
-CONVEX 1519 GT_PK(2,2) 926 4023 886 4027 3151 887
-CONVEX 1520 GT_PK(2,2) 926 4028 965 4025 3143 964
-CONVEX 1521 GT_PK(2,2) 926 4028 965 4026 3140 927
-CONVEX 1522 GT_PK(2,2) 1349 4029 1374 4030 3164 1348
-CONVEX 1523 GT_PK(2,2) 1349 4031 1321 4030 3170 1348
-CONVEX 1524 GT_PK(2,2) 1349 4029 1374 4032 4033 1350
-CONVEX 1525 GT_PK(2,2) 1191 4034 1157 4035 2769 1192
-CONVEX 1526 GT_PK(2,2) 1191 4036 1190 4037 3244 1156
-CONVEX 1527 GT_PK(2,2) 1191 4034 1157 4037 4038 1156
-CONVEX 1528 GT_PK(2,2) 1292 4039 1261 4040 3189 1293
-CONVEX 1529 GT_PK(2,2) 1292 4041 1321 4042 3172 1291
-CONVEX 1530 GT_PK(2,2) 1226 4043 1259 4044 4045 1258
-CONVEX 1531 GT_PK(2,2) 1226 4046 1193 4047 1740 1192
-CONVEX 1532 GT_PK(2,2) 1260 4048 1292 4049 4039 1261
-CONVEX 1533 GT_PK(2,2) 1260 4050 1259 4051 4052 1291
-CONVEX 1534 GT_PK(2,2) 1260 4048 1292 4051 4042 1291
-CONVEX 1535 GT_PK(2,2) 1114 4053 1077 4054 3198 1078
-CONVEX 1536 GT_PK(2,2) 1114 4053 1077 4055 3195 1113
-CONVEX 1537 GT_PK(2,2) 1114 4054 1078 4056 2380 1115
-CONVEX 1538 GT_PK(2,2) 1114 4057 1150 4056 3206 1115
-CONVEX 1539 GT_PK(2,2) 1114 4055 1113 4058 2373 1149
-CONVEX 1540 GT_PK(2,2) 1114 4057 1150 4058 2377 1149
-CONVEX 1541 GT_PK(2,2) 1283 4059 1251 4060 3213 1282
-CONVEX 1542 GT_PK(2,2) 1283 4061 1313 4062 4063 1284
-CONVEX 1543 GT_PK(2,2) 1283 4064 1252 4062 2402 1284
-CONVEX 1544 GT_PK(2,2) 1283 4059 1251 4064 3218 1252
-CONVEX 1545 GT_PK(2,2) 1283 4060 1282 4065 2407 1312
-CONVEX 1546 GT_PK(2,2) 1283 4061 1313 4065 4066 1312
-CONVEX 1547 GT_PK(2,2) 1340 4067 1366 4068 3232 1341
-CONVEX 1548 GT_PK(2,2) 1340 4069 1313 4070 4066 1312
-CONVEX 1549 GT_PK(2,2) 1340 4069 1313 4068 4071 1341
-CONVEX 1550 GT_PK(2,2) 1340 4070 1312 4072 2405 1339
-CONVEX 1551 GT_PK(2,2) 1340 4073 1365 4072 3128 1339
-CONVEX 1552 GT_PK(2,2) 1340 4067 1366 4073 4074 1365
-CONVEX 1553 GT_PK(2,2) 1315 4075 1342 4076 3234 1343
-CONVEX 1554 GT_PK(2,2) 1315 4077 1286 4078 3160 1285
-CONVEX 1555 GT_PK(2,2) 1315 4077 1286 4079 4080 1316
-CONVEX 1556 GT_PK(2,2) 1315 4076 1343 4079 2342 1316
-CONVEX 1557 GT_PK(2,2) 1120 4081 1155 4082 3238 1119
-CONVEX 1558 GT_PK(2,2) 1120 4081 1155 4083 3243 1156
-CONVEX 1559 GT_PK(2,2) 1120 4084 1083 4082 3639 1119
-CONVEX 1560 GT_PK(2,2) 626 4085 665 4086 3258 625
-CONVEX 1561 GT_PK(2,2) 626 4087 666 4085 3251 665
-CONVEX 1562 GT_PK(2,2) 626 4088 587 4086 2428 625
-CONVEX 1563 GT_PK(2,2) 703 4089 704 4090 1775 744
-CONVEX 1564 GT_PK(2,2) 703 4091 664 4089 3254 704
-CONVEX 1565 GT_PK(2,2) 703 4092 743 4090 1529 744
-CONVEX 1566 GT_PK(2,2) 703 4091 664 4093 3256 663
-CONVEX 1567 GT_PK(2,2) 703 4094 702 4093 3296 663
-CONVEX 1568 GT_PK(2,2) 703 4094 702 4092 3297 743
-CONVEX 1569 GT_PK(2,2) 503 4095 504 4096 4097 465
-CONVEX 1570 GT_PK(2,2) 503 4095 504 4098 3283 542
-CONVEX 1571 GT_PK(2,2) 499 4099 460 4100 1982 498
-CONVEX 1572 GT_PK(2,2) 466 4101 504 4102 4097 465
-CONVEX 1573 GT_PK(2,2) 466 4103 428 4104 1556 467
-CONVEX 1574 GT_PK(2,2) 466 4105 505 4104 3264 467
-CONVEX 1575 GT_PK(2,2) 466 4101 504 4105 3279 505
-CONVEX 1576 GT_PK(2,2) 466 4106 427 4102 4107 465
-CONVEX 1577 GT_PK(2,2) 466 4106 427 4103 2507 428
-CONVEX 1578 GT_PK(2,2) 660 4108 661 4109 4110 700
-CONVEX 1579 GT_PK(2,2) 660 4111 621 4108 3305 661
-CONVEX 1580 GT_PK(2,2) 701 4112 702 4113 3294 741
-CONVEX 1581 GT_PK(2,2) 701 4112 702 4114 3295 662
-CONVEX 1582 GT_PK(2,2) 701 4114 662 4115 3301 661
-CONVEX 1583 GT_PK(2,2) 701 4115 661 4116 4110 700
-CONVEX 1584 GT_PK(2,2) 701 4117 740 4116 3269 700
-CONVEX 1585 GT_PK(2,2) 701 4117 740 4113 3268 741
-CONVEX 1586 GT_PK(2,2) 583 4118 584 4119 3290 623
-CONVEX 1587 GT_PK(2,2) 583 4120 622 4119 3299 623
-CONVEX 1588 GT_PK(2,2) 583 4118 584 4121 3292 544
-CONVEX 1589 GT_PK(2,2) 583 4121 544 4122 3284 543
-CONVEX 1590 GT_PK(2,2) 583 4122 543 4123 3281 582
-CONVEX 1591 GT_PK(2,2) 583 4120 622 4123 3303 582
-CONVEX 1592 GT_PK(2,2) 1091 4124 1054 4125 3322 1092
-CONVEX 1593 GT_PK(2,2) 1091 4126 1127 4127 4128 1090
-CONVEX 1594 GT_PK(2,2) 1053 4129 1014 4130 2783 1052
-CONVEX 1595 GT_PK(2,2) 1053 4131 1090 4130 3692 1052
-CONVEX 1596 GT_PK(2,2) 1053 4129 1014 4132 2787 1015
-CONVEX 1597 GT_PK(2,2) 1053 4133 1054 4132 3342 1015
-CONVEX 1598 GT_PK(2,2) 1053 4134 1091 4131 4127 1090
-CONVEX 1599 GT_PK(2,2) 1053 4134 1091 4133 4124 1054
-CONVEX 1600 GT_PK(2,2) 425 4135 388 4136 3358 387
-CONVEX 1601 GT_PK(2,2) 389 4137 427 4138 2508 390
-CONVEX 1602 GT_PK(2,2) 389 4139 388 4140 3356 352
-CONVEX 1603 GT_PK(2,2) 389 4141 353 4138 2518 390
-CONVEX 1604 GT_PK(2,2) 389 4141 353 4140 2516 352
-CONVEX 1605 GT_PK(2,2) 350 4142 314 4143 1701 315
-CONVEX 1606 GT_PK(2,2) 350 4144 351 4143 3354 315
-CONVEX 1607 GT_PK(2,2) 350 4145 349 4142 3744 314
-CONVEX 1608 GT_PK(2,2) 350 4144 351 4146 3357 387
-CONVEX 1609 GT_PK(2,2) 877 4147 838 4148 2520 878
-CONVEX 1610 GT_PK(2,2) 877 4149 837 4147 3362 838
-CONVEX 1611 GT_PK(2,2) 800 4150 799 4151 3365 839
-CONVEX 1612 GT_PK(2,2) 800 4152 761 4153 2668 801
-CONVEX 1613 GT_PK(2,2) 800 4152 761 4154 1919 760
-CONVEX 1614 GT_PK(2,2) 800 4150 799 4154 3368 760
-CONVEX 1615 GT_PK(2,2) 676 4155 637 4156 3370 636
-CONVEX 1616 GT_PK(2,2) 676 4156 636 4157 4158 675
-CONVEX 1617 GT_PK(2,2) 676 4159 715 4157 2538 675
-CONVEX 1618 GT_PK(2,2) 676 4159 715 4160 3517 716
-CONVEX 1619 GT_PK(2,2) 676 4161 677 4160 1888 716
-CONVEX 1620 GT_PK(2,2) 676 4155 637 4161 3373 677
-CONVEX 1621 GT_PK(2,2) 479 4162 518 4163 3374 517
-CONVEX 1622 GT_PK(2,2) 479 4163 517 4164 2528 478
-CONVEX 1623 GT_PK(2,2) 479 4165 440 4164 3037 478
-CONVEX 1624 GT_PK(2,2) 479 4162 518 4166 3910 480
-CONVEX 1625 GT_PK(2,2) 515 4167 516 4168 2526 477
-CONVEX 1626 GT_PK(2,2) 475 4169 436 4170 3035 437
-CONVEX 1627 GT_PK(2,2) 511 4171 472 4172 4173 510
-CONVEX 1628 GT_PK(2,2) 511 4171 472 4174 3865 473
-CONVEX 1629 GT_PK(2,2) 550 4175 549 4176 3859 589
-CONVEX 1630 GT_PK(2,2) 550 4175 549 4177 3003 510
-CONVEX 1631 GT_PK(2,2) 550 4178 511 4177 4172 510
-CONVEX 1632 GT_PK(2,2) 635 4179 636 4180 4158 675
-CONVEX 1633 GT_PK(2,2) 635 4181 596 4179 2534 636
-CONVEX 1634 GT_PK(2,2) 673 4182 713 4183 3432 712
-CONVEX 1635 GT_PK(2,2) 593 4184 592 4185 4186 632
-CONVEX 1636 GT_PK(2,2) 593 4184 592 4187 4188 553
-CONVEX 1637 GT_PK(2,2) 709 4189 749 4190 4191 710
-CONVEX 1638 GT_PK(2,2) 709 4189 749 4192 3411 708
-CONVEX 1639 GT_PK(2,2) 709 4190 710 4193 3379 670
-CONVEX 1640 GT_PK(2,2) 709 4192 708 4193 3395 670
-CONVEX 1641 GT_PK(2,2) 905 4194 865 4195 3403 904
-CONVEX 1642 GT_PK(2,2) 905 4196 943 4195 4197 904
-CONVEX 1643 GT_PK(2,2) 827 4198 787 4199 3407 788
-CONVEX 1644 GT_PK(2,2) 827 4198 787 4200 2546 826
-CONVEX 1645 GT_PK(2,2) 866 4201 867 4202 4203 906
-CONVEX 1646 GT_PK(2,2) 866 4204 905 4202 4205 906
-CONVEX 1647 GT_PK(2,2) 866 4204 905 4206 4194 865
-CONVEX 1648 GT_PK(2,2) 866 4207 827 4201 4208 867
-CONVEX 1649 GT_PK(2,2) 866 4206 865 4209 3402 826
-CONVEX 1650 GT_PK(2,2) 866 4207 827 4209 4200 826
-CONVEX 1651 GT_PK(2,2) 832 4210 831 4211 3439 792
-CONVEX 1652 GT_PK(2,2) 832 4211 792 4212 3387 793
-CONVEX 1653 GT_PK(2,2) 832 4213 833 4212 3507 793
-CONVEX 1654 GT_PK(2,2) 832 4213 833 4214 3504 872
-CONVEX 1655 GT_PK(2,2) 830 4215 831 4216 3440 791
-CONVEX 1656 GT_PK(2,2) 828 4217 867 4218 4219 868
-CONVEX 1657 GT_PK(2,2) 828 4220 789 4221 3442 788
-CONVEX 1658 GT_PK(2,2) 828 4222 827 4221 4199 788
-CONVEX 1659 GT_PK(2,2) 828 4222 827 4217 4208 867
-CONVEX 1660 GT_PK(2,2) 986 4223 1025 4224 3448 1024
-CONVEX 1661 GT_PK(2,2) 986 4225 985 4224 2602 1024
-CONVEX 1662 GT_PK(2,2) 986 4226 947 4227 3457 948
-CONVEX 1663 GT_PK(2,2) 986 4226 947 4225 4228 985
-CONVEX 1664 GT_PK(2,2) 907 4229 867 4230 4219 868
-CONVEX 1665 GT_PK(2,2) 907 4229 867 4231 4203 906
-CONVEX 1666 GT_PK(2,2) 907 4232 945 4231 4233 906
-CONVEX 1667 GT_PK(2,2) 990 4234 991 4235 3460 1029
-CONVEX 1668 GT_PK(2,2) 990 4235 1029 4236 3429 1028
-CONVEX 1669 GT_PK(2,2) 990 4237 989 4236 2619 1028
-CONVEX 1670 GT_PK(2,2) 990 4238 951 4237 3485 989
-CONVEX 1671 GT_PK(2,2) 990 4234 991 4239 3476 952
-CONVEX 1672 GT_PK(2,2) 990 4238 951 4239 3489 952
-CONVEX 1673 GT_PK(2,2) 1072 4240 1073 4241 4242 1035
-CONVEX 1674 GT_PK(2,2) 1072 4243 1109 4244 4012 1108
-CONVEX 1675 GT_PK(2,2) 1072 4243 1109 4240 4245 1073
-CONVEX 1676 GT_PK(2,2) 994 4246 993 4247 3471 1032
-CONVEX 1677 GT_PK(2,2) 994 4248 1033 4247 3463 1032
-CONVEX 1678 GT_PK(2,2) 994 4246 993 4249 4250 955
-CONVEX 1679 GT_PK(2,2) 994 4251 956 4249 4252 955
-CONVEX 1680 GT_PK(2,2) 954 4253 953 4254 3478 915
-CONVEX 1681 GT_PK(2,2) 954 4255 993 4256 4250 955
-CONVEX 1682 GT_PK(2,2) 954 4255 993 4257 3469 992
-CONVEX 1683 GT_PK(2,2) 954 4253 953 4257 3477 992
-CONVEX 1684 GT_PK(2,2) 954 4258 916 4256 4259 955
-CONVEX 1685 GT_PK(2,2) 954 4258 916 4254 4260 915
-CONVEX 1686 GT_PK(2,2) 1238 4261 1269 4262 2722 1237
-CONVEX 1687 GT_PK(2,2) 1238 4263 1205 4262 3491 1237
-CONVEX 1688 GT_PK(2,2) 1238 4261 1269 4264 2726 1270
-CONVEX 1689 GT_PK(2,2) 1238 4265 1239 4264 3613 1270
-CONVEX 1690 GT_PK(2,2) 1238 4263 1205 4266 3583 1206
-CONVEX 1691 GT_PK(2,2) 1238 4265 1239 4266 3609 1206
-CONVEX 1692 GT_PK(2,2) 1210 4267 1243 4268 2748 1211
-CONVEX 1693 GT_PK(2,2) 1210 4267 1243 4269 3617 1242
-CONVEX 1694 GT_PK(2,2) 795 4270 834 4271 3510 835
-CONVEX 1695 GT_PK(2,2) 795 4272 755 4273 3518 756
-CONVEX 1696 GT_PK(2,2) 795 4270 834 4274 3512 794
-CONVEX 1697 GT_PK(2,2) 795 4272 755 4274 3515 794
-CONVEX 1698 GT_PK(2,2) 795 4275 796 4273 1889 756
-CONVEX 1699 GT_PK(2,2) 795 4275 796 4271 1895 835
-CONVEX 1700 GT_PK(2,2) 1403 4276 1404 4277 2681 1422
-CONVEX 1701 GT_PK(2,2) 1403 4278 1402 4279 4280 1381
-CONVEX 1702 GT_PK(2,2) 1333 4281 1334 4282 3570 1306
-CONVEX 1703 GT_PK(2,2) 1333 4283 1305 4282 4284 1306
-CONVEX 1704 GT_PK(2,2) 1296 4285 1324 4286 4287 1297
-CONVEX 1705 GT_PK(2,2) 1296 4288 1267 4289 3596 1266
-CONVEX 1706 GT_PK(2,2) 1296 4288 1267 4286 2737 1297
-CONVEX 1707 GT_PK(2,2) 1325 4290 1324 4291 4292 1351
-CONVEX 1708 GT_PK(2,2) 1325 4293 1326 4294 3573 1298
-CONVEX 1709 GT_PK(2,2) 1325 4293 1326 4291 3577 1351
-CONVEX 1710 GT_PK(2,2) 1325 4294 1298 4295 2717 1297
-CONVEX 1711 GT_PK(2,2) 1325 4290 1324 4295 4287 1297
-CONVEX 1712 GT_PK(2,2) 1398 4296 1353 4297 4298 1376
-CONVEX 1713 GT_PK(2,2) 1146 4299 1147 4300 2708 1181
-CONVEX 1714 GT_PK(2,2) 1146 4301 1180 4300 3542 1181
-CONVEX 1715 GT_PK(2,2) 1146 4301 1180 4302 3544 1145
-CONVEX 1716 GT_PK(2,2) 1276 4303 1305 4304 4284 1306
-CONVEX 1717 GT_PK(2,2) 1276 4305 1277 4304 3568 1306
-CONVEX 1718 GT_PK(2,2) 1276 4305 1277 4306 3555 1245
-CONVEX 1719 GT_PK(2,2) 1276 4306 1245 4307 2701 1244
-CONVEX 1720 GT_PK(2,2) 1352 4308 1326 4309 3574 1327
-CONVEX 1721 GT_PK(2,2) 1352 4308 1326 4310 3576 1375
-CONVEX 1722 GT_PK(2,2) 1352 4311 1353 4309 4312 1327
-CONVEX 1723 GT_PK(2,2) 1352 4310 1375 4313 4314 1376
-CONVEX 1724 GT_PK(2,2) 1352 4311 1353 4313 4298 1376
-CONVEX 1725 GT_PK(2,2) 1202 4315 1203 4316 3607 1169
-CONVEX 1726 GT_PK(2,2) 1202 4316 1169 4317 2734 1168
-CONVEX 1727 GT_PK(2,2) 1202 4318 1235 4319 3599 1234
-CONVEX 1728 GT_PK(2,2) 1202 4318 1235 4315 3601 1203
-CONVEX 1729 GT_PK(2,2) 1202 4320 1201 4319 1863 1234
-CONVEX 1730 GT_PK(2,2) 1202 4320 1201 4317 2572 1168
-CONVEX 1731 GT_PK(2,2) 1275 4321 1274 4322 3620 1304
-CONVEX 1732 GT_PK(2,2) 1275 4321 1274 4323 3615 1243
-CONVEX 1733 GT_PK(2,2) 1275 4324 1305 4322 4325 1304
-CONVEX 1734 GT_PK(2,2) 1275 4326 1276 4324 4303 1305
-CONVEX 1735 GT_PK(2,2) 1275 4323 1243 4327 2747 1244
-CONVEX 1736 GT_PK(2,2) 1275 4326 1276 4327 4307 1244
-CONVEX 1737 GT_PK(2,2) 1118 4328 1082 4329 3647 1081
-CONVEX 1738 GT_PK(2,2) 1118 4330 1117 4329 3650 1081
-CONVEX 1739 GT_PK(2,2) 1118 4328 1082 4331 3638 1119
-CONVEX 1740 GT_PK(2,2) 1118 4330 1117 4332 3652 1153
-CONVEX 1741 GT_PK(2,2) 1118 4333 1154 4331 3239 1119
-CONVEX 1742 GT_PK(2,2) 1118 4333 1154 4332 2414 1153
-CONVEX 1743 GT_PK(2,2) 1086 4334 1123 4335 2792 1087
-CONVEX 1744 GT_PK(2,2) 1086 4336 1122 4334 3673 1123
-CONVEX 1745 GT_PK(2,2) 1086 4337 1049 4335 3681 1087
-CONVEX 1746 GT_PK(2,2) 1121 4338 1157 4339 4038 1156
-CONVEX 1747 GT_PK(2,2) 1121 4340 1122 4338 3676 1157
-CONVEX 1748 GT_PK(2,2) 1121 4341 1120 4339 4083 1156
-CONVEX 1749 GT_PK(2,2) 935 4342 973 4343 4344 974
-CONVEX 1750 GT_PK(2,2) 935 4345 895 4346 3328 896
-CONVEX 1751 GT_PK(2,2) 935 4347 936 4346 1797 896
-CONVEX 1752 GT_PK(2,2) 935 4343 974 4347 2778 936
-CONVEX 1753 GT_PK(2,2) 934 4348 895 4349 1959 894
-CONVEX 1754 GT_PK(2,2) 934 4350 973 4351 3677 972
-CONVEX 1755 GT_PK(2,2) 934 4352 935 4348 4345 895
-CONVEX 1756 GT_PK(2,2) 934 4352 935 4350 4342 973
-CONVEX 1757 GT_PK(2,2) 934 4349 894 4353 3838 933
-CONVEX 1758 GT_PK(2,2) 934 4351 972 4353 2750 933
-CONVEX 1759 GT_PK(2,2) 1012 4354 1051 4355 2788 1013
-CONVEX 1760 GT_PK(2,2) 1012 4356 974 4355 2780 1013
-CONVEX 1761 GT_PK(2,2) 1012 4357 973 4356 4344 974
-CONVEX 1762 GT_PK(2,2) 1012 4357 973 4358 3678 1011
-CONVEX 1763 GT_PK(2,2) 1012 4359 1050 4358 3682 1011
-CONVEX 1764 GT_PK(2,2) 1012 4359 1050 4354 4360 1051
-CONVEX 1765 GT_PK(2,2) 1159 4361 1160 4362 3683 1124
-CONVEX 1766 GT_PK(2,2) 1159 4363 1193 4364 1741 1158
-CONVEX 1767 GT_PK(2,2) 1159 4365 1194 4363 4366 1193
-CONVEX 1768 GT_PK(2,2) 1159 4361 1160 4365 3687 1194
-CONVEX 1769 GT_PK(2,2) 1159 4367 1123 4364 3675 1158
-CONVEX 1770 GT_PK(2,2) 1159 4362 1124 4367 2790 1123
-CONVEX 1771 GT_PK(2,2) 1088 4368 1124 4369 3685 1125
-CONVEX 1772 GT_PK(2,2) 1088 4370 1089 4369 4371 1125
-CONVEX 1773 GT_PK(2,2) 1088 4368 1124 4372 2791 1087
-CONVEX 1774 GT_PK(2,2) 1088 4370 1089 4373 3689 1051
-CONVEX 1775 GT_PK(2,2) 1088 4374 1050 4372 3680 1087
-CONVEX 1776 GT_PK(2,2) 1088 4374 1050 4373 4360 1051
-CONVEX 1777 GT_PK(2,2) 1128 4375 1127 4376 4377 1163
-CONVEX 1778 GT_PK(2,2) 1128 4378 1092 4379 3308 1129
-CONVEX 1779 GT_PK(2,2) 1128 4380 1091 4378 4125 1092
-CONVEX 1780 GT_PK(2,2) 1128 4380 1091 4375 4126 1127
-CONVEX 1781 GT_PK(2,2) 1128 4381 1164 4379 1542 1129
-CONVEX 1782 GT_PK(2,2) 1128 4376 1163 4381 2793 1164
-CONVEX 1783 GT_PK(2,2) 1161 4382 1160 4383 3684 1125
-CONVEX 1784 GT_PK(2,2) 1161 4384 1195 4385 3185 1196
-CONVEX 1785 GT_PK(2,2) 1161 4382 1160 4384 3686 1195
-CONVEX 1786 GT_PK(2,2) 1162 4386 1163 4387 2795 1197
-CONVEX 1787 GT_PK(2,2) 1162 4388 1127 4386 4377 1163
-CONVEX 1788 GT_PK(2,2) 1162 4387 1197 4389 1964 1196
-CONVEX 1789 GT_PK(2,2) 1162 4390 1161 4389 4385 1196
-CONVEX 1790 GT_PK(2,2) 271 4391 305 4392 2917 306
-CONVEX 1791 GT_PK(2,2) 271 4393 272 4392 3702 306
-CONVEX 1792 GT_PK(2,2) 240 4394 241 4395 1972 274
-CONVEX 1793 GT_PK(2,2) 273 4396 307 4397 2009 308
-CONVEX 1794 GT_PK(2,2) 273 4398 272 4396 3701 307
-CONVEX 1795 GT_PK(2,2) 273 4399 274 4397 2897 308
-CONVEX 1796 GT_PK(2,2) 273 4400 240 4399 4395 274
-CONVEX 1797 GT_PK(2,2) 67 4401 91 4402 3705 90
-CONVEX 1798 GT_PK(2,2) 67 4403 66 4402 2828 90
-CONVEX 1799 GT_PK(2,2) 67 4403 66 4404 1978 45
-CONVEX 1800 GT_PK(2,2) 67 4405 46 4404 3709 45
-CONVEX 1801 GT_PK(2,2) 47 4406 28 4407 2821 29
-CONVEX 1802 GT_PK(2,2) 47 4408 46 4406 3710 28
-CONVEX 1803 GT_PK(2,2) 47 4407 29 4409 2820 48
-CONVEX 1804 GT_PK(2,2) 47 4410 69 4409 4411 48
-CONVEX 1805 GT_PK(2,2) 567 4412 528 4413 2841 527
-CONVEX 1806 GT_PK(2,2) 567 4414 568 4412 3722 528
-CONVEX 1807 GT_PK(2,2) 607 4415 608 4416 2944 647
-CONVEX 1808 GT_PK(2,2) 607 4417 568 4415 3728 608
-CONVEX 1809 GT_PK(2,2) 607 4418 567 4417 4414 568
-CONVEX 1810 GT_PK(2,2) 607 4419 646 4416 3695 647
-CONVEX 1811 GT_PK(2,2) 607 4419 646 4420 2815 606
-CONVEX 1812 GT_PK(2,2) 607 4418 567 4420 4421 606
-CONVEX 1813 GT_PK(2,2) 386 4422 349 4423 3748 385
-CONVEX 1814 GT_PK(2,2) 386 4423 385 4424 2856 423
-CONVEX 1815 GT_PK(2,2) 386 4425 350 4426 4146 387
-CONVEX 1816 GT_PK(2,2) 386 4425 350 4422 4145 349
-CONVEX 1817 GT_PK(2,2) 496 4427 535 4428 3777 497
-CONVEX 1818 GT_PK(2,2) 496 4429 457 4430 2885 495
-CONVEX 1819 GT_PK(2,2) 496 4431 458 4428 3785 497
-CONVEX 1820 GT_PK(2,2) 496 4431 458 4429 3787 457
-CONVEX 1821 GT_PK(2,2) 534 4432 535 4433 3774 574
-CONVEX 1822 GT_PK(2,2) 534 4434 573 4435 3809 533
-CONVEX 1823 GT_PK(2,2) 534 4434 573 4433 3807 574
-CONVEX 1824 GT_PK(2,2) 534 4436 495 4435 2882 533
-CONVEX 1825 GT_PK(2,2) 534 4437 496 4436 4430 495
-CONVEX 1826 GT_PK(2,2) 534 4437 496 4432 4427 535
-CONVEX 1827 GT_PK(2,2) 803 4438 763 4439 3805 764
-CONVEX 1828 GT_PK(2,2) 803 4438 763 4440 3801 802
-CONVEX 1829 GT_PK(2,2) 804 4441 843 4442 3799 844
-CONVEX 1830 GT_PK(2,2) 804 4443 765 4444 2926 805
-CONVEX 1831 GT_PK(2,2) 804 4442 844 4444 2934 805
-CONVEX 1832 GT_PK(2,2) 804 4443 765 4445 2931 764
-CONVEX 1833 GT_PK(2,2) 804 4446 803 4445 4439 764
-CONVEX 1834 GT_PK(2,2) 804 4446 803 4441 4447 843
-CONVEX 1835 GT_PK(2,2) 693 4448 692 4449 4450 732
-CONVEX 1836 GT_PK(2,2) 693 4451 733 4449 4452 732
-CONVEX 1837 GT_PK(2,2) 693 4451 733 4453 4454 694
-CONVEX 1838 GT_PK(2,2) 693 4448 692 4455 3815 653
-CONVEX 1839 GT_PK(2,2) 731 4456 692 4457 4450 732
-CONVEX 1840 GT_PK(2,2) 731 4458 771 4457 4459 732
-CONVEX 1841 GT_PK(2,2) 731 4460 691 4461 2981 730
-CONVEX 1842 GT_PK(2,2) 731 4456 692 4460 3816 691
-CONVEX 1843 GT_PK(2,2) 731 4462 770 4461 3852 730
-CONVEX 1844 GT_PK(2,2) 731 4462 770 4458 4463 771
-CONVEX 1845 GT_PK(2,2) 892 4464 932 4465 1948 931
-CONVEX 1846 GT_PK(2,2) 892 4466 891 4465 2988 931
-CONVEX 1847 GT_PK(2,2) 892 4467 893 4464 3840 932
-CONVEX 1848 GT_PK(2,2) 892 4467 893 4468 3841 853
-CONVEX 1849 GT_PK(2,2) 816 4469 815 4470 3835 855
-CONVEX 1850 GT_PK(2,2) 816 4471 856 4470 3329 855
-CONVEX 1851 GT_PK(2,2) 816 4472 777 4473 3325 817
-CONVEX 1852 GT_PK(2,2) 816 4471 856 4473 3336 817
-CONVEX 1853 GT_PK(2,2) 814 4474 815 4475 3834 854
-CONVEX 1854 GT_PK(2,2) 814 4476 853 4475 3842 854
-CONVEX 1855 GT_PK(2,2) 814 4477 774 4478 2997 813
-CONVEX 1856 GT_PK(2,2) 814 4476 853 4478 4479 813
-CONVEX 1857 GT_PK(2,2) 772 4480 812 4481 3844 773
-CONVEX 1858 GT_PK(2,2) 772 4482 733 4481 4483 773
-CONVEX 1859 GT_PK(2,2) 772 4482 733 4484 4452 732
-CONVEX 1860 GT_PK(2,2) 772 4485 771 4484 4459 732
-CONVEX 1861 GT_PK(2,2) 849 4486 848 4487 3813 888
-CONVEX 1862 GT_PK(2,2) 849 4488 889 4487 3845 888
-CONVEX 1863 GT_PK(2,2) 734 4489 695 4490 3848 694
-CONVEX 1864 GT_PK(2,2) 734 4491 774 4492 2998 773
-CONVEX 1865 GT_PK(2,2) 734 4491 774 4493 4494 735
-CONVEX 1866 GT_PK(2,2) 734 4489 695 4493 4495 735
-CONVEX 1867 GT_PK(2,2) 734 4496 733 4492 4483 773
-CONVEX 1868 GT_PK(2,2) 734 4496 733 4490 4454 694
-CONVEX 1869 GT_PK(2,2) 471 4497 510 4498 3005 509
-CONVEX 1870 GT_PK(2,2) 471 4499 472 4497 4173 510
-CONVEX 1871 GT_PK(2,2) 435 4500 436 4501 3033 397
-CONVEX 1872 GT_PK(2,2) 435 4501 397 4502 2078 396
-CONVEX 1873 GT_PK(2,2) 435 4503 434 4502 3861 396
-CONVEX 1874 GT_PK(2,2) 435 4503 434 4504 3864 473
-CONVEX 1875 GT_PK(2,2) 604 4505 643 4506 3873 603
-CONVEX 1876 GT_PK(2,2) 604 4505 643 4507 3875 644
-CONVEX 1877 GT_PK(2,2) 487 4508 526 4509 3885 525
-CONVEX 1878 GT_PK(2,2) 487 4510 488 4508 3888 526
-CONVEX 1879 GT_PK(2,2) 487 4511 486 4509 3891 525
-CONVEX 1880 GT_PK(2,2) 485 4512 524 4513 3024 523
-CONVEX 1881 GT_PK(2,2) 485 4514 486 4512 3890 524
-CONVEX 1882 GT_PK(2,2) 485 4515 484 4513 3022 523
-CONVEX 1883 GT_PK(2,2) 485 4514 486 4516 4517 447
-CONVEX 1884 GT_PK(2,2) 481 4518 482 4519 3027 520
-CONVEX 1885 GT_PK(2,2) 481 4520 519 4519 3906 520
-CONVEX 1886 GT_PK(2,2) 481 4518 482 4521 3895 443
-CONVEX 1887 GT_PK(2,2) 481 4520 519 4522 3909 480
-CONVEX 1888 GT_PK(2,2) 481 4523 442 4521 3868 443
-CONVEX 1889 GT_PK(2,2) 481 4523 442 4522 4524 480
-CONVEX 1890 GT_PK(2,2) 324 4525 288 4526 3915 289
-CONVEX 1891 GT_PK(2,2) 324 4527 325 4526 2141 289
-CONVEX 1892 GT_PK(2,2) 324 4528 323 4529 3049 360
-CONVEX 1893 GT_PK(2,2) 324 4525 288 4528 3913 323
-CONVEX 1894 GT_PK(2,2) 324 4530 361 4529 2068 360
-CONVEX 1895 GT_PK(2,2) 324 4530 361 4527 2069 325
-CONVEX 1896 GT_PK(2,2) 179 4531 180 4532 3061 211
-CONVEX 1897 GT_PK(2,2) 179 4532 211 4533 4534 210
-CONVEX 1898 GT_PK(2,2) 179 4535 178 4533 4536 210
-CONVEX 1899 GT_PK(2,2) 179 4535 178 4537 4538 149
-CONVEX 1900 GT_PK(2,2) 179 4539 150 4537 3924 149
-CONVEX 1901 GT_PK(2,2) 179 4539 150 4531 3921 180
-CONVEX 1902 GT_PK(2,2) 243 4540 211 4541 4534 210
-CONVEX 1903 GT_PK(2,2) 243 4542 244 4540 3918 211
-CONVEX 1904 GT_PK(2,2) 243 4541 210 4543 4544 242
-CONVEX 1905 GT_PK(2,2) 243 4542 244 4545 3920 277
-CONVEX 1906 GT_PK(2,2) 243 4546 276 4543 1985 242
-CONVEX 1907 GT_PK(2,2) 243 4545 277 4546 3751 276
-CONVEX 1908 GT_PK(2,2) 123 4547 150 4548 3923 122
-CONVEX 1909 GT_PK(2,2) 123 4549 97 4548 3930 122
-CONVEX 1910 GT_PK(2,2) 123 4550 151 4551 2181 124
-CONVEX 1911 GT_PK(2,2) 123 4547 150 4550 3922 151
-CONVEX 1912 GT_PK(2,2) 123 4551 124 4552 1668 98
-CONVEX 1913 GT_PK(2,2) 123 4549 97 4552 3935 98
-CONVEX 1914 GT_PK(2,2) 95 4553 121 4554 4555 120
-CONVEX 1915 GT_PK(2,2) 95 4553 121 4556 3927 96
-CONVEX 1916 GT_PK(2,2) 70 4557 69 4558 4411 48
-CONVEX 1917 GT_PK(2,2) 70 4559 93 4557 3936 69
-CONVEX 1918 GT_PK(2,2) 50 4560 32 4561 4562 31
-CONVEX 1919 GT_PK(2,2) 50 4563 51 4560 3941 32
-CONVEX 1920 GT_PK(2,2) 368 4564 367 4565 3012 405
-CONVEX 1921 GT_PK(2,2) 368 4566 331 4564 3952 367
-CONVEX 1922 GT_PK(2,2) 446 4567 484 4568 3902 445
-CONVEX 1923 GT_PK(2,2) 446 4569 485 4570 4516 447
-CONVEX 1924 GT_PK(2,2) 446 4569 485 4567 4515 484
-CONVEX 1925 GT_PK(2,2) 267 4571 302 4572 2230 268
-CONVEX 1926 GT_PK(2,2) 267 4572 268 4573 2889 234
-CONVEX 1927 GT_PK(2,2) 267 4574 233 4573 2241 234
-CONVEX 1928 GT_PK(2,2) 264 4575 263 4576 4577 298
-CONVEX 1929 GT_PK(2,2) 133 4578 134 4579 3956 106
-CONVEX 1930 GT_PK(2,2) 133 4580 105 4581 2221 132
-CONVEX 1931 GT_PK(2,2) 133 4580 105 4579 2219 106
-CONVEX 1932 GT_PK(2,2) 133 4582 162 4581 2229 132
-CONVEX 1933 GT_PK(2,2) 133 4583 163 4582 4584 162
-CONVEX 1934 GT_PK(2,2) 133 4578 134 4583 3957 163
-CONVEX 1935 GT_PK(2,2) 135 4585 108 4586 3124 107
-CONVEX 1936 GT_PK(2,2) 135 4587 134 4586 3955 107
-CONVEX 1937 GT_PK(2,2) 135 4587 134 4588 3958 164
-CONVEX 1938 GT_PK(2,2) 135 4589 165 4588 3992 164
-CONVEX 1939 GT_PK(2,2) 194 4590 226 4591 3945 193
-CONVEX 1940 GT_PK(2,2) 194 4592 195 4593 3963 163
-CONVEX 1941 GT_PK(2,2) 194 4594 227 4590 4595 226
-CONVEX 1942 GT_PK(2,2) 194 4594 227 4592 4596 195
-CONVEX 1943 GT_PK(2,2) 194 4593 163 4597 4584 162
-CONVEX 1944 GT_PK(2,2) 194 4591 193 4597 3091 162
-CONVEX 1945 GT_PK(2,2) 375 4598 376 4599 2907 413
-CONVEX 1946 GT_PK(2,2) 375 4600 374 4601 4602 338
-CONVEX 1947 GT_PK(2,2) 375 4598 376 4603 2922 339
-CONVEX 1948 GT_PK(2,2) 375 4601 338 4603 3093 339
-CONVEX 1949 GT_PK(2,2) 199 4604 232 4605 3964 200
-CONVEX 1950 GT_PK(2,2) 199 4606 167 4607 4608 198
-CONVEX 1951 GT_PK(2,2) 199 4607 198 4609 4610 231
-CONVEX 1952 GT_PK(2,2) 199 4604 232 4609 4611 231
-CONVEX 1953 GT_PK(2,2) 199 4605 200 4612 3101 168
-CONVEX 1954 GT_PK(2,2) 199 4606 167 4612 4613 168
-CONVEX 1955 GT_PK(2,2) 138 4614 111 4615 3966 139
-CONVEX 1956 GT_PK(2,2) 138 4615 139 4616 2244 168
-CONVEX 1957 GT_PK(2,2) 138 4617 167 4618 4619 137
-CONVEX 1958 GT_PK(2,2) 138 4617 167 4616 4613 168
-CONVEX 1959 GT_PK(2,2) 110 4620 138 4621 4614 111
-CONVEX 1960 GT_PK(2,2) 110 4622 109 4623 4624 137
-CONVEX 1961 GT_PK(2,2) 110 4620 138 4623 4618 137
-CONVEX 1962 GT_PK(2,2) 85 4625 111 4626 3968 86
-CONVEX 1963 GT_PK(2,2) 85 4627 62 4628 3975 61
-CONVEX 1964 GT_PK(2,2) 85 4627 62 4626 3977 86
-CONVEX 1965 GT_PK(2,2) 85 4629 110 4625 4621 111
-CONVEX 1966 GT_PK(2,2) 60 4630 83 4631 3986 59
-CONVEX 1967 GT_PK(2,2) 60 4632 38 4633 3982 39
-CONVEX 1968 GT_PK(2,2) 60 4632 38 4631 3979 59
-CONVEX 1969 GT_PK(2,2) 60 4633 39 4634 3120 61
-CONVEX 1970 GT_PK(2,2) 136 4635 109 4636 4624 137
-CONVEX 1971 GT_PK(2,2) 136 4637 108 4635 3990 109
-CONVEX 1972 GT_PK(2,2) 136 4638 135 4637 4585 108
-CONVEX 1973 GT_PK(2,2) 136 4638 135 4639 4589 165
-CONVEX 1974 GT_PK(2,2) 197 4640 165 4641 3991 196
-CONVEX 1975 GT_PK(2,2) 1389 4642 1388 4643 4003 1365
-CONVEX 1976 GT_PK(2,2) 1389 4644 1411 4645 3190 1390
-CONVEX 1977 GT_PK(2,2) 1389 4644 1411 4646 3194 1410
-CONVEX 1978 GT_PK(2,2) 1389 4642 1388 4646 4002 1410
-CONVEX 1979 GT_PK(2,2) 1389 4647 1366 4645 3230 1390
-CONVEX 1980 GT_PK(2,2) 1389 4647 1366 4643 4074 1365
-CONVEX 1981 GT_PK(2,2) 1110 4648 1074 4649 4650 1073
-CONVEX 1982 GT_PK(2,2) 1110 4651 1109 4649 4245 1073
-CONVEX 1983 GT_PK(2,2) 1110 4651 1109 4652 4011 1145
-CONVEX 1984 GT_PK(2,2) 1110 4653 1146 4652 4302 1145
-CONVEX 1985 GT_PK(2,2) 840 4654 800 4655 4153 801
-CONVEX 1986 GT_PK(2,2) 840 4654 800 4656 4151 839
-CONVEX 1987 GT_PK(2,2) 842 4657 803 4658 4440 802
-CONVEX 1988 GT_PK(2,2) 842 4657 803 4659 4447 843
-CONVEX 1989 GT_PK(2,2) 999 4660 1038 4661 3135 1000
-CONVEX 1990 GT_PK(2,2) 999 4662 1037 4660 4014 1038
-CONVEX 1991 GT_PK(2,2) 1036 4663 1037 4664 4016 1074
-CONVEX 1992 GT_PK(2,2) 1036 4665 1073 4666 4242 1035
-CONVEX 1993 GT_PK(2,2) 1036 4664 1074 4665 4650 1073
-CONVEX 1994 GT_PK(2,2) 1225 4667 1226 4668 4044 1258
-CONVEX 1995 GT_PK(2,2) 1225 4669 1191 4670 4035 1192
-CONVEX 1996 GT_PK(2,2) 1225 4667 1226 4670 4047 1192
-CONVEX 1997 GT_PK(2,2) 1287 4671 1317 4672 2345 1316
-CONVEX 1998 GT_PK(2,2) 1287 4673 1286 4672 4080 1316
-CONVEX 1999 GT_PK(2,2) 1255 4674 1254 4675 3158 1286
-CONVEX 2000 GT_PK(2,2) 1255 4676 1287 4675 4673 1286
-CONVEX 2001 GT_PK(2,2) 1255 4676 1287 4677 4678 1256
-CONVEX 2002 GT_PK(2,2) 1255 4674 1254 4679 3162 1222
-CONVEX 2003 GT_PK(2,2) 1318 4680 1289 4681 4682 1319
-CONVEX 2004 GT_PK(2,2) 1318 4683 1317 4684 2346 1345
-CONVEX 2005 GT_PK(2,2) 1318 4684 1345 4685 2323 1346
-CONVEX 2006 GT_PK(2,2) 1318 4681 1319 4685 3175 1346
-CONVEX 2007 GT_PK(2,2) 1288 4686 1287 4687 4678 1256
-CONVEX 2008 GT_PK(2,2) 1288 4686 1287 4688 4671 1317
-CONVEX 2009 GT_PK(2,2) 1288 4689 1318 4688 4683 1317
-CONVEX 2010 GT_PK(2,2) 1288 4689 1318 4690 4680 1289
-CONVEX 2011 GT_PK(2,2) 1290 4691 1289 4692 4682 1319
-CONVEX 2012 GT_PK(2,2) 1290 4693 1291 4694 3173 1320
-CONVEX 2013 GT_PK(2,2) 1290 4692 1319 4694 3176 1320
-CONVEX 2014 GT_PK(2,2) 1290 4691 1289 4695 4696 1258
-CONVEX 2015 GT_PK(2,2) 1290 4697 1259 4693 4052 1291
-CONVEX 2016 GT_PK(2,2) 1290 4697 1259 4695 4045 1258
-CONVEX 2017 GT_PK(2,2) 1322 4698 1292 4699 4040 1293
-CONVEX 2018 GT_PK(2,2) 1322 4700 1349 4701 4032 1350
-CONVEX 2019 GT_PK(2,2) 1322 4700 1349 4702 4031 1321
-CONVEX 2020 GT_PK(2,2) 1322 4698 1292 4702 4041 1321
-CONVEX 2021 GT_PK(2,2) 1322 4701 1350 4703 4704 1323
-CONVEX 2022 GT_PK(2,2) 1322 4699 1293 4703 3167 1323
-CONVEX 2023 GT_PK(2,2) 1228 4705 1195 4706 3688 1194
-CONVEX 2024 GT_PK(2,2) 1228 4705 1195 4707 3186 1229
-CONVEX 2025 GT_PK(2,2) 1228 4708 1261 4707 3188 1229
-CONVEX 2026 GT_PK(2,2) 1228 4709 1260 4708 4049 1261
-CONVEX 2027 GT_PK(2,2) 1314 4710 1315 4711 4075 1342
-CONVEX 2028 GT_PK(2,2) 1314 4712 1313 4713 4063 1284
-CONVEX 2029 GT_PK(2,2) 1314 4713 1284 4714 2400 1285
-CONVEX 2030 GT_PK(2,2) 1314 4710 1315 4714 4078 1285
-CONVEX 2031 GT_PK(2,2) 1314 4712 1313 4715 4071 1341
-CONVEX 2032 GT_PK(2,2) 1314 4711 1342 4715 3236 1341
-CONVEX 2033 GT_PK(2,2) 461 4716 460 4717 3765 422
-CONVEX 2034 GT_PK(2,2) 461 4718 499 4716 4099 460
-CONVEX 2035 GT_PK(2,2) 461 4719 423 4717 2858 422
-CONVEX 2036 GT_PK(2,2) 620 4720 660 4721 4111 621
-CONVEX 2037 GT_PK(2,2) 620 4720 660 4722 4723 659
-CONVEX 2038 GT_PK(2,2) 620 4724 619 4722 4725 659
-CONVEX 2039 GT_PK(2,2) 699 4726 739 4727 3270 700
-CONVEX 2040 GT_PK(2,2) 699 4728 660 4727 4109 700
-CONVEX 2041 GT_PK(2,2) 699 4728 660 4729 4723 659
-CONVEX 2042 GT_PK(2,2) 699 4726 739 4730 2443 738
-CONVEX 2043 GT_PK(2,2) 698 4731 699 4732 4730 738
-CONVEX 2044 GT_PK(2,2) 698 4731 699 4733 4729 659
-CONVEX 2045 GT_PK(2,2) 776 4734 816 4735 4472 777
-CONVEX 2046 GT_PK(2,2) 776 4734 816 4736 4469 815
-CONVEX 2047 GT_PK(2,2) 464 4737 463 4738 4739 425
-CONVEX 2048 GT_PK(2,2) 464 4737 463 4740 4741 502
-CONVEX 2049 GT_PK(2,2) 464 4742 503 4743 4096 465
-CONVEX 2050 GT_PK(2,2) 464 4742 503 4740 4744 502
-CONVEX 2051 GT_PK(2,2) 426 4745 425 4746 4135 388
-CONVEX 2052 GT_PK(2,2) 426 4747 389 4748 4137 427
-CONVEX 2053 GT_PK(2,2) 426 4747 389 4746 4139 388
-CONVEX 2054 GT_PK(2,2) 426 4749 464 4745 4738 425
-CONVEX 2055 GT_PK(2,2) 426 4748 427 4750 4107 465
-CONVEX 2056 GT_PK(2,2) 426 4749 464 4750 4743 465
-CONVEX 2057 GT_PK(2,2) 917 4751 877 4752 4148 878
-CONVEX 2058 GT_PK(2,2) 917 4751 877 4753 4754 916
-CONVEX 2059 GT_PK(2,2) 917 4755 956 4756 4252 955
-CONVEX 2060 GT_PK(2,2) 917 4753 916 4756 4259 955
-CONVEX 2061 GT_PK(2,2) 876 4757 877 4758 4754 916
-CONVEX 2062 GT_PK(2,2) 876 4758 916 4759 4260 915
-CONVEX 2063 GT_PK(2,2) 876 4760 837 4761 3360 836
-CONVEX 2064 GT_PK(2,2) 876 4757 877 4760 4149 837
-CONVEX 2065 GT_PK(2,2) 876 4762 875 4761 2638 836
-CONVEX 2066 GT_PK(2,2) 876 4762 875 4759 2640 915
-CONVEX 2067 GT_PK(2,2) 441 4763 479 4764 4165 440
-CONVEX 2068 GT_PK(2,2) 441 4765 442 4766 3869 403
-CONVEX 2069 GT_PK(2,2) 441 4765 442 4767 4524 480
-CONVEX 2070 GT_PK(2,2) 441 4763 479 4767 4166 480
-CONVEX 2071 GT_PK(2,2) 441 4768 402 4766 2089 403
-CONVEX 2072 GT_PK(2,2) 441 4764 440 4768 3039 402
-CONVEX 2073 GT_PK(2,2) 555 4769 516 4770 2529 556
-CONVEX 2074 GT_PK(2,2) 555 4771 515 4769 4167 516
-CONVEX 2075 GT_PK(2,2) 476 4772 475 4773 4170 437
-CONVEX 2076 GT_PK(2,2) 476 4774 515 4775 4168 477
-CONVEX 2077 GT_PK(2,2) 476 4776 438 4775 2100 477
-CONVEX 2078 GT_PK(2,2) 476 4776 438 4773 2101 437
-CONVEX 2079 GT_PK(2,2) 512 4777 511 4778 4174 473
-CONVEX 2080 GT_PK(2,2) 631 4779 671 4780 4781 632
-CONVEX 2081 GT_PK(2,2) 631 4782 592 4780 4186 632
-CONVEX 2082 GT_PK(2,2) 631 4779 671 4783 3378 670
-CONVEX 2083 GT_PK(2,2) 674 4784 714 4785 2537 675
-CONVEX 2084 GT_PK(2,2) 674 4786 635 4785 4180 675
-CONVEX 2085 GT_PK(2,2) 674 4784 714 4787 3384 713
-CONVEX 2086 GT_PK(2,2) 674 4786 635 4788 4789 634
-CONVEX 2087 GT_PK(2,2) 674 4790 673 4787 4182 713
-CONVEX 2088 GT_PK(2,2) 674 4790 673 4788 4791 634
-CONVEX 2089 GT_PK(2,2) 672 4792 671 4793 3380 711
-CONVEX 2090 GT_PK(2,2) 672 4792 671 4794 4781 632
-CONVEX 2091 GT_PK(2,2) 672 4793 711 4795 2589 712
-CONVEX 2092 GT_PK(2,2) 672 4796 673 4795 4183 712
-CONVEX 2093 GT_PK(2,2) 633 4797 673 4798 4791 634
-CONVEX 2094 GT_PK(2,2) 633 4799 672 4797 4796 673
-CONVEX 2095 GT_PK(2,2) 633 4800 593 4801 4185 632
-CONVEX 2096 GT_PK(2,2) 633 4799 672 4801 4794 632
-CONVEX 2097 GT_PK(2,2) 944 4802 905 4803 4196 943
-CONVEX 2098 GT_PK(2,2) 944 4804 982 4805 2543 981
-CONVEX 2099 GT_PK(2,2) 944 4803 943 4805 4806 981
-CONVEX 2100 GT_PK(2,2) 944 4804 982 4807 2539 983
-CONVEX 2101 GT_PK(2,2) 944 4808 945 4807 3456 983
-CONVEX 2102 GT_PK(2,2) 944 4808 945 4809 4233 906
-CONVEX 2103 GT_PK(2,2) 944 4802 905 4809 4205 906
-CONVEX 2104 GT_PK(2,2) 871 4810 832 4811 4210 831
-CONVEX 2105 GT_PK(2,2) 871 4812 911 4813 2610 910
-CONVEX 2106 GT_PK(2,2) 871 4814 872 4812 2625 911
-CONVEX 2107 GT_PK(2,2) 871 4810 832 4814 4214 872
-CONVEX 2108 GT_PK(2,2) 870 4815 830 4816 4215 831
-CONVEX 2109 GT_PK(2,2) 870 4817 909 4818 1876 910
-CONVEX 2110 GT_PK(2,2) 870 4819 869 4817 4820 909
-CONVEX 2111 GT_PK(2,2) 870 4819 869 4815 4821 830
-CONVEX 2112 GT_PK(2,2) 870 4822 871 4818 4813 910
-CONVEX 2113 GT_PK(2,2) 870 4822 871 4816 4811 831
-CONVEX 2114 GT_PK(2,2) 790 4823 751 4824 3438 791
-CONVEX 2115 GT_PK(2,2) 790 4825 830 4824 4216 791
-CONVEX 2116 GT_PK(2,2) 987 4826 986 4827 4223 1025
-CONVEX 2117 GT_PK(2,2) 987 4828 949 4829 2605 988
-CONVEX 2118 GT_PK(2,2) 987 4828 949 4830 2611 948
-CONVEX 2119 GT_PK(2,2) 987 4826 986 4830 4227 948
-CONVEX 2120 GT_PK(2,2) 987 4831 1026 4829 3446 988
-CONVEX 2121 GT_PK(2,2) 987 4827 1025 4831 3450 1026
-CONVEX 2122 GT_PK(2,2) 908 4832 907 4833 4230 868
-CONVEX 2123 GT_PK(2,2) 908 4834 869 4833 4835 868
-CONVEX 2124 GT_PK(2,2) 908 4836 947 4837 3458 909
-CONVEX 2125 GT_PK(2,2) 908 4834 869 4837 4820 909
-CONVEX 2126 GT_PK(2,2) 1034 4838 1072 4839 4241 1035
-CONVEX 2127 GT_PK(2,2) 1071 4840 1033 4841 3464 1070
-CONVEX 2128 GT_PK(2,2) 1071 4842 1072 4843 4244 1108
-CONVEX 2129 GT_PK(2,2) 1071 4844 1034 4840 4845 1033
-CONVEX 2130 GT_PK(2,2) 1071 4844 1034 4842 4838 1072
-CONVEX 2131 GT_PK(2,2) 1142 4846 1106 4847 4848 1141
-CONVEX 2132 GT_PK(2,2) 1104 4849 1103 4850 3426 1067
-CONVEX 2133 GT_PK(2,2) 1104 4851 1139 4849 3497 1103
-CONVEX 2134 GT_PK(2,2) 1104 4851 1139 4852 3500 1140
-CONVEX 2135 GT_PK(2,2) 1209 4853 1210 4854 4269 1242
-CONVEX 2136 GT_PK(2,2) 1209 4855 1241 4856 3628 1208
-CONVEX 2137 GT_PK(2,2) 1209 4855 1241 4854 3629 1242
-CONVEX 2138 GT_PK(2,2) 1382 4857 1404 4858 2676 1383
-CONVEX 2139 GT_PK(2,2) 1382 4859 1403 4857 4276 1404
-CONVEX 2140 GT_PK(2,2) 1382 4859 1403 4860 4279 1381
-CONVEX 2141 GT_PK(2,2) 1421 4861 1403 4862 4277 1422
-CONVEX 2142 GT_PK(2,2) 1421 4863 1436 4864 4865 1435
-CONVEX 2143 GT_PK(2,2) 1421 4863 1436 4862 3536 1422
-CONVEX 2144 GT_PK(2,2) 1421 4866 1402 4864 4867 1435
-CONVEX 2145 GT_PK(2,2) 1421 4861 1403 4866 4278 1402
-CONVEX 2146 GT_PK(2,2) 1332 4868 1305 4869 4325 1304
-CONVEX 2147 GT_PK(2,2) 1332 4870 1333 4868 4283 1305
-CONVEX 2148 GT_PK(2,2) 1377 4871 1398 4872 4296 1353
-CONVEX 2149 GT_PK(2,2) 1328 4873 1353 4874 4312 1327
-CONVEX 2150 GT_PK(2,2) 1302 4875 1273 4876 3623 1303
-CONVEX 2151 GT_PK(2,2) 1302 4875 1273 4877 3627 1272
-CONVEX 2152 GT_PK(2,2) 1420 4878 1402 4879 4867 1435
-CONVEX 2153 GT_PK(2,2) 1048 4880 1086 4881 4337 1049
-CONVEX 2154 GT_PK(2,2) 1048 4882 1010 4883 2777 1009
-CONVEX 2155 GT_PK(2,2) 1048 4882 1010 4881 2771 1049
-CONVEX 2156 GT_PK(2,2) 1085 4884 1086 4885 4336 1122
-CONVEX 2157 GT_PK(2,2) 1085 4886 1121 4885 4340 1122
-CONVEX 2158 GT_PK(2,2) 1085 4887 1048 4884 4880 1086
-CONVEX 2159 GT_PK(2,2) 1126 4888 1127 4889 4128 1090
-CONVEX 2160 GT_PK(2,2) 1126 4890 1162 4888 4388 1127
-CONVEX 2161 GT_PK(2,2) 1126 4891 1089 4892 4371 1125
-CONVEX 2162 GT_PK(2,2) 1126 4891 1089 4889 3691 1090
-CONVEX 2163 GT_PK(2,2) 1126 4893 1161 4892 4383 1125
-CONVEX 2164 GT_PK(2,2) 1126 4890 1162 4893 4390 1161
-CONVEX 2165 GT_PK(2,2) 238 4894 271 4895 4393 272
-CONVEX 2166 GT_PK(2,2) 236 4896 235 4897 2891 203
-CONVEX 2167 GT_PK(2,2) 236 4898 204 4897 4899 203
-CONVEX 2168 GT_PK(2,2) 270 4900 305 4901 2925 304
-CONVEX 2169 GT_PK(2,2) 270 4902 271 4900 4391 305
-CONVEX 2170 GT_PK(2,2) 172 4903 204 4904 4899 203
-CONVEX 2171 GT_PK(2,2) 172 4903 204 4905 4906 173
-CONVEX 2172 GT_PK(2,2) 68 4907 47 4908 4410 69
-CONVEX 2173 GT_PK(2,2) 68 4909 91 4910 4911 92
-CONVEX 2174 GT_PK(2,2) 68 4908 69 4910 3938 92
-CONVEX 2175 GT_PK(2,2) 68 4912 67 4909 4401 91
-CONVEX 2176 GT_PK(2,2) 68 4912 67 4913 4405 46
-CONVEX 2177 GT_PK(2,2) 68 4907 47 4913 4408 46
-CONVEX 2178 GT_PK(2,2) 566 4914 567 4915 4421 606
-CONVEX 2179 GT_PK(2,2) 566 4916 565 4917 3883 526
-CONVEX 2180 GT_PK(2,2) 566 4917 526 4918 3889 527
-CONVEX 2181 GT_PK(2,2) 566 4914 567 4918 4413 527
-CONVEX 2182 GT_PK(2,2) 424 4919 425 4920 4136 387
-CONVEX 2183 GT_PK(2,2) 424 4921 386 4920 4426 387
-CONVEX 2184 GT_PK(2,2) 424 4921 386 4922 4424 423
-CONVEX 2185 GT_PK(2,2) 424 4923 463 4919 4739 425
-CONVEX 2186 GT_PK(2,2) 654 4924 693 4925 4453 694
-CONVEX 2187 GT_PK(2,2) 654 4925 694 4926 3850 655
-CONVEX 2188 GT_PK(2,2) 654 4927 615 4926 4928 655
-CONVEX 2189 GT_PK(2,2) 654 4927 615 4929 3853 614
-CONVEX 2190 GT_PK(2,2) 654 4929 614 4930 2995 653
-CONVEX 2191 GT_PK(2,2) 654 4924 693 4930 4455 653
-CONVEX 2192 GT_PK(2,2) 852 4931 892 4932 4466 891
-CONVEX 2193 GT_PK(2,2) 852 4933 812 4934 3843 813
-CONVEX 2194 GT_PK(2,2) 852 4935 853 4934 4479 813
-CONVEX 2195 GT_PK(2,2) 852 4931 892 4935 4468 853
-CONVEX 2196 GT_PK(2,2) 852 4936 851 4932 4937 891
-CONVEX 2197 GT_PK(2,2) 852 4936 851 4933 4938 812
-CONVEX 2198 GT_PK(2,2) 775 4939 814 4940 4474 815
-CONVEX 2199 GT_PK(2,2) 775 4941 776 4942 4943 736
-CONVEX 2200 GT_PK(2,2) 775 4941 776 4940 4736 815
-CONVEX 2201 GT_PK(2,2) 775 4944 735 4942 4945 736
-CONVEX 2202 GT_PK(2,2) 775 4946 774 4944 4494 735
-CONVEX 2203 GT_PK(2,2) 775 4939 814 4946 4477 774
-CONVEX 2204 GT_PK(2,2) 890 4947 851 4948 4937 891
-CONVEX 2205 GT_PK(2,2) 890 4949 889 4950 3847 929
-CONVEX 2206 GT_PK(2,2) 890 4950 929 4951 2764 930
-CONVEX 2207 GT_PK(2,2) 890 4948 891 4951 2987 930
-CONVEX 2208 GT_PK(2,2) 809 4952 770 4953 3851 769
-CONVEX 2209 GT_PK(2,2) 809 4954 808 4953 2963 769
-CONVEX 2210 GT_PK(2,2) 809 4955 848 4954 3810 808
-CONVEX 2211 GT_PK(2,2) 809 4956 849 4955 4486 848
-CONVEX 2212 GT_PK(2,2) 810 4957 809 4958 4956 849
-CONVEX 2213 GT_PK(2,2) 810 4959 770 4960 4463 771
-CONVEX 2214 GT_PK(2,2) 810 4957 809 4959 4952 770
-CONVEX 2215 GT_PK(2,2) 432 4961 472 4962 3866 433
-CONVEX 2216 GT_PK(2,2) 432 4963 471 4961 4499 472
-CONVEX 2217 GT_PK(2,2) 432 4962 433 4964 3007 394
-CONVEX 2218 GT_PK(2,2) 474 4965 475 4966 4169 436
-CONVEX 2219 GT_PK(2,2) 474 4967 435 4966 4500 436
-CONVEX 2220 GT_PK(2,2) 474 4967 435 4968 4504 473
-CONVEX 2221 GT_PK(2,2) 474 4969 512 4968 4778 473
-CONVEX 2222 GT_PK(2,2) 564 4970 603 4971 3882 563
-CONVEX 2223 GT_PK(2,2) 564 4972 604 4970 4506 603
-CONVEX 2224 GT_PK(2,2) 564 4972 604 4973 4974 565
-CONVEX 2225 GT_PK(2,2) 564 4975 524 4971 3025 563
-CONVEX 2226 GT_PK(2,2) 564 4975 524 4976 3892 525
-CONVEX 2227 GT_PK(2,2) 564 4973 565 4976 3884 525
-CONVEX 2228 GT_PK(2,2) 605 4977 604 4978 4974 565
-CONVEX 2229 GT_PK(2,2) 605 4979 606 4980 2816 645
-CONVEX 2230 GT_PK(2,2) 605 4981 644 4980 3019 645
-CONVEX 2231 GT_PK(2,2) 605 4977 604 4981 4507 644
-CONVEX 2232 GT_PK(2,2) 605 4982 566 4979 4915 606
-CONVEX 2233 GT_PK(2,2) 605 4982 566 4978 4916 565
-CONVEX 2234 GT_PK(2,2) 148 4983 177 4984 4985 178
-CONVEX 2235 GT_PK(2,2) 148 4984 178 4986 4538 149
-CONVEX 2236 GT_PK(2,2) 148 4987 121 4986 3929 149
-CONVEX 2237 GT_PK(2,2) 148 4987 121 4988 4555 120
-CONVEX 2238 GT_PK(2,2) 208 4989 240 4990 4394 241
-CONVEX 2239 GT_PK(2,2) 208 4989 240 4991 4992 207
-CONVEX 2240 GT_PK(2,2) 209 4993 178 4994 4536 210
-CONVEX 2241 GT_PK(2,2) 209 4995 177 4993 4985 178
-CONVEX 2242 GT_PK(2,2) 209 4994 210 4996 4544 242
-CONVEX 2243 GT_PK(2,2) 209 4997 208 4995 4998 177
-CONVEX 2244 GT_PK(2,2) 209 4999 241 4996 1970 242
-CONVEX 2245 GT_PK(2,2) 209 4997 208 4999 4990 241
-CONVEX 2246 GT_PK(2,2) 94 5000 95 5001 4554 120
-CONVEX 2247 GT_PK(2,2) 94 5000 95 5002 5003 71
-CONVEX 2248 GT_PK(2,2) 94 5004 70 5002 5005 71
-CONVEX 2249 GT_PK(2,2) 94 5004 70 5006 4559 93
-CONVEX 2250 GT_PK(2,2) 72 5007 95 5008 5003 71
-CONVEX 2251 GT_PK(2,2) 72 5009 50 5008 5010 71
-CONVEX 2252 GT_PK(2,2) 72 5009 50 5011 4563 51
-CONVEX 2253 GT_PK(2,2) 72 5007 95 5012 4556 96
-CONVEX 2254 GT_PK(2,2) 72 5013 73 5012 3933 96
-CONVEX 2255 GT_PK(2,2) 72 5011 51 5013 3939 73
-CONVEX 2256 GT_PK(2,2) 175 5014 207 5015 5016 206
-CONVEX 2257 GT_PK(2,2) 49 5017 70 5018 5005 71
-CONVEX 2258 GT_PK(2,2) 49 5019 50 5018 5010 71
-CONVEX 2259 GT_PK(2,2) 49 5020 30 5021 2819 48
-CONVEX 2260 GT_PK(2,2) 49 5017 70 5021 4558 48
-CONVEX 2261 GT_PK(2,2) 49 5019 50 5022 4561 31
-CONVEX 2262 GT_PK(2,2) 49 5023 16 5022 5024 31
-CONVEX 2263 GT_PK(2,2) 49 5023 16 5020 3706 30
-CONVEX 2264 GT_PK(2,2) 406 5025 368 5026 4565 405
-CONVEX 2265 GT_PK(2,2) 406 5027 444 5026 3896 405
-CONVEX 2266 GT_PK(2,2) 406 5027 444 5028 3904 445
-CONVEX 2267 GT_PK(2,2) 301 5029 267 5030 4571 302
-CONVEX 2268 GT_PK(2,2) 299 5031 264 5032 4576 298
-CONVEX 2269 GT_PK(2,2) 265 5033 299 5034 5035 300
-CONVEX 2270 GT_PK(2,2) 265 5033 299 5036 5031 264
-CONVEX 2271 GT_PK(2,2) 265 5037 232 5038 4611 231
-CONVEX 2272 GT_PK(2,2) 265 5036 264 5038 5039 231
-CONVEX 2273 GT_PK(2,2) 260 5040 226 5041 3944 259
-CONVEX 2274 GT_PK(2,2) 260 5042 227 5040 4595 226
-CONVEX 2275 GT_PK(2,2) 260 5043 261 5042 5044 227
-CONVEX 2276 GT_PK(2,2) 260 5045 294 5041 3946 259
-CONVEX 2277 GT_PK(2,2) 260 5045 294 5046 3950 295
-CONVEX 2278 GT_PK(2,2) 260 5043 261 5046 5047 295
-CONVEX 2279 GT_PK(2,2) 412 5048 451 5049 2844 413
-CONVEX 2280 GT_PK(2,2) 412 5050 375 5049 4599 413
-CONVEX 2281 GT_PK(2,2) 412 5050 375 5051 4600 374
-CONVEX 2282 GT_PK(2,2) 412 5052 411 5051 5053 374
-CONVEX 2283 GT_PK(2,2) 84 5054 83 5055 3989 109
-CONVEX 2284 GT_PK(2,2) 84 5056 110 5055 4622 109
-CONVEX 2285 GT_PK(2,2) 84 5057 60 5058 4634 61
-CONVEX 2286 GT_PK(2,2) 84 5057 60 5054 4630 83
-CONVEX 2287 GT_PK(2,2) 84 5059 85 5058 4628 61
-CONVEX 2288 GT_PK(2,2) 84 5059 85 5056 4629 110
-CONVEX 2289 GT_PK(2,2) 166 5060 167 5061 4619 137
-CONVEX 2290 GT_PK(2,2) 166 5062 136 5061 4636 137
-CONVEX 2291 GT_PK(2,2) 166 5060 167 5063 4608 198
-CONVEX 2292 GT_PK(2,2) 166 5064 197 5063 5065 198
-CONVEX 2293 GT_PK(2,2) 166 5062 136 5066 4639 165
-CONVEX 2294 GT_PK(2,2) 166 5064 197 5066 4640 165
-CONVEX 2295 GT_PK(2,2) 230 5067 264 5068 5039 231
-CONVEX 2296 GT_PK(2,2) 230 5067 264 5069 4575 263
-CONVEX 2297 GT_PK(2,2) 230 5070 198 5068 4610 231
-CONVEX 2298 GT_PK(2,2) 230 5071 197 5070 5065 198
-CONVEX 2299 GT_PK(2,2) 1111 5072 1110 5073 4648 1074
-CONVEX 2300 GT_PK(2,2) 1111 5074 1075 5075 2282 1112
-CONVEX 2301 GT_PK(2,2) 1111 5073 1074 5074 4017 1075
-CONVEX 2302 GT_PK(2,2) 1111 5072 1110 5076 4653 1146
-CONVEX 2303 GT_PK(2,2) 1111 5077 1147 5075 2705 1112
-CONVEX 2304 GT_PK(2,2) 1111 5076 1146 5077 4299 1147
-CONVEX 2305 GT_PK(2,2) 841 5078 840 5079 5080 880
-CONVEX 2306 GT_PK(2,2) 841 5081 842 5082 4658 802
-CONVEX 2307 GT_PK(2,2) 841 5082 802 5083 2937 801
-CONVEX 2308 GT_PK(2,2) 841 5078 840 5083 4655 801
-CONVEX 2309 GT_PK(2,2) 881 5084 920 5085 5086 880
-CONVEX 2310 GT_PK(2,2) 881 5087 841 5085 5079 880
-CONVEX 2311 GT_PK(2,2) 881 5087 841 5088 5081 842
-CONVEX 2312 GT_PK(2,2) 879 5089 840 5090 5080 880
-CONVEX 2313 GT_PK(2,2) 879 5091 839 5092 2521 878
-CONVEX 2314 GT_PK(2,2) 879 5089 840 5091 4656 839
-CONVEX 2315 GT_PK(2,2) 959 5093 920 5094 5095 958
-CONVEX 2316 GT_PK(2,2) 961 5096 962 5097 4018 1000
-CONVEX 2317 GT_PK(2,2) 961 5098 999 5097 4661 1000
-CONVEX 2318 GT_PK(2,2) 961 5096 962 5099 4022 923
-CONVEX 2319 GT_PK(2,2) 998 5100 999 5101 4662 1037
-CONVEX 2320 GT_PK(2,2) 998 5102 1036 5101 4663 1037
-CONVEX 2321 GT_PK(2,2) 1224 5103 1225 5104 4669 1191
-CONVEX 2322 GT_PK(2,2) 1224 5104 1191 5105 4036 1190
-CONVEX 2323 GT_PK(2,2) 1257 5106 1288 5107 4687 1256
-CONVEX 2324 GT_PK(2,2) 1257 5108 1225 5109 4668 1258
-CONVEX 2325 GT_PK(2,2) 1257 5110 1289 5109 4696 1258
-CONVEX 2326 GT_PK(2,2) 1257 5106 1288 5110 4690 1289
-CONVEX 2327 GT_PK(2,2) 1257 5111 1224 5107 5112 1256
-CONVEX 2328 GT_PK(2,2) 1257 5111 1224 5108 5103 1225
-CONVEX 2329 GT_PK(2,2) 1227 5113 1228 5114 4706 1194
-CONVEX 2330 GT_PK(2,2) 1227 5113 1228 5115 4709 1260
-CONVEX 2331 GT_PK(2,2) 1227 5115 1260 5116 4050 1259
-CONVEX 2332 GT_PK(2,2) 1227 5117 1226 5116 4043 1259
-CONVEX 2333 GT_PK(2,2) 1227 5114 1194 5118 4366 1193
-CONVEX 2334 GT_PK(2,2) 1227 5117 1226 5118 4046 1193
-CONVEX 2335 GT_PK(2,2) 541 5119 503 5120 4098 542
-CONVEX 2336 GT_PK(2,2) 541 5119 503 5121 4744 502
-CONVEX 2337 GT_PK(2,2) 658 5122 698 5123 5124 697
-CONVEX 2338 GT_PK(2,2) 658 5125 619 5126 4725 659
-CONVEX 2339 GT_PK(2,2) 658 5122 698 5126 4733 659
-CONVEX 2340 GT_PK(2,2) 737 5127 698 5128 5124 697
-CONVEX 2341 GT_PK(2,2) 737 5128 697 5129 5130 736
-CONVEX 2342 GT_PK(2,2) 737 5131 776 5129 4943 736
-CONVEX 2343 GT_PK(2,2) 737 5131 776 5132 4735 777
-CONVEX 2344 GT_PK(2,2) 737 5132 777 5133 3323 738
-CONVEX 2345 GT_PK(2,2) 737 5127 698 5133 4732 738
-CONVEX 2346 GT_PK(2,2) 616 5134 615 5135 4928 655
-CONVEX 2347 GT_PK(2,2) 696 5136 697 5137 5130 736
-CONVEX 2348 GT_PK(2,2) 696 5138 735 5137 4945 736
-CONVEX 2349 GT_PK(2,2) 696 5139 695 5138 4495 735
-CONVEX 2350 GT_PK(2,2) 918 5140 957 5141 5142 956
-CONVEX 2351 GT_PK(2,2) 918 5143 917 5141 4755 956
-CONVEX 2352 GT_PK(2,2) 918 5143 917 5144 4752 878
-CONVEX 2353 GT_PK(2,2) 918 5145 879 5144 5092 878
-CONVEX 2354 GT_PK(2,2) 595 5146 635 5147 4789 634
-CONVEX 2355 GT_PK(2,2) 595 5148 555 5149 4770 556
-CONVEX 2356 GT_PK(2,2) 595 5150 596 5149 2530 556
-CONVEX 2357 GT_PK(2,2) 595 5146 635 5150 4181 596
-CONVEX 2358 GT_PK(2,2) 554 5151 555 5152 4771 515
-CONVEX 2359 GT_PK(2,2) 554 5153 593 5154 4187 553
-CONVEX 2360 GT_PK(2,2) 551 5155 550 5156 4178 511
-CONVEX 2361 GT_PK(2,2) 551 5157 512 5156 4777 511
-CONVEX 2362 GT_PK(2,2) 630 5158 631 5159 4783 670
-CONVEX 2363 GT_PK(2,2) 630 5160 669 5161 3393 629
-CONVEX 2364 GT_PK(2,2) 630 5160 669 5159 3394 670
-CONVEX 2365 GT_PK(2,2) 750 5162 790 5163 4823 751
-CONVEX 2366 GT_PK(2,2) 750 5164 711 5165 3381 710
-CONVEX 2367 GT_PK(2,2) 750 5163 751 5164 2587 711
-CONVEX 2368 GT_PK(2,2) 750 5162 790 5166 5167 789
-CONVEX 2369 GT_PK(2,2) 750 5168 749 5165 4191 710
-CONVEX 2370 GT_PK(2,2) 750 5166 789 5168 3441 749
-CONVEX 2371 GT_PK(2,2) 829 5169 869 5170 4821 830
-CONVEX 2372 GT_PK(2,2) 829 5171 790 5170 4825 830
-CONVEX 2373 GT_PK(2,2) 829 5169 869 5172 4835 868
-CONVEX 2374 GT_PK(2,2) 829 5171 790 5173 5167 789
-CONVEX 2375 GT_PK(2,2) 829 5174 828 5172 4218 868
-CONVEX 2376 GT_PK(2,2) 829 5174 828 5173 4220 789
-CONVEX 2377 GT_PK(2,2) 946 5175 908 5176 4832 907
-CONVEX 2378 GT_PK(2,2) 946 5177 984 5178 3455 945
-CONVEX 2379 GT_PK(2,2) 946 5176 907 5178 4232 945
-CONVEX 2380 GT_PK(2,2) 946 5175 908 5179 4836 947
-CONVEX 2381 GT_PK(2,2) 946 5177 984 5180 3454 985
-CONVEX 2382 GT_PK(2,2) 946 5179 947 5180 4228 985
-CONVEX 2383 GT_PK(2,2) 995 5181 957 5182 5142 956
-CONVEX 2384 GT_PK(2,2) 995 5183 994 5182 4251 956
-CONVEX 2385 GT_PK(2,2) 995 5183 994 5184 4248 1033
-CONVEX 2386 GT_PK(2,2) 995 5185 1034 5184 4845 1033
-CONVEX 2387 GT_PK(2,2) 1176 5186 1142 5187 4847 1141
-CONVEX 2388 GT_PK(2,2) 1176 5188 1209 5189 4853 1210
-CONVEX 2389 GT_PK(2,2) 1107 5190 1142 5191 4846 1106
-CONVEX 2390 GT_PK(2,2) 1107 5191 1106 5192 5193 1070
-CONVEX 2391 GT_PK(2,2) 1107 5194 1071 5192 4841 1070
-CONVEX 2392 GT_PK(2,2) 1107 5194 1071 5195 4843 1108
-CONVEX 2393 GT_PK(2,2) 1143 5196 1144 5197 3548 1178
-CONVEX 2394 GT_PK(2,2) 1143 5198 1107 5199 5190 1142
-CONVEX 2395 GT_PK(2,2) 1143 5196 1144 5200 4013 1108
-CONVEX 2396 GT_PK(2,2) 1143 5198 1107 5200 5195 1108
-CONVEX 2397 GT_PK(2,2) 1068 5201 1104 5202 4850 1067
-CONVEX 2398 GT_PK(2,2) 1068 5203 1030 5202 2613 1067
-CONVEX 2399 GT_PK(2,2) 1068 5204 1031 5203 3466 1030
-CONVEX 2400 GT_PK(2,2) 1358 5205 1357 5206 5207 1381
-CONVEX 2401 GT_PK(2,2) 1358 5208 1382 5206 4860 1381
-CONVEX 2402 GT_PK(2,2) 1358 5209 1332 5205 5210 1357
-CONVEX 2403 GT_PK(2,2) 1358 5209 1332 5211 4870 1333
-CONVEX 2404 GT_PK(2,2) 1359 5212 1333 5213 4281 1334
-CONVEX 2405 GT_PK(2,2) 1359 5214 1360 5213 2687 1334
-CONVEX 2406 GT_PK(2,2) 1359 5215 1358 5212 5211 1333
-CONVEX 2407 GT_PK(2,2) 1359 5215 1358 5216 5208 1382
-CONVEX 2408 GT_PK(2,2) 1359 5214 1360 5217 2683 1383
-CONVEX 2409 GT_PK(2,2) 1359 5216 1382 5217 4858 1383
-CONVEX 2410 GT_PK(2,2) 1355 5218 1379 5219 5220 1378
-CONVEX 2411 GT_PK(2,2) 1355 5218 1379 5221 5222 1356
-CONVEX 2412 GT_PK(2,2) 1399 5223 1377 5224 4871 1398
-CONVEX 2413 GT_PK(2,2) 1399 5225 1418 5226 5227 1378
-CONVEX 2414 GT_PK(2,2) 1399 5223 1377 5226 5228 1378
-CONVEX 2415 GT_PK(2,2) 1301 5229 1328 5230 5231 1329
-CONVEX 2416 GT_PK(2,2) 1301 5232 1302 5230 5233 1329
-CONVEX 2417 GT_PK(2,2) 1301 5234 1271 5235 2745 1272
-CONVEX 2418 GT_PK(2,2) 1301 5232 1302 5235 4877 1272
-CONVEX 2419 GT_PK(2,2) 1330 5236 1302 5237 5233 1329
-CONVEX 2420 GT_PK(2,2) 1330 5238 1355 5237 5239 1329
-CONVEX 2421 GT_PK(2,2) 1330 5238 1355 5240 5221 1356
-CONVEX 2422 GT_PK(2,2) 1330 5236 1302 5241 4876 1303
-CONVEX 2423 GT_PK(2,2) 1331 5242 1304 5243 3622 1303
-CONVEX 2424 GT_PK(2,2) 1331 5244 1330 5243 5241 1303
-CONVEX 2425 GT_PK(2,2) 1331 5244 1330 5245 5240 1356
-CONVEX 2426 GT_PK(2,2) 1331 5246 1332 5242 4869 1304
-CONVEX 2427 GT_PK(2,2) 1331 5246 1332 5247 5210 1357
-CONVEX 2428 GT_PK(2,2) 1331 5245 1356 5247 5248 1357
-CONVEX 2429 GT_PK(2,2) 1401 5249 1420 5250 4878 1402
-CONVEX 2430 GT_PK(2,2) 1401 5249 1420 5251 5252 1419
-CONVEX 2431 GT_PK(2,2) 1380 5253 1402 5254 4280 1381
-CONVEX 2432 GT_PK(2,2) 1380 5255 1357 5254 5207 1381
-CONVEX 2433 GT_PK(2,2) 1380 5256 1401 5253 5250 1402
-CONVEX 2434 GT_PK(2,2) 1380 5256 1401 5257 5258 1379
-CONVEX 2435 GT_PK(2,2) 1380 5259 1356 5255 5248 1357
-CONVEX 2436 GT_PK(2,2) 1380 5257 1379 5259 5222 1356
-CONVEX 2437 GT_PK(2,2) 1047 5260 1085 5261 4887 1048
-CONVEX 2438 GT_PK(2,2) 1047 5261 1048 5262 4883 1009
-CONVEX 2439 GT_PK(2,2) 1047 5263 1008 5262 2768 1009
-CONVEX 2440 GT_PK(2,2) 1047 5263 1008 5264 3672 1046
-CONVEX 2441 GT_PK(2,2) 1084 5265 1121 5266 4341 1120
-CONVEX 2442 GT_PK(2,2) 1084 5267 1085 5265 4886 1121
-CONVEX 2443 GT_PK(2,2) 1084 5266 1120 5268 4084 1083
-CONVEX 2444 GT_PK(2,2) 1084 5269 1047 5267 5260 1085
-CONVEX 2445 GT_PK(2,2) 1084 5268 1083 5270 2751 1046
-CONVEX 2446 GT_PK(2,2) 1084 5269 1047 5270 5264 1046
-CONVEX 2447 GT_PK(2,2) 205 5271 204 5272 4906 173
-CONVEX 2448 GT_PK(2,2) 205 5273 238 5274 5275 206
-CONVEX 2449 GT_PK(2,2) 239 5276 273 5277 4400 240
-CONVEX 2450 GT_PK(2,2) 239 5277 240 5278 4992 207
-CONVEX 2451 GT_PK(2,2) 239 5276 273 5279 4398 272
-CONVEX 2452 GT_PK(2,2) 239 5280 238 5279 4895 272
-CONVEX 2453 GT_PK(2,2) 239 5278 207 5281 5016 206
-CONVEX 2454 GT_PK(2,2) 239 5280 238 5281 5275 206
-CONVEX 2455 GT_PK(2,2) 237 5282 270 5283 5284 236
-CONVEX 2456 GT_PK(2,2) 237 5285 205 5286 5273 238
-CONVEX 2457 GT_PK(2,2) 237 5286 238 5287 4894 271
-CONVEX 2458 GT_PK(2,2) 237 5282 270 5287 4902 271
-CONVEX 2459 GT_PK(2,2) 237 5283 236 5288 4898 204
-CONVEX 2460 GT_PK(2,2) 237 5285 205 5288 5271 204
-CONVEX 2461 GT_PK(2,2) 269 5289 304 5290 2016 303
-CONVEX 2462 GT_PK(2,2) 269 5291 270 5289 4901 304
-CONVEX 2463 GT_PK(2,2) 269 5292 268 5290 2232 303
-CONVEX 2464 GT_PK(2,2) 269 5291 270 5293 5284 236
-CONVEX 2465 GT_PK(2,2) 269 5294 235 5292 2887 268
-CONVEX 2466 GT_PK(2,2) 269 5293 236 5294 4896 235
-CONVEX 2467 GT_PK(2,2) 171 5295 172 5296 4904 203
-CONVEX 2468 GT_PK(2,2) 171 5296 203 5297 2892 202
-CONVEX 2469 GT_PK(2,2) 171 5298 170 5297 3712 202
-CONVEX 2470 GT_PK(2,2) 171 5298 170 5299 3720 141
-CONVEX 2471 GT_PK(2,2) 115 5300 116 5301 3704 90
-CONVEX 2472 GT_PK(2,2) 115 5302 89 5301 2827 90
-CONVEX 2473 GT_PK(2,2) 115 5302 89 5303 2829 114
-CONVEX 2474 GT_PK(2,2) 143 5304 172 5305 4905 173
-CONVEX 2475 GT_PK(2,2) 143 5306 115 5307 5300 116
-CONVEX 2476 GT_PK(2,2) 850 5308 890 5309 4947 851
-CONVEX 2477 GT_PK(2,2) 850 5310 810 5311 4958 849
-CONVEX 2478 GT_PK(2,2) 850 5311 849 5312 4488 889
-CONVEX 2479 GT_PK(2,2) 850 5308 890 5312 4949 889
-CONVEX 2480 GT_PK(2,2) 811 5313 851 5314 4938 812
-CONVEX 2481 GT_PK(2,2) 811 5315 810 5316 4960 771
-CONVEX 2482 GT_PK(2,2) 811 5317 850 5313 5309 851
-CONVEX 2483 GT_PK(2,2) 811 5317 850 5315 5310 810
-CONVEX 2484 GT_PK(2,2) 811 5318 772 5316 4485 771
-CONVEX 2485 GT_PK(2,2) 811 5318 772 5314 4480 812
-CONVEX 2486 GT_PK(2,2) 513 5319 474 5320 4969 512
-CONVEX 2487 GT_PK(2,2) 513 5319 474 5321 4965 475
-CONVEX 2488 GT_PK(2,2) 119 5322 94 5323 5006 93
-CONVEX 2489 GT_PK(2,2) 119 5322 94 5324 5001 120
-CONVEX 2490 GT_PK(2,2) 145 5325 175 5326 5327 146
-CONVEX 2491 GT_PK(2,2) 176 5328 208 5329 4998 177
-CONVEX 2492 GT_PK(2,2) 176 5330 175 5331 5327 146
-CONVEX 2493 GT_PK(2,2) 176 5328 208 5332 4991 207
-CONVEX 2494 GT_PK(2,2) 176 5330 175 5332 5014 207
-CONVEX 2495 GT_PK(2,2) 407 5333 446 5334 4568 445
-CONVEX 2496 GT_PK(2,2) 407 5335 406 5334 5028 445
-CONVEX 2497 GT_PK(2,2) 297 5336 263 5337 4577 298
-CONVEX 2498 GT_PK(2,2) 297 5338 333 5337 5339 298
-CONVEX 2499 GT_PK(2,2) 369 5340 406 5341 5025 368
-CONVEX 2500 GT_PK(2,2) 369 5342 407 5340 5335 406
-CONVEX 2501 GT_PK(2,2) 336 5343 301 5344 5345 300
-CONVEX 2502 GT_PK(2,2) 335 5346 336 5347 5348 372
-CONVEX 2503 GT_PK(2,2) 335 5349 299 5350 5035 300
-CONVEX 2504 GT_PK(2,2) 335 5346 336 5350 5344 300
-CONVEX 2505 GT_PK(2,2) 266 5351 265 5352 5037 232
-CONVEX 2506 GT_PK(2,2) 266 5352 232 5353 3965 233
-CONVEX 2507 GT_PK(2,2) 266 5354 267 5353 4574 233
-CONVEX 2508 GT_PK(2,2) 266 5355 301 5354 5029 267
-CONVEX 2509 GT_PK(2,2) 266 5355 301 5356 5345 300
-CONVEX 2510 GT_PK(2,2) 266 5351 265 5356 5034 300
-CONVEX 2511 GT_PK(2,2) 229 5357 230 5358 5069 263
-CONVEX 2512 GT_PK(2,2) 229 5359 197 5360 4641 196
-CONVEX 2513 GT_PK(2,2) 229 5357 230 5359 5071 197
-CONVEX 2514 GT_PK(2,2) 450 5361 412 5362 5048 451
-CONVEX 2515 GT_PK(2,2) 450 5361 412 5363 5052 411
-CONVEX 2516 GT_PK(2,2) 450 5364 489 5362 2836 451
-CONVEX 2517 GT_PK(2,2) 450 5365 488 5364 3886 489
-CONVEX 2518 GT_PK(2,2) 448 5366 486 5367 4517 447
-CONVEX 2519 GT_PK(2,2) 448 5368 487 5366 4511 486
-CONVEX 2520 GT_PK(2,2) 921 5369 881 5370 5084 920
-CONVEX 2521 GT_PK(2,2) 921 5371 959 5370 5093 920
-CONVEX 2522 GT_PK(2,2) 960 5372 961 5373 5098 999
-CONVEX 2523 GT_PK(2,2) 960 5374 998 5373 5100 999
-CONVEX 2524 GT_PK(2,2) 960 5374 998 5375 5376 959
-CONVEX 2525 GT_PK(2,2) 960 5377 921 5375 5371 959
-CONVEX 2526 GT_PK(2,2) 997 5378 1036 5379 4666 1035
-CONVEX 2527 GT_PK(2,2) 997 5380 998 5378 5102 1036
-CONVEX 2528 GT_PK(2,2) 997 5381 959 5382 5094 958
-CONVEX 2529 GT_PK(2,2) 997 5380 998 5381 5376 959
-CONVEX 2530 GT_PK(2,2) 1223 5383 1255 5384 4677 1256
-CONVEX 2531 GT_PK(2,2) 1223 5385 1224 5384 5112 1256
-CONVEX 2532 GT_PK(2,2) 1223 5383 1255 5386 4679 1222
-CONVEX 2533 GT_PK(2,2) 1223 5385 1224 5387 5105 1190
-CONVEX 2534 GT_PK(2,2) 1223 5386 1222 5388 2309 1189
-CONVEX 2535 GT_PK(2,2) 1223 5387 1190 5388 3242 1189
-CONVEX 2536 GT_PK(2,2) 581 5389 541 5390 5120 542
-CONVEX 2537 GT_PK(2,2) 581 5391 620 5392 4721 621
-CONVEX 2538 GT_PK(2,2) 581 5390 542 5393 3282 582
-CONVEX 2539 GT_PK(2,2) 581 5392 621 5393 3304 582
-CONVEX 2540 GT_PK(2,2) 657 5394 658 5395 5123 697
-CONVEX 2541 GT_PK(2,2) 657 5396 696 5395 5136 697
-CONVEX 2542 GT_PK(2,2) 618 5397 658 5398 5125 619
-CONVEX 2543 GT_PK(2,2) 618 5399 657 5400 5401 617
-CONVEX 2544 GT_PK(2,2) 618 5399 657 5397 5394 658
-CONVEX 2545 GT_PK(2,2) 576 5402 616 5403 5134 615
-CONVEX 2546 GT_PK(2,2) 576 5404 536 5405 3776 575
-CONVEX 2547 GT_PK(2,2) 576 5403 615 5405 3854 575
-CONVEX 2548 GT_PK(2,2) 656 5406 616 5407 5408 617
-CONVEX 2549 GT_PK(2,2) 656 5409 657 5407 5401 617
-CONVEX 2550 GT_PK(2,2) 656 5409 657 5410 5396 696
-CONVEX 2551 GT_PK(2,2) 656 5410 696 5411 5139 695
-CONVEX 2552 GT_PK(2,2) 656 5411 695 5412 3849 655
-CONVEX 2553 GT_PK(2,2) 656 5406 616 5412 5135 655
-CONVEX 2554 GT_PK(2,2) 540 5413 541 5414 5121 502
-CONVEX 2555 GT_PK(2,2) 462 5415 461 5416 4719 423
-CONVEX 2556 GT_PK(2,2) 462 5417 424 5416 4922 423
-CONVEX 2557 GT_PK(2,2) 462 5417 424 5418 4923 463
-CONVEX 2558 GT_PK(2,2) 919 5419 957 5420 5421 958
-CONVEX 2559 GT_PK(2,2) 919 5422 918 5419 5140 957
-CONVEX 2560 GT_PK(2,2) 919 5423 920 5420 5095 958
-CONVEX 2561 GT_PK(2,2) 919 5423 920 5424 5086 880
-CONVEX 2562 GT_PK(2,2) 919 5425 879 5424 5090 880
-CONVEX 2563 GT_PK(2,2) 919 5422 918 5425 5145 879
-CONVEX 2564 GT_PK(2,2) 594 5426 633 5427 4800 593
-CONVEX 2565 GT_PK(2,2) 594 5428 554 5427 5153 593
-CONVEX 2566 GT_PK(2,2) 594 5426 633 5429 4798 634
-CONVEX 2567 GT_PK(2,2) 594 5428 554 5430 5151 555
-CONVEX 2568 GT_PK(2,2) 594 5431 595 5429 5147 634
-CONVEX 2569 GT_PK(2,2) 594 5431 595 5430 5148 555
-CONVEX 2570 GT_PK(2,2) 514 5432 476 5433 4772 475
-CONVEX 2571 GT_PK(2,2) 514 5434 554 5435 5154 553
-CONVEX 2572 GT_PK(2,2) 514 5432 476 5436 4774 515
-CONVEX 2573 GT_PK(2,2) 514 5434 554 5436 5152 515
-CONVEX 2574 GT_PK(2,2) 514 5437 513 5435 5438 553
-CONVEX 2575 GT_PK(2,2) 514 5437 513 5433 5321 475
-CONVEX 2576 GT_PK(2,2) 591 5439 631 5440 4782 592
-CONVEX 2577 GT_PK(2,2) 591 5441 630 5439 5158 631
-CONVEX 2578 GT_PK(2,2) 590 5442 630 5443 5161 629
-CONVEX 2579 GT_PK(2,2) 590 5444 589 5443 2028 629
-CONVEX 2580 GT_PK(2,2) 590 5445 550 5444 4176 589
-CONVEX 2581 GT_PK(2,2) 590 5446 591 5442 5441 630
-CONVEX 2582 GT_PK(2,2) 590 5447 551 5445 5155 550
-CONVEX 2583 GT_PK(2,2) 590 5446 591 5447 5448 551
-CONVEX 2584 GT_PK(2,2) 1177 5449 1176 5450 5186 1142
-CONVEX 2585 GT_PK(2,2) 1177 5451 1143 5452 5197 1178
-CONVEX 2586 GT_PK(2,2) 1177 5451 1143 5450 5199 1142
-CONVEX 2587 GT_PK(2,2) 1177 5452 1178 5453 2692 1211
-CONVEX 2588 GT_PK(2,2) 1177 5454 1210 5453 4268 1211
-CONVEX 2589 GT_PK(2,2) 1177 5449 1176 5454 5189 1210
-CONVEX 2590 GT_PK(2,2) 1175 5455 1176 5456 5188 1209
-CONVEX 2591 GT_PK(2,2) 1175 5457 1174 5458 3495 1208
-CONVEX 2592 GT_PK(2,2) 1175 5456 1209 5458 4856 1208
-CONVEX 2593 GT_PK(2,2) 1175 5457 1174 5459 3501 1140
-CONVEX 2594 GT_PK(2,2) 1175 5460 1141 5459 5461 1140
-CONVEX 2595 GT_PK(2,2) 1175 5455 1176 5460 5187 1141
-CONVEX 2596 GT_PK(2,2) 1105 5462 1068 5463 5201 1104
-CONVEX 2597 GT_PK(2,2) 1105 5464 1106 5465 4848 1141
-CONVEX 2598 GT_PK(2,2) 1105 5465 1141 5466 5461 1140
-CONVEX 2599 GT_PK(2,2) 1105 5463 1104 5466 4852 1140
-CONVEX 2600 GT_PK(2,2) 1069 5467 1106 5468 5193 1070
-CONVEX 2601 GT_PK(2,2) 1069 5469 1068 5470 5204 1031
-CONVEX 2602 GT_PK(2,2) 1069 5471 1105 5467 5464 1106
-CONVEX 2603 GT_PK(2,2) 1069 5471 1105 5469 5462 1068
-CONVEX 2604 GT_PK(2,2) 1069 5472 1032 5468 3465 1070
-CONVEX 2605 GT_PK(2,2) 1069 5470 1031 5472 3470 1032
-CONVEX 2606 GT_PK(2,2) 1354 5473 1377 5474 4872 1353
-CONVEX 2607 GT_PK(2,2) 1354 5475 1328 5474 4873 1353
-CONVEX 2608 GT_PK(2,2) 1354 5473 1377 5476 5228 1378
-CONVEX 2609 GT_PK(2,2) 1354 5477 1355 5476 5219 1378
-CONVEX 2610 GT_PK(2,2) 1354 5475 1328 5478 5231 1329
-CONVEX 2611 GT_PK(2,2) 1354 5477 1355 5478 5239 1329
-CONVEX 2612 GT_PK(2,2) 1300 5479 1328 5480 4874 1327
-CONVEX 2613 GT_PK(2,2) 1300 5481 1301 5479 5229 1328
-CONVEX 2614 GT_PK(2,2) 1300 5482 1299 5483 2725 1270
-CONVEX 2615 GT_PK(2,2) 1300 5482 1299 5480 3575 1327
-CONVEX 2616 GT_PK(2,2) 1300 5484 1271 5483 3614 1270
-CONVEX 2617 GT_PK(2,2) 1300 5481 1301 5484 5234 1271
-CONVEX 2618 GT_PK(2,2) 1400 5485 1401 5486 5258 1379
-CONVEX 2619 GT_PK(2,2) 1400 5487 1418 5488 5227 1378
-CONVEX 2620 GT_PK(2,2) 1400 5486 1379 5488 5220 1378
-CONVEX 2621 GT_PK(2,2) 1400 5489 1419 5487 5490 1418
-CONVEX 2622 GT_PK(2,2) 1400 5485 1401 5489 5251 1419
-CONVEX 2623 GT_PK(2,2) 174 5491 205 5492 5272 173
-CONVEX 2624 GT_PK(2,2) 174 5493 145 5494 5325 175
-CONVEX 2625 GT_PK(2,2) 174 5494 175 5495 5015 206
-CONVEX 2626 GT_PK(2,2) 174 5491 205 5495 5274 206
-CONVEX 2627 GT_PK(2,2) 142 5496 171 5497 5295 172
-CONVEX 2628 GT_PK(2,2) 142 5498 143 5497 5304 172
-CONVEX 2629 GT_PK(2,2) 142 5496 171 5499 5299 141
-CONVEX 2630 GT_PK(2,2) 142 5498 143 5500 5306 115
-CONVEX 2631 GT_PK(2,2) 142 5499 141 5501 3113 114
-CONVEX 2632 GT_PK(2,2) 142 5500 115 5501 5303 114
-CONVEX 2633 GT_PK(2,2) 552 5502 513 5503 5320 512
-CONVEX 2634 GT_PK(2,2) 552 5504 551 5503 5157 512
-CONVEX 2635 GT_PK(2,2) 552 5505 592 5506 4188 553
-CONVEX 2636 GT_PK(2,2) 552 5502 513 5506 5438 553
-CONVEX 2637 GT_PK(2,2) 552 5507 591 5505 5440 592
-CONVEX 2638 GT_PK(2,2) 552 5507 591 5504 5448 551
-CONVEX 2639 GT_PK(2,2) 144 5508 143 5509 5305 173
-CONVEX 2640 GT_PK(2,2) 144 5510 174 5509 5492 173
-CONVEX 2641 GT_PK(2,2) 144 5510 174 5511 5493 145
-CONVEX 2642 GT_PK(2,2) 144 5508 143 5512 5307 116
-CONVEX 2643 GT_PK(2,2) 118 5513 119 5514 5515 146
-CONVEX 2644 GT_PK(2,2) 118 5516 145 5514 5326 146
-CONVEX 2645 GT_PK(2,2) 118 5513 119 5517 5323 93
-CONVEX 2646 GT_PK(2,2) 118 5517 93 5518 3937 92
-CONVEX 2647 GT_PK(2,2) 147 5519 176 5520 5329 177
-CONVEX 2648 GT_PK(2,2) 147 5521 148 5522 4988 120
-CONVEX 2649 GT_PK(2,2) 147 5521 148 5520 4983 177
-CONVEX 2650 GT_PK(2,2) 147 5519 176 5523 5331 146
-CONVEX 2651 GT_PK(2,2) 147 5524 119 5522 5324 120
-CONVEX 2652 GT_PK(2,2) 147 5524 119 5523 5515 146
-CONVEX 2653 GT_PK(2,2) 408 5525 446 5526 4570 447
-CONVEX 2654 GT_PK(2,2) 408 5527 407 5525 5333 446
-CONVEX 2655 GT_PK(2,2) 332 5528 297 5529 5338 333
-CONVEX 2656 GT_PK(2,2) 332 5530 368 5531 4566 331
-CONVEX 2657 GT_PK(2,2) 332 5532 369 5530 5341 368
-CONVEX 2658 GT_PK(2,2) 332 5532 369 5529 5533 333
-CONVEX 2659 GT_PK(2,2) 262 5534 297 5535 5336 263
-CONVEX 2660 GT_PK(2,2) 262 5536 229 5535 5358 263
-CONVEX 2661 GT_PK(2,2) 373 5537 336 5538 5348 372
-CONVEX 2662 GT_PK(2,2) 373 5539 410 5538 5540 372
-CONVEX 2663 GT_PK(2,2) 373 5541 411 5542 5053 374
-CONVEX 2664 GT_PK(2,2) 373 5539 410 5541 5543 411
-CONVEX 2665 GT_PK(2,2) 228 5544 261 5545 5044 227
-CONVEX 2666 GT_PK(2,2) 228 5546 229 5547 5360 196
-CONVEX 2667 GT_PK(2,2) 228 5548 262 5544 5549 261
-CONVEX 2668 GT_PK(2,2) 228 5548 262 5546 5536 229
-CONVEX 2669 GT_PK(2,2) 228 5550 195 5547 3960 196
-CONVEX 2670 GT_PK(2,2) 228 5545 227 5550 4596 195
-CONVEX 2671 GT_PK(2,2) 449 5551 448 5552 5368 487
-CONVEX 2672 GT_PK(2,2) 449 5552 487 5553 4510 488
-CONVEX 2673 GT_PK(2,2) 449 5554 450 5553 5365 488
-CONVEX 2674 GT_PK(2,2) 449 5554 450 5555 5363 411
-CONVEX 2675 GT_PK(2,2) 449 5556 410 5555 5543 411
-CONVEX 2676 GT_PK(2,2) 449 5551 448 5556 5557 410
-CONVEX 2677 GT_PK(2,2) 882 5558 921 5559 5369 881
-CONVEX 2678 GT_PK(2,2) 882 5560 843 5561 3800 883
-CONVEX 2679 GT_PK(2,2) 882 5562 842 5560 4659 843
-CONVEX 2680 GT_PK(2,2) 882 5559 881 5562 5088 842
-CONVEX 2681 GT_PK(2,2) 922 5563 960 5564 5377 921
-CONVEX 2682 GT_PK(2,2) 922 5565 883 5566 3797 923
-CONVEX 2683 GT_PK(2,2) 922 5567 961 5566 5099 923
-CONVEX 2684 GT_PK(2,2) 922 5563 960 5567 5372 961
-CONVEX 2685 GT_PK(2,2) 922 5568 882 5565 5561 883
-CONVEX 2686 GT_PK(2,2) 922 5568 882 5564 5558 921
-CONVEX 2687 GT_PK(2,2) 996 5569 995 5570 5181 957
-CONVEX 2688 GT_PK(2,2) 996 5570 957 5571 5421 958
-CONVEX 2689 GT_PK(2,2) 996 5572 997 5571 5382 958
-CONVEX 2690 GT_PK(2,2) 996 5572 997 5573 5379 1035
-CONVEX 2691 GT_PK(2,2) 996 5574 1034 5573 4839 1035
-CONVEX 2692 GT_PK(2,2) 996 5569 995 5574 5185 1034
-CONVEX 2693 GT_PK(2,2) 578 5575 618 5576 5400 617
-CONVEX 2694 GT_PK(2,2) 578 5577 538 5578 5579 539
-CONVEX 2695 GT_PK(2,2) 580 5580 540 5581 5413 541
-CONVEX 2696 GT_PK(2,2) 580 5582 620 5583 4724 619
-CONVEX 2697 GT_PK(2,2) 580 5584 581 5582 5391 620
-CONVEX 2698 GT_PK(2,2) 580 5584 581 5581 5389 541
-CONVEX 2699 GT_PK(2,2) 579 5585 540 5586 5587 539
-CONVEX 2700 GT_PK(2,2) 579 5588 578 5586 5578 539
-CONVEX 2701 GT_PK(2,2) 579 5588 578 5589 5575 618
-CONVEX 2702 GT_PK(2,2) 579 5589 618 5590 5398 619
-CONVEX 2703 GT_PK(2,2) 579 5591 580 5590 5583 619
-CONVEX 2704 GT_PK(2,2) 579 5591 580 5585 5580 540
-CONVEX 2705 GT_PK(2,2) 501 5592 540 5593 5587 539
-CONVEX 2706 GT_PK(2,2) 501 5594 462 5595 5418 463
-CONVEX 2707 GT_PK(2,2) 501 5595 463 5596 4741 502
-CONVEX 2708 GT_PK(2,2) 501 5592 540 5596 5414 502
-CONVEX 2709 GT_PK(2,2) 577 5597 576 5598 5402 616
-CONVEX 2710 GT_PK(2,2) 577 5598 616 5599 5408 617
-CONVEX 2711 GT_PK(2,2) 577 5600 578 5599 5576 617
-CONVEX 2712 GT_PK(2,2) 577 5600 578 5601 5577 538
-CONVEX 2713 GT_PK(2,2) 500 5602 462 5603 5415 461
-CONVEX 2714 GT_PK(2,2) 500 5604 538 5605 5579 539
-CONVEX 2715 GT_PK(2,2) 500 5606 501 5605 5593 539
-CONVEX 2716 GT_PK(2,2) 500 5606 501 5602 5594 462
-CONVEX 2717 GT_PK(2,2) 500 5603 461 5607 4718 499
-CONVEX 2718 GT_PK(2,2) 500 5604 538 5607 5608 499
-CONVEX 2719 GT_PK(2,2) 117 5609 118 5610 5518 92
-CONVEX 2720 GT_PK(2,2) 117 5611 144 5612 5512 116
-CONVEX 2721 GT_PK(2,2) 117 5611 144 5613 5511 145
-CONVEX 2722 GT_PK(2,2) 117 5609 118 5613 5516 145
-CONVEX 2723 GT_PK(2,2) 117 5614 91 5610 4911 92
-CONVEX 2724 GT_PK(2,2) 117 5612 116 5614 3703 91
-CONVEX 2725 GT_PK(2,2) 409 5615 410 5616 5540 372
-CONVEX 2726 GT_PK(2,2) 409 5617 408 5618 5526 447
-CONVEX 2727 GT_PK(2,2) 409 5619 448 5618 5367 447
-CONVEX 2728 GT_PK(2,2) 409 5619 448 5615 5557 410
-CONVEX 2729 GT_PK(2,2) 371 5620 335 5621 5347 372
-CONVEX 2730 GT_PK(2,2) 371 5622 409 5621 5616 372
-CONVEX 2731 GT_PK(2,2) 371 5622 409 5623 5617 408
-CONVEX 2732 GT_PK(2,2) 296 5624 262 5625 5534 297
-CONVEX 2733 GT_PK(2,2) 296 5626 331 5627 3954 295
-CONVEX 2734 GT_PK(2,2) 296 5628 261 5627 5047 295
-CONVEX 2735 GT_PK(2,2) 296 5624 262 5628 5549 261
-CONVEX 2736 GT_PK(2,2) 296 5629 332 5626 5531 331
-CONVEX 2737 GT_PK(2,2) 296 5629 332 5625 5528 297
-CONVEX 2738 GT_PK(2,2) 337 5630 373 5631 5537 336
-CONVEX 2739 GT_PK(2,2) 337 5631 336 5632 5343 301
-CONVEX 2740 GT_PK(2,2) 337 5633 374 5634 4602 338
-CONVEX 2741 GT_PK(2,2) 337 5630 373 5633 5542 374
-CONVEX 2742 GT_PK(2,2) 337 5634 338 5635 3095 302
-CONVEX 2743 GT_PK(2,2) 337 5632 301 5635 5030 302
-CONVEX 2744 GT_PK(2,2) 537 5636 577 5637 5597 576
-CONVEX 2745 GT_PK(2,2) 537 5638 536 5639 2990 498
-CONVEX 2746 GT_PK(2,2) 537 5637 576 5638 5404 536
-CONVEX 2747 GT_PK(2,2) 537 5640 499 5639 4100 498
-CONVEX 2748 GT_PK(2,2) 537 5641 538 5640 5608 499
-CONVEX 2749 GT_PK(2,2) 537 5636 577 5641 5601 538
-CONVEX 2750 GT_PK(2,2) 334 5642 371 5643 5620 335
-CONVEX 2751 GT_PK(2,2) 334 5643 335 5644 5349 299
-CONVEX 2752 GT_PK(2,2) 334 5645 333 5646 5339 298
-CONVEX 2753 GT_PK(2,2) 334 5644 299 5646 5032 298
-CONVEX 2754 GT_PK(2,2) 370 5647 408 5648 5527 407
-CONVEX 2755 GT_PK(2,2) 370 5649 371 5647 5623 408
-CONVEX 2756 GT_PK(2,2) 370 5650 369 5648 5342 407
-CONVEX 2757 GT_PK(2,2) 370 5651 334 5649 5642 371
-CONVEX 2758 GT_PK(2,2) 370 5650 369 5652 5533 333
-CONVEX 2759 GT_PK(2,2) 370 5651 334 5652 5645 333
-
-END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h0.15.mesh b/tests/meshes/disc_P2_h0_3.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h0.15.mesh
rename to tests/meshes/disc_P2_h0_3.mesh
diff --git a/tests/meshes/disc_P2_h0.25.mesh b/tests/meshes/disc_P2_h0_5.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h0.25.mesh
rename to tests/meshes/disc_P2_h0_5.mesh
diff --git a/tests/meshes/disc_P2_h1.mesh b/tests/meshes/disc_P2_h1.mesh
old mode 100755
new mode 100644
index 35b2731..90ef1cb
--- a/tests/meshes/disc_P2_h1.mesh
+++ b/tests/meshes/disc_P2_h1.mesh
@@ -10,1392 +10,5654 @@ BEGIN POINTS LIST
POINT 2 -20 20
POINT 3 20 20
POINT 4 0 40
- POINT 5 -7.08999439411224 1.298877587388341
- POINT 6 -5.282004223598042 0.7100950914239894
- POINT 7 -3.47031521720064 0.3033781502190239
- POINT 8 -1.689974063564663 0.07152821552843025
- POINT 9 1.689960162663852 0.07152703670926773
- POINT 10 3.470291113247503 0.3033739033986539
- POINT 11 5.281972434142698 0.7100863867937268
- POINT 12 7.089956578995546 1.298863250915369
- POINT 13 -10.33788236531681 2.879013223504487
- POINT 14 -8.728323343402396 2.005101511455367
- POINT 15 -6.155723063676203 2.801434963065342
- POINT 16 -4.091201195594828 2.459658715166061
- POINT 17 -2.066659832781266 2.187655143712953
- POINT 18 -4.444059962388502e-06 2.064287137447093
- POINT 19 2.066650046418929 2.187657831466219
- POINT 20 4.091191239691891 2.459658150301677
- POINT 21 6.155715570419536 2.801429443148412
- POINT 22 8.728292838334855 2.005086715177716
- POINT 23 10.3378510065 2.878994288669519
- POINT 24 -13.31700959313135 5.078295824654251
- POINT 25 -11.8842697780299 3.913852796799773
- POINT 26 -9.460448082417175 4.366488604800259
- POINT 27 -7.512025315084293 4.126002865730436
- POINT 28 -5.172892121816004 4.455275571417475
- POINT 29 -3.057534701397881 4.267955770521298
- POINT 30 -1.012355277947994 4.110780430542055
- POINT 31 1.012349419089582 4.110782567666035
- POINT 32 3.057529483199409 4.267957853121388
- POINT 33 5.172886691584971 4.455272913530382
- POINT 34 7.512016782430195 4.125998677146069
- POINT 35 9.460436885249777 4.366480067235193
- POINT 36 11.88424594459136 3.913835188943747
- POINT 37 13.31698679929866 5.078275482126558
- POINT 38 -14.7498830675396 6.492929647996144
- POINT 39 -12.45509720824102 6.556537137387828
- POINT 40 -10.6482491458674 5.948211070168938
- POINT 41 -8.422109451390526 6.167912606077227
- POINT 42 -6.353060403793894 6.112985632708121
- POINT 43 -4.1407681774423 6.228053553808773
- POINT 44 -2.044474263097546 6.130734213928414
- POINT 45 -1.590000917432027e-06 6.079527809516725
- POINT 46 2.044472146376001 6.130736081211611
- POINT 47 4.140767470322072 6.22805374467435
- POINT 48 6.353058937427791 6.112982734736828
- POINT 49 8.422108492096564 6.167907314850485
- POINT 50 10.64824854146091 5.948202934940974
- POINT 51 12.45509688415863 6.556538659055924
- POINT 52 14.74986960384593 6.492914945498344
- POINT 53 -16.04355519086491 8.058294224118221
- POINT 54 -13.74135223644284 8.192183278283656
- POINT 55 -11.47752803375488 8.160729976898475
- POINT 56 -9.493527168153337 7.92578225082361
- POINT 57 -7.348476128284648 8.030483731407866
- POINT 58 -5.251990097092846 8.021830105465815
- POINT 59 -3.111403417400961 8.061569553457121
- POINT 60 -1.03035566619991 8.025902010406856
- POINT 61 1.030354767138576 8.025902400729668
- POINT 62 3.111403710309801 8.061569941428463
- POINT 63 5.251991017315566 8.021829123575905
- POINT 64 7.348476568276788 8.030480163525478
- POINT 65 9.49352663676625 7.92577656119784
- POINT 66 11.47752506667806 8.160726192772536
- POINT 67 13.74135116972482 8.192181839463158
- POINT 68 16.04354708966182 8.058283340247721
- POINT 69 -17.19580986241097 9.787060992258192
- POINT 70 -14.93702314944201 9.823933424582281
- POINT 71 -12.67351421081692 9.907845730886832
- POINT 72 -10.48194789872941 9.921029402134767
- POINT 73 -8.415247672061369 9.840575684874789
- POINT 74 -6.293821461179366 9.890161035967978
- POINT 75 -4.18979493172746 9.895564239362063
- POINT 76 -2.081243704999238 9.916613908721169
- POINT 77 5.730172508017217e-08 9.910960593168005
- POINT 78 2.081244132593595 9.916613808527552
- POINT 79 4.189795976700378 9.895563750716825
- POINT 80 6.293822706796825 9.890159478467984
- POINT 81 8.415248200245212 9.840572417227369
- POINT 82 10.48194698614503 9.921026346494969
- POINT 83 12.67351249301398 9.90784290415405
- POINT 84 14.93702196401547 9.823930709655935
- POINT 85 17.19580506925672 9.787052921897237
- POINT 86 -18.1760415240729 11.65545001122227
- POINT 87 -15.97553246064111 11.5448525408589
- POINT 88 -13.78571642443011 11.61751913076442
- POINT 89 -11.59628723826348 11.69602393958708
- POINT 90 -9.442169657304916 11.7276271718398
- POINT 91 -7.349624558628578 11.71151253389753
- POINT 92 -5.24282073613147 11.73166174921223
- POINT 93 -3.137905182843987 11.749161104766
- POINT 94 -1.042556134226208 11.76547185321201
- POINT 95 1.042556695466196 11.76547172930404
- POINT 96 3.13790593838561 11.74916068398455
- POINT 97 5.242821722657395 11.73166093775092
- POINT 98 7.349625501825332 11.7115109952139
- POINT 99 9.442169874348188 11.72762525690472
- POINT 100 11.59628683371615 11.69602200942614
- POINT 101 13.78571564810794 11.61751684765504
- POINT 102 15.97553159279355 11.54484971825705
- POINT 103 18.17603883633879 11.65544415682245
- POINT 104 -18.9605397782243 13.63620150237337
- POINT 105 -16.8378114819632 13.34701391345798
- POINT 106 -14.74755920142683 13.39190264700377
- POINT 107 -12.63015409928628 13.45515225576576
- POINT 108 -10.4974158537763 13.51638952902862
- POINT 109 -8.377087236386718 13.55137598391785
- POINT 110 -6.285880485474346 13.5571522438029
- POINT 111 -4.197964629953373 13.554499339371
- POINT 112 -2.088214950681028 13.58585648886253
- POINT 113 2.731150748891409e-07 13.59731244193799
- POINT 114 2.088215540160786 13.58585624443037
- POINT 115 4.197965288358211 13.55449885456938
- POINT 116 6.285881219549023 13.55715142631005
- POINT 117 8.377087797482492 13.5513749885778
- POINT 118 10.49741609890272 13.51638838986579
- POINT 119 12.63015411255437 13.45515089704564
- POINT 120 14.74755900190871 13.3919008647022
- POINT 121 16.83781104922592 13.34701152878708
- POINT 122 18.96053842326367 13.63619746535554
- POINT 123 -19.5357573624754 15.71582163367355
- POINT 124 -17.53374306722162 15.20882267305824
- POINT 125 -15.57069741754931 15.24451363995668
- POINT 126 -13.55098734811856 15.27194090964616
- POINT 127 -11.4874826074671 15.31182390849893
- POINT 128 -9.398270307101383 15.3521915525082
- POINT 129 -7.307964300837752 15.3807112166889
- POINT 130 -5.231490199222396 15.39200882295255
- POINT 131 -3.169152633696715 15.35291249391119
- POINT 132 -1.041499472772248 15.40847695692984
- POINT 133 1.041499922227459 15.40847686112553
- POINT 134 3.169153095957357 15.35291225824823
- POINT 135 5.231490717147384 15.39200836588829
- POINT 136 7.307964797170775 15.38071066913708
- POINT 137 9.398270745362067 15.35219096658757
- POINT 138 11.48748296447435 15.31182320391143
- POINT 139 13.55098760797554 15.27193995853761
- POINT 140 15.57069756108526 15.24451232768288
- POINT 141 17.5337430129703 15.20882089303506
- POINT 142 19.53575681130713 15.71581912036011
- POINT 143 -18.2269232082509 17.13021291903821
- POINT 144 -16.40696619670878 17.17145148168169
- POINT 145 -14.46503683750223 17.15281425943443
- POINT 146 -12.45424174106675 17.15199836204197
- POINT 147 -10.39981013664358 17.16515504075176
- POINT 148 -8.328026293006795 17.18988295252257
- POINT 149 -6.256758829896484 17.21190086556036
- POINT 150 -4.196112455235621 17.22388615617422
- POINT 151 -2.171217513306863 17.11254059462183
- POINT 152 1.665915350806957e-07 17.22074676082319
- POINT 153 2.171217828945217 17.1125405142267
- POINT 154 4.19611284158213 17.22388591748381
- POINT 155 6.256759233014987 17.21190057227975
- POINT 156 8.32802671761999 17.18988265372117
- POINT 157 10.39981059340922 17.16515474428726
- POINT 158 12.45424219159261 17.15199799003971
- POINT 159 14.46503723679426 17.15281363556374
- POINT 160 16.40696659288819 17.17145057879611
- POINT 161 18.22692352993353 17.13021164782587
- POINT 162 -19.89780896458842 17.98079262859248
- POINT 163 -17.84230000449807 19.0216744028301
- POINT 164 -15.67627065513821 19.02313060013363
- POINT 165 -13.55906626932976 19.0036025225671
- POINT 166 -11.45548002657009 18.98870888881037
- POINT 167 -9.365348057261556 18.99918972787285
- POINT 168 -7.287998267664897 19.0218085635537
- POINT 169 -5.225476971032742 19.04419029905378
- POINT 170 -3.181207515747626 19.06061320124515
- POINT 171 -1.234450813224698 18.81027364364246
- POINT 172 1.234451001429794 18.8102736784703
- POINT 173 3.181207777678578 19.06061305006857
- POINT 174 5.225477302694968 19.04419014960234
- POINT 175 7.287998656796332 19.02180842950959
- POINT 176 9.365348511226138 18.99918964629332
- POINT 177 11.45548052731511 18.98870888549819
- POINT 178 13.55906673221513 19.00360248933783
- POINT 179 15.6762709640833 19.02313030096059
- POINT 180 17.84230024444024 19.02167396477342
- POINT 181 19.89780885181004 17.98079151724459
- POINT 182 -18.34809671121251 20.89054860233434
- POINT 183 -16.5148528869666 20.87800710044906
- POINT 184 -14.52694695679922 20.85426661015416
- POINT 185 -12.45599638977427 20.8108810324845
- POINT 186 -10.37011211347385 20.80605366101868
- POINT 187 -8.288100923056527 20.82387931457176
- POINT 188 -6.210897946834899 20.84807602452601
- POINT 189 -4.130583790032196 20.86687448767059
- POINT 190 -2.030932593701857 20.87063865748742
- POINT 191 9.744431586633517e-08 21.64935021861394
- POINT 192 2.030932751362846 20.87063857502341
- POINT 193 4.130584013659444 20.86687431844705
- POINT 194 6.210898346296974 20.84807594605767
- POINT 195 8.288101445193462 20.82387932992417
- POINT 196 10.37011274159265 20.80605382218947
- POINT 197 12.45599711658471 20.8108813744629
- POINT 198 14.52694762208812 20.85426702370534
- POINT 199 16.51485331119099 20.87800725634424
- POINT 200 18.348097009919 20.89054895986076
- POINT 201 -19.88382274553589 22.15257822717576
- POINT 202 -17.85872906553023 22.79187608979278
- POINT 203 -15.75836820209814 22.71857538973881
- POINT 204 -13.57945048306569 22.62787433244293
- POINT 205 -11.43502337227142 22.60571660119635
- POINT 206 -9.32896785495339 22.62172230713452
- POINT 207 -7.252191943285577 22.65010775210676
- POINT 208 -5.19352107545026 22.67271964550248
- POINT 209 -3.145718127729072 22.67904520073677
- POINT 210 -1.19802941618547 22.93488185752093
- POINT 211 1.198029575535804 22.93488182516196
- POINT 212 3.145718298303114 22.67904507452085
- POINT 213 5.193521324838902 22.67271937177574
- POINT 214 7.252192530636423 22.65010772431655
- POINT 215 9.328968618053137 22.62172251326393
- POINT 216 11.43502432491394 22.60571702295378
- POINT 217 13.57945157268804 22.62787513308746
- POINT 218 15.75836910518877 22.71857642015902
- POINT 219 17.85872913941462 22.7918771500154
- POINT 220 19.88382260621709 22.15257951409296
- POINT 221 -19.56496589012501 24.14874796995999
- POINT 222 -17.12378015908613 24.49263729810405
- POINT 223 -14.75261366404331 24.36653106466741
- POINT 224 -12.51545015644557 24.36405857012063
- POINT 225 -10.36487612468117 24.40059700241373
- POINT 226 -8.270782662155399 24.44922254990688
- POINT 227 -6.207288303035652 24.48752518657241
- POINT 228 -4.152672439085122 24.50430982838724
- POINT 229 -2.144764510838116 24.6392641397031
- POINT 230 6.736184551131563e-08 24.56637229685156
- POINT 231 2.144764639428793 24.6392640566236
- POINT 232 4.152672593221236 24.5043096033403
- POINT 233 6.207288592802848 24.48752465778632
- POINT 234 8.270783499471428 24.44922265688236
- POINT 235 10.36487726829784 24.4005974184117
- POINT 236 12.51545141239867 24.36405943508291
- POINT 237 14.75261493047371 24.36653271363972
- POINT 238 17.12378075459493 24.4926401834798
- POINT 239 19.56496529523762 24.14875077537231
- POINT 240 -19.08648829040304 25.9754468234863
- POINT 241 -17.2845615037453 26.31014844212238
- POINT 242 -15.41261905344529 26.10941999036963
- POINT 243 -13.37179093546351 26.11632995430249
- POINT 244 -11.29591265365937 26.16877399507631
- POINT 245 -9.236109783161917 26.24563353410026
- POINT 246 -7.197506282144635 26.30683884552605
- POINT 247 -5.148124747507762 26.32635712487787
- POINT 248 -3.122954853611116 26.40463970225008
- POINT 249 -1.028840474391874 26.37582534616704
- POINT 250 1.028840597301122 26.37582532979795
- POINT 251 3.122954923639289 26.40463955141999
- POINT 252 5.148124848876652 26.32635667877105
- POINT 253 7.197506356103443 26.30683804371632
- POINT 254 9.236111124219747 26.24563372506302
- POINT 255 11.29591412227338 26.16877501716782
- POINT 256 13.3717921011747 26.11633170886203
- POINT 257 15.41261961645513 26.1094231779272
- POINT 258 17.28456075910474 26.31015378144565
- POINT 259 19.08648669351269 25.97545192419629
- POINT 260 -18.31673994912508 28.03100477126815
- POINT 261 -16.29279631468638 28.07734896422777
- POINT 262 -14.29108105178232 27.93826211324394
- POINT 263 -12.23205698562959 27.95454691920996
- POINT 264 -10.1921242779246 28.04641052160824
- POINT 265 -8.184908522052318 28.14581978804722
- POINT 266 -6.142892720399755 28.15468429908139
- POINT 267 -4.115765842832939 28.20978375998045
- POINT 268 -2.044953225702631 28.19763670818671
- POINT 269 1.215817429928157e-07 28.20528019734085
- POINT 270 2.044953387448034 28.19763672758267
- POINT 271 4.115765884875199 28.20978350344839
- POINT 272 6.142892053295159 28.15468405294527
- POINT 273 8.184908802060571 28.1458177672969
- POINT 274 10.1921266003412 28.04641156253142
- POINT 275 12.23205881411247 27.95454935528251
- POINT 276 14.2910815778731 27.93826589300298
- POINT 277 16.29279479603289 28.07735539177588
- POINT 278 18.31673641698378 28.0310128272082
- POINT 279 -17.36678064292307 29.91942186322351
- POINT 280 -15.30701199611502 29.80163024565981
- POINT 281 -13.1975126296105 29.73273604910611
- POINT 282 -11.14232609374812 29.83834011557202
- POINT 283 -9.18383040196667 30.00598319236085
- POINT 284 -7.135586668146636 29.99761305864382
- POINT 285 -5.123286168201119 30.04271988926355
- POINT 286 -3.053121112865554 30.02630175178171
- POINT 287 -1.015876570824747 30.05156154994286
- POINT 288 1.015877381461083 30.05156170293002
- POINT 289 3.053121697974701 30.02630185030043
- POINT 290 5.123284228587577 30.0427213293883
- POINT 291 7.135586245905698 29.99761060242232
- POINT 292 9.183831168146963 30.00598031130402
- POINT 293 11.14232972160493 29.83834373724195
- POINT 294 13.19751369866922 29.73274161644041
- POINT 295 15.30700948964564 29.80163858123015
- POINT 296 17.36677404971316 29.91943340651388
- POINT 297 -16.21450019303935 31.70854318392894
- POINT 298 -14.18134842576247 31.46072633556853
- POINT 299 -12.05433474215738 31.57807989769072
- POINT 300 -10.18803390533311 31.90895778516169
- POINT 301 -8.127827538982091 31.83562093362241
- POINT 302 -6.132870312528693 31.91947084481104
- POINT 303 -4.060514707104238 31.84886116654844
- POINT 304 -2.023054298900899 31.90620457141977
- POINT 305 1.779731685490338e-06 31.92616315841029
- POINT 306 2.023057639192921 31.90620515692421
- POINT 307 4.060510421402324 31.84886697474238
- POINT 308 6.132869669181516 31.91946778705557
- POINT 309 8.127827628663475 31.83561745950141
- POINT 310 10.18803390203203 31.90895591912609
- POINT 311 12.05433729770214 31.5780897141657
- POINT 312 14.18134461110469 31.46073802168817
- POINT 313 16.21448882325949 31.70855892928177
- POINT 314 -14.85855987098478 33.38742688347396
- POINT 315 -12.97622115412793 33.15231979037343
- POINT 316 -11.24542238667929 33.84152597332419
- POINT 317 -9.096796145803623 33.67355592311518
- POINT 318 -7.169110863793735 33.81460869617811
- POINT 319 -5.025802643706024 33.69074033624606
- POINT 320 -3.036012504986613 33.74897677262599
- POINT 321 -1.006001725651425 33.81394161048243
- POINT 322 1.006017505359627 33.81394238106373
- POINT 323 3.03600454008222 33.7489957057666
- POINT 324 5.025801824829388 33.69073476359576
- POINT 325 7.169110502599582 33.81460511144136
- POINT 326 9.09679356939724 33.67355436459209
- POINT 327 11.24541326548703 33.84153193558982
- POINT 328 12.97621626240949 33.15233833055714
- POINT 329 14.85854134665239 33.38744744340443
- POINT 330 -13.24234864752243 34.98800194480442
- POINT 331 -10.03539086910046 35.3828070140792
- POINT 332 -8.191323309688949 35.8082238544771
- POINT 333 -5.969442595277822 35.42728838548917
- POINT 334 -3.964572821971675 35.68073227615353
- POINT 335 -2.062446042804255 35.66361537576937
- POINT 336 3.401394552337428e-05 35.7433135846511
- POINT 337 2.062435708551036 35.66367717807774
- POINT 338 3.96457676799794 35.68072163899399
- POINT 339 5.969444351238414 35.42728363799607
- POINT 340 8.19131937738778 35.80822453891639
- POINT 341 10.03538306356879 35.38281277249126
- POINT 342 13.2423188856883 34.98802824022632
- POINT 343 -11.71964489363993 36.20647782730662
- POINT 344 -9.885418518050601 37.38615830834937
- POINT 345 -6.769213566269587 37.09871131951007
- POINT 346 -4.834310082657146 37.45809613171494
- POINT 347 -2.966207997229898 37.80957975457357
- POINT 348 -1.228951401026502 37.50853541118494
- POINT 349 1.228967413584314 37.50873516084056
- POINT 350 2.966244431714553 37.80956888117363
- POINT 351 4.834322604660215 37.45809313826081
- POINT 352 6.769215951806145 37.09871058669637
- POINT 353 9.885380262406448 37.38618005968161
- POINT 354 11.71961051109886 36.20650269083999
- POINT 355 -8.160801736293346 38.25928024378061
- POINT 356 -6.108721403629119 39.04425169999729
- POINT 357 -4.094025391529261 39.57648988183318
- POINT 358 -2.032918826278168 39.89641276827972
- POINT 359 -0.000114943787747096 38.55954134616952
- POINT 360 2.032857647557499 39.89641901912924
- POINT 361 4.093978133093873 39.57649976491602
- POINT 362 6.108678764431183 39.04426537708952
- POINT 363 8.16076002653128 38.25929888548312
- POINT 364 19.74927974328947 16.84311090331085
- POINT 365 19.06236619087178 17.55550158253523
- POINT 366 18.88134017062033 16.42301538409299
- POINT 367 18.87005454812514 18.50123274100901
- POINT 368 18.92115012222012 19.51083698238671
- POINT 369 19.97443587516672 18.98910375220634
- POINT 370 18.03461188718688 18.07594280629964
- POINT 371 -1.016516885032958 39.22797705722462
- POINT 372 -1.017777998289471 39.97408640454459
- POINT 373 -5.747189387354801e-05 39.27977067308476
- POINT 374 1.016371351884876 39.22798018264938
- POINT 375 1.017747548306818 39.9740879692846
- POINT 376 2.499551039636026 38.85299395015144
- POINT 377 3.530111282404213 38.69303432304483
- POINT 378 3.067591411714378 39.76334698055007
- POINT 379 -10.9924492306217 14.41410671876377
- POINT 380 -10.44287645728424 15.33200773050357
- POINT 381 -9.947843080438842 14.43429054076841
- POINT 382 -12.05881835337669 14.38348808213234
- POINT 383 -11.56378497653129 13.48577089239719
- POINT 384 -19.1159597283742 21.52156341475505
- POINT 385 -19.17404835560626 20.44527430116717
- POINT 386 -19.97093456597552 21.07785567562136
- POINT 387 18.53474991213871 15.46232000669758
- POINT 388 18.24714071811698 14.4225091791953
- POINT 389 19.27621315646036 14.66824556999596
- POINT 390 17.88033327145191 16.16951627043046
- POINT 391 -1.878316948172965 1.129591679620692
- POINT 392 -2.768487524990953 1.245516646965989
- POINT 393 -2.582747461702293 0.167465745146943
- POINT 394 7.648469065631529 32.82511128547139
- POINT 395 8.132952035998411 33.74407973801672
- POINT 396 8.612310599030359 32.75458591204675
- POINT 397 10.87749678733383 35.79465773166562
- POINT 398 10.81858671612841 36.82136097977488
- POINT 399 9.960381662987619 36.38449641608644
- POINT 400 -11.96631262099795 7.358633557143151
- POINT 401 -11.55167317705421 6.252374103778383
- POINT 402 -11.06288858981114 7.054470523533706
- POINT 403 -12.16968349313546 5.2351949670938
- POINT 404 -11.26625946194865 4.931031933484356
- POINT 405 -12.0755211222859 9.034287853892653
- POINT 406 -11.57773105477317 9.914437566510799
- POINT 407 -10.97973796624214 9.040879689516622
- POINT 408 -10.17110926624146 33.75754094821968
- POINT 409 -10.64040662788987 34.61216649370169
- POINT 410 -9.566093507452038 34.52818146859719
- POINT 411 -5.471515743143133 38.25117391585611
- POINT 412 -5.108309760920813 39.33662769024022
- POINT 413 -4.464167737093204 38.51729300677406
- POINT 414 -17.075786992357 11.60015127604059
- POINT 415 -16.58567116152604 10.66595676655855
- POINT 416 -17.71058118590639 10.70832033698396
- POINT 417 -11.04685154601989 12.60620673430785
- POINT 418 -12.11322066877488 12.57558809767642
- POINT 419 -12.1349007245402 10.80193483523696
- POINT 420 -11.03911756849645 10.80852667086092
- POINT 421 -9.437251545081509 13.53388275647323
- POINT 422 -8.887678771744049 14.45178376821303
- POINT 423 -12.51923497779283 15.29188240907255
- POINT 424 -13.09057072370242 14.36354658270596
- POINT 425 -18.87005448454325 18.50123351571129
- POINT 426 -18.03461160637449 18.07594366093415
- POINT 427 -19.06236608641966 17.55550277381534
- POINT 428 -18.92115000224904 19.51083720141505
- POINT 429 -19.97443590274372 18.98910431002001
- POINT 430 -18.09519835785529 19.95611150258222
- POINT 431 0.5990148364900598 22.29211602188795
- POINT 432 -0.599014659370577 22.29211603806743
- POINT 433 7.967516690854382e-08 22.93488184134145
- POINT 434 -1.01546624812877 21.25999443805068
- POINT 435 4.872215793316759e-08 20.82467510930697
- POINT 436 -1.015466296850928 20.43531932874371
- POINT 437 -1.614481004943663 21.90276025750417
- POINT 438 6.782362015092881 16.29630562070841
- POINT 439 6.26972775715908 15.38635951751268
- POINT 440 5.744124975081186 16.30195446908402
- POINT 441 -5.74412451455944 16.30195484425646
- POINT 442 -5.226435642566052 17.21789351086729
- POINT 443 -4.713801327229008 16.30794748956339
- POINT 444 -4.200321416459555 15.37246065843187
- POINT 445 -3.682632544466168 16.2883993250427
- POINT 446 -5.718863643637123 1.755765027244666
- POINT 447 -6.622858728894221 2.050156275226842
- POINT 448 -6.1930002735872 0.9829879862466689
- POINT 449 -1.033332138420614 2.125971140580023
- POINT 450 -0.5061798610039783 3.087533783994574
- POINT 451 -1.53950755536463 3.149217787127504
- POINT 452 0.8449778593019447 1.06790708707818
- POINT 453 -2.222029981194251e-06 1.032143568723546
- POINT 454 0.8457366719362006 0.01788976042541284
- POINT 455 -0.8449892538123129 1.067907676487761
- POINT 456 -0.8457434623547605 0.01789005539397318
- POINT 457 7.14550668849857 38.67998224759658
- POINT 458 7.464987989168712 37.67900473608974
- POINT 459 6.438947358118664 38.07148798189294
- POINT 460 5.471500684545699 38.25117925767516
- POINT 461 5.801769278233181 37.27840186247859
- POINT 462 4.399449686329078 36.5694073886274
- POINT 463 3.900283518187385 37.63383100971722
- POINT 464 3.465410599856247 36.74514526008381
- POINT 465 4.464150368877045 38.51729645158841
- POINT 466 5.108265028519643 39.33663957465164
- POINT 467 6.569277426918998 34.62094437471872
- POINT 468 5.497623088033901 34.55900920079591
- POINT 469 6.097456163714485 33.75266993751856
- POINT 470 4.967010559618177 35.55400263849503
- POINT 471 4.495189296413664 34.68572820129488
- POINT 472 5.401883477949315 36.44268838812844
- POINT 473 6.369330151522279 36.26299711234622
- POINT 474 9.113351220478284 35.59551865570383
- POINT 475 9.038349819897114 36.597202299299
- POINT 476 7.080381864313097 35.61775408845623
- POINT 477 7.480267664596962 36.45346756280638
- POINT 478 7.680214939993681 34.81141482517887
- POINT 479 8.64405647339251 34.74088945175424
- POINT 480 9.566088316483015 34.52818356854168
- POINT 481 8.17603970195953 37.03376171219976
- POINT 482 9.033624999701651 37.84358769694784
- POINT 483 18.72983203648753 27.01380028490616
- POINT 484 17.80064858804426 27.17058330432692
- POINT 485 18.18552372630872 26.14280285282097
- POINT 486 14.85185059716412 27.02384453546509
- POINT 487 13.8314368395239 27.02729880093251
- POINT 488 14.39220585881491 26.11287744339462
- POINT 489 -2.499563411754033 38.85299626142665
- POINT 490 -3.530116694379579 38.69303481820337
- POINT 491 -3.067645385176077 39.76333856162318
- POINT 492 -3.900259039943522 37.63383794314426
- POINT 493 3.013506238274488 35.67219940853586
- POINT 494 2.514340070132794 36.73662302962569
- POINT 495 6.650990085890549 32.86703644924846
- POINT 496 5.579335747005452 32.80510127532567
- POINT 497 7.130348648922496 31.87754262327849
- POINT 498 7.631706937284587 30.91661403096186
- POINT 499 8.159708707026331 30.00179545686317
- POINT 500 8.655829398405219 30.92079888540271
- POINT 501 6.634227957543607 30.95853919473894
- POINT 502 6.129435237246637 30.02016596590531
- POINT 503 5.628076948884546 30.98109455822193
- POINT 504 11.94551072074933 21.70829919870834
- POINT 505 11.41305492908868 20.80846759832619
- POINT 506 10.9025685332533 21.70588542257163
- POINT 507 13.00753192439992 19.90724193190037
- POINT 508 13.49147236933642 20.83257419908412
- POINT 509 14.04300717715163 19.92893475652158
- POINT 510 -1.632691703463277 19.84045615056494
- POINT 511 -0.617225406612349 19.40513682182123
- POINT 512 7.881862384261 8.935526290376423
- POINT 513 6.821149637536807 8.96031982099673
- POINT 514 7.354535453521018 9.865365947847677
- POINT 515 1.878305104541391 1.129592434087743
- POINT 516 2.768470579833216 1.245515867432436
- POINT 517 2.582728607973412 0.1674632640394325
- POINT 518 1.033322801179483 2.125972484456656
- POINT 519 -12.88605340068618 5.81741648102104
- POINT 520 -14.05126013257847 5.767569248488341
- POINT 521 -13.60249013789031 6.524733392691986
- POINT 522 -12.61408342909388 4.479532986874619
- POINT 523 -13.09822472234193 7.374360207835742
- POINT 524 -12.60944013509886 8.176456627591065
- POINT 525 -13.20743322362988 9.050014504585244
- POINT 526 -14.24561765199122 7.3425564631399
- POINT 527 -14.89245371365388 8.125238751200939
- POINT 528 -15.41659981616689 7.259181873308678
- POINT 529 -12.11082177040361 33.4969228818488
- POINT 530 -12.51527794814265 32.36519984403208
- POINT 531 -11.64987856441833 32.70980293550745
- POINT 532 -10.81862285529724 36.82133760142749
- POINT 533 -10.87751788137019 35.79464242069291
- POINT 534 -9.960404693575528 36.38448266121428
- POINT 535 -11.48253364015961 35.0240019003154
- POINT 536 -10.7167281460062 32.87524187924294
- POINT 537 -11.12118432374524 31.74351884142621
- POINT 538 -9.642415025568365 32.79125685413843
- POINT 539 -18.53475021484851 15.4623221533659
- POINT 540 -19.27621404631537 14.6682488620726
- POINT 541 -18.24714142272296 14.42251208771581
- POINT 542 -18.88134028536315 16.42301727635588
- POINT 543 -17.88033313773626 16.16951779604823
- POINT 544 -19.74928002630716 16.84311272522837
- POINT 545 -15.49028917015346 8.94111382435025
- POINT 546 -16.06641650592649 9.805497208420237
- POINT 547 -16.64214543071471 8.907705737630335
- POINT 548 -15.45627780504156 10.68439298272059
- POINT 549 -14.33918769294243 9.008058351432968
- POINT 550 -13.80526868012947 9.865889577734556
- POINT 551 -14.1492732747727 14.33192177832496
- POINT 552 -15.15912830948807 14.31820814348022
- POINT 553 -14.56084238283394 15.25822727480142
- POINT 554 -13.68885665035655 13.42352745138476
- POINT 555 -17.50692650301805 12.50123196234012
- POINT 556 -17.89917563009375 13.49160770791567
- POINT 557 -18.59468367857226 12.63537262535845
- POINT 558 -16.40667197130215 12.44593322715844
- POINT 559 -17.18577727459241 14.27791829325811
- POINT 560 -15.79268534169501 13.36945828023087
- POINT 561 -15.36154583103397 12.46837759393134
- POINT 562 -16.20425444975626 14.29576377670733
- POINT 563 -16.55222024238547 15.22666815650746
- POINT 564 14.61766884814922 19.01336639514921
- POINT 565 15.10160929308571 19.93869866233297
- POINT 566 -8.954387420107352 8.883178967849199
- POINT 567 -8.421001648218994 7.978132991115737
- POINT 568 -7.881861900173009 8.935529708141328
- POINT 569 -10.48552760095411 8.043256113861043
- POINT 570 -10.07088815701037 6.936996660496273
- POINT 571 -9.987737533441372 8.923405826479188
- POINT 572 -9.448597785395389 9.880802543504778
- POINT 573 -8.909628446845817 12.63950157787882
- POINT 574 -9.96979275554061 12.62200835043421
- POINT 575 -10.5192284477842 11.71182555571344
- POINT 576 -9.962058778017163 10.82432828698728
- POINT 577 -8.928708664683143 10.78410142835729
- POINT 578 -8.826724490159041 19.9115345212223
- POINT 579 -7.788049595360713 19.92284393906273
- POINT 580 -8.326673162463226 19.01049914571327
- POINT 581 6.796923008359899 14.46893104772356
- POINT 582 5.758685968348203 14.47457989609917
- POINT 583 7.331484508515757 13.55426320744392
- POINT 584 7.842526297326634 14.46604282885744
- POINT 585 3.183665335263674 17.16821321585526
- POINT 586 3.688660309630354 18.14224948377619
- POINT 587 2.676212803311897 18.08657678214764
- POINT 588 5.226436037298559 17.21789324488178
- POINT 589 4.713801779364758 16.30794714168605
- POINT 590 1.702834415187505 17.9614070963485
- POINT 591 2.207829389554186 18.93544336426943
- POINT 592 9.410254775410465e-08 18.81027366105638
- POINT 593 0.6172255007148968 19.40513683923515
- POINT 594 -9.714117030543257 27.14602202785425
- POINT 595 -10.74401846579198 27.10759225834228
- POINT 596 -10.26601121841064 26.20720376458829
- POINT 597 -15.19792430940091 31.58463475974873
- POINT 598 -14.51995414837362 32.42407660952124
- POINT 599 -15.55919105425835 32.56628720680114
- POINT 600 -13.5787847899452 32.30652306297098
- POINT 601 -13.91739051255635 33.26987333692369
- POINT 602 -13.68943052768649 30.59673119233732
- POINT 603 -13.11784158395992 31.51940311662963
- POINT 604 -12.62592368588394 30.65540797339841
- POINT 605 -18.10341288837137 21.84121234606356
- POINT 606 -18.87127590553306 22.47222715848427
- POINT 607 -17.12463310060343 18.09656294225589
- POINT 608 -17.31694470247984 17.15083220035995
- POINT 609 -16.9703546319652 16.19013707736997
- POINT 610 -15.98883180712904 16.20798256081918
- POINT 611 10.38199647148354 22.61371976810885
- POINT 612 9.849540679822894 21.7138881677267
- POINT 613 8.8085350316233 21.72280092159405
- POINT 614 9.329107093393057 20.81496657605682
- POINT 615 8.9287090372967 10.78409883706605
- POINT 616 9.962058430246611 10.82432580169985
- POINT 617 9.448597593195121 9.88079938186117
- POINT 618 9.969792986625455 12.62200682338526
- POINT 619 8.90962883591534 12.63950012274126
- POINT 620 9.437251948192607 13.5338816892218
- POINT 621 10.67234141492057 4.14015762808947
- POINT 622 9.899143945874886 3.622737177952356
- POINT 623 11.12308967028839 3.378421352424517
- POINT 624 10.05434271335534 5.157341501088084
- POINT 625 11.26624724302613 4.931019061942361
- POINT 626 11.04685146630943 12.60620519964597
- POINT 627 12.11322047313526 12.57558645323589
- POINT 628 11.56378510572855 13.48576964345572
- POINT 629 10.51922835403217 11.71182363316543
- POINT 630 11.03911690993059 10.80852417796056
- POINT 631 8.353117771266421 15.36645081786232
- POINT 632 8.887679271422279 14.45178297758268
- POINT 633 9.947843422132394 14.43428967822668
- POINT 634 -7.354534566620368 9.865368360421384
- POINT 635 -6.821148794732007 8.960322383687922
- POINT 636 -5.241808196453412 9.89286263766502
- POINT 637 -5.768321098655418 10.8109113925901
- POINT 638 -4.716307833929465 10.81361299428714
- POINT 639 -8.846687175134175 18.09453634019771
- POINT 640 -7.808012280335847 18.10584575803814
- POINT 641 -7.292392561451639 17.20089190904147
- POINT 642 -6.77237854878069 18.11685471455703
- POINT 643 -3.663850057285723 10.82236267206403
- POINT 644 -2.609574443921612 10.83288750674358
- POINT 645 -3.135519318363349 9.906089074041617
- POINT 646 -4.190362959487728 11.74041142698911
- POINT 647 1.022235278187542 6.105131945364167
- POINT 648 1.537413456757289 7.078319240970639
- POINT 649 0.5151765885688294 7.052715105123196
- POINT 650 2.577937928342901 7.096153011320037
- POINT 651 2.070879238724189 8.043736171079065
- POINT 652 3.092619808349037 6.17939491294298
- POINT 653 3.626085590315936 7.144811843051406
- POINT 654 11.48251188829295 35.02401731321491
- POINT 655 10.64039816452791 34.61217235404054
- POINT 656 10.17110341744214 33.75754315009095
- POINT 657 14.6689103389384 22.67322577662324
- POINT 658 14.05319959738808 21.7410710783964
- POINT 659 15.14265836363845 21.78642172193218
- POINT 660 13.01772434463638 21.71937825377518
- POINT 661 12.50723794880099 22.61679607802062
- POINT 662 18.09519862717962 19.95611146231709
- POINT 663 19.1740485049595 20.44527447993038
- POINT 664 19.11595980806804 21.52156423697686
- POINT 665 19.97093453194041 21.0778563218991
- POINT 666 16.26820018552503 25.3010316807035
- POINT 667 17.20417075684983 25.40139698246272
- POINT 668 16.34859018777993 26.20978847968642
- POINT 669 18.10513372405381 25.23404605383805
- POINT 670 18.34437302491627 24.32069547942606
- POINT 671 19.34729683337535 25.06775162939346
- POINT 672 15.85270720624401 27.09338928485154
- POINT 673 16.78867777756881 27.19375458661076
- POINT 674 15.291938186953 28.00781064238943
- POINT 675 17.30476560650833 28.05418410949204
- POINT 676 16.82978442287303 28.99839439914488
- POINT 677 17.8667222480114 28.98778277049785
- POINT 678 11.90568276733603 25.26641722612537
- POINT 679 12.94362175678668 25.24019557197247
- POINT 680 12.33385311172404 26.14255336301493
- POINT 681 13.04745149254336 23.49596728408519
- POINT 682 11.97523786865631 23.48488822901835
- POINT 683 13.26157019599279 27.94640762414275
- POINT 684 12.80192545764358 27.03544053207227
- POINT 685 11.76398646819293 27.06166218622517
- POINT 686 12.71478625639084 28.84364548586147
- POINT 687 13.74429763827116 28.8355037547217
- POINT 688 11.6871942678587 28.89644654626223
- POINT 689 12.16992171013707 29.78554267684118
- POINT 690 -2.645241319283594 23.65915467021994
- POINT 691 -2.171873771957271 22.80696352912885
- POINT 692 -1.671396963511793 23.78707299861202
- POINT 693 -3.638150958880634 21.77295984420368
- POINT 694 -4.169619601589666 22.67588242311962
- POINT 695 -4.662052432741228 21.76979706658653
- POINT 696 -2.588325360715464 21.77484192911209
- POINT 697 -3.080758191867026 20.868756572579
- POINT 698 -3.465390409600786 36.74515601536355
- POINT 699 -4.39944145231441 36.56941420393424
- POINT 700 -6.438967484949353 38.07148150975368
- POINT 701 -5.801761824463367 37.27840372561251
- POINT 702 -7.465007651281466 37.67899578164534
- POINT 703 -7.145548671869747 38.67996608706892
- POINT 704 1.645701561067675 36.58620616945915
- POINT 705 2.097605922649433 37.6591520210071
- POINT 706 1.630912530570906 38.7025770899849
- POINT 707 0.6144262348982835 38.03413825350503
- POINT 708 0.6145007137649187 36.62602437274583
- POINT 709 1.03123486124828 35.70349538136442
- POINT 710 3.50029065404008 34.71485867238029
- POINT 711 4.030903182455804 33.71986523468118
- POINT 712 2.549220124316628 34.70633644192217
- POINT 713 5.09669004529192 31.88416738089897
- POINT 714 4.59189732499495 30.94579415206534
- POINT 715 4.543156123115856 32.76980086916907
- POINT 716 3.548257480742272 32.79893134025448
- POINT 717 3.041784030297622 31.8775360658333
- POINT 718 2.529531089637571 32.8276004313454
- POINT 719 6.639239149600429 29.07614732768379
- POINT 720 5.633088140941368 29.09870269116678
- POINT 721 -5.741117900464612 18.12804558230707
- POINT 722 -4.710794713134181 18.134038227614
- POINT 723 -6.25673761934882 19.03299943130374
- POINT 724 9.094364861792316 3.185783391206454
- POINT 725 8.120154810382525 3.065542696161892
- POINT 726 8.486226833839986 4.246239372190631
- POINT 727 9.543080762382589 2.423606448705923
- POINT 728 4.181697363812684 8.041699532502184
- POINT 729 4.69637924381882 7.124941434125128
- POINT 730 4.720893497007972 8.958696437146365
- POINT 731 3.650599843505089 8.978566846072644
- POINT 732 5.772906862056196 8.955994301021946
- POINT 733 5.241809341748601 9.892861614592405
- POINT 734 6.300233792796178 8.026154643550692
- POINT 735 6.622836074707541 2.05014634703189
- POINT 736 5.718844002281117 1.755757914971069
- POINT 737 6.192965581434661 0.9829766219365916
- POINT 738 5.664301131002254 3.628351178339397
- POINT 739 6.833866176424866 3.46371406014724
- POINT 740 6.342451737007583 4.290635795338225
- POINT 741 7.442004204377196 2.403258079163064
- POINT 742 7.917003402974732 1.633697762640239
- POINT 743 8.94127268867317 5.267193691042839
- POINT 744 7.96706263726338 5.146952995998276
- POINT 745 9.535178516778736 6.058055124895729
- POINT 746 -13.10928490082518 34.07016086758892
- POINT 747 -12.24388551710086 34.4147639590643
- POINT 748 -12.49585729120814 35.61581090418589
- POINT 749 -14.07322716081642 34.21070994911054
- POINT 750 -14.36136978693606 10.72072627767335
- POINT 751 -14.88062444253561 11.58118583581166
- POINT 752 -14.26663781292847 12.50471088888409
- POINT 753 -13.22961531762352 10.76268243082563
- POINT 754 -13.2079352618582 12.53633569326509
- POINT 755 -12.6910018313468 11.65677153517575
- POINT 756 15.07065410043878 18.08797196826217
- POINT 757 14.01205198450469 18.07820806245078
- POINT 758 -6.796922393156049 14.4689317302459
- POINT 759 -6.269727250030074 15.38636001982073
- POINT 760 -5.758685342348371 14.47458053337772
- POINT 761 -7.817995296922273 16.28529708460574
- POINT 762 -8.353117303969567 15.36645138459855
- POINT 763 -8.863148300054089 16.27103725251539
- POINT 764 -7.842525768612235 14.46604360030338
- POINT 765 -7.331483860930532 13.55426411386037
- POINT 766 -6.782361565367118 16.29630604112463
- POINT 767 -3.683558631825044 14.45370591664109
- POINT 768 -4.714727414587884 14.47325408116177
- POINT 769 -5.24192255771386 13.55582579158695
- POINT 770 -4.720392683042421 12.64308054429161
- POINT 771 -5.764350610802907 12.64440699650756
- POINT 772 -3.667934906398679 12.6518302220685
- POINT 773 -8.395897107966746 11.71956985286866
- POINT 774 -7.863355897507648 12.63144425890769
- POINT 775 -6.817752522051462 12.63433238885021
- POINT 776 -6.296222647380024 11.72158714155488
- POINT 777 -6.821723009903972 10.80083678493275
- POINT 778 -7.882436115344974 10.77604410938616
- POINT 779 4.716308849678887 10.81361234423387
- POINT 780 5.76832221472711 10.81091020810945
- POINT 781 4.190363830521503 11.74041081086773
- POINT 782 3.663850957542993 10.82236221735069
- POINT 783 1.564857731194123 14.49716655277795
- POINT 784 1.04410790663793 13.59158434318418
- POINT 785 0.5207500976712671 14.50289465153176
- POINT 786 1.565386117813491 12.67566398686721
- POINT 787 0.5212784842906355 12.68139208562102
- POINT 788 2.613060739273198 12.66750846420746
- POINT 789 2.090231316925903 11.7573162066443
- POINT 790 2.247276054134772e-07 15.40847690902769
- POINT 791 -0.5207495998285867 14.50289469943392
- POINT 792 -11.21209063177709 28.0004787204091
- POINT 793 -11.76398481964448 27.06166045714313
- POINT 794 -13.26156901870596 27.94640451622695
- POINT 795 -12.71478480762005 28.84364148415803
- POINT 796 -13.74429684069641 28.83549908117502
- POINT 797 -12.16991936167931 29.78553808233906
- POINT 798 -11.59833041795275 30.70821000663137
- POINT 799 -10.66722518583636 28.94237531859013
- POINT 800 -10.16307824785739 29.92216165396643
- POINT 801 -9.687977339945633 29.02619685698455
- POINT 802 -11.68719153968886 28.89644351739098
- POINT 803 -10.66517999954061 30.87364895036685
- POINT 804 -9.685932153649887 30.95747048876127
- POINT 805 -16.82978847880473 28.99838541372564
- POINT 806 -17.30476813190573 28.05417686774796
- POINT 807 -17.86672715494531 28.98777290369169
- POINT 808 -12.80192396054655 27.03543843675622
- POINT 809 -12.33385179456144 26.1425519746894
- POINT 810 -13.83143599362291 27.02729603377322
- POINT 811 -18.71184747782762 23.47031202987638
- POINT 812 -19.74963048996175 23.15469430712368
- POINT 813 -19.34729785953139 25.06774765708812
- POINT 814 -18.34437302460557 24.32069263403202
- POINT 815 -18.10513422474459 25.23404206079518
- POINT 816 -17.49125461230818 23.64225669394841
- POINT 817 7.817995757395382 16.28529666142913
- POINT 818 7.292392975317489 17.20089161300046
- POINT 819 7.80801268720816 18.10584554161538
- POINT 820 6.772378944905659 18.11685450089467
- POINT 821 8.863148731491028 16.27103681015437
- POINT 822 1.015466424403581 21.25999439681868
- POINT 823 1.614481163449325 21.90276020009269
- POINT 824 1.015466375681423 20.43531928751171
- POINT 825 1.63269187639632 19.84045612674685
- POINT 826 2.606070264520712 19.96562581254599
- POINT 827 4.710795072138549 18.13403803354307
- POINT 828 4.203342540186773 19.05240159983545
- POINT 829 5.741118267854977 18.12804536094104
- POINT 830 6.25673797974565 19.03299928955596
- POINT 831 8.29058057434478 22.63591511879024
- POINT 832 7.770146987914942 21.73699352712036
- POINT 833 7.761488015053925 23.54966519059946
- POINT 834 8.799876058762283 23.53547258507314
- POINT 835 7.882436851035273 10.77604170622064
- POINT 836 6.821724104311079 10.80083523684094
- POINT 837 8.395897688086761 11.71956812605931
- POINT 838 6.296223612241364 11.72158596648241
- POINT 839 7.863356649653912 12.63144299189585
- POINT 840 6.817753360687178 12.63433121076197
- POINT 841 5.764351471103209 12.64440618203048
- POINT 842 15.41658924936081 7.259168960497591
- POINT 843 14.24561038678537 7.342548392480751
- POINT 844 14.89244912969332 8.12523258985544
- POINT 845 12.07551877984602 9.034284548463294
- POINT 846 13.2074318313694 9.050012371808604
- POINT 847 12.60943811820144 8.176454016117848
- POINT 848 12.13489966336506 10.8019324567901
- POINT 849 11.57772973957951 9.91443462532451
- POINT 850 10.97973602641154 9.040876269633753
- POINT 851 11.96631097541835 7.35863242591423
- POINT 852 11.55167271280977 6.252370796998449
- POINT 853 11.06288680406948 7.054464563856754
- POINT 854 12.169671414375 5.235186923999835
- POINT 855 12.88604184172865 5.817407070591241
- POINT 856 12.61406020569684 4.479514007912766
- POINT 857 13.09822402694172 7.374360249259541
- POINT 858 13.60248324400228 6.524726802277135
- POINT 859 14.05124229732068 5.767551513356759
- POINT 860 17.07578521456617 11.60014693753975
- POINT 861 17.71057756929273 10.70831332876806
- POINT 862 16.58566833102513 10.66595132007714
- POINT 863 16.40667132100974 12.44593062352206
- POINT 864 15.79268502556732 13.36945619674464
- POINT 865 15.36154529735113 12.46837529147962
- POINT 866 17.18577703109811 14.27791621091107
- POINT 867 17.8991747362448 13.49160449707131
- POINT 868 17.50692494278236 12.50122784280477
- POINT 869 18.59468174703889 12.63536765117651
- POINT 870 -5.772905779136106 8.955995570716897
- POINT 871 -6.300233112688748 8.02615691843684
- POINT 872 -4.720892514410153 8.958697172413938
- POINT 873 -2.562097267089574 3.227805457117126
- POINT 874 -2.034944989672938 4.189368100531676
- POINT 875 -0.5151786281004135 7.052714909961791
- POINT 876 -4.495306666907339e-07 8.025902205568261
- POINT 877 -0.5151778044490922 8.96843130178743
- POINT 878 -1.555799685599574 8.971257959564014
- POINT 879 -1.040621823848756 9.913787250944587
- POINT 880 0.5151774122201507 8.968431496948837
- POINT 881 2.806199940197374e-07 11.76547179125803
- POINT 882 -0.5212779305555666 12.681392147575
- POINT 883 -2.090230658535098 11.75731647898901
- POINT 884 -1.561899919612723 10.84104288096659
- POINT 885 -0.5212780384622415 10.83821622319001
- POINT 886 0.5212783763839607 10.83821616123602
- POINT 887 -8.95781830977193 7.046847428450418
- POINT 888 -9.535179298628961 6.058061838123082
- POINT 889 -7.885292789837587 7.099198168742546
- POINT 890 -6.342458718450149 4.290639218573956
- POINT 891 -5.664307592746104 3.628355267241409
- POINT 892 -6.833874189380248 3.463718914397889
- POINT 893 -4.115213411606943 4.361615670969387
- POINT 894 -4.656830149629152 5.341664562613124
- POINT 895 -3.599151439420091 5.248004662165036
- POINT 896 -7.4420232035393 2.403268237260354
- POINT 897 -7.917037371317474 1.633712477540171
- POINT 898 -8.120174329243344 3.065552188592901
- POINT 899 0.5061739145443324 5.095155188591381
- POINT 900 -2.929429205988932e-06 4.110781499104045
- POINT 901 -0.5061784339744557 5.09515412002939
- POINT 902 1.528410782732792 5.120759324438823
- POINT 903 0.5061724875148098 3.087534852556564
- POINT 904 1.539499732754256 3.149220199566127
- POINT 905 11.64987528159459 32.70981082487776
- POINT 906 12.51527678005581 32.36521402236142
- POINT 907 12.11081476394826 33.49693513307348
- POINT 908 12.62592549818568 30.65541566530306
- POINT 909 11.59833350965353 30.70821672570382
- POINT 910 14.07320338353421 34.21073365839178
- POINT 911 13.10926757404889 34.07018328539174
- POINT 912 13.91737880453094 33.26989288698078
- POINT 913 12.24386607558766 34.41478008790807
- POINT 914 12.49582536742833 35.61583656588377
- POINT 915 14.16603325158087 23.49720392336359
- POINT 916 15.25549201783124 23.54255456689937
- POINT 917 15.93819784253432 24.42958644855976
- POINT 918 15.08261727346442 25.23797794578346
- POINT 919 16.44107492989185 23.60560830181941
- POINT 920 13.63403317143619 24.36529607436132
- POINT 921 14.0622035158242 25.24143221125088
- POINT 922 16.13661120818988 21.79829183825163
- POINT 923 15.52090046663956 20.86613714002479
- POINT 924 16.09556213763715 19.95056877865242
- POINT 925 17.17857677781561 19.94984061055883
- POINT 926 16.75928560426177 19.02240213286701
- POINT 927 17.431475160555 20.8842781081025
- POINT 928 18.71184721732612 23.47031396269385
- POINT 929 18.87127587281586 22.47222833205418
- POINT 930 19.74963016806416 23.15469636218577
- POINT 931 17.49125494700478 23.6422586667476
- POINT 932 18.10341307466681 21.84121305493807
- POINT 933 16.8085491223017 22.75522678508721
- POINT 934 17.18679122530281 21.83494220317982
- POINT 935 14.51994297887854 32.4240927325463
- POINT 936 13.57878043675709 32.30653817612266
- POINT 937 13.11784095440342 31.51941386792693
- POINT 938 13.68942915488696 30.59673981906429
- POINT 939 11.44016434034826 24.38232842674731
- POINT 940 10.89995079660589 23.50315722068274
- POINT 941 10.83039569528561 25.28468621778976
- POINT 942 9.846922943175489 23.51115996583782
- POINT 943 9.317830383884633 24.42491003764703
- POINT 944 9.800494196258793 25.32311557173736
- POINT 945 8.753447311845587 25.34742819097269
- POINT 946 10.26601262324656 26.20720437111542
- POINT 947 -9.188516399988456 28.09611515482773
- POINT 948 -8.684369462009494 29.07590149020404
- POINT 949 -8.710509152607116 27.19572666107374
- POINT 950 -4.967007708624748 35.55401033082136
- POINT 951 -5.401876338967484 36.44269225860205
- POINT 952 -6.369328080773704 36.26299985249962
- POINT 953 -8.644059727746285 34.74088988879614
- POINT 954 -9.113357089394702 35.59551543427815
- POINT 955 -7.680217086741342 34.8114162753276
- POINT 956 -8.132953504798678 33.74408230964664
- POINT 957 -9.038370913869775 36.59719108141323
- POINT 958 -7.080382952483385 35.61775611998313
- POINT 959 -6.569276729535778 34.62094854083364
- POINT 960 -7.480268437979268 36.45346758699358
- POINT 961 -8.176062522991147 37.03375204912885
- POINT 962 -9.033664824607252 37.8435674405669
- POINT 963 -3.013509432387965 35.67217382596145
- POINT 964 -2.514327020017076 36.73659756517147
- POINT 965 -1.031206014429366 35.70346448021024
- POINT 966 -1.53422388422784 34.73877849312591
- POINT 967 -0.5029838558529507 34.77862759756677
- POINT 968 2.021011022720923 33.78146904341516
- POINT 969 1.514537572276274 32.86007376899397
- POINT 970 1.534226606955332 34.73880977957074
- POINT 971 0.5030257596525753 34.77862798285742
- POINT 972 7.889854101383875e-06 33.81394199577308
- POINT 973 1.536896992374578 27.28673102869031
- POINT 974 2.075897760470205 26.39023244060897
- POINT 975 2.583954155543661 27.30113813950133
- POINT 976 3.556816059688512 30.9375844125214
- POINT 977 4.088202963281139 30.03451158984436
- POINT 978 2.538089668583811 30.96625350361232
- POINT 979 0.5030096425456565 32.87005276973701
- POINT 980 -0.5029999729598695 32.87005238444636
- POINT 981 1.011529709462303 31.91618415766725
- POINT 982 11.21209270722683 28.00048045890696
- POINT 983 10.74402036130729 27.10759328984962
- POINT 984 9.714118862280475 27.14602264379722
- POINT 985 10.66722816097306 28.94237764988668
- POINT 986 9.687978884244082 29.02619593691772
- POINT 987 10.16308044487594 29.92216202427299
- POINT 988 7.660247523983134 29.07171418485961
- POINT 989 8.684369985103768 29.07589903930046
- POINT 990 7.163900427677865 28.15025091012108
- POINT 991 9.188517701200887 28.09611466491416
- POINT 992 8.710509963140158 27.19572574617996
- POINT 993 -4.203342243390184 19.05240175014947
- POINT 994 -3.688659985491623 18.14224967870969
- POINT 995 -3.655895652889911 19.96374384445787
- POINT 996 -4.678030380532469 19.95553239336218
- POINT 997 -2.207829164486162 18.93544342244381
- POINT 998 -2.606070054724741 19.96562592936628
- POINT 999 -5.170740868433548 20.8574752560983
- POINT 1000 -5.702209511142579 21.76039783501424
- POINT 1001 -5.71818745893382 19.94613316178989
- POINT 1002 -6.731544945060238 21.74909188831638
- POINT 1003 -6.222856509367919 22.66141369880462
- POINT 1004 -7.249499434945713 20.83597766954888
- POINT 1005 -7.770146433171051 21.73699353333926
- POINT 1006 -6.749448107249898 19.93494229403985
- POINT 1007 5.802524977371679 7.067405929156367
- POINT 1008 6.85076775285229 7.071731449131153
- POINT 1009 7.387583714762178 6.140445024793657
- POINT 1010 7.885292530186677 7.099193739187982
- POINT 1011 5.762972814506381 5.284127824133605
- POINT 1012 5.246913203874932 6.170518239705588
- POINT 1013 4.656827080953521 5.341663329102365
- POINT 1014 6.932537859928994 5.119490705941448
- POINT 1015 5.123453405055713 2.630543796725044
- POINT 1016 4.686581836917295 1.584872268547702
- POINT 1017 3.780741176469697 1.381516026850165
- POINT 1018 4.380854250247183 0.4856945617800922
- POINT 1019 3.07892064305541 2.323657990883948
- POINT 1020 4.632038965638431 3.457465531916029
- POINT 1021 8.957817564431407 7.046841938024162
- POINT 1022 8.421001602521519 7.978128362361659
- POINT 1023 8.954387418505732 8.883174489212605
- POINT 1024 10.48552585172216 8.043251376985188
- POINT 1025 10.07088758911358 6.936989748069407
- POINT 1026 9.98773681145564 8.923401453846404
- POINT 1027 14.14927330494213 14.3319204116199
- POINT 1028 13.09057086026495 14.36354542779163
- POINT 1029 13.68885655723154 13.42352588087392
- POINT 1030 14.5608425845304 15.25822614311025
- POINT 1031 15.01786739893976 16.19866298162331
- POINT 1032 14.0080124223849 16.21237679705068
- POINT 1033 15.15912828149698 14.31820659619254
- POINT 1034 16.20425430515559 14.29576192823498
- POINT 1035 16.55222028702778 15.22666661035897
- POINT 1036 15.43600191484122 17.16213210717993
- POINT 1037 16.04161877848574 18.09729043987835
- POINT 1038 17.12463341866421 18.09656227178477
- POINT 1039 17.31694506141086 17.15083111331099
- POINT 1040 15.98883207698672 16.2079814532395
- POINT 1041 16.97035480292924 16.19013573591558
- POINT 1042 -9.329106518265187 20.81496648779522
- POINT 1043 -9.8677300853677 19.90262169444576
- POINT 1044 -16.0416184259235 18.09729104090766
- POINT 1045 -16.75928532981814 19.02240250148187
- POINT 1046 -10.94364637205534 16.23848947462534
- POINT 1047 -9.899040221872481 16.25867329662998
- POINT 1048 -9.363918214825187 17.17751899663717
- POINT 1049 -9.882579096952568 18.0821723843123
- POINT 1050 1.561900414029895 10.8410427689158
- POINT 1051 2.609575035489602 10.83288724625605
- POINT 1052 1.04062209494766 9.913787200847779
- POINT 1053 3.135520054646986 9.906088779622188
- POINT 1054 2.596323921451698 8.989091874978008
- POINT 1055 1.555799449866085 8.97125810462861
- POINT 1056 5.241923253953617 13.55582514043971
- POINT 1057 4.714728002752798 14.47325361022883
- POINT 1058 3.143090414259499 13.57017754949987
- POINT 1059 3.667935613371911 12.65182976927697
- POINT 1060 4.720393505507803 12.64307989616015
- POINT 1061 2.105326509092408 15.38069455968688
- POINT 1062 2.670185462451287 16.23272638623747
- POINT 1063 1.606358875586338 16.26050868767612
- POINT 1064 2.628684318059071 14.4693842513393
- POINT 1065 3.683559192157784 14.45370555640881
- POINT 1066 4.200321906552371 15.37246031206826
- POINT 1067 3.682632968769743 16.28839908786602
- POINT 1068 -1.606358493039556 16.26050877577584
- POINT 1069 -2.670185073501789 16.23272654426651
- POINT 1070 -2.105326053234482 15.38069472542052
- POINT 1071 -3.183664984271242 17.16821337539803
- POINT 1072 -2.676212514527244 18.08657689793349
- POINT 1073 -1.70283416326578 17.96140711913215
- POINT 1074 0.6172255840106643 18.01551021964674
- POINT 1075 -0.6172253233165815 18.01551020223283
- POINT 1076 -1.085608673357664 17.16664367772251
- POINT 1077 -0.5207496530903567 16.31461185887652
- POINT 1078 0.5207500444094971 16.31461181097436
- POINT 1079 1.085608997768376 17.16664363752495
- POINT 1080 -16.26819960626571 25.30102864423684
- POINT 1081 -15.0826163587443 25.23797552751852
- POINT 1082 -15.93819691156472 24.42958418138574
- POINT 1083 -15.85270768406584 27.0933844772987
- POINT 1084 -14.85185005261381 27.02384105180678
- POINT 1085 -15.29193868323435 28.00780553873586
- POINT 1086 -14.3922049944544 26.11287497233606
- POINT 1087 -14.06220229975341 25.24143050948495
- POINT 1088 -15.7999041554007 28.93948960494379
- POINT 1089 -16.33689631951905 29.86052605444166
- POINT 1090 -14.74418021093874 30.63117829061417
- POINT 1091 -15.76075609457718 30.75508671479437
- POINT 1092 -16.81445339648837 30.82931935765637
- POINT 1093 -14.25226231286276 29.76718314738296
- POINT 1094 -14.79904652394867 28.86994617945188
- POINT 1095 8.846687614423065 18.09453615000725
- POINT 1096 8.326673584011235 19.01049903790145
- POINT 1097 8.8267249782098 19.91153448810875
- POINT 1098 9.867730626409395 19.90262173424139
- POINT 1099 7.788050050994897 19.92284387971688
- POINT 1100 4.650398721048944 25.41533314105567
- POINT 1101 4.13553988625797 26.36549811509552
- POINT 1102 3.637813758430262 25.45447457738014
- POINT 1103 3.148718616325014 24.57178682998195
- POINT 1104 2.633859781534041 25.52195180402179
- POINT 1105 1.586802618364957 25.50754469321078
- POINT 1106 3.649195445762174 23.59167733893057
- POINT 1107 4.169619811571008 22.67588222314829
- POINT 1108 4.673096959030069 23.58851448755802
- POINT 1109 2.58832552483298 21.77484182477213
- POINT 1110 2.171873936919459 22.8069634498414
- POINT 1111 2.645241468865954 23.65915456557222
- POINT 1112 1.671397107482298 23.78707294089278
- POINT 1113 4.678030658177207 19.95553223402469
- POINT 1114 3.655895895669011 19.96374368425781
- POINT 1115 3.638151155981279 21.77295969648394
- POINT 1116 4.662052669249173 21.76979684511139
- POINT 1117 3.080758382511145 20.86875644673523
- POINT 1118 6.731545438466698 21.74909183518711
- POINT 1119 7.249499895745219 20.83597763799092
- POINT 1120 6.749448501546653 19.93494218778363
- POINT 1121 5.718187824495971 19.94613304783
- POINT 1122 5.702209835567938 21.7603976589167
- POINT 1123 6.222856927737663 22.66141354804614
- POINT 1124 5.17074117997821 20.85747513225235
- POINT 1125 14.88062362045075 11.58118328295605
- POINT 1126 14.26663732500833 12.50470885617862
- POINT 1127 13.20793488033116 12.53633387235034
- POINT 1128 12.69100124091205 11.65676942854059
- POINT 1129 13.22961407056096 10.76267987590455
- POINT 1130 -4.181696757246904 8.041699829461468
- POINT 1131 -3.650599174564211 8.978566896409593
- POINT 1132 -3.626085797421631 7.144811553632946
- POINT 1133 -4.696379137267573 7.124941829637294
- POINT 1134 -2.5963235612001 8.989091731089145
- POINT 1135 -2.070879541800435 8.043735781931989
- POINT 1136 -3.574367948496355 3.363807242843679
- POINT 1137 -3.078930514188047 2.323656929439507
- POINT 1138 -5.123462129635516 2.630546839115701
- POINT 1139 -4.686602709596436 1.584876903295025
- POINT 1140 -4.632046658705416 3.457467143291768
- POINT 1141 -3.780758206397734 1.381518432692542
- POINT 1142 -4.380882064820396 0.4857008521467929
- POINT 1143 -1.537414964648728 7.078318112167635
- POINT 1144 -1.022237926549232 6.10513101172257
- POINT 1145 -2.551004482247714 5.199344992224856
- POINT 1146 -3.092621220269923 6.179393883868594
- POINT 1147 -2.577938840249254 7.096151883692768
- POINT 1148 -1.52841477052277 5.120757322235234
- POINT 1149 -1.565385542453618 12.67566417103727
- POINT 1150 -1.044107338782977 13.59158446540026
- POINT 1151 -1.564857211726638 14.49716672289619
- POINT 1152 -2.628683792188871 14.46938449138686
- POINT 1153 -2.613060066762507 12.66750879681426
- POINT 1154 -3.143089790317201 13.57017791411676
- POINT 1155 -8.941278766903849 5.267200605438743
- POINT 1156 -8.486236698750734 4.246245735265347
- POINT 1157 -7.96706738323741 5.146957735903831
- POINT 1158 -9.094385712909785 3.185795058127813
- POINT 1159 -9.899165223866994 3.622750914152373
- POINT 1160 -9.543111594457244 2.423623277029117
- POINT 1161 -10.05434861414229 5.157349837484599
- POINT 1162 -10.67235893022354 4.140170700800017
- POINT 1163 -11.12311705597741 3.378439779022869
- POINT 1164 -7.38758492759221 6.140449119392674
- POINT 1165 -6.932542859439094 5.119494249219278
- POINT 1166 -5.762976262804949 5.284130602062798
- POINT 1167 -6.850768266039271 7.071734682057993
- POINT 1168 -5.80252525044337 7.067407869086968
- POINT 1169 -5.246914290618097 6.170519593258447
- POINT 1170 10.71672358375953 32.87524392735796
- POINT 1171 9.642413735714634 32.79125514185909
- POINT 1172 11.12118559986708 31.74352281664589
- POINT 1173 9.15793076534775 31.87228668931375
- POINT 1174 9.685932535089496 30.95746811521505
- POINT 1175 10.66518181181848 30.87364982818402
- POINT 1176 15.19791671718209 31.58464847548497
- POINT 1177 15.55917637400988 32.56630552600364
- POINT 1178 15.79990214283926 28.93949698650302
- POINT 1179 16.3368917696794 29.86053599387202
- POINT 1180 15.76074915645257 30.75509875525596
- POINT 1181 16.81444462265249 30.82933310971594
- POINT 1182 14.74417705037517 30.63118830145916
- POINT 1183 14.25226159415743 29.76719009883528
- POINT 1184 14.79904553375937 28.86995223711657
- POINT 1185 -7.660247595099477 29.07171642334552
- POINT 1186 -8.159708535056653 30.00179812550234
- POINT 1187 -6.639239694273195 29.0761486788626
- POINT 1188 -7.163900621226036 28.1502520435643
- POINT 1189 -5.497622619491922 34.55901436086761
- POINT 1190 -4.49518773283885 34.6857363061998
- POINT 1191 -5.579336478117359 32.80510559052856
- POINT 1192 -6.09745675374988 33.75267451621208
- POINT 1193 -6.650990588161214 32.86703977049458
- POINT 1194 -5.700404689242956 23.58012241603744
- POINT 1195 -6.729740123160614 23.56881646933958
- POINT 1196 -7.239035482595526 24.46837386823964
- POINT 1197 -7.761487302720488 23.54966515100682
- POINT 1198 -7.691207402098477 27.22632931678663
- POINT 1199 -6.670199501272196 27.23076157230372
- POINT 1200 -6.172815514826199 26.31659798520196
- POINT 1201 -5.645508733953759 27.24052071197963
- POINT 1202 -8.216808032653276 26.27623618981316
- POINT 1203 -6.702397292590144 25.39718201604923
- POINT 1204 -5.677706525271708 25.40694115572514
- POINT 1205 -7.734144472150017 25.37803069771646
- POINT 1206 -8.753446222658658 25.34742804200357
- POINT 1207 -1.645698721915378 36.58607539347716
- POINT 1208 -2.0975796991282 37.65905758287926
- POINT 1209 -1.630935113652335 38.70247408973233
- POINT 1210 -0.6145331724071246 38.03403837867723
- POINT 1211 -0.6144586935404894 36.62592449791802
- POINT 1212 8.00627890595873e-06 37.50863528601275
- POINT 1213 0.5990148214488246 23.75062706100676
- POINT 1214 -0.5990146744118122 23.75062707718625
- POINT 1215 -1.072382221738135 24.60281821827733
- POINT 1216 1.072382353395319 24.60281817673758
- POINT 1217 0.5144203323314835 25.47109881332476
- POINT 1218 3.58444379142495 29.11804267687441
- POINT 1219 3.080359636161616 28.20371011551553
- POINT 1220 2.549037542711368 29.11196928894155
- POINT 1221 3.619360404257244 27.30721152743419
- POINT 1222 5.129328969085179 28.18223377819683
- POINT 1223 4.619525056731388 29.12625241641835
- POINT 1224 4.631945366875925 27.26807009110972
- POINT 1225 5.645508451085906 27.24052036585816
- POINT 1226 2.034499539717892 30.03893177661523
- POINT 1227 1.530415384454558 29.12459921525634
- POINT 1228 1.519467510327002 30.97888342992712
- POINT 1229 0.5079395805963843 30.98886243067015
- POINT 1230 3.57436036144565 3.363808001711532
- POINT 1231 4.115208087392189 4.361615383325885
- POINT 1232 2.034939451144496 4.189370210393712
- POINT 1233 2.551000814787705 5.199346967166499
- POINT 1234 2.562089764809169 3.227807842293803
- POINT 1235 3.599148476760741 5.248005798897869
- POINT 1236 -8.808534389004958 21.72280081085314
- POINT 1237 -8.290579899119484 22.63591502962064
- POINT 1238 -9.849539984213617 21.7138879840766
- POINT 1239 -8.799875258554394 23.5354724285207
- POINT 1240 -14.05319871993245 21.74107047129854
- POINT 1241 -13.49147167328674 20.83257382131933
- POINT 1242 -13.01772343641998 21.71937768246372
- POINT 1243 -15.07065374632022 18.08797242978403
- POINT 1244 -15.4360015171055 17.16213287055806
- POINT 1245 -14.0080120928104 16.21237758454029
- POINT 1246 -15.01786712752577 16.19866394969555
- POINT 1247 -17.17857644573234 19.94984075163958
- POINT 1248 -17.43147479908956 20.8842778513917
- POINT 1249 -16.09556177105241 19.95056885029135
- POINT 1250 -15.52089992188291 20.86613685530161
- POINT 1251 -15.10160880596872 19.93869860514389
- POINT 1252 -17.18679097624842 21.83494159512092
- POINT 1253 -18.18552489707417 26.14279763280435
- POINT 1254 -17.20417083141572 25.40139287011322
- POINT 1255 -16.3485902785953 26.20978421624601
- POINT 1256 -16.78867890921584 27.19374870317508
- POINT 1257 -17.80065072643519 27.17057660669527
- POINT 1258 -18.72983447894121 27.01379366339507
- POINT 1259 11.95573882194991 19.89979512998055
- POINT 1260 10.91279663445388 19.89738135384383
- POINT 1261 10.41041451927062 18.99394926589576
- POINT 1262 12.50727362976512 18.99615568741801
- POINT 1263 5.677706720839749 25.40694066827868
- POINT 1264 5.179980593012042 24.49591713056331
- POINT 1265 5.700404958820875 23.58012201478103
- POINT 1266 6.729740561719636 23.56881619105143
- POINT 1267 7.239036046137137 24.46837365733434
- POINT 1268 7.691207579082008 27.22632790550661
- POINT 1269 6.670199204699301 27.23076104833079
- POINT 1270 6.172815602490047 26.31659736124369
- POINT 1271 8.216808740161595 26.27623588438967
- POINT 1272 6.702397474453146 25.39718135075132
- POINT 1273 7.734144927787435 25.37803035029934
- POINT 1274 14.36136880606171 10.72072377865549
- POINT 1275 15.45627677840451 10.68439021395649
- POINT 1276 15.49028452683864 8.941107024951828
- POINT 1277 14.33918656687014 9.008056274559546
- POINT 1278 13.80526722851472 9.865886806904992
- POINT 1279 16.06641351663609 9.805491815776586
- POINT 1280 16.64213914845493 8.907696187396814
- POINT 1281 -7.631707103564363 30.91661699613311
- POINT 1282 -8.655828970474381 30.92080206299163
- POINT 1283 -7.130348925755392 31.87754588921673
- POINT 1284 -6.634228490337664 30.95854195172743
- POINT 1285 -9.157930722157598 31.87228935939205
- POINT 1286 -8.612311842392856 32.75458842836879
- POINT 1287 -7.648469201387913 32.82511481490026
- POINT 1288 -2.549229273895434 34.70629607419768
- POINT 1289 -2.021007115319019 33.78145919155421
- POINT 1290 -3.500292663479144 34.71485452438976
- POINT 1291 -4.030907574346319 33.71985855443602
- POINT 1292 -5.179980371060386 24.49591750747982
- POINT 1293 -4.650398593296442 25.41533347663255
- POINT 1294 -3.649195283407097 23.591677514562
- POINT 1295 -3.148718474961619 24.57178698404517
- POINT 1296 -4.673096757267691 23.58851473694486
- POINT 1297 0.5144203594414323 27.2905527635694
- POINT 1298 1.022476754514889 28.20145846246176
- POINT 1299 0.507938751521413 29.12842095013544
- POINT 1300 -9.846921989817281 23.51115965477413
- POINT 1301 -9.317829393418286 24.42490977616031
- POINT 1302 -9.800492953921545 25.323115268257
- POINT 1303 -10.83039438917027 25.28468549874502
- POINT 1304 -10.92764508160684 18.07693196478106
- POINT 1305 -10.41041404191582 18.99394930834161
- POINT 1306 -10.91279607002197 19.89738127491452
- POINT 1307 -11.95573820817218 19.89979496064743
- POINT 1308 -11.41305425162406 20.80846734675159
- POINT 1309 -15.14265757944868 21.78642099994649
- POINT 1310 -14.66890934258192 22.67322486109087
- POINT 1311 -16.13661054453237 21.79829124509394
- POINT 1312 -15.25549093307073 23.54255322720311
- POINT 1313 -14.1660320735545 23.49720269855517
- POINT 1314 -16.80854863381419 22.75522573976579
- POINT 1315 -16.44107418059214 23.60560634392143
- POINT 1316 10.44287685491821 15.3320070852495
- POINT 1317 10.99244953168854 14.41410579688861
- POINT 1318 12.05881853851436 14.38348705047854
- POINT 1319 12.51923528622494 15.29188158122452
- POINT 1320 9.882579552317679 18.08217219529029
- POINT 1321 9.363918655514606 17.17751869900422
- POINT 1322 10.92764556036217 18.07693181489272
- POINT 1323 9.899040669385645 16.25867285543741
- POINT 1324 10.94364677894179 16.23848897409934
- POINT 1325 -0.5144201764050657 27.29055277175395
- POINT 1326 6.145462372320054e-08 26.3758253379825
- POINT 1327 -0.5144202035150144 25.4710988215093
- POINT 1328 -1.586802492614995 25.50754474293507
- POINT 1329 4.053181679175566e-07 30.05156162643644
- POINT 1330 -0.5079373955465308 30.98886235417658
- POINT 1331 -0.5079382246215022 29.12842087364186
- POINT 1332 -12.94362054595454 25.24019426221156
- POINT 1333 -13.63403191024444 24.36529481739402
- POINT 1334 -13.04745031975563 23.49596645128178
- POINT 1335 -11.90568140505247 25.26641628259847
- POINT 1336 -11.44016314056337 24.38232778626718
- POINT 1337 -10.38199561361241 22.61371945416543
- POINT 1338 -10.90256774287263 21.70588513110751
- POINT 1339 -10.8999497484763 23.50315680180504
- POINT 1340 -11.94550988102284 21.70829881684042
- POINT 1341 -11.9752367643585 23.48488758565849
- POINT 1342 -12.50723692766855 22.61679546681964
- POINT 1343 -11.95486088381842 18.07035362542616
- POINT 1344 -11.42702593885517 17.15857670139686
- POINT 1345 -11.97086217426693 16.23191113527045
- POINT 1346 -13.00261454459266 16.21196963584406
- POINT 1347 -13.45963928928449 17.15240631073819
- POINT 1348 -14.04300661306449 19.92893456636063
- POINT 1349 -14.61766846223399 19.01336656135037
- POINT 1350 -14.012051553416 18.07820839100076
- POINT 1351 -13.00753132955202 19.9072417775258
- POINT 1352 -12.50727314794993 18.99615570568874
- POINT 1353 -13.00665400519826 18.07780044230454
- POINT 1354 11.42702639250091 17.15857636716348
- POINT 1355 11.95486135945386 18.07035343776895
- POINT 1356 13.45963971419343 17.15240581280172
- POINT 1357 13.00665446190387 18.07780023968877
- POINT 1358 11.97086257803348 16.23191059697557
- POINT 1359 13.00261489978407 16.21196897428866
- POINT 1360 -4.63194529517035 27.26807044242916
- POINT 1361 -5.129329281616346 28.18223402953092
- POINT 1362 -2.075897664001495 26.39023252420856
- POINT 1363 -2.633859682224616 25.52195192097659
- POINT 1364 -3.619360348222028 27.30721173111527
- POINT 1365 -4.135539800559439 26.36549841356398
- POINT 1366 -3.637813646348119 25.45447476531866
- POINT 1367 -1.530414898263689 29.12459912906478
- POINT 1368 -1.022476552060444 28.20145845276378
- POINT 1369 -2.583954039656873 27.30113820521839
- POINT 1370 -3.080359534267785 28.20371023408358
- POINT 1371 -1.536896850047253 27.28673102717688
- POINT 1372 -4.543158675405131 32.76980075139725
- POINT 1373 -5.096692509816465 31.88416600567974
- POINT 1374 -3.548263606045425 32.79891896958721
- POINT 1375 -2.549037169284093 29.11196922998421
- POINT 1376 -2.034498841845151 30.03893165086228
- POINT 1377 -3.584443477849247 29.11804275588108
- POINT 1378 -1.519465434862823 30.97888306068132
- POINT 1379 -1.011526259584607 31.91618386491503
- POINT 1380 -3.041784503002568 31.8775328689841
- POINT 1381 -2.529533401943756 32.82759067202288
- POINT 1382 -2.538087705883227 30.96625316160074
- POINT 1383 -3.556817909984896 30.93758145916507
- POINT 1384 -1.514528012276162 32.8600730909511
- POINT 1385 -4.088203640533337 30.03451082052263
- POINT 1386 -4.591900437652678 30.94579052790599
- POINT 1387 -6.129436418173878 30.02016647395368
- POINT 1388 -5.628078240364906 30.9810953670373
- POINT 1389 -4.619526005517029 29.126251824622
- POINT 1390 -5.633089444300436 29.09870209417247
+ POINT 5 -5.494590158705203 0.769568933904214
+ POINT 6 -4.555054354703293 0.5256199116454576
+ POINT 7 -3.62510614201392 0.3312784996295808
+ POINT 8 -2.686413338358856 0.1812416288131739
+ POINT 9 -1.753728402849995 0.077037451999329
+ POINT 10 -0.851420720971519 0.01813114404021269
+ POINT 11 0.8514160122311216 0.01813095400480157
+ POINT 12 1.753719324465416 0.07703666291032139
+ POINT 13 2.686401050802698 0.181239963250821
+ POINT 14 3.625091324513498 0.3312757686489166
+ POINT 15 4.555037637659274 0.5256160015391538
+ POINT 16 5.494572548479121 0.7695639022537971
+ POINT 17 -8.14748720023632 1.73477478041978
+ POINT 18 -7.204326158760607 1.342623855477397
+ POINT 19 -6.323306730319925 1.025917887963812
+ POINT 20 -5.012043637681486 1.487026562234344
+ POINT 21 -4.001504680231534 1.348769869720156
+ POINT 22 -3.020446348008669 1.193123454693629
+ POINT 23 -2.033096162687354 1.074468404199018
+ POINT 24 -1.029250259109854 0.9952937048620419
+ POINT 25 -4.743693576426955e-06 0.9550846747893821
+ POINT 26 1.029241591782402 0.9952938914888843
+ POINT 27 2.033087778001799 1.074468514560464
+ POINT 28 3.020437785114206 1.193122951441658
+ POINT 29 4.001495610537607 1.348768371554737
+ POINT 30 5.012033480242295 1.487023534523747
+ POINT 31 6.323291483458299 1.025912806798219
+ POINT 32 7.20431240676467 1.342618545311957
+ POINT 33 8.147472348609107 1.734768155628285
+ POINT 34 -9.874839229995656 2.607830779866931
+ POINT 35 -8.967401898964656 2.123039878590955
+ POINT 36 -7.43893966884391 2.316523461127632
+ POINT 37 -6.505937339794322 2.123067897852342
+ POINT 38 -5.617471023440036 2.128732087831175
+ POINT 39 -4.504938941140685 2.292372023343256
+ POINT 40 -3.474895393652287 2.188889537474249
+ POINT 41 -2.477789827740728 2.069417744488129
+ POINT 42 -1.486533939627704 1.978390111577929
+ POINT 43 -0.4945351927920381 1.920788208193323
+ POINT 44 0.494530028654747 1.920788180673721
+ POINT 45 1.48652903784696 1.978390363793194
+ POINT 46 2.477785286357576 2.069417875067633
+ POINT 47 3.474891314117997 2.188889007881329
+ POINT 48 4.504935616060729 2.292369967247126
+ POINT 49 5.617468616717059 2.128722558769742
+ POINT 50 6.505934206344425 2.123064219351945
+ POINT 51 7.438934955645484 2.316522386860346
+ POINT 52 8.967386714216421 2.123032261658711
+ POINT 53 9.874824441340188 2.607822383246229
+ POINT 54 -11.51772618471706 3.649404184131703
+ POINT 55 -10.65697220336667 3.075788247109521
+ POINT 56 -9.073837487095867 3.098945367911463
+ POINT 57 -8.146481814508759 2.93463496665957
+ POINT 58 -7.049600453276345 3.146247627644996
+ POINT 59 -6.068284496299216 3.100104651100007
+ POINT 60 -5.072988891537222 3.091827459666651
+ POINT 61 -3.993877927928949 3.131132225510109
+ POINT 62 -2.967955349130637 3.051608081751008
+ POINT 63 -1.969358890547338 2.964205195218535
+ POINT 64 -0.9811566490131486 2.90071553814206
+ POINT 65 -1.32163243384692e-06 2.877135624667564
+ POINT 66 0.9811540073798326 2.900715668778548
+ POINT 67 1.969356448130425 2.964205359405151
+ POINT 68 2.967953292680015 3.051607771536507
+ POINT 69 3.993876536191101 3.131130560601491
+ POINT 70 5.07298836313739 3.09182201424316
+ POINT 71 6.06828189330052 3.10009883043144
+ POINT 72 7.049596028910742 3.146246238867447
+ POINT 73 8.146475803362755 2.934633378296194
+ POINT 74 9.073829870567886 3.098941319319342
+ POINT 75 10.65695825761416 3.075779465645408
+ POINT 76 11.51771371828971 3.649395402508161
+ POINT 77 -12.25874124373426 4.197365310835768
+ POINT 78 -10.64940593588828 4.039054822049597
+ POINT 79 -9.738991551137142 3.788828249782045
+ POINT 80 -8.645496432574655 3.944646023442154
+ POINT 81 -7.660083249538626 3.927642758322452
+ POINT 82 -6.59386271210862 4.037468940686985
+ POINT 83 -5.568600019856155 4.018665115993096
+ POINT 84 -4.542276038525629 3.999836078704063
+ POINT 85 -3.491369657240189 3.994992924822852
+ POINT 86 -2.474009349355216 3.935011777572696
+ POINT 87 -1.477288819485819 3.874958764735967
+ POINT 88 -0.4912058119350093 3.84024391890156
+ POINT 89 0.4912045861343114 3.840244004832297
+ POINT 90 1.477287661196852 3.874958892229309
+ POINT 91 2.474008420090503 3.935011605232642
+ POINT 92 3.491369140152303 3.994991746916046
+ POINT 93 4.542275958327673 3.999832734657181
+ POINT 94 5.568598961382722 4.018661009084565
+ POINT 95 6.593859756639968 4.037466906689763
+ POINT 96 7.660079741658018 3.927642484330992
+ POINT 97 8.64549214777098 3.944645135772696
+ POINT 98 9.738984400934594 3.788824210856252
+ POINT 99 10.64939834126311 4.039049114973768
+ POINT 100 12.25873013918693 4.197356696596919
+ POINT 101 -13.06808399305144 4.859815696281542
+ POINT 102 -12.14172415206427 5.120456490850303
+ POINT 103 -11.26850058845588 4.78253504757261
+ POINT 104 -10.17404214944296 4.845047406793981
+ POINT 105 -9.208059651222554 4.766866668801151
+ POINT 106 -8.164339019401956 4.857476344060355
+ POINT 107 -7.149967162775942 4.875867152053067
+ POINT 108 -6.093958019589567 4.926093683238227
+ POINT 109 -5.058077545048842 4.913790131101954
+ POINT 110 -4.028039828119854 4.894648028971938
+ POINT 111 -2.995365612046738 4.876648223313875
+ POINT 112 -1.984673486096534 4.833837916766388
+ POINT 113 -0.9889438049108867 4.797769562520688
+ POINT 114 -2.362747113168751e-07 4.784386125986646
+ POINT 115 0.9889433725237518 4.797769655939185
+ POINT 116 1.984673180431574 4.833837841092998
+ POINT 117 2.995365534870316 4.876647488912344
+ POINT 118 4.028039920473764 4.894645987409467
+ POINT 119 5.05807704187145 4.913787423329794
+ POINT 120 6.09395626231969 4.926092028666856
+ POINT 121 7.149964792987238 4.875866809291987
+ POINT 122 8.164336682555421 4.857476643496101
+ POINT 123 9.208056699547432 4.766865857979807
+ POINT 124 10.17403815454237 4.845044126893953
+ POINT 125 11.26849448251217 4.782529900161253
+ POINT 126 12.14171794981946 5.120450644819872
+ POINT 127 13.06807455950774 4.859807553827244
+ POINT 128 -13.79621135610305 5.520201927590952
+ POINT 129 -12.80117439670994 5.856589459482491
+ POINT 130 -11.67938537881067 5.871675730352508
+ POINT 131 -10.7214199084595 5.705740655756915
+ POINT 132 -9.682832193302595 5.735754340027762
+ POINT 133 -8.688206795148123 5.723107658281122
+ POINT 134 -7.655630079002389 5.775975918064022
+ POINT 135 -6.627659763072258 5.792669306732381
+ POINT 136 -5.582314228446745 5.814411012773447
+ POINT 137 -4.548885425945512 5.805126115268295
+ POINT 138 -3.522722077771634 5.788884500830754
+ POINT 139 -2.501187311366817 5.770380462326169
+ POINT 140 -1.494394371192296 5.742942846788264
+ POINT 141 -0.4971264884626344 5.724801584483487
+ POINT 142 0.4971264114179549 5.724801616093884
+ POINT 143 1.494394375253193 5.742942820679326
+ POINT 144 2.501187449167741 5.770380046330405
+ POINT 145 3.522722282985142 5.788883304381674
+ POINT 146 4.548885254065114 5.80512440450948
+ POINT 147 5.582313237121974 5.814409778421799
+ POINT 148 6.627658274246912 5.792668907910858
+ POINT 149 7.655628672903336 5.775976131426517
+ POINT 150 8.688205683983837 5.723107897941759
+ POINT 151 9.682831053695072 5.735753339275631
+ POINT 152 10.72141774219851 5.705737949417665
+ POINT 153 11.67938249802985 5.871671763668828
+ POINT 154 12.80116985277255 5.856584114327579
+ POINT 155 13.79620361018442 5.52019455095268
+ POINT 156 -15.07551414433484 6.857364294633759
+ POINT 157 -14.47383155813855 6.197529205731446
+ POINT 158 -13.45485475009742 6.553837837714978
+ POINT 159 -12.31042185688016 6.683440243020864
+ POINT 160 -11.21350161895065 6.69819718995942
+ POINT 161 -10.20833342071787 6.628047644175917
+ POINT 162 -9.180105769142591 6.64834742192738
+ POINT 163 -8.167115514052471 6.65576641169878
+ POINT 164 -7.135706515094646 6.685162961807312
+ POINT 165 -6.105345078296335 6.696209760357505
+ POINT 166 -5.069576645378604 6.705314119570696
+ POINT 167 -4.041800732917723 6.698207423904568
+ POINT 168 -3.020761532842517 6.685782557740071
+ POINT 169 -2.005808074374162 6.671737301319939
+ POINT 170 -1.000288933333046 6.656398725132026
+ POINT 171 4.397573777348285e-08 6.650034053590167
+ POINT 172 1.000289057350326 6.656398701633271
+ POINT 173 2.005808282761941 6.671737074424545
+ POINT 174 3.020761779503171 6.685781881995771
+ POINT 175 4.041800760087482 6.698206389869481
+ POINT 176 5.069576162857779 6.705313264812579
+ POINT 177 6.10534421344702 6.69620937563182
+ POINT 178 7.135705654446768 6.685162970448084
+ POINT 179 8.167114943754402 6.655766632853415
+ POINT 180 9.180105544149159 6.648347310133159
+ POINT 181 10.20833306114628 6.628046599517105
+ POINT 182 11.21350079915651 6.698194920239427
+ POINT 183 12.31041989729133 6.683437342390677
+ POINT 184 13.45485102688512 6.553833543240082
+ POINT 185 14.47382501191121 6.197522339217816
+ POINT 186 15.07550853647004 6.85735785101832
+ POINT 187 -15.74070185460795 7.661835423193954
+ POINT 188 -14.74687538651157 7.702960989661571
+ POINT 189 -13.93188920478376 7.345232089754496
+ POINT 190 -12.86506131544698 7.471088086950771
+ POINT 191 -11.77211701495691 7.547677194388092
+ POINT 192 -10.70587046671523 7.565284924165475
+ POINT 193 -9.687660424643854 7.54461386330666
+ POINT 194 -8.662563218479574 7.560951116274378
+ POINT 195 -7.642034647994548 7.571360794157137
+ POINT 196 -6.613518858753616 7.588082984279957
+ POINT 197 -5.586073186048593 7.595112879441636
+ POINT 198 -4.558140690092682 7.598809924577656
+ POINT 199 -3.535939593111036 7.59366155618144
+ POINT 200 -2.519295513626756 7.585207729094968
+ POINT 201 -1.507828110570193 7.576464832977407
+ POINT 202 -0.5019148548267611 7.569504441473947
+ POINT 203 0.5019150140751154 7.569504419051911
+ POINT 204 1.507828313373964 7.576464701318211
+ POINT 205 2.51929574421762 7.58520735259712
+ POINT 206 3.535939709005314 7.593660949468794
+ POINT 207 4.558140510818687 7.598809363042038
+ POINT 208 5.58607274341326 7.595112562629756
+ POINT 209 6.613518369190103 7.588082887213245
+ POINT 210 7.642034309561478 7.571360854887308
+ POINT 211 8.662563167404116 7.560951138691602
+ POINT 212 9.687660573872202 7.54461354186692
+ POINT 213 10.70587058429081 7.565283863779716
+ POINT 214 11.77211666522259 7.547675581264719
+ POINT 215 12.8650605916635 7.471085619230291
+ POINT 216 13.93188849368163 7.345227696048455
+ POINT 217 14.74687398655421 7.702958601368711
+ POINT 218 15.74069772046266 7.661830148963676
+ POINT 219 -16.34008243157374 8.467363435476578
+ POINT 220 -15.28567534644808 8.552905620836993
+ POINT 221 -14.22089501094071 8.468579625245626
+ POINT 222 -13.29774920244363 8.333212052076258
+ POINT 223 -12.27300453476784 8.396001904827241
+ POINT 224 -11.224449672806 8.44025834990769
+ POINT 225 -10.1842020715159 8.457472361197105
+ POINT 226 -9.163914101356678 8.456332255719779
+ POINT 227 -8.14059852678059 8.468750713098206
+ POINT 228 -7.118690004259524 8.477698841262107
+ POINT 229 -6.093911741800466 8.487745637900247
+ POINT 230 -5.070537359203934 8.492297494254309
+ POINT 231 -4.048497389531928 8.493845716618845
+ POINT 232 -3.030710235690668 8.490541970764172
+ POINT 233 -2.017113078017005 8.485534154569866
+ POINT 234 -1.007152862458606 8.481122761690685
+ POINT 235 8.070285670638833e-08 8.479054147646179
+ POINT 236 1.007153037203349 8.481122683637645
+ POINT 237 2.017113267583667 8.485533940823723
+ POINT 238 3.030710370157321 8.490541618084078
+ POINT 239 4.048497363984429 8.493845358028667
+ POINT 240 5.070537168629906 8.49229725406053
+ POINT 241 6.093911495339211 8.487745514844656
+ POINT 242 7.11868981343622 8.477698810261961
+ POINT 243 8.140598491031323 8.468750699179775
+ POINT 244 9.163914246108916 8.456332131143173
+ POINT 245 10.18420232498191 8.457471896486332
+ POINT 246 11.22444978036375 8.440257512134613
+ POINT 247 12.27300442131762 8.396000443618357
+ POINT 248 13.29774885774807 8.333209357606099
+ POINT 249 14.22089386884885 8.468576880391957
+ POINT 250 15.28567398016187 8.552903295969026
+ POINT 251 16.34007933974851 8.46735905480778
+ POINT 252 -16.89879506132182 9.30277019619324
+ POINT 253 -15.84083890009481 9.368103783320413
+ POINT 254 -14.75936630448394 9.376434710940254
+ POINT 255 -13.72667446491556 9.338668036765469
+ POINT 256 -12.7458829592818 9.286293637722791
+ POINT 257 -11.72514144039831 9.317880286978371
+ POINT 258 -10.69307226518711 9.344364735918155
+ POINT 259 -9.663652464211705 9.358107425253532
+ POINT 260 -8.642457994516798 9.362656816289235
+ POINT 261 -7.620361904257799 9.371754129812164
+ POINT 262 -6.599324604837983 9.378698501517102
+ POINT 263 -5.577936443480438 9.385133261260403
+ POINT 264 -4.558210845970175 9.388247898190615
+ POINT 265 -3.540361900824579 9.389121481751587
+ POINT 266 -2.52566238019628 9.387374370414491
+ POINT 267 -1.513887157671833 9.384925984750414
+ POINT 268 -0.504297186178584 9.383298051709803
+ POINT 269 0.5042973320602566 9.383298015668299
+ POINT 270 1.51388730668141 9.384925862954564
+ POINT 271 2.525662501619651 9.387374163645836
+ POINT 272 3.540361939509808 9.389121254735599
+ POINT 273 4.558210789027288 9.388247723190803
+ POINT 274 5.577936342341931 9.385133146588913
+ POINT 275 6.599324518449944 9.378698438465905
+ POINT 276 7.62036189183867 9.371754085979447
+ POINT 277 8.642458092973191 9.362656736309578
+ POINT 278 9.663652671231812 9.358107201585797
+ POINT 279 10.6930724783395 9.344364317591429
+ POINT 280 11.72514158518201 9.31787949717938
+ POINT 281 12.74588295478644 9.286292109076781
+ POINT 282 13.72667400654556 9.338666111495892
+ POINT 283 14.75936532452434 9.376432764986804
+ POINT 284 15.84083766707554 9.368101537096484
+ POINT 285 16.8987927411374 9.302766530916411
+ POINT 286 -17.41541814741128 10.16622093237684
+ POINT 287 -16.36597467943507 10.20674001010058
+ POINT 288 -15.30570510771474 10.23673169382489
+ POINT 289 -14.25334124093768 10.24705991000825
+ POINT 290 -13.22518371810642 10.23169262743967
+ POINT 291 -12.21928286812764 10.21375315134102
+ POINT 292 -11.19741423399891 10.23174369517853
+ POINT 293 -10.17050417537597 10.2482576748095
+ POINT 294 -9.145044199699443 10.25842856407609
+ POINT 295 -8.123750354518931 10.26388718261748
+ POINT 296 -7.10298550942124 10.2706284602633
+ POINT 297 -6.083575083515306 10.2759394046698
+ POINT 298 -5.065015567249327 10.28034882788564
+ POINT 299 -4.048200146803218 10.28265723277545
+ POINT 300 -3.033238075903394 10.28342728339184
+ POINT 301 -2.02054894726801 10.28280355683485
+ POINT 302 -1.009738819288446 10.28194446006377
+ POINT 303 5.919699467074602e-08 10.28162989140187
+ POINT 304 1.009738935910972 10.2819443965436
+ POINT 305 2.020549047902884 10.28280343604998
+ POINT 306 3.033238133655776 10.28342713958931
+ POINT 307 4.048200151873941 10.2826571076832
+ POINT 308 5.065015543299326 10.28034873191634
+ POINT 309 6.083575061485952 10.27593933706552
+ POINT 310 7.102985523625926 10.27062840654225
+ POINT 311 8.123750433256964 10.26388711645833
+ POINT 312 9.14504435731642 10.25842843597803
+ POINT 313 10.17050438210141 10.24825745265531
+ POINT 314 11.19741445812459 10.23174327923734
+ POINT 315 12.21928304966143 10.21375232985006
+ POINT 316 13.22518366386299 10.23169143671009
+ POINT 317 14.25334082737309 10.24705856617686
+ POINT 318 15.30570438725816 10.2367300912412
+ POINT 319 16.36597364727631 10.20673788845324
+ POINT 320 17.41541641117195 10.16621785753401
+ POINT 321 -17.88625803484845 11.05115797933476
+ POINT 322 -16.85120422054986 11.06936232054822
+ POINT 323 -15.81832377296524 11.10623835603135
+ POINT 324 -14.77936586062894 11.12671433185663
+ POINT 325 -13.74209116444094 11.13500853711859
+ POINT 326 -12.71605470869173 11.13080637203836
+ POINT 327 -11.69940028612606 11.12659743667363
+ POINT 328 -10.67625961071982 11.13773567839252
+ POINT 329 -9.651329983156939 11.14840741093704
+ POINT 330 -8.627923790323184 11.15586543586765
+ POINT 331 -7.607383209356573 11.16085887302131
+ POINT 332 -6.588183874293925 11.16597912139563
+ POINT 333 -5.570592864708988 11.17006260278196
+ POINT 334 -4.55434815440509 11.17325037576849
+ POINT 335 -3.539757168979546 11.17505634294026
+ POINT 336 -2.526758778403693 11.17584237662288
+ POINT 337 -1.515331628371982 11.17586700307951
+ POINT 338 -0.5049906539082446 11.17574820189833
+ POINT 339 0.5049907444555864 11.17574817768458
+ POINT 340 1.5153317094028 11.17586693621212
+ POINT 341 2.526758836407911 11.17584228689916
+ POINT 342 3.539757198178682 11.17505625511356
+ POINT 343 4.554348166128215 11.17325029975345
+ POINT 344 5.570592875755479 11.17006254133163
+ POINT 345 6.588183905050538 11.16597906858908
+ POINT 346 7.6073832793965 11.16085881572795
+ POINT 347 8.62792391457109 11.15586535027681
+ POINT 348 9.651330158548348 11.14840727911036
+ POINT 349 10.67625983071012 11.13773544977034
+ POINT 350 11.69940052274761 11.12659700092283
+ POINT 351 12.71605485286965 11.13080569362486
+ POINT 352 13.74209110304109 11.13500768317192
+ POINT 353 14.7793655795263 11.12671327386668
+ POINT 354 15.81832324916032 11.10623695423282
+ POINT 355 16.85120337097398 11.06936033777372
+ POINT 356 17.88625674904034 11.05115540936097
+ POINT 357 -18.30877322305379 11.9508495437846
+ POINT 358 -17.29354589755249 11.94920666314173
+ POINT 359 -16.29455300391288 11.99583596159888
+ POINT 360 -15.27946629704285 12.01498717612042
+ POINT 361 -14.25474205301729 12.02594878618006
+ POINT 362 -13.22681809875847 12.03063506970706
+ POINT 363 -12.20220308495755 12.03009391767082
+ POINT 364 -11.18106431040382 12.03032682581759
+ POINT 365 -10.15753313450907 12.03745704775757
+ POINT 366 -9.134027318052762 12.04457505277963
+ POINT 367 -8.11232875700758 12.05009863957686
+ POINT 368 -7.093073740706956 12.05428798841279
+ POINT 369 -6.075537130934441 12.0582085939917
+ POINT 370 -5.05970021646697 12.06132294542906
+ POINT 371 -4.045326070247903 12.06366127251691
+ POINT 372 -3.032406410591747 12.06506238376489
+ POINT 373 -2.020741740391878 12.06579002116175
+ POINT 374 -1.010099115438543 12.06604601638048
+ POINT 375 3.404314703400746e-08 12.06609631184198
+ POINT 376 1.010099179329847 12.06604598427999
+ POINT 377 2.02074179197248 12.06578996792154
+ POINT 378 3.032406446294575 12.06506232425981
+ POINT 379 4.045326095644757 12.06366121500955
+ POINT 380 5.059700241198946 12.06132289396818
+ POINT 381 6.075537167668678 12.05820854699794
+ POINT 382 7.093073802862654 12.05428793944949
+ POINT 383 8.112328856771683 12.05009857666489
+ POINT 384 9.134027460561303 12.04457496575233
+ POINT 385 10.15753332314846 12.03745691162176
+ POINT 386 11.18106453668301 12.03032658694119
+ POINT 387 12.20220329614919 12.03009354250335
+ POINT 388 13.22681822001311 12.03063456472911
+ POINT 389 14.25474204169832 12.02594812574046
+ POINT 390 15.27946612080948 12.01498628420012
+ POINT 391 16.29455261172639 11.99583469575495
+ POINT 392 17.29354519100736 11.94920477604054
+ POINT 393 18.30877230037898 11.95084744504889
+ POINT 394 -18.68349051939805 12.86367167154098
+ POINT 395 -17.69955044194535 12.83783554399056
+ POINT 396 -16.74680072099509 12.90757935532751
+ POINT 397 -15.76140667037218 12.9221400730053
+ POINT 398 -14.75567094155959 12.92630257350449
+ POINT 399 -13.73682065989795 12.92743559025777
+ POINT 400 -12.71214391446095 12.92742694362712
+ POINT 401 -11.68737838806575 12.92678450620815
+ POINT 402 -10.66414648577376 12.92775785019992
+ POINT 403 -9.640754341022918 12.93234383939904
+ POINT 404 -8.618552582613498 12.93719911566106
+ POINT 405 -7.598448596921033 12.94129728244754
+ POINT 406 -6.580657830892998 12.94461961735053
+ POINT 407 -5.564721623493883 12.94754856845896
+ POINT 408 -4.550449594156615 12.94982267896038
+ POINT 409 -3.537564068386769 12.95146460765515
+ POINT 410 -2.525883376596742 12.95246017188719
+ POINT 411 -1.515118380882561 12.95300971020892
+ POINT 412 -0.5049676356087293 12.95322346487957
+ POINT 413 0.5049676844956841 12.95322345397402
+ POINT 414 1.515118423968893 12.95300968152577
+ POINT 415 2.525883411194239 12.95246013386642
+ POINT 416 3.537564097060069 12.95146456643065
+ POINT 417 4.550449622545449 12.94982263848316
+ POINT 418 5.56472165978088 12.9475485292704
+ POINT 419 6.580657884493699 12.94461957666239
+ POINT 420 7.598448677339204 12.9412972341219
+ POINT 421 8.618552696870632 12.93719905370227
+ POINT 422 9.640754495709061 12.93234375105686
+ POINT 423 10.66414668192525 12.927757709954
+ POINT 424 11.6873786049825 12.9267842939533
+ POINT 425 12.7121441131643 12.92742665289655
+ POINT 426 13.73682080368874 12.92743519895239
+ POINT 427 14.75567099253752 12.92630202967495
+ POINT 428 15.76140658474425 12.92213928078801
+ POINT 429 16.74680044196923 12.90757816273018
+ POINT 430 17.69954984610879 12.8378336756992
+ POINT 431 18.6834899076131 12.8636700698384
+ POINT 432 -19.02238328735229 13.82351766220752
+ POINT 433 -18.13955550450578 13.72808332961303
+ POINT 434 -17.24747413019177 13.83334150399983
+ POINT 435 -16.27671854460964 13.8444824687452
+ POINT 436 -15.27456079944098 13.83853174040222
+ POINT 437 -14.25616310884793 13.83020331307981
+ POINT 438 -13.22989658164751 13.82408308329856
+ POINT 439 -12.20135161049109 13.82071634572721
+ POINT 440 -11.17413867021331 13.81944883534201
+ POINT 441 -10.14926702413137 13.8202526514499
+ POINT 442 -9.126057836010542 13.82327629540207
+ POINT 443 -8.104996732868651 13.82665424545745
+ POINT 444 -7.086340525468896 13.82965017200467
+ POINT 445 -6.069982091125469 13.83211598100588
+ POINT 446 -5.055493375580907 13.83414727908586
+ POINT 447 -4.042551432867163 13.8356365177082
+ POINT 448 -3.030821469833524 13.83664074843842
+ POINT 449 -2.020032225634883 13.83720573920392
+ POINT 450 -1.009850751894021 13.83750425714042
+ POINT 451 1.810922449496655e-08 13.83759275454394
+ POINT 452 1.009850786298219 13.83750424406298
+ POINT 453 2.020032256013255 13.83720571680718
+ POINT 454 3.030821497136831 13.83664072069242
+ POINT 455 4.042551460337563 13.83563648775698
+ POINT 456 5.055493408535647 13.83414724818297
+ POINT 457 6.069982136283464 13.83211594828056
+ POINT 458 7.086340590263971 13.82965013439014
+ POINT 459 8.10499682427386 13.82665419928439
+ POINT 460 9.126057961450252 13.82327623361172
+ POINT 461 10.14926718918715 13.82025256130822
+ POINT 462 11.17413887129433 13.81944870576308
+ POINT 463 12.20135183449013 13.82071617071633
+ POINT 464 13.2298968126255 13.82408284872117
+ POINT 465 14.25616332583766 13.83020298488662
+ POINT 466 15.27456097333428 13.83853124901386
+ POINT 467 16.27671863417596 13.84448169655714
+ POINT 468 17.24747406497697 13.8333402848443
+ POINT 469 18.13955510497579 13.72808140596411
+ POINT 470 19.02238297028846 13.82351668571184
+ POINT 471 -19.27564676568709 14.66619818849089
+ POINT 472 -18.09766041208614 14.63187219093411
+ POINT 473 -16.95614347083327 14.72460549592841
+ POINT 474 -15.86921119998628 14.73780837074977
+ POINT 475 -14.81075412562909 14.72985007775523
+ POINT 476 -13.76486885106658 14.71947853532306
+ POINT 477 -12.72555276796724 14.71230313005461
+ POINT 478 -11.69126114605113 14.70886227379599
+ POINT 479 -10.66153612521807 14.70791746350395
+ POINT 480 -9.635755859587105 14.70873065251559
+ POINT 481 -8.613020109485847 14.71088365791704
+ POINT 482 -7.593121578733488 14.71326619553437
+ POINT 483 -6.575848554049146 14.71535684285003
+ POINT 484 -5.560852653819958 14.71698338764731
+ POINT 485 -4.547650629124863 14.71814844465915
+ POINT 486 -3.535804015609155 14.71887158153257
+ POINT 487 -2.524929077240439 14.71927025322356
+ POINT 488 -1.51473317861481 14.71940316393901
+ POINT 489 -0.5048698269273962 14.71947361417091
+ POINT 490 0.5048698535429671 14.71947360989954
+ POINT 491 1.514733203827875 14.71940315211682
+ POINT 492 2.524929101236818 14.7192702358374
+ POINT 493 3.535804040216305 14.718871560705
+ POINT 494 4.547650657766261 14.71814842161689
+ POINT 495 5.560852691237506 14.71698336234047
+ POINT 496 6.575848605965658 14.71535681381056
+ POINT 497 7.593121651312162 14.71326616047178
+ POINT 498 8.613020209763325 14.71088361248173
+ POINT 499 9.635755994552092 14.70873058948735
+ POINT 500 10.66153629879202 14.70791737591909
+ POINT 501 11.6912613588511 14.70886215652677
+ POINT 502 12.72555302053373 14.71230297372473
+ POINT 503 13.76486914422805 14.71947831783373
+ POINT 504 14.81075446037261 14.72984974915426
+ POINT 505 15.86921157538354 14.73780783221082
+ POINT 506 16.95614383875429 14.72460459306813
+ POINT 507 18.09766051890814 14.63187085031223
+ POINT 508 19.27564662677329 14.66619768647507
+ POINT 509 -19.50127447943532 15.56149871265921
+ POINT 510 -18.49586950943177 15.47325546362292
+ POINT 511 -17.47213216627488 15.54874531288023
+ POINT 512 -16.40580641559685 15.60593665709938
+ POINT 513 -15.34601737544395 15.61677435076866
+ POINT 514 -14.2947172695349 15.61000643038673
+ POINT 515 -13.24977965914606 15.60136804308813
+ POINT 516 -12.21061092357855 15.59603464741921
+ POINT 517 -11.1766690651603 15.59374881308825
+ POINT 518 -10.14751831522785 15.59340802755161
+ POINT 519 -9.122560414444946 15.59426088206107
+ POINT 520 -8.101062346441838 15.595824538575
+ POINT 521 -7.082603470679119 15.59741857217645
+ POINT 522 -6.066776863361147 15.59867868119486
+ POINT 523 -5.053111971733885 15.59945020989904
+ POINT 524 -4.041063833280758 15.59972861882586
+ POINT 525 -3.030084669706362 15.599680671072
+ POINT 526 -2.019763038193452 15.59951607389083
+ POINT 527 -1.009857003554932 15.59925577449675
+ POINT 528 1.024755921091858e-08 15.599193476494
+ POINT 529 1.009857023845601 15.59925576915614
+ POINT 530 2.019763058357887 15.59951606388146
+ POINT 531 3.030084690801801 15.59968065751039
+ POINT 532 4.041063857507812 15.59972860263055
+ POINT 533 5.053112002382292 15.59945019127528
+ POINT 534 6.066776904670986 15.59867865945828
+ POINT 535 7.082603527619012 15.59741854590029
+ POINT 536 8.101062424891389 15.59582450492322
+ POINT 537 9.122560520746296 15.59426083642217
+ POINT 538 10.14751845483047 15.59340796487829
+ POINT 539 11.17666924233262 15.59374872859052
+ POINT 540 12.21061114276325 15.59603453344294
+ POINT 541 13.24977992549936 15.60136788386504
+ POINT 542 14.29471758842084 15.61000619229367
+ POINT 543 15.34601774658832 15.61677396966515
+ POINT 544 16.40580680537335 15.60593604543914
+ POINT 545 17.47213241791181 15.54874447015032
+ POINT 546 18.4958693388047 15.47325456203676
+ POINT 547 19.50127443887344 15.56149853444409
+ POINT 548 -19.69120777770086 16.49909493767488
+ POINT 549 -18.82453814407551 16.39668162048823
+ POINT 550 -17.91856863118067 16.45118061991079
+ POINT 551 -16.92410838554749 16.48124398607248
+ POINT 552 -15.88164018773895 16.50096422915104
+ POINT 553 -14.82887068531301 16.49821045669536
+ POINT 554 -13.77807911254733 16.48886297653494
+ POINT 555 -12.7333784111039 16.48193539493605
+ POINT 556 -11.69485118291488 16.47821714148055
+ POINT 557 -10.66193355150254 16.47685701531462
+ POINT 558 -9.634017284309458 16.47687882871921
+ POINT 559 -8.610421523166179 16.47761153274202
+ POINT 560 -7.59043875501705 16.47862741976457
+ POINT 561 -6.573526910504127 16.47948404375377
+ POINT 562 -5.55916420169899 16.47991242318579
+ POINT 563 -4.546789160014427 16.4797742368711
+ POINT 564 -3.535766395032657 16.47908711802946
+ POINT 565 -2.525390013898583 16.4782315399178
+ POINT 566 -1.515222446789751 16.47755978237018
+ POINT 567 -0.505160915759866 16.47693907152057
+ POINT 568 0.5051609320854129 16.4769390697559
+ POINT 569 1.515222463409069 16.47755977720512
+ POINT 570 2.525390031591372 16.47823153173884
+ POINT 571 3.535766415254718 16.47908710738646
+ POINT 572 4.546789185065328 16.47977422398127
+ POINT 573 5.559164234676066 16.47991240775378
+ POINT 574 6.573526955235264 16.47948402492305
+ POINT 575 7.590438816148497 16.47862739571796
+ POINT 576 8.610421605901228 16.47761150046795
+ POINT 577 9.634017393679581 16.47687878455547
+ POINT 578 10.66193369197147 16.47685695525197
+ POINT 579 11.6948513586376 16.47821705943312
+ POINT 580 12.73337862581002 16.48193527915152
+ POINT 581 13.77807936895742 16.48886280392126
+ POINT 582 14.82887098061904 16.49821018706623
+ POINT 583 15.88164049446434 16.50096381647671
+ POINT 584 16.92410861282034 16.48124342897973
+ POINT 585 17.91856863399398 16.45118006156937
+ POINT 586 18.82453798513463 16.39668072056363
+ POINT 587 19.69120781864528 16.4990951679711
+ POINT 588 -19.82328465846074 17.34719293018973
+ POINT 589 -18.68356651268673 17.31043580953861
+ POINT 590 -17.56673240514328 17.36123106358058
+ POINT 591 -16.47414590791442 17.37598986974012
+ POINT 592 -15.39064716739153 17.37819173206542
+ POINT 593 -14.32006602394481 17.37102412556857
+ POINT 594 -13.2634493215721 17.36491520744474
+ POINT 595 -12.21741851257929 17.36094404730209
+ POINT 596 -11.17940525689727 17.35901220028596
+ POINT 597 -10.14779283686373 17.35850451428117
+ POINT 598 -9.121467989502685 17.35873940174785
+ POINT 599 -8.09954906046551 17.35924582268215
+ POINT 600 -7.081277449497645 17.35971278396684
+ POINT 601 -6.066028455702323 17.35983944191427
+ POINT 602 -5.053197717776997 17.35940141983762
+ POINT 603 -4.042124698542789 17.35824695931711
+ POINT 604 -3.032009115389205 17.3564023422576
+ POINT 605 -2.021821824817601 17.35459015065573
+ POINT 606 -1.011040264187739 17.35340280443575
+ POINT 607 6.814640345076395e-09 17.35243938843107
+ POINT 608 1.011040278028748 17.35340280223508
+ POINT 609 2.021821839659843 17.35459014619961
+ POINT 610 3.032009132287029 17.35640233585637
+ POINT 611 4.042124719169761 17.35824695109229
+ POINT 612 5.053197744437713 17.35940140968951
+ POINT 613 6.066028491348846 17.35983942938084
+ POINT 614 7.081277497793296 17.35971276796347
+ POINT 615 8.099549125655424 17.35924580133723
+ POINT 616 9.121468076013995 17.3587393726077
+ POINT 617 10.14779294895601 17.35850447445268
+ POINT 618 11.17940539853177 17.3590121455207
+ POINT 619 12.21741868699975 17.36094396965026
+ POINT 620 13.26344953055692 17.36491509096027
+ POINT 621 14.32006626614396 17.37102394370543
+ POINT 622 15.39064742969177 17.37819145776436
+ POINT 623 16.47414614962407 17.37598951033426
+ POINT 624 17.56673257253595 17.36123068035427
+ POINT 625 18.68356665984462 17.31043516903573
+ POINT 626 19.82328469438627 17.3471931986458
+ POINT 627 -19.92361530225037 18.25370297831815
+ POINT 628 -19.07203628626812 18.19876552320404
+ POINT 629 -18.09128424245282 18.22378292531755
+ POINT 630 -17.02794564635327 18.24352791034031
+ POINT 631 -15.94398258752478 18.24421394845224
+ POINT 632 -14.86112859360125 18.24245684590457
+ POINT 633 -13.79465161119509 18.24206223663435
+ POINT 634 -12.74159853322912 18.24073858102732
+ POINT 635 -11.698529613906 18.23959715961889
+ POINT 636 -10.66316644369302 18.23915626546558
+ POINT 637 -9.633977641977911 18.2392237253931
+ POINT 638 -8.609886644138397 18.23947670834334
+ POINT 639 -7.590062391072585 18.23966317253559
+ POINT 640 -6.573799873479021 18.2395756905061
+ POINT 641 -5.560467629070432 18.23897213290731
+ POINT 642 -4.549395686991836 18.2375962202419
+ POINT 643 -3.53974763298982 18.23518325778423
+ POINT 644 -2.530321009293305 18.23165172954483
+ POINT 645 -1.519299961772805 18.22830303022641
+ POINT 646 -0.5061568241133134 18.22651105869159
+ POINT 647 0.5061568361746052 18.22651105818931
+ POINT 648 1.519299974627625 18.2283030281956
+ POINT 649 2.530321023719614 18.23165172623696
+ POINT 650 3.539747650302188 18.23518325320082
+ POINT 651 4.549395708977971 18.23759621436859
+ POINT 652 5.560467658068336 18.23897212554887
+ POINT 653 6.573799912439206 18.23957568110988
+ POINT 654 7.590062443504756 18.23966316006795
+ POINT 655 8.609886713904036 18.23947669135741
+ POINT 656 9.633977733038876 18.23922370211182
+ POINT 657 10.66316655986387 18.23915623336316
+ POINT 658 11.69852975826159 18.23959711417069
+ POINT 659 12.74159870680618 18.24073851295247
+ POINT 660 13.79465181041776 18.24206212883075
+ POINT 661 14.86112880502805 18.24245668253721
+ POINT 662 15.94398277539668 18.24421374106404
+ POINT 663 17.02794575643996 18.24352769585881
+ POINT 664 18.09128426867969 18.22378260511285
+ POINT 665 19.07203607838779 18.19876510589028
+ POINT 666 19.92361533574309 18.25370336043873
+ POINT 667 -19.9802449810712 19.11128711446231
+ POINT 668 -18.80619197016033 19.09425379941037
+ POINT 669 -17.66225403113433 19.09510203515607
+ POINT 670 -16.52583190669753 19.09866237624121
+ POINT 671 -15.41432354959155 19.0986301021614
+ POINT 672 -14.33063667844831 19.1105065301146
+ POINT 673 -13.26794614671815 19.11638402180332
+ POINT 674 -12.21904679432654 19.11829199267038
+ POINT 675 -11.17975304147024 19.11894075428319
+ POINT 676 -10.14765766280284 19.11928688527702
+ POINT 677 -9.121321606407902 19.1195239082655
+ POINT 678 -8.099811768765214 19.11961774535636
+ POINT 679 -7.082440474765014 19.11946501955149
+ POINT 680 -6.068617555176951 19.11889174400767
+ POINT 681 -5.057733760576324 19.11759686938207
+ POINT 682 -4.048951495282913 19.11510440717879
+ POINT 683 -3.040860967573059 19.11069978972926
+ POINT 684 -2.031062116367802 19.10382972217813
+ POINT 685 -1.01638199358576 19.09746934675944
+ POINT 686 5.469910147222479e-09 19.09799582548251
+ POINT 687 1.016382005544462 19.09746934612121
+ POINT 688 2.031062129425211 19.10382972109414
+ POINT 689 3.040860982727736 19.11069978795467
+ POINT 690 4.048951514001514 19.1151044047146
+ POINT 691 5.057733784810108 19.11759686619456
+ POINT 692 6.06861758741177 19.11889173991558
+ POINT 693 7.082440518000469 19.11946501414825
+ POINT 694 8.099811826393989 19.11961773801307
+ POINT 695 9.121321682045322 19.11952389818466
+ POINT 696 10.14765776004377 19.11928687136565
+ POINT 697 11.1797531633058 19.11894073468605
+ POINT 698 12.21904694182174 19.11829196363125
+ POINT 699 13.26794631623689 19.11638397571452
+ POINT 700 14.33063685706478 19.11050645765263
+ POINT 701 15.41432371433398 19.09863001492938
+ POINT 702 16.52583203632977 19.09866230844884
+ POINT 703 17.6622541458637 19.09510191838969
+ POINT 704 18.80619204599507 19.09425361367645
+ POINT 705 19.9802449892912 19.11128730390016
+ POINT 706 -19.18788556876717 20.00005139493198
+ POINT 707 -18.23752403849579 19.99984302247159
+ POINT 708 -17.29064226017514 19.99925376166535
+ POINT 709 -16.47440002277868 20.00254940092639
+ POINT 710 -15.69589026095225 19.99922347246529
+ POINT 711 -14.75829776969549 19.99999149402495
+ POINT 712 -13.75224907606844 20.00002238976034
+ POINT 713 -12.72358628344629 20.00001314522074
+ POINT 714 -11.69063170189132 20.00000296247429
+ POINT 715 -10.65968425579931 19.99999907815186
+ POINT 716 -9.632679418332129 19.99999847573628
+ POINT 717 -8.610092788959356 19.9999987802438
+ POINT 718 -7.592007815489902 19.99999919201484
+ POINT 719 -6.578584325048967 19.99999952078446
+ POINT 720 -5.570430449173512 19.99999973968279
+ POINT 721 -4.569141973011657 19.99999986982209
+ POINT 722 -3.578262228261103 19.99999994088966
+ POINT 723 -2.605187956284842 19.99999997690123
+ POINT 724 -1.66466516281073 19.99999999380757
+ POINT 725 -0.7826655107941599 20.0000000016338
+ POINT 726 0.7826655154907771 20.00000000163381
+ POINT 727 1.664665170888243 19.99999999380764
+ POINT 728 2.605187967544461 19.99999997690146
+ POINT 729 3.578262243238 19.99999994089031
+ POINT 730 4.569141992985899 19.9999998698238
+ POINT 731 5.570430476094784 19.99999973968696
+ POINT 732 6.578584361468833 19.999999520794
+ POINT 733 7.592007864442903 19.99999919203552
+ POINT 734 8.610092853801689 19.99999878028637
+ POINT 735 9.632679502529101 19.99999847581969
+ POINT 736 10.6596843624034 19.99999907830713
+ POINT 737 11.69063183223476 20.00000296274612
+ POINT 738 12.72358643409481 20.00001314569264
+ POINT 739 13.75224923254777 20.00002239071156
+ POINT 740 14.75829790050601 19.99999149614534
+ POINT 741 15.69589033419841 19.99922348070548
+ POINT 742 16.47440003681302 20.0025493901109
+ POINT 743 17.29064231060998 19.99925377353345
+ POINT 744 18.23752405131307 19.99984302941273
+ POINT 745 19.18788543351031 20.00005138833587
+ POINT 746 -19.98023779283576 20.88887437456774
+ POINT 747 -18.80580843557483 20.90547874653299
+ POINT 748 -17.66161201461446 20.90415650737443
+ POINT 749 -16.52591330812703 20.90273438014319
+ POINT 750 -15.41490978144221 20.90067949213849
+ POINT 751 -14.33087263381866 20.8894508385836
+ POINT 752 -13.26804240623713 20.88362475434566
+ POINT 753 -12.21908307283113 20.88171102490173
+ POINT 754 -11.1797653194024 20.88105596204579
+ POINT 755 -10.14766089752007 20.88070896143329
+ POINT 756 -9.121321787680523 20.8804729634606
+ POINT 757 -8.099811171529218 20.88038023214702
+ POINT 758 -7.082439863957721 20.88053378104001
+ POINT 759 -6.068617118328885 20.88110759648338
+ POINT 760 -5.057733492537352 20.88240279408681
+ POINT 761 -4.048951345696993 20.88489543523155
+ POINT 762 -3.040860889905527 20.88930014517067
+ POINT 763 -2.031062079165233 20.89617025723036
+ POINT 764 -1.016381979500983 20.90253065295888
+ POINT 765 5.469943456515303e-09 20.90200417751546
+ POINT 766 1.016381991459812 20.90253065359715
+ POINT 767 2.03106209222298 20.89617025831457
+ POINT 768 3.040860905061069 20.88930014694594
+ POINT 769 4.048951364417659 20.88489543769765
+ POINT 770 5.057733516775839 20.8824027972792
+ POINT 771 6.06861715057387 20.88110760058708
+ POINT 772 7.082439907213993 20.88053378646916
+ POINT 773 8.099811229198181 20.8803802395451
+ POINT 774 9.121321863390992 20.88047297365156
+ POINT 775 10.14766099488602 20.88070897555551
+ POINT 776 11.17976544143952 20.88105598202432
+ POINT 777 12.21908322063199 20.88171105459812
+ POINT 778 13.26804257619063 20.88362480166985
+ POINT 779 14.33087281298531 20.88945091392941
+ POINT 780 15.41490994607966 20.90067958866326
+ POINT 781 16.52591344201236 20.90273444864004
+ POINT 782 17.66161214257477 20.90415664260873
+ POINT 783 18.80580852434392 20.90547893935344
+ POINT 784 19.98023780197282 20.88887416458981
+ POINT 785 -19.92358828250518 21.74660526428339
+ POINT 786 -19.07217434439901 21.80073889981208
+ POINT 787 -18.09112945874565 21.77562907330344
+ POINT 788 -17.02812405581322 21.75701137151901
+ POINT 789 -15.94366066593676 21.75622850710521
+ POINT 790 -14.86126409690214 21.75722234436677
+ POINT 791 -13.79471434661022 21.75787709872358
+ POINT 792 -12.74162038561464 21.75924454538805
+ POINT 793 -11.69853414597164 21.7603937981996
+ POINT 794 -10.66316512661045 21.76083746123114
+ POINT 795 -9.633974994254842 21.76077236820268
+ POINT 796 -8.609884257109169 21.76052103489894
+ POINT 797 -7.590060667734138 21.76033556874065
+ POINT 798 -6.573798770236956 21.76042363684251
+ POINT 799 -5.560466980079595 21.76102752854904
+ POINT 800 -4.549395330869891 21.76240362299502
+ POINT 801 -3.53974744971968 21.76481667916055
+ POINT 802 -2.5303209212877 21.76834825283947
+ POINT 803 -1.519299924135361 21.77169697292803
+ POINT 804 -0.5061568134041036 21.7734889506532
+ POINT 805 0.5061568254655004 21.77348895115548
+ POINT 806 1.519299936990494 21.77169697495886
+ POINT 807 2.530320935714927 21.76834825614754
+ POINT 808 3.539747467034398 21.76481668374473
+ POINT 809 4.549395352861634 21.76240362887052
+ POINT 810 5.560467009090089 21.76102753591302
+ POINT 811 6.573798809223865 21.76042364625162
+ POINT 812 7.590060720219843 21.76033558123638
+ POINT 813 8.609884326976061 21.76052105194263
+ POINT 814 9.633975085497147 21.76077239159665
+ POINT 815 10.66316524309085 21.76083749354136
+ POINT 816 11.69853429083621 21.7603938440048
+ POINT 817 12.74162056001178 21.75924461407503
+ POINT 818 13.79471454718983 21.75787720786278
+ POINT 819 14.86126431068448 21.75722251199929
+ POINT 820 15.94366086082416 21.756228717586
+ POINT 821 17.02812417119083 21.75701159238045
+ POINT 822 18.09112949141926 21.77562941392504
+ POINT 823 19.07217412140869 21.80073933755012
+ POINT 824 19.92358831980405 21.74660483881377
+ POINT 825 -19.823263456196 22.65296550038718
+ POINT 826 -18.68347167777789 22.6889724670474
+ POINT 827 -17.5669100312704 22.63883478838346
+ POINT 828 -16.47409263224828 22.6242054542872
+ POINT 829 -15.3904367336017 22.62202395225419
+ POINT 830 -14.32006894483515 22.62885094013076
+ POINT 831 -13.26345062953686 22.63505078113978
+ POINT 832 -12.21741436155782 22.63904422561734
+ POINT 833 -11.17939965412427 22.64098178723362
+ POINT 834 -10.14778782482358 22.64149205572087
+ POINT 835 -9.121464141616515 22.64125877788618
+ POINT 836 -8.099546383139796 22.64075324216461
+ POINT 837 -7.081275727631735 22.64028674537108
+ POINT 838 -6.066027421514116 22.64016033445862
+ POINT 839 -5.053197134698077 22.64059848599732
+ POINT 840 -4.042124389521369 22.64175301143073
+ POINT 841 -3.032008961880832 22.64359765889142
+ POINT 842 -2.021821754586955 22.64540986356159
+ POINT 843 -1.011040237264479 22.64659721372332
+ POINT 844 6.814665224480487e-09 22.6475606308115
+ POINT 845 1.011040251105664 22.64659721592393
+ POINT 846 2.021821769429846 22.64540986801763
+ POINT 847 3.032008978780493 22.6435976652927
+ POINT 848 4.042124410152931 22.64175301965603
+ POINT 849 5.053197161369463 22.64059849614706
+ POINT 850 6.066027457183961 22.64016034699624
+ POINT 851 7.081275775975558 22.6402867613839
+ POINT 852 8.099546448423908 22.64075326352899
+ POINT 853 9.121464228302864 22.64125880706316
+ POINT 854 10.14778793722731 22.64149209561295
+ POINT 855 11.17939979629603 22.64098184209338
+ POINT 856 12.21741453689023 22.6390443033786
+ POINT 857 13.26345084008729 22.63505089777322
+ POINT 858 14.32006918987354 22.62885112279828
+ POINT 859 15.39043700219516 22.62202422695843
+ POINT 860 16.47409288234377 22.62420581860266
+ POINT 861 17.56691020844972 22.63883518337205
+ POINT 862 18.68347184009588 22.68897314250563
+ POINT 863 19.82326349779923 22.652965189523
+ POINT 864 -19.69117813060965 23.501071811403
+ POINT 865 -18.8246775584696 23.60270488921595
+ POINT 866 -17.91872317447207 23.54877686754418
+ POINT 867 -16.92421077812897 23.51878118738913
+ POINT 868 -15.88162933414794 23.49913833184728
+ POINT 869 -14.82876942700178 23.5019021870122
+ POINT 870 -13.77806312245109 23.51109818218014
+ POINT 871 -12.7333690497193 23.51805365247506
+ POINT 872 -11.69484326979592 23.5217794620292
+ POINT 873 -10.661927166753 23.52314139532949
+ POINT 874 -9.634012473512842 23.52312044026287
+ POINT 875 -8.610418120559023 23.52238820743955
+ POINT 876 -7.590436502923668 23.52137251796749
+ POINT 877 -6.573525514872875 23.52051596810155
+ POINT 878 -5.559163390593181 23.52008761426355
+ POINT 879 -4.54678871790041 23.52022580633416
+ POINT 880 -3.535766169521851 23.52091292302367
+ POINT 881 -2.525389907129223 23.5217684966976
+ POINT 882 -1.515222401501546 23.52244024975234
+ POINT 883 -0.505160903546754 23.52306095823609
+ POINT 884 0.5051609198722887 23.52306096000069
+ POINT 885 1.515222418121158 23.52244025491717
+ POINT 886 2.525389924823131 23.52176850487623
+ POINT 887 3.535766189747005 23.52091293366626
+ POINT 888 4.546788742958842 23.52022581922355
+ POINT 889 5.559163423587246 23.52008762969507
+ POINT 890 6.573525559639977 23.52051598693144
+ POINT 891 7.590436564126859 23.52137254201168
+ POINT 892 8.610418203429177 23.52238823970576
+ POINT 893 9.634012583123939 23.5231204844028
+ POINT 894 10.66192730763136 23.52314145532485
+ POINT 895 11.69484344618557 23.52177954389795
+ POINT 896 12.73336926547453 23.51805376783202
+ POINT 897 13.77806338049386 23.51109835404176
+ POINT 898 14.82876972514016 23.50190245509659
+ POINT 899 15.88162964366185 23.49913874577929
+ POINT 900 16.92421100623148 23.5187817528495
+ POINT 901 17.9187231720003 23.54877744101314
+ POINT 902 18.82467738720799 23.60270583207815
+ POINT 903 19.69117818073977 23.50107152945477
+ POINT 904 -19.50128258193048 24.4384656875654
+ POINT 905 -18.49603377721733 24.52645328847083
+ POINT 906 -17.47222047478762 24.45122954140129
+ POINT 907 -16.40586225838657 24.39407159976292
+ POINT 908 -15.34601775579845 24.38327897298187
+ POINT 909 -14.29467265709022 24.390055636783
+ POINT 910 -13.24976676348197 24.39862650284665
+ POINT 911 -12.21060209619167 24.40396573526314
+ POINT 912 -11.17666203331493 24.40625240812431
+ POINT 913 -10.14751294202745 24.40659288968487
+ POINT 914 -9.122556531432314 24.40573982553234
+ POINT 915 -8.101059706484772 24.40417598818402
+ POINT 916 -7.082601789515715 24.40258179050725
+ POINT 917 -6.066775861079858 24.401321559102
+ POINT 918 -5.053111412995462 24.40054994850132
+ POINT 919 -4.041063542992159 24.40027148711376
+ POINT 920 -3.030084530115851 24.40031940219774
+ POINT 921 -2.019762977092939 24.40048397969316
+ POINT 922 -1.009856981565384 24.40074426873068
+ POINT 923 1.024744895883334e-08 24.40080656348254
+ POINT 924 1.009857001855979 24.40074427407103
+ POINT 925 2.019762997257817 24.40048398970201
+ POINT 926 3.030084551212998 24.40031941575852
+ POINT 927 4.041063567223794 24.40027150330772
+ POINT 928 5.053111443654583 24.40054996712262
+ POINT 929 6.066775902412783 24.40132158083352
+ POINT 930 7.082601846501917 24.40258181677218
+ POINT 931 8.101059785020986 24.40417602181029
+ POINT 932 9.122556637884827 24.40573987111417
+ POINT 933 10.14751308187546 24.40659295223369
+ POINT 934 11.17666221085666 24.40625249235723
+ POINT 935 12.21060231588698 24.40396584869259
+ POINT 936 13.24976703047505 24.39862666102139
+ POINT 937 14.29467297678669 24.39005587293844
+ POINT 938 15.34601812724821 24.38327935339093
+ POINT 939 16.40586264749961 24.39407221667886
+ POINT 940 17.47222072302032 24.45123039885839
+ POINT 941 18.49603359613996 24.52645421647772
+ POINT 942 19.50128254843763 24.438465834723
+ POINT 943 -19.27566297736843 25.33374322431333
+ POINT 944 -18.09775178956348 25.36799483110871
+ POINT 945 -16.95620348221256 25.27537035025225
+ POINT 946 -15.86925210584145 25.2621959819831
+ POINT 947 -14.81076315314948 25.27017923896646
+ POINT 948 -13.76485149074431 25.28055642554051
+ POINT 949 -12.72554494747265 25.2877018915422
+ POINT 950 -11.69125466472678 25.29114191583416
+ POINT 951 -10.66153084238642 25.29208544028669
+ POINT 952 -9.635751893753024 25.29127123899427
+ POINT 953 -8.613017330938026 25.28911759029576
+ POINT 954 -7.593119760102007 25.28673460993404
+ POINT 955 -6.575847443318799 25.28464366208886
+ POINT 956 -5.56085202263591 25.28301692601594
+ POINT 957 -4.547650297377339 25.28185175153692
+ POINT 958 -3.535803856092467 25.28112854408795
+ POINT 959 -2.524929008354851 25.28072983104776
+ POINT 960 -1.514733152989468 25.28059689769103
+ POINT 961 -0.5048698207562641 25.28052643741724
+ POINT 962 0.5048698473713688 25.28052644168841
+ POINT 963 1.51473317820234 25.28059690951267
+ POINT 964 2.524929032351727 25.28072984843296
+ POINT 965 3.535803880701605 25.28112856491395
+ POINT 966 4.54765032602379 25.28185177457648
+ POINT 967 5.560852060064414 25.28301695131759
+ POINT 968 6.575847495256659 25.28464369111745
+ POINT 969 7.593119832718212 25.28673464497304
+ POINT 970 8.613017431274047 25.28911763568033
+ POINT 971 9.635752028795475 25.29127130191628
+ POINT 972 10.66153101603581 25.29208552765603
+ POINT 973 11.6912548775394 25.29114203268002
+ POINT 974 12.72554519985952 25.28770204706892
+ POINT 975 13.76485178333624 25.28055664153414
+ POINT 976 14.81076348639632 25.27017956625211
+ POINT 977 15.86925247881834 25.26219652228766
+ POINT 978 16.95620384751598 25.27537126258778
+ POINT 979 18.09775189289379 25.36799618984021
+ POINT 980 19.27566284513804 25.33374370218195
+ POINT 981 -19.02239954985974 26.17643225215792
+ POINT 982 -18.13957375669325 26.27182967555013
+ POINT 983 -17.24752991244937 26.16660408857279
+ POINT 984 -16.27676195998304 26.15550609242113
+ POINT 985 -15.27459027941854 26.16147153179269
+ POINT 986 -14.25617297779009 26.16981316221108
+ POINT 987 -13.2298905244963 26.17593671197166
+ POINT 988 -12.20134707994185 26.17929019701242
+ POINT 989 -11.17413433418612 26.18055581832264
+ POINT 990 -10.14926347567323 26.17975046130899
+ POINT 991 -9.126055233191323 26.1767257214049
+ POINT 992 -8.104994973232515 26.17334704655403
+ POINT 993 -7.086339423772932 26.17035063568784
+ POINT 994 -6.069981455507479 26.16788451762503
+ POINT 995 -5.055493041319419 26.16585302924196
+ POINT 996 -4.042551276201685 26.16436367569299
+ POINT 997 -3.030821407389114 26.16335937686056
+ POINT 998 -2.020032206493706 26.16279434727297
+ POINT 999 -1.009850748200918 26.16249580956691
+ POINT 1000 1.810878547461869e-08 26.16240730616165
+ POINT 1001 1.009850782604362 26.16249582264381
+ POINT 1002 2.020032236871754 26.1627943696687
+ POINT 1003 3.030821434692971 26.163359404605
+ POINT 1004 4.04255130367432 26.16436370564181
+ POINT 1005 5.055493074279512 26.16585306014084
+ POINT 1006 6.069981500676009 26.16788455034281
+ POINT 1007 7.086339488585687 26.17035067328725
+ POINT 1008 8.104995064661678 26.17334709269614
+ POINT 1009 9.126055358650662 26.17672578313303
+ POINT 1010 10.14926364070988 26.17975055132968
+ POINT 1011 11.17413453512518 26.18055594767594
+ POINT 1012 12.20134730349981 26.17929037161421
+ POINT 1013 13.22989075441856 26.17593694579172
+ POINT 1014 14.25617319248297 26.1698134895775
+ POINT 1015 15.27459044923737 26.16147202351487
+ POINT 1016 16.27676204411003 26.15550686826468
+ POINT 1017 17.24752984252422 26.16660531696369
+ POINT 1018 18.13957335417382 26.27183161770785
+ POINT 1019 19.02239923981158 26.17643320705552
+ POINT 1020 -18.68351052659932 27.13627594775126
+ POINT 1021 -17.69958032840385 27.16211878258065
+ POINT 1022 -16.74683156791625 27.09239213947461
+ POINT 1023 -15.76142860035137 27.07785332363176
+ POINT 1024 -14.75568523901815 27.07369952580982
+ POINT 1025 -13.73682530497883 27.07257389333525
+ POINT 1026 -12.71214081282853 27.07258462878146
+ POINT 1027 -11.68737540619582 27.07322119480453
+ POINT 1028 -10.66414374485063 27.07224624332165
+ POINT 1029 -9.640752201106791 27.06765889268107
+ POINT 1030 -8.618551085348614 27.06280265021007
+ POINT 1031 -7.598447638413528 27.0587038340893
+ POINT 1032 -6.580657275128921 27.05538108021106
+ POINT 1033 -5.564721338620957 27.05245186732603
+ POINT 1034 -4.55044947250108 27.05017759593697
+ POINT 1035 -3.537564033075582 27.04853556963036
+ POINT 1036 -2.525883378397752 27.04753994742007
+ POINT 1037 -1.515118391171542 27.04699037668727
+ POINT 1038 -0.5049676403738673 27.04677660797433
+ POINT 1039 0.5049676892594587 27.04677661887949
+ POINT 1040 1.515118434256783 27.04699040536934
+ POINT 1041 2.525883412994776 27.04753998543922
+ POINT 1042 3.537564061749419 27.04853561085263
+ POINT 1043 4.550449500892171 27.05017763641098
+ POINT 1044 5.564721374913006 27.05245190650947
+ POINT 1045 6.580657328738541 27.0553811208901
+ POINT 1046 7.598447718844161 27.05870388239782
+ POINT 1047 8.618551199616206 27.0628027121368
+ POINT 1048 9.640752355782366 27.06765898096566
+ POINT 1049 10.66414394092225 27.07224638347101
+ POINT 1050 11.6873756228595 27.07322140691138
+ POINT 1051 12.71214101090778 27.07258491927569
+ POINT 1052 13.7368254473805 27.07257428445428
+ POINT 1053 14.75568528734847 27.07370007007758
+ POINT 1054 15.76142851055736 27.07785411803665
+ POINT 1055 16.74683128376763 27.09239333698052
+ POINT 1056 17.6995797272013 27.16212066124442
+ POINT 1057 18.68350991969133 27.13627753669932
+ POINT 1058 -18.3087899994487 28.0491122961534
+ POINT 1059 -17.29356305303868 28.05076474633064
+ POINT 1060 -16.29456855134103 28.00414807613013
+ POINT 1061 -15.27947676947299 27.98500923824287
+ POINT 1062 -14.25474850756761 27.97405313016844
+ POINT 1063 -13.22681991964508 27.96937104967781
+ POINT 1064 -12.20220140205727 27.96991345424442
+ POINT 1065 -11.18106269960114 27.96967783441059
+ POINT 1066 -10.1575317295533 27.96254624095482
+ POINT 1067 -9.134026282902123 27.9554271272794
+ POINT 1068 -8.11232808124951 27.94990275991905
+ POINT 1069 -7.093073357937705 27.94571290375888
+ POINT 1070 -6.075536956332379 27.94179197610055
+ POINT 1071 -5.059700169738454 27.9386774220445
+ POINT 1072 -4.045326088931555 27.93633896816423
+ POINT 1073 -3.03240645241726 27.93493777823327
+ POINT 1074 -2.020741779449279 27.93421009321045
+ POINT 1075 -1.010099138076054 27.93395407311486
+ POINT 1076 3.404211895013942e-08 27.93390377024507
+ POINT 1077 1.010099201965424 27.93395410521433
+ POINT 1078 2.020741831028424 27.93421014644879
+ POINT 1079 3.032406488119535 27.93493783773603
+ POINT 1080 4.045326114328983 27.93633902566877
+ POINT 1081 5.059700194472554 27.93867747350166
+ POINT 1082 6.075536993070713 27.94179202308874
+ POINT 1083 7.09307342009923 27.94571295271277
+ POINT 1084 8.112328181018478 27.94990282281439
+ POINT 1085 9.134026425405688 27.95542721427844
+ POINT 1086 10.15753191815605 27.96254637704741
+ POINT 1087 11.18106292576653 27.96967807323303
+ POINT 1088 12.2022016129779 27.96991382936287
+ POINT 1089 13.22682004031123 27.9693715547119
+ POINT 1090 14.25474849512003 27.97405379109089
+ POINT 1091 15.27947659137026 27.98501013174536
+ POINT 1092 16.29456815670813 28.00414934511754
+ POINT 1093 17.29356234408891 28.05076663883557
+ POINT 1094 18.30878908050798 28.04911438640772
+ POINT 1095 -17.88627195115217 28.94881420577205
+ POINT 1096 -16.85121623860757 28.93061933343462
+ POINT 1097 -15.81833314037684 28.89375235827191
+ POINT 1098 -14.77937167335351 28.87328385036637
+ POINT 1099 -13.74209446540223 28.86499338776666
+ POINT 1100 -12.71605582999688 28.86919825138711
+ POINT 1101 -11.69940001494518 28.87340789918018
+ POINT 1102 -10.67625922348492 28.86226791658786
+ POINT 1103 -9.65132961605895 28.851595071435
+ POINT 1104 -8.627923539340028 28.8441361901345
+ POINT 1105 -7.607383097319782 28.83914218931285
+ POINT 1106 -6.588183876610444 28.834021579554
+ POINT 1107 -5.570592938796751 28.82993786493235
+ POINT 1108 -4.554348259497055 28.82674994031302
+ POINT 1109 -3.539757274765657 28.82494387416716
+ POINT 1110 -2.526758864903647 28.82415777580468
+ POINT 1111 -1.515331685041841 28.82413311065559
+ POINT 1112 -0.5049906739901562 28.82425189305842
+ POINT 1113 0.5049907645346323 28.82425191727151
+ POINT 1114 1.515331766070061 28.82413317752096
+ POINT 1115 2.526758922906133 28.82415786552549
+ POINT 1116 3.539757303964481 28.82494396199095
+ POINT 1117 4.554348271221096 28.82675001632507
+ POINT 1118 5.5705929498453 28.82993792637928
+ POINT 1119 6.588183907369825 28.83402163235582
+ POINT 1120 7.607383167361471 28.83914224659848
+ POINT 1121 8.627923663583609 28.84413627571221
+ POINT 1122 9.651329791428106 28.85159520324159
+ POINT 1123 10.67625944341114 28.86226814518679
+ POINT 1124 11.69940025142002 28.87340833491707
+ POINT 1125 12.71605597388189 28.86919892986707
+ POINT 1126 13.74209440347107 28.86499424204478
+ POINT 1127 14.77937139138959 28.87328490937882
+ POINT 1128 15.81833261547568 28.89375376208559
+ POINT 1129 16.85121538818617 28.93062131895283
+ POINT 1130 17.88627066804774 28.94881677035237
+ POINT 1131 -17.41542967730917 29.83375864838565
+ POINT 1132 -16.36598381746591 29.79324716653365
+ POINT 1133 -15.30571123700743 29.76326236085124
+ POINT 1134 -14.25334486558897 29.75293926663301
+ POINT 1135 -13.22518619984562 29.7683098214614
+ POINT 1136 -12.21928477595643 29.78625116079143
+ POINT 1137 -11.19741514236947 29.76826012438021
+ POINT 1138 -10.17050471136325 29.75174492628818
+ POINT 1139 -9.145044524339205 29.74157318849883
+ POINT 1140 -8.1237506134133 29.73611400010283
+ POINT 1141 -7.102985757155311 29.72937235399485
+ POINT 1142 -6.083575327030116 29.72406116587013
+ POINT 1143 -5.065015794708289 29.71965157618854
+ POINT 1144 -4.048200344643696 29.7173430556003
+ POINT 1145 -3.033238232867113 29.71657292251867
+ POINT 1146 -2.020549058249011 29.71719659405831
+ POINT 1147 -1.009738878373672 29.71805565528834
+ POINT 1148 5.919503985596375e-08 29.71837020929849
+ POINT 1149 1.009738994992378 29.71805571880686
+ POINT 1150 2.020549158880593 29.71719671483972
+ POINT 1151 3.033238290617864 29.71657306631699
+ POINT 1152 4.048200349715117 29.71734318068954
+ POINT 1153 5.065015770760248 29.7196516721558
+ POINT 1154 6.083575305003133 29.72406123347293
+ POINT 1155 7.102985771361372 29.72937240771407
+ POINT 1156 8.123750692148713 29.73611406625849
+ POINT 1157 9.145044681942796 29.74157331659041
+ POINT 1158 10.17050491805136 29.75174514843446
+ POINT 1159 11.19741536641047 29.76826054031946
+ POINT 1160 12.2192849573198 29.78625198231071
+ POINT 1161 13.22518614531627 29.76831101236639
+ POINT 1162 14.25334445158184 29.75294061103708
+ POINT 1163 15.30571051603222 29.76326396462168
+ POINT 1164 16.36598278510637 29.79324928955189
+ POINT 1165 17.41542794295087 29.83376171990615
+ POINT 1166 -16.89880493119268 30.69721421200391
+ POINT 1167 -15.84084671744584 30.63188582080215
+ POINT 1168 -14.75937079783184 30.62356117741139
+ POINT 1169 -13.72667803874304 30.6613328279952
+ POINT 1170 -12.74588714172752 30.71371027983801
+ POINT 1171 -11.72514438910883 30.68212290710705
+ POINT 1172 -10.69307402425253 30.65563776551792
+ POINT 1173 -9.663653547397562 30.64189426397848
+ POINT 1174 -8.642458727492786 30.63734439158867
+ POINT 1175 -7.620362459906692 30.62824675701598
+ POINT 1176 -6.599325061244341 30.62130216573695
+ POINT 1177 -5.577936826951563 30.6148672434393
+ POINT 1178 -4.558211164728247 30.61175248302345
+ POINT 1179 -3.540362154667188 30.61087880095583
+ POINT 1180 -2.525662571249494 30.61262583895858
+ POINT 1181 -1.513887280056144 30.61507416610434
+ POINT 1182 -0.5042972278699956 30.61670205839328
+ POINT 1183 0.5042973737465498 30.61670209443389
+ POINT 1184 1.513887429060817 30.61507428789713
+ POINT 1185 2.525662692669032 30.61262604572162
+ POINT 1186 3.54036219335181 30.61087902796626
+ POINT 1187 4.558211107788653 30.61175265802142
+ POINT 1188 5.577936725817437 30.61486735811178
+ POINT 1189 6.599324974859706 30.62130222879121
+ POINT 1190 7.620362447487361 30.62824680085264
+ POINT 1191 8.642458825941324 30.63734447157217
+ POINT 1192 9.663653754394943 30.64189448764897
+ POINT 1193 10.69307423735651 30.65563818384975
+ POINT 1194 11.72514453379872 30.68212369692436
+ POINT 1195 12.74588713706405 30.71371180853617
+ POINT 1196 13.72667758015037 30.66133475353996
+ POINT 1197 14.75936981763983 30.62356312399664
+ POINT 1198 15.84084548444188 30.63188806768807
+ POINT 1199 16.89880261226452 30.69721787530422
+ POINT 1200 -16.34009128149359 31.53262402545307
+ POINT 1201 -15.28568336821521 31.44708435232277
+ POINT 1202 -14.2209000727431 31.53141889752363
+ POINT 1203 -13.2977569951397 31.66679256172576
+ POINT 1204 -12.27301009857187 31.6040005347632
+ POINT 1205 -11.22445310392184 31.55974332082998
+ POINT 1206 -10.18420406298538 31.54252893027452
+ POINT 1207 -9.163915367393241 31.5436687933713
+ POINT 1208 -8.140599406135669 31.53125016600776
+ POINT 1209 -7.118690682844557 31.52230190448825
+ POINT 1210 -6.093912293860901 31.51225498074955
+ POINT 1211 -5.07053781765046 31.50770300997673
+ POINT 1212 -4.04849776527412 31.50615467955022
+ POINT 1213 -3.030710538587649 31.50945833368958
+ POINT 1214 -2.017113296966526 31.51446605862232
+ POINT 1215 -1.007152972521004 31.5188773687048
+ POINT 1216 8.069955546863294e-08 31.52094595365134
+ POINT 1217 1.007153147259242 31.51887744675579
+ POINT 1218 2.017113486527146 31.51446627236329
+ POINT 1219 3.030710673050414 31.50945868636081
+ POINT 1220 4.048497739728965 31.5061550381337
+ POINT 1221 5.070537627085144 31.50770325017226
+ POINT 1222 6.093912047408612 31.51225510381275
+ POINT 1223 7.118690492026126 31.52230193550043
+ POINT 1224 8.140599370382356 31.53125017994062
+ POINT 1225 9.163915512128149 31.54366891796288
+ POINT 1226 10.18420431641738 31.5425293949968
+ POINT 1227 11.22445321142737 31.55974415861684
+ POINT 1228 12.27300998503818 31.60400199599792
+ POINT 1229 13.29775665030186 31.66679525624402
+ POINT 1230 14.22089893057988 31.53142164267454
+ POINT 1231 15.28568200198485 31.44708667752904
+ POINT 1232 16.34008819047632 31.53262840498486
+ POINT 1233 -15.74070991046201 32.33815429935463
+ POINT 1234 -14.74688528329741 32.29702825850423
+ POINT 1235 -13.93190385661229 32.65477363083443
+ POINT 1236 -12.86506936822592 32.52891304941449
+ POINT 1237 -11.77212159391218 32.45232300476276
+ POINT 1238 -10.70587315849742 32.4347153350411
+ POINT 1239 -9.687662057866612 32.45538673008075
+ POINT 1240 -8.662564266803992 32.43904962117873
+ POINT 1241 -7.6420354397583 32.42864000943801
+ POINT 1242 -6.613519518949163 32.41191777411576
+ POINT 1243 -5.586073763699214 32.40488779735104
+ POINT 1244 -4.558141198059786 32.40119064612167
+ POINT 1245 -3.535940044697491 32.40633890872039
+ POINT 1246 -2.519295876494282 32.41479259504359
+ POINT 1247 -1.507828324987365 32.42353533511525
+ POINT 1248 -0.5019149230875003 32.43049565557803
+ POINT 1249 0.5019150823275319 32.43049567799903
+ POINT 1250 1.507828527783088 32.42353546677084
+ POINT 1251 2.519296107078045 32.41479297153293
+ POINT 1252 3.535940160588894 32.40633951541907
+ POINT 1253 4.558141018794441 32.40119120765029
+ POINT 1254 5.58607332108212 32.40488811417254
+ POINT 1255 6.613519029401044 32.41191787120312
+ POINT 1256 7.642035101328529 32.4286399487375
+ POINT 1257 8.662564215711519 32.43904959879422
+ POINT 1258 9.687662207059672 32.45538705154674
+ POINT 1259 10.70587327603016 32.43471639543523
+ POINT 1260 11.77212124413756 32.45232461789568
+ POINT 1261 12.86506864437663 32.5289155171651
+ POINT 1262 13.9319031453721 32.65477802453022
+ POINT 1263 14.74688388336436 32.29703064706029
+ POINT 1264 15.74070577682765 32.33815957294095
+ POINT 1265 -15.07552072766293 33.14262814282181
+ POINT 1266 -14.47383699079426 33.80246509548604
+ POINT 1267 -13.45485613851754 33.44616152809291
+ POINT 1268 -12.31042376721847 33.31655850201416
+ POINT 1269 -11.2135033566313 33.30180198841559
+ POINT 1270 -10.20833474124087 33.37195219581763
+ POINT 1271 -9.180106558323141 33.35165297473918
+ POINT 1272 -8.167116093012913 33.3442344487901
+ POINT 1273 -7.135707070230799 33.31483801144155
+ POINT 1274 -6.105345665605076 33.30379118897195
+ POINT 1275 -5.06957725725357 33.29468673625933
+ POINT 1276 -4.041801375578952 33.30179332186751
+ POINT 1277 -3.020762110140957 33.31421796476505
+ POINT 1278 -2.005808444215231 33.32826293060971
+ POINT 1279 -1.000289102538041 33.34360137140605
+ POINT 1280 4.397051474314129e-08 33.34996601347633
+ POINT 1281 1.000289226544982 33.34360139490249
+ POINT 1282 2.005808652593252 33.32826315749907
+ POINT 1283 3.020762356793561 33.31421864049496
+ POINT 1284 4.04180140274841 33.30179435588055
+ POINT 1285 5.069576774752012 33.29468759101248
+ POINT 1286 6.105344800786285 33.30379157372327
+ POINT 1287 7.135706209600581 33.31483800284786
+ POINT 1288 8.167115522703435 33.3442342276991
+ POINT 1289 9.180106333286005 33.35165308658632
+ POINT 1290 10.20833438162417 33.37195324049043
+ POINT 1291 11.21350253681438 33.30180425811116
+ POINT 1292 12.31042180764285 33.31656140263814
+ POINT 1293 13.4548524153751 33.44616582254692
+ POINT 1294 14.47383044482127 33.80247196173818
+ POINT 1295 15.07551512015369 33.14263458603429
+ POINT 1296 -13.79621587368983 34.47979377169069
+ POINT 1297 -12.80117612552641 34.14340935306568
+ POINT 1298 -11.67938708456585 34.12832297638581
+ POINT 1299 -10.72142132443546 34.29425844362311
+ POINT 1300 -9.682832980733666 34.26424534470635
+ POINT 1301 -8.688207103612132 34.27689307018375
+ POINT 1302 -7.65563025945943 34.22402537362621
+ POINT 1303 -6.627660152089107 34.20733211365729
+ POINT 1304 -5.582314868145199 34.18559033550888
+ POINT 1305 -4.548886327711884 34.19487513879358
+ POINT 1306 -3.522722983675548 34.21111636664738
+ POINT 1307 -2.501187911497048 34.22961986771382
+ POINT 1308 -1.494394684397123 34.25705724567609
+ POINT 1309 -0.4971265849464807 34.27519845138761
+ POINT 1310 0.4971265078887681 34.27519841977612
+ POINT 1311 1.494394688445157 34.25705727178087
+ POINT 1312 2.501188049285862 34.22962028369921
+ POINT 1313 3.522723188878942 34.21111756307139
+ POINT 1314 4.548886155833521 34.19487684951891
+ POINT 1315 5.582313876849914 34.18559156986573
+ POINT 1316 6.627658663296168 34.20733251253952
+ POINT 1317 7.655628853358176 34.22402516036131
+ POINT 1318 8.68820599240011 34.27689283063138
+ POINT 1319 9.682831841060921 34.26424634549341
+ POINT 1320 10.72141915815556 34.29426114991747
+ POINT 1321 11.67938420379727 34.12832694300539
+ POINT 1322 12.80117158164824 34.14341469815486
+ POINT 1323 13.79620812794538 34.47980114816573
+ POINT 1324 -13.06808813704192 35.14018072687722
+ POINT 1325 -12.14172620096994 34.87954210817981
+ POINT 1326 -11.26850255798744 35.2174633859475
+ POINT 1327 -10.17404344203454 35.15495143560162
+ POINT 1328 -9.208060341626505 35.23313312650344
+ POINT 1329 -8.164338718552617 35.1425249690552
+ POINT 1330 -7.149966973739355 35.12413503072115
+ POINT 1331 -6.093958485983832 35.07390856861841
+ POINT 1332 -5.058078832983085 35.0862120839201
+ POINT 1333 -4.028041239492521 35.10535340409478
+ POINT 1334 -2.995366542760057 35.12335223032324
+ POINT 1335 -1.984673994347679 35.16616214935111
+ POINT 1336 -0.9889440302704526 35.202230425387
+ POINT 1337 -2.362829220701329e-07 35.21561385455021
+ POINT 1338 0.9889435978667032 35.20223033196604
+ POINT 1339 1.984673688665513 35.16616222501731
+ POINT 1340 2.995366465565271 35.12335296470669
+ POINT 1341 4.028041331825868 35.10535544561446
+ POINT 1342 5.05807832979828 35.08621479165007
+ POINT 1343 6.093956728733247 35.07391022323044
+ POINT 1344 7.149964603949941 35.12413537360996
+ POINT 1345 8.16433638165371 35.14252466978046
+ POINT 1346 9.208057389898194 35.23313393742545
+ POINT 1347 10.17403944712447 35.15495471543825
+ POINT 1348 11.26849645211291 35.21746853325359
+ POINT 1349 12.14171999880287 34.87954795411678
+ POINT 1350 13.0680787036588 35.14018886919808
+ POINT 1351 -12.25874524554923 35.80263158479386
+ POINT 1352 -10.64940816662681 35.9609434482652
+ POINT 1353 -9.738993523076187 36.21117036120386
+ POINT 1354 -8.645496887251596 36.05535363229623
+ POINT 1355 -7.660082219217359 36.07236004253533
+ POINT 1356 -6.59386247522779 35.96253496561209
+ POINT 1357 -5.568601871711349 35.98133911135642
+ POINT 1358 -4.542278169739824 36.00016620825533
+ POINT 1359 -3.491371001354527 36.00500762088945
+ POINT 1360 -2.474010083407105 36.06498819452312
+ POINT 1361 -1.477289195045545 36.12504113606641
+ POINT 1362 -0.4912059285544867 36.15975599214231
+ POINT 1363 0.4912047027322386 36.15975590621064
+ POINT 1364 1.477288036732875 36.12504100856928
+ POINT 1365 2.474009154113311 36.06498836685221
+ POINT 1366 3.491370484225889 36.005008798768
+ POINT 1367 4.542278089478654 36.00016955223765
+ POINT 1368 5.568600813180165 35.98134321823733
+ POINT 1369 6.593859519726857 35.96253699972355
+ POINT 1370 7.660078711252875 36.07236031674334
+ POINT 1371 8.64549260236045 36.05535452011431
+ POINT 1372 9.738986372954258 36.21117440008044
+ POINT 1373 10.64940057210636 35.96094915519707
+ POINT 1374 12.25873414120749 35.80264019887823
+ POINT 1375 -11.51773025350177 36.35059294972418
+ POINT 1376 -10.65697659081121 36.92420899016856
+ POINT 1377 -9.073839610332337 36.90105300548846
+ POINT 1378 -8.146483166419303 37.06536476868484
+ POINT 1379 -7.049598100139526 36.85375720886346
+ POINT 1380 -6.068285778904927 36.89990321056391
+ POINT 1381 -5.072991493907814 36.90817616854977
+ POINT 1382 -3.99387954502805 36.86886824762014
+ POINT 1383 -2.967956221366422 36.948391661155
+ POINT 1384 -1.969359381657599 37.03579454421214
+ POINT 1385 -0.9811568690244843 37.09928427270614
+ POINT 1386 -1.321646322029191e-06 37.12286421524274
+ POINT 1387 0.9811542273605319 37.09928414206929
+ POINT 1388 1.969356939200988 37.03579438002285
+ POINT 1389 2.967954164856175 36.94839197135881
+ POINT 1390 3.993878153189894 36.86886991249742
+ POINT 1391 5.072990965328807 36.90818161389328
+ POINT 1392 6.068283175739424 36.89990903124271
+ POINT 1393 7.049593675630685 36.85375859784719
+ POINT 1394 8.146477155142176 37.06536635726837
+ POINT 1395 9.073831993817508 36.90105705402716
+ POINT 1396 10.65696264541113 36.92421777141614
+ POINT 1397 11.51771778734179 36.35060173116444
+ POINT 1398 -9.874844025420192 37.39216649740979
+ POINT 1399 -8.96740748095799 37.87695732138048
+ POINT 1400 -7.438938982686154 37.68347468260948
+ POINT 1401 -6.50593626267252 37.87694008295671
+ POINT 1402 -5.61747021210558 37.87127533952164
+ POINT 1403 -4.50493919684402 37.70762847888211
+ POINT 1404 -3.474895680182776 37.81110994000395
+ POINT 1405 -2.47779011320007 37.9305818016129
+ POINT 1406 -1.486534122834006 38.0216095618874
+ POINT 1407 -0.4945352453330601 38.07921156797903
+ POINT 1408 0.4945300811634933 38.07921159550066
+ POINT 1409 1.486529221010789 38.02160930967654
+ POINT 1410 2.477785571750189 37.9305816710405
+ POINT 1411 3.474891600531238 37.81111046960394
+ POINT 1412 4.504935871545127 37.70763053498042
+ POINT 1413 5.617467804911568 37.87128486851104
+ POINT 1414 6.505933128734337 37.87694376153858
+ POINT 1415 7.438934268999978 37.68347575716164
+ POINT 1416 8.967392296606542 37.87696493811983
+ POINT 1417 9.874829237160435 37.39217489381149
+ POINT 1418 -8.147493943469181 38.26522221165496
+ POINT 1419 -7.204335412055579 38.65737257146897
+ POINT 1420 -6.323312496190199 38.97408019050001
+ POINT 1421 -5.01203726983948 38.51297624845616
+ POINT 1422 -4.001501092985738 38.651230540567
+ POINT 1423 -3.020444675311309 38.806876475282
+ POINT 1424 -2.033095442850132 38.92553139969691
+ POINT 1425 -1.029249995848707 39.00470609623093
+ POINT 1426 -4.74370389105111e-06 39.04491520100409
+ POINT 1427 1.029241328499785 39.00470590960975
+ POINT 1428 2.033087058128695 38.92553128934863
+ POINT 1429 3.020436112344315 38.80687697855863
+ POINT 1430 4.001492023142893 38.65123203877156
+ POINT 1431 5.01202711215084 38.51297927624825
+ POINT 1432 6.323297249481397 38.97408527161986
+ POINT 1433 7.204321660158831 38.6573778816041
+ POINT 1434 8.147479092148298 38.26522883631657
+ POINT 1435 -5.49459488339432 39.2304297161394
+ POINT 1436 -4.555054134591538 39.47438013983862
+ POINT 1437 -3.625104797446435 39.66872174818514
+ POINT 1438 -2.68641217378018 39.8187585290443
+ POINT 1439 -1.753727660812683 39.92296262335634
+ POINT 1440 -0.8514203504713909 39.98186887129251
+ POINT 1441 0.8514156417348741 39.98186906132761
+ POINT 1442 1.753718582443226 39.92296341244428
+ POINT 1443 2.686399886263002 39.81876019460063
+ POINT 1444 3.625089980059974 39.66872447914377
+ POINT 1445 4.555037417817725 39.47438404988157
+ POINT 1446 5.494577273669186 39.23043474765144
+ POINT 1447 -10.17836236469941 9.351236080585844
+ POINT 1448 -10.43178822028154 9.796311205363828
+ POINT 1449 -9.917078319793836 9.803182550031517
+ POINT 1450 -0.4257127323325477 0.4866079094147974
+ POINT 1451 -2.371846788213477e-06 0.477542337394691
+ POINT 1452 -0.4258068646365975 0.004533301166143754
+ POINT 1453 -7.678410559861725 1.532677211575885
+ POINT 1454 -7.321632913802258 1.829573658302515
+ POINT 1455 -7.793213434540115 2.025649120773706
+ POINT 1456 -0.4257125470876409 39.5133920361483
+ POINT 1457 -2.371851945525555e-06 39.52245760050205
+ POINT 1458 -0.4258066792652949 39.99546670279175
+ POINT 1459 19.49788122060637 21.77367208818195
+ POINT 1460 19.87859224467908 22.20035688754039
+ POINT 1461 19.44771880960396 22.22685226353656
+ POINT 1462 19.95652174895268 21.31804389755909
+ POINT 1463 19.52620596169076 21.34480675106996
+ POINT 1464 -18.50178077972164 27.59500547042333
+ POINT 1465 -18.00418516392628 27.60561553936703
+ POINT 1466 -18.19154542750159 27.14919736516595
+ POINT 1467 2.318125029883721 20.44808511760801
+ POINT 1468 2.823024436302765 20.4446500619237
+ POINT 1469 2.535961498642024 20.89273520263026
+ POINT 1470 -18.1915204806717 12.85075360776577
+ POINT 1471 -18.00416183249957 12.39434254388758
+ POINT 1472 -18.50176221811813 12.40494933886966
+ POINT 1473 -10.43863716835151 8.90091854855763
+ POINT 1474 -9.923927267863803 8.907789893225319
+ POINT 1475 -10.95968604283294 7.131741057062447
+ POINT 1476 -11.49280931695378 7.122937192173756
+ POINT 1477 -11.23899374083607 7.556481059276784
+ POINT 1478 -10.96516006976062 8.002771637036583
+ POINT 1479 -11.49828334388146 7.993967772147892
+ POINT 1480 -10.70432587216095 8.448865355552398
+ POINT 1481 -10.95876096899656 8.892311542912923
+ POINT 1482 -10.44503626911557 8.01137864268129
+ POINT 1483 14.20285675279642 6.771375017633135
+ POINT 1484 14.50369851507584 7.101292773533388
+ POINT 1485 14.77834984324904 6.524081630761735
+ POINT 1486 12.23551226998423 9.30208580312808
+ POINT 1487 11.99907300324982 8.856939970398869
+ POINT 1488 12.50944368805203 8.841146276347569
+ POINT 1489 11.97221231742172 9.765815913514722
+ POINT 1490 12.48258300222394 9.750022219463421
+ POINT 1491 -0.4905789853227912 2.888925581404812
+ POINT 1492 -0.7361812304740789 3.37047972852181
+ POINT 1493 -0.2456035667837216 3.358689771784562
+ POINT 1494 -4.783548996192389 1.006323236939901
+ POINT 1495 -5.026302453506227 0.6418935979999102
+ POINT 1496 -5.253316898193344 1.128297748069279
+ POINT 1497 -4.278279517467413 0.9371948906828067
+ POINT 1498 -4.50677415895651 1.41789821597725
+ POINT 1499 -3.813305411122727 0.8400241846748683
+ POINT 1500 -4.09123434595309 0.4229266387245523
+ POINT 1501 1.893402820285961 39.42424735089645
+ POINT 1502 2.359743472195849 39.37214574197463
+ POINT 1503 2.220670538841968 39.87633322383852
+ POINT 1504 0.2472626687298011 38.56206339825238
+ POINT 1505 -2.582084783431249e-06 38.07921158173984
+ POINT 1506 -0.2472699945184756 38.56206338449157
+ POINT 1507 10.65318160875874 36.4425834633066
+ POINT 1508 11.08355917972408 36.15577544318076
+ POINT 1509 11.09104919162302 36.64297534268243
+ POINT 1510 4.506759567646867 38.5821056575099
+ POINT 1511 4.758481491847984 38.11030490561433
+ POINT 1512 4.25321394734401 38.179431286876
+ POINT 1513 4.783532264984283 38.9936816630649
+ POINT 1514 5.253302192910013 38.87170701194984
+ POINT 1515 5.026287577931008 39.35811027344018
+ POINT 1516 4.278264720480308 39.06280804432657
+ POINT 1517 2.271388089598089 31.06354615904246
+ POINT 1518 1.765500457793982 31.06477028013021
+ POINT 1519 2.019775060864925 30.61385016680937
+ POINT 1520 2.52391207978878 31.51196247936205
+ POINT 1521 2.778186682859723 31.06104236604121
+ POINT 1522 19.58406521140076 19.55566934611801
+ POINT 1523 19.59394271675515 20.00002569416793
+ POINT 1524 19.99506063684425 19.5555338953416
+ POINT 1525 19.58406161774156 20.44446277646284
+ POINT 1526 19.99505884072375 20.44454692352635
+ POINT 1527 17.47612722659238 20.45170520807109
+ POINT 1528 17.94956809694392 20.45199983601073
+ POINT 1529 17.76408318096152 19.99954840147309
+ POINT 1530 17.09376279229357 20.90344554562439
+ POINT 1531 16.90827787631117 20.45099411108675
+ POINT 1532 17.65639440029453 29.39423957186695
+ POINT 1533 17.13332166556852 29.38219151942949
+ POINT 1534 17.36874302811696 28.9397190446526
+ POINT 1535 13.61482989783698 32.16078664038712
+ POINT 1536 14.07640103797599 32.09309983360238
+ POINT 1537 13.75932779044087 31.59910844945928
+ POINT 1538 16.10341413477412 30.21256867861998
+ POINT 1539 16.63239269868544 30.24523358242805
+ POINT 1540 16.3698240483532 30.66455297149614
+ POINT 1541 16.89070536402862 29.81350550472902
+ POINT 1542 16.60859908664627 29.36193530425236
+ POINT 1543 17.1625462541375 30.26873928275396
+ POINT 1544 16.0904668374591 31.08225823633646
+ POINT 1545 16.6246937806281 31.11843321269683
+ POINT 1546 15.81288509623059 31.48985754125695
+ POINT 1547 16.04545280411266 31.9391559472781
+ POINT 1548 15.51319388940625 31.89262312523499
+ POINT 1549 15.56326374321337 31.03948737260855
+ POINT 1550 13.77222000363087 24.39434126697991
+ POINT 1551 13.50730940690564 24.83959165127776
+ POINT 1552 14.02976238006146 24.83530625723629
+ POINT 1553 12.98553330932471 9.758991772893435
+ POINT 1554 12.72223335676221 10.22272188328008
+ POINT 1555 16.25410351335674 12.9148587217591
+ POINT 1556 16.01906260946011 13.38331048867258
+ POINT 1557 16.5117595380726 13.37602992964366
+ POINT 1558 16.89069502922413 10.18647787299363
+ POINT 1559 16.60858850912514 10.63804911311348
+ POINT 1560 17.13330989107297 10.61778909765387
+ POINT 1561 16.09214844821832 10.65648742134303
+ POINT 1562 16.33476331006715 11.08779864600327
+ POINT 1563 -17.80117652624369 28.04993852124202
+ POINT 1564 -17.49657169072127 27.60644176445565
+ POINT 1565 -19.58406168080147 20.44446288474986
+ POINT 1566 -19.59394278438359 20.00002569746599
+ POINT 1567 -19.99505883837563 20.44454702859078
+ POINT 1568 -18.996847002171 20.45276507073249
+ POINT 1569 -19.3930231142053 20.89717656055036
+ POINT 1570 -19.58406527491918 19.55566925469715
+ POINT 1571 -19.99506063472496 19.55553380055498
+ POINT 1572 -18.99703876946375 19.54715259717118
+ POINT 1573 -19.39321847561576 19.10277045693634
+ POINT 1574 -1.233845495929245 37.56044691729677
+ POINT 1575 -0.9905346840835332 38.05041056493322
+ POINT 1576 -0.7378460571787722 37.58924792034259
+ POINT 1577 -1.759814782842069 38.47357048079215
+ POINT 1578 -1.982162118017038 37.97609568175015
+ POINT 1579 -2.255442778025101 38.42805660065491
+ POINT 1580 -1.503048773376636 33.33593215100788
+ POINT 1581 -1.756818384601298 32.87589913286249
+ POINT 1582 -1.254058713762703 32.88356835326066
+ POINT 1583 13.51221711522611 31.16406500489199
+ POINT 1584 13.97378825536513 31.09637819810725
+ POINT 1585 1.775181014606737 21.33393361663671
+ POINT 1586 1.267840964225153 21.33711381427801
+ POINT 1587 1.523722041841396 20.89935045595586
+ POINT 1588 1.265170094048079 22.20914709544139
+ POINT 1589 1.77056085321017 22.20855342148825
+ POINT 1590 1.516431010267755 22.64600354197079
+ POINT 1591 1.012728381227997 21.77259296305717
+ POINT 1592 0.7612694084626562 21.33800980237632
+ POINT 1593 0.758598538285582 22.21004308353971
+ POINT 1594 1.847863631555612 20.4480851260611
+ POINT 1595 1.340523581174028 20.45126532370239
+ POINT 1596 2.134926569216352 19.99999998535455
+ POINT 1597 2.280691513968954 21.33225925723105
+ POINT 1598 2.785590920387998 21.32882420154674
+ POINT 1599 2.02481043635271 21.7700226155532
+ POINT 1600 2.78116495724771 22.20597296072012
+ POINT 1601 2.276071352572386 22.20687906208259
+ POINT 1602 2.52691537410517 22.64450376665516
+ POINT 1603 -9.899143737765993 12.4849004435783
+ POINT 1604 -9.387390829537839 12.48845944608934
+ POINT 1605 -9.645780226280916 12.0410160502686
+ POINT 1606 -11.94630637827111 14.2647893097616
+ POINT 1607 -12.46345218922917 14.26650973789091
+ POINT 1608 -12.20840695700918 14.7105827019253
+ POINT 1609 -13.22907293656634 11.13290745457848
+ POINT 1610 -13.48445463159971 11.58282180341283
+ POINT 1611 -12.9714364037251 11.58072072087271
+ POINT 1612 -12.45912889682464 11.58045014485459
+ POINT 1613 -11.9508016855418 11.57834567717223
+ POINT 1614 -12.20772749740889 11.128701904356
+ POINT 1615 -12.71451059185801 12.03036449368894
+ POINT 1616 -13.62553305310023 6.037019882652965
+ POINT 1617 -14.1390779208095 5.854807348663457
+ POINT 1618 -13.96434315411798 6.375683521723212
+ POINT 1619 -13.39847526011537 7.408160088352634
+ POINT 1620 -13.61481920361369 7.839222070915377
+ POINT 1621 -13.0814052589453 7.902150069513514
+ POINT 1622 -13.69337197744059 6.949534963734737
+ POINT 1623 -13.1599580327722 7.012462962332874
+ POINT 1624 -14.5037016745593 7.101298192194127
+ POINT 1625 -14.20286038146115 6.771380647742971
+ POINT 1626 -14.7783559058492 6.524088291719242
+ POINT 1627 -13.23627871209868 9.312480837244131
+ POINT 1628 -13.51221183367959 8.835940044420862
+ POINT 1629 -13.02181608086271 8.809752844899524
+ POINT 1630 -16.36981698070831 9.335436989756825
+ POINT 1631 -16.09046066583428 8.917733609398496
+ POINT 1632 -16.62468707069794 8.881556790786455
+ POINT 1633 -15.56325712327145 8.960504702078703
+ POINT 1634 -15.81287888901091 8.510134528156787
+ POINT 1635 -15.51318860052802 8.107370522015474
+ POINT 1636 -16.04544791423854 8.060837516432803
+ POINT 1637 -12.46766878840969 10.67227976168969
+ POINT 1638 -11.95934157712685 10.67017529400733
+ POINT 1639 -10.71091751983426 6.663122417067669
+ POINT 1640 -10.45710194371655 7.096666284170696
+ POINT 1641 -10.46487666458869 6.166894149966415
+ POINT 1642 -10.96746076370507 6.201968922858168
+ POINT 1643 -10.44773102895123 5.275394031275448
+ POINT 1644 -10.20212605088105 5.720747497892338
+ POINT 1645 -9.928437171372778 5.290400873410871
+ POINT 1646 -9.945582807010235 6.18190099210184
+ POINT 1647 -13.2986928764065 5.688395693536721
+ POINT 1648 -13.12801457340368 6.205213648598734
+ POINT 1649 -11.74872710378692 8.418130127367466
+ POINT 1650 -12.02256077486237 7.971839549607667
+ POINT 1651 -12.50944374702482 8.841147771275015
+ POINT 1652 -12.78537686860573 8.36460697845175
+ POINT 1653 -12.56903292510741 7.933544995889006
+ POINT 1654 -12.31858916520195 7.509382640669432
+ POINT 1655 13.43619694655841 5.185526953886848
+ POINT 1656 12.93462220614015 5.358195834077412
+ POINT 1657 13.29868673147849 5.68838933264013
+ POINT 1658 12.6048962546636 4.990129099323558
+ POINT 1659 12.47144390129601 5.488517379573725
+ POINT 1660 12.66773340441992 4.523290710179079
+ POINT 1661 12.20022404450319 4.658903670708396
+ POINT 1662 10.71091693015139 6.663120759878266
+ POINT 1663 10.46487540167239 6.166892274467385
+ POINT 1664 10.96745927067751 6.201966434828546
+ POINT 1665 11.47479568277288 8.879068504656995
+ POINT 1666 11.74872710084068 8.418128977876485
+ POINT 1667 10.41171824790274 4.44204662093386
+ POINT 1668 9.95651127773848 4.316934168875102
+ POINT 1669 10.19419137109885 3.91393666291501
+ POINT 1670 10.72126631852727 4.813787013527604
+ POINT 1671 10.99495611235534 5.244133924789459
+ POINT 1672 10.44772794837044 5.275391038155809
+ POINT 1673 10.95894641188764 4.410789507567511
+ POINT 1674 11.39310410040094 4.215962651334707
+ POINT 1675 11.08355602977641 3.844222258740964
+ POINT 1676 11.76361231084955 4.489943298379086
+ POINT 1677 11.89137865119184 3.919107181901866
+ POINT 1678 11.70510621616581 4.951490272490563
+ POINT 1679 10.26855741345323 2.837344939506088
+ POINT 1680 10.19797132927438 3.43230183825083
+ POINT 1681 9.806904421137391 3.198323297051241
+ POINT 1682 10.65317829943864 3.557414290309588
+ POINT 1683 11.09104496327604 3.357021849792107
+ POINT 1684 15.24378585350844 7.682394375166194
+ POINT 1685 14.91119126151212 7.280158226193516
+ POINT 1686 15.41335252508149 7.2552534786716
+ POINT 1687 14.33938124011792 7.524093148708583
+ POINT 1688 14.48388392770153 8.085767740880334
+ POINT 1689 14.07639118126524 7.906902288220206
+ POINT 1690 13.61481867571485 7.839218526827278
+ POINT 1691 13.75932136329846 8.400893118999029
+ POINT 1692 13.02181590626726 8.80975073334144
+ POINT 1693 12.78537663953285 8.364604900612228
+ POINT 1694 13.47592883520427 9.785178774102992
+ POINT 1695 13.99000741695932 9.792862338836377
+ POINT 1696 13.73926224561804 10.23937500144348
+ POINT 1697 13.236278480666 9.312479110286336
+ POINT 1698 13.51221143214682 8.835937734550996
+ POINT 1699 13.97378393769721 8.903621495943923
+ POINT 1700 11.4612780216533 9.774811388208361
+ POINT 1701 11.70834875389301 10.2227478045437
+ POINT 1702 1.893403551233607 0.5757525887353929
+ POINT 1703 2.220671493500129 0.1236668831597823
+ POINT 1704 2.359744414402249 0.6278542389056427
+ POINT 1705 -9.020619693030262 2.610992623251209
+ POINT 1706 -9.424238324783893 2.359599448271815
+ POINT 1707 -9.474338358545761 2.853388073889197
+ POINT 1708 -9.406414519116504 3.443886808846754
+ POINT 1709 -9.192243991855898 3.8667371366121
+ POINT 1710 -8.859666959835261 3.521795695676809
+ POINT 1711 -9.806915390566399 3.198329514824488
+ POINT 1712 -10.19798187725191 3.432308248445783
+ POINT 1713 -10.26857176218753 2.83735353592188
+ POINT 1714 -0.2472699682428073 1.437936441491353
+ POINT 1715 -2.582068645534674e-06 1.920788194433522
+ POINT 1716 0.2472626424805853 1.437936427731552
+ POINT 1717 -0.247268257212236 2.398961916430443
+ POINT 1718 0.2472643535111566 2.398961902670643
+ POINT 1719 -0.7378459209025934 2.410751873167692
+ POINT 1720 -3.510975514120101 1.270946662206892
+ POINT 1721 -3.322776245011294 0.762200977161605
+ POINT 1722 -2.853429843183762 0.6871825417534015
+ POINT 1723 -3.156651266211425 0.2506822223484442
+ POINT 1724 -2.526771255348011 1.133795929446323
+ POINT 1725 -2.359754750523105 0.6278550165060958
+ POINT 1726 -2.749118087874698 1.631270599590879
+ POINT 1727 -2.255442995214041 1.571943074343573
+ POINT 1728 1.53116419331424 38.96511859947919
+ POINT 1729 1.391479955471506 39.46383466102701
+ POINT 1730 0.7618857048316392 38.5419587525552
+ POINT 1731 0.5146182923979471 39.02481055530693
+ POINT 1732 1.257885274755287 38.51315760964314
+ POINT 1733 1.759808139569742 38.47357029951259
+ POINT 1734 0.9905296510871409 38.0504104525886
+ POINT 1735 -0.4905790953354032 37.11107424397444
+ POINT 1736 -0.2472682834896911 37.60103789161089
+ POINT 1737 0.2472643797585856 37.6010379053717
+ POINT 1738 1.263131334613411 23.08451873542055
+ POINT 1739 1.768522093775502 23.0839250614674
+ POINT 1740 10.17836399587573 30.64876633574936
+ POINT 1741 10.43178957770394 30.2036916661421
+ POINT 1742 9.917079336223154 30.19681981804171
+ POINT 1743 2.526761585236505 38.86620413395363
+ POINT 1744 2.853417999303659 39.31281858657962
+ POINT 1745 4.533434559259351 36.88852576319535
+ POINT 1746 4.788963418436968 37.30790607443685
+ POINT 1747 4.24940701236751 37.28825022373893
+ POINT 1748 -0.7511020128127708 32.88704851349204
+ POINT 1749 -1.004871624037433 32.42701549534664
+ POINT 1750 0.7570181843694639 30.16737890662038
+ POINT 1751 0.2521487164707948 30.16753615186619
+ POINT 1752 0.5048695270937089 29.71821296405268
+ POINT 1753 1.009092401403684 30.61588819116551
+ POINT 1754 1.261813212026598 30.16656500335199
+ POINT 1755 5.068073916803044 30.6133100080666
+ POINT 1756 4.814374367436898 31.05972795409684
+ POINT 1757 5.32423717645129 31.06128530414202
+ POINT 1758 16.9971372534731 13.37045922378724
+ POINT 1759 16.76209634957647 13.83891099070072
+ POINT 1760 18.58096903763212 13.77579904583797
+ POINT 1761 18.85904395297749 13.34143701271937
+ POINT 1762 18.41152250629444 13.29587573790125
+ POINT 1763 18.68665357284071 14.64903426839365
+ POINT 1764 18.29676492885642 15.05256270617449
+ POINT 1765 18.88575798278899 15.06972612425592
+ POINT 1766 17.78489646840998 15.09030766023127
+ POINT 1767 17.98400087835825 15.51099951609354
+ POINT 1768 18.5600217445983 14.22769376801203
+ POINT 1769 18.11860781194196 14.17997612813817
+ POINT 1770 19.15364966814478 14.24346421008305
+ POINT 1771 17.67256729194256 14.23260556757826
+ POINT 1772 17.69351458497638 13.7807108454042
+ POINT 1773 18.99703873975269 19.54715250100616
+ POINT 1774 19.39321851764313 19.1027704587883
+ POINT 1775 18.52185804865407 19.54704832154459
+ POINT 1776 18.71270474241169 19.9999472088743
+ POINT 1777 17.69535052595289 15.99996226585984
+ POINT 1778 18.20721898639934 15.96221731180307
+ POINT 1779 14.56172135096343 23.94597916401752
+ POINT 1780 15.08739392619418 23.94259090424376
+ POINT 1781 14.82034555201745 24.38666761316468
+ POINT 1782 19.39302316315837 20.89717655197163
+ POINT 1783 18.9389913228763 21.35310913845178
+ POINT 1784 18.99684697892711 20.45276516384465
+ POINT 1785 18.5216662878285 20.45266098438309
+ POINT 1786 18.23371033345935 20.90481779098108
+ POINT 1787 18.44846900788159 21.34055417663924
+ POINT 1788 18.58165180641398 21.78818437573758
+ POINT 1789 17.87637081699702 21.33989302826688
+ POINT 1790 14.33939351436823 32.47590433579525
+ POINT 1791 14.48389140697212 31.91422614486741
+ POINT 1792 15.01628294267461 31.87205866229466
+ POINT 1793 14.75329046628237 31.48925416010179
+ POINT 1794 15.24379483009601 32.31759511000062
+ POINT 1795 13.51391520548446 23.95486250753157
+ POINT 1796 13.2557163229842 23.51457606093689
+ POINT 1797 12.99156814797479 23.95834021442671
+ POINT 1798 14.03636817864028 23.9505771134901
+ POINT 1799 14.30341655281701 23.50650040456918
+ POINT 1800 14.0490662851837 23.06997473842002
+ POINT 1801 14.57441945750685 23.06537678894744
+ POINT 1802 14.06279368008757 21.3236640608961
+ POINT 1803 13.53137856169023 21.32075100476631
+ POINT 1804 13.79945769458797 20.88653785779963
+ POINT 1805 16.48589251600749 21.75662015498322
+ POINT 1806 16.7770188066016 21.32987302051025
+ POINT 1807 16.23478715141826 21.32948158311302
+ POINT 1808 17.3448681568828 21.33058411749459
+ POINT 1809 17.55962683130505 21.76632050315274
+ POINT 1810 16.93904168525997 24.42265130776862
+ POINT 1811 17.21421228526815 24.86330083072308
+ POINT 1812 16.6810332475078 24.83472173963332
+ POINT 1813 17.1982158646259 23.98500607585395
+ POINT 1814 16.66503682686555 23.95642698476418
+ POINT 1815 19.16297996782281 24.02058583340057
+ POINT 1816 19.25792778397388 23.55188868076646
+ POINT 1817 19.6018346474257 23.97090400112769
+ POINT 1818 18.66035549167398 24.06458002427793
+ POINT 1819 18.99865807228879 24.48246002560036
+ POINT 1820 14.55271823159151 24.83011771959528
+ POINT 1821 15.07839080682226 24.82672945982152
+ POINT 1822 14.28780763486628 25.27536810389313
+ POINT 1823 13.48363738345204 10.68334955994101
+ POINT 1824 13.99771596520709 10.69103312467439
+ POINT 1825 17.49654751855807 12.39351922586987
+ POINT 1826 17.22317514403901 12.87270591921469
+ POINT 1827 17.0201728164883 12.42839146938536
+ POINT 1828 17.91955247554229 13.28295754083165
+ POINT 1829 18.19151987686094 12.8507518727688
+ POINT 1830 17.47351195554288 13.33558698027175
+ POINT 1831 18.00416107324389 12.39434056037404
+ POINT 1832 18.50176146164216 12.40494748537886
+ POINT 1833 17.80115874569317 11.95002611054472
+ POINT 1834 16.79404890136688 11.97251973589774
+ POINT 1835 16.52067652684781 12.45170642924257
+ POINT 1836 16.02797959823532 12.45898698827148
+ POINT 1837 15.78700936626793 12.00541048997754
+ POINT 1838 15.52043635277687 12.46856278249407
+ POINT 1839 16.05643793044336 11.55103582499389
+ POINT 1840 15.5488946849849 11.56061161921647
+ POINT 1841 16.57287799135018 11.53259751676433
+ POINT 1842 17.07237428099067 11.50928255690713
+ POINT 1843 15.83583901726724 10.22173398984722
+ POINT 1844 15.57327102716685 9.802415814168842
+ POINT 1845 16.10340565717593 9.787419712774863
+ POINT 1846 15.56201381820924 10.67148352273701
+ POINT 1847 16.63238319420686 9.754752209684828
+ POINT 1848 17.16253549533622 9.731242758971581
+ POINT 1849 16.36981520410647 9.335434034006447
+ POINT 1850 16.62468438429443 8.881552759389605
+ POINT 1851 16.09045850341202 8.917730295952133
+ POINT 1852 -18.71270480363148 19.99994720870178
+ POINT 1853 -18.52166623703531 20.45266088450229
+ POINT 1854 -18.52185800432806 19.54704841094098
+ POINT 1855 -19.52620606861738 21.34480663718991
+ POINT 1856 -19.49788131345209 21.77367208204773
+ POINT 1857 -19.95652172785348 21.31804421550326
+ POINT 1858 -18.93899138998692 21.35310882317254
+ POINT 1859 -15.41336472355292 32.74473177212385
+ POINT 1860 -14.91120300548017 32.71982820066302
+ POINT 1861 -15.24379759687971 32.31759127892943
+ POINT 1862 -15.51319663933861 31.8926193258387
+ POINT 1863 -15.01628432575631 31.8720563054135
+ POINT 1864 -15.8128873248544 31.48985418888792
+ POINT 1865 -16.04545639284706 31.93915110915433
+ POINT 1866 -13.73926553271729 29.7606245440472
+ POINT 1867 -13.9977196654956 29.30896632719983
+ POINT 1868 -13.48364033262393 29.31665160461403
+ POINT 1869 -16.63239437432929 30.24523068926878
+ POINT 1870 -16.89070674738754 29.81350290745965
+ POINT 1871 -17.16254826435143 30.26873590905672
+ POINT 1872 -17.58991750209542 28.49978947605134
+ POINT 1873 -18.10312108953776 28.50158849460802
+ POINT 1874 -14.02976207391727 24.83530603116176
+ POINT 1875 -13.50730912711314 24.83959146419358
+ POINT 1876 -13.7722197102861 24.39434106981482
+ POINT 1877 -9.910917163711101 29.30166999886159
+ POINT 1878 -10.16379441977193 28.85693149401143
+ POINT 1879 -10.42338196742408 29.30700642143803
+ POINT 1880 -8.865707288319939 20.4402358718522
+ POINT 1881 -8.354951980244287 20.44018950619541
+ POINT 1882 -8.61056647960487 20.88042659780381
+ POINT 1883 -8.86570719768363 19.55976134425465
+ POINT 1884 -8.354952278862285 19.55980826280008
+ POINT 1885 -8.610566687586559 19.11957082681093
+ POINT 1886 -9.121386103645744 19.99999862799004
+ POINT 1887 -9.377000603006326 20.44023571959844
+ POINT 1888 -9.377000512370016 19.55976119200088
+ POINT 1889 -8.865603022394847 21.32049699917977
+ POINT 1890 -8.354847714319193 21.32045063352298
+ POINT 1891 -8.099972462421654 21.76042830181979
+ POINT 1892 -7.844935919631678 21.32035790044383
+ POINT 1893 -8.354715320124482 22.20063713853177
+ POINT 1894 -7.844803525436967 22.20054440545263
+ POINT 1895 -8.865674199362843 22.20088990639256
+ POINT 1896 -8.610505262378155 22.6410060100254
+ POINT 1897 -8.354985291815844 16.91842867771209
+ POINT 1898 -8.610508524984098 17.358992612215
+ POINT 1899 -8.865944756334432 16.91817546724494
+ POINT 1900 -5.563175305433118 20.88175519528509
+ POINT 1901 -5.819523783751198 20.44055366808308
+ POINT 1902 -5.314081970855431 20.4412012668848
+ POINT 1903 -6.323600721688926 20.44055355863392
+ POINT 1904 -6.07450738711124 19.99999963023362
+ POINT 1905 -7.845909792127558 19.5598084686856
+ POINT 1906 -7.337224145127458 19.55973210578316
+ POINT 1907 -7.591126121765114 19.11954138245392
+ POINT 1908 -7.085296070269434 19.99999935639965
+ POINT 1909 -6.83051239990699 19.55973227016798
+ POINT 1910 -8.101050302224628 19.99999898612932
+ POINT 1911 -7.84590949350956 20.44018971208093
+ POINT 1912 -4.813437732774505 20.44120133195445
+ POINT 1913 -5.069786211092584 19.99999980475244
+ POINT 1914 -4.81343786679399 19.55879836960208
+ POINT 1915 -5.314082104874918 19.55879830453243
+ POINT 1916 -4.309046734147286 19.55755213850044
+ POINT 1917 -4.553342627929618 19.11635063828043
+ POINT 1918 -4.309046659354325 20.44244765252682
+ POINT 1919 -4.553342419117173 20.88364911465918
+ POINT 1920 -6.321208714327986 18.67923371725688
+ POINT 1921 -5.814542592123692 18.67893193845749
+ POINT 1922 -6.067133751274726 18.23927391170671
+ POINT 1923 -5.563175657876638 19.11824430669487
+ POINT 1924 -5.309100694823378 18.67828450114469
+ POINT 1925 -6.575529014970982 19.11917838177958
+ POINT 1926 -6.828120174122017 18.6795203550288
+ POINT 1927 -5.819524002175232 19.55944574184523
+ POINT 1928 -6.323600940112959 19.55944563239606
+ POINT 1929 -0.5146273697762991 39.02481064861751
+ POINT 1930 -0.7618926205908836 38.54195883210498
+ POINT 1931 -1.257892059341357 38.51315782905916
+ POINT 1932 -1.53117271934942 38.96511874796391
+ POINT 1933 -0.940335173160049 39.49328748376172
+ POINT 1934 -1.391488828330695 39.46383435979364
+ POINT 1935 -1.302906939267033 39.95751571405174
+ POINT 1936 -1.893411551831407 39.42424701152662
+ POINT 1937 -1.723324288351572 36.58041784013928
+ POINT 1938 -1.475258125341042 37.06753940845914
+ POINT 1939 -1.229223032035015 36.61216270438628
+ POINT 1940 -2.223574747428835 37.48318817291252
+ POINT 1941 -2.46865780151201 36.99209310268357
+ POINT 1942 -2.722873167283246 37.43948673138395
+ POINT 1943 -1.727946752245803 37.52870205304977
+ POINT 1944 9.124384730034761 25.2901944687983
+ POINT 1945 9.380903693723068 25.73399854252466
+ POINT 1946 8.869536394962354 25.73292170940668
+ POINT 1947 8.867787034579436 24.84742875339725
+ POINT 1948 8.611808211452907 24.40495794646223
+ POINT 1949 8.357038608147516 24.84664682874531
+ POINT 1950 9.37915433334015 24.84850558651523
+ POINT 1951 9.635034859880143 24.40616641167393
+ POINT 1952 9.891632555335468 24.84893212707499
+ POINT 1953 8.10306863199613 25.28792614032669
+ POINT 1954 7.847089808869599 24.84545533339167
+ POINT 1955 7.337860839610064 24.84465823087261
+ POINT 1956 7.591830815761451 24.40337891929124
+ POINT 1957 7.084483663987436 25.28568916804524
+ POINT 1958 6.829224670879288 24.84361275394481
+ POINT 1959 11.17838537690847 23.52246049961141
+ POINT 1960 11.4371216212408 23.08138069299567
+ POINT 1961 10.9206635519637 23.08206164870911
+ POINT 1962 15.02252590981234 31.03532490076284
+ POINT 1963 14.49013437410986 31.07749238333559
+ POINT 1964 14.2430236988951 30.6424489387683
+ POINT 1965 15.30010765104086 30.62772559584235
+ POINT 1966 2.526915485973436 17.35549624102799
+ POINT 1967 2.276071431689728 17.79312093621829
+ POINT 1968 2.781165078003321 17.79402703104667
+ POINT 1969 6.346618006894577 8.933221976655281
+ POINT 1970 6.606300654387716 8.482722162553308
+ POINT 1971 6.859007165943082 8.928198624363933
+ POINT 1972 5.835923918840571 8.936439330716784
+ POINT 1973 6.088630430395938 9.381915792527408
+ POINT 1974 3.813293467525553 0.8400220701018267
+ POINT 1975 4.278266624098441 0.9371921865469454
+ POINT 1976 4.091218596162663 0.4229233416757498
+ POINT 1977 0.7378420180172898 2.410751924726134
+ POINT 1978 1.233841522613396 2.439553016285871
+ POINT 1979 0.9905295332508535 1.949589272233458
+ POINT 1980 0.4905763428736994 2.888925646723056
+ POINT 1981 8.615527392862056 13.82496521644805
+ POINT 1982 8.869539085606789 14.26707992304672
+ POINT 1983 8.359008517018593 14.26876890588306
+ POINT 1984 7.109843205144307 9.375226262222675
+ POINT 1985 7.369525852637445 8.924726448120705
+ POINT 1986 3.536686478737197 13.8361386042247
+ POINT 1987 3.790057778698816 13.39355052709382
+ POINT 1988 3.284192797098449 13.39405264356153
+ POINT 1989 3.789177750276934 14.27725402423099
+ POINT 1990 3.283312768676568 14.27775614069871
+ POINT 1991 3.540719142764858 10.28304212363626
+ POINT 1992 3.793978675026311 10.72885668139838
+ POINT 1993 3.286497665917229 10.72924169735144
+ POINT 1994 6.845584714338232 10.71830373756566
+ POINT 1995 7.355184401511213 10.7157436111351
+ POINT 1996 7.09778359222352 11.16341894215851
+ POINT 1997 7.361673707732298 9.821191246260845
+ POINT 1998 6.851155021037934 9.824663422504075
+ POINT 1999 4.296500541441507 13.39272956312007
+ POINT 2000 4.044006859802759 12.95064360245691
+ POINT 2001 4.802971515540548 13.39198494333306
+ POINT 2002 4.549022434436605 13.83489186796998
+ POINT 2003 4.297887859095104 12.50674192674635
+ POINT 2004 3.791445096352413 12.5075628907201
+ POINT 2005 4.805074931872197 12.50557276622567
+ POINT 2006 4.552513168421852 12.06249205448886
+ POINT 2007 4.301274159001078 10.72795370371833
+ POINT 2008 4.809681854713771 10.7267995158349
+ POINT 2009 4.556607847586633 10.28150291979977
+ POINT 2010 4.047052682153449 11.17415327743351
+ POINT 2011 4.299837130886486 11.6184557573815
+ POINT 2012 3.79254164691172 11.61935873506155
+ POINT 2013 4.80702420366358 11.61728659686082
+ POINT 2014 0.7573648401832791 10.72884628711409
+ POINT 2015 0.2524954018262905 10.72868903454322
+ POINT 2016 0.5048694975539831 10.28178714397273
+ POINT 2017 2.779998485031843 10.72963471324423
+ POINT 2018 3.033258017293297 11.17544927100636
+ POINT 2019 1.22366534318951 19.99999999772072
+ POINT 2020 0.8995237534752946 20.45126532761548
+ POINT 2021 1.847863650156727 19.55191485745089
+ POINT 2022 2.318125048484836 19.5519148489978
+ POINT 2023 -18.93911412821423 18.64650966130721
+ POINT 2024 -18.58166026436047 18.21127422426079
+ POINT 2025 -18.44873810630657 18.65901836236396
+ POINT 2026 -19.52614063366966 18.65502631883318
+ POINT 2027 -18.87780139947743 17.75460066637132
+ POINT 2028 -18.38742537756978 17.76710936742808
+ POINT 2029 -19.25342558557374 17.32881436986417
+ POINT 2030 -19.44766047236443 17.77297922669689
+ POINT 2031 -11.69163369768068 12.03021037174421
+ POINT 2032 -11.44023229826493 11.57846213124561
+ POINT 2033 -11.43422134923478 12.47855566601287
+ POINT 2034 -11.94479073651165 12.47843921193948
+ POINT 2035 -10.92866196056182 11.58403125210506
+ POINT 2036 -10.41689637261445 11.58759636307505
+ POINT 2037 -10.66929872245644 12.03389193678758
+ POINT 2038 -11.18782994842294 11.13216655753308
+ POINT 2039 -9.904431558833004 11.59293222934731
+ POINT 2040 -9.39267865060485 11.59649123185834
+ POINT 2041 -9.139626886740061 11.15213642340234
+ POINT 2042 -8.880975554187973 11.60022024432364
+ POINT 2043 -10.16379479693838 11.14307154466478
+ POINT 2044 -9.910917079266454 10.69833254287327
+ POINT 2045 -10.4233818930479 10.69299667660101
+ POINT 2046 -8.370126273665381 11.60298203772225
+ POINT 2047 -8.62317803753017 12.04733684617825
+ POINT 2048 -6.319914164590672 17.79970756621019
+ POINT 2049 -5.813248042386378 17.79940578741079
+ POINT 2050 -5.812970532530068 16.03929555219032
+ POINT 2051 -6.066345556101558 16.47969823346978
+ POINT 2052 -6.320151886932637 16.03908136247431
+ POINT 2053 -5.812596328700657 16.91987593255003
+ POINT 2054 -6.319777683103225 16.91966174283402
+ POINT 2055 -5.306138086716437 16.03968131654242
+ POINT 2056 -5.559944417547516 15.59906444554695
+ POINT 2057 -4.799950565874155 16.03961222338507
+ POINT 2058 -5.052976680856709 16.47984333002844
+ POINT 2059 -6.574690167020133 15.59804862668566
+ POINT 2060 -6.828065190591623 16.03845130796511
+ POINT 2061 -15.25853880596588 12.9242213232549
+ POINT 2062 -15.52043648370752 12.46856362456286
+ POINT 2063 -15.01756861930122 12.47064487481246
+ POINT 2064 -14.50591702520376 13.37825294329215
+ POINT 2065 -13.99649188437294 13.37881945166879
+ POINT 2066 -14.24624580072877 12.92686908188113
+ POINT 2067 -14.50520649728844 12.47612567984228
+ POINT 2068 -14.76710417503007 12.02046798115024
+ POINT 2069 -13.99841660872912 11.58047866164933
+ POINT 2070 -13.74078007588788 12.02829192794356
+ POINT 2071 -13.99578135645762 12.47669218821891
+ POINT 2072 -13.48181937932821 12.47903532998241
+ POINT 2073 -17.13331118398057 10.61779162646253
+ POINT 2074 -17.656383083496 10.60573919584698
+ POINT 2075 -17.36873112769916 11.06026014994149
+ POINT 2076 -16.02797983714253 12.45898801730209
+ POINT 2077 -16.52067686245398 12.45170765846319
+ POINT 2078 -16.25410369568363 12.9148597141664
+ POINT 2079 -15.78700965047787 12.00541156885965
+ POINT 2080 -17.58990196620047 11.50018232123824
+ POINT 2081 -17.80115956030314 11.95002810346316
+ POINT 2082 -18.10310561939233 11.49837858894322
+ POINT 2083 -17.07237505905118 11.50928449184498
+ POINT 2084 -17.49654816974892 12.39352110356614
+ POINT 2085 -16.79404945073268 11.9725213123703
+ POINT 2086 -16.57287861223137 11.53259914107355
+ POINT 2087 -17.02017330927379 12.42839300923462
+ POINT 2088 -17.22317558147022 12.87270744965903
+ POINT 2089 -10.15245041339834 12.93005084479948
+ POINT 2090 -10.41083981014142 12.48260744897875
+ POINT 2091 -10.92260539808879 12.47904233800876
+ POINT 2092 -11.17576243691975 12.92727117820404
+ POINT 2093 -12.45674776247602 13.37407164467716
+ POINT 2094 -12.19976115126335 12.92710572491763
+ POINT 2095 -11.94436499927842 13.37375042596768
+ POINT 2096 -12.45717349970925 12.47876043064897
+ POINT 2097 -12.96948100660971 12.47903100666709
+ POINT 2098 -13.22448228717945 12.92743126694244
+ POINT 2099 -12.7156240960693 13.82239971451288
+ POINT 2100 -12.97772467480737 14.26819310667658
+ POINT 2101 -13.74302984524772 13.82714319818918
+ POINT 2102 -13.48335862077273 13.37575933677816
+ POINT 2103 -12.97102024805423 13.37575501346284
+ POINT 2104 -12.66774364330618 4.523299107507239
+ POINT 2105 -12.60490407255786 4.990136093565923
+ POINT 2106 -12.20023269789926 4.658910900843035
+ POINT 2107 -12.93462919488069 5.358202577882016
+ POINT 2108 -12.47144927438711 5.488522975166397
+ POINT 2109 -13.43620550685972 5.185534732811357
+ POINT 2110 -14.33938229564766 7.524096539708034
+ POINT 2111 -14.9111947654232 7.280162642147666
+ POINT 2112 -15.24378862055976 7.682398206427763
+ POINT 2113 -15.41335736818264 7.255259352596772
+ POINT 2114 -15.01627536647982 8.127933305249282
+ POINT 2115 -15.30010260228938 9.372269247130333
+ POINT 2116 -15.02252082546601 8.964670165888624
+ POINT 2117 -14.24302038469975 9.357551373852861
+ POINT 2118 -14.50635377271081 9.811747310474253
+ POINT 2119 -13.99000785292662 9.792863973386861
+ POINT 2120 -16.10340678976494 9.787421896710498
+ POINT 2121 -16.63238487037844 9.754755103146911
+ POINT 2122 -16.89069641342317 10.18648047123871
+ POINT 2123 -17.16253750713551 9.731246135309691
+ POINT 2124 -16.60858944999246 10.6380511653244
+ POINT 2125 -11.70834855106328 10.22274842325977
+ POINT 2126 -11.44840726006248 10.67917056592608
+ POINT 2127 -10.94524324959301 9.788054215548343
+ POINT 2128 -10.68395920468744 10.24000068499402
+ POINT 2129 -10.93683692235937 10.68473968678553
+ POINT 2130 -11.47479555660216 8.87906931844303
+ POINT 2131 -11.20910685279271 9.331122511448264
+ POINT 2132 -11.46127783719861 9.774811991078451
+ POINT 2133 -11.97221215426297 9.765816719159695
+ POINT 2134 -12.23551219984005 9.302086962350581
+ POINT 2135 -12.48258291370472 9.750023394531905
+ POINT 2136 -11.99907298758307 8.856941095902805
+ POINT 2137 -13.48363744127368 10.68335058227913
+ POINT 2138 -12.97061921339908 10.68124949973901
+ POINT 2139 -12.72223329311703 10.22272288939034
+ POINT 2140 -13.73926247952205 10.23937626872396
+ POINT 2141 -13.99771620268931 10.69103422356342
+ POINT 2142 -13.47592909151099 9.785180332102566
+ POINT 2143 -12.98553333869411 9.758993132581228
+ POINT 2144 -10.99496024845769 5.244137851664762
+ POINT 2145 -10.72127136894942 4.813791227183295
+ POINT 2146 -11.76362091609507 4.48995017920419
+ POINT 2147 -11.70511237026007 4.951495769211457
+ POINT 2148 -11.39311338658647 4.215969615852156
+ POINT 2149 -11.89139041445578 3.919115893213245
+ POINT 2150 -12.24027988776031 5.8641325949175
+ POINT 2151 -11.91055476543747 5.496066110601405
+ POINT 2152 -11.20040264363509 5.788708193054712
+ POINT 2153 -11.44644349888066 6.284936460155964
+ POINT 2154 -11.47394298363328 5.327105388962559
+ POINT 2155 -12.58774158616357 7.077264164985817
+ POINT 2156 -12.04126943591853 7.115558718704478
+ POINT 2157 -11.99490361784541 6.277557986686686
+ POINT 2158 -12.55579812679505 6.270014851251677
+ POINT 2159 -12.88263830348879 6.618639040367921
+ POINT 2160 -11.7619617379154 6.690818716490142
+ POINT 2161 12.04126828125696 7.115556461827698
+ POINT 2162 11.49280873218955 7.122935250752073
+ POINT 2163 11.76196034822392 6.690816131315052
+ POINT 2164 11.49828322279317 7.993966546699665
+ POINT 2165 12.0225605432701 7.971838012441538
+ POINT 2166 12.88263546208822 6.61863544281538
+ POINT 2167 13.12801043982883 6.205208828783831
+ POINT 2168 12.55579487503194 6.270010728359129
+ POINT 2169 13.69336976028337 6.949530619644269
+ POINT 2170 13.96433801939816 6.375677941228949
+ POINT 2171 13.62552731853477 6.037014047096381
+ POINT 2172 14.13907079774611 5.854800214333848
+ POINT 2173 11.99490119766059 6.277554553029752
+ POINT 2174 11.44644164859318 6.284933341954128
+ POINT 2175 11.20040012011418 5.788704856543246
+ POINT 2176 11.91055022392465 5.49606120424435
+ POINT 2177 12.2402761754012 5.864127938998204
+ POINT 2178 11.47393849027101 5.327100831915041
+ POINT 2179 9.945582057420673 6.181899969396367
+ POINT 2180 10.20212439794679 5.720745644346648
+ POINT 2181 9.928434604118719 5.290398733084792
+ POINT 2182 8.556931258789588 2.528832819977453
+ POINT 2183 8.146974075985931 2.334700766962239
+ POINT 2184 8.559631278214885 1.92425070776564
+ POINT 2185 15.01627398335804 8.127930948668869
+ POINT 2186 15.51318585031227 8.107366722466351
+ POINT 2187 15.56325582361871 8.960502416532755
+ POINT 2188 15.81287665995519 8.510131175388402
+ POINT 2189 16.04544432483895 8.060832677422217
+ POINT 2190 14.75328392450536 8.510740088180491
+ POINT 2191 13.08140472470578 7.902147488418196
+ POINT 2192 13.39847454267256 7.408156657639373
+ POINT 2193 13.15995580927431 7.012459581235187
+ POINT 2194 12.58774024447741 7.077261480810485
+ POINT 2195 12.31858862844304 7.509380600247505
+ POINT 2196 12.56903250649056 7.933543031424325
+ POINT 2197 10.94524346823205 9.788053798414385
+ POINT 2198 11.20910703176076 9.331121907385405
+ POINT 2199 10.95876112935163 8.892310914863021
+ POINT 2200 10.43863740166071 8.90091810703888
+ POINT 2201 10.70432605267283 8.448864704310473
+ POINT 2202 10.17836257478566 9.351235759588613
+ POINT 2203 9.923927498106863 8.907789549036064
+ POINT 2204 10.43178843022046 9.796310885123368
+ POINT 2205 9.917078526666614 9.803182327120552
+ POINT 2206 10.683959420113 10.24000036594633
+ POINT 2207 0.4257056342687726 0.4866078143970918
+ POINT 2208 0.4258045314381747 0.00453325099778762
+ POINT 2209 -8.556941856736707 2.528837422625263
+ POINT 2210 -8.610159650802313 3.016790167285516
+ POINT 2211 -8.395989123541707 3.439640495050862
+ POINT 2212 -8.14698450737254 2.334704873539675
+ POINT 2213 -7.792710741676334 2.625579213893601
+ POINT 2214 -8.55964628277413 1.924257823018384
+ POINT 2215 -9.473525601179848 4.277847459291598
+ POINT 2216 -8.926778041898604 4.355756346121653
+ POINT 2217 -9.691050900332758 4.805957037797565
+ POINT 2218 -9.956516850290052 4.316937828288013
+ POINT 2219 -8.686199335312255 4.812171506430753
+ POINT 2220 -8.404917725988305 4.401061183751255
+ POINT 2221 -9.445445922262575 5.251310504414456
+ POINT 2222 -10.19419874351271 3.913941535915821
+ POINT 2223 -10.41172404266562 4.442051114421789
+ POINT 2224 -10.95895326217208 4.410794934811104
+ POINT 2225 -11.08356606030267 3.84422950309065
+ POINT 2226 -10.65318906962747 3.557421534579559
+ POINT 2227 -11.09105814178689 3.357030647526714
+ POINT 2228 -9.694219594930232 6.638197533051649
+ POINT 2229 -9.431468981222594 6.192050880977571
+ POINT 2230 -0.7570180027335149 9.832621255886785
+ POINT 2231 -0.5048693800457256 10.28178717573282
+ POINT 2232 -0.2521485634907947 9.832463971555836
+ POINT 2233 -6.855131749277465 1.732845876664869
+ POINT 2234 -6.972438504319116 2.219795679489987
+ POINT 2235 -6.414622035057123 1.574492892908077
+ POINT 2236 -6.765669841096464 1.179115021389632
+ POINT 2237 -1.004871482698477 7.572984637225677
+ POINT 2238 -1.257490486514399 8.028793797334046
+ POINT 2239 -0.7545338586426834 8.025313601582315
+ POINT 2240 -1.762470594293599 8.030999493773637
+ POINT 2241 -1.512132970237805 8.483328458130275
+ POINT 2242 -1.229222734249484 3.387837151439014
+ POINT 2243 -0.9842473157104142 3.857601341818763
+ POINT 2244 -2.760974422104667 6.228081510033119
+ POINT 2245 -2.253497692870489 6.221058881823054
+ POINT 2246 -2.513284803608339 6.678759929530004
+ POINT 2247 -2.22068215594449 0.1236680774559861
+ POINT 2248 -1.893412282768675 0.5757529280991733
+ POINT 2249 -0.7618927259509458 1.458040956527683
+ POINT 2250 -0.514627501401715 0.975189189825712
+ POINT 2251 -0.9403354900406863 0.5067124244511273
+ POINT 2252 -1.391489330979924 0.5361655784306855
+ POINT 2253 -1.302907496264832 0.04248432242006185
+ POINT 2254 -1.531173210898604 1.03488105453053
+ POINT 2255 -1.759815051157529 1.526429257888473
+ POINT 2256 -1.982161883684216 2.023903928033029
+ POINT 2257 -0.9905345662098708 1.949589159885626
+ POINT 2258 -1.233845294320426 2.439552824859994
+ POINT 2259 -1.257892099368779 1.486841908219986
+ POINT 2260 -4.253221810686109 1.820570946531706
+ POINT 2261 -4.758491289411085 1.8896992927888
+ POINT 2262 0.9403284851173297 39.49328748546868
+ POINT 2263 1.302900066834092 39.9575161643721
+ POINT 2264 0.4257054490154915 39.51339213116585
+ POINT 2265 0.4258043460689575 39.99546675296004
+ POINT 2266 0.7378421542620126 37.58924786878497
+ POINT 2267 1.23384172418566 37.56044672587291
+ POINT 2268 0.4905764528571049 37.11107417865601
+ POINT 2269 -0.2485634106147014 34.74540615296891
+ POINT 2270 -0.4944721332766874 35.20892213996861
+ POINT 2271 -0.7430353076084667 34.7387144383873
+ POINT 2272 0.248563135802923 34.74540613716317
+ POINT 2273 -3.852885629984648e-08 34.27519843558186
+ POINT 2274 -0.984247561800016 36.14239856410436
+ POINT 2275 -0.7361813987894855 36.62952013242423
+ POINT 2276 -0.2456036251004044 36.64131010369253
+ POINT 2277 -0.7400749794124697 35.68099320876465
+ POINT 2278 -1.233116612657999 35.66363578072671
+ POINT 2279 -0.2456030824187044 35.68768492334626
+ POINT 2280 -0.5050495520169673 27.93392892167996
+ POINT 2281 -0.2524953199740186 28.37907783165175
+ POINT 2282 -0.7575449060331049 28.37910298308664
+ POINT 2283 0.5049254003565739 26.16245156440273
+ POINT 2284 0.2524838536841221 26.60459196252057
+ POINT 2285 0.7574092359319105 26.60463622076165
+ POINT 2286 1.262484608430572 26.60474311400658
+ POINT 2287 1.010043061758121 27.04688351212442
+ POINT 2288 1.767930132642603 27.49060027590907
+ POINT 2289 2.02050092362578 27.04726519540428
+ POINT 2290 2.2733126220116 27.490875065944
+ POINT 2291 4.294356946623791 24.8410616389421
+ POINT 2292 4.547087505439189 24.40041073521517
+ POINT 2293 4.800380884839186 24.84120087084955
+ POINT 2294 4.293926155091318 23.96024866126563
+ POINT 2295 4.799950093306713 23.96038789317308
+ POINT 2296 3.788414878485399 23.96059221848699
+ POINT 2297 4.041277466352923 23.5205693764449
+ POINT 2298 1.514809999556898 24.40061413188652
+ POINT 2299 1.767492707689488 23.96146212230959
+ POINT 2300 1.262539709988568 23.9615922644941
+ POINT 2301 7.321627964579404 38.17042681938287
+ POINT 2302 7.793206680574138 37.97435229673911
+ POINT 2303 7.678404262385088 38.46732542318286
+ POINT 2304 6.972433698867157 37.78020975935011
+ POINT 2305 6.855127394446583 38.26716082157134
+ POINT 2306 6.414615189107867 38.42551451657923
+ POINT 2307 6.765662894204413 38.82088748771397
+ POINT 2308 5.835924386613025 31.06356123096226
+ POINT 2309 6.346618511134158 31.06677866630198
+ POINT 2310 6.088630850338571 30.61808479345149
+ POINT 2311 5.582224837246878 31.5099791769925
+ POINT 2312 10.95894851210964 35.58920884422533
+ POINT 2313 11.39310711972735 35.78403513220901
+ POINT 2314 10.72126794961869 35.18621162434592
+ POINT 2315 10.41172000961541 35.55795193531766
+ POINT 2316 10.44772930264001 34.72460793267786
+ POINT 2317 10.99495780513424 34.75586484158553
+ POINT 2318 9.020612145212025 37.38901099607349
+ POINT 2319 9.424228545153195 37.64040579751443
+ POINT 2320 9.474330615488972 37.14661597391932
+ POINT 2321 8.40491449200708 35.59893959494738
+ POINT 2322 8.926774996129321 35.64424422876988
+ POINT 2323 8.686196885775953 35.18782930360295
+ POINT 2324 8.152785656806662 36.06385741842882
+ POINT 2325 7.912207546453292 35.6074424932619
+ POINT 2326 9.956512910039363 35.68306455775935
+ POINT 2327 9.473521881426226 35.72215416875295
+ POINT 2328 9.691048418511331 35.19404432643185
+ POINT 2329 10.19419347253031 36.08606177763876
+ POINT 2330 9.192239487657353 36.13326446009738
+ POINT 2331 9.406409183385882 36.55611572705381
+ POINT 2332 8.859662298088979 36.47820578707073
+ POINT 2333 10.19797450918269 36.5676960857483
+ POINT 2334 9.806907805057346 36.80167464694597
+ POINT 2335 10.26856200452538 37.16265232046304
+ POINT 2336 6.871912061838399 35.54333618666676
+ POINT 2337 7.405021657601408 35.59824784517664
+ POINT 2338 7.126969115489866 36.01744865823345
+ POINT 2339 7.657150492801826 35.13333002169522
+ POINT 2340 6.621960666341595 35.0990227984202
+ POINT 2341 6.888811633623055 34.66573394307474
+ POINT 2342 6.360807696014708 34.64062136788498
+ POINT 2343 6.343908124230053 35.518223611477
+ POINT 2344 7.402796728654058 34.67408026698564
+ POINT 2345 7.141643758327172 34.21567883645042
+ POINT 2346 7.909982617505943 34.68327491507089
+ POINT 2347 3.322763046202144 39.2378007288512
+ POINT 2348 3.15663647718721 39.74932014657087
+ POINT 2349 3.813291001601433 39.15997825895766
+ POINT 2350 4.091217816567636 39.57707682242515
+ POINT 2351 3.510964067743604 38.72905450866509
+ POINT 2352 2.255436314939442 38.42805648019456
+ POINT 2353 1.982157396380489 37.97609549035852
+ POINT 2354 2.749110842047252 38.36872932479956
+ POINT 2355 6.081230166453511 35.97194010898045
+ POINT 2356 5.818441994459794 36.44062612474002
+ POINT 2357 6.331071347733141 36.43122301548313
+ POINT 2358 5.320795889254486 36.4447624160653
+ POINT 2359 5.570637070534115 36.904045322568
+ POINT 2360 5.831278770956706 35.52762672073389
+ POINT 2361 5.970382527196483 38.42268507006546
+ POINT 2362 6.061700466822952 37.87411431502481
+ POINT 2363 5.314747458531205 38.19213207237964
+ POINT 2364 5.061201838228348 37.78945770174573
+ POINT 2365 5.345229385120188 37.38973324120216
+ POINT 2366 5.842875490325496 37.38559694987687
+ POINT 2367 6.287108152236881 37.38842639639064
+ POINT 2368 5.556022539290377 38.55085980808124
+ POINT 2369 5.910327271106762 39.10675356293056
+ POINT 2370 4.527223806949365e-08 28.82425190516497
+ POINT 2371 0.2524954118648361 29.271311063285
+ POINT 2372 -0.2524953073975582 29.27131105117846
+ POINT 2373 0.7573648797635052 29.27115381803919
+ POINT 2374 0.2524953992883756 28.37907784375829
+ POINT 2375 2.273105925774813 30.16491138028067
+ POINT 2376 1.767218293970705 30.16613550136842
+ POINT 2377 1.515144076936485 29.71762621682329
+ POINT 2378 2.526574159573979 27.93457399209241
+ POINT 2379 2.779582705512834 28.37954785163075
+ POINT 2380 2.273750376967278 28.37918400598714
+ POINT 2381 3.286081896042008 28.37994089986349
+ POINT 2382 3.033258113435307 28.82455091375822
+ POINT 2383 3.538866301224259 27.9356384317024
+ POINT 2384 3.792541709146731 28.38064149382986
+ POINT 2385 2.779144950557156 27.49123891158762
+ POINT 2386 -0.2509574395584928 32.89023083452718
+ POINT 2387 -0.5001445292837633 33.34678369244119
+ POINT 2388 -0.248563270487983 33.81258223243197
+ POINT 2389 -0.7487078437422611 33.80939991139683
+ POINT 2390 0.2485632759296414 33.81258221662623
+ POINT 2391 0.7557252605028959 31.06778977059484
+ POINT 2392 0.5035766139793988 31.51991170020357
+ POINT 2393 0.2521487272230526 31.06882402404262
+ POINT 2394 1.512133316893194 31.51667185955954
+ POINT 2395 1.257490837521165 31.97120645676332
+ POINT 2396 1.762471007155117 31.96900086956706
+ POINT 2397 1.26052028816003 31.06697586732646
+ POINT 2398 4.299971210771425 32.85149278176542
+ POINT 2399 4.813858896773226 32.84793939933139
+ POINT 2400 4.555689088750212 33.29824097344651
+ POINT 2401 4.047040589691667 32.40376536153468
+ POINT 2402 3.788870781668652 32.85406693564981
+ POINT 2403 1.99779136886551 34.24333877774004
+ POINT 2404 1.739534188555335 34.71160974839909
+ POINT 2405 2.242930868975687 34.69789125435826
+ POINT 2406 1.750101670519205 33.79266021463997
+ POINT 2407 2.253498350939557 33.77894172059914
+ POINT 2408 4.811613439274451 30.16570216508861
+ POINT 2409 4.556608060237682 29.71849742642267
+ POINT 2410 4.303205728751885 30.16454791935548
+ POINT 2411 5.321476248288842 30.16725951513379
+ POINT 2412 5.830756015410285 30.16946429579235
+ POINT 2413 6.341450139931419 30.17268173113207
+ POINT 2414 5.574295537881691 29.72185645281436
+ POINT 2415 4.303354423758809 31.05895384807756
+ POINT 2416 4.559517683407055 31.50692914415298
+ POINT 2417 4.303319379261703 31.953673122892
+ POINT 2418 4.814339322939793 31.95444722891127
+ POINT 2419 3.792218950158929 31.95624727677639
+ POINT 2420 3.53960420638969 31.50780686224725
+ POINT 2421 3.283325416819654 31.95789910088994
+ POINT 2422 18.93911406219143 18.64650935978337
+ POINT 2423 19.5261405338395 18.65502620489522
+ POINT 2424 19.39362763295739 15.11254594470878
+ POINT 2425 18.99857188883907 15.51737654824043
+ POINT 2426 19.25787290188996 16.44788794426737
+ POINT 2427 18.75405232248962 16.85355794479968
+ POINT 2428 19.18738723924495 16.90476516850342
+ POINT 2429 18.37155330956431 16.4239303910665
+ POINT 2430 18.3010676469193 16.88080761530255
+ POINT 2431 18.66020366196966 15.9349676413002
+ POINT 2432 19.16290621200404 15.97908962750386
+ POINT 2433 19.60184782770187 16.0291610895696
+ POINT 2434 17.74265060326497 16.90620537096182
+ POINT 2435 18.12514961619028 17.335832924695
+ POINT 2436 15.35519968440101 23.50052060043794
+ POINT 2437 15.61382388545503 23.94120904958511
+ POINT 2438 16.14374614558074 23.94660548122907
+ POINT 2439 15.87594038737391 24.38867578503489
+ POINT 2440 16.40292032494667 23.50896024931439
+ POINT 2441 14.04156102276654 20.44473665232049
+ POINT 2442 13.5101459043692 20.44182359619071
+ POINT 2443 13.23791783332129 20.0000177682021
+ POINT 2444 12.99581450514272 20.44181897368124
+ POINT 2445 14.32798942893715 21.75754985993104
+ POINT 2446 14.59066675027901 22.19303681739878
+ POINT 2447 14.05739186853169 22.19336416533053
+ POINT 2448 14.59606856183489 21.32333671296435
+ POINT 2449 17.02043936108002 17.36861009534426
+ POINT 2450 16.75104595303201 17.80975860309653
+ POINT 2451 17.29733916448795 17.80237918810654
+ POINT 2452 16.8825211737115 20.00090158182218
+ POINT 2453 16.50015673941269 20.45264191937547
+ POINT 2454 16.08514518550571 20.00088643540819
+ POINT 2455 16.11090188810538 20.45097896467276
+ POINT 2456 15.67928540345191 21.32845415312463
+ POINT 2457 15.97041169404601 20.90170701865165
+ POINT 2458 15.55540014013904 20.44995153468437
+ POINT 2459 15.13808712838207 21.32895105033127
+ POINT 2460 15.40246258575432 21.75672561479265
+ POINT 2461 14.87289137953249 20.89506525129633
+ POINT 2462 16.20906446251038 17.81010162569915
+ POINT 2463 16.48596426591832 18.24387071846142
+ POINT 2464 17.67264086770901 25.76730075340195
+ POINT 2465 17.52697787020489 25.32168372621399
+ POINT 2466 17.1018668450201 25.72098828977573
+ POINT 2467 17.78498630795706 24.9096132943493
+ POINT 2468 18.29689274451687 24.94722520315896
+ POINT 2469 17.98412715958014 24.48884230766805
+ POINT 2470 18.19154482344632 27.14919909897187
+ POINT 2471 18.00418440385464 27.60561752382607
+ POINT 2472 18.50178002760287 27.59500731331329
+ POINT 2473 17.22320550548447 27.12725699911247
+ POINT 2474 16.99718056314592 26.6294993269721
+ POINT 2475 17.47355478486276 26.66436298910405
+ POINT 2476 14.77835587396051 33.47591176927389
+ POINT 2477 14.5037091327629 32.89870630528225
+ POINT 2478 14.20286679509669 33.2286249931342
+ POINT 2479 14.91119950175903 32.71983261654729
+ POINT 2480 15.41335988088872 32.74473764552774
+ POINT 2481 13.26816755360081 21.75856091096891
+ POINT 2482 13.0048315681012 21.32143470787244
+ POINT 2483 16.7511085267673 22.19060870549156
+ POINT 2484 16.20887687158396 22.19021726809433
+ POINT 2485 16.17786126300281 23.06167228219098
+ POINT 2486 16.69915194428762 23.07149378572608
+ POINT 2487 16.13755756315898 24.82813436948326
+ POINT 2488 16.41272816316716 25.26878389243772
+ POINT 2489 15.60763530303328 24.82273793783929
+ POINT 2490 15.34000798260733 25.26618804426989
+ POINT 2491 15.57192146402785 25.71183427290126
+ POINT 2492 15.04267696781684 25.71582579488349
+ POINT 2493 19.39363952846237 24.88740687823191
+ POINT 2494 18.885848220639 24.93009895932983
+ POINT 2495 18.68670736901592 25.35086994601108
+ POINT 2496 19.15366600169464 25.75648146541981
+ POINT 2497 18.56007556635269 25.77221469844787
+ POINT 2498 17.29751718982028 22.19792338787625
+ POINT 2499 17.82901984993449 22.20723229864854
+ POINT 2500 17.02050154539675 22.63152050098736
+ POINT 2501 17.2455606073406 23.07880846811078
+ POINT 2502 17.69547194751031 24.00000391993576
+ POINT 2503 18.20737838407013 24.03761582874543
+ POINT 2504 18.37170027960414 23.57574163654564
+ POINT 2505 17.42146708911589 23.53377959693132
+ POINT 2506 17.74281669022501 23.0938063121926
+ POINT 2507 15.25853878864088 12.92422065523148
+ POINT 2508 15.0175685566735 12.47064415693754
+ POINT 2509 17.58990097002385 11.50018009270076
+ POINT 2510 17.36873006000716 11.06025787356734
+ POINT 2511 18.10310452692819 11.49837625079764
+ POINT 2512 17.65638158620408 10.60573636868109
+ POINT 2513 15.04253498339223 10.68172168255394
+ POINT 2514 14.51635320344969 10.68688592002177
+ POINT 2515 14.77952260731562 10.24189432870903
+ POINT 2516 14.26072834128369 11.1308604785193
+ POINT 2517 15.29884441434331 11.11647511404975
+ POINT 2518 15.02941585016789 11.5708497790334
+ POINT 2519 -5.559612278106096 22.64037941022797
+ POINT 2520 -5.812595406053648 23.08012397436108
+ POINT 2521 -5.306180262645629 23.08034305013044
+ POINT 2522 -11.43576012403759 16.0359829772844
+ POINT 2523 -10.91930130833142 16.03530291420144
+ POINT 2524 -11.17839236720871 16.47753707839758
+ POINT 2525 -11.95093603481484 15.1524484606076
+ POINT 2526 -12.46808184577289 15.15416888873691
+ POINT 2527 -11.69363999436943 15.59489173025373
+ POINT 2528 -11.43396510560572 15.15130554344212
+ POINT 2529 -11.95273105324672 16.03712589444988
+ POINT 2530 -11.43712821990608 16.91861467088325
+ POINT 2531 -10.92066940419991 16.91793460780029
+ POINT 2532 -10.6635990468805 17.35875835728356
+ POINT 2533 -10.40486319418314 16.91768076479789
+ POINT 2534 -10.92128585029515 17.79908423287577
+ POINT 2535 -10.40547964027838 17.79883038987337
+ POINT 2536 -11.17515797884532 20.00000102031307
+ POINT 2537 -11.43519237168078 19.55947185837874
+ POINT 2538 -10.91971864863478 19.55946991621752
+ POINT 2539 -17.69355183457131 26.21921688206146
+ POINT 2540 -17.91957704254855 26.71697422906539
+ POINT 2541 -17.47355512042661 26.66436143557672
+ POINT 2542 -18.41154214164629 26.7040528116507
+ POINT 2543 -18.5809866532765 26.22413096385403
+ POINT 2544 -18.85906250548473 26.65851045942693
+ POINT 2545 -18.58165190157233 21.78818398655776
+ POINT 2546 -18.38730056826177 22.23230077017542
+ POINT 2547 -18.87782301108845 22.24485568342974
+ POINT 2548 -18.44846894716024 21.34055390991821
+ POINT 2549 -12.97062101492125 29.31875403642425
+ POINT 2550 -12.46767030297665 29.32772470608927
+ POINT 2551 -12.72223548790102 29.77728049112642
+ POINT 2552 -13.22907514769955 28.86709581957689
+ POINT 2553 -14.51635826947124 29.31311155849969
+ POINT 2554 -14.26073306937787 28.86913861906651
+ POINT 2555 -14.51706009046056 28.4236684902674
+ POINT 2556 -13.99842148648492 28.41952325896755
+ POINT 2557 -14.7795280512982 29.75810081374213
+ POINT 2558 -15.03254101741964 30.19341176913132
+ POINT 2559 -14.50635783171041 30.1882502220222
+ POINT 2560 -15.04254145518047 29.31827310560881
+ POINT 2561 -15.56202218869213 29.32850735956158
+ POINT 2562 -16.09215847892137 29.34349976240278
+ POINT 2563 -15.83584752723667 29.77825476369244
+ POINT 2564 -15.29885240686518 28.88351810431914
+ POINT 2565 -15.56326504283053 31.03948508656246
+ POINT 2566 -16.09046899946972 31.08225492312761
+ POINT 2567 -16.36982582431926 30.66455001640303
+ POINT 2568 -16.62469646598935 31.11842918285091
+ POINT 2569 -16.10341526745587 30.2125664936679
+ POINT 2570 -15.57327897722664 30.1975740908267
+ POINT 2571 -15.30010875763884 30.62772349910677
+ POINT 2572 -15.02252708302353 31.03532276486708
+ POINT 2573 -17.36874409487987 28.93971676960333
+ POINT 2574 -17.07238964582313 28.49069203988263
+ POINT 2575 -16.33477468949221 28.91218584585327
+ POINT 2576 -16.60860002803674 29.36193324998413
+ POINT 2577 -17.13332295795837 29.38218899091014
+ POINT 2578 -17.65639589526919 29.39423674904752
+ POINT 2579 -16.5728923949743 28.46738370478237
+ POINT 2580 -16.79406580218986 28.02745641123038
+ POINT 2581 -16.05645084585894 28.44895021720102
+ POINT 2582 -11.43421905289848 27.52144951460756
+ POINT 2583 -11.6916320508292 27.96979564432751
+ POINT 2584 -11.94478840412654 27.52156732452448
+ POINT 2585 -10.92260322222589 27.52096203886612
+ POINT 2586 -11.17575957552322 27.07273371906309
+ POINT 2587 -14.54458520175707 20.44472116630428
+ POINT 2588 -14.04156085494355 20.44473661417197
+ POINT 2589 -14.25527342288196 20.00000694189264
+ POINT 2590 -13.74078421360634 27.97171208992312
+ POINT 2591 -13.48445719252365 28.41718221872224
+ POINT 2592 -12.97143787482097 28.41928465053246
+ POINT 2593 -12.71451066085117 27.96964225196112
+ POINT 2594 -12.45912861602707 28.41955585281577
+ POINT 2595 -16.25413008413381 27.08512273155318
+ POINT 2596 -16.52070005962864 27.54827010780237
+ POINT 2597 -16.0279985758462 27.54100069988094
+ POINT 2598 -17.02019731047746 27.57157844290263
+ POINT 2599 -17.22320594816005 27.12725546102763
+ POINT 2600 -16.99718074018281 26.6294981140237
+ POINT 2601 -15.51800943988496 26.61966242771222
+ POINT 2602 -15.01513775921834 26.61758552880125
+ POINT 2603 -15.25855691968476 27.07577642472079
+ POINT 2604 -12.20839980609971 25.28942190368818
+ POINT 2605 -12.46344601370725 25.73349604427731
+ POINT 2606 -11.94630087233431 25.73521605642329
+ POINT 2607 -12.46807352183216 24.84583381340267
+ POINT 2608 -11.95092838045923 24.84755382554865
+ POINT 2609 -12.98765585547731 24.84316419719443
+ POINT 2610 -12.73018442983683 24.40129611905489
+ POINT 2611 -13.24519821910848 25.28412915854135
+ POINT 2612 -9.129651643227703 27.06523077144557
+ POINT 2613 -8.876288684125369 27.50911488874473
+ POINT 2614 -9.387389242004456 27.51154300998024
+ POINT 2615 -11.43269449945645 25.7358488670784
+ POINT 2616 -11.68774070706399 26.17992300766753
+ POINT 2617 -11.43075487019097 26.62688850656359
+ POINT 2618 -11.94436124306884 26.62625569590848
+ POINT 2619 -10.91913903951838 26.62640103082215
+ POINT 2620 -11.43575265155543 23.96401593507675
+ POINT 2621 -10.91929460003396 23.9646969017269
+ POINT 2622 -11.17838521827446 23.52246042867934
+ POINT 2623 -11.43395834902085 24.84869716197923
+ POINT 2624 -11.6936320647533 24.40510907169372
+ POINT 2625 -11.9527226829938 23.96287259864617
+ POINT 2626 -9.674059715189312 31.54309886182291
+ POINT 2627 -9.923928805191473 31.0922115971265
+ POINT 2628 -9.413784457395401 31.09278152867489
+ POINT 2629 -7.33625026584593 21.32043467489033
+ POINT 2630 -7.591125517743469 20.88045700659352
+ POINT 2631 -7.337223839723812 20.44026648652743
+ POINT 2632 -6.830512094503344 20.44026665091224
+ POINT 2633 -6.575528491143303 20.88082068876169
+ POINT 2634 -6.828119317097339 21.32047870894126
+ POINT 2635 -7.081929718985547 21.76037960279158
+ POINT 2636 -6.321207944282921 21.32076561666295
+ POINT 2637 -8.865941131087769 23.08182349266286
+ POINT 2638 -8.35498225184941 23.08157072480208
+ POINT 2639 -8.866487325995669 23.96406401648594
+ POINT 2640 -8.355738913521897 23.96328209781178
+ POINT 2641 -8.611808118958542 24.40495790685818
+ POINT 2642 -9.122215297035932 23.52275432385121
+ POINT 2643 -9.377738307564679 23.08218960907453
+ POINT 2644 -9.378284502472578 23.9644301328976
+ POINT 2645 -11.43519851064686 20.44052946226004
+ POINT 2646 -10.91972478760085 20.44052752009882
+ POINT 2647 -10.92146522300643 21.32094671163846
+ POINT 2648 -11.18084963629104 21.76061562971537
+ POINT 2649 -11.43914973268702 21.32072488012269
+ POINT 2650 -8.354717852301953 17.79936126551275
+ POINT 2651 -8.865677316820541 17.7991080550456
+ POINT 2652 -8.865604125273149 18.67950030830442
+ POINT 2653 -8.354849206451807 18.67954722684985
+ POINT 2654 -7.8449370799189 18.67964045894598
+ POINT 2655 -7.336251432918799 18.67956409604354
+ POINT 2656 -7.081931132275803 18.23961943152085
+ POINT 2657 -8.09997451760549 18.23956994043947
+ POINT 2658 -7.844805725769048 17.79945449760887
+ POINT 2659 -8.100430139091614 16.47811947625329
+ POINT 2660 -7.845750550729444 16.03722597916978
+ POINT 2661 -8.355741934804009 16.03671803565851
+ POINT 2662 -7.84499390774128 16.91893662122336
+ POINT 2663 -7.336521112848085 16.03802299597051
+ POINT 2664 -7.591832908560479 15.59662155537573
+ POINT 2665 -7.081982832760588 16.47905573175917
+ POINT 2666 -3.54490611780126 20.88709779020111
+ POINT 2667 -3.290304169812604 21.32705841216561
+ POINT 2668 -3.794349397708337 21.32485605719605
+ POINT 2669 -4.07370210063638 19.99999990535588
+ POINT 2670 -3.813606861772008 19.55755217403422
+ POINT 2671 -3.813606786979048 20.4424476880606
+ POINT 2672 -3.309561597917081 19.55534986530946
+ POINT 2673 -3.544906231427986 19.11290209845403
+ POINT 2674 -3.309561559083315 20.44465004303017
+ POINT 2675 -2.976342896691423 37.87084587080842
+ POINT 2676 -3.221425950774599 37.37975080057947
+ POINT 2677 -2.526770059080721 38.86620393748946
+ POINT 2678 -2.74911739425569 38.36872913844745
+ POINT 2679 -3.247670177747043 38.30899320764298
+ POINT 2680 -3.510972884148524 38.7290535079245
+ POINT 2681 -3.738198386584258 38.23117024028548
+ POINT 2682 -2.221684732532352 36.55039136936763
+ POINT 2683 -2.720983152386764 36.50668992783906
+ POINT 2684 -1.975649639226325 36.09501466529477
+ POINT 2685 -2.229342038877392 35.61557517193711
+ POINT 2686 -2.490020268553868 35.14475718983718
+ POINT 2687 -2.734688313083581 35.59417021242318
+ POINT 2688 -1.730981594696612 35.64560164270876
+ POINT 2689 -1.486809012309066 35.18419628736905
+ POINT 2690 -4.303354465001183 31.05895358128684
+ POINT 2691 -4.55951779146229 31.50692884476348
+ POINT 2692 -4.814374491189353 31.05972774650009
+ POINT 2693 -4.303319481666954 31.95367266283595
+ POINT 2694 -4.814339507855124 31.9544468280492
+ POINT 2695 -3.794429959970654 31.05851674025303
+ POINT 2696 -3.285536346627419 31.06016856732271
+ POINT 2697 -3.539604151930885 31.5078065066199
+ POINT 2698 -4.049286659697717 30.61131564198964
+ POINT 2699 -3.792218904985805 31.95624679413531
+ POINT 2700 -3.28332529164257 31.95789862120499
+ POINT 2701 -4.047040621378638 32.40376477742103
+ POINT 2702 7.293827708476641e-08 30.61670207641359
+ POINT 2703 -0.2521485735852201 31.06882400602231
+ POINT 2704 -0.2521485843374779 30.16753613384589
+ POINT 2705 -0.7573647761819143 29.27115377417338
+ POINT 2706 -0.5048694095893164 29.71821293229341
+ POINT 2707 -0.757018053121834 30.16737885684081
+ POINT 2708 -1.261813079214908 30.16656491069634
+ POINT 2709 -1.00909225396307 30.61588811224881
+ POINT 2710 -1.750101564306177 33.7926600881429
+ POINT 2711 -1.247341893467582 33.80032930854107
+ POINT 2712 -0.9957606346718019 34.26612784853185
+ POINT 2713 -1.241669357333788 34.72964383553155
+ POINT 2714 -1.739534339372401 34.71160969751359
+ POINT 2715 -11.99490542589216 33.72244073919998
+ POINT 2716 -12.55579994637244 33.72998392753992
+ POINT 2717 -12.24028160504613 34.13586616472574
+ POINT 2718 -12.58774656772219 32.92273577571433
+ POINT 2719 -12.04127268056533 32.88444075338846
+ POINT 2720 -12.31859548106905 32.49061802708863
+ POINT 2721 -11.76196356192489 33.30918024521488
+ POINT 2722 -11.49281247527174 32.87706249658918
+ POINT 2723 -11.44644522059858 33.7150624824007
+ POINT 2724 -10.96746234053338 33.79803021601935
+ POINT 2725 -10.46487803283816 33.83310531972037
+ POINT 2726 -10.71091904893609 33.33687709211661
+ POINT 2727 -11.20040420450066 34.21129071000446
+ POINT 2728 -11.46127976573915 30.22519151574363
+ POINT 2729 -11.70834995916295 29.77725564258582
+ POINT 2730 -11.97221458253263 30.23418703394924
+ POINT 2731 -10.68395992686636 29.76000252533419
+ POINT 2732 -10.93683718292719 29.31526402048404
+ POINT 2733 -13.99001145216601 30.2071360473141
+ POINT 2734 -14.24302441828744 30.64244700270329
+ POINT 2735 -13.47593211929433 30.2148213247283
+ POINT 2736 -12.882639952868 33.38136001505353
+ POINT 2737 -13.12801613202197 33.79478544057929
+ POINT 2738 -13.15996275337173 32.9875372887537
+ POINT 2739 -12.56903973339889 32.06645679208884
+ POINT 2740 -12.02256584624203 32.02816176976298
+ POINT 2741 -8.913239817098617 31.99135920727501
+ POINT 2742 -8.40158183646983 31.98514989359324
+ POINT 2743 -8.652257386764454 31.53745947968953
+ POINT 2744 -8.921335412563566 32.89535129795895
+ POINT 2745 -8.673611325668027 33.34794371176464
+ POINT 2746 -8.414840179908452 32.89164203498441
+ POINT 2747 -5.072107480879501 32.40303922173636
+ POINT 2748 -5.328305790674837 31.95629540366389
+ POINT 2749 10.14864152241564 25.29167841478616
+ POINT 2750 10.40452204895563 24.84933923994486
+ POINT 2751 7.345760569471696 27.50220841755529
+ POINT 2752 6.836865374418886 27.50054703680143
+ POINT 2753 7.089552523791351 27.05704250164396
+ POINT 2754 2.525426835782363 26.16307688713685
+ POINT 2755 2.272480634611741 25.72176210905083
+ POINT 2756 2.777875233522349 25.72204462651898
+ POINT 2757 1.767575335564268 26.60489238751902
+ POINT 2758 1.514941509738058 26.16264509615625
+ POINT 2759 2.272957824933265 26.60516717755396
+ POINT 2760 2.778352423843874 26.60544969502211
+ POINT 2761 4.805074847682363 27.49442755495632
+ POINT 2762 4.552513154400769 27.93750824958521
+ POINT 2763 4.297887807610577 27.49325833103988
+ POINT 2764 6.57468887445735 24.40195169880285
+ POINT 2765 6.321311698834721 24.84298263597548
+ POINT 2766 7.849057448689945 25.73004086883459
+ POINT 2767 8.359006247967862 25.73123236418823
+ POINT 2768 8.61552521165617 26.17503643791459
+ POINT 2769 9.404349218168869 30.19173390211969
+ POINT 2770 9.65777479999708 29.74665923251244
+ POINT 2771 10.40670379081607 26.62599846740034
+ POINT 2772 10.66169908791753 26.18015324950281
+ POINT 2773 10.91913923802371 26.62640116557348
+ POINT 2774 10.40539732837285 25.73591803949286
+ POINT 2775 10.91783277558049 25.73632073766599
+ POINT 2776 9.89250783475268 25.73551092662298
+ POINT 2777 9.637659499680273 26.17823816723135
+ POINT 2778 12.98765611516729 24.84316435404515
+ POINT 2779 13.24519849159788 25.28412934430153
+ POINT 2780 12.97771797713904 25.73181949643032
+ POINT 2781 13.4973712688774 25.72824679366293
+ POINT 2782 13.74303197345077 26.17287521768461
+ POINT 2783 13.99649931993174 26.62119388701589
+ POINT 2784 13.48335810089953 26.624255615123
+ POINT 2785 14.0105124879096 25.72518506555582
+ POINT 2786 14.53346833943965 25.71999652791481
+ POINT 2787 14.76538182086017 26.16564275654618
+ POINT 2788 12.97101588266317 26.6242609325337
+ POINT 2789 13.22448322914414 27.07257960186498
+ POINT 2790 11.18782984741558 28.86783824005193
+ POINT 2791 11.44023158859328 28.42154320407505
+ POINT 2792 10.92866118458883 28.41597310920991
+ POINT 2793 15.8358466505693 29.77825662708678
+ POINT 2794 15.57327800023705 30.19757601615488
+ POINT 2795 15.03254016683603 30.19341354430916
+ POINT 2796 -0.8995237521899599 19.54873467419662
+ POINT 2797 -1.223665336802445 19.99999999772069
+ POINT 2798 -1.340523578198245 19.5487346702835
+ POINT 2799 -0.8995237451475713 20.45126532729634
+ POINT 2800 -1.340523571155856 20.45126532338323
+ POINT 2801 -1.523722054976781 19.10064953446878
+ POINT 2802 -1.775181039070304 18.66606637620227
+ POINT 2803 -1.267840977679282 18.66288618849292
+ POINT 2804 -1.847863639589266 19.55191485799285
+ POINT 2805 3.030578223423045 16.47865931956265
+ POINT 2806 2.7786995819392 16.9173169337976
+ POINT 2807 3.283887773770873 16.91774472162141
+ POINT 2808 2.273605935625607 16.91641083896922
+ POINT 2809 2.777737361196587 16.03895609462461
+ POINT 2810 2.272576544974629 16.03887379781015
+ POINT 2811 2.524923874579844 15.59959836069592
+ POINT 2812 3.282925553028259 16.03938388244843
+ POINT 2813 -0.7612694088495366 18.66199020272551
+ POINT 2814 -1.012728392943059 18.227407044459
+ POINT 2815 -0.758598544150526 17.78995693156367
+ POINT 2816 -1.265170112980272 17.79085291733108
+ POINT 2817 4.506764545389951 1.417895953039242
+ POINT 2818 4.783535558950785 1.00631976803145
+ POINT 2819 4.758484548151512 1.889696750885436
+ POINT 2820 4.253215613299169 1.820569169400931
+ POINT 2821 3.510966697825907 1.270945661498197
+ POINT 2822 3.322764554813852 0.7621993600452871
+ POINT 2823 2.853419417958452 0.6871814573462394
+ POINT 2824 3.15663773239814 0.2506800547597778
+ POINT 2825 2.526762781558002 1.133795733001061
+ POINT 2826 0.7361792967570719 3.370479836805422
+ POINT 2827 0.984246123665582 3.857601448530803
+ POINT 2828 1.229220834288343 3.387837280503928
+ POINT 2829 0.2456021749298 4.312315065409472
+ POINT 2830 -6.12900348972989e-07 3.840243961866928
+ POINT 2831 -0.2456030241048603 4.312315022444103
+ POINT 2832 0.2456016322509388 3.358689814749931
+ POINT 2833 0.5049285170465799 15.59922462282507
+ POINT 2834 0.2524349318952632 15.15933354319677
+ POINT 2835 0.7573634386942838 15.15936468952784
+ POINT 2836 -0.2524349044090859 14.27853318435742
+ POINT 2837 1.330778542918409e-08 14.71947361203522
+ POINT 2838 0.2524349358260958 14.27853318222174
+ POINT 2839 -0.2524349083399185 15.15933354533245
+ POINT 2840 -0.7573634152411641 15.15936469433383
+ POINT 2841 -0.5049284966536864 15.59922462549537
+ POINT 2842 0.5049254022037216 13.83754849930346
+ POINT 2843 0.7574092353969514 13.3953638490185
+ POINT 2844 0.2524838513024543 13.39540810425898
+ POINT 2845 0.7573603199205929 14.27848892698126
+ POINT 2846 1.262484605133556 13.39525696279437
+ POINT 2847 1.010043054232288 12.95311656774989
+ POINT 2848 1.767575339991074 13.39510769916648
+ POINT 2849 1.514941521155737 13.83735498043508
+ POINT 2850 1.262295113836738 15.15932946063648
+ POINT 2851 1.767248131092881 15.15945960799914
+ POINT 2852 1.514810041101744 15.5993859165188
+ POINT 2853 1.009801528685421 14.71943838100818
+ POINT 2854 1.262291995063047 14.2784536980899
+ POINT 2855 1.767382729920565 14.278304434462
+ POINT 2856 10.41084000253686 12.48260731078788
+ POINT 2857 9.899143909428762 12.48490033133931
+ POINT 2858 10.15245058881716 12.93005073050543
+ POINT 2859 7.613367978441445 10.26725776150029
+ POINT 2860 7.865566856326732 10.71237296609314
+ POINT 2861 7.872056162547818 9.817820601218891
+ POINT 2862 6.840628853956597 11.61013350401928
+ POINT 2863 7.350228541129577 11.60757337758872
+ POINT 2864 7.602701329817169 12.05219325805719
+ POINT 2865 7.859856068084092 11.60547869619642
+ POINT 2866 6.584305485265666 12.05624824322372
+ POINT 2867 6.331860536359608 11.61209380779351
+ POINT 2868 7.345761240100929 12.4977925867857
+ POINT 2869 7.855388767055443 12.4956979053934
+ POINT 2870 6.836865843678177 12.49945375805594
+ POINT 2871 6.328097526081189 12.50141406183017
+ POINT 2872 7.089553280916451 12.94295840539215
+ POINT 2873 8.370126385671387 11.60298196347085
+ POINT 2874 8.117653596983795 11.15836208300238
+ POINT 2875 8.375837173914027 10.70987623336757
+ POINT 2876 4.295101059051913 14.27689245468694
+ POINT 2877 4.801572033150954 14.27614783489993
+ POINT 2878 5.054251674501884 14.71756589197868
+ POINT 2879 5.308173049886577 14.27556530526172
+ POINT 2880 4.041727348991283 14.71850999116095
+ POINT 2881 4.800381330074277 15.15879930644609
+ POINT 2882 5.3069823468099 15.15821677680788
+ POINT 2883 7.849059237793011 14.26996017987809
+ POINT 2884 8.103070930537744 14.71207488647675
+ POINT 2885 5.815417413760485 14.27454965531052
+ POINT 2886 5.562737772409555 13.83313159823176
+ POINT 2887 -0.2521485527378636 8.931176099677991
+ POINT 2888 -0.5035763908778745 8.480088454668433
+ POINT 2889 -0.7557250243185949 8.932210406700243
+ POINT 2890 -0.2509573870619522 8.024279294560063
+ POINT 2891 0.2509575473889861 8.024279283349045
+ POINT 2892 7.962417714058034e-08 7.56950443026293
+ POINT 2893 6.593280292555939 10.27328387180388
+ POINT 2894 6.335879483268245 10.7209592028273
+ POINT 2895 5.830755701913942 9.830536241827216
+ POINT 2896 5.574295302392639 10.27814403449093
+ POINT 2897 5.321475942820628 9.832740939252627
+ POINT 2898 6.341449789967948 9.827318887765713
+ POINT 2899 5.062470520941847 11.17165642054254
+ POINT 2900 5.317804209527402 10.72520563662399
+ POINT 2901 5.827083968620716 10.72300093919858
+ POINT 2902 6.079388390403009 11.16802080496036
+ POINT 2903 5.823065021712079 11.61413554416479
+ POINT 2904 5.315146558477212 11.61569271764991
+ POINT 2905 5.567618704433812 12.05976572048306
+ POINT 2906 1.26260880164937 12.50952783290288
+ POINT 2907 0.7575334319127655 12.509634719127
+ POINT 2908 1.515420485651163 12.06591797610076
+ POINT 2909 1.767930107970686 12.50939982472365
+ POINT 2910 2.779582641351243 11.62045230557948
+ POINT 2911 2.526574119133528 12.06542614609067
+ POINT 2912 2.273750314190195 11.62081612741035
+ POINT 2913 3.538866270969666 12.06436176963468
+ POINT 2914 3.284985271677322 12.50826344534523
+ POINT 2915 3.286081822236629 11.62005928968668
+ POINT 2916 2.273653942155398 10.72932286147457
+ POINT 2917 2.52689359077933 10.28311528781965
+ POINT 2918 2.021045272905355 11.17585461155564
+ POINT 2919 1.76803675068764 11.62082845206683
+ POINT 2920 1.262715444366323 11.62095646024605
+ POINT 2921 1.010161226929193 11.17580755694835
+ POINT 2922 0.7575449618927166 11.62089708098228
+ POINT 2923 1.767940378652842 10.72933518613105
+ POINT 2924 1.262535322656886 10.72890566637786
+ POINT 2925 1.515143991906928 10.28237391629679
+ POINT 2926 0.253078415467722 21.33774656433547
+ POINT 2927 0.5081909984648777 20.90226741555631
+ POINT 2928 -0.3913327526621082 20.45100208957463
+ POINT 2929 2.734971728257651e-09 20.45100208875773
+ POINT 2930 -0.39133275539708 20.0000000008169
+ POINT 2931 -0.5081909870155196 20.90226741523717
+ POINT 2932 0.3913327604803603 20.45100208957464
+ POINT 2933 0.3913327577453886 20.0000000008169
+ POINT 2934 0.2530784161400829 22.21052479098349
+ POINT 2935 0.5055201289601644 22.64707892336772
+ POINT 2936 -2.785590905596614 21.32882419900507
+ POINT 2937 -3.03503418550369 21.76658246600001
+ POINT 2938 1.770560907143734 17.79144658719761
+ POINT 2939 2.024810499173619 18.22997737721628
+ POINT 2940 1.775181052026418 18.66606637464487
+ POINT 2941 2.280691576572412 18.66774072366555
+ POINT 2942 1.265170126328186 17.79085291521534
+ POINT 2943 1.012728405401115 18.22740704319246
+ POINT 2944 0.7585985571016766 17.7899569302122
+ POINT 2945 1.516431058844295 17.35399647421735
+ POINT 2946 0.8995237605176197 19.54873467387751
+ POINT 2947 1.340523588216353 19.54873466996442
+ POINT 2948 1.523722067484837 19.10064953360767
+ POINT 2949 1.267840990086043 18.66288618715841
+ POINT 2950 0.7612694208595338 18.66199020215526
+ POINT 2951 5.813248074708591 17.79940577746486
+ POINT 2952 6.319914201894026 17.79970755524536
+ POINT 2953 6.067133785253771 18.23927390332938
+ POINT 2954 3.535574274154806 15.59970463007047
+ POINT 2955 3.788415136381265 16.0394078550085
+ POINT 2956 4.29392652128657 16.03975141330591
+ POINT 2957 4.547087929945052 15.59958939695291
+ POINT 2958 4.79995059372381 16.03961220762827
+ POINT 2959 4.041277800160023 16.47943066568386
+ POINT 2960 3.788433948862058 15.15930008166777
+ POINT 2961 3.282944365509053 15.1592761091077
+ POINT 2962 4.294357257637037 15.15893851212372
+ POINT 2963 3.794349415726029 21.32485606072119
+ POINT 2964 3.290304186047734 21.32705841534533
+ POINT 2965 3.544906134739364 20.8870977923218
+ POINT 2966 3.035034201374663 21.76658246994613
+ POINT 2967 3.285878222907446 22.20420717451871
+ POINT 2968 3.81360680382783 20.44244768929398
+ POINT 2969 4.073702118111949 19.99999990535705
+ POINT 2970 4.30904667870178 20.44244765376073
+ POINT 2971 3.813606878619757 19.55755217280245
+ POINT 2972 4.309046753493707 19.5575521372692
+ POINT 2973 3.091725105391231 19.99999995889588
+ POINT 2974 3.309561574149535 20.44465004391812
+ POINT 2975 2.535961556076473 19.1072647545244
+ POINT 2976 2.785591003223675 18.67117575709582
+ POINT 2977 2.823024475136099 19.55534988242807
+ POINT 2978 3.309561612982868 19.55534986442249
+ POINT 2979 3.544906248364625 19.11290209633464
+ POINT 2980 4.553342649405812 19.11635063545458
+ POINT 2981 4.813437888898004 19.55879836800918
+ POINT 2982 3.78894556721224 16.91866702923937
+ POINT 2983 3.537066925728395 17.35732464347433
+ POINT 2984 4.294456952117544 16.91901058753678
+ POINT 2985 10.40485762242933 23.0823167754689
+ POINT 2986 10.66359386676167 22.64123696885316
+ POINT 2987 7.336519205314388 23.96197717939193
+ POINT 2988 7.845748174573922 23.96277428191098
+ POINT 2989 7.847092038101775 15.1545453326975
+ POINT 2990 8.357041317327358 15.15335405870247
+ POINT 2991 7.335858156970897 16.91917008184071
+ POINT 2992 6.82740222651428 16.91959839644326
+ POINT 2993 7.081982885691881 16.4790557103205
+ POINT 2994 6.573652994571071 17.35977609867216
+ POINT 2995 6.82753870511625 17.79964422453667
+ POINT 2996 6.319777723292055 16.91966172715194
+ POINT 2997 8.865603095183527 21.32049701279709
+ POINT 2998 8.610566546294587 20.88042660659833
+ POINT 2999 8.354847778087121 21.32045064574386
+ POINT 3000 -19.49782579425925 18.2262342507611
+ POINT 3001 -19.95653724886555 18.68219083235013
+ POINT 3002 -19.87861801615688 17.79987597964446
+ POINT 3003 -18.66020382675364 15.93496854205557
+ POINT 3004 -19.16290631175541 15.97909016657372
+ POINT 3005 -18.99857199443355 15.51737708814106
+ POINT 3006 -17.91955297322556 13.2829594368018
+ POINT 3007 -18.41152301195191 13.295877500577
+ POINT 3008 -9.129653461818208 12.93477147753005
+ POINT 3009 -8.876289950333131 12.49088708422035
+ POINT 3010 -8.365440669810539 12.49364887761896
+ POINT 3011 -8.108500589767266 12.9392481990543
+ POINT 3012 -7.855388676964306 12.4956979610122
+ POINT 3013 -8.361774657741075 13.38192668055925
+ POINT 3014 -7.851722664894842 13.38397576395249
+ POINT 3015 -4.80356472378408 18.67759654481199
+ POINT 3016 -4.299173591137375 18.67635031371034
+ POINT 3017 -5.054931658031134 18.23828417657461
+ POINT 3018 -2.280691562830554 18.66774072586148
+ POINT 3019 -2.024810485533055 18.22997737988562
+ POINT 3020 -2.785590988433182 18.67117575963704
+ POINT 3021 -2.535961541970431 19.1072647559537
+ POINT 3022 -5.306982312776921 15.15821679877318
+ POINT 3023 -5.813814758590553 15.15783103442108
+ POINT 3024 -4.547087902507322 15.59958941436245
+ POINT 3025 -4.293926496647592 16.03975142784848
+ POINT 3026 -7.337862524706304 15.15534238385541
+ POINT 3027 -7.847091962587663 15.15454536705468
+ POINT 3028 -9.890905060586594 16.91769167150019
+ POINT 3029 -10.147975417906 16.47686792201691
+ POINT 3030 -9.122219403737819 16.47724518073061
+ POINT 3031 -9.377742636906071 16.91780911523353
+ POINT 3032 -9.634630413183206 17.35862195801451
+ POINT 3033 -15.51798373490658 13.38033590670376
+ POINT 3034 -15.01511587050028 13.38241715695336
+ POINT 3035 -14.76536195414445 13.83436752674101
+ POINT 3036 -11.6877451403522 13.82008259053461
+ POINT 3037 -11.43269990813222 14.264155554569
+ POINT 3038 -11.43075852913953 13.37311667077508
+ POINT 3039 -10.91914257799354 13.37360334277097
+ POINT 3040 -14.49013065771233 8.92250716809294
+ POINT 3041 -13.97378473792814 8.903623831005547
+ POINT 3042 -13.75932210669217 8.400895838660942
+ POINT 3043 -14.48388519872614 8.085770307453599
+ POINT 3044 -14.7532851786944 8.51074262304131
+ POINT 3045 -14.07639210786223 7.906905857500061
+ POINT 3046 -16.05643838843906 11.55103715881512
+ POINT 3047 -16.33476399675755 11.08780033828979
+ POINT 3048 -16.09214922620015 10.65648918306597
+ POINT 3049 -15.54889503500405 11.56061276607589
+ POINT 3050 11.2389936247567 7.556479722522218
+ POINT 3051 10.95968569172366 7.131739392009571
+ POINT 3052 10.96516018232728 8.002770687957165
+ POINT 3053 10.45710182271854 7.09666523164841
+ POINT 3054 10.19676557908151 7.554948702823318
+ POINT 3055 9.947996817509239 7.086330070692012
+ POINT 3056 10.44503645463636 8.011377880133024
+ POINT 3057 9.935931449427057 8.001042719176626
+ POINT 3058 9.433883059010681 7.09648042600004
+ POINT 3059 9.694219302647717 6.638196954825132
+ POINT 3060 9.431468298922116 6.192050324704395
+ POINT 3061 8.921334355776636 7.10464922441238
+ POINT 3062 9.175111870638158 7.552782340279261
+ POINT 3063 9.020608292392154 2.610986790489027
+ POINT 3064 9.474327155954036 2.853381851282785
+ POINT 3065 9.424223358758637 2.359591439050014
+ POINT 3066 8.61015283696532 3.016787348807768
+ POINT 3067 9.406407135751241 3.443882765087797
+ POINT 3068 14.24301966553495 9.357549438241348
+ POINT 3069 14.4901295966866 8.92250482268938
+ POINT 3070 15.02251965234311 8.964668030477915
+ POINT 3071 14.50635307594872 9.811745665581833
+ POINT 3072 15.03253485589125 9.806581428114002
+ POINT 3073 15.30010149579994 9.372267151041644
+ POINT 3074 1.391480458123909 0.5361652771996028
+ POINT 3075 1.5311646848921 1.034881203024674
+ POINT 3076 0.9403288020067619 0.5067124227468429
+ POINT 3077 1.30290062382262 0.04248387209852996
+ POINT 3078 0.5146184240444129 0.9751892831391331
+ POINT 3079 0.7618858102185746 1.458041036081303
+ POINT 3080 1.257885314814681 1.486842127641039
+ POINT 3081 1.759808407924379 1.526429439176829
+ POINT 3082 -7.903282532023693 3.431138862491011
+ POINT 3083 -8.152789841056642 3.936144390882303
+ POINT 3084 -7.405025206157284 4.401754955187759
+ POINT 3085 -7.126972980823624 3.982555849504718
+ POINT 3086 -6.871914937442281 4.456668046370027
+ POINT 3087 -7.912211134470291 4.392559551191403
+ POINT 3088 -7.657153091088949 4.866671748056711
+ POINT 3089 -9.947996922680865 7.086330753741288
+ POINT 3090 -10.19676544567954 7.554949393736067
+ POINT 3091 -9.433883096893222 7.096480642617021
+ POINT 3092 -9.935931248079878 8.001043112251882
+ POINT 3093 4.527367092332923e-08 11.17574818979146
+ POINT 3094 -0.252495297355625 10.7286890466501
+ POINT 3095 -0.7573647365983451 10.72884633098105
+ POINT 3096 -6.777768896535333 2.634657762748669
+ POINT 3097 -7.244270061060128 2.731385544386314
+ POINT 3098 -7.354841851407485 3.536945192983723
+ POINT 3099 -6.821731582692482 3.591858284165991
+ POINT 3100 -7.598041133892552 3.040441297152283
+ POINT 3101 -2.770028523234636 7.135495143417519
+ POINT 3102 -2.262551794000459 7.128472515207454
+ POINT 3103 -2.013561812098475 7.580836281036188
+ POINT 3104 -1.756818092472177 7.124101067148673
+ POINT 3105 -2.268204295821881 8.035370941832417
+ POINT 3106 -1.975649084420517 3.904985271154332
+ POINT 3107 -2.229341417725875 4.384424847169543
+ POINT 3108 -1.730981152791177 4.354398340751177
+ POINT 3109 -1.233116312198353 4.336364163628327
+ POINT 3110 -1.48680864550371 4.815803739643538
+ POINT 3111 -0.7430351466867606 5.261285573502088
+ POINT 3112 -0.494472020592799 4.791077844253667
+ POINT 3113 -0.2485633623686729 5.254593855235067
+ POINT 3114 -0.740074808422948 4.319006740711124
+ POINT 3115 -3.989917167396486 2.240630780408752
+ POINT 3116 -3.738200036941911 1.768829703597202
+ POINT 3117 -3.247670870830478 1.691006496083939
+ POINT 3118 -2.976342610696507 2.129153640981189
+ POINT 3119 -3.734386660790618 2.660010881492179
+ POINT 3120 -4.249408434534817 2.711752124426682
+ POINT 3121 -6.558942474787781 3.123176139372501
+ POINT 3122 -6.331073604203918 3.568786795893496
+ POINT 3123 -6.287110918046769 2.611586274476174
+ POINT 3124 -6.621962591182754 4.900980417645647
+ POINT 3125 -6.343910365849093 4.481781311962606
+ POINT 3126 1.975648595423093 36.09501468771074
+ POINT 3127 1.730980862699194 35.6456016167933
+ POINT 3128 2.229341421389412 35.61557529593476
+ POINT 3129 1.767382707537047 25.72169563959068
+ POINT 3130 2.019831105277033 25.28066337897281
+ POINT 3131 1.262291980403351 25.72154636607824
+ POINT 3132 1.767248087730079 24.84054044960734
+ POINT 3133 2.272346014804772 24.84060691906749
+ POINT 3134 1.262295090029159 24.84067059179185
+ POINT 3135 -0.2524838111325409 26.60459195706799
+ POINT 3136 2.444279567637153e-08 27.04677661342691
+ POINT 3137 -0.2524838031658742 27.4903401891097
+ POINT 3138 0.2524838616507888 27.49034019456228
+ POINT 3139 -0.7575333892249605 27.4903653405446
+ POINT 3140 3.788433723962699 24.84070003411083
+ POINT 3141 4.041727103362698 25.28149016974522
+ POINT 3142 3.283312657697288 25.72224398475948
+ POINT 3143 3.030366456526666 25.28092920667346
+ POINT 3144 3.789177592187962 25.72274613527788
+ POINT 3145 4.295100814849055 25.72310774010915
+ POINT 3146 3.536686369183645 26.16386155512341
+ POINT 3147 2.272576461040474 23.96112624728912
+ POINT 3148 2.020306171472144 23.5221043798967
+ POINT 3149 2.273605847126488 23.08358918644693
+ POINT 3150 2.778699451801812 23.08268308508446
+ POINT 3151 3.030578057285068 23.52134071927124
+ POINT 3152 3.283887584263749 23.08225529947948
+ POINT 3153 6.82172659767877 36.40814779878537
+ POINT 3154 7.35483619344178 36.46305945729526
+ POINT 3155 6.558938425685055 36.87683381454495
+ POINT 3156 6.777763402182511 37.36535117969289
+ POINT 3157 7.244263972315331 37.26861717750442
+ POINT 3158 5.845709060934203 32.8543398439479
+ POINT 3159 5.327825047917067 32.84978785259251
+ POINT 3160 5.587460787769149 33.29923958236787
+ POINT 3161 5.07210716993828 32.40303966091142
+ POINT 3162 5.839992684245366 31.95857160899264
+ POINT 3163 5.328305474083631 31.9562956821724
+ POINT 3164 11.7636152966602 35.51005436606592
+ POINT 3165 11.89138268840086 36.08088984207926
+ POINT 3166 13.96434143009819 33.62431889214255
+ POINT 3167 13.62553027166024 33.96298348535633
+ POINT 3168 14.13907578790397 34.14519481201172
+ POINT 3169 13.6933777803736 33.05047192353857
+ POINT 3170 11.47394032795509 34.67289773812949
+ POINT 3171 11.20040168097641 34.21129404646143
+ POINT 3172 11.44644337030582 33.71506560055828
+ POINT 3173 10.96746084748497 33.79803270401432
+ POINT 3174 9.928435644092694 34.70960053046583
+ POINT 3175 9.445444615479557 34.74869014145943
+ POINT 3176 10.20212549960824 34.27925374770544
+ POINT 3177 8.55693472587436 37.47116564769411
+ POINT 3178 8.610154574479843 36.98321170564777
+ POINT 3179 7.792705712071077 37.37442105721501
+ POINT 3180 8.146978123645237 37.66529759679247
+ POINT 3181 8.559637437237384 38.07574638038857
+ POINT 3182 8.395984878751314 36.56036043869134
+ POINT 3183 7.903277933197526 36.56886333700585
+ POINT 3184 7.59803541538643 36.95956247755778
+ POINT 3185 13.23628235860721 30.68752328103807
+ POINT 3186 13.02182189368296 31.19025353239009
+ POINT 3187 13.39848589487437 32.59184677084766
+ POINT 3188 13.08141264733925 32.09785538670456
+ POINT 3189 13.15996052987587 32.98754066985602
+ POINT 3190 3.734384876860566 37.33999019105068
+ POINT 3191 3.989913736038182 37.75937050229219
+ POINT 3192 3.738191811837065 38.23117125418775
+ POINT 3193 3.247663856437776 38.30899372408128
+ POINT 3194 2.976338586140713 37.87084607032222
+ POINT 3195 0.7575449832500279 28.37910301124292
+ POINT 3196 0.5050496180037712 27.9339289377297
+ POINT 3197 1.262608818111103 27.49047225529183
+ POINT 3198 1.515420516496924 27.93408212583156
+ POINT 3199 0.7575334456124412 27.49036536204691
+ POINT 3200 2.526893724749228 29.71688489057836
+ POINT 3201 2.779450491643448 30.16459955601931
+ POINT 3202 3.286497797291172 29.27075851415398
+ POINT 3203 3.54071932016649 29.71695812350327
+ POINT 3204 3.793978826839798 29.27114357134025
+ POINT 3205 2.779998606761999 29.27036546592124
+ POINT 3206 2.273654040893363 29.2706772901826
+ POINT 3207 0.2509575631490233 32.89023084573768
+ POINT 3208 7.962001580263944e-08 32.43049566678853
+ POINT 3209 0.2509575815135437 31.97572081582519
+ POINT 3210 -0.2509574211939724 31.97572080461469
+ POINT 3211 0.7545341147933871 31.97468656237741
+ POINT 3212 1.00487180505531 32.42701557238493
+ POINT 3213 2.262552379835649 32.871528064516
+ POINT 3214 2.013562317430567 32.41916421915188
+ POINT 3215 1.75681859018817 32.87589931213495
+ POINT 3216 2.268204796802595 31.96462962194811
+ POINT 3217 2.77500339006423 31.96212582894687
+ POINT 3218 3.027618133833469 32.410566243476
+ POINT 3219 1.247341957495069 33.80032933334168
+ POINT 3220 1.503048939569117 33.33593227620078
+ POINT 3221 0.7511021544362571 32.88704853645076
+ POINT 3222 0.5001446352577484 33.34678370418941
+ POINT 3223 0.7487078672168751 33.80939990733931
+ POINT 3224 0.9957605981669626 34.2661278457785
+ POINT 3225 1.254058877164035 32.88356843083666
+ POINT 3226 4.807634527403731 36.45417558306546
+ POINT 3227 4.268078121334274 36.43451973236753
+ POINT 3228 5.055439451329409 35.99075638523749
+ POINT 3229 4.016824286852271 36.00258917550283
+ POINT 3230 3.742624318707891 36.43693935563272
+ POINT 3231 4.285159710652261 35.55276249892606
+ POINT 3232 3.759705908025878 35.55518212219123
+ POINT 3233 5.313339571489223 35.5337790049437
+ POINT 3234 5.576017529265764 35.08006250744026
+ POINT 3235 4.800178209638467 35.54319217194386
+ POINT 3236 4.543059830812075 35.09578511863226
+ POINT 3237 6.593280538182253 29.7267168205935
+ POINT 3238 6.845584839365598 29.28169702003494
+ POINT 3239 6.335879606186479 29.27904143291438
+ POINT 3240 6.851155373110538 30.17533731825264
+ POINT 3241 7.361674109424366 30.17880960428335
+ POINT 3242 7.109843711173534 30.62477451482192
+ POINT 3243 7.613368231755042 29.73274323698628
+ POINT 3244 7.872056569818037 30.18218043355557
+ POINT 3245 3.794429966540387 31.05851703304998
+ POINT 3246 4.049286650570231 30.61131584299384
+ POINT 3247 3.794281271533463 30.1641111043279
+ POINT 3248 3.033012443010421 30.61175253684394
+ POINT 3249 3.285536433201112 31.06016885716353
+ POINT 3250 3.286800241984837 30.16372604714163
+ POINT 3251 19.49782570706544 18.22623423316451
+ POINT 3252 19.95653726784996 18.68219111832597
+ POINT 3253 18.58166017353374 18.21127385550157
+ POINT 3254 18.44873815733738 18.65901810939465
+ POINT 3255 17.82900842060782 17.79250664273356
+ POINT 3256 17.55961501255982 18.23365515048583
+ POINT 3257 18.38742546426215 17.76710888707429
+ POINT 3258 18.87780136911621 17.75460013746301
+ POINT 3259 17.52690217883121 14.67823772169018
+ POINT 3260 17.21413812833305 15.13667453160922
+ POINT 3261 17.10180895186563 14.27897243895621
+ POINT 3262 16.61643123646513 14.28454314481263
+ POINT 3263 16.41267770706892 14.73120621263948
+ POINT 3264 16.07296510477975 14.29114476438398
+ POINT 3265 14.25527356652689 20.00000694342845
+ POINT 3266 14.54458535674566 20.44472120503738
+ POINT 3267 15.08660392329284 20.4503355424043
+ POINT 3268 15.22709411735221 19.99960748842541
+ POINT 3269 14.54446737878539 19.55524897689899
+ POINT 3270 14.04144304480628 19.5552644241821
+ POINT 3271 15.12585065643982 22.18962336947886
+ POINT 3272 15.66704893150966 22.18912647227221
+ POINT 3273 15.93226494226947 22.62311502278055
+ POINT 3274 15.63603332292851 23.06058148636886
+ POINT 3275 15.10960336366766 23.06196334102751
+ POINT 3276 14.85525309603435 22.62543767487836
+ POINT 3277 15.07838610348047 15.1733118594097
+ POINT 3278 15.60761466098593 15.17729090093799
+ POINT 3279 15.33998301787808 14.73382879068254
+ POINT 3280 14.82036766750458 15.61339008097941
+ POINT 3281 15.08744436360368 16.05749207836569
+ POINT 3282 14.56179428451994 16.05410818967995
+ POINT 3283 14.55273602439673 15.16992797072396
+ POINT 3284 15.87591227598083 15.61135500755215
+ POINT 3285 16.13750919037845 15.17187193882498
+ POINT 3286 16.68097532206382 15.16527031925363
+ POINT 3287 16.93896961164258 15.57734025779473
+ POINT 3288 17.24542059267814 16.921237054667
+ POINT 3289 17.42133862340716 16.46621174527455
+ POINT 3290 16.6991273812222 16.92861646965699
+ POINT 3291 17.19812051536607 16.01499394956502
+ POINT 3292 16.66495770909684 16.04358973720944
+ POINT 3293 16.50011603657139 19.55060584927988
+ POINT 3294 16.11086118526408 19.54894289457717
+ POINT 3295 16.23490740586323 18.67143802475644
+ POINT 3296 16.77688889638486 18.67109500215383
+ POINT 3297 16.90823717346987 19.54895804099115
+ POINT 3298 15.66731510254423 17.81120259941419
+ POINT 3299 15.93239678965792 17.3770904840493
+ POINT 3300 15.12588811735991 17.81032407015078
+ POINT 3301 15.40255579021237 18.24333521180063
+ POINT 3302 14.85535684791786 17.37460770073489
+ POINT 3303 15.10975920515541 16.93820082241529
+ POINT 3304 14.5744686233815 16.93461706538583
+ POINT 3305 14.59059753558601 17.80674031312132
+ POINT 3306 16.79406525039852 28.02745799197655
+ POINT 3307 17.07238886613754 28.4906939788942
+ POINT 3308 16.57289177244715 28.46738533203519
+ POINT 3309 17.4965710356451 27.60644365003999
+ POINT 3310 17.80117571229844 28.04994051262165
+ POINT 3311 17.02019681392827 27.57157998790804
+ POINT 3312 16.52069972023788 27.54827134104903
+ POINT 3313 17.58991650606833 28.49979170459397
+ POINT 3314 18.10312000032976 28.50159082583126
+ POINT 3315 18.41154163693258 26.70405457720359
+ POINT 3316 18.5809862969927 26.22413241238169
+ POINT 3317 18.8590620588132 26.65851173471512
+ POINT 3318 17.91957654068757 26.71697613947613
+ POINT 3319 17.69355159834902 26.21921846733577
+ POINT 3320 18.11866262353381 25.81991390377403
+ POINT 3321 16.25412989716249 27.08512372750859
+ POINT 3322 16.02799833363274 27.5410017315771
+ POINT 3323 12.4713348273634 20.44086210014538
+ POINT 3324 12.74356289841131 20.88266792813398
+ POINT 3325 12.48035189032188 21.32047783433658
+ POINT 3326 11.9561289915379 23.08041192363828
+ POINT 3327 12.47539190118238 23.07854903560531
+ POINT 3328 12.21410635583005 23.51991665586499
+ POINT 3329 11.69840716659313 22.64001307273599
+ POINT 3330 13.00253570004953 22.19714775592412
+ POINT 3331 13.52908269363856 22.196464052818
+ POINT 3332 13.52075711029057 23.07307462590749
+ POINT 3333 13.79176001498042 22.63195101028575
+ POINT 3334 12.99841005278091 23.07655233280262
+ POINT 3335 12.74043268848876 22.63704760057591
+ POINT 3336 12.47951754845101 22.19914445872682
+ POINT 3337 16.76214594331712 26.16105609261419
+ POINT 3338 16.616482945813 25.71543906542623
+ POINT 3339 16.07300726146418 25.70885169527617
+ POINT 3340 15.7756762466737 26.15848944588978
+ POINT 3341 16.01909527733369 26.61668049315067
+ POINT 3342 15.51800947989736 26.61966307077576
+ POINT 3343 16.51179666393882 26.6239501026226
+ POINT 3344 18.1251910242728 22.66390416293884
+ POINT 3345 18.38730066575757 22.23230127821533
+ POINT 3346 18.87782298075228 22.24485624002787
+ POINT 3347 18.30109750604809 23.11887529175939
+ POINT 3348 18.75407461365194 23.14583948729189
+ POINT 3349 19.25336766894756 22.67096916601431
+ POINT 3350 19.18732501041783 23.0950223359802
+ POINT 3351 19.76177108442964 23.07772703249995
+ POINT 3352 13.22907297795537 11.13290668839839
+ POINT 3353 12.97061925836632 10.68124856516747
+ POINT 3354 12.46766895126554 10.67227901173746
+ POINT 3355 12.97143653644138 11.58072012917699
+ POINT 3356 13.4844546615271 11.58282112395052
+ POINT 3357 12.45912907450942 11.5804496180641
+ POINT 3358 12.71451075808115 12.03036405361623
+ POINT 3359 -7.335668197682937 22.20031115705586
+ POINT 3360 -7.590411055385765 22.64051999376785
+ POINT 3361 -6.827537248934346 22.20035519110679
+ POINT 3362 -6.573651574572926 22.64022353991485
+ POINT 3363 -6.319913095875537 22.20029198565057
+ POINT 3364 -5.813247200796855 22.20059393150383
+ POINT 3365 -5.306832057388836 22.20081300727318
+ POINT 3366 -6.067132875158276 21.76072558269578
+ POINT 3367 -5.81454204920424 21.32106756251621
+ POINT 3368 -5.309100236308474 21.32171516131793
+ POINT 3369 -9.89088523942082 17.79886411983713
+ POINT 3370 -10.14857204283547 18.23918999542934
+ POINT 3371 -9.377722815740299 17.79898156357048
+ POINT 3372 -9.121932143058153 18.23935021686822
+ POINT 3373 -9.377649624192905 18.6793738168293
+ POINT 3374 -10.66209369019408 15.59357842031993
+ POINT 3375 -10.4047259333652 16.03513252143312
+ POINT 3376 -9.890767799768657 16.03514342813541
+ POINT 3377 -15.5551069052719 19.54892678731335
+ POINT 3378 -15.97007772814454 19.09864623920131
+ POINT 3379 -16.11086108382489 19.54894292435325
+ POINT 3380 -15.08631065964352 19.54931079809318
+ POINT 3381 -15.22709401532387 19.99960748324512
+ POINT 3382 -11.95485738736122 20.44085699368801
+ POINT 3383 -12.47133467813871 20.44086208506123
+ POINT 3384 -12.2071089926688 20.00000805384752
+ POINT 3385 -12.48035172922288 21.32047778514489
+ POINT 3386 -11.95880860940138 21.32105241155066
+ POINT 3387 -12.22007726579314 21.75981917179383
+ POINT 3388 -11.69942419611676 20.88138349347376
+ POINT 3389 -17.47644814565474 19.54717789841071
+ POINT 3390 -17.94988903481506 19.54747252881383
+ POINT 3391 -17.76408314933547 19.99954839206847
+ POINT 3392 -18.23422300064733 19.09467791728322
+ POINT 3393 -17.87676913679358 18.65944248023681
+ POINT 3394 -17.09404296891593 19.09688220569864
+ POINT 3395 -16.90823708343633 19.54895806895328
+ POINT 3396 -19.76177103771798 23.07772732892936
+ POINT 3397 -19.25336756698695 22.67096898371729
+ POINT 3398 -19.18732490419377 23.0950221392252
+ POINT 3399 -19.4477189002975 22.22685220009963
+ POINT 3400 -19.87859220361732 22.20035725566065
+ POINT 3401 -19.25792784453962 23.55188835030948
+ POINT 3402 -18.75407461812375 23.14583867813167
+ POINT 3403 -19.16298007020004 24.02058528839067
+ POINT 3404 -19.60183463285162 23.97090406750409
+ POINT 3405 -17.87637073668006 21.33989279033893
+ POINT 3406 -17.34486803521384 21.33058393944672
+ POINT 3407 -17.55962675727944 21.76632022241122
+ POINT 3408 -17.09376266137075 20.90344544375881
+ POINT 3409 -16.77701868197013 21.3298728758311
+ POINT 3410 -17.4761271373948 20.45170513451989
+ POINT 3411 -16.90827778415109 20.45099407090427
+ POINT 3412 -17.94956802655513 20.45199976492301
+ POINT 3413 -18.23371022509465 20.90481762695371
+ POINT 3414 -15.02942422141325 28.42914654430462
+ POINT 3415 -14.7671126385203 27.97953118420565
+ POINT 3416 -15.52045268491218 27.53143128093732
+ POINT 3417 -15.78702266040701 27.9945786571865
+ POINT 3418 -15.54890495492492 28.43938079825739
+ POINT 3419 -15.01758100424557 27.52935438202635
+ POINT 3420 -14.50521687329288 27.52387632798913
+ POINT 3421 -9.904430672806125 28.40707065619491
+ POINT 3422 -10.41689547651911 28.41240707877134
+ POINT 3423 -10.66929721457722 27.96611203768271
+ POINT 3424 -10.92866096154303 28.41597287549923
+ POINT 3425 -9.645779006227713 27.95898668411711
+ POINT 3426 -9.392677949480536 28.4035110993572
+ POINT 3427 -10.41083773720197 27.51739624213824
+ POINT 3428 -9.899141965330045 27.51510256681794
+ POINT 3429 -10.15244797297871 27.06995256800136
+ POINT 3430 -12.99581434484171 20.4418189497832
+ POINT 3431 -13.51014574115279 20.441823572053
+ POINT 3432 -13.23791767975737 20.00001776749054
+ POINT 3433 -13.00483139592588 21.32143464986686
+ POINT 3434 -13.53137837642367 21.32075092653462
+ POINT 3435 -13.26816736611243 21.75856082205582
+ POINT 3436 -12.74356273953413 20.88266788962369
+ POINT 3437 -13.79945752002789 20.88653779646463
+ POINT 3438 -14.06279349021444 21.32366396865359
+ POINT 3439 -13.00253550757575 22.19714766326392
+ POINT 3440 -13.52908248807354 22.19646393993168
+ POINT 3441 -16.2347869870319 21.3294814436242
+ POINT 3442 -16.48589236087499 21.75661993931211
+ POINT 3443 -12.19975810951217 27.07290291179299
+ POINT 3444 -12.4571711074429 27.52124904151294
+ POINT 3445 -12.9694803662368 27.52097783922964
+ POINT 3446 -12.45674394638519 26.62593741289694
+ POINT 3447 -13.99578690627322 27.52331351175184
+ POINT 3448 -14.24625527199849 27.07313670957253
+ POINT 3449 -13.48182261231196 27.52097247150653
+ POINT 3450 -13.22448305890368 27.07257926105835
+ POINT 3451 -16.51179676394965 26.62394911594787
+ POINT 3452 -16.76214593621621 26.16105509049696
+ POINT 3453 -16.01909528016721 26.61667970802645
+ POINT 3454 -15.77567611970079 26.15848881210691
+ POINT 3455 -16.6164827210978 25.71543822133669
+ POINT 3456 -17.10186669733096 25.72098721941252
+ POINT 3457 -14.2878073219469 25.27536783225349
+ POINT 3458 -14.55271790511985 24.83011743787473
+ POINT 3459 -8.872303159269968 26.61976418580748
+ POINT 3460 -9.383403717149058 26.62219230704299
+ POINT 3461 -8.615525103211919 26.17503638397946
+ POINT 3462 -8.361773029290564 26.61807484838205
+ POINT 3463 -6.072689306874938 27.05391647376855
+ POINT 3464 -5.820129147476668 27.49712192171329
+ POINT 3465 -6.32809711573065 27.4985865281558
+ POINT 3466 -8.108499361881071 27.06075324214968
+ POINT 3467 -7.851721305823022 26.61602544032166
+ POINT 3468 -7.342393531093229 26.61452723488857
+ POINT 3469 -7.595667198502723 26.17184884112093
+ POINT 3470 -7.089552456771225 27.05704245715018
+ POINT 3471 -6.833498349450926 26.61286585794945
+ POINT 3472 -8.86778693118517 24.84742870791405
+ POINT 3473 -9.124384612345526 25.29019441464502
+ POINT 3474 -9.37915421259267 24.8485055322633
+ POINT 3475 -8.869536282064676 25.73292165585033
+ POINT 3476 -9.380903563472174 25.73399848019958
+ POINT 3477 -8.359006152085271 25.7312323184249
+ POINT 3478 -8.357038518711398 24.84664678923989
+ POINT 3479 -10.66208748767119 24.40642264890459
+ POINT 3480 -10.40472005439022 23.96486714250717
+ POINT 3481 -9.890762707770147 23.96485666497387
+ POINT 3482 -10.14796982013292 23.52313091779618
+ POINT 3483 -9.635034736729882 24.4061663576086
+ POINT 3484 -9.891632417890238 24.84893206433957
+ POINT 3485 -10.91783258828627 25.73632062930466
+ POINT 3486 -11.1763927535566 25.29161367806042
+ POINT 3487 -10.91909643785067 24.8491689242055
+ POINT 3488 -10.40452189220693 24.84933916498578
+ POINT 3489 -10.14864136806972 25.29167833964048
+ POINT 3490 -11.74873160124686 31.58187192779659
+ POINT 3491 -11.49828734891701 32.00603316279637
+ POINT 3492 -11.47479874651534 31.12093311396852
+ POINT 3493 -11.99907724384035 31.14306172093513
+ POINT 3494 -8.903187047443012 31.09050659247998
+ POINT 3495 -8.391529066814227 31.08429727879821
+ POINT 3496 -9.153056137445173 30.63961932778357
+ POINT 3497 -9.398187070199079 29.29658412996691
+ POINT 3498 -9.657774617851228 29.74665905739351
+ POINT 3499 -8.893751625915996 30.18945879004375
+ POINT 3500 -8.634397568876253 29.73884359430083
+ POINT 3501 -8.383104670453044 30.18672919584575
+ POINT 3502 -9.404349035868384 30.19173372623865
+ POINT 3503 -9.917079129380406 30.19681959513333
+ POINT 3504 -11.43712146196009 23.08138062463141
+ POINT 3505 -10.92066341043863 23.08206159128155
+ POINT 3506 -10.92128239036736 22.20090962423238
+ POINT 3507 -11.43896690004795 22.20068779271661
+ POINT 3508 -10.40485749578829 23.08231672552517
+ POINT 3509 -9.890900149168209 23.08230624799187
+ POINT 3510 -9.634625983220046 22.64137541680352
+ POINT 3511 -10.66359373947392 22.64123692147724
+ POINT 3512 -10.40547647571701 22.201164758476
+ POINT 3513 -10.66371310846123 20.88088246173954
+ POINT 3514 -10.40367257665969 20.44035401979257
+ POINT 3515 -10.40541301206526 21.32077321133221
+ POINT 3516 -9.8901701579261 20.44035371858478
+ POINT 3517 -10.14618183706572 19.99999877694407
+ POINT 3518 -9.634491342600295 20.88059096244695
+ POINT 3519 -6.573652952599984 17.35977611294056
+ POINT 3520 -6.827538661488333 17.79964423723647
+ POINT 3521 -7.335669920285115 17.79968797825121
+ POINT 3522 -6.827402180000886 16.91959841386031
+ POINT 3523 -7.335858102257347 16.9191701018657
+ POINT 3524 -7.590413254981577 17.35947930332449
+ POINT 3525 -3.091725092272973 19.99999995889544
+ POINT 3526 -2.823024423095185 20.44465006103595
+ POINT 3527 -2.82302446192895 19.55534988331524
+ POINT 3528 -2.318125036326323 19.55191484953968
+ POINT 3529 -2.134926559547786 19.9999999853544
+ POINT 3530 -2.359753808315156 39.37214496437061
+ POINT 3531 -2.220681201259319 39.87633202954547
+ POINT 3532 -2.853428424545745 39.31281750216315
+ POINT 3533 -3.322774736378872 39.23779911173357
+ POINT 3534 -3.813302945216087 39.15997614437607
+ POINT 3535 -4.091233566165744 39.57707352541702
+ POINT 3536 -4.278277613788639 39.06280534020281
+ POINT 3537 -3.156650010923889 39.74931797899575
+ POINT 3538 -3.033012362958341 30.6117523199572
+ POINT 3539 -2.778186554918571 31.06104208632408
+ POINT 3540 -2.27138793410801 31.06354594879045
+ POINT 3541 -2.523911917777087 31.51196219615595
+ POINT 3542 -2.019774925652819 30.61385000253146
+ POINT 3543 -1.765500288511335 31.06477011236333
+ POINT 3544 -2.779450402058304 30.16459938073862
+ POINT 3545 -3.286800193767151 30.16372586173725
+ POINT 3546 -3.794281249655442 30.16411092827807
+ POINT 3547 -3.540719288755405 29.71695798905948
+ POINT 3548 -4.303205754685972 30.16454776931187
+ POINT 3549 -3.027617960595887 32.41056575188199
+ POINT 3550 -2.775003207540966 31.96212546436659
+ POINT 3551 -2.268204586730404 31.96462932683296
+ POINT 3552 -2.013562100740824 32.41916396507942
+ POINT 3553 -1.762470810976946 31.96900069686879
+ POINT 3554 -2.77002899331762 32.86450527990432
+ POINT 3555 -3.278351077419224 32.86027843674272
+ POINT 3556 -2.262552160354756 32.87152776282665
+ POINT 3557 -2.513285277178094 33.32124044768738
+ POINT 3558 -1.512133134743765 31.51667171366356
+ POINT 3559 -1.257490648754185 31.97120635191003
+ POINT 3560 -0.7545339478042523 31.97468651214141
+ POINT 3561 -0.5035764459107245 31.51991166117807
+ POINT 3562 -0.7557251001955001 31.06778971354904
+ POINT 3563 -1.260520126288574 31.06697576740457
+ POINT 3564 -1.997791297947086 34.24333855669495
+ POINT 3565 -2.25349817785614 33.77894139916177
+ POINT 3566 -2.760975010819003 33.77191891623943
+ POINT 3567 -3.011955447586298 34.2203681171806
+ POINT 3568 -3.271742546908253 33.76266716570622
+ POINT 3569 -2.748277227128552 34.67648604901853
+ POINT 3570 -3.259044763217802 34.66723429848531
+ POINT 3571 -2.242930952922364 34.69789100853247
+ POINT 3572 -10.99496194121145 34.7558609147853
+ POINT 3573 -11.47394482127665 34.67289318116666
+ POINT 3574 -10.72127300001099 35.18620741077456
+ POINT 3575 -10.447732383235 34.72460493961236
+ POINT 3576 -11.39311640574461 35.78402816783584
+ POINT 3577 -11.76362390176834 35.51004748537068
+ POINT 3578 -11.89139445142899 36.08088113093766
+ POINT 3579 -10.945244583311 30.21194894494906
+ POINT 3580 -11.20910920668068 30.66888033631249
+ POINT 3581 -10.95876356408719 31.10769054317395
+ POINT 3582 -10.43863904361896 31.09908334789622
+ POINT 3583 -10.70432858345361 31.55113612555225
+ POINT 3584 -10.17836378582505 30.6487660147482
+ POINT 3585 -10.43178936780789 30.20369134590305
+ POINT 3586 -12.20772792247103 28.87130307528364
+ POINT 3587 -11.95934239545081 29.3298295299858
+ POINT 3588 -11.44840757865733 29.32083401178019
+ POINT 3589 -11.18782961921505 28.86783790788402
+ POINT 3590 -11.95080070850122 28.4216606767123
+ POINT 3591 -11.44023135727316 28.42154286679538
+ POINT 3592 -12.78538354685579 31.63539654824448
+ POINT 3593 -13.08141318168281 32.09785280557013
+ POINT 3594 -13.69337999756491 33.05046757946367
+ POINT 3595 -14.20287042370327 33.22861936316023
+ POINT 3596 -13.9643465646559 33.62431331178948
+ POINT 3597 -14.50371229213761 32.89870088682812
+ POINT 3598 -14.7783619362536 33.47590510864688
+ POINT 3599 -14.33939456995485 32.47590094466933
+ POINT 3600 -13.3984866124191 32.59184334012446
+ POINT 3601 -13.61483042587599 32.16078309628009
+ POINT 3602 -12.5094486201497 31.15885540730061
+ POINT 3603 -12.23551576541817 30.69791659347253
+ POINT 3604 -12.48258595884198 30.24998072031472
+ POINT 3605 -13.02182206843361 31.19025142078188
+ POINT 3606 -13.23628259023528 30.6875215539166
+ POINT 3607 -13.51221751694137 31.16406269486048
+ POINT 3608 -12.98553667078657 30.24101005064971
+ POINT 3609 -9.935933060425999 31.99895783017763
+ POINT 3610 -9.425788712629927 31.99952776172602
+ POINT 3611 -9.175113162335302 32.44721817562974
+ POINT 3612 -9.433884308094877 32.90351985240996
+ POINT 3613 -9.947998399553743 32.91366946294919
+ POINT 3614 -9.694220649782007 33.36180258527841
+ POINT 3615 -5.845709714652145 32.8543394931615
+ POINT 3616 -6.35943259227712 32.85785448154385
+ POINT 3617 -6.099796641324188 32.4084027857334
+ POINT 3618 -6.620526367917938 33.30931460020675
+ POINT 3619 -6.874613294589981 32.86337789277866
+ POINT 3620 -5.843830266875138 33.74469076224041
+ POINT 3621 -6.366502908847091 33.75556165131462
+ POINT 3622 -6.104987510117153 34.19646122458308
+ POINT 3623 -6.881683611159954 33.76108506254942
+ POINT 3624 -8.152299853281146 32.43384481530836
+ POINT 3625 -7.904575766385607 32.88643722911405
+ POINT 3626 -7.38887125499455 32.87173901043978
+ POINT 3627 -7.651411581621856 33.32953623011583
+ POINT 3628 -7.891317422946985 31.97994508772288
+ POINT 3629 -7.127777479353732 32.42027889177689
+ POINT 3630 5.815416780370211 25.7254507508302
+ POINT 3631 6.068349777660536 25.28383032121751
+ POINT 3632 6.322914497966334 25.72626412073013
+ POINT 3633 5.813813981238598 24.84216926607556
+ POINT 3634 5.054251193044102 25.28243436294704
+ POINT 3635 5.306981751859498 24.8417834592201
+ POINT 3636 5.559943673033683 24.40093577397807
+ POINT 3637 6.584305206584972 27.94375248790075
+ POINT 3638 6.331860450220269 28.38790682772228
+ POINT 3639 6.840628663734527 28.38986729253429
+ POINT 3640 6.328097160904627 27.49858657198942
+ POINT 3641 5.31221078469278 27.49556469000557
+ POINT 3642 5.057585437902588 27.05131477146023
+ POINT 3643 5.817351437794507 26.61016822842614
+ POINT 3644 6.072689351825773 27.05391651369978
+ POINT 3645 6.325319414707275 26.61163283561645
+ POINT 3646 5.82012918399186 27.49712196479911
+ POINT 3647 5.567618593771634 27.9402347482952
+ POINT 3648 4.047052787592788 28.82584698915801
+ POINT 3649 4.29983719277504 28.38154452099692
+ POINT 3650 4.807024232846825 28.38271374491336
+ POINT 3651 4.301274310468107 29.2720465985073
+ POINT 3652 4.809682020990673 29.27320084424044
+ POINT 3653 4.549022188976916 26.16510838289133
+ POINT 3654 4.802971287585841 26.60801534827591
+ POINT 3655 4.296500402283245 26.6072706710264
+ POINT 3656 5.310107224596258 26.60915248332515
+ POINT 3657 5.56273728747776 26.16686880524183
+ POINT 3658 5.308172567171963 25.72443500572921
+ POINT 3659 4.801571700151651 25.72385241735866
+ POINT 3660 3.790057682711869 26.60644965824722
+ POINT 3661 4.044006781320794 27.04935662363181
+ POINT 3662 3.284985274934477 27.49173672429433
+ POINT 3663 3.031723737372097 27.04803779814592
+ POINT 3664 3.284192748221195 26.60594750772882
+ POINT 3665 3.791445088039201 27.4924373182607
+ POINT 3666 7.595667276623683 26.1718488829917
+ POINT 3667 7.339729660651949 25.72854265913015
+ POINT 3668 6.831093491921173 25.72749718220235
+ POINT 3669 6.578160494630848 26.16911761181503
+ POINT 3670 6.833498408662114 26.61286589708867
+ POINT 3671 7.342393603714925 26.61452727784253
+ POINT 3672 7.851721391752919 26.61602548754698
+ POINT 3673 10.16379461741962 28.8569316742142
+ POINT 3674 9.910917354739734 29.30167017583803
+ POINT 3675 10.42338218073125 29.30700664681063
+ POINT 3676 9.398187236685452 29.296584259916
+ POINT 3677 11.1763929467876 25.29161378016803
+ POINT 3678 11.43269470633229 25.73584899017798
+ POINT 3679 11.17575978189087 27.0727338951912
+ POINT 3680 11.43421927431302 27.52144974007221
+ POINT 3681 10.92260343334439 27.52096222835202
+ POINT 3682 11.43075507899234 26.62688867729366
+ POINT 3683 11.95934260436991 29.32983015861389
+ POINT 3684 12.46767046560084 29.32772545608889
+ POINT 3685 12.20772811265096 28.87130363239207
+ POINT 3686 12.48258604719192 30.24998189542344
+ POINT 3687 11.97221474555926 30.23418783961753
+ POINT 3688 12.23551583543139 30.69791775273026
+ POINT 3689 12.9694805256095 27.52097823699379
+ POINT 3690 13.48182274384587 27.52097291958309
+ POINT 3691 13.74078426771563 27.97171267290139
+ POINT 3692 13.99578697125026 27.52331403777258
+ POINT 3693 -0.2530784093217016 18.66225344208705
+ POINT 3694 0.2530784208222577 18.66225344183592
+ POINT 3695 6.030645871568652e-09 18.22651105844045
+ POINT 3696 0.5081910055071862 19.09773258580186
+ POINT 3697 -0.5081909940579249 19.09773258612098
+ POINT 3698 0.3913327604803437 19.54899791355816
+ POINT 3699 2.734955073611239e-09 19.54899791274126
+ POINT 3700 -0.3913327526621249 19.54899791355815
+ POINT 3701 3.794281045691874 9.835889181209401
+ POINT 3702 3.286800036582792 9.836274197162457
+ POINT 3703 2.229340800261039 4.38442472316282
+ POINT 3704 1.730980420814213 4.354398366661153
+ POINT 3705 1.975648040643678 3.904985248730975
+ POINT 3706 5.253303014360708 1.128293718388772
+ POINT 3707 5.02628530891481 0.6418891392761246
+ POINT 3708 2.255436532179687 1.571943194814049
+ POINT 3709 1.982157162102268 2.023904119430414
+ POINT 3710 2.749111535735891 1.631270413254645
+ POINT 3711 -1.254058521951619 7.116431779054716
+ POINT 3712 -0.7511018940799036 7.112951583302987
+ POINT 3713 -1.503048503853604 6.664068013225982
+ POINT 3714 -1.997790841279557 5.756661654557217
+ POINT 3715 -1.739533928644415 5.288390381777326
+ POINT 3716 -2.242930398731676 5.302109189546279
+ POINT 3717 -1.241669088051592 5.270356204654476
+ POINT 3718 -0.9957604298274654 5.733872215635875
+ POINT 3719 -1.247341652262671 6.199670785960144
+ POINT 3720 -0.7487077108978402 6.190600154807756
+ POINT 3721 -1.750101222783229 6.207340074054102
+ POINT 3722 0.2525804711664861 16.03806627312495
+ POINT 3723 0.7575089779655068 16.03809741945602
+ POINT 3724 2.02030624750022 16.47789565447198
+ POINT 3725 1.768522151534456 16.91607496170236
+ POINT 3726 1.263131370718908 16.9154812897201
+ POINT 3727 1.010191697747241 16.47724942348051
+ POINT 3728 0.7581006050570804 16.91517093599549
+ POINT 3729 1.767492760883478 16.03853792054329
+ POINT 3730 1.262539743627335 16.03840777318063
+ POINT 3731 2.020500917581566 12.9527349076961
+ POINT 3732 2.27331260158336 12.50912505089398
+ POINT 3733 2.779144928744407 12.50876122906312
+ POINT 3734 3.031723754127154 12.95196235014854
+ POINT 3735 2.778352454165535 13.39455042727942
+ POINT 3736 2.272957833603747 13.3948329253368
+ POINT 3737 2.525426876575043 13.8369232187498
+ POINT 3738 2.777506896019309 15.1594754466739
+ POINT 3739 2.272346079797352 15.15939314985943
+ POINT 3740 2.019831152532347 14.71933669397711
+ POINT 3741 3.030366570726561 14.7190708982712
+ POINT 3742 2.272480678625036 14.27823797632229
+ POINT 3743 2.777875299186825 14.27795547826491
+ POINT 3744 10.93683714441736 10.68473936450384
+ POINT 3745 10.42338210640577 10.69299645121282
+ POINT 3746 10.16379499462924 11.14307136444035
+ POINT 3747 9.91091727032488 10.69833236588283
+ POINT 3748 10.41689657692929 11.58759618069605
+ POINT 3749 9.904431740848405 11.59293209536606
+ POINT 3750 8.383104263115078 9.813271926383957
+ POINT 3751 8.131409992405931 9.367205411144512
+ POINT 3752 9.398187257932385 10.70341785754419
+ POINT 3753 9.657774369708918 10.25334294431667
+ POINT 3754 8.893751225144806 9.810542586143804
+ POINT 3755 8.634397395286692 10.26115777621818
+ POINT 3756 8.886484135943755 10.70714689312742
+ POINT 3757 9.13962703655972 11.15213631469359
+ POINT 3758 9.404348514274115 9.808267818781912
+ POINT 3759 9.153055382102501 9.360381968947689
+ POINT 3760 8.872305329160442 13.38023764365699
+ POINT 3761 8.361774760572246 13.38192662649333
+ POINT 3762 8.108500687104918 12.93924814391208
+ POINT 3763 7.851722750806532 13.38397571670315
+ POINT 3764 9.129653596289845 12.93477140237956
+ POINT 3765 9.383406228579656 13.37780999233429
+ POINT 3766 8.365440776821156 12.49364881518358
+ POINT 3767 8.880975687566195 11.60022015801457
+ POINT 3768 8.623178158666493 12.04733677120861
+ POINT 3769 8.876290078715968 12.4908870097273
+ POINT 3770 9.387390978135182 12.48845935840459
+ POINT 3771 9.645780391854883 12.04101593868705
+ POINT 3772 9.392678809554825 11.59649112243135
+ POINT 3773 7.336521171883755 16.03802297080912
+ POINT 3774 6.828065241427138 16.03845128541167
+ POINT 3775 7.5918329762552 15.59662152541176
+ POINT 3776 7.845750620519943 16.03722595032059
+ POINT 3777 7.337862589465587 15.15534235318604
+ POINT 3778 5.057585641163165 12.94868558387678
+ POINT 3779 5.310107534158264 13.39084788872668
+ POINT 3780 5.817351898032172 13.38983223877548
+ POINT 3781 6.07268977213729 12.94608405296639
+ POINT 3782 6.325320010388582 13.38836776247147
+ POINT 3783 5.312210950489913 12.50443571161929
+ POINT 3784 5.820129413724779 12.50287853813417
+ POINT 3785 7.339731120788066 14.27145814743096
+ POINT 3786 7.595668707268915 13.82815216683726
+ POINT 3787 6.578161363273717 13.83088304133535
+ POINT 3788 6.833499237378835 13.38713485552626
+ POINT 3789 7.342394633801588 13.38547368425602
+ POINT 3790 0.252580463343477 23.08531079540609
+ POINT 3791 8.162767350938793e-09 23.52306095911839
+ POINT 3792 -0.2525804483660444 23.08531079452379
+ POINT 3793 0.7575089608641339 23.96190261703586
+ POINT 3794 1.010191668996723 23.52275060745893
+ POINT 3795 0.7581005854889762 23.08482908796231
+ POINT 3796 0.2525804650598689 23.96193376174162
+ POINT 3797 -0.2525804466496525 23.96193376085932
+ POINT 3798 0.5049285060517139 24.40077541877679
+ POINT 3799 -0.5055201152249069 22.64707892226741
+ POINT 3800 -0.7581005704056165 23.08482908597971
+ POINT 3801 -2.280691500226466 21.33225925503491
+ POINT 3802 -2.53596148453538 20.89273520120051
+ POINT 3803 -2.318125017725038 20.44808511706579
+ POINT 3804 -1.847863620987981 20.44808512551896
+ POINT 3805 -1.523722029333108 20.89935045509462
+ POINT 3806 5.812596363012457 16.91987591856731
+ POINT 3807 6.066345594955665 16.47969821633841
+ POINT 3808 5.052976709870697 16.47984331586753
+ POINT 3809 5.306138118529179 16.03968129951453
+ POINT 3810 3.790935938593665 22.20328485170038
+ POINT 3811 3.537066694466712 22.64267534247436
+ POINT 3812 3.788945299949968 23.08133297666114
+ POINT 3813 4.294456576555887 23.08098941943979
+ POINT 3814 5.814542622740053 18.67893193273223
+ POINT 3815 6.321208749925488 18.67923371051273
+ POINT 3816 5.56317568611094 19.11824430305507
+ POINT 3817 5.309100721439222 18.67828449587171
+ POINT 3818 5.55961311789328 17.35962041953518
+ POINT 3819 5.306832701253025 17.79918676761919
+ POINT 3820 5.306180989556889 16.91965690872165
+ POINT 3821 4.547661231803737 17.3588241803909
+ POINT 3822 4.799993464751521 16.91958781683539
+ POINT 3823 4.801296726707842 17.79849881202905
+ POINT 3824 4.295760214073866 17.79792158273044
+ POINT 3825 5.054931683523153 18.23828416995873
+ POINT 3826 4.80356474689404 18.67759654028158
+ POINT 3827 4.299173611489742 18.6763503095416
+ POINT 3828 3.290304316514962 18.67294152057774
+ POINT 3829 3.035034337010901 18.23341748971889
+ POINT 3830 3.285878391294609 17.79579279452859
+ POINT 3831 3.790936184735975 17.79671510214655
+ POINT 3832 4.04457167964008 18.2363897337847
+ POINT 3833 3.794349582151851 18.67514382895771
+ POINT 3834 10.40547659015908 22.20116479457716
+ POINT 3835 10.92128251969344 22.20090966781737
+ POINT 3836 10.14796994537765 23.52313096986383
+ POINT 3837 9.8907628324997 23.96485671831825
+ POINT 3838 10.40472019475341 23.96486720377927
+ POINT 3839 9.890900260175624 23.08230629000788
+ POINT 3840 9.378284610504384 23.96443017775849
+ POINT 3841 9.377738405713401 23.08218964573298
+ POINT 3842 9.634626082765084 22.64137545133806
+ POINT 3843 8.099972523597952 21.7604283165895
+ POINT 3844 7.844935974709012 21.32035791039074
+ POINT 3845 5.052976083273045 23.52015672445931
+ POINT 3846 5.306137433620915 23.96031879840885
+ POINT 3847 5.812969663000015 23.9607046052643
+ POINT 3848 8.610566754219654 19.11957081809886
+ POINT 3849 8.86560419797468 18.67950029477104
+ POINT 3850 8.354849270149012 18.67954721468524
+ POINT 3851 4.553342440596749 20.88364911748843
+ POINT 3852 4.813437754880869 20.4412013335515
+ POINT 3853 7.59041331172436 17.35947928465035
+ POINT 3854 7.84499397090196 16.91893659852759
+ POINT 3855 -19.25787296088819 16.44788827908155
+ POINT 3856 -19.60184782149814 16.02916106451099
+ POINT 3857 -19.1873871451938 16.90476537360675
+ POINT 3858 -19.76179636729207 16.92243533655163
+ POINT 3859 -18.75405232838112 16.85355871501342
+ POINT 3860 -17.47351228606856 13.33558852399519
+ POINT 3861 -16.99713742559343 13.37046042966367
+ POINT 3862 -17.69351481734877 13.78071241680643
+ POINT 3863 -17.67256727113895 14.23260684746697
+ POINT 3864 -17.10180880051252 14.27897349996412
+ POINT 3865 -17.52690194145971 14.67823884343126
+ POINT 3866 -18.11860795829596 14.17997776027357
+ POINT 3867 -8.872305209312021 13.38023770553157
+ POINT 3868 -8.615527284439597 13.82496527042976
+ POINT 3869 -9.383406088516729 13.37781006740056
+ POINT 3870 -3.29030430028144 18.67294152375674
+ POINT 3871 -3.794349564136366 18.67514383248151
+ POINT 3872 -4.044571659990828 18.23638973901306
+ POINT 3873 -3.790936165766305 17.79671510855067
+ POINT 3874 -4.295760192767313 17.79792158977951
+ POINT 3875 -3.035034321141562 18.23341749366453
+ POINT 3876 -4.801296702384416 17.79849882003976
+ POINT 3877 -4.547661208159893 17.35882418957737
+ POINT 3878 -5.306180959737993 16.91965692151171
+ POINT 3879 -5.55961308673966 17.35962043087595
+ POINT 3880 -5.306832673423715 17.79918677637247
+ POINT 3881 -4.799993438895712 16.91958782835436
+ POINT 3882 -4.294456929278608 16.9190105980941
+ POINT 3883 -2.272576526046017 16.03887380690432
+ POINT 3884 -2.777737341802472 16.0389561054949
+ POINT 3885 -2.524923853949907 15.59959837248141
+ POINT 3886 -1.009801502771103 14.71943838905496
+ POINT 3887 -1.262295091084871 15.15932946921788
+ POINT 3888 -1.767248108404131 15.15945961891492
+ POINT 3889 -1.514810020874192 15.59938592419379
+ POINT 3890 -3.788433924444957 15.15930010017922
+ POINT 3891 -3.282944342657759 15.15927612630229
+ POINT 3892 -3.53557425149356 15.59970464494893
+ POINT 3893 -7.339731052101191 14.27145818376952
+ POINT 3894 -7.595668629168774 13.82815220873106
+ POINT 3895 -7.849059155801069 14.26996022049591
+ POINT 3896 -7.342394561194965 13.3854737272261
+ POINT 3897 -7.084485066391316 14.7143115191922
+ POINT 3898 -6.829226012364133 15.15638770751324
+ POINT 3899 -6.321312708705147 15.15701776202244
+ POINT 3900 -6.068350603934552 14.71617011524867
+ POINT 3901 -6.322915322587308 14.27373641192795
+ POINT 3902 -5.815417372472714 14.27454968432659
+ POINT 3903 -6.831094539759021 14.27250350742734
+ POINT 3904 -6.578161308297183 13.83088307650527
+ POINT 3905 -8.866490968805563 16.03593620740154
+ POINT 3906 -8.611811380443392 15.59504271031803
+ POINT 3907 -9.378288849377203 16.03556985539014
+ POINT 3908 -9.6350393648364 15.59383445480634
+ POINT 3909 -9.379158137016026 15.15149576728833
+ POINT 3910 -9.89163708740748 15.1510693400336
+ POINT 3911 -15.8358398935749 10.22173585196274
+ POINT 3912 -15.57327200390477 9.802417738572654
+ POINT 3913 -15.56201444033999 10.67148502492812
+ POINT 3914 -15.03253570609934 9.806583202382573
+ POINT 3915 -14.77952317432621 10.24189580191657
+ POINT 3916 9.425787409990559 8.000472836505047
+ POINT 3917 9.674058285545414 8.456902013814751
+ POINT 3918 8.913238706756516 8.008641634917387
+ POINT 3919 9.413783458670364 8.907219666364485
+ POINT 3920 8.903186169541055 8.909494433726376
+ POINT 3921 8.934155614066498 6.185727604037459
+ POINT 3922 9.185518368839453 5.729430618608695
+ POINT 3923 8.426271183269629 5.29029227071893
+ POINT 3924 8.171917178443586 5.749542014684138
+ POINT 3925 7.909982677729378 5.316726387461308
+ POINT 3926 7.65715073777133 4.866671726394044
+ POINT 3927 7.405022267322629 4.401754646811489
+ POINT 3928 7.912208212106719 4.392559563913546
+ POINT 3929 7.402796732945287 5.325921470359251
+ POINT 3930 8.404914415163201 4.401060889634398
+ POINT 3931 8.152785944714498 3.936143810051844
+ POINT 3932 8.395983975566867 3.439639257034445
+ POINT 3933 7.903277772510386 3.431137931313593
+ POINT 3934 8.859661009169432 3.521793227546019
+ POINT 3935 9.192238274352787 3.866734673314474
+ POINT 3936 4.268076247259387 3.565481647629336
+ POINT 3937 4.016822549239988 3.997412240786614
+ POINT 3938 3.742622838171702 3.563061153758769
+ POINT 3939 7.792705379504119 2.62557788257827
+ POINT 3940 7.793203652127295 2.025645271244315
+ POINT 3941 7.321623681205077 1.829570466086152
+ POINT 3942 7.678396273741249 1.532671260083118
+ POINT 3943 -9.67405808643629 8.456902308458442
+ POINT 3944 -9.413783282784191 8.907219840486656
+ POINT 3945 -9.425787263000267 8.000473059513219
+ POINT 3946 -9.404348331955575 9.808267994664813
+ POINT 3947 -9.657774187537704 10.2533431194428
+ POINT 3948 -9.398187091428191 10.70341798750657
+ POINT 3949 -8.886483995011314 10.70714699997187
+ POINT 3950 -8.634397277109187 10.26115787334679
+ POINT 3951 -8.375837072421056 10.70987630924256
+ POINT 3952 -7.859855983182076 11.60547875629908
+ POINT 3953 -8.117653499839879 11.15836215444448
+ POINT 3954 -7.865566781937751 10.71237302781939
+ POINT 3955 -7.402798620889166 5.325921535058544
+ POINT 3956 -7.909984549202172 5.316726131062188
+ POINT 3957 -7.91137279652743 6.215871164881401
+ POINT 3958 -7.395668297048518 6.230569439935667
+ POINT 3959 -7.651411014573558 6.670464686753046
+ POINT 3960 -7.127776753374082 7.579721889218547
+ POINT 3961 -7.388870581544597 7.128261877982224
+ POINT 3962 -6.874612686924131 7.136622973043634
+ POINT 3963 -7.904575081023509 7.113563602927958
+ POINT 3964 -2.775002874658712 8.037874849929569
+ POINT 3965 -2.523911656853837 8.48803806266702
+ POINT 3966 -2.748276461706778 5.323514342820022
+ POINT 3967 -2.490019549071636 4.855243070040132
+ POINT 3968 -2.734687480700977 4.405830000443286
+ POINT 3969 -2.221684119951277 3.449608486395616
+ POINT 3970 -1.723323855016578 3.419581979977251
+ POINT 3971 -1.475257769780243 2.932460366680298
+ POINT 3972 -1.727946415087521 2.471297653398232
+ POINT 3973 -2.223574359144033 2.516811469853332
+ POINT 3974 -3.221425371391462 2.620248809612628
+ POINT 3975 -3.480916638529793 3.091370153630558
+ POINT 3976 -2.468657119838987 3.007906638484771
+ POINT 3977 -2.720982349242926 3.493309929661852
+ POINT 3978 -2.722872588435682 2.560512913119568
+ POINT 3979 -5.842877759869626 2.614418369465591
+ POINT 3980 -6.061704181617179 2.125899992841759
+ POINT 3981 -5.97038887687998 1.577324987897494
+ POINT 3982 -5.06120498229036 2.210552055587216
+ POINT 3983 -5.314757330560761 1.807879325032759
+ POINT 3984 -5.55603059107262 1.449150510867695
+ POINT 3985 -5.910338424284915 0.8932498958018659
+ POINT 3986 -5.818442258077686 3.559384883546551
+ POINT 3987 -6.081231365982387 4.02806702834004
+ POINT 3988 -5.831279019722861 4.472379399615662
+ POINT 3989 -5.313338782452499 4.466227623547525
+ POINT 3990 -5.576017782319205 4.91994190717009
+ POINT 3991 -6.359431968524975 7.142146372318731
+ POINT 3992 -6.620525796695491 6.690686361082408
+ POINT 3993 1.233115817299789 35.66363567026767
+ POINT 3994 1.486808643266108 35.18419627849168
+ POINT 3995 0.4944716807918905 35.20892209325812
+ POINT 3996 0.7430350528777356 34.73871437587108
+ POINT 3997 1.24166914315593 34.72964380187346
+ POINT 3998 1.723322487966932 36.58041769429607
+ POINT 3999 1.47525558328076 37.06753926104606
+ POINT 4000 1.229221132046703 36.61216257531929
+ POINT 4001 1.727943080105888 37.52870184484969
+ POINT 4002 2.223571255475589 37.48318802553167
+ POINT 4003 2.221683046657149 36.55039137343753
+ POINT 4004 -6.12911124076021e-07 36.15975594917647
+ POINT 4005 0.2456022332246583 35.68768488038043
+ POINT 4006 0.7400741502994709 35.68099311908834
+ POINT 4007 0.9842463697325569 36.14239845738996
+ POINT 4008 0.7361794650463853 36.62952002413996
+ POINT 4009 0.2456016905429583 36.6413100607267
+ POINT 4010 -3.793978809704677 29.27114346488373
+ POINT 4011 -3.286497753816385 29.27075839834291
+ POINT 4012 -4.047052767131356 28.82584690724009
+ POINT 4013 -4.301274302070375 29.27204649795666
+ POINT 4014 -1.010043015772705 27.0468834923308
+ POINT 4015 -1.262608764623798 27.49047222490107
+ POINT 4016 -1.767930085310411 27.49060023494886
+ POINT 4017 -1.515420458762666 27.93408208316265
+ POINT 4018 0.2524349327400771 25.72146687392503
+ POINT 4019 0.7573603149878654 25.72151113216611
+ POINT 4020 1.009801512786854 25.28056167560054
+ POINT 4021 0.7573634246136738 24.84063535787972
+ POINT 4022 0.2524349288094089 24.84066650258547
+ POINT 4023 2.777737238018064 23.96104396031738
+ POINT 4024 2.524923774235408 24.40040170273027
+ POINT 4025 2.777506791782362 24.84052463209574
+ POINT 4026 3.535574059218396 24.40029545953312
+ POINT 4027 3.282925370480001 23.96061617471239
+ POINT 4028 3.282944215957301 24.84072399033624
+ POINT 4029 12.20022707000518 35.34109407649751
+ POINT 4030 11.70510822545789 35.04850824368519
+ POINT 4031 11.91055210130007 34.50393744856109
+ POINT 4032 12.60489935123083 35.00986841165744
+ POINT 4033 12.66773748228985 35.47670596579247
+ POINT 4034 8.893751753942059 30.18945889408129
+ POINT 4035 9.153056290168134 30.63961947961057
+ POINT 4036 8.131410636714342 30.63279563621241
+ POINT 4037 8.383104759045018 30.18672926891533
+ POINT 4038 8.634397687045755 29.73884369142445
+ POINT 4039 12.58774522600974 32.92273845990162
+ POINT 4040 12.88263711150898 33.38136361259253
+ POINT 4041 11.99490300572006 33.72244417282177
+ POINT 4042 11.76196217222862 33.30918283037465
+ POINT 4043 10.44503879622377 31.98862289521601
+ POINT 4044 9.935933261738526 31.99895822327177
+ POINT 4045 10.19676774154491 32.44505172349099
+ POINT 4046 10.43863927688695 31.09908378942327
+ POINT 4047 9.923929035406161 31.09221194132288
+ POINT 4048 12.04127152589021 32.88444301026691
+ POINT 4049 12.3185949442571 32.49062006753039
+ POINT 4050 11.23899726008386 32.44352050666546
+ POINT 4051 11.49281189047597 32.87706443800342
+ POINT 4052 10.95968790642227 32.8682603267732
+ POINT 4053 1.262715484017742 28.37904364136764
+ POINT 4054 1.768036798549242 28.37917166198487
+ POINT 4055 1.010161265302347 28.82419254739624
+ POINT 4056 2.021045344488098 28.82414552152322
+ POINT 4057 1.767940462475327 29.27066494618034
+ POINT 4058 1.26253538053122 29.27109444816391
+ POINT 4059 2.770029231935803 32.86450580601395
+ POINT 4060 2.513285504693407 33.32124089899702
+ POINT 4061 3.271742772836252 33.76266810178318
+ POINT 4062 3.531281879770986 33.30800649818775
+ POINT 4063 3.782262295813676 33.75645595947597
+ POINT 4064 3.278351258691227 32.86027907795702
+ POINT 4065 2.760975203039712 33.77191946209709
+ POINT 4066 3.011955619082402 34.2203689233853
+ POINT 4067 3.24336847489558 35.56418088173734
+ POINT 4068 3.51170389869557 35.11435420516057
+ POINT 4069 3.259044827222107 34.66723526388904
+ POINT 4070 2.748277257425567 34.67648662420295
+ POINT 4071 3.775382260352405 34.65823650434292
+ POINT 4072 2.490020077115392 35.144757594862
+ POINT 4073 2.734687809839291 35.59417066577944
+ POINT 4074 2.982689819169599 36.0349985828101
+ POINT 4075 5.320196103324097 34.6359031807579
+ POINT 4076 5.838135302791581 34.62975089654809
+ POINT 4077 5.843829338818099 33.7446915717945
+ POINT 4078 5.325945325800963 33.74013958043911
+ POINT 4079 6.104986270073042 34.19646204120262
+ POINT 4080 6.366501732041227 33.75556204313139
+ POINT 4081 7.355184469361421 29.28425732715628
+ POINT 4082 7.097783537365648 28.83658193947715
+ POINT 4083 7.865566929755092 29.28762815642849
+ POINT 4084 7.350228293730351 28.39242759965563
+ POINT 4085 19.44766038638703 17.77297915226804
+ POINT 4086 19.25342567711544 17.32881418384076
+ POINT 4087 19.87861805246748 17.79987630487601
+ POINT 4088 19.7617964066728 16.92243558592404
+ POINT 4089 18.23422309592939 19.09467776603307
+ POINT 4090 17.94988909858838 19.54747247390121
+ POINT 4091 17.87676920727169 18.65944226175127
+ POINT 4092 17.47644822823684 19.54717784596157
+ POINT 4093 17.34509995115183 18.66931480712425
+ POINT 4094 17.09404309109673 19.09688211341927
+ POINT 4095 14.28781180230033 14.72466403349399
+ POINT 4096 14.01051623503285 14.27484065136018
+ POINT 4097 14.53345889310514 14.28002636702044
+ POINT 4098 14.02979336632444 15.1647422550637
+ POINT 4099 9.380906978001171 14.26600341154953
+ POINT 4100 9.12438810215771 14.70980710098454
+ POINT 4101 15.04265771685345 14.28419049908406
+ POINT 4102 14.76536214958597 13.83436711695024
+ POINT 4103 15.51798377903927 13.38033526490094
+ POINT 4104 15.77563980375512 13.8415064727855
+ POINT 4105 15.57188627435891 14.28816954061234
+ POINT 4106 15.0151159829359 13.3824166393444
+ POINT 4107 14.50591715918759 13.37825250728078
+ POINT 4108 14.32789030772291 18.24225940568398
+ POINT 4109 14.06264433374127 18.67628429324169
+ POINT 4110 14.59588283104642 18.67648157009492
+ POINT 4111 14.05735903828086 17.80654303626809
+ POINT 4112 15.97007787533187 19.09864616168911
+ POINT 4113 15.55510702426619 19.54892674781743
+ POINT 4114 15.67915324486533 18.67142187799671
+ POINT 4115 15.13772625968102 18.6705433487333
+ POINT 4116 14.87248028569938 19.104568236291
+ POINT 4117 15.08631080741999 19.54931075553736
+ POINT 4118 16.40287455364234 16.49110362272822
+ POINT 4119 16.17789332204421 16.93847666340548
+ POINT 4120 15.63614396207806 16.93957763712053
+ POINT 4121 16.14372364991884 16.05344993095792
+ POINT 4122 15.61382912052633 16.05886889307093
+ POINT 4123 15.35525573754169 16.49958700177147
+ POINT 4124 15.52045255096381 27.53143212489101
+ POINT 4125 15.7870223740392 27.99457973843145
+ POINT 4126 15.02942399137993 28.42914752056209
+ POINT 4127 14.76711254324515 27.97953196141813
+ POINT 4128 14.51705994325481 28.42366935023485
+ POINT 4129 14.50592923991572 26.62175677982754
+ POINT 4130 14.24625536736449 27.07313717726593
+ POINT 4131 14.50521689123425 27.52387693058424
+ POINT 4132 15.01513786829292 26.61758604679623
+ POINT 4133 15.25855689895291 27.07577709405712
+ POINT 4134 15.01758093935937 27.52935510091147
+ POINT 4135 12.9694811665887 12.47903060881283
+ POINT 4136 12.45717370465674 12.47876009769995
+ POINT 4137 14.50520651711792 12.4761250777077
+ POINT 4138 14.7671040812539 12.02046720497029
+ POINT 4139 13.74078013085571 12.02829134523479
+ POINT 4140 13.9984165723697 11.58047790445619
+ POINT 4141 14.51705381061231 11.57633069980357
+ POINT 4142 11.4484074904361 10.67917014008009
+ POINT 4143 11.95934178620452 10.67017466538644
+ POINT 4144 12.20772768780863 11.12870134727384
+ POINT 4145 11.18783017672887 11.13216622534658
+ POINT 4146 11.9508019094484 11.57834527171309
+ POINT 4147 -6.319776468193496 23.08033815128008
+ POINT 4148 -6.066344452733028 23.52030179118255
+ POINT 4149 -6.827400621252306 23.08040135673631
+ POINT 4150 -5.054931155474743 21.76171557577203
+ POINT 4151 -4.801296232783984 22.20150105449617
+ POINT 4152 -4.299173338283442 21.32364952911328
+ POINT 4153 -4.044571390294786 21.76361015107778
+ POINT 4154 -4.803564411703622 21.32240320854091
+ POINT 4155 -9.890817652390373 18.67925530533506
+ POINT 4156 -10.40541205324793 18.6792215753713
+ POINT 4157 -10.66370535213654 19.1191138197801
+ POINT 4158 -10.92145974258163 18.67904850987438
+ POINT 4159 -10.40367095930107 19.55964298171444
+ POINT 4160 -9.890168540567483 19.55964268050665
+ POINT 4161 -9.634489634605369 19.11940539677126
+ POINT 4162 -10.40452722022296 15.15066274552778
+ POINT 4163 -10.91910259518919 15.1508331382961
+ POINT 4164 -11.1763986356346 14.70838986864997
+ POINT 4165 -10.91783739771569 14.26368314942298
+ POINT 4166 -10.14864599240259 14.70832405800977
+ POINT 4167 -12.73019529136231 15.59870134525367
+ POINT 4168 -12.98766621355665 15.15683558657137
+ POINT 4169 -15.04265746253503 14.28419090907873
+ POINT 4170 -14.53345861723851 14.28002669541752
+ POINT 4171 -17.78489628918051 15.09030875190717
+ POINT 4172 -17.98400083785333 15.51100038825157
+ POINT 4173 -18.29676496075896 15.05256382727852
+ POINT 4174 -17.21413781855408 15.13667540440432
+ POINT 4175 -18.37155338762809 16.42393112019951
+ POINT 4176 -18.3010675719337 16.8808082147247
+ POINT 4177 -18.20721907030622 15.96221804176685
+ POINT 4178 -17.69535039872778 15.99996296639551
+ POINT 4179 -11.18084802879951 18.23937671254223
+ POINT 4180 -11.43914132768812 18.67926895695104
+ POINT 4181 -11.43896743540164 17.79930467995242
+ POINT 4182 -12.99576621508222 19.55819858351203
+ POINT 4183 -13.5100976113933 19.55820320578183
+ POINT 4184 -14.85535659566817 17.374607928817
+ POINT 4185 -14.59059730877303 17.80674048573657
+ POINT 4186 -15.12588788049639 17.81032428898499
+ POINT 4187 -14.57446835462891 16.93461729113196
+ POINT 4188 -15.10975892635227 16.93820109438039
+ POINT 4189 -16.50015666545286 20.45264189053479
+ POINT 4190 -16.08514514186547 20.00088643669584
+ POINT 4191 -16.11090178453964 20.45097892630424
+ POINT 4192 -16.88252114147691 20.00090158129587
+ POINT 4193 -16.50011596473811 19.5506058885838
+ POINT 4194 -18.66035566784347 24.06457908884339
+ POINT 4195 -18.99865817957391 24.48245948801812
+ POINT 4196 -18.88584837729288 24.93009825639208
+ POINT 4197 -19.39363960589392 24.88740656466259
+ POINT 4198 -17.82901974500803 22.20723193084345
+ POINT 4199 -17.29751704354181 22.19792307995124
+ POINT 4200 -18.12519085452415 22.66390362771543
+ POINT 4201 -17.42146697630052 23.53377902746666
+ POINT 4202 -17.69547182462984 24.00000320447274
+ POINT 4203 -17.19821562645829 23.98500536439521
+ POINT 4204 -18.2073784758447 24.03761507800751
+ POINT 4205 -17.98412712600248 24.48884141493606
+ POINT 4206 -18.37170036647084 23.57574087838007
+ POINT 4207 -17.74281660287124 23.09380582796382
+ POINT 4208 -17.24556040469969 23.0788079878863
+ POINT 4209 -18.30109742612498 23.11887466729579
+ POINT 4210 -12.74043249554734 22.63704750337856
+ POINT 4211 -12.47951737358623 22.1991443855027
+ POINT 4212 -11.95797425376473 22.19971901190847
+ POINT 4213 -11.69840700784104 22.64001300642548
+ POINT 4214 -11.95612881567687 23.08041184382327
+ POINT 4215 -13.79175978718601 22.63195086063527
+ POINT 4216 -14.05739164572269 22.19336401942717
+ POINT 4217 -16.69915170518863 23.07149332083817
+ POINT 4218 -16.17786098319811 23.06167189306724
+ POINT 4219 -16.40292005613846 23.50895975961821
+ POINT 4220 -16.20887664909252 22.19021698069621
+ POINT 4221 -16.75110834403075 22.1906084129031
+ POINT 4222 -17.02050133175934 22.63152012133533
+ POINT 4223 -13.99649914138446 26.62119352777317
+ POINT 4224 -14.50592910840412 26.62175634401045
+ POINT 4225 -14.76538162860431 26.16564234700188
+ POINT 4226 -14.53346806546978 25.71999620058877
+ POINT 4227 -14.0105122342672 25.72518479387579
+ POINT 4228 -15.04267671628401 25.71582538537957
+ POINT 4229 -16.66503651825777 23.95642639357603
+ POINT 4230 -16.14374579626725 23.9466049658051
+ POINT 4231 -16.93904136658709 24.42265057058211
+ POINT 4232 -16.68103287029956 24.83472097500758
+ POINT 4233 -17.21421197850009 24.86329994582677
+ POINT 4234 -9.637659354432278 26.17823809135695
+ POINT 4235 -9.895007838390011 26.62370467699503
+ POINT 4236 -10.40670361026193 26.62599835231532
+ POINT 4237 -10.66169890492968 26.18015313981581
+ POINT 4238 -10.40539715902982 25.73591795079784
+ POINT 4239 -9.892507684713129 25.73551085015163
+ POINT 4240 -3.538866270674407 27.93563837319875
+ POINT 4241 -3.791445061003568 27.4924372688973
+ POINT 4242 -3.284985242746421 27.49173667393181
+ POINT 4243 -3.792541681848606 28.3806414211657
+ POINT 4244 -4.299837174214305 28.38154445423863
+ POINT 4245 -3.286081863591458 28.37994082620021
+ POINT 4246 -6.578160439640206 26.16911757665643
+ POINT 4247 -6.3253193653182 26.61163279891804
+ POINT 4248 -5.817351397064218 26.61016819247553
+ POINT 4249 -6.322914449413139 25.72626408985695
+ POINT 4250 -6.831093433545865 25.72749714888835
+ POINT 4251 -5.815416739071694 25.72545072182048
+ POINT 4252 -6.068349732977355 25.2838302940524
+ POINT 4253 -8.103068545520017 25.2879261001149
+ POINT 4254 -7.847089733293389 24.84545529905903
+ POINT 4255 -7.33972959193747 25.72854262281094
+ POINT 4256 -7.084483601710403 25.28568913601146
+ POINT 4257 -7.84905736666726 25.73004082824404
+ POINT 4258 -7.337860774808862 24.84465820022065
+ POINT 4259 -6.829224616417257 24.84361272629806
+ POINT 4260 -7.591830748000244 24.40337888934564
+ POINT 4261 -10.95968825756436 32.86825866172835
+ POINT 4262 -11.2389973762048 32.44351916990193
+ POINT 4263 -10.96516313120963 31.99722932793554
+ POINT 4264 -10.45710394986915 32.90333376542937
+ POINT 4265 -10.19676760818201 32.44505103256093
+ POINT 4266 -10.4450386107414 31.98862213265781
+ POINT 4267 -5.839993028780057 31.9585713890503
+ POINT 4268 -5.58222505575568 31.50997899536313
+ POINT 4269 -6.353715906405032 31.96208637743266
+ POINT 4270 -9.890881409539208 22.20113221196177
+ POINT 4271 -9.377719567935678 22.20101557304443
+ POINT 4272 -9.890817945887456 21.32074066481798
+ POINT 4273 -9.377648390967682 21.32062266583164
+ POINT 4274 -10.14857006043265 21.76080491471691
+ POINT 4275 -9.121929625682005 21.76064670155081
+ POINT 4276 -3.989917438513398 37.75936920944303
+ POINT 4277 -4.253220144914879 38.17942950972456
+ POINT 4278 -5.0612047044748 37.78945190920187
+ POINT 4279 -4.788965345375917 37.30790232371594
+ POINT 4280 -5.345230853006697 37.3897257540357
+ POINT 4281 -3.511703891126289 35.11435281720901
+ POINT 4282 -3.775382111584034 34.65823488537108
+ POINT 4283 -4.288463783602202 34.65011427144418
+ POINT 4284 -4.035804655693716 34.20299575272048
+ POINT 4285 -13.43620984438418 34.81446134683805
+ POINT 4286 -13.29869599960812 34.31160156237819
+ POINT 4287 -12.93463213128416 34.64179503997145
+ POINT 4288 -13.62553600610368 33.9629776498918
+ POINT 4289 -14.13908291075123 34.14518767789303
+ POINT 4290 -12.60490716900593 35.00986141752851
+ POINT 4291 -12.20023572325958 35.34108684648683
+ POINT 4292 -12.66774772099321 35.47669756860905
+ POINT 4293 -11.70511437947869 35.04850274706365
+ POINT 4294 -11.9105566427679 34.50393254228281
+ POINT 4295 -12.47145116324818 34.51147573062274
+ POINT 4296 -9.806918774248189 36.80166842930682
+ POINT 4297 -10.26857635288579 37.16264372426561
+ POINT 4298 -10.1979850569437 36.56768967568621
+ POINT 4299 -1.515143968311342 29.71762612467332
+ POINT 4300 -1.767218169152578 30.16613538008133
+ POINT 4301 -2.273105814749252 30.16491121650845
+ POINT 4302 -2.526893645558062 29.71688475828849
+ POINT 4303 -4.295343851645418 33.74833423033055
+ POINT 4304 -3.78226217962725 33.75645484425745
+ POINT 4305 -3.531281742859955 33.30800564331628
+ POINT 4306 -3.788870710138221 32.85406611529395
+ POINT 4307 -4.299971286819369 32.85149198399459
+ POINT 4308 -10.95895536230713 35.58920341710635
+ POINT 4309 -10.41172580433067 35.55794744193341
+ POINT 4310 -11.08356921006429 36.15576819899469
+ POINT 4311 -10.1942008448515 36.08605690473453
+ POINT 4312 -9.956518482555364 35.68306089840274
+ POINT 4313 -10.65319237871901 36.44257621921687
+ POINT 4314 -11.0910623698248 36.64296654514917
+ POINT 4315 -13.7593285339414 31.59910572962469
+ POINT 4316 -13.97378905574307 31.09637586275941
+ POINT 4317 -14.49013543528747 31.07749003746751
+ POINT 4318 -14.0764019646777 32.09309626417902
+ POINT 4319 -14.48389267802026 31.91422357801393
+ POINT 4320 -14.75329172047915 31.4892516249232
+ POINT 4321 -5.587461461429323 33.29923896261564
+ POINT 4322 -5.325946062699384 33.7401385358841
+ POINT 4323 -5.327825510476393 32.84978726680519
+ POINT 4324 -4.809231792482727 33.74478093752646
+ POINT 4325 -5.065600597928541 34.19023273715123
+ POINT 4326 -4.555689316416261 33.29824002906342
+ POINT 4327 -4.813859227656678 32.8479386911905
+ POINT 4328 5.823064971458006 28.38586497473401
+ POINT 4329 5.315146572158927 28.38430769994047
+ POINT 4330 5.062470610533198 28.82834397135218
+ POINT 4331 6.079388428607562 28.83197977936755
+ POINT 4332 5.317804360302774 29.27479479926754
+ POINT 4333 5.827084127424216 29.27699957992611
+ POINT 4334 10.41689568078359 28.4124072611171
+ POINT 4335 10.66929742196129 27.96611222514022
+ POINT 4336 9.904430854792075 28.4070707901445
+ POINT 4337 10.41083792953915 27.51739638025921
+ POINT 4338 8.886484172763202 29.29285479615131
+ POINT 4339 8.37583717786616 29.29012517098535
+ POINT 4340 9.139626727505856 28.8478657394769
+ POINT 4341 8.117653415472539 28.84163926115534
+ POINT 4342 11.95092859671319 24.8475539406863
+ POINT 4343 12.46807375787325 24.84583394788076
+ POINT 4344 12.20840003869946 25.28942203987447
+ POINT 4345 11.95272288103627 23.96287269629527
+ POINT 4346 12.47198579068075 23.9610098082623
+ POINT 4347 12.73018467318101 24.40129625485699
+ POINT 4348 11.43575282852112 23.96401601812759
+ POINT 4349 10.91929475924401 23.96469697384104
+ POINT 4350 11.43395854419803 24.84869726251862
+ POINT 4351 10.91909661344623 24.84916901000663
+ POINT 4352 11.69363226337182 24.40510917052491
+ POINT 4353 10.66208764636606 24.40642272229546
+ POINT 4354 12.45674415720379 26.62593764544495
+ POINT 4355 12.71561902895919 26.17761365870297
+ POINT 4356 12.46344625167966 25.73349620934157
+ POINT 4357 11.9463010905196 25.73521620214711
+ POINT 4358 11.68774091931249 26.17992315964508
+ POINT 4359 11.94436146317965 26.6262558892628
+ POINT 4360 12.19975831688364 27.07290316309354
+ POINT 4361 11.70835016186513 29.77725626131508
+ POINT 4362 11.44840780891525 29.32083443761827
+ POINT 4363 10.94524480188349 30.2119493620846
+ POINT 4364 10.68396014223092 29.76000284437696
+ POINT 4365 11.4612799501046 30.22519211862191
+ POINT 4366 11.20910938557762 30.66888094038705
+ POINT 4367 10.9368374049108 29.31526434275312
+ POINT 4368 11.95080093219896 28.42166108213997
+ POINT 4369 12.4591287934299 28.41955637961497
+ POINT 4370 12.71451082664457 27.96964269203738
+ POINT 4371 12.97143800709656 28.41928524228948
+ POINT 4372 11.69163226937222 27.96979595129795
+ POINT 4373 12.45717131194284 27.52124937431928
+ POINT 4374 11.9447886179187 27.52156761813713
+ POINT 4375 15.29885200343264 28.8835193357322
+ POINT 4376 15.56202156575395 29.32850886335364
+ POINT 4377 15.04254095371091 29.31827443700025
+ POINT 4378 16.0564503860919 28.44895155360157
+ POINT 4379 16.33477400183093 28.91218754051921
+ POINT 4380 15.54890460342297 28.43938194691547
+ POINT 4381 16.09215770029102 29.34350152581874
+ POINT 4382 12.72223555131803 29.77728149733855
+ POINT 4383 12.97062105959908 29.31875497111673
+ POINT 4384 12.98553664119016 30.24101141045128
+ POINT 4385 13.47593186273332 30.21482288295318
+ POINT 4386 14.77952748380703 29.75810228782938
+ POINT 4387 14.50635713461083 30.18825186751686
+ POINT 4388 14.51635792148571 29.31311276020795
+ POINT 4389 13.9900110158661 30.20713768228853
+ POINT 4390 13.73926529844905 29.76062581170174
+ POINT 4391 2.273105774761268 9.83508879984791
+ POINT 4392 2.779450317637714 9.835400651617574
+ POINT 4393 3.033012220564729 9.388247709190718
+ POINT 4394 5.582224331984559 8.490021384452593
+ POINT 4395 5.324236755485918 8.938715200324722
+ POINT 4396 4.303205470450614 9.835452415437004
+ POINT 4397 4.811613166163307 9.834298227553571
+ POINT 4398 4.049286364268548 9.3886844889632
+ POINT 4399 5.068073565684609 9.386690434889857
+ POINT 4400 4.814373978828597 8.940272488625666
+ POINT 4401 2.221682434110464 3.449608482318896
+ POINT 4402 1.723322054663639 3.41958212581723
+ POINT 4403 1.475255227755129 2.932460514091849
+ POINT 4404 1.727942742988692 2.471297861599172
+ POINT 4405 2.223570867244001 2.516811617236392
+ POINT 4406 3.247664549616101 1.691005979661493
+ POINT 4407 3.738193462327802 1.768828689718033
+ POINT 4408 2.976338300237787 2.129153441474481
+ POINT 4409 3.989913465089363 2.240629487564227
+ POINT 4410 3.734383925154549 2.66000978424141
+ POINT 4411 4.249406076125915 2.711750263924309
+ POINT 4412 -0.2525804527561534 16.03806627400728
+ POINT 4413 -0.7575089596573991 16.03809742300865
+ POINT 4414 8.162773457165429e-09 16.47693907063823
+ POINT 4415 0.5055201424216942 17.35292109533307
+ POINT 4416 0.2530784214946227 17.78947522331019
+ POINT 4417 0.2525804694500266 16.91468922909349
+ POINT 4418 -0.2525804544726128 16.91468922997582
+ POINT 4419 -0.2530784086493366 17.78947522356133
+ POINT 4420 -0.5055201286865491 17.35292109643341
+ POINT 4421 -0.7581005899738023 16.91517093797816
+ POINT 4422 10.92866218369657 11.58403101835576
+ POINT 4423 10.66929892991574 12.03389174928147
+ POINT 4424 10.92260560930413 12.47904214844759
+ POINT 4425 11.44023252971531 11.57846179393201
+ POINT 4426 11.6916339164161 12.03021006472227
+ POINT 4427 6.829226066792335 15.15638767985543
+ POINT 4428 7.08448512863891 14.71431148714117
+ POINT 4429 6.32291537112456 14.27373638104556
+ POINT 4430 6.068350648601582 14.71617008807552
+ POINT 4431 6.831094598114815 14.27250347410035
+ POINT 4432 6.574690216144999 15.59804860267928
+ POINT 4433 6.320151929953125 16.03908134219066
+ POINT 4434 5.812970569673526 16.03929553360603
+ POINT 4435 5.559944453526639 15.59906442536678
+ POINT 4436 5.813814797954246 15.15783101089938
+ POINT 4437 6.321312755318322 15.15701773663442
+ POINT 4438 -1.775181001650297 21.33393361507919
+ POINT 4439 -1.267840951818172 21.33711381294345
+ POINT 4440 -2.024810422711531 21.77002261288375
+ POINT 4441 -0.7585985253342913 22.21004308218826
+ POINT 4442 -0.2530784032947191 22.21052479073235
+ POINT 4443 -0.25307840396708 21.33774656408433
+ POINT 4444 6.030698440628868e-09 21.77348895090434
+ POINT 4445 -0.761269396452543 21.33800980180604
+ POINT 4446 -1.012728368769732 21.77259296179061
+ POINT 4447 -1.26517008069992 22.20914709332568
+ POINT 4448 6.57552905270612 19.11917837703191
+ POINT 4449 6.830512439734651 19.55973226747113
+ POINT 4450 6.323600974440302 19.55944563035479
+ POINT 4451 7.337224191221686 19.55973210309189
+ POINT 4452 7.085296112955868 19.99999935641476
+ POINT 4453 7.591126172197229 19.11954137608066
+ POINT 4454 7.845909845418445 19.55980846502429
+ POINT 4455 6.828120215219838 18.67952034762907
+ POINT 4456 5.819524031753277 19.55944573980127
+ POINT 4457 6.074507418781808 19.99999963024048
+ POINT 4458 5.819523813334327 20.44055367013701
+ POINT 4459 6.323600756021351 20.44055356069054
+ POINT 4460 5.314082130452446 19.55879830294076
+ POINT 4461 5.069786234540341 19.99999980475538
+ POINT 4462 5.314081996435311 20.44120126848308
+ POINT 4463 5.563175333674854 20.88175519893314
+ POINT 4464 8.866487420657002 23.96406405540996
+ POINT 4465 8.355738994225081 23.96328213075802
+ POINT 4466 8.100427383778017 23.52188039085872
+ POINT 4467 9.122215393276559 23.52275436205428
+ POINT 4468 8.86594121586602 23.08182352338446
+ POINT 4469 11.18084976696353 21.76061566877308
+ POINT 4470 11.43896704356612 22.20068784304909
+ POINT 4471 11.95797441386322 22.1997190736917
+ POINT 4472 11.9588087557341 21.32105244930146
+ POINT 4473 12.22007742542399 21.75981922903992
+ POINT 4474 10.148570164294 21.76080494256901
+ POINT 4475 9.890881511362227 22.2011322436048
+ POINT 4476 9.377719656900005 22.20101559932991
+ POINT 4477 9.377648474444069 21.3206226826241
+ POINT 4478 9.121929706236603 21.76064672176964
+ POINT 4479 8.865674277639464 22.2008899295029
+ POINT 4480 7.336250313716918 21.32043468385277
+ POINT 4481 7.591125568206087 20.88045701300713
+ POINT 4482 7.337223885828448 20.44026648925234
+ POINT 4483 7.845909546820542 20.44018971579031
+ POINT 4484 6.830512134341413 20.44026665363158
+ POINT 4485 6.575528528893932 20.88082069352811
+ POINT 4486 4.547660785761197 22.64117575790155
+ POINT 4487 4.799992952164152 23.08041215768531
+ POINT 4488 5.306180292478354 23.08034306292107
+ POINT 4489 8.865707267923504 19.55976133923551
+ POINT 4490 8.354952340097839 19.55980825914972
+ POINT 4491 8.865707358596341 20.44023587696896
+ POINT 4492 8.354952041499935 20.44018950991573
+ POINT 4493 9.121386178165395 19.99999862805303
+ POINT 4494 9.377000682960047 20.44023572473563
+ POINT 4495 9.37700059228721 19.55976118700218
+ POINT 4496 8.101050359122295 19.99999898616094
+ POINT 4497 -18.88575813755943 15.0697268260569
+ POINT 4498 -19.39362771734272 15.11254628586869
+ POINT 4499 -18.68665358888661 14.6490351897125
+ POINT 4500 -15.77563967202531 13.84150710457371
+ POINT 4501 -16.01906260749091 13.38331127087525
+ POINT 4502 -16.51175963280237 13.37603091203635
+ POINT 4503 -16.76209633740071 13.83891198637251
+ POINT 4504 -16.61643100772146 14.28454398233681
+ POINT 4505 -3.285878374189513 17.79579280002091
+ POINT 4506 -3.537066906965997 17.35732465078735
+ POINT 4507 -2.781165062341254 17.79402703590121
+ POINT 4508 -2.272346057716946 15.15939316355719
+ POINT 4509 -2.777506873473401 15.15947546214778
+ POINT 4510 -2.019831127927625 14.71933670858128
+ POINT 4511 -3.030366546424797 14.71907091737807
+ POINT 4512 -4.29435723120281 15.1589385317425
+ POINT 4513 -4.800381300429374 15.1587993272791
+ POINT 4514 -4.041727322367009 14.71851001309586
+ POINT 4515 -5.05425164147241 14.71756591615323
+ POINT 4516 -4.295101030996014 14.27689248118367
+ POINT 4517 -3.789177724238159 14.27725404962039
+ POINT 4518 -8.103070844109666 14.7120749267257
+ POINT 4519 -8.357041227963842 15.15335409824602
+ POINT 4520 -8.867790261965396 15.15257226998905
+ POINT 4521 -8.359008421177249 14.26876895168724
+ POINT 4522 -9.124387984536476 14.70980715521631
+ POINT 4523 -8.869538972748195 14.26707997665955
+ POINT 4524 -9.380906847798823 14.26600347395883
+ POINT 4525 -15.04253548417184 10.68172301284076
+ POINT 4526 -14.51635355078331 10.68688712093244
+ POINT 4527 -14.26072851253494 11.13086143448761
+ POINT 4528 -15.29884481679709 11.11647634394399
+ POINT 4529 -15.0294160788359 11.57085075398853
+ POINT 4530 -14.51705395682312 11.57633155901834
+ POINT 4531 8.673610243951781 6.652056971493288
+ POINT 4532 8.414839055579259 7.108358885772509
+ POINT 4533 7.90457462665794 7.113563743870362
+ POINT 4534 8.152298738482797 7.566155996789455
+ POINT 4535 7.651410299100585 6.670464801650749
+ POINT 4536 7.388869982004122 7.128261912667696
+ POINT 4537 7.91137180832887 6.215871382139966
+ POINT 4538 7.395667163675052 6.2305695509373
+ POINT 4539 8.427660313869119 6.189437265397586
+ POINT 4540 8.401580829217719 8.014850918935689
+ POINT 4541 7.8913164002964 8.020055777033541
+ POINT 4542 8.65225636857012 8.462541415161475
+ POINT 4543 7.629644152233771 8.473224754720867
+ POINT 4544 7.380362061498849 8.024529832574634
+ POINT 4545 8.391528292002256 8.915703717744677
+ POINT 4546 7.880480191434996 8.920252392579611
+ POINT 4547 8.948131191765635 5.244986877960783
+ POINT 4548 8.686196691051427 4.812171250737954
+ POINT 4549 8.926774423659207 4.355755496876252
+ POINT 4550 9.445443876621251 5.251309598627719
+ POINT 4551 9.6910474270449 4.80595499243688
+ POINT 4552 9.473520550241012 4.27784503441803
+ POINT 4553 6.871912274813603 4.456666857990875
+ POINT 4554 6.343908009479829 4.48177946767831
+ POINT 4555 6.621960527653464 4.900979418979421
+ POINT 4556 7.126969749148993 3.982554695510378
+ POINT 4557 4.533432449664246 3.111476287422326
+ POINT 4558 4.788961989599059 2.692095990745143
+ POINT 4559 4.807632160732531 3.545827374450171
+ POINT 4560 6.855123306554548 1.732841382331951
+ POINT 4561 6.414612844901361 1.574488513075082
+ POINT 4562 6.765655367225731 1.179109809653417
+ POINT 4563 6.972434580994955 2.219793303106146
+ POINT 4564 -7.602701248857268 12.05219331399483
+ POINT 4565 -7.345761168813994 12.49779263543017
+ POINT 4566 -7.350228475031765 11.60757343071705
+ POINT 4567 -5.308173014700433 14.27556533336659
+ POINT 4568 -5.562737733353188 13.83313163004587
+ POINT 4569 -4.801572002352885 14.27614786187251
+ POINT 4570 -4.549022404224035 13.83489189839703
+ POINT 4571 -1.261812988480139 9.83343522240709
+ POINT 4572 -1.009092171925209 9.384112018230109
+ POINT 4573 -1.260520010065219 8.933024373220549
+ POINT 4574 -1.765500117844419 8.93523006966014
+ POINT 4575 -5.068073644725306 9.38669057972551
+ POINT 4576 -4.811613206609751 9.83429836303813
+ POINT 4577 -5.321476005364882 9.832741044573023
+ POINT 4578 -8.171918437075256 5.749541788172571
+ POINT 4579 -8.426272907275038 5.290292001170738
+ POINT 4580 -8.948133223185337 5.244987163541136
+ POINT 4581 -9.185519494225359 5.729430999154442
+ POINT 4582 -8.934156282145356 6.185727540104251
+ POINT 4583 -8.427661154600298 6.18943703498995
+ POINT 4584 -8.673610641597531 6.652056916813081
+ POINT 4585 -6.360808891330913 5.359381494985303
+ POINT 4586 -6.8888134629241 5.334268229392724
+ POINT 4587 -7.141644921037324 5.784322612398201
+ POINT 4588 -6.881683139083452 6.238916134269846
+ POINT 4589 -6.366502420684297 6.244439533544943
+ POINT 4590 -8.913238659918125 8.008641685997079
+ POINT 4591 -9.175111821561714 7.552782489790519
+ POINT 4592 -8.152298933237061 7.566155955215757
+ POINT 4593 -8.414839366266023 7.108358763986579
+ POINT 4594 -8.401580872630081 8.014850914686292
+ POINT 4595 -8.652256314068634 8.462541484408993
+ POINT 4596 -7.891316587387569 8.020055753627672
+ POINT 4597 -8.921334493811083 7.104649269100879
+ POINT 4598 0.5050496066864969 12.06607114806098
+ POINT 4599 0.2524838592694156 12.509659882908
+ POINT 4600 -0.5050495406976978 12.06607116411123
+ POINT 4601 -0.2524953099325488 11.62092225687016
+ POINT 4602 -0.7575448846733936 11.62089710913941
+ POINT 4603 0.2524953892493668 11.62092224476328
+ POINT 4604 -3.283324914400852 8.042101763472806
+ POINT 4605 -3.027617553368896 7.589434642638204
+ POINT 4606 -3.78887016301438 7.145934490043004
+ POINT 4607 -4.047040141601858 7.596235740379548
+ POINT 4608 -4.299970711505202 7.148508674241112
+ POINT 4609 -3.792218491321482 8.043753636400142
+ POINT 4610 -4.303319039812305 8.04632782059825
+ POINT 4611 -3.539603812611298 8.492193843691508
+ POINT 4612 -3.278350562976776 7.139722056960755
+ POINT 4613 -3.53128113288012 6.69199499082232
+ POINT 4614 -3.259043844909186 5.332766362072315
+ POINT 4615 -3.011954694569225 5.779632481578462
+ POINT 4616 -3.271741805307075 6.237333529285412
+ POINT 4617 -3.782261405344679 6.243545962367661
+ POINT 4618 -4.035803751858573 5.797005308049524
+ POINT 4619 -4.295343079431618 6.251666769586432
+ POINT 4620 -3.775380952945744 5.341766264901346
+ POINT 4621 -3.511702720083296 4.885648126142907
+ POINT 4622 -4.543058686584349 4.904219080036945
+ POINT 4623 -4.288462627032683 5.349887072120117
+ POINT 4624 -4.803481485497177 5.359458123185124
+ POINT 4625 -3.243367634643463 4.435820574068364
+ POINT 4626 -2.982689503297702 3.965002351197774
+ POINT 4627 -3.229662503185413 3.52330050328693
+ POINT 4628 -3.742623792584569 3.563062575166481
+ POINT 4629 -3.759704742680022 4.444820476897395
+ POINT 4630 -5.320794455696689 3.555246287829873
+ POINT 4631 -5.570636693918219 3.095966055383329
+ POINT 4632 -5.345229957488629 2.610279773748913
+ POINT 4633 -4.788963916338954 2.692099741504953
+ POINT 4634 -4.533433409733085 3.11147984258838
+ POINT 4635 -5.320195886747793 5.3641005719377
+ POINT 4636 -5.065599827196129 5.809768564020871
+ POINT 4637 -5.838136124018156 5.370252348005836
+ POINT 4638 -6.104986995759502 5.803540159752914
+ POINT 4639 -5.843829653371539 6.255310386565476
+ POINT 4640 -5.845709132172464 7.14566131989957
+ POINT 4641 -6.099796022401105 7.591597931860797
+ POINT 4642 2.468655552028582 36.99209317569083
+ POINT 4643 2.720981659484743 36.50669016910551
+ POINT 4644 3.221422882693706 37.37975122048137
+ POINT 4645 3.480916159023034 36.90863094192812
+ POINT 4646 2.722869868303182 37.43948682119965
+ POINT 4647 3.229662324541032 36.47670038506341
+ POINT 4648 -2.273750322176463 28.37918393450756
+ POINT 4649 -2.779582658660454 28.37954777701897
+ POINT 4650 -2.526574115933269 27.93457393572186
+ POINT 4651 -3.033258069834652 28.82455082498592
+ POINT 4652 -2.77999854888538 29.27036534916167
+ POINT 4653 -2.273653961576329 29.27067718493149
+ POINT 4654 -4.295759860195631 22.20207831721287
+ POINT 4655 -3.790935919620525 22.20328484529564
+ POINT 4656 -4.547660762109723 22.64117574871403
+ POINT 4657 -1.770560839361158 22.20855341824481
+ POINT 4658 -2.276071337937328 22.20687905820053
+ POINT 4659 -1.516430995925717 22.64600353864246
+ POINT 4660 -0.7574091942873926 26.60463620877062
+ POINT 4661 -0.5049253650460661 26.16245155786428
+ POINT 4662 -1.26248456968623 26.60474309312709
+ POINT 4663 -2.020500884784648 27.04726516205367
+ POINT 4664 -2.273312578923515 27.49087502031526
+ POINT 4665 -2.779144915407506 27.49123886282667
+ POINT 4666 -3.031723705736667 27.04803775852522
+ POINT 4667 9.674059914272764 31.54309915647984
+ POINT 4668 9.425788859593911 31.99952798475481
+ POINT 4669 8.903187169034737 31.09050669476753
+ POINT 4670 9.413784633261546 31.09278170280593
+ POINT 4671 7.395667531479379 33.76943158160459
+ POINT 4672 6.881682436448375 33.76108525769369
+ POINT 4673 6.620525505193433 33.30931478828556
+ POINT 4674 6.099796175241582 32.40840299268783
+ POINT 4675 6.359431915093664 32.8578547224632
+ POINT 4676 6.874612619500812 32.86337793702549
+ POINT 4677 7.127777065364786 32.42027890997031
+ POINT 4678 7.388870655464554 32.87173897579268
+ POINT 4679 6.353715538404828 31.96208648750794
+ POINT 4680 8.934156162843058 33.81427295860885
+ POINT 4681 9.185518916730516 34.2705695880624
+ POINT 4682 9.431469087173463 33.80794971603986
+ POINT 4683 8.171917422879144 34.25045899549634
+ POINT 4684 8.426271187026909 34.70970875020592
+ POINT 4685 8.948131691149152 34.75501338402842
+ POINT 4686 7.651410866152008 33.32953611527348
+ POINT 4687 7.904575312015982 32.8864370882183
+ POINT 4688 7.911372188030805 33.78412969403021
+ POINT 4689 8.427660757551774 33.81056352916524
+ POINT 4690 8.673610927994719 33.34794365714271
+ POINT 4691 9.694220357455089 33.36180316353837
+ POINT 4692 9.945583111342547 33.81809979299192
+ POINT 4693 10.71091845921928 33.33687874930079
+ POINT 4694 10.46487676988987 33.83310719520395
+ POINT 4695 9.947998294341922 32.91367014601859
+ POINT 4696 9.43388427017284 32.90352006906653
+ POINT 4697 10.45710382882717 32.90333481796283
+ POINT 4698 12.55579669464555 33.7299880503965
+ POINT 4699 13.12801199851167 33.79479026035089
+ POINT 4700 12.47144579022556 34.51148132613582
+ POINT 4701 12.93462514265352 34.64180178367647
+ POINT 4702 12.24027789272276 34.13587082058012
+ POINT 4703 13.29868985479681 34.3116079231603
+ POINT 4704 13.43620128425083 34.8144691256151
+ POINT 4705 12.50944856105111 31.15885690226704
+ POINT 4706 11.99907725941845 31.14306284646113
+ POINT 4707 12.78538331767002 31.63539862612097
+ POINT 4708 12.5690393147074 32.06645875658151
+ POINT 4709 12.02256561458787 32.0281633069468
+ POINT 4710 5.065600016341717 34.19023420969232
+ POINT 4711 4.803482242815901 34.64054582058449
+ POINT 4712 4.035804672356232 34.20299720629515
+ POINT 4713 4.295343779290965 33.74833560269973
+ POINT 4714 4.809231465292767 33.74478222026569
+ POINT 4715 4.288463743829695 34.65011614756668
+ POINT 4716 9.637662575318704 13.82176439745997
+ POINT 4717 9.895010842448107 13.37629815618254
+ POINT 4718 9.892511591869622 14.26449157539778
+ POINT 4719 10.4067069355562 13.37400513563111
+ POINT 4720 13.52905067048734 17.80348860989551
+ POINT 4721 13.79175789835044 17.36796951733285
+ POINT 4722 13.00252411868155 17.80282680195637
+ POINT 4723 13.26812525861197 18.24140032089161
+ POINT 4724 12.74043410877834 17.36292953030527
+ POINT 4725 12.47950869690297 17.80084124130137
+ POINT 4726 13.51009777439233 19.55820318321305
+ POINT 4727 13.79929158665083 19.11344521668358
+ POINT 4728 13.53129906332733 18.67922305227264
+ POINT 4729 13.00477251152154 18.6785612443335
+ POINT 4730 12.99576637516585 19.55819856070358
+ POINT 4731 12.74349662902931 19.11733796967289
+ POINT 4732 12.47131668795828 19.55915255466194
+ POINT 4733 12.48032282431396 18.67951523829186
+ POINT 4734 11.43914986613786 21.32072491301456
+ POINT 4735 11.69942433103575 20.88138351831122
+ POINT 4736 10.92146534226518 21.32094673778284
+ POINT 4737 12.71562432355781 13.82239950971875
+ POINT 4738 12.9710204628949 13.37575475080886
+ POINT 4739 12.45674797382721 13.37407141180644
+ POINT 4740 12.97772491657961 14.26819291122295
+ POINT 4741 12.46345242751193 14.26650957222053
+ POINT 4742 13.49738297842677 14.27178058327745
+ POINT 4743 13.74303006923158 13.8271429168039
+ POINT 4744 13.24521108238089 14.71589064577923
+ POINT 4745 13.22448245842652 12.92743092592447
+ POINT 4746 13.48181951185093 12.47903488184075
+ POINT 4747 13.99578142269353 12.47669166234643
+ POINT 4748 14.24624589811313 12.92686861431367
+ POINT 4749 13.48335880815712 13.37575902383678
+ POINT 4750 13.9964920647632 13.37881909191951
+ POINT 4751 -6.320150687976366 23.96091876360178
+ POINT 4752 -5.812969625836519 23.96070458668278
+ POINT 4753 -6.574688825297787 24.40195167480463
+ POINT 4754 -6.828063652194295 23.9615488793044
+ POINT 4755 -5.813813941857884 24.84216924255897
+ POINT 4756 -6.321311652199329 24.84298261059543
+ POINT 4757 -7.081981008898271 23.52094424303451
+ POINT 4758 -7.336519146219691 23.96197715423737
+ POINT 4759 -7.845748104704221 23.96277425307575
+ POINT 4760 -7.335856115277702 23.08082963166928
+ POINT 4761 -7.844991443031732 23.08106288006605
+ POINT 4762 -8.100427311741345 23.52188036270352
+ POINT 4763 -10.40540157467472 14.26408505747693
+ POINT 4764 -10.66170284717234 13.81985074339596
+ POINT 4765 -9.637662430070954 13.82176447342599
+ POINT 4766 -9.895010682577141 13.37629824542447
+ POINT 4767 -9.892511441859234 14.26449165198275
+ POINT 4768 -10.40670675495256 13.37400525082491
+ POINT 4769 -12.47199466734123 16.03898502117763
+ POINT 4770 -12.21411479700939 16.4800762682083
+ POINT 4771 -12.99157903512498 16.04165171901209
+ POINT 4772 -14.28781148834783 14.72466430653915
+ POINT 4773 -14.01051597995725 14.27484092420143
+ POINT 4774 -13.50732425510632 15.16042328920559
+ POINT 4775 -13.24521080951691 14.71589083268884
+ POINT 4776 -13.49738271635704 14.27178080931081
+ POINT 4777 -16.93896929093587 15.5773409849898
+ POINT 4778 -16.68097494321506 15.16527107651389
+ POINT 4779 -15.67915306855816 18.67142202530682
+ POINT 4780 -15.40255559056302 18.2433353971784
+ POINT 4781 -15.1377260715964 18.67054347403299
+ POINT 4782 -15.66731487745816 17.81120284025883
+ POINT 4783 -16.23490724711116 18.67143816234672
+ POINT 4784 -11.95483924810893 19.55914747757233
+ POINT 4785 -11.69939991789839 19.11861637347679
+ POINT 4786 -11.95878820411627 18.67894457614464
+ POINT 4787 -12.47131653888641 19.55915256894556
+ POINT 4788 -12.48032266377783 18.67951528684885
+ POINT 4789 -12.22006407356756 18.2401678703231
+ POINT 4790 -12.74349647052235 19.11733800723685
+ POINT 4791 -13.00477233997363 18.67856130141531
+ POINT 4792 -14.87248011401993 19.104568316138
+ POINT 4793 -14.5444672240719 19.55524901206978
+ POINT 4794 -14.59588263602478 18.67648168800958
+ POINT 4795 -14.04144287725837 19.55526445993747
+ POINT 4796 -13.79929141258323 19.11344527595896
+ POINT 4797 -13.53129887895662 18.67922312921883
+ POINT 4798 -13.2681250722121 18.24140040883083
+ POINT 4799 -14.0626441448217 18.67628438337447
+ POINT 4800 -14.05735881756995 17.80654318110146
+ POINT 4801 -14.32789010239817 18.24225954126945
+ POINT 4802 -18.2968927833904 24.94722405978977
+ POINT 4803 -18.68670738346595 25.35086902771102
+ POINT 4804 -18.11866277312836 25.81991225332942
+ POINT 4805 -18.56007566971161 25.77221354163332
+ POINT 4806 -19.15366621552857 25.75648074725418
+ POINT 4807 -17.67264085100642 25.76729945984075
+ POINT 4808 -17.52697763588802 25.32168259068048
+ POINT 4809 -17.78498613217555 24.909612186255
+ POINT 4810 -12.47539170563856 23.0785489390462
+ POINT 4811 -12.99840983962808 23.07655221680742
+ POINT 4812 -12.47198557295549 23.9610096938691
+ POINT 4813 -12.99156790660064 23.95834007766085
+ POINT 4814 -12.21410615975761 23.51991655725213
+ POINT 4815 -14.04906603364312 23.06997456115545
+ POINT 4816 -13.52075687599397 23.07307448165996
+ POINT 4817 -14.03636788977065 23.95057690948157
+ POINT 4818 -13.51391494296653 23.95486234251339
+ POINT 4819 -14.30341627472643 23.50650018459617
+ POINT 4820 -14.561721042046 23.9459789118976
+ POINT 4821 -14.57441918591847 23.06537656357148
+ POINT 4822 -13.25571608608519 23.5145759173276
+ POINT 4823 -14.5960683653604 21.32333659147519
+ POINT 4824 -14.32798922175618 21.75754972154517
+ POINT 4825 -14.59066652086865 22.19303664224877
+ POINT 4826 -13.74303175114319 26.17287493709136
+ POINT 4827 -13.48335791473757 26.62425530265345
+ POINT 4828 -12.97771773598447 25.73181930175693
+ POINT 4829 -12.71561880221907 26.17761345449204
+ POINT 4830 -13.49737100762031 25.72824656875608
+ POINT 4831 -12.97101566866241 26.62426067037656
+ POINT 4832 -15.87594000709251 24.3886752863724
+ POINT 4833 -15.61382354497319 23.94120865241457
+ POINT 4834 -15.08739359140011 23.94259057999703
+ POINT 4835 -15.35519938057486 23.50052025942974
+ POINT 4836 -15.07839045447396 24.82672910597416
+ POINT 4837 -14.82034520644433 24.38666730488244
+ POINT 4838 -4.297887780716318 27.4932582820506
+ POINT 4839 -4.044006752788331 27.04935658278367
+ POINT 4840 -5.312210754179706 27.49556464468527
+ POINT 4841 -5.567618563035417 27.94023469907253
+ POINT 4842 -4.552513129335004 27.93750819510436
+ POINT 4843 -4.807024214617755 28.38271368117876
+ POINT 4844 -4.805074821119767 27.49442750899073
+ POINT 4845 -5.057585405561018 27.0513147316315
+ POINT 4846 -6.33587960182028 29.27904137271206
+ POINT 4847 -6.593280542092714 29.72671675993249
+ POINT 4848 -6.845584816882877 29.28169696677443
+ POINT 4849 -9.139626577699488 28.84786563078475
+ POINT 4850 -8.880974911121076 28.39978165870695
+ POINT 4851 -8.886484031839617 29.29285468931666
+ POINT 4852 -8.375837076376664 29.29012509511866
+ POINT 4853 -6.606301488352729 31.5172784426189
+ POINT 4854 -6.86610510089686 31.96710983930201
+ POINT 4855 -7.380363061301429 31.97547095696313
+ POINT 4856 -7.629645044490113 31.52677603524801
+ POINT 4857 -3.734387612605413 37.33998909381205
+ POINT 4858 -3.480917883197236 36.90862995438757
+ POINT 4859 -4.249409370936035 37.28824836325113
+ POINT 4860 -4.533435519467933 36.88852220808495
+ POINT 4861 -4.758488233341749 38.11030236366913
+ POINT 4862 -4.50676918141261 38.58210339451158
+ POINT 4863 -4.783545702215509 38.99367819414739
+ POINT 4864 -5.253316076616899 38.87170298229778
+ POINT 4865 -5.026304722136116 39.35810581481412
+ POINT 4866 -5.31475374097253 38.1921257939889
+ POINT 4867 -5.55603254774995 38.55085252783052
+ POINT 4868 -4.803482580347485 34.64054361135685
+ POINT 4869 -5.320196850564142 34.63590120971449
+ POINT 4870 -4.543060036237803 35.09578274400744
+ POINT 4871 -9.474341817876265 37.14660975144912
+ POINT 4872 -9.406416566704262 36.55611168334616
+ POINT 4873 -9.473526932351346 35.72215174385364
+ POINT 4874 -9.691051891830522 35.19404228105253
+ POINT 4875 -7.395668664845115 33.76943169253389
+ POINT 4876 -7.141645205774269 34.21567874364175
+ POINT 4877 -7.911373176236172 33.78412991120815
+ POINT 4878 -5.970391354147889 38.42267776501082
+ POINT 4879 -5.910343674528779 39.10674848218104
+ POINT 4880 9.899142136969207 27.51510267900654
+ POINT 4881 10.15244814835231 27.06995268221834
+ POINT 4882 9.895007998246125 26.62370476614767
+ POINT 4883 9.383403857216514 26.62219238204935
+ POINT 4884 9.645779171780866 27.95898679566293
+ POINT 4885 9.392678108416897 28.40351120876002
+ POINT 4886 8.880975044494647 28.39978174499532
+ POINT 4887 9.387389390594027 27.51154309762205
+ POINT 4888 14.26073289743033 28.8691395757118
+ POINT 4889 13.99842144929555 28.41952401656783
+ POINT 4890 13.99771942752645 29.30896742654093
+ POINT 4891 13.48445722189115 28.41718289837834
+ POINT 4892 13.22907518867648 28.86709658595593
+ POINT 4893 13.48364027439367 29.31665262720558
+ POINT 4894 2.778186435888486 8.938957890864957
+ POINT 4895 3.285536154833564 8.93983143640984
+ POINT 4896 0.503576558953103 8.480088415641912
+ POINT 4897 0.7545340256392324 8.025313551344778
+ POINT 4898 1.257490675288657 8.028793692477928
+ POINT 4899 1.00487166372454 7.572984560185061
+ POINT 4900 1.767218177292147 9.833864649502274
+ POINT 4901 1.261813121296191 9.833435129749081
+ POINT 4902 2.01977490415053 9.386150013300199
+ POINT 4903 1.254058685362145 7.116431701475741
+ POINT 4904 0.7511020357127205 7.112951560342591
+ POINT 4905 1.503048670056133 6.664067888028908
+ POINT 4906 1.756818298067953 7.124100887871379
+ POINT 4907 3.221422303399006 2.620248389708918
+ POINT 4908 3.480914914435558 3.091369166068999
+ POINT 4909 2.72098085638526 3.493309688384574
+ POINT 4910 3.229661216416159 3.523299759226276
+ POINT 4911 2.982688780121403 3.965001676074344
+ POINT 4912 2.46865487040522 3.007906565470829
+ POINT 4913 2.722869289518796 2.56051282330207
+ POINT 4914 -1.010191681274808 16.47724942694537
+ POINT 4915 -1.263131355488745 16.91548129340297
+ POINT 4916 -2.020306230344167 16.47789566114399
+ POINT 4917 -1.767492742491601 16.03853792813051
+ POINT 4918 -1.262539725172341 16.03840777843346
+ POINT 4919 12.1997613590734 12.92710547342492
+ POINT 4920 11.94479095056584 12.47843891822832
+ POINT 4921 11.43422157083276 12.47855544044724
+ POINT 4922 11.17576264345388 12.92727100195365
+ POINT 4923 11.94436521973632 13.37375023233481
+ POINT 4924 7.336251480752613 18.6795640871081
+ POINT 4925 7.844937134949372 18.67964044904051
+ POINT 4926 8.099974578704396 18.23956992571268
+ POINT 4927 7.84480578458009 17.79945448070259
+ POINT 4928 8.354717919779731 17.79936124634732
+ POINT 4929 7.335669970649025 17.79968796401571
+ POINT 4930 7.081931177971981 18.23961942058892
+ POINT 4931 8.354982325926542 23.08157075161737
+ POINT 4932 7.844991506275383 23.08106290277033
+ POINT 4933 7.844803584321875 22.20054442238268
+ POINT 4934 8.354715387699985 22.20063715773581
+ POINT 4935 8.610505338363385 22.64100603529607
+ POINT 4936 7.590411112199734 22.64052001245645
+ POINT 4937 7.335856170051208 23.08082965169779
+ POINT 4938 7.335668248097701 22.20031117131014
+ POINT 4939 9.890818040191585 21.32074068357608
+ POINT 4940 10.40541311898843 21.32077323454844
+ POINT 4941 10.66371321816277 20.88088247878991
+ POINT 4942 10.40367267864471 20.44035402693132
+ POINT 4943 10.91972490192146 20.44052753016572
+ POINT 4944 9.890170248707562 20.4403537256876
+ POINT 4945 10.14618193246625 19.99999877706341
+ POINT 4946 9.634491429138507 20.88059097460354
+ POINT 4947 6.827400667807767 23.08040137415767
+ POINT 4948 7.081981061883418 23.52094426447156
+ POINT 4949 6.066344491613611 23.52030180831326
+ POINT 4950 6.320150731026381 23.96091878388248
+ POINT 4951 6.828063703070947 23.96154890185181
+ POINT 4952 4.803564434818736 21.32240321307486
+ POINT 4953 4.299173358639647 21.32364953328408
+ POINT 4954 4.044571409948016 21.76361015630762
+ POINT 4955 4.295759881507283 22.20207832426327
+ POINT 4956 4.801296257115548 22.20150106250879
+ POINT 4957 5.054931180975862 21.76171558239177
+ POINT 4958 5.306832085229775 22.20081301603004
+ POINT 4959 5.309100262932963 21.32171516659611
+ POINT 4960 5.81454207983198 21.32106756825005
+ POINT 4961 -18.56002184971921 14.22769492657082
+ POINT 4962 -18.58096939592903 13.77580049591028
+ POINT 4963 -19.15364988885438 14.24346495111939
+ POINT 4964 -18.85904440570564 13.34143830515129
+ POINT 4965 -15.33998266280768 14.7338292242525
+ POINT 4966 -15.57188599971363 14.288170055576
+ POINT 4967 -16.07296487229796 14.29114541974748
+ POINT 4968 -16.41267733540978 14.73120693333909
+ POINT 4969 -16.13750880779156 15.17187251392457
+ POINT 4970 -3.788945546787723 16.91866703867328
+ POINT 4971 -4.041277777523542 16.47943067745028
+ POINT 4972 -3.283887755210931 16.91774473014353
+ POINT 4973 -3.03057820446562 16.47865932897363
+ POINT 4974 -2.778699564643894 16.9173169410877
+ POINT 4975 -3.788415114156707 16.03940786842766
+ POINT 4976 -3.282925532369509 16.03938389455073
+ POINT 4977 -2.526915470103403 17.35549624645666
+ POINT 4978 -2.273605919358092 16.91641084528677
+ POINT 4979 -1.516431044502669 17.35399647754574
+ POINT 4980 -1.770560893295203 17.79144659044107
+ POINT 4981 -2.276071417055452 17.79312094010028
+ POINT 4982 -1.768522135803676 16.91607496651296
+ POINT 4983 6.366501243846965 6.244439141771339
+ POINT 4984 6.881681964346839 6.238915939179471
+ POINT 4985 6.620524933946894 6.690686173039952
+ POINT 4986 7.141643473575124 5.784322519668687
+ POINT 4987 6.888811533617075 5.334267858601422
+ POINT 4988 6.360807268283301 5.359380468288856
+ POINT 4989 5.328304956021583 8.043704908345143
+ POINT 4990 5.839992119376236 8.041429038737206
+ POINT 4991 5.072106627115973 7.596960962835897
+ POINT 4992 4.814338839724297 8.045553308551284
+ POINT 4993 6.874612011818435 7.136622928830665
+ POINT 4994 7.12777633937579 7.579721871050277
+ POINT 4995 6.359431291318561 7.142146131422533
+ POINT 4996 6.866104091313161 8.032890848737603
+ POINT 4997 6.099795556301682 7.591597724921501
+ POINT 4998 5.84570847843014 7.145660969130788
+ POINT 4999 6.353714932264657 8.037914201028951
+ POINT 5000 6.081229359011346 4.028063957887165
+ POINT 5001 5.831277611851206 4.472376518875711
+ POINT 5002 5.818440427341621 3.559379919758002
+ POINT 5003 6.331070824970244 3.568782868560602
+ POINT 5004 5.320793662260057 3.555241511663863
+ POINT 5005 5.570635128218955 3.0959604223373
+ POINT 5006 5.055437459855198 4.009246871870873
+ POINT 5007 6.821727892775355 3.591856572778605
+ POINT 5008 6.558938961105631 3.123172534649443
+ POINT 5009 6.777765117627584 2.634655229109696
+ POINT 5010 6.287108049822472 2.611581524891692
+ POINT 5011 7.244265492278114 2.731384312863897
+ POINT 5012 7.354837885284381 3.536944361599219
+ POINT 5013 7.598035916136748 3.04043980858182
+ POINT 5014 4.299970635453084 7.14850787645576
+ POINT 5015 3.788870234546398 7.145933669669137
+ POINT 5016 4.047040109912 7.596235156255416
+ POINT 5017 5.345228489927225 2.610272286506451
+ POINT 5018 5.842875255008789 2.614410694600591
+ POINT 5019 6.061701411530742 2.125893389060844
+ POINT 5020 5.314751048479676 1.807873046646745
+ POINT 5021 5.061202116388895 2.210546263008434
+ POINT 5022 5.970380050087678 1.57731768278398
+ POINT 5023 5.556020582598091 1.44914323051177
+ POINT 5024 5.91032202053712 0.893244814956379
+ POINT 5025 -6.836865785799978 12.49945380288166
+ POINT 5026 -7.089553213907015 12.94295844989903
+ POINT 5027 -6.833499178180947 13.3871348946776
+ POINT 5028 -6.325319961009233 13.38836779917821
+ POINT 5029 -1.767218052469922 9.83386477079263
+ POINT 5030 -1.515143883278228 10.28237400844931
+ POINT 5031 -4.303205496386696 9.835452565483031
+ POINT 5032 -4.556607857026273 10.28150303033054
+ POINT 5033 -3.794281023813899 9.835889357263516
+ POINT 5034 -3.286799988363986 9.836274382571714
+ POINT 5035 -3.540719111353306 10.28304225808364
+ POINT 5036 -4.049286373397377 9.3886846899711
+ POINT 5037 -3.285536068257624 8.939831726257879
+ POINT 5038 -3.794429645178254 8.941483599185215
+ POINT 5039 -4.303354117751051 8.94104680740473
+ POINT 5040 -8.903186047936739 8.909494536004507
+ POINT 5041 -9.153055229364252 9.360382120771384
+ POINT 5042 -8.391528260648695 8.915703764693721
+ POINT 5043 -8.131409949387299 9.367205473050699
+ POINT 5044 -7.880480215519194 8.920252421455185
+ POINT 5045 -8.893751097108121 9.810542690182665
+ POINT 5046 -8.383104174517864 9.813271999453356
+ POINT 5047 -7.872056129388366 9.81782065621482
+ POINT 5048 -0.2524838087497524 13.39540810971175
+ POINT 5049 2.44434774088198e-08 12.95322345942679
+ POINT 5050 -0.2524838007827911 12.50965988836077
+ POINT 5051 -0.757533375523636 12.50963474063003
+ POINT 5052 -1.010043008245645 12.95311658754424
+ POINT 5053 -1.262608748160552 12.5095278632947
+ POINT 5054 -5.055438029190892 4.009250597348579
+ POINT 5055 -4.800176791787235 4.456813104903008
+ POINT 5056 -4.285157933322742 4.447242053838
+ POINT 5057 -4.807632465031426 3.545831769185357
+ POINT 5058 -4.268076983227289 3.565484152107086
+ POINT 5059 -4.016822847882909 3.997414501763457
+ POINT 5060 -4.555688689148163 6.701760771737632
+ POINT 5061 -4.809231035662058 6.255220117419496
+ POINT 5062 -5.325945436912674 6.259862566172071
+ POINT 5063 -4.813858667735643 7.152062022074176
+ POINT 5064 -5.327824915713599 7.150213499506166
+ POINT 5065 -5.072106938070638 7.596961402009646
+ POINT 5066 -5.587460861837469 6.7007619399641
+ POINT 5067 -4.814374102587054 8.940272696222461
+ POINT 5068 -4.559517374367931 8.493071605436576
+ POINT 5069 -5.324236901342186 8.938715377757356
+ POINT 5070 -4.814339024648308 8.045553709415984
+ POINT 5071 -5.328305272626263 8.043705186847973
+ POINT 5072 -2.021045274972744 28.82414544323013
+ POINT 5073 -1.76803673224556 28.37917160193302
+ POINT 5074 -1.262715411558947 28.37904359188522
+ POINT 5075 -1.010161179515999 28.82419250185701
+ POINT 5076 -1.767940371645426 29.27066485235695
+ POINT 5077 -1.262535281707757 29.27109438297196
+ POINT 5078 -3.537066675701101 22.64267533516108
+ POINT 5079 -3.283887565701342 23.08225529095755
+ POINT 5080 -3.78894527952161 23.0813329672272
+ POINT 5081 -2.526915358233893 22.64450376122651
+ POINT 5082 -2.781164941584266 22.20597295586544
+ POINT 5083 -3.285878205800256 22.20420716902598
+ POINT 5084 -2.777737218622537 23.96104394944767
+ POINT 5085 -3.030578038325537 23.52134070986063
+ POINT 5086 -3.282925349818851 23.96061616261071
+ POINT 5087 -2.778699434505028 23.08268307779451
+ POINT 5088 -2.273605830858089 23.08358918012959
+ POINT 5089 -4.294456553710889 23.08098940888245
+ POINT 5090 -4.04127744371113 23.52056936467892
+ POINT 5091 -4.799992926299243 23.08041214616574
+ POINT 5092 -5.052976054246795 23.52015671029886
+ POINT 5093 -2.777506769235351 24.84052461662275
+ POINT 5094 -3.030366432223659 25.28092918756785
+ POINT 5095 -3.282944193104159 24.84072397314284
+ POINT 5096 1.330755233786007e-08 25.28052643955282
+ POINT 5097 -0.2524349013237393 25.72146687178944
+ POINT 5098 -0.7573602844785909 25.72151112349207
+ POINT 5099 -0.2524349052544075 24.84066650044989
+ POINT 5100 -1.514941477347312 26.16264507841994
+ POINT 5101 -1.767575298832624 26.60489236198012
+ POINT 5102 -2.272957792445729 26.60516714734652
+ POINT 5103 8.652257441255252 31.53745954895175
+ POINT 5104 8.39152909816184 31.0842973257564
+ POINT 5105 7.880480908934858 31.07974849039663
+ POINT 5106 8.414839869207476 32.89164191324666
+ POINT 5107 8.152299658520024 32.43384477376586
+ POINT 5108 8.913239863919834 31.99135925837855
+ POINT 5109 9.175113211385597 32.44721832517048
+ POINT 5110 8.921335274498762 32.89535134269027
+ POINT 5111 8.401581793046937 31.98514988936742
+ POINT 5112 7.891317235855443 31.97994506433906
+ POINT 5113 11.74873159823277 31.58187307730738
+ POINT 5114 11.47479887261305 31.1209339277706
+ POINT 5115 11.49828722778247 32.00603438825626
+ POINT 5116 10.96516324372876 31.99723027702603
+ POINT 5117 10.70432876392238 31.55113677680682
+ POINT 5118 10.95876372439194 31.10769117123329
+ POINT 5119 13.5073245348637 15.16042310084938
+ POINT 5120 13.7722487569601 15.60568703807935
+ POINT 5121 12.98766647301654 15.15683542879488
+ POINT 5122 11.95878835004167 18.67894453890096
+ POINT 5123 11.43914146078369 18.67926892442837
+ POINT 5124 11.69940005256377 19.11861634915865
+ POINT 5125 11.95797422263067 17.80027054191047
+ POINT 5126 12.22006423253389 18.24016781356158
+ POINT 5127 11.95483938702825 19.55914746318869
+ POINT 5128 11.43519249777028 19.55947184871609
+ POINT 5129 11.17515809731908 20.00000102052662
+ POINT 5130 10.9197187628546 19.55946990649659
+ POINT 5131 11.43519863683714 20.44052947238522
+ POINT 5132 11.95485752643337 20.44085700867212
+ POINT 5133 12.20710913316478 20.00000805421938
+ POINT 5134 8.610508600834709 17.35899258697246
+ POINT 5135 8.865677394959015 17.79910803198256
+ POINT 5136 10.66370546167478 19.11911380302585
+ POINT 5137 10.40367106122358 19.55964297483639
+ POINT 5138 9.890168631286432 19.55964267359267
+ POINT 5139 9.634489721044543 19.11940538477516
+ POINT 5140 -4.8003808551864 24.84120085001912
+ POINT 5141 -5.306981717815686 24.84178343725863
+ POINT 5142 -5.054251160006624 25.28243433877643
+ POINT 5143 -5.55994363703766 24.40093575380166
+ POINT 5144 -5.306137401794322 23.96031878138243
+ POINT 5145 -4.799950065447936 23.96038787741774
+ POINT 5146 -11.95797406324265 17.80027060346049
+ POINT 5147 -12.47950852290421 17.80084131416471
+ POINT 5148 -12.4753984618416 16.92143972111907
+ POINT 5149 -11.95613484774709 16.91958059439132
+ POINT 5150 -11.69841188473828 17.35997812379403
+ POINT 5151 -13.25572876182561 16.4853991857355
+ POINT 5152 -13.51392938584669 16.04511550981153
+ POINT 5153 -14.04907256824607 16.92994355105175
+ POINT 5154 -14.30347489893017 16.49353671661515
+ POINT 5155 -17.42133850836408 16.46621230299164
+ POINT 5156 -17.19812027591119 16.01499464947636
+ POINT 5157 -16.66495740057217 16.04359032158593
+ POINT 5158 -16.48596411693903 18.24387092939627
+ POINT 5159 -16.7768887765254 18.67109514329076
+ POINT 5160 -17.3450998387438 18.66931497274819
+ POINT 5161 -17.55961494440304 18.23365541782893
+ POINT 5162 -15.13808693917218 21.32895091825263
+ POINT 5163 -14.87289120763043 20.89506516536105
+ POINT 5164 -15.08660377556885 20.45033549308172
+ POINT 5165 -15.55540002119723 20.44995148230189
+ POINT 5166 -15.67928522368949 21.32845399962185
+ POINT 5167 -15.40246238141945 21.75672542573599
+ POINT 5168 -15.97041154478462 20.90170693614084
+ POINT 5169 -15.10960308030174 23.06196306963319
+ POINT 5170 -14.85525283921842 22.62543744619248
+ POINT 5171 -15.12585041525192 22.18962314831048
+ POINT 5172 -15.63603303387482 23.06058114205074
+ POINT 5173 -15.66704869976923 22.1891262296797
+ POINT 5174 -15.93226468292499 22.62311470327069
+ POINT 5175 -15.60763493081995 24.82273747748248
+ POINT 5176 -16.13755718211401 24.82813379087301
+ POINT 5177 -16.07300703291225 25.70885103720212
+ POINT 5178 -16.41272779402701 25.26878316611768
+ POINT 5179 -15.34000762949547 25.26618761047478
+ POINT 5180 -15.57192119263 25.71183375688789
+ POINT 5181 -4.801571669348379 25.72385239038944
+ POINT 5182 -5.308172531977664 25.72443497762895
+ POINT 5183 -5.562737248413449 26.16686877343349
+ POINT 5184 -5.310107189970187 26.609152448284
+ POINT 5185 -4.802971256910249 26.60801531258947
+ POINT 5186 -6.341450194137229 30.17268166580354
+ POINT 5187 -6.851155409199826 30.1753372598659
+ POINT 5188 -6.859007872044449 31.0718020351126
+ POINT 5189 -6.346618677552621 31.06677857324325
+ POINT 5190 -5.827084132913434 29.27699951540124
+ POINT 5191 -6.079388407703597 28.83197972224318
+ POINT 5192 -5.823064947564565 28.38586492051645
+ POINT 5193 -6.331860416471411 28.38790677782728
+ POINT 5194 -5.315146554267603 28.38430764348843
+ POINT 5195 -5.062470599146903 28.82834390262268
+ POINT 5196 -4.556608069675993 29.71849731589442
+ POINT 5197 -4.811613479718268 30.165702029606
+ POINT 5198 -5.317804366752521 29.27479472056045
+ POINT 5199 -5.574295560869203 29.72185637102933
+ POINT 5200 -4.809682027102673 29.27320075825078
+ POINT 5201 -8.37012581029477 28.39701947502677
+ POINT 5202 -8.623177182075818 27.95266494359922
+ POINT 5203 -8.365439583299061 27.50635270506456
+ POINT 5204 -7.855387859831518 27.50430329700417
+ POINT 5205 -5.055440020725587 35.99075265980588
+ POINT 5206 -4.807634831823819 36.45417118840255
+ POINT 5207 -5.320796682809582 36.4447576399531
+ POINT 5208 -4.268078857383937 36.43451722793773
+ POINT 5209 -4.800178501361454 35.54318914608771
+ POINT 5210 -5.313340352347217 35.53377559763826
+ POINT 5211 -4.285159704616173 35.55275980617505
+ POINT 5212 -3.759706120423524 35.55518051249211
+ POINT 5213 -3.243368772057292 35.56417992560635
+ POINT 5214 -2.982690542380816 36.03499790770628
+ POINT 5215 -4.016824585547176 36.00258691457239
+ POINT 5216 -3.742625273191289 36.4369379342548
+ POINT 5217 -3.229663611360475 36.47669964102222
+ POINT 5218 -7.354840159678442 36.4630586256994
+ POINT 5219 -7.903282692818332 36.56886240561009
+ POINT 5220 -7.598040633279414 36.95956098877416
+ POINT 5221 -7.126972347222575 36.01744750407371
+ POINT 5222 -6.821730287683658 36.40814608723778
+ POINT 5223 -9.020623545645163 37.38900516343447
+ POINT 5224 -9.424243510782267 37.64039778849911
+ POINT 5225 -8.55965244144466 38.07573926529626
+ POINT 5226 -8.556945323688646 37.47116104503266
+ POINT 5227 -8.146988554944242 37.6652934901699
+ POINT 5228 -8.61016138837582 36.98320888708665
+ POINT 5229 -8.948133722619318 34.7550130983436
+ POINT 5230 -8.426272911082375 34.70970901961947
+ POINT 5231 -8.68619953008956 35.18782904777932
+ POINT 5232 -8.171918681535782 34.25045922190498
+ POINT 5233 -7.909984489006024 34.68327517134071
+ POINT 5234 -8.934156830967638 33.81427302246146
+ POINT 5235 -8.427661598312522 33.81056375948693
+ POINT 5236 -7.402798616599393 34.67408020217368
+ POINT 5237 -7.657152846145986 35.13332999988818
+ POINT 5238 -7.405024596478357 35.59824753662824
+ POINT 5239 -7.912210468884988 35.60744250579526
+ POINT 5240 -6.871914724483572 35.54333499816662
+ POINT 5241 -6.888813562914232 34.66573357218922
+ POINT 5242 -5.838136677064515 34.62974945206364
+ POINT 5243 -6.36080931903647 34.64062034113785
+ POINT 5244 -6.621962729861593 35.09902179966978
+ POINT 5245 -6.34391048060581 35.51822176711525
+ POINT 5246 -5.576018659483458 35.08006032626925
+ POINT 5247 -5.831280178847591 35.52762383998741
+ POINT 5248 -6.081232173469569 35.97193703848426
+ POINT 5249 -6.414624379431359 38.42551013672836
+ POINT 5250 -6.06170323738905 37.87410771123918
+ POINT 5251 -6.85513583736405 38.26715632721284
+ POINT 5252 -6.765677367949003 38.82088227601641
+ POINT 5253 -5.842877995505253 37.38558927504278
+ POINT 5254 -5.57063863640637 36.90403968955684
+ POINT 5255 -5.818443825308139 36.44062116096016
+ POINT 5256 -6.287111020788723 37.38842164676031
+ POINT 5257 -6.558941939522226 36.87683020971369
+ POINT 5258 -6.777767181406023 37.36534864591009
+ POINT 5259 -6.331074127066358 36.431219088088
+ POINT 5260 8.876288812510946 27.50911496320762
+ POINT 5261 9.129651777699287 27.06523084655123
+ POINT 5262 8.872303279133433 26.61976424763491
+ POINT 5263 8.361773132138943 26.61807490241647
+ POINT 5264 8.108499459230185 27.06075329726731
+ POINT 5265 8.370125922301042 28.3970195492633
+ POINT 5266 7.859855674189975 28.39452253470644
+ POINT 5267 8.623177303212083 27.95266501854642
+ POINT 5268 7.602700800558854 27.94780788776358
+ POINT 5269 8.365439690317341 27.5063527674756
+ POINT 5270 7.85538794993132 27.50430335260611
+ POINT 5271 2.013562028795792 7.580836026957666
+ POINT 5272 2.26255201348978 7.128472213510832
+ POINT 5273 2.77500305718747 8.037874485340598
+ POINT 5274 3.027617726611467 7.589434151032957
+ POINT 5275 3.283325039581317 8.042101283776436
+ POINT 5276 4.303354076505858 8.941046540609735
+ POINT 5277 4.559517266307168 8.493071306044598
+ POINT 5278 4.303318937401558 8.046327360535352
+ POINT 5279 3.794429651747119 8.941483306382132
+ POINT 5280 3.539603867070875 8.492193488056373
+ POINT 5281 3.792218536494872 8.04375315374873
+ POINT 5282 1.765500287132538 8.935229901889144
+ POINT 5283 1.512133152393508 8.483328312230684
+ POINT 5284 1.26052017194238 8.933024273296105
+ POINT 5285 2.268204505900643 8.035370646710422
+ POINT 5286 2.523911818870494 8.488037779453901
+ POINT 5287 2.271387884601659 8.93645405223478
+ POINT 5288 1.762470790478816 8.030999321070967
+ POINT 5289 0.7570181339856141 9.832621206105948
+ POINT 5290 0.2521486956286256 9.832463953535083
+ POINT 5291 1.009092319370833 9.384111939311431
+ POINT 5292 7.294083631537163e-08 9.383298033689051
+ POINT 5293 0.755725184631803 8.932210349652973
+ POINT 5294 0.2521487063815567 8.931176081657238
+ POINT 5295 0.5001445506630317 6.653216377611718
+ POINT 5296 0.2509575290254266 7.109769236321039
+ POINT 5297 -0.2509574054255117 7.109769247532057
+ POINT 5298 -0.5001444446786542 6.653216389361097
+ POINT 5299 -0.2485632222434483 6.187417819036827
+ POINT 5300 1.486808276477663 4.815803748516092
+ POINT 5301 1.233115516860302 4.336364274084247
+ POINT 5302 0.7400739793290316 4.319006830385741
+ POINT 5303 0.4944715681245202 4.791077890962915
+ POINT 5304 1.247341716301759 6.199670761156298
+ POINT 5305 1.750101329007567 6.207339947551936
+ POINT 5306 1.241668873888472 5.270356238309256
+ POINT 5307 1.739533777842383 5.288390330886163
+ POINT 5308 6.319776508411969 23.08033816696384
+ POINT 5309 6.57365161657976 22.64022355419007
+ POINT 5310 5.813247233137025 22.20059394145463
+ POINT 5311 5.559612309276712 22.64037942157165
+ POINT 5312 5.812595440385603 23.08012398834565
+ POINT 5313 6.827537292599711 22.20035520381776
+ POINT 5314 7.081929764721854 21.760379613744
+ POINT 5315 6.067132909156976 21.76072559108232
+ POINT 5316 6.321207979898867 21.32076562341935
+ POINT 5317 6.319913133203913 22.20029199662393
+ POINT 5318 6.828119358218929 21.32047871636039
+ POINT 5319 -15.60761428771511 15.17729136075921
+ POINT 5320 -15.8759118955204 15.61135550393402
+ POINT 5321 -15.07838575053652 15.17331221426195
+ POINT 5322 5.313338001627086 4.46622421620718
+ POINT 5323 4.800176500099562 4.456810078993488
+ POINT 5324 5.57601665209557 4.919939725998326
+ POINT 5325 3.782261521536312 6.243544847125578
+ POINT 5326 4.035803768525128 5.797003854445578
+ POINT 5327 4.295343007076298 6.25166539718948
+ POINT 5328 5.32782445313552 7.150212913721168
+ POINT 5329 5.5874601881524 6.7007613202222
+ POINT 5330 4.555688461472631 6.70175982734103
+ POINT 5331 4.809230708461447 6.255218834661029
+ POINT 5332 4.813858336838233 7.152061313927309
+ POINT 5333 -5.310107499537395 13.39084792377241
+ POINT 5334 -5.817351857309676 13.38983227473242
+ POINT 5335 -6.07268972719344 12.94608409290475
+ POINT 5336 -5.830755763497873 9.830536332965101
+ POINT 5337 -5.574295325382317 10.27814411627772
+ POINT 5338 -5.827083974112147 10.72300100372588
+ POINT 5339 -5.317804215979157 10.7252057153338
+ POINT 5340 -6.328097480913719 12.50141410567111
+ POINT 5341 -6.584305435820698 12.05624829120225
+ POINT 5342 -5.820129377214162 12.50287858122533
+ POINT 5343 -2.273653862835852 10.72932296672886
+ POINT 5344 -2.779998427153544 10.72963483000736
+ POINT 5345 -2.526893511585702 10.28311542011334
+ POINT 5346 -3.03325797369162 11.17544935978157
+ POINT 5347 -3.286081789785646 11.62005936335257
+ POINT 5348 -2.77958259449772 11.62045238019389
+ POINT 5349 -3.793978657891382 10.72885678785785
+ POINT 5350 -3.28649762244147 10.72924181316605
+ POINT 5351 -3.033012140510429 9.388247926083039
+ POINT 5352 -2.778186307943474 8.938958170589331
+ POINT 5353 -2.271387729106642 8.936454262492179
+ POINT 5354 -2.019774768934057 9.386150177582453
+ POINT 5355 -2.273105663732145 9.835088963624671
+ POINT 5356 -2.779450228049837 9.835400826903166
+ POINT 5357 -5.5822245505022 8.490021566077278
+ POINT 5358 -5.835924092640452 8.936439449580325
+ POINT 5359 -5.83999246392453 8.041429258670941
+ POINT 5360 -6.353715300277041 8.037914311090102
+ POINT 5361 -0.7574091937513752 13.39536386100999
+ POINT 5362 -0.5049253668923982 13.83754850584218
+ POINT 5363 -1.262484566388291 13.39525698367467
+ POINT 5364 -0.7573602894107085 14.27848893565566
+ POINT 5365 -1.262291965254416 14.27845371053971
+ POINT 5366 -3.28331274272134 14.2777561649855
+ POINT 5367 -3.536686451350343 13.83613863307331
+ POINT 5368 -2.777875273536981 14.27795550083099
+ POINT 5369 -2.272576442111081 23.96112623819538
+ POINT 5370 -2.524923753604395 24.40040169094545
+ POINT 5371 -2.272345992723895 24.84060690537046
+ POINT 5372 -1.009801486872866 25.28056166755413
+ POINT 5373 -1.262291950595193 25.72154635362897
+ POINT 5374 -1.767382679741587 25.721695622482
+ POINT 5375 -2.01983108067216 25.2806633643694
+ POINT 5376 -2.272480607424279 25.72176208916036
+ POINT 5377 -1.767248065041203 24.84054043869209
+ POINT 5378 -2.778352392893433 26.60544966214032
+ POINT 5379 -3.284192720232348 26.60594747324546
+ POINT 5380 -2.52542680694141 26.16307686206677
+ POINT 5381 -2.777875207871983 25.72204460395416
+ POINT 5382 -3.28331263174079 25.72224396047425
+ POINT 5383 6.866104760713585 31.96710990335178
+ POINT 5384 7.380362796677328 31.97547094211897
+ POINT 5385 7.629644931204242 31.52677605772053
+ POINT 5386 6.606301269717369 31.51727851965659
+ POINT 5387 7.369526469756744 31.07527436817653
+ POINT 5388 6.859007733442916 31.07180208214582
+ POINT 5389 13.51392964722839 16.04511534389315
+ POINT 5390 14.03639847868913 16.04943449810747
+ POINT 5391 13.52076444975717 16.92688894744077
+ POINT 5392 14.04907281755069 16.92994337381335
+ POINT 5393 14.30347517478823 16.49353649549375
+ POINT 5394 11.18084815906273 18.23937667376692
+ POINT 5395 10.92145986158483 18.67904848402461
+ POINT 5396 10.40541215995382 18.6792215523644
+ POINT 5397 11.43896757839668 17.79930462984569
+ POINT 5398 11.69841204276576 17.35997805758548
+ POINT 5399 10.92128597919782 17.79908418944193
+ POINT 5400 10.66359917374389 17.35875830998669
+ POINT 5401 10.40547975440994 17.79883035390792
+ POINT 5402 8.865944840957612 16.91817543653783
+ POINT 5403 8.354985365778326 16.91842865090259
+ POINT 5404 8.355742015396309 16.03671800269559
+ POINT 5405 8.100430211024863 16.47811944809296
+ POINT 5406 9.377722904526436 17.79898153735976
+ POINT 5407 9.890885340997441 17.79886408828225
+ POINT 5408 9.634630512485 17.35862192353019
+ POINT 5409 10.14857214645137 18.23918996773749
+ POINT 5410 9.89081774654132 18.67925528673874
+ POINT 5411 9.377649707542098 18.67937380014824
+ POINT 5412 9.121932223471456 18.23935019673461
+ POINT 5413 12.7301955341313 15.59870120865399
+ POINT 5414 12.46808208164849 15.15416875358384
+ POINT 5415 10.66170303024074 13.81985063353565
+ POINT 5416 10.91914277660979 13.37360320785854
+ POINT 5417 11.43075873813842 13.37311649985818
+ POINT 5418 11.68774535289223 13.8200824382397
+ POINT 5419 -4.294356920184748 24.84106161932534
+ POINT 5420 -3.788433699542313 24.84070001560085
+ POINT 5421 -4.041727076734903 25.28149014781243
+ POINT 5422 -4.547087477993811 24.40041071780754
+ POINT 5423 -3.535574036554005 24.40029544465575
+ POINT 5424 -3.788414856257005 23.96059220506871
+ POINT 5425 -4.293926130446284 23.96024864672396
+ POINT 5426 -13.52905046638359 17.80348872203954
+ POINT 5427 -13.79175767275845 17.36796966650665
+ POINT 5428 -13.52076421705971 16.92688909198984
+ POINT 5429 -13.00252392740061 17.80282689423603
+ POINT 5430 -12.998413866338 16.9234253011904
+ POINT 5431 -12.7404339170757 17.36292962737342
+ POINT 5432 -14.02979306030074 15.16474248285489
+ POINT 5433 -14.55273569758199 15.16992825407098
+ POINT 5434 -14.03639819104111 16.04943470346083
+ POINT 5435 -14.56179397742396 16.05410844354104
+ POINT 5436 -13.77224846434048 15.60568723673743
+ POINT 5437 -14.82036732248942 15.61339039057769
+ POINT 5438 -15.08744403037848 16.05749240373201
+ POINT 5439 -16.2090642477196 17.81010190909618
+ POINT 5440 -15.93239653765298 17.37709080090277
+ POINT 5441 -16.75104577713385 17.80975889004021
+ POINT 5442 -17.29733902574828 17.80237948696045
+ POINT 5443 -17.82900832379805 17.79250699444906
+ POINT 5444 -18.125149458915 17.3358334365596
+ POINT 5445 -17.74265051816197 16.90620584174569
+ POINT 5446 -17.02043915652885 17.36861046666035
+ POINT 5447 -17.24542039534538 16.92123752482653
+ POINT 5448 -16.69912714673096 16.9286169279063
+ POINT 5449 -6.088630944097952 30.61808470458812
+ POINT 5450 -5.83075607699084 30.16946420465471
+ POINT 5451 -5.321476310829926 30.16725940981392
+ POINT 5452 -5.068073995839905 30.61330986323137
+ POINT 5453 -5.324237322301012 31.06128512670801
+ POINT 5454 -5.835924560406232 31.06356111209442
+ POINT 5455 -7.109843760575517 30.62477446137646
+ POINT 5456 -7.369526571375625 31.07527433075212
+ POINT 5457 -8.131410593699739 30.63279557430232
+ POINT 5458 -7.880480933021181 31.07974846151187
+ POINT 5459 -7.872056536659996 30.1821803785594
+ POINT 5460 -7.361674108531002 30.17880955550542
+ POINT 5461 -7.613368185284306 29.73274317704884
+ POINT 5462 -7.859855589284646 28.39452247461595
+ POINT 5463 -8.117653318329905 28.84163918972367
+ POINT 5464 -7.097783486965113 28.83658188443342
+ POINT 5465 -7.355184427237546 29.28425727165385
+ POINT 5466 -7.865566855366541 29.28762809470784
+ POINT 5467 -6.840628617274074 28.38986724165644
+ POINT 5468 -6.584305157135041 27.94375243992971
+ POINT 5469 -7.602700719593607 27.94780783183896
+ POINT 5470 -7.345760498175617 27.50220836892409
+ POINT 5471 -7.350228227628744 28.39242754653586
+ POINT 5472 -6.836865316533313 27.50054699198497
+ POINT 5473 -8.859668248791966 36.47820331889234
+ POINT 5474 -9.192245205163893 36.13326199675004
+ POINT 5475 -8.926778614439051 35.64424337939984
+ POINT 5476 -8.395990026835449 36.56035920049054
+ POINT 5477 -8.152789553234477 36.06385683741578
+ POINT 5478 -8.404917802902107 35.59893930067572
+ POINT 5479 -9.445446661180085 34.74868923560489
+ POINT 5480 -9.928438211384101 34.70959839015399
+ POINT 5481 -9.1855200421729 34.27056920744505
+ POINT 5482 -10.20212715258456 34.27925189416473
+ POINT 5483 -9.94558386098727 33.81809877026199
+ POINT 5484 -9.431469769528404 33.80794915972277
+ POINT 5485 -6.972437622679337 37.78020738278309
+ POINT 5486 -7.24426854141284 37.26861594573647
+ POINT 5487 -7.793216463077668 37.97434844713221
+ POINT 5488 -7.792711074552729 37.37441972564716
+ POINT 5489 -7.321637197370867 38.17042362703923
+ POINT 5490 -7.678418548302079 38.46731947176784
+ POINT 5491 2.770028761860395 7.135494617296446
+ POINT 5492 2.513285031132556 6.678759478210158
+ POINT 5493 3.271742031244156 6.237332593188722
+ POINT 5494 3.531281269795326 6.691994135932626
+ POINT 5495 3.278350744254242 7.139721415732282
+ POINT 5496 0.2485632276968463 6.187417834842025
+ POINT 5497 0.7487077343841402 6.190600158863577
+ POINT 5498 0.9957603933355736 5.733872218386605
+ POINT 5499 -3.852233976253672e-08 5.724801600288686
+ POINT 5500 0.7430348919708534 5.261285636016535
+ POINT 5501 0.2485630875716218 5.254593871040265
+ POINT 5502 -15.61382878159145 16.05886928995985
+ POINT 5503 -16.1437233016679 16.05345044312521
+ POINT 5504 -16.40287428664322 16.49110410761176
+ POINT 5505 -15.63614367756524 16.93957798060823
+ POINT 5506 -15.35525543652598 16.4995873429232
+ POINT 5507 -16.17789304782668 16.93847704944558
+ POINT 5508 1.997790912210466 5.756661433504865
+ POINT 5509 2.253497865964841 6.221058560377475
+ POINT 5510 2.760974614335455 6.228080964163087
+ POINT 5511 3.011954866076441 5.77963167535604
+ POINT 5512 2.242930314799657 5.302108943711701
+ POINT 5513 4.543058481172607 4.904216705369631
+ POINT 5514 4.288462587269439 5.349885195959473
+ POINT 5515 4.803481147968283 5.359455913919637
+ POINT 5516 3.775381101729453 5.34176464589557
+ POINT 5517 4.285157939400719 4.447239361033324
+ POINT 5518 3.759704530313033 4.444818867162756
+ POINT 5519 5.325944699989877 6.259861521617189
+ POINT 5520 5.843828725284497 6.255309577026809
+ POINT 5521 6.104985755684442 5.803539343166328
+ POINT 5522 5.838134749720831 5.370250903544328
+ POINT 5523 5.065599245593544 5.809767091465639
+ POINT 5524 5.320195139496712 5.364098600875796
+ POINT 5525 -4.802971484868761 13.39198497902312
+ POINT 5526 -4.296500513511889 13.39272959833429
+ POINT 5527 -5.057585608825249 12.94868562370967
+ POINT 5528 -6.335879478904616 10.72095926303271
+ POINT 5529 -6.079388369501457 11.1680208620888
+ POINT 5530 -6.84062880750044 11.61013355490421
+ POINT 5531 -7.097783541825249 11.16341899720847
+ POINT 5532 -6.331860502614183 11.61209385769366
+ POINT 5533 -5.823064997821714 11.61413559838683
+ POINT 5534 -6.341449844176644 9.827318953093449
+ POINT 5535 -6.08863052415921 9.381915881388753
+ POINT 5536 -6.346618173319224 8.933222069708673
+ POINT 5537 -2.273750259397786 11.62081619889232
+ POINT 5538 -2.526574075491812 12.06542620246332
+ POINT 5539 -2.27331255849431 12.50912509652447
+ POINT 5540 -2.779144893594244 12.50876127782604
+ POINT 5541 -1.767930060637219 12.50939986568534
+ POINT 5542 -1.51542042791521 12.06591801877112
+ POINT 5543 -2.020500878739651 12.95273494104806
+ POINT 5544 -7.369525954258662 8.924726485537136
+ POINT 5545 -7.629644265520056 8.473224777180157
+ POINT 5546 -6.606300873029995 8.482722239581177
+ POINT 5547 -6.86610443150657 8.032890912771032
+ POINT 5548 -6.859007304548753 8.928198671389605
+ POINT 5549 -7.109843254547891 9.375226315664634
+ POINT 5550 -7.380362326127036 8.024529817709622
+ POINT 5551 -2.525426847734203 13.83692324382117
+ POINT 5552 -2.272480651437661 14.27823799621374
+ POINT 5553 -1.767382702124846 14.27830445157146
+ POINT 5554 -1.514941488764452 13.83735499817217
+ POINT 5555 -1.767575303258722 13.39510772470642
+ POINT 5556 -2.272957801115813 13.39483295554556
+ POINT 5557 -2.778352423215133 13.39455046016281
+ POINT 5558 -1.767492689297242 23.96146211472275
+ POINT 5559 -2.020306154315385 23.52210437322497
+ POINT 5560 -1.263131319383013 23.08451873173783
+ POINT 5561 -1.01019165252415 23.52275060399421
+ POINT 5562 -1.768522078044251 23.08392505665697
+ POINT 5563 -1.262295067277426 24.84067058321086
+ POINT 5564 -1.514809979329161 24.40061412421192
+ POINT 5565 -0.7575089425560693 23.96190261348339
+ POINT 5566 -0.5049284856589678 24.40077541610661
+ POINT 5567 -0.7573634011608242 24.84063535307396
+ POINT 5568 -1.262539691533465 23.96159225924151
+ POINT 5569 -4.549022158760552 26.16510835246748
+ POINT 5570 -4.295100786789511 25.72310771361495
+ POINT 5571 -3.789177566147076 25.72274610989047
+ POINT 5572 -3.5366863417954 26.16386152627678
+ POINT 5573 -3.790057654638633 26.60644962266168
+ POINT 5574 -4.296500374351382 26.60727063581498
+ POINT 5575 10.92066954525162 16.91793455038633
+ POINT 5576 10.40486332046374 16.91768071485232
+ POINT 5577 10.40472607340097 16.03513246006513
+ POINT 5578 10.91930146715205 16.03530284192124
+ POINT 5579 10.66209384858155 15.5935783467344
+ POINT 5580 12.47199488428663 16.03898490629723
+ POINT 5581 12.99157927565469 16.04165158150828
+ POINT 5582 12.99841407818347 16.92342518505589
+ POINT 5583 12.47539865640488 16.92143962440089
+ POINT 5584 13.25572899738372 16.48539904153639
+ POINT 5585 11.95273125070042 16.03712579643803
+ POINT 5586 11.43576030048511 16.03598289401182
+ POINT 5587 11.69364019254794 15.59489163101673
+ POINT 5588 11.17839252530453 16.47753700734255
+ POINT 5589 11.43712837858468 16.91861460247691
+ POINT 5590 11.95613502281867 16.91958051454169
+ POINT 5591 12.21411499222381 16.48007616929232
+ POINT 5592 11.95093625080717 15.15244834498486
+ POINT 5593 11.43396530059186 15.15130544255865
+ POINT 5594 11.43270011507272 14.26415543114492
+ POINT 5595 11.94630659667062 14.26478916362155
+ POINT 5596 12.20840718969241 14.71058256512575
+ POINT 5597 9.122219499790404 16.47724514251171
+ POINT 5598 9.377742734846787 16.91780907858158
+ POINT 5599 9.890905171317794 16.91769162950407
+ POINT 5600 10.14797554282553 16.47686786990372
+ POINT 5601 9.890767924255025 16.03514337471688
+ POINT 5602 10.91783758504318 14.26368304084108
+ POINT 5603 10.40540174398959 14.26408496861366
+ POINT 5604 10.40452737681125 15.15066267039869
+ POINT 5605 10.91910277056232 15.15083305225481
+ POINT 5606 11.17639882882156 14.70838976622293
+ POINT 5607 10.14864614667206 14.70832398270322
+ POINT 5608 9.89163722469128 15.15106927718282
+ POINT 5609 3.51170272767204 4.885646738160905
+ POINT 5610 3.243367337511309 4.435819617914195
+ POINT 5611 2.748276492019028 5.323513767621375
+ POINT 5612 2.490019357650945 4.85524266500267
+ POINT 5613 3.259043908927729 5.332765396647009
+ POINT 5614 2.734686977480409 4.405829547072493
+ POINT 5615 -3.031723722491756 12.95196238977117
+ POINT 5616 -3.284985239489258 12.50826349571002
+ POINT 5617 -4.044006831271692 12.95064364330777
+ POINT 5618 -3.790057750626966 13.39355056268168
+ POINT 5619 -3.284192769110147 13.39405267804679
+ POINT 5620 -3.792541619613724 11.61935880772859
+ POINT 5621 -3.538866240419825 12.0643618281409
+ POINT 5622 -3.791445069317336 12.50756294008603
+ POINT 5623 -4.297887832202258 12.50674197573865
+ POINT 5624 -6.851155057129612 9.824663480890202
+ POINT 5625 -6.593280296468273 10.27328393246655
+ POINT 5626 -7.355184359388906 10.7157436666423
+ POINT 5627 -7.613367931970085 10.26725782144039
+ POINT 5628 -7.36167370683952 9.821191295037732
+ POINT 5629 -6.845584691857582 10.71830379082946
+ POINT 5630 -1.76803668438193 11.62082851212063
+ POINT 5631 -2.021045203387837 11.17585468985119
+ POINT 5632 -1.767940287819996 10.72933527995718
+ POINT 5633 -1.262715371905262 11.62095650973
+ POINT 5634 -1.010161141140113 11.17580760248892
+ POINT 5635 -1.262535223830214 10.72890573157164
+ POINT 5636 9.378288957212938 16.03556981048882
+ POINT 5637 8.866491063323762 16.03593616844507
+ POINT 5638 8.611811472818843 15.5950426706727
+ POINT 5639 8.867790365254811 15.15257222445195
+ POINT 5640 9.379158257649195 15.15149571295476
+ POINT 5641 9.635039487788383 15.59383440065023
+ POINT 5642 -4.299837112326497 11.6184558241427
+ POINT 5643 -4.047052661692318 11.17415335935438
+ POINT 5644 -4.301274150604154 10.72795380427197
+ POINT 5645 -5.062470509557039 11.17165648927523
+ POINT 5646 -4.809681860827208 10.72679960182707
+ POINT 5647 -4.805074905311793 12.50557281219472
+ POINT 5648 -5.312210919980426 12.50443575694401
+ POINT 5649 -4.552513143357436 12.06249210897299
+ POINT 5650 -5.567618673700705 12.05976576971038
+ POINT 5651 -4.807024185436029 11.61728666059878
+ POINT 5652 -5.315146540587978 11.61569277410551
END POINTS LIST
@@ -1403,669 +5665,2765 @@ END POINTS LIST
BEGIN MESH STRUCTURE DESCRIPTION
-CONVEX 0 'GT_PK(2,2)' 181 364 142 365 366 161
-CONVEX 1 'GT_PK(2,2)' 180 367 181 368 369 3
-CONVEX 2 'GT_PK(2,2)' 180 367 181 370 365 161
-CONVEX 3 'GT_PK(2,2)' 358 371 359 372 373 4
-CONVEX 4 'GT_PK(2,2)' 360 374 359 375 373 4
-CONVEX 5 'GT_PK(2,2)' 350 376 360 377 378 361
-CONVEX 6 'GT_PK(2,2)' 127 379 108 380 381 128
-CONVEX 7 'GT_PK(2,2)' 127 379 108 382 383 107
-CONVEX 8 'GT_PK(2,2)' 182 384 201 385 386 2
-CONVEX 9 'GT_PK(2,2)' 141 387 142 388 389 122
-CONVEX 10 'GT_PK(2,2)' 141 387 142 390 366 161
-CONVEX 11 'GT_PK(2,2)' 17 391 8 392 393 7
-CONVEX 12 'GT_PK(2,2)' 325 394 309 395 396 326
-CONVEX 13 'GT_PK(2,2)' 354 397 341 398 399 353
-CONVEX 14 'GT_PK(2,2)' 39 400 55 401 402 40
-CONVEX 15 'GT_PK(2,2)' 39 403 25 401 404 40
-CONVEX 16 'GT_PK(2,2)' 71 405 55 406 407 72
-CONVEX 17 'GT_PK(2,2)' 316 408 317 409 410 331
-CONVEX 18 'GT_PK(2,2)' 356 411 346 412 413 357
-CONVEX 19 'GT_PK(2,2)' 87 414 86 415 416 69
-CONVEX 20 'GT_PK(2,2)' 89 417 108 418 383 107
-CONVEX 21 'GT_PK(2,2)' 89 419 71 420 406 72
-CONVEX 22 'GT_PK(2,2)' 109 421 108 422 381 128
-CONVEX 23 'GT_PK(2,2)' 126 423 127 424 382 107
-CONVEX 24 'GT_PK(2,2)' 163 425 162 426 427 143
-CONVEX 25 'GT_PK(2,2)' 163 425 162 428 429 2
-CONVEX 26 'GT_PK(2,2)' 163 430 182 428 385 2
-CONVEX 27 'GT_PK(2,2)' 191 431 211 432 433 210
-CONVEX 28 'GT_PK(2,2)' 191 434 190 435 436 1
-CONVEX 29 'GT_PK(2,2)' 191 434 190 432 437 210
-CONVEX 30 'GT_PK(2,2)' 136 438 155 439 440 135
-CONVEX 31 'GT_PK(2,2)' 149 441 130 442 443 150
-CONVEX 32 'GT_PK(2,2)' 131 444 130 445 443 150
-CONVEX 33 'GT_PK(2,2)' 15 446 6 447 448 5
-CONVEX 34 'GT_PK(2,2)' 18 449 17 450 451 30
-CONVEX 35 'GT_PK(2,2)' 18 452 9 453 454 0
-CONVEX 36 'GT_PK(2,2)' 18 455 8 453 456 0
-CONVEX 37 'GT_PK(2,2)' 18 449 17 455 391 8
-CONVEX 38 'GT_PK(2,2)' 363 457 362 458 459 352
-CONVEX 39 'GT_PK(2,2)' 351 460 362 461 459 352
-CONVEX 40 'GT_PK(2,2)' 351 462 338 463 464 350
-CONVEX 41 'GT_PK(2,2)' 351 463 350 465 377 361
-CONVEX 42 'GT_PK(2,2)' 351 460 362 465 466 361
-CONVEX 43 'GT_PK(2,2)' 339 467 325 468 469 324
-CONVEX 44 'GT_PK(2,2)' 339 470 338 468 471 324
-CONVEX 45 'GT_PK(2,2)' 339 472 351 473 461 352
-CONVEX 46 'GT_PK(2,2)' 339 472 351 470 462 338
-CONVEX 47 'GT_PK(2,2)' 340 474 341 475 399 353
-CONVEX 48 'GT_PK(2,2)' 340 476 339 477 473 352
-CONVEX 49 'GT_PK(2,2)' 340 476 339 478 467 325
-CONVEX 50 'GT_PK(2,2)' 340 474 341 479 480 326
-CONVEX 51 'GT_PK(2,2)' 340 478 325 479 395 326
-CONVEX 52 'GT_PK(2,2)' 340 481 363 475 482 353
-CONVEX 53 'GT_PK(2,2)' 340 481 363 477 458 352
-CONVEX 54 'GT_PK(2,2)' 278 483 259 484 485 258
-CONVEX 55 'GT_PK(2,2)' 276 486 257 487 488 256
-CONVEX 56 'GT_PK(2,2)' 347 489 358 490 491 357
-CONVEX 57 'GT_PK(2,2)' 347 492 346 490 413 357
-CONVEX 58 'GT_PK(2,2)' 337 493 338 494 464 350
-CONVEX 59 'GT_PK(2,2)' 308 495 325 496 469 324
-CONVEX 60 'GT_PK(2,2)' 308 495 325 497 394 309
-CONVEX 61 'GT_PK(2,2)' 291 498 309 499 500 292
-CONVEX 62 'GT_PK(2,2)' 291 501 308 498 497 309
-CONVEX 63 'GT_PK(2,2)' 291 501 308 502 503 290
-CONVEX 64 'GT_PK(2,2)' 197 504 216 505 506 196
-CONVEX 65 'GT_PK(2,2)' 197 507 178 508 509 198
-CONVEX 66 'GT_PK(2,2)' 171 510 190 511 436 1
-CONVEX 67 'GT_PK(2,2)' 64 512 81 513 514 80
-CONVEX 68 'GT_PK(2,2)' 19 515 9 516 517 10
-CONVEX 69 'GT_PK(2,2)' 19 518 18 515 452 9
-CONVEX 70 'GT_PK(2,2)' 24 519 39 520 521 38
-CONVEX 71 'GT_PK(2,2)' 24 519 39 522 403 25
-CONVEX 72 'GT_PK(2,2)' 54 523 39 524 400 55
-CONVEX 73 'GT_PK(2,2)' 54 525 71 524 405 55
-CONVEX 74 'GT_PK(2,2)' 54 523 39 526 521 38
-CONVEX 75 'GT_PK(2,2)' 54 527 53 526 528 38
-CONVEX 76 'GT_PK(2,2)' 315 529 316 530 531 299
-CONVEX 77 'GT_PK(2,2)' 343 532 344 533 534 331
-CONVEX 78 'GT_PK(2,2)' 343 535 316 533 409 331
-CONVEX 79 'GT_PK(2,2)' 300 536 316 537 531 299
-CONVEX 80 'GT_PK(2,2)' 300 536 316 538 408 317
-CONVEX 81 'GT_PK(2,2)' 123 539 124 540 541 104
-CONVEX 82 'GT_PK(2,2)' 123 539 124 542 543 143
-CONVEX 83 'GT_PK(2,2)' 123 544 162 542 427 143
-CONVEX 84 'GT_PK(2,2)' 70 545 53 546 547 69
-CONVEX 85 'GT_PK(2,2)' 70 548 87 546 415 69
-CONVEX 86 'GT_PK(2,2)' 70 549 54 545 527 53
-CONVEX 87 'GT_PK(2,2)' 70 549 54 550 525 71
-CONVEX 88 'GT_PK(2,2)' 106 551 126 552 553 125
-CONVEX 89 'GT_PK(2,2)' 106 551 126 554 424 107
-CONVEX 90 'GT_PK(2,2)' 105 555 86 556 557 104
-CONVEX 91 'GT_PK(2,2)' 105 558 87 555 414 86
-CONVEX 92 'GT_PK(2,2)' 105 559 124 556 541 104
-CONVEX 93 'GT_PK(2,2)' 105 560 106 558 561 87
-CONVEX 94 'GT_PK(2,2)' 105 559 124 562 563 125
-CONVEX 95 'GT_PK(2,2)' 105 560 106 562 552 125
-CONVEX 96 'GT_PK(2,2)' 179 564 178 565 509 198
-CONVEX 97 'GT_PK(2,2)' 56 566 73 567 568 57
-CONVEX 98 'GT_PK(2,2)' 56 569 55 570 402 40
-CONVEX 99 'GT_PK(2,2)' 56 569 55 571 407 72
-CONVEX 100 'GT_PK(2,2)' 56 566 73 571 572 72
-CONVEX 101 'GT_PK(2,2)' 90 573 109 574 421 108
-CONVEX 102 'GT_PK(2,2)' 90 575 89 576 420 72
-CONVEX 103 'GT_PK(2,2)' 90 575 89 574 417 108
-CONVEX 104 'GT_PK(2,2)' 90 577 73 576 572 72
-CONVEX 105 'GT_PK(2,2)' 187 578 167 579 580 168
-CONVEX 106 'GT_PK(2,2)' 116 581 136 582 439 135
-CONVEX 107 'GT_PK(2,2)' 116 581 136 583 584 117
-CONVEX 108 'GT_PK(2,2)' 154 585 153 586 587 173
-CONVEX 109 'GT_PK(2,2)' 154 588 155 589 440 135
-CONVEX 110 'GT_PK(2,2)' 172 590 153 591 587 173
-CONVEX 111 'GT_PK(2,2)' 172 592 171 593 511 1
-CONVEX 112 'GT_PK(2,2)' 264 594 245 595 596 244
-CONVEX 113 'GT_PK(2,2)' 298 597 297 598 599 314
-CONVEX 114 'GT_PK(2,2)' 298 600 315 598 601 314
-CONVEX 115 'GT_PK(2,2)' 298 602 281 603 604 299
-CONVEX 116 'GT_PK(2,2)' 298 600 315 603 530 299
-CONVEX 117 'GT_PK(2,2)' 202 605 182 606 384 201
-CONVEX 118 'GT_PK(2,2)' 144 607 163 608 426 143
-CONVEX 119 'GT_PK(2,2)' 144 609 124 610 563 125
-CONVEX 120 'GT_PK(2,2)' 144 609 124 608 543 143
-CONVEX 121 'GT_PK(2,2)' 215 611 216 612 506 196
-CONVEX 122 'GT_PK(2,2)' 215 613 195 612 614 196
-CONVEX 123 'GT_PK(2,2)' 99 615 81 616 617 82
-CONVEX 124 'GT_PK(2,2)' 99 618 118 619 620 117
-CONVEX 125 'GT_PK(2,2)' 35 621 36 622 623 23
-CONVEX 126 'GT_PK(2,2)' 35 621 36 624 625 50
-CONVEX 127 'GT_PK(2,2)' 100 626 118 627 628 119
-CONVEX 128 'GT_PK(2,2)' 100 629 99 630 616 82
-CONVEX 129 'GT_PK(2,2)' 100 629 99 626 618 118
-CONVEX 130 'GT_PK(2,2)' 137 631 136 632 584 117
-CONVEX 131 'GT_PK(2,2)' 137 633 118 632 620 117
-CONVEX 132 'GT_PK(2,2)' 74 634 73 635 568 57
-CONVEX 133 'GT_PK(2,2)' 74 636 75 637 638 92
-CONVEX 134 'GT_PK(2,2)' 148 639 167 640 580 168
-CONVEX 135 'GT_PK(2,2)' 148 641 149 640 642 168
-CONVEX 136 'GT_PK(2,2)' 93 643 75 644 645 76
-CONVEX 137 'GT_PK(2,2)' 93 643 75 646 638 92
-CONVEX 138 'GT_PK(2,2)' 46 647 45 648 649 61
-CONVEX 139 'GT_PK(2,2)' 46 650 62 648 651 61
-CONVEX 140 'GT_PK(2,2)' 46 650 62 652 653 47
-CONVEX 141 'GT_PK(2,2)' 327 654 354 655 397 341
-CONVEX 142 'GT_PK(2,2)' 327 655 341 656 480 326
-CONVEX 143 'GT_PK(2,2)' 217 657 218 658 659 198
-CONVEX 144 'GT_PK(2,2)' 217 660 197 658 508 198
-CONVEX 145 'GT_PK(2,2)' 217 660 197 661 504 216
-CONVEX 146 'GT_PK(2,2)' 200 662 180 663 368 3
-CONVEX 147 'GT_PK(2,2)' 200 664 220 663 665 3
-CONVEX 148 'GT_PK(2,2)' 238 666 257 667 668 258
-CONVEX 149 'GT_PK(2,2)' 238 669 259 667 485 258
-CONVEX 150 'GT_PK(2,2)' 238 670 239 669 671 259
-CONVEX 151 'GT_PK(2,2)' 277 672 257 673 668 258
-CONVEX 152 'GT_PK(2,2)' 277 674 276 672 486 257
-CONVEX 153 'GT_PK(2,2)' 277 675 278 673 484 258
-CONVEX 154 'GT_PK(2,2)' 277 675 278 676 677 296
-CONVEX 155 'GT_PK(2,2)' 236 678 255 679 680 256
-CONVEX 156 'GT_PK(2,2)' 236 681 217 682 661 216
-CONVEX 157 'GT_PK(2,2)' 275 683 276 684 487 256
-CONVEX 158 'GT_PK(2,2)' 275 685 255 684 680 256
-CONVEX 159 'GT_PK(2,2)' 275 686 294 683 687 276
-CONVEX 160 'GT_PK(2,2)' 275 686 294 688 689 293
-CONVEX 161 'GT_PK(2,2)' 209 690 229 691 692 210
-CONVEX 162 'GT_PK(2,2)' 209 693 189 694 695 208
-CONVEX 163 'GT_PK(2,2)' 209 696 190 691 437 210
-CONVEX 164 'GT_PK(2,2)' 209 693 189 696 697 190
-CONVEX 165 'GT_PK(2,2)' 334 698 347 699 492 346
-CONVEX 166 'GT_PK(2,2)' 345 700 356 701 411 346
-CONVEX 167 'GT_PK(2,2)' 345 702 355 700 703 356
-CONVEX 168 'GT_PK(2,2)' 349 704 337 705 494 350
-CONVEX 169 'GT_PK(2,2)' 349 706 360 707 374 359
-CONVEX 170 'GT_PK(2,2)' 349 705 350 706 376 360
-CONVEX 171 'GT_PK(2,2)' 349 708 336 704 709 337
-CONVEX 172 'GT_PK(2,2)' 323 710 338 711 471 324
-CONVEX 173 'GT_PK(2,2)' 323 712 337 710 493 338
-CONVEX 174 'GT_PK(2,2)' 307 713 308 714 503 290
-CONVEX 175 'GT_PK(2,2)' 307 713 308 715 496 324
-CONVEX 176 'GT_PK(2,2)' 307 716 323 715 711 324
-CONVEX 177 'GT_PK(2,2)' 307 716 323 717 718 306
-CONVEX 178 'GT_PK(2,2)' 272 719 291 720 502 290
-CONVEX 179 'GT_PK(2,2)' 169 721 149 722 442 150
-CONVEX 180 'GT_PK(2,2)' 169 721 149 723 642 168
-CONVEX 181 'GT_PK(2,2)' 22 724 35 725 726 34
-CONVEX 182 'GT_PK(2,2)' 22 724 35 727 622 23
-CONVEX 183 'GT_PK(2,2)' 63 728 62 729 653 47
-CONVEX 184 'GT_PK(2,2)' 63 728 62 730 731 79
-CONVEX 185 'GT_PK(2,2)' 63 730 79 732 733 80
-CONVEX 186 'GT_PK(2,2)' 63 734 64 732 513 80
-CONVEX 187 'GT_PK(2,2)' 21 735 12 736 737 11
-CONVEX 188 'GT_PK(2,2)' 21 738 33 739 740 34
-CONVEX 189 'GT_PK(2,2)' 21 741 22 739 725 34
-CONVEX 190 'GT_PK(2,2)' 21 741 22 735 742 12
-CONVEX 191 'GT_PK(2,2)' 49 743 35 744 726 34
-CONVEX 192 'GT_PK(2,2)' 49 743 35 745 624 50
-CONVEX 193 'GT_PK(2,2)' 330 746 315 747 529 316
-CONVEX 194 'GT_PK(2,2)' 330 748 343 747 535 316
-CONVEX 195 'GT_PK(2,2)' 330 746 315 749 601 314
-CONVEX 196 'GT_PK(2,2)' 88 750 70 751 548 87
-CONVEX 197 'GT_PK(2,2)' 88 752 106 751 561 87
-CONVEX 198 'GT_PK(2,2)' 88 750 70 753 550 71
-CONVEX 199 'GT_PK(2,2)' 88 752 106 754 554 107
-CONVEX 200 'GT_PK(2,2)' 88 755 89 754 418 107
-CONVEX 201 'GT_PK(2,2)' 88 755 89 753 419 71
-CONVEX 202 'GT_PK(2,2)' 159 756 179 757 564 178
-CONVEX 203 'GT_PK(2,2)' 129 758 110 759 760 130
-CONVEX 204 'GT_PK(2,2)' 129 761 148 762 763 128
-CONVEX 205 'GT_PK(2,2)' 129 764 109 762 422 128
-CONVEX 206 'GT_PK(2,2)' 129 758 110 764 765 109
-CONVEX 207 'GT_PK(2,2)' 129 766 149 759 441 130
-CONVEX 208 'GT_PK(2,2)' 129 761 148 766 641 149
-CONVEX 209 'GT_PK(2,2)' 111 767 131 768 444 130
-CONVEX 210 'GT_PK(2,2)' 111 769 110 768 760 130
-CONVEX 211 'GT_PK(2,2)' 111 769 110 770 771 92
-CONVEX 212 'GT_PK(2,2)' 111 772 93 770 646 92
-CONVEX 213 'GT_PK(2,2)' 91 773 90 774 573 109
-CONVEX 214 'GT_PK(2,2)' 91 775 110 776 771 92
-CONVEX 215 'GT_PK(2,2)' 91 775 110 774 765 109
-CONVEX 216 'GT_PK(2,2)' 91 777 74 776 637 92
-CONVEX 217 'GT_PK(2,2)' 91 773 90 778 577 73
-CONVEX 218 'GT_PK(2,2)' 91 777 74 778 634 73
-CONVEX 219 'GT_PK(2,2)' 97 779 79 780 733 80
-CONVEX 220 'GT_PK(2,2)' 97 781 96 779 782 79
-CONVEX 221 'GT_PK(2,2)' 114 783 133 784 785 113
-CONVEX 222 'GT_PK(2,2)' 114 786 95 784 787 113
-CONVEX 223 'GT_PK(2,2)' 114 786 95 788 789 96
-CONVEX 224 'GT_PK(2,2)' 132 790 133 791 785 113
-CONVEX 225 'GT_PK(2,2)' 263 792 264 793 595 244
-CONVEX 226 'GT_PK(2,2)' 263 794 262 795 796 281
-CONVEX 227 'GT_PK(2,2)' 282 797 281 798 604 299
-CONVEX 228 'GT_PK(2,2)' 282 799 264 800 801 283
-CONVEX 229 'GT_PK(2,2)' 282 802 263 797 795 281
-CONVEX 230 'GT_PK(2,2)' 282 802 263 799 792 264
-CONVEX 231 'GT_PK(2,2)' 282 803 300 800 804 283
-CONVEX 232 'GT_PK(2,2)' 282 803 300 798 537 299
-CONVEX 233 'GT_PK(2,2)' 261 805 279 806 807 260
-CONVEX 234 'GT_PK(2,2)' 243 808 263 809 793 244
-CONVEX 235 'GT_PK(2,2)' 243 808 263 810 794 262
-CONVEX 236 'GT_PK(2,2)' 221 811 202 812 606 201
-CONVEX 237 'GT_PK(2,2)' 221 813 240 814 815 222
-CONVEX 238 'GT_PK(2,2)' 221 811 202 814 816 222
-CONVEX 239 'GT_PK(2,2)' 156 817 136 818 438 155
-CONVEX 240 'GT_PK(2,2)' 156 819 175 818 820 155
-CONVEX 241 'GT_PK(2,2)' 156 821 137 817 631 136
-CONVEX 242 'GT_PK(2,2)' 192 822 191 823 431 211
-CONVEX 243 'GT_PK(2,2)' 192 822 191 824 435 1
-CONVEX 244 'GT_PK(2,2)' 192 825 172 824 593 1
-CONVEX 245 'GT_PK(2,2)' 192 825 172 826 591 173
-CONVEX 246 'GT_PK(2,2)' 174 827 154 828 586 173
-CONVEX 247 'GT_PK(2,2)' 174 827 154 829 588 155
-CONVEX 248 'GT_PK(2,2)' 174 830 175 829 820 155
-CONVEX 249 'GT_PK(2,2)' 214 831 215 832 613 195
-CONVEX 250 'GT_PK(2,2)' 214 831 215 833 834 234
-CONVEX 251 'GT_PK(2,2)' 98 835 81 836 514 80
-CONVEX 252 'GT_PK(2,2)' 98 837 99 835 615 81
-CONVEX 253 'GT_PK(2,2)' 98 838 97 836 780 80
-CONVEX 254 'GT_PK(2,2)' 98 837 99 839 619 117
-CONVEX 255 'GT_PK(2,2)' 98 840 116 839 583 117
-CONVEX 256 'GT_PK(2,2)' 98 838 97 840 841 116
-CONVEX 257 'GT_PK(2,2)' 52 842 68 843 844 67
-CONVEX 258 'GT_PK(2,2)' 83 845 66 846 847 67
-CONVEX 259 'GT_PK(2,2)' 83 848 100 849 630 82
-CONVEX 260 'GT_PK(2,2)' 83 845 66 849 850 82
-CONVEX 261 'GT_PK(2,2)' 51 851 66 852 853 50
-CONVEX 262 'GT_PK(2,2)' 51 854 36 855 856 37
-CONVEX 263 'GT_PK(2,2)' 51 854 36 852 625 50
-CONVEX 264 'GT_PK(2,2)' 51 851 66 857 847 67
-CONVEX 265 'GT_PK(2,2)' 51 858 52 855 859 37
-CONVEX 266 'GT_PK(2,2)' 51 858 52 857 843 67
-CONVEX 267 'GT_PK(2,2)' 103 860 102 861 862 85
-CONVEX 268 'GT_PK(2,2)' 121 863 102 864 865 120
-CONVEX 269 'GT_PK(2,2)' 121 866 141 867 388 122
-CONVEX 270 'GT_PK(2,2)' 121 868 103 867 869 122
-CONVEX 271 'GT_PK(2,2)' 121 868 103 863 860 102
-CONVEX 272 'GT_PK(2,2)' 58 870 74 871 635 57
-CONVEX 273 'GT_PK(2,2)' 58 870 74 872 636 75
-CONVEX 274 'GT_PK(2,2)' 29 873 17 874 451 30
-CONVEX 275 'GT_PK(2,2)' 60 875 45 876 649 61
-CONVEX 276 'GT_PK(2,2)' 60 877 77 878 879 76
-CONVEX 277 'GT_PK(2,2)' 60 877 77 876 880 61
-CONVEX 278 'GT_PK(2,2)' 94 881 95 882 787 113
-CONVEX 279 'GT_PK(2,2)' 94 883 93 884 644 76
-CONVEX 280 'GT_PK(2,2)' 94 885 77 884 879 76
-CONVEX 281 'GT_PK(2,2)' 94 885 77 881 886 95
-CONVEX 282 'GT_PK(2,2)' 41 887 56 888 570 40
-CONVEX 283 'GT_PK(2,2)' 41 887 56 889 567 57
-CONVEX 284 'GT_PK(2,2)' 28 890 27 891 892 15
-CONVEX 285 'GT_PK(2,2)' 28 893 29 894 895 43
-CONVEX 286 'GT_PK(2,2)' 14 896 15 897 447 5
-CONVEX 287 'GT_PK(2,2)' 14 898 27 896 892 15
-CONVEX 288 'GT_PK(2,2)' 31 899 45 900 901 30
-CONVEX 289 'GT_PK(2,2)' 31 902 46 899 647 45
-CONVEX 290 'GT_PK(2,2)' 31 903 18 900 450 30
-CONVEX 291 'GT_PK(2,2)' 31 904 19 903 518 18
-CONVEX 292 'GT_PK(2,2)' 311 905 327 906 907 328
-CONVEX 293 'GT_PK(2,2)' 311 908 294 909 689 293
-CONVEX 294 'GT_PK(2,2)' 342 910 329 911 912 328
-CONVEX 295 'GT_PK(2,2)' 342 913 327 914 654 354
-CONVEX 296 'GT_PK(2,2)' 342 913 327 911 907 328
-CONVEX 297 'GT_PK(2,2)' 237 915 217 916 657 218
-CONVEX 298 'GT_PK(2,2)' 237 917 238 918 666 257
-CONVEX 299 'GT_PK(2,2)' 237 917 238 916 919 218
-CONVEX 300 'GT_PK(2,2)' 237 920 236 915 681 217
-CONVEX 301 'GT_PK(2,2)' 237 918 257 921 488 256
-CONVEX 302 'GT_PK(2,2)' 237 920 236 921 679 256
-CONVEX 303 'GT_PK(2,2)' 199 922 218 923 659 198
-CONVEX 304 'GT_PK(2,2)' 199 924 179 923 565 198
-CONVEX 305 'GT_PK(2,2)' 199 924 179 925 926 180
-CONVEX 306 'GT_PK(2,2)' 199 927 200 925 662 180
-CONVEX 307 'GT_PK(2,2)' 219 928 239 929 930 220
-CONVEX 308 'GT_PK(2,2)' 219 931 238 928 670 239
-CONVEX 309 'GT_PK(2,2)' 219 932 200 929 664 220
-CONVEX 310 'GT_PK(2,2)' 219 931 238 933 919 218
-CONVEX 311 'GT_PK(2,2)' 219 934 199 933 922 218
-CONVEX 312 'GT_PK(2,2)' 219 934 199 932 927 200
-CONVEX 313 'GT_PK(2,2)' 312 935 329 936 912 328
-CONVEX 314 'GT_PK(2,2)' 312 937 311 936 906 328
-CONVEX 315 'GT_PK(2,2)' 312 937 311 938 908 294
-CONVEX 316 'GT_PK(2,2)' 235 939 236 940 682 216
-CONVEX 317 'GT_PK(2,2)' 235 939 236 941 678 255
-CONVEX 318 'GT_PK(2,2)' 235 942 215 940 611 216
-CONVEX 319 'GT_PK(2,2)' 235 942 215 943 834 234
-CONVEX 320 'GT_PK(2,2)' 235 944 254 943 945 234
-CONVEX 321 'GT_PK(2,2)' 235 944 254 941 946 255
-CONVEX 322 'GT_PK(2,2)' 265 947 264 948 801 283
-CONVEX 323 'GT_PK(2,2)' 265 947 264 949 594 245
-CONVEX 324 'GT_PK(2,2)' 333 950 334 951 699 346
-CONVEX 325 'GT_PK(2,2)' 333 952 345 951 701 346
-CONVEX 326 'GT_PK(2,2)' 332 953 317 954 410 331
-CONVEX 327 'GT_PK(2,2)' 332 955 318 953 956 317
-CONVEX 328 'GT_PK(2,2)' 332 957 344 954 534 331
-CONVEX 329 'GT_PK(2,2)' 332 958 333 955 959 318
-CONVEX 330 'GT_PK(2,2)' 332 958 333 960 952 345
-CONVEX 331 'GT_PK(2,2)' 332 961 355 957 962 344
-CONVEX 332 'GT_PK(2,2)' 332 960 345 961 702 355
-CONVEX 333 'GT_PK(2,2)' 335 963 334 964 698 347
-CONVEX 334 'GT_PK(2,2)' 335 965 336 966 967 321
-CONVEX 335 'GT_PK(2,2)' 322 968 323 969 718 306
-CONVEX 336 'GT_PK(2,2)' 322 968 323 970 712 337
-CONVEX 337 'GT_PK(2,2)' 322 971 336 972 967 321
-CONVEX 338 'GT_PK(2,2)' 322 971 336 970 709 337
-CONVEX 339 'GT_PK(2,2)' 250 973 270 974 975 251
-CONVEX 340 'GT_PK(2,2)' 289 976 307 977 714 290
-CONVEX 341 'GT_PK(2,2)' 289 976 307 978 717 306
-CONVEX 342 'GT_PK(2,2)' 305 979 322 980 972 321
-CONVEX 343 'GT_PK(2,2)' 305 979 322 981 969 306
-CONVEX 344 'GT_PK(2,2)' 274 982 275 983 685 255
-CONVEX 345 'GT_PK(2,2)' 274 984 254 983 946 255
-CONVEX 346 'GT_PK(2,2)' 274 982 275 985 688 293
-CONVEX 347 'GT_PK(2,2)' 274 985 293 986 987 292
-CONVEX 348 'GT_PK(2,2)' 273 988 291 989 499 292
-CONVEX 349 'GT_PK(2,2)' 273 990 272 988 719 291
-CONVEX 350 'GT_PK(2,2)' 273 991 274 989 986 292
-CONVEX 351 'GT_PK(2,2)' 273 991 274 992 984 254
-CONVEX 352 'GT_PK(2,2)' 170 993 169 994 722 150
-CONVEX 353 'GT_PK(2,2)' 170 993 169 995 996 189
-CONVEX 354 'GT_PK(2,2)' 170 997 171 998 510 190
-CONVEX 355 'GT_PK(2,2)' 170 995 189 998 697 190
-CONVEX 356 'GT_PK(2,2)' 188 999 189 1000 695 208
-CONVEX 357 'GT_PK(2,2)' 188 1001 169 999 996 189
-CONVEX 358 'GT_PK(2,2)' 188 1000 208 1002 1003 207
-CONVEX 359 'GT_PK(2,2)' 188 1004 187 1002 1005 207
-CONVEX 360 'GT_PK(2,2)' 188 1004 187 1006 579 168
-CONVEX 361 'GT_PK(2,2)' 188 1001 169 1006 723 168
-CONVEX 362 'GT_PK(2,2)' 48 1007 63 1008 734 64
-CONVEX 363 'GT_PK(2,2)' 48 1009 49 1008 1010 64
-CONVEX 364 'GT_PK(2,2)' 48 1011 33 1012 1013 47
-CONVEX 365 'GT_PK(2,2)' 48 1007 63 1012 729 47
-CONVEX 366 'GT_PK(2,2)' 48 1011 33 1014 740 34
-CONVEX 367 'GT_PK(2,2)' 48 1009 49 1014 744 34
-CONVEX 368 'GT_PK(2,2)' 20 1015 21 1016 736 11
-CONVEX 369 'GT_PK(2,2)' 20 1017 10 1016 1018 11
-CONVEX 370 'GT_PK(2,2)' 20 1019 19 1017 516 10
-CONVEX 371 'GT_PK(2,2)' 20 1015 21 1020 738 33
-CONVEX 372 'GT_PK(2,2)' 65 1021 49 1022 1010 64
-CONVEX 373 'GT_PK(2,2)' 65 1022 64 1023 512 81
-CONVEX 374 'GT_PK(2,2)' 65 1024 66 1025 853 50
-CONVEX 375 'GT_PK(2,2)' 65 1021 49 1025 745 50
-CONVEX 376 'GT_PK(2,2)' 65 1023 81 1026 617 82
-CONVEX 377 'GT_PK(2,2)' 65 1024 66 1026 850 82
-CONVEX 378 'GT_PK(2,2)' 139 1027 120 1028 1029 119
-CONVEX 379 'GT_PK(2,2)' 140 1030 139 1031 1032 159
-CONVEX 380 'GT_PK(2,2)' 140 1030 139 1033 1027 120
-CONVEX 381 'GT_PK(2,2)' 140 1034 121 1035 866 141
-CONVEX 382 'GT_PK(2,2)' 140 1034 121 1033 864 120
-CONVEX 383 'GT_PK(2,2)' 160 1036 159 1037 756 179
-CONVEX 384 'GT_PK(2,2)' 160 1038 180 1039 370 161
-CONVEX 385 'GT_PK(2,2)' 160 1037 179 1038 926 180
-CONVEX 386 'GT_PK(2,2)' 160 1040 140 1036 1031 159
-CONVEX 387 'GT_PK(2,2)' 160 1041 141 1039 390 161
-CONVEX 388 'GT_PK(2,2)' 160 1040 140 1041 1035 141
-CONVEX 389 'GT_PK(2,2)' 186 1042 187 1043 578 167
-CONVEX 390 'GT_PK(2,2)' 164 1044 144 1045 607 163
-CONVEX 391 'GT_PK(2,2)' 147 1046 127 1047 380 128
-CONVEX 392 'GT_PK(2,2)' 147 1048 148 1047 763 128
-CONVEX 393 'GT_PK(2,2)' 147 1048 148 1049 639 167
-CONVEX 394 'GT_PK(2,2)' 78 1050 95 1051 789 96
-CONVEX 395 'GT_PK(2,2)' 78 1052 77 1050 886 95
-CONVEX 396 'GT_PK(2,2)' 78 1051 96 1053 782 79
-CONVEX 397 'GT_PK(2,2)' 78 1054 62 1053 731 79
-CONVEX 398 'GT_PK(2,2)' 78 1054 62 1055 651 61
-CONVEX 399 'GT_PK(2,2)' 78 1052 77 1055 880 61
-CONVEX 400 'GT_PK(2,2)' 115 1056 116 1057 582 135
-CONVEX 401 'GT_PK(2,2)' 115 1058 114 1059 788 96
-CONVEX 402 'GT_PK(2,2)' 115 1060 97 1059 781 96
-CONVEX 403 'GT_PK(2,2)' 115 1060 97 1056 841 116
-CONVEX 404 'GT_PK(2,2)' 134 1061 133 1062 1063 153
-CONVEX 405 'GT_PK(2,2)' 134 1064 114 1061 783 133
-CONVEX 406 'GT_PK(2,2)' 134 1065 115 1064 1058 114
-CONVEX 407 'GT_PK(2,2)' 134 1065 115 1066 1057 135
-CONVEX 408 'GT_PK(2,2)' 134 1067 154 1066 589 135
-CONVEX 409 'GT_PK(2,2)' 134 1067 154 1062 585 153
-CONVEX 410 'GT_PK(2,2)' 151 1068 132 1069 1070 131
-CONVEX 411 'GT_PK(2,2)' 151 1069 131 1071 445 150
-CONVEX 412 'GT_PK(2,2)' 151 1072 170 1071 994 150
-CONVEX 413 'GT_PK(2,2)' 151 1072 170 1073 997 171
-CONVEX 414 'GT_PK(2,2)' 152 1074 172 1075 592 171
-CONVEX 415 'GT_PK(2,2)' 152 1076 151 1075 1073 171
-CONVEX 416 'GT_PK(2,2)' 152 1076 151 1077 1068 132
-CONVEX 417 'GT_PK(2,2)' 152 1077 132 1078 790 133
-CONVEX 418 'GT_PK(2,2)' 152 1078 133 1079 1063 153
-CONVEX 419 'GT_PK(2,2)' 152 1074 172 1079 590 153
-CONVEX 420 'GT_PK(2,2)' 242 1080 222 1081 1082 223
-CONVEX 421 'GT_PK(2,2)' 242 1083 261 1084 1085 262
-CONVEX 422 'GT_PK(2,2)' 242 1086 243 1081 1087 223
-CONVEX 423 'GT_PK(2,2)' 242 1086 243 1084 810 262
-CONVEX 424 'GT_PK(2,2)' 280 1088 261 1089 805 279
-CONVEX 425 'GT_PK(2,2)' 280 1090 298 1091 597 297
-CONVEX 426 'GT_PK(2,2)' 280 1089 279 1091 1092 297
-CONVEX 427 'GT_PK(2,2)' 280 1090 298 1093 602 281
-CONVEX 428 'GT_PK(2,2)' 280 1094 262 1093 796 281
-CONVEX 429 'GT_PK(2,2)' 280 1088 261 1094 1085 262
-CONVEX 430 'GT_PK(2,2)' 176 1095 156 1096 819 175
-CONVEX 431 'GT_PK(2,2)' 176 1097 195 1098 614 196
-CONVEX 432 'GT_PK(2,2)' 176 1096 175 1097 1099 195
-CONVEX 433 'GT_PK(2,2)' 252 1100 232 1101 1102 251
-CONVEX 434 'GT_PK(2,2)' 231 1103 232 1104 1102 251
-CONVEX 435 'GT_PK(2,2)' 231 1105 250 1104 974 251
-CONVEX 436 'GT_PK(2,2)' 212 1106 232 1107 1108 213
-CONVEX 437 'GT_PK(2,2)' 212 1109 192 1110 823 211
-CONVEX 438 'GT_PK(2,2)' 212 1111 231 1110 1112 211
-CONVEX 439 'GT_PK(2,2)' 212 1111 231 1106 1103 232
-CONVEX 440 'GT_PK(2,2)' 193 1113 174 1114 828 173
-CONVEX 441 'GT_PK(2,2)' 193 1115 212 1116 1107 213
-CONVEX 442 'GT_PK(2,2)' 193 1117 192 1114 826 173
-CONVEX 443 'GT_PK(2,2)' 193 1115 212 1117 1109 192
-CONVEX 444 'GT_PK(2,2)' 194 1118 214 1119 832 195
-CONVEX 445 'GT_PK(2,2)' 194 1120 175 1119 1099 195
-CONVEX 446 'GT_PK(2,2)' 194 1121 174 1120 830 175
-CONVEX 447 'GT_PK(2,2)' 194 1118 214 1122 1123 213
-CONVEX 448 'GT_PK(2,2)' 194 1124 193 1122 1116 213
-CONVEX 449 'GT_PK(2,2)' 194 1124 193 1121 1113 174
-CONVEX 450 'GT_PK(2,2)' 101 1125 102 1126 865 120
-CONVEX 451 'GT_PK(2,2)' 101 1126 120 1127 1029 119
-CONVEX 452 'GT_PK(2,2)' 101 1128 100 1127 627 119
-CONVEX 453 'GT_PK(2,2)' 101 1129 83 1128 848 100
-CONVEX 454 'GT_PK(2,2)' 59 1130 58 1131 872 75
-CONVEX 455 'GT_PK(2,2)' 59 1130 58 1132 1133 43
-CONVEX 456 'GT_PK(2,2)' 59 1131 75 1134 645 76
-CONVEX 457 'GT_PK(2,2)' 59 1135 60 1134 878 76
-CONVEX 458 'GT_PK(2,2)' 16 1136 29 1137 873 17
-CONVEX 459 'GT_PK(2,2)' 16 1138 15 1139 446 6
-CONVEX 460 'GT_PK(2,2)' 16 1140 28 1138 891 15
-CONVEX 461 'GT_PK(2,2)' 16 1140 28 1136 893 29
-CONVEX 462 'GT_PK(2,2)' 16 1137 17 1141 392 7
-CONVEX 463 'GT_PK(2,2)' 16 1139 6 1141 1142 7
-CONVEX 464 'GT_PK(2,2)' 44 1143 60 1144 875 45
-CONVEX 465 'GT_PK(2,2)' 44 1145 29 1146 895 43
-CONVEX 466 'GT_PK(2,2)' 44 1147 59 1146 1132 43
-CONVEX 467 'GT_PK(2,2)' 44 1147 59 1143 1135 60
-CONVEX 468 'GT_PK(2,2)' 44 1144 45 1148 901 30
-CONVEX 469 'GT_PK(2,2)' 44 1145 29 1148 874 30
-CONVEX 470 'GT_PK(2,2)' 112 1149 94 1150 882 113
-CONVEX 471 'GT_PK(2,2)' 112 1151 132 1150 791 113
-CONVEX 472 'GT_PK(2,2)' 112 1151 132 1152 1070 131
-CONVEX 473 'GT_PK(2,2)' 112 1149 94 1153 883 93
-CONVEX 474 'GT_PK(2,2)' 112 1154 111 1152 767 131
-CONVEX 475 'GT_PK(2,2)' 112 1154 111 1153 772 93
-CONVEX 476 'GT_PK(2,2)' 26 1155 41 1156 1157 27
-CONVEX 477 'GT_PK(2,2)' 26 1158 14 1159 1160 13
-CONVEX 478 'GT_PK(2,2)' 26 1158 14 1156 898 27
-CONVEX 479 'GT_PK(2,2)' 26 1155 41 1161 888 40
-CONVEX 480 'GT_PK(2,2)' 26 1162 25 1161 404 40
-CONVEX 481 'GT_PK(2,2)' 26 1159 13 1162 1163 25
-CONVEX 482 'GT_PK(2,2)' 42 1164 41 1165 1157 27
-CONVEX 483 'GT_PK(2,2)' 42 1166 28 1165 890 27
-CONVEX 484 'GT_PK(2,2)' 42 1164 41 1167 889 57
-CONVEX 485 'GT_PK(2,2)' 42 1168 58 1167 871 57
-CONVEX 486 'GT_PK(2,2)' 42 1168 58 1169 1133 43
-CONVEX 487 'GT_PK(2,2)' 42 1166 28 1169 894 43
-CONVEX 488 'GT_PK(2,2)' 310 1170 327 1171 656 326
-CONVEX 489 'GT_PK(2,2)' 310 1172 311 1170 905 327
-CONVEX 490 'GT_PK(2,2)' 310 1173 309 1171 396 326
-CONVEX 491 'GT_PK(2,2)' 310 1173 309 1174 500 292
-CONVEX 492 'GT_PK(2,2)' 310 1175 293 1174 987 292
-CONVEX 493 'GT_PK(2,2)' 310 1172 311 1175 909 293
-CONVEX 494 'GT_PK(2,2)' 313 1176 312 1177 935 329
-CONVEX 495 'GT_PK(2,2)' 295 1178 277 1179 676 296
-CONVEX 496 'GT_PK(2,2)' 295 1180 313 1179 1181 296
-CONVEX 497 'GT_PK(2,2)' 295 1180 313 1182 1176 312
-CONVEX 498 'GT_PK(2,2)' 295 1182 312 1183 938 294
-CONVEX 499 'GT_PK(2,2)' 295 1183 294 1184 687 276
-CONVEX 500 'GT_PK(2,2)' 295 1178 277 1184 674 276
-CONVEX 501 'GT_PK(2,2)' 284 1185 265 1186 948 283
-CONVEX 502 'GT_PK(2,2)' 284 1185 265 1187 1188 266
-CONVEX 503 'GT_PK(2,2)' 319 1189 333 1190 950 334
-CONVEX 504 'GT_PK(2,2)' 319 1191 302 1192 1193 318
-CONVEX 505 'GT_PK(2,2)' 319 1189 333 1192 959 318
-CONVEX 506 'GT_PK(2,2)' 227 1194 208 1195 1003 207
-CONVEX 507 'GT_PK(2,2)' 227 1196 226 1195 1197 207
-CONVEX 508 'GT_PK(2,2)' 246 1198 265 1199 1188 266
-CONVEX 509 'GT_PK(2,2)' 246 1200 247 1199 1201 266
-CONVEX 510 'GT_PK(2,2)' 246 1198 265 1202 949 245
-CONVEX 511 'GT_PK(2,2)' 246 1203 227 1200 1204 247
-CONVEX 512 'GT_PK(2,2)' 246 1205 226 1202 1206 245
-CONVEX 513 'GT_PK(2,2)' 246 1203 227 1205 1196 226
-CONVEX 514 'GT_PK(2,2)' 348 1207 335 1208 964 347
-CONVEX 515 'GT_PK(2,2)' 348 1209 358 1210 371 359
-CONVEX 516 'GT_PK(2,2)' 348 1208 347 1209 489 358
-CONVEX 517 'GT_PK(2,2)' 348 1207 335 1211 965 336
-CONVEX 518 'GT_PK(2,2)' 348 1212 349 1210 707 359
-CONVEX 519 'GT_PK(2,2)' 348 1212 349 1211 708 336
-CONVEX 520 'GT_PK(2,2)' 230 1213 211 1214 433 210
-CONVEX 521 'GT_PK(2,2)' 230 1215 229 1214 692 210
-CONVEX 522 'GT_PK(2,2)' 230 1216 231 1213 1112 211
-CONVEX 523 'GT_PK(2,2)' 230 1216 231 1217 1105 250
-CONVEX 524 'GT_PK(2,2)' 271 1218 289 1219 1220 270
-CONVEX 525 'GT_PK(2,2)' 271 1219 270 1221 975 251
-CONVEX 526 'GT_PK(2,2)' 271 1222 272 1223 720 290
-CONVEX 527 'GT_PK(2,2)' 271 1218 289 1223 977 290
-CONVEX 528 'GT_PK(2,2)' 271 1224 252 1221 1101 251
-CONVEX 529 'GT_PK(2,2)' 271 1224 252 1222 1225 272
-CONVEX 530 'GT_PK(2,2)' 288 1226 289 1227 1220 270
-CONVEX 531 'GT_PK(2,2)' 288 1226 289 1228 978 306
-CONVEX 532 'GT_PK(2,2)' 288 1229 305 1228 981 306
-CONVEX 533 'GT_PK(2,2)' 32 1230 20 1231 1020 33
-CONVEX 534 'GT_PK(2,2)' 32 1232 31 1233 902 46
-CONVEX 535 'GT_PK(2,2)' 32 1232 31 1234 904 19
-CONVEX 536 'GT_PK(2,2)' 32 1230 20 1234 1019 19
-CONVEX 537 'GT_PK(2,2)' 32 1231 33 1235 1013 47
-CONVEX 538 'GT_PK(2,2)' 32 1233 46 1235 652 47
-CONVEX 539 'GT_PK(2,2)' 206 1236 187 1237 1005 207
-CONVEX 540 'GT_PK(2,2)' 206 1238 186 1236 1042 187
-CONVEX 541 'GT_PK(2,2)' 206 1239 226 1237 1197 207
-CONVEX 542 'GT_PK(2,2)' 184 1240 204 1241 1242 185
-CONVEX 543 'GT_PK(2,2)' 145 1243 164 1244 1044 144
-CONVEX 544 'GT_PK(2,2)' 145 1245 126 1246 553 125
-CONVEX 545 'GT_PK(2,2)' 145 1244 144 1246 610 125
-CONVEX 546 'GT_PK(2,2)' 183 1247 163 1248 430 182
-CONVEX 547 'GT_PK(2,2)' 183 1249 164 1247 1045 163
-CONVEX 548 'GT_PK(2,2)' 183 1250 184 1249 1251 164
-CONVEX 549 'GT_PK(2,2)' 183 1252 202 1248 605 182
-CONVEX 550 'GT_PK(2,2)' 241 1253 240 1254 815 222
-CONVEX 551 'GT_PK(2,2)' 241 1255 242 1254 1080 222
-CONVEX 552 'GT_PK(2,2)' 241 1255 242 1256 1083 261
-CONVEX 553 'GT_PK(2,2)' 241 1253 240 1257 1258 260
-CONVEX 554 'GT_PK(2,2)' 241 1256 261 1257 806 260
-CONVEX 555 'GT_PK(2,2)' 177 1259 197 1260 505 196
-CONVEX 556 'GT_PK(2,2)' 177 1261 176 1260 1098 196
-CONVEX 557 'GT_PK(2,2)' 177 1259 197 1262 507 178
-CONVEX 558 'GT_PK(2,2)' 233 1263 252 1264 1100 232
-CONVEX 559 'GT_PK(2,2)' 233 1264 232 1265 1108 213
-CONVEX 560 'GT_PK(2,2)' 233 1266 214 1267 833 234
-CONVEX 561 'GT_PK(2,2)' 233 1266 214 1265 1123 213
-CONVEX 562 'GT_PK(2,2)' 253 1268 273 1269 990 272
-CONVEX 563 'GT_PK(2,2)' 253 1270 252 1269 1225 272
-CONVEX 564 'GT_PK(2,2)' 253 1268 273 1271 992 254
-CONVEX 565 'GT_PK(2,2)' 253 1272 233 1270 1263 252
-CONVEX 566 'GT_PK(2,2)' 253 1271 254 1273 945 234
-CONVEX 567 'GT_PK(2,2)' 253 1272 233 1273 1267 234
-CONVEX 568 'GT_PK(2,2)' 84 1274 101 1275 1125 102
-CONVEX 569 'GT_PK(2,2)' 84 1276 68 1277 844 67
-CONVEX 570 'GT_PK(2,2)' 84 1278 83 1277 846 67
-CONVEX 571 'GT_PK(2,2)' 84 1274 101 1278 1129 83
-CONVEX 572 'GT_PK(2,2)' 84 1276 68 1279 1280 85
-CONVEX 573 'GT_PK(2,2)' 84 1275 102 1279 862 85
-CONVEX 574 'GT_PK(2,2)' 301 1281 284 1282 1186 283
-CONVEX 575 'GT_PK(2,2)' 301 1281 284 1283 1284 302
-CONVEX 576 'GT_PK(2,2)' 301 1285 300 1282 804 283
-CONVEX 577 'GT_PK(2,2)' 301 1285 300 1286 538 317
-CONVEX 578 'GT_PK(2,2)' 301 1287 318 1286 956 317
-CONVEX 579 'GT_PK(2,2)' 301 1283 302 1287 1193 318
-CONVEX 580 'GT_PK(2,2)' 320 1288 335 1289 966 321
-CONVEX 581 'GT_PK(2,2)' 320 1288 335 1290 963 334
-CONVEX 582 'GT_PK(2,2)' 320 1291 319 1290 1190 334
-CONVEX 583 'GT_PK(2,2)' 228 1292 227 1293 1204 247
-CONVEX 584 'GT_PK(2,2)' 228 1294 209 1295 690 229
-CONVEX 585 'GT_PK(2,2)' 228 1294 209 1296 694 208
-CONVEX 586 'GT_PK(2,2)' 228 1292 227 1296 1194 208
-CONVEX 587 'GT_PK(2,2)' 269 1297 250 1298 973 270
-CONVEX 588 'GT_PK(2,2)' 269 1299 288 1298 1227 270
-CONVEX 589 'GT_PK(2,2)' 225 1300 206 1301 1239 226
-CONVEX 590 'GT_PK(2,2)' 225 1302 245 1303 596 244
-CONVEX 591 'GT_PK(2,2)' 225 1301 226 1302 1206 245
-CONVEX 592 'GT_PK(2,2)' 166 1304 147 1305 1049 167
-CONVEX 593 'GT_PK(2,2)' 166 1306 186 1305 1043 167
-CONVEX 594 'GT_PK(2,2)' 166 1306 186 1307 1308 185
-CONVEX 595 'GT_PK(2,2)' 203 1309 184 1310 1240 204
-CONVEX 596 'GT_PK(2,2)' 203 1311 183 1309 1250 184
-CONVEX 597 'GT_PK(2,2)' 203 1310 204 1312 1313 223
-CONVEX 598 'GT_PK(2,2)' 203 1311 183 1314 1252 202
-CONVEX 599 'GT_PK(2,2)' 203 1315 222 1312 1082 223
-CONVEX 600 'GT_PK(2,2)' 203 1314 202 1315 816 222
-CONVEX 601 'GT_PK(2,2)' 138 1316 137 1317 633 118
-CONVEX 602 'GT_PK(2,2)' 138 1317 118 1318 628 119
-CONVEX 603 'GT_PK(2,2)' 138 1319 139 1318 1028 119
-CONVEX 604 'GT_PK(2,2)' 157 1320 176 1321 1095 156
-CONVEX 605 'GT_PK(2,2)' 157 1322 177 1320 1261 176
-CONVEX 606 'GT_PK(2,2)' 157 1321 156 1323 821 137
-CONVEX 607 'GT_PK(2,2)' 157 1324 138 1323 1316 137
-CONVEX 608 'GT_PK(2,2)' 249 1325 269 1326 1297 250
-CONVEX 609 'GT_PK(2,2)' 249 1327 230 1328 1215 229
-CONVEX 610 'GT_PK(2,2)' 249 1327 230 1326 1217 250
-CONVEX 611 'GT_PK(2,2)' 287 1329 288 1330 1229 305
-CONVEX 612 'GT_PK(2,2)' 287 1331 269 1329 1299 288
-CONVEX 613 'GT_PK(2,2)' 224 1332 243 1333 1087 223
-CONVEX 614 'GT_PK(2,2)' 224 1334 204 1333 1313 223
-CONVEX 615 'GT_PK(2,2)' 224 1332 243 1335 809 244
-CONVEX 616 'GT_PK(2,2)' 224 1336 225 1335 1303 244
-CONVEX 617 'GT_PK(2,2)' 205 1337 206 1338 1238 186
-CONVEX 618 'GT_PK(2,2)' 205 1339 225 1337 1300 206
-CONVEX 619 'GT_PK(2,2)' 205 1338 186 1340 1308 185
-CONVEX 620 'GT_PK(2,2)' 205 1341 224 1339 1336 225
-CONVEX 621 'GT_PK(2,2)' 205 1342 204 1340 1242 185
-CONVEX 622 'GT_PK(2,2)' 205 1341 224 1342 1334 204
-CONVEX 623 'GT_PK(2,2)' 146 1343 166 1344 1304 147
-CONVEX 624 'GT_PK(2,2)' 146 1344 147 1345 1046 127
-CONVEX 625 'GT_PK(2,2)' 146 1346 126 1345 423 127
-CONVEX 626 'GT_PK(2,2)' 146 1347 145 1346 1245 126
-CONVEX 627 'GT_PK(2,2)' 165 1348 184 1349 1251 164
-CONVEX 628 'GT_PK(2,2)' 165 1350 145 1349 1243 164
-CONVEX 629 'GT_PK(2,2)' 165 1348 184 1351 1241 185
-CONVEX 630 'GT_PK(2,2)' 165 1352 166 1351 1307 185
-CONVEX 631 'GT_PK(2,2)' 165 1353 146 1350 1347 145
-CONVEX 632 'GT_PK(2,2)' 165 1353 146 1352 1343 166
-CONVEX 633 'GT_PK(2,2)' 158 1354 157 1355 1322 177
-CONVEX 634 'GT_PK(2,2)' 158 1356 159 1357 757 178
-CONVEX 635 'GT_PK(2,2)' 158 1355 177 1357 1262 178
-CONVEX 636 'GT_PK(2,2)' 158 1354 157 1358 1324 138
-CONVEX 637 'GT_PK(2,2)' 158 1359 139 1356 1032 159
-CONVEX 638 'GT_PK(2,2)' 158 1358 138 1359 1319 139
-CONVEX 639 'GT_PK(2,2)' 267 1360 247 1361 1201 266
-CONVEX 640 'GT_PK(2,2)' 248 1362 249 1363 1328 229
-CONVEX 641 'GT_PK(2,2)' 248 1364 267 1365 1360 247
-CONVEX 642 'GT_PK(2,2)' 248 1366 228 1363 1295 229
-CONVEX 643 'GT_PK(2,2)' 248 1366 228 1365 1293 247
-CONVEX 644 'GT_PK(2,2)' 268 1367 287 1368 1331 269
-CONVEX 645 'GT_PK(2,2)' 268 1369 248 1370 1364 267
-CONVEX 646 'GT_PK(2,2)' 268 1371 249 1368 1325 269
-CONVEX 647 'GT_PK(2,2)' 268 1369 248 1371 1362 249
-CONVEX 648 'GT_PK(2,2)' 303 1372 319 1373 1191 302
-CONVEX 649 'GT_PK(2,2)' 303 1374 320 1372 1291 319
-CONVEX 650 'GT_PK(2,2)' 286 1375 268 1376 1367 287
-CONVEX 651 'GT_PK(2,2)' 286 1375 268 1377 1370 267
-CONVEX 652 'GT_PK(2,2)' 304 1378 287 1379 1330 305
-CONVEX 653 'GT_PK(2,2)' 304 1380 303 1381 1374 320
-CONVEX 654 'GT_PK(2,2)' 304 1382 286 1378 1376 287
-CONVEX 655 'GT_PK(2,2)' 304 1382 286 1380 1383 303
-CONVEX 656 'GT_PK(2,2)' 304 1379 305 1384 980 321
-CONVEX 657 'GT_PK(2,2)' 304 1381 320 1384 1289 321
-CONVEX 658 'GT_PK(2,2)' 285 1385 286 1386 1383 303
-CONVEX 659 'GT_PK(2,2)' 285 1387 284 1388 1284 302
-CONVEX 660 'GT_PK(2,2)' 285 1386 303 1388 1373 302
-CONVEX 661 'GT_PK(2,2)' 285 1385 286 1389 1377 267
-CONVEX 662 'GT_PK(2,2)' 285 1387 284 1390 1187 266
-CONVEX 663 'GT_PK(2,2)' 285 1389 267 1390 1361 266
+CONVEX 0 GT_PK(2,2) 258 1447 259 1448 1449 293
+CONVEX 1 GT_PK(2,2) 25 1450 10 1451 1452 0
+CONVEX 2 GT_PK(2,2) 18 1453 17 1454 1455 36
+CONVEX 3 GT_PK(2,2) 1426 1456 1440 1457 1458 4
+CONVEX 4 GT_PK(2,2) 824 1459 823 1460 1461 863
+CONVEX 5 GT_PK(2,2) 824 1462 784 1459 1463 823
+CONVEX 6 GT_PK(2,2) 1058 1464 1020 1465 1466 1021
+CONVEX 7 GT_PK(2,2) 728 1467 767 1468 1469 768
+CONVEX 8 GT_PK(2,2) 395 1470 394 1471 1472 357
+CONVEX 9 GT_PK(2,2) 225 1473 258 1474 1447 259
+CONVEX 10 GT_PK(2,2) 160 1475 192 1476 1477 191
+CONVEX 11 GT_PK(2,2) 224 1478 192 1479 1477 191
+CONVEX 12 GT_PK(2,2) 224 1480 225 1481 1473 258
+CONVEX 13 GT_PK(2,2) 224 1480 225 1478 1482 192
+CONVEX 14 GT_PK(2,2) 216 1483 185 1484 1485 186
+CONVEX 15 GT_PK(2,2) 280 1486 281 1487 1488 247
+CONVEX 16 GT_PK(2,2) 280 1486 281 1489 1490 315
+CONVEX 17 GT_PK(2,2) 64 1491 65 1492 1493 88
+CONVEX 18 GT_PK(2,2) 6 1494 20 1495 1496 5
+CONVEX 19 GT_PK(2,2) 21 1497 6 1498 1494 20
+CONVEX 20 GT_PK(2,2) 21 1497 6 1499 1500 7
+CONVEX 21 GT_PK(2,2) 1428 1501 1442 1502 1503 1443
+CONVEX 22 GT_PK(2,2) 1408 1504 1426 1505 1506 1407
+CONVEX 23 GT_PK(2,2) 1373 1507 1396 1508 1509 1397
+CONVEX 24 GT_PK(2,2) 1431 1510 1430 1511 1512 1412
+CONVEX 25 GT_PK(2,2) 1431 1513 1445 1514 1515 1446
+CONVEX 26 GT_PK(2,2) 1431 1510 1430 1513 1516 1445
+CONVEX 27 GT_PK(2,2) 1218 1517 1185 1518 1519 1184
+CONVEX 28 GT_PK(2,2) 1218 1517 1185 1520 1521 1219
+CONVEX 29 GT_PK(2,2) 745 1522 705 1523 1524 3
+CONVEX 30 GT_PK(2,2) 745 1525 784 1523 1526 3
+CONVEX 31 GT_PK(2,2) 782 1527 743 1528 1529 744
+CONVEX 32 GT_PK(2,2) 782 1527 743 1530 1531 781
+CONVEX 33 GT_PK(2,2) 1165 1532 1130 1533 1534 1129
+CONVEX 34 GT_PK(2,2) 1262 1535 1229 1536 1537 1230
+CONVEX 35 GT_PK(2,2) 1164 1538 1198 1539 1540 1199
+CONVEX 36 GT_PK(2,2) 1164 1541 1165 1542 1533 1129
+CONVEX 37 GT_PK(2,2) 1164 1541 1165 1539 1543 1199
+CONVEX 38 GT_PK(2,2) 1232 1544 1198 1545 1540 1199
+CONVEX 39 GT_PK(2,2) 1232 1546 1231 1547 1548 1264
+CONVEX 40 GT_PK(2,2) 1232 1546 1231 1544 1549 1198
+CONVEX 41 GT_PK(2,2) 936 1550 937 1551 1552 975
+CONVEX 42 GT_PK(2,2) 316 1553 281 1554 1490 315
+CONVEX 43 GT_PK(2,2) 428 1555 429 1556 1557 467
+CONVEX 44 GT_PK(2,2) 319 1558 320 1559 1560 355
+CONVEX 45 GT_PK(2,2) 319 1561 354 1559 1562 355
+CONVEX 46 GT_PK(2,2) 1059 1563 1058 1564 1465 1021
+CONVEX 47 GT_PK(2,2) 706 1565 746 1566 1567 2
+CONVEX 48 GT_PK(2,2) 706 1565 746 1568 1569 747
+CONVEX 49 GT_PK(2,2) 706 1570 667 1566 1571 2
+CONVEX 50 GT_PK(2,2) 706 1572 668 1570 1573 667
+CONVEX 51 GT_PK(2,2) 1406 1574 1385 1575 1576 1407
+CONVEX 52 GT_PK(2,2) 1406 1577 1424 1578 1579 1405
+CONVEX 53 GT_PK(2,2) 1278 1580 1279 1581 1582 1247
+CONVEX 54 GT_PK(2,2) 1196 1583 1229 1584 1537 1230
+CONVEX 55 GT_PK(2,2) 806 1585 767 1586 1587 766
+CONVEX 56 GT_PK(2,2) 806 1588 845 1589 1590 846
+CONVEX 57 GT_PK(2,2) 806 1591 805 1586 1592 766
+CONVEX 58 GT_PK(2,2) 806 1591 805 1588 1593 845
+CONVEX 59 GT_PK(2,2) 727 1594 767 1595 1587 766
+CONVEX 60 GT_PK(2,2) 727 1596 728 1594 1467 767
+CONVEX 61 GT_PK(2,2) 807 1597 767 1598 1469 768
+CONVEX 62 GT_PK(2,2) 807 1599 806 1597 1585 767
+CONVEX 63 GT_PK(2,2) 807 1600 847 1601 1602 846
+CONVEX 64 GT_PK(2,2) 807 1599 806 1601 1589 846
+CONVEX 65 GT_PK(2,2) 403 1603 365 1604 1605 366
+CONVEX 66 GT_PK(2,2) 439 1606 478 1607 1608 477
+CONVEX 67 GT_PK(2,2) 325 1609 326 1610 1611 362
+CONVEX 68 GT_PK(2,2) 363 1612 326 1613 1614 327
+CONVEX 69 GT_PK(2,2) 363 1612 326 1615 1611 362
+CONVEX 70 GT_PK(2,2) 128 1616 158 1617 1618 157
+CONVEX 71 GT_PK(2,2) 189 1619 190 1620 1621 222
+CONVEX 72 GT_PK(2,2) 189 1619 190 1622 1623 158
+CONVEX 73 GT_PK(2,2) 189 1624 156 1625 1626 157
+CONVEX 74 GT_PK(2,2) 189 1622 158 1625 1618 157
+CONVEX 75 GT_PK(2,2) 255 1627 256 1628 1629 222
+CONVEX 76 GT_PK(2,2) 253 1630 252 1631 1632 219
+CONVEX 77 GT_PK(2,2) 253 1633 220 1631 1634 219
+CONVEX 78 GT_PK(2,2) 187 1635 220 1636 1634 219
+CONVEX 79 GT_PK(2,2) 291 1637 326 1638 1614 327
+CONVEX 80 GT_PK(2,2) 161 1639 160 1640 1475 192
+CONVEX 81 GT_PK(2,2) 131 1641 161 1642 1639 160
+CONVEX 82 GT_PK(2,2) 131 1643 104 1644 1645 132
+CONVEX 83 GT_PK(2,2) 131 1641 161 1644 1646 132
+CONVEX 84 GT_PK(2,2) 129 1647 128 1648 1616 158
+CONVEX 85 GT_PK(2,2) 223 1649 224 1650 1479 191
+CONVEX 86 GT_PK(2,2) 223 1651 256 1652 1629 222
+CONVEX 87 GT_PK(2,2) 223 1653 190 1650 1654 191
+CONVEX 88 GT_PK(2,2) 223 1653 190 1652 1621 222
+CONVEX 89 GT_PK(2,2) 127 1655 155 1656 1657 154
+CONVEX 90 GT_PK(2,2) 127 1658 126 1656 1659 154
+CONVEX 91 GT_PK(2,2) 127 1660 100 1658 1661 126
+CONVEX 92 GT_PK(2,2) 181 1662 182 1663 1664 152
+CONVEX 93 GT_PK(2,2) 246 1665 280 1666 1487 247
+CONVEX 94 GT_PK(2,2) 124 1667 99 1668 1669 98
+CONVEX 95 GT_PK(2,2) 125 1670 124 1671 1672 152
+CONVEX 96 GT_PK(2,2) 125 1670 124 1673 1667 99
+CONVEX 97 GT_PK(2,2) 125 1673 99 1674 1675 76
+CONVEX 98 GT_PK(2,2) 125 1676 100 1674 1677 76
+CONVEX 99 GT_PK(2,2) 125 1676 100 1678 1661 126
+CONVEX 100 GT_PK(2,2) 75 1679 53 1680 1681 98
+CONVEX 101 GT_PK(2,2) 75 1682 99 1680 1669 98
+CONVEX 102 GT_PK(2,2) 75 1682 99 1683 1675 76
+CONVEX 103 GT_PK(2,2) 217 1684 218 1685 1686 186
+CONVEX 104 GT_PK(2,2) 217 1687 216 1685 1484 186
+CONVEX 105 GT_PK(2,2) 217 1687 216 1688 1689 249
+CONVEX 106 GT_PK(2,2) 248 1690 216 1691 1689 249
+CONVEX 107 GT_PK(2,2) 248 1692 281 1693 1488 247
+CONVEX 108 GT_PK(2,2) 282 1694 316 1695 1696 317
+CONVEX 109 GT_PK(2,2) 282 1694 316 1697 1553 281
+CONVEX 110 GT_PK(2,2) 282 1698 248 1699 1691 249
+CONVEX 111 GT_PK(2,2) 282 1698 248 1697 1692 281
+CONVEX 112 GT_PK(2,2) 314 1700 280 1701 1489 315
+CONVEX 113 GT_PK(2,2) 12 1702 27 1703 1704 13
+CONVEX 114 GT_PK(2,2) 35 1705 56 1706 1707 34
+CONVEX 115 GT_PK(2,2) 79 1708 56 1709 1710 80
+CONVEX 116 GT_PK(2,2) 79 1711 34 1712 1713 55
+CONVEX 117 GT_PK(2,2) 79 1708 56 1711 1707 34
+CONVEX 118 GT_PK(2,2) 43 1714 25 1715 1716 44
+CONVEX 119 GT_PK(2,2) 43 1717 65 1715 1718 44
+CONVEX 120 GT_PK(2,2) 43 1719 64 1717 1491 65
+CONVEX 121 GT_PK(2,2) 22 1720 21 1721 1499 7
+CONVEX 122 GT_PK(2,2) 22 1722 8 1721 1723 7
+CONVEX 123 GT_PK(2,2) 22 1722 8 1724 1725 23
+CONVEX 124 GT_PK(2,2) 22 1724 23 1726 1727 41
+CONVEX 125 GT_PK(2,2) 1427 1728 1428 1729 1501 1442
+CONVEX 126 GT_PK(2,2) 1427 1730 1408 1731 1504 1426
+CONVEX 127 GT_PK(2,2) 1427 1728 1428 1732 1733 1409
+CONVEX 128 GT_PK(2,2) 1427 1730 1408 1732 1734 1409
+CONVEX 129 GT_PK(2,2) 1386 1735 1385 1736 1576 1407
+CONVEX 130 GT_PK(2,2) 1386 1737 1408 1736 1505 1407
+CONVEX 131 GT_PK(2,2) 885 1738 845 1739 1590 846
+CONVEX 132 GT_PK(2,2) 1193 1740 1192 1741 1742 1158
+CONVEX 133 GT_PK(2,2) 1429 1743 1428 1744 1502 1443
+CONVEX 134 GT_PK(2,2) 1391 1745 1390 1746 1747 1412
+CONVEX 135 GT_PK(2,2) 1248 1748 1279 1749 1582 1247
+CONVEX 136 GT_PK(2,2) 1183 1750 1149 1751 1752 1148
+CONVEX 137 GT_PK(2,2) 1183 1750 1149 1753 1754 1184
+CONVEX 138 GT_PK(2,2) 1187 1755 1188 1756 1757 1221
+CONVEX 139 GT_PK(2,2) 468 1758 429 1759 1557 467
+CONVEX 140 GT_PK(2,2) 470 1760 469 1761 1762 431
+CONVEX 141 GT_PK(2,2) 507 1763 508 1764 1765 546
+CONVEX 142 GT_PK(2,2) 507 1766 545 1764 1767 546
+CONVEX 143 GT_PK(2,2) 507 1768 470 1769 1760 469
+CONVEX 144 GT_PK(2,2) 507 1768 470 1763 1770 508
+CONVEX 145 GT_PK(2,2) 507 1771 468 1769 1772 469
+CONVEX 146 GT_PK(2,2) 704 1773 745 1774 1522 705
+CONVEX 147 GT_PK(2,2) 704 1773 745 1775 1776 744
+CONVEX 148 GT_PK(2,2) 585 1777 545 1778 1767 546
+CONVEX 149 GT_PK(2,2) 898 1779 937 1780 1781 938
+CONVEX 150 GT_PK(2,2) 783 1782 784 1783 1463 823
+CONVEX 151 GT_PK(2,2) 783 1784 745 1782 1525 784
+CONVEX 152 GT_PK(2,2) 783 1784 745 1785 1776 744
+CONVEX 153 GT_PK(2,2) 783 1786 782 1785 1528 744
+CONVEX 154 GT_PK(2,2) 783 1783 823 1787 1788 822
+CONVEX 155 GT_PK(2,2) 783 1786 782 1787 1789 822
+CONVEX 156 GT_PK(2,2) 1263 1790 1262 1791 1536 1230
+CONVEX 157 GT_PK(2,2) 1263 1792 1231 1791 1793 1230
+CONVEX 158 GT_PK(2,2) 1263 1792 1231 1794 1548 1264
+CONVEX 159 GT_PK(2,2) 897 1795 936 1796 1797 896
+CONVEX 160 GT_PK(2,2) 897 1795 936 1798 1550 937
+CONVEX 161 GT_PK(2,2) 897 1799 898 1800 1801 858
+CONVEX 162 GT_PK(2,2) 897 1799 898 1798 1779 937
+CONVEX 163 GT_PK(2,2) 818 1802 779 1803 1804 778
+CONVEX 164 GT_PK(2,2) 821 1805 820 1806 1807 781
+CONVEX 165 GT_PK(2,2) 821 1808 782 1809 1789 822
+CONVEX 166 GT_PK(2,2) 821 1808 782 1806 1530 781
+CONVEX 167 GT_PK(2,2) 940 1810 939 1811 1812 978
+CONVEX 168 GT_PK(2,2) 940 1810 939 1813 1814 900
+CONVEX 169 GT_PK(2,2) 902 1815 942 1816 1817 903
+CONVEX 170 GT_PK(2,2) 902 1815 942 1818 1819 941
+CONVEX 171 GT_PK(2,2) 976 1820 937 1821 1781 938
+CONVEX 172 GT_PK(2,2) 976 1820 937 1822 1552 975
+CONVEX 173 GT_PK(2,2) 352 1823 316 1824 1696 317
+CONVEX 174 GT_PK(2,2) 430 1825 392 1826 1827 429
+CONVEX 175 GT_PK(2,2) 430 1828 469 1829 1762 431
+CONVEX 176 GT_PK(2,2) 430 1830 468 1826 1758 429
+CONVEX 177 GT_PK(2,2) 430 1830 468 1828 1772 469
+CONVEX 178 GT_PK(2,2) 393 1831 430 1832 1829 431
+CONVEX 179 GT_PK(2,2) 393 1831 430 1833 1825 392
+CONVEX 180 GT_PK(2,2) 391 1834 392 1835 1827 429
+CONVEX 181 GT_PK(2,2) 391 1836 428 1837 1838 390
+CONVEX 182 GT_PK(2,2) 391 1836 428 1835 1555 429
+CONVEX 183 GT_PK(2,2) 391 1839 354 1837 1840 390
+CONVEX 184 GT_PK(2,2) 391 1834 392 1841 1842 355
+CONVEX 185 GT_PK(2,2) 391 1839 354 1841 1562 355
+CONVEX 186 GT_PK(2,2) 318 1843 319 1844 1845 284
+CONVEX 187 GT_PK(2,2) 318 1843 319 1846 1561 354
+CONVEX 188 GT_PK(2,2) 285 1847 319 1848 1558 320
+CONVEX 189 GT_PK(2,2) 285 1849 284 1850 1851 251
+CONVEX 190 GT_PK(2,2) 285 1847 319 1849 1845 284
+CONVEX 191 GT_PK(2,2) 707 1852 706 1853 1568 747
+CONVEX 192 GT_PK(2,2) 707 1852 706 1854 1572 668
+CONVEX 193 GT_PK(2,2) 786 1855 746 1856 1857 785
+CONVEX 194 GT_PK(2,2) 786 1855 746 1858 1569 747
+CONVEX 195 GT_PK(2,2) 1265 1859 1233 1860 1861 1234
+CONVEX 196 GT_PK(2,2) 1201 1862 1233 1863 1861 1234
+CONVEX 197 GT_PK(2,2) 1201 1862 1233 1864 1865 1200
+CONVEX 198 GT_PK(2,2) 1134 1866 1135 1867 1868 1099
+CONVEX 199 GT_PK(2,2) 1132 1869 1166 1870 1871 1131
+CONVEX 200 GT_PK(2,2) 1095 1872 1059 1873 1563 1058
+CONVEX 201 GT_PK(2,2) 948 1874 909 1875 1876 910
+CONVEX 202 GT_PK(2,2) 1103 1877 1138 1878 1879 1102
+CONVEX 203 GT_PK(2,2) 717 1880 756 1881 1882 757
+CONVEX 204 GT_PK(2,2) 717 1883 677 1884 1885 678
+CONVEX 205 GT_PK(2,2) 717 1880 756 1886 1887 716
+CONVEX 206 GT_PK(2,2) 717 1883 677 1886 1888 716
+CONVEX 207 GT_PK(2,2) 796 1889 756 1890 1882 757
+CONVEX 208 GT_PK(2,2) 796 1891 797 1890 1892 757
+CONVEX 209 GT_PK(2,2) 796 1891 797 1893 1894 836
+CONVEX 210 GT_PK(2,2) 796 1895 835 1893 1896 836
+CONVEX 211 GT_PK(2,2) 599 1897 559 1898 1899 598
+CONVEX 212 GT_PK(2,2) 759 1900 760 1901 1902 720
+CONVEX 213 GT_PK(2,2) 759 1903 719 1901 1904 720
+CONVEX 214 GT_PK(2,2) 718 1905 678 1906 1907 679
+CONVEX 215 GT_PK(2,2) 718 1908 719 1906 1909 679
+CONVEX 216 GT_PK(2,2) 718 1910 717 1911 1881 757
+CONVEX 217 GT_PK(2,2) 718 1910 717 1905 1884 678
+CONVEX 218 GT_PK(2,2) 721 1912 760 1913 1902 720
+CONVEX 219 GT_PK(2,2) 721 1914 681 1913 1915 720
+CONVEX 220 GT_PK(2,2) 721 1914 681 1916 1917 682
+CONVEX 221 GT_PK(2,2) 721 1918 761 1912 1919 760
+CONVEX 222 GT_PK(2,2) 680 1920 640 1921 1922 641
+CONVEX 223 GT_PK(2,2) 680 1923 681 1921 1924 641
+CONVEX 224 GT_PK(2,2) 680 1920 640 1925 1926 679
+CONVEX 225 GT_PK(2,2) 680 1923 681 1927 1915 720
+CONVEX 226 GT_PK(2,2) 680 1928 719 1925 1909 679
+CONVEX 227 GT_PK(2,2) 680 1928 719 1927 1904 720
+CONVEX 228 GT_PK(2,2) 1425 1929 1426 1930 1506 1407
+CONVEX 229 GT_PK(2,2) 1425 1931 1406 1930 1575 1407
+CONVEX 230 GT_PK(2,2) 1425 1931 1406 1932 1577 1424
+CONVEX 231 GT_PK(2,2) 1425 1929 1426 1933 1456 1440
+CONVEX 232 GT_PK(2,2) 1425 1933 1440 1934 1935 1439
+CONVEX 233 GT_PK(2,2) 1425 1932 1424 1934 1936 1439
+CONVEX 234 GT_PK(2,2) 1384 1937 1361 1938 1939 1385
+CONVEX 235 GT_PK(2,2) 1384 1940 1405 1941 1942 1383
+CONVEX 236 GT_PK(2,2) 1384 1943 1406 1940 1578 1405
+CONVEX 237 GT_PK(2,2) 1384 1943 1406 1938 1574 1385
+CONVEX 238 GT_PK(2,2) 971 1944 970 1945 1946 1009
+CONVEX 239 GT_PK(2,2) 932 1947 970 1948 1949 931
+CONVEX 240 GT_PK(2,2) 932 1950 971 1951 1952 933
+CONVEX 241 GT_PK(2,2) 932 1950 971 1947 1944 970
+CONVEX 242 GT_PK(2,2) 969 1953 970 1954 1949 931
+CONVEX 243 GT_PK(2,2) 969 1955 930 1954 1956 931
+CONVEX 244 GT_PK(2,2) 969 1955 930 1957 1958 968
+CONVEX 245 GT_PK(2,2) 895 1959 894 1960 1961 855
+CONVEX 246 GT_PK(2,2) 1197 1962 1231 1963 1793 1230
+CONVEX 247 GT_PK(2,2) 1197 1964 1196 1963 1584 1230
+CONVEX 248 GT_PK(2,2) 1197 1962 1231 1965 1549 1198
+CONVEX 249 GT_PK(2,2) 609 1966 610 1967 1968 649
+CONVEX 250 GT_PK(2,2) 241 1969 275 1970 1971 242
+CONVEX 251 GT_PK(2,2) 241 1972 274 1969 1973 275
+CONVEX 252 GT_PK(2,2) 29 1974 14 1975 1976 15
+CONVEX 253 GT_PK(2,2) 66 1977 44 1978 1979 45
+CONVEX 254 GT_PK(2,2) 66 1980 65 1977 1718 44
+CONVEX 255 GT_PK(2,2) 460 1981 459 1982 1983 498
+CONVEX 256 GT_PK(2,2) 276 1984 275 1985 1971 242
+CONVEX 257 GT_PK(2,2) 455 1986 454 1987 1988 416
+CONVEX 258 GT_PK(2,2) 455 1986 454 1989 1990 493
+CONVEX 259 GT_PK(2,2) 307 1991 306 1992 1993 342
+CONVEX 260 GT_PK(2,2) 310 1994 345 1995 1996 346
+CONVEX 261 GT_PK(2,2) 310 1997 276 1998 1984 275
+CONVEX 262 GT_PK(2,2) 417 1999 455 2000 1987 416
+CONVEX 263 GT_PK(2,2) 417 1999 455 2001 2002 456
+CONVEX 264 GT_PK(2,2) 417 2003 379 2000 2004 416
+CONVEX 265 GT_PK(2,2) 417 2003 379 2005 2006 380
+CONVEX 266 GT_PK(2,2) 343 2007 307 2008 2009 308
+CONVEX 267 GT_PK(2,2) 343 2007 307 2010 1992 342
+CONVEX 268 GT_PK(2,2) 343 2011 379 2010 2012 342
+CONVEX 269 GT_PK(2,2) 343 2011 379 2013 2006 380
+CONVEX 270 GT_PK(2,2) 339 2014 304 2015 2016 303
+CONVEX 271 GT_PK(2,2) 341 2017 306 2018 1993 342
+CONVEX 272 GT_PK(2,2) 726 2019 727 2020 1595 766
+CONVEX 273 GT_PK(2,2) 688 2021 727 2022 1596 728
+CONVEX 274 GT_PK(2,2) 628 2023 668 2024 2025 629
+CONVEX 275 GT_PK(2,2) 628 2023 668 2026 1573 667
+CONVEX 276 GT_PK(2,2) 589 2027 628 2028 2024 629
+CONVEX 277 GT_PK(2,2) 589 2027 628 2029 2030 588
+CONVEX 278 GT_PK(2,2) 364 2031 363 2032 1613 327
+CONVEX 279 GT_PK(2,2) 364 2031 363 2033 2034 401
+CONVEX 280 GT_PK(2,2) 328 2035 364 2036 2037 365
+CONVEX 281 GT_PK(2,2) 328 2035 364 2038 2032 327
+CONVEX 282 GT_PK(2,2) 329 2039 365 2040 1605 366
+CONVEX 283 GT_PK(2,2) 329 2041 330 2040 2042 366
+CONVEX 284 GT_PK(2,2) 329 2043 328 2039 2036 365
+CONVEX 285 GT_PK(2,2) 329 2043 328 2044 2045 293
+CONVEX 286 GT_PK(2,2) 367 2046 330 2047 2042 366
+CONVEX 287 GT_PK(2,2) 601 2048 640 2049 1922 641
+CONVEX 288 GT_PK(2,2) 562 2050 522 2051 2052 561
+CONVEX 289 GT_PK(2,2) 562 2053 601 2051 2054 561
+CONVEX 290 GT_PK(2,2) 523 2055 562 2056 2050 522
+CONVEX 291 GT_PK(2,2) 523 2055 562 2057 2058 563
+CONVEX 292 GT_PK(2,2) 521 2059 522 2060 2052 561
+CONVEX 293 GT_PK(2,2) 397 2061 398 2062 2063 360
+CONVEX 294 GT_PK(2,2) 437 2064 398 2065 2066 399
+CONVEX 295 GT_PK(2,2) 361 2067 398 2068 2063 360
+CONVEX 296 GT_PK(2,2) 361 2069 325 2070 1610 362
+CONVEX 297 GT_PK(2,2) 361 2070 362 2071 2072 399
+CONVEX 298 GT_PK(2,2) 361 2067 398 2071 2066 399
+CONVEX 299 GT_PK(2,2) 286 2073 322 2074 2075 321
+CONVEX 300 GT_PK(2,2) 359 2076 397 2077 2078 396
+CONVEX 301 GT_PK(2,2) 359 2076 397 2079 2062 360
+CONVEX 302 GT_PK(2,2) 358 2080 321 2081 2082 357
+CONVEX 303 GT_PK(2,2) 358 2083 322 2080 2075 321
+CONVEX 304 GT_PK(2,2) 358 2084 395 2081 1471 357
+CONVEX 305 GT_PK(2,2) 358 2085 359 2083 2086 322
+CONVEX 306 GT_PK(2,2) 358 2084 395 2087 2088 396
+CONVEX 307 GT_PK(2,2) 358 2085 359 2087 2077 396
+CONVEX 308 GT_PK(2,2) 402 2089 403 2090 1603 365
+CONVEX 309 GT_PK(2,2) 402 2091 364 2092 2033 401
+CONVEX 310 GT_PK(2,2) 402 2091 364 2090 2037 365
+CONVEX 311 GT_PK(2,2) 400 2093 439 2094 2095 401
+CONVEX 312 GT_PK(2,2) 400 2096 363 2094 2034 401
+CONVEX 313 GT_PK(2,2) 400 2097 362 2098 2072 399
+CONVEX 314 GT_PK(2,2) 400 2096 363 2097 1615 362
+CONVEX 315 GT_PK(2,2) 438 2099 439 2100 1607 477
+CONVEX 316 GT_PK(2,2) 438 2101 437 2102 2065 399
+CONVEX 317 GT_PK(2,2) 438 2103 400 2102 2098 399
+CONVEX 318 GT_PK(2,2) 438 2103 400 2099 2093 439
+CONVEX 319 GT_PK(2,2) 101 2104 77 2105 2106 102
+CONVEX 320 GT_PK(2,2) 101 2107 129 2105 2108 102
+CONVEX 321 GT_PK(2,2) 101 2107 129 2109 1647 128
+CONVEX 322 GT_PK(2,2) 188 2110 189 2111 1624 156
+CONVEX 323 GT_PK(2,2) 188 2112 187 2111 2113 156
+CONVEX 324 GT_PK(2,2) 188 2112 187 2114 1635 220
+CONVEX 325 GT_PK(2,2) 254 2115 253 2116 1633 220
+CONVEX 326 GT_PK(2,2) 254 2117 255 2118 2119 289
+CONVEX 327 GT_PK(2,2) 287 2120 253 2121 1630 252
+CONVEX 328 GT_PK(2,2) 287 2122 286 2121 2123 252
+CONVEX 329 GT_PK(2,2) 287 2122 286 2124 2073 322
+CONVEX 330 GT_PK(2,2) 292 2125 291 2126 1638 327
+CONVEX 331 GT_PK(2,2) 292 2127 258 2128 1448 293
+CONVEX 332 GT_PK(2,2) 292 2129 328 2128 2045 293
+CONVEX 333 GT_PK(2,2) 292 2129 328 2126 2038 327
+CONVEX 334 GT_PK(2,2) 257 2130 224 2131 1481 258
+CONVEX 335 GT_PK(2,2) 257 2132 292 2131 2127 258
+CONVEX 336 GT_PK(2,2) 257 2132 292 2133 2125 291
+CONVEX 337 GT_PK(2,2) 257 2133 291 2134 2135 256
+CONVEX 338 GT_PK(2,2) 257 2136 223 2134 1651 256
+CONVEX 339 GT_PK(2,2) 257 2136 223 2130 1649 224
+CONVEX 340 GT_PK(2,2) 290 2137 325 2138 1609 326
+CONVEX 341 GT_PK(2,2) 290 2139 291 2138 1637 326
+CONVEX 342 GT_PK(2,2) 290 2137 325 2140 2141 289
+CONVEX 343 GT_PK(2,2) 290 2142 255 2140 2119 289
+CONVEX 344 GT_PK(2,2) 290 2142 255 2143 1627 256
+CONVEX 345 GT_PK(2,2) 290 2139 291 2143 2135 256
+CONVEX 346 GT_PK(2,2) 103 2144 131 2145 1643 104
+CONVEX 347 GT_PK(2,2) 103 2146 77 2147 2106 102
+CONVEX 348 GT_PK(2,2) 103 2148 54 2146 2149 77
+CONVEX 349 GT_PK(2,2) 130 2150 129 2151 2108 102
+CONVEX 350 GT_PK(2,2) 130 2152 131 2153 1642 160
+CONVEX 351 GT_PK(2,2) 130 2154 103 2151 2147 102
+CONVEX 352 GT_PK(2,2) 130 2154 103 2152 2144 131
+CONVEX 353 GT_PK(2,2) 159 2155 190 2156 1654 191
+CONVEX 354 GT_PK(2,2) 159 2157 130 2158 2150 129
+CONVEX 355 GT_PK(2,2) 159 2155 190 2159 1623 158
+CONVEX 356 GT_PK(2,2) 159 2158 129 2159 1648 158
+CONVEX 357 GT_PK(2,2) 159 2160 160 2156 1476 191
+CONVEX 358 GT_PK(2,2) 159 2157 130 2160 2153 160
+CONVEX 359 GT_PK(2,2) 214 2161 183 2162 2163 182
+CONVEX 360 GT_PK(2,2) 214 2164 246 2165 1666 247
+CONVEX 361 GT_PK(2,2) 184 2166 183 2167 2168 154
+CONVEX 362 GT_PK(2,2) 184 2169 216 2170 1483 185
+CONVEX 363 GT_PK(2,2) 184 2171 155 2167 1657 154
+CONVEX 364 GT_PK(2,2) 184 2170 185 2171 2172 155
+CONVEX 365 GT_PK(2,2) 153 2173 183 2174 2163 182
+CONVEX 366 GT_PK(2,2) 153 2174 182 2175 1664 152
+CONVEX 367 GT_PK(2,2) 153 2176 126 2177 1659 154
+CONVEX 368 GT_PK(2,2) 153 2173 183 2177 2168 154
+CONVEX 369 GT_PK(2,2) 153 2178 125 2175 1671 152
+CONVEX 370 GT_PK(2,2) 153 2178 125 2176 1678 126
+CONVEX 371 GT_PK(2,2) 151 2179 181 2180 1663 152
+CONVEX 372 GT_PK(2,2) 151 2181 124 2180 1672 152
+CONVEX 373 GT_PK(2,2) 73 2182 52 2183 2184 33
+CONVEX 374 GT_PK(2,2) 250 2185 217 2186 1684 218
+CONVEX 375 GT_PK(2,2) 250 2187 284 2188 1851 251
+CONVEX 376 GT_PK(2,2) 250 2186 218 2188 2189 251
+CONVEX 377 GT_PK(2,2) 250 2185 217 2190 1688 249
+CONVEX 378 GT_PK(2,2) 215 2191 248 2192 1690 216
+CONVEX 379 GT_PK(2,2) 215 2193 184 2192 2169 216
+CONVEX 380 GT_PK(2,2) 215 2193 184 2194 2166 183
+CONVEX 381 GT_PK(2,2) 215 2195 214 2194 2161 183
+CONVEX 382 GT_PK(2,2) 215 2191 248 2196 1693 247
+CONVEX 383 GT_PK(2,2) 215 2195 214 2196 2165 247
+CONVEX 384 GT_PK(2,2) 279 2197 314 2198 1700 280
+CONVEX 385 GT_PK(2,2) 279 2199 246 2200 2201 245
+CONVEX 386 GT_PK(2,2) 279 2199 246 2198 1665 280
+CONVEX 387 GT_PK(2,2) 279 2202 278 2200 2203 245
+CONVEX 388 GT_PK(2,2) 279 2202 278 2204 2205 313
+CONVEX 389 GT_PK(2,2) 279 2197 314 2204 2206 313
+CONVEX 390 GT_PK(2,2) 11 2207 25 2208 1451 0
+CONVEX 391 GT_PK(2,2) 57 2209 35 2210 1705 56
+CONVEX 392 GT_PK(2,2) 57 2210 56 2211 1710 80
+CONVEX 393 GT_PK(2,2) 57 2212 17 2213 1455 36
+CONVEX 394 GT_PK(2,2) 57 2209 35 2212 2214 17
+CONVEX 395 GT_PK(2,2) 105 2215 79 2216 1709 80
+CONVEX 396 GT_PK(2,2) 105 2215 79 2217 2218 104
+CONVEX 397 GT_PK(2,2) 105 2219 106 2216 2220 80
+CONVEX 398 GT_PK(2,2) 105 2217 104 2221 1645 132
+CONVEX 399 GT_PK(2,2) 78 2222 79 2223 2218 104
+CONVEX 400 GT_PK(2,2) 78 2224 103 2223 2145 104
+CONVEX 401 GT_PK(2,2) 78 2224 103 2225 2148 54
+CONVEX 402 GT_PK(2,2) 78 2225 54 2226 2227 55
+CONVEX 403 GT_PK(2,2) 78 2222 79 2226 1712 55
+CONVEX 404 GT_PK(2,2) 162 2228 161 2229 1646 132
+CONVEX 405 GT_PK(2,2) 302 2230 268 2231 2232 303
+CONVEX 406 GT_PK(2,2) 37 2233 18 2234 1454 36
+CONVEX 407 GT_PK(2,2) 37 2235 19 2233 2236 18
+CONVEX 408 GT_PK(2,2) 201 2237 202 2238 2239 234
+CONVEX 409 GT_PK(2,2) 201 2240 233 2238 2241 234
+CONVEX 410 GT_PK(2,2) 87 2242 64 2243 1492 88
+CONVEX 411 GT_PK(2,2) 139 2244 168 2245 2246 169
+CONVEX 412 GT_PK(2,2) 9 2247 8 2248 1725 23
+CONVEX 413 GT_PK(2,2) 24 2249 43 2250 1714 25
+CONVEX 414 GT_PK(2,2) 24 2250 25 2251 1450 10
+CONVEX 415 GT_PK(2,2) 24 2252 9 2251 2253 10
+CONVEX 416 GT_PK(2,2) 24 2252 9 2254 2248 23
+CONVEX 417 GT_PK(2,2) 42 2255 23 2256 1727 41
+CONVEX 418 GT_PK(2,2) 42 2257 43 2258 1719 64
+CONVEX 419 GT_PK(2,2) 42 2259 24 2255 2254 23
+CONVEX 420 GT_PK(2,2) 42 2259 24 2257 2249 43
+CONVEX 421 GT_PK(2,2) 39 2260 21 2261 1498 20
+CONVEX 422 GT_PK(2,2) 1441 2262 1427 2263 1729 1442
+CONVEX 423 GT_PK(2,2) 1441 2264 1426 2265 1457 4
+CONVEX 424 GT_PK(2,2) 1441 2262 1427 2264 1731 1426
+CONVEX 425 GT_PK(2,2) 1387 2266 1408 2267 1734 1409
+CONVEX 426 GT_PK(2,2) 1387 2268 1386 2266 1737 1408
+CONVEX 427 GT_PK(2,2) 1337 2269 1309 2270 2271 1336
+CONVEX 428 GT_PK(2,2) 1337 2269 1309 2272 2273 1310
+CONVEX 429 GT_PK(2,2) 1362 2274 1361 2275 1939 1385
+CONVEX 430 GT_PK(2,2) 1362 2276 1386 2275 1735 1385
+CONVEX 431 GT_PK(2,2) 1362 2274 1361 2277 2278 1336
+CONVEX 432 GT_PK(2,2) 1362 2279 1337 2277 2270 1336
+CONVEX 433 GT_PK(2,2) 1076 2280 1075 2281 2282 1112
+CONVEX 434 GT_PK(2,2) 1000 2283 1001 2284 2285 1039
+CONVEX 435 GT_PK(2,2) 1040 2286 1001 2287 2285 1039
+CONVEX 436 GT_PK(2,2) 1040 2288 1078 2289 2290 1041
+CONVEX 437 GT_PK(2,2) 927 2291 966 2292 2293 928
+CONVEX 438 GT_PK(2,2) 927 2294 888 2292 2295 928
+CONVEX 439 GT_PK(2,2) 927 2296 887 2294 2297 888
+CONVEX 440 GT_PK(2,2) 925 2298 924 2299 2300 885
+CONVEX 441 GT_PK(2,2) 1415 2301 1433 2302 2303 1434
+CONVEX 442 GT_PK(2,2) 1415 2304 1414 2301 2305 1433
+CONVEX 443 GT_PK(2,2) 1432 2306 1414 2307 2305 1433
+CONVEX 444 GT_PK(2,2) 1222 2308 1188 2309 2310 1189
+CONVEX 445 GT_PK(2,2) 1222 2308 1188 2311 1757 1221
+CONVEX 446 GT_PK(2,2) 1348 2312 1373 2313 1508 1397
+CONVEX 447 GT_PK(2,2) 1347 2314 1348 2315 2312 1373
+CONVEX 448 GT_PK(2,2) 1347 2314 1348 2316 2317 1320
+CONVEX 449 GT_PK(2,2) 1416 2318 1395 2319 2320 1417
+CONVEX 450 GT_PK(2,2) 1371 2321 1345 2322 2323 1346
+CONVEX 451 GT_PK(2,2) 1371 2321 1345 2324 2325 1370
+CONVEX 452 GT_PK(2,2) 1372 2326 1347 2327 2328 1346
+CONVEX 453 GT_PK(2,2) 1372 2326 1347 2329 2315 1373
+CONVEX 454 GT_PK(2,2) 1372 2330 1371 2327 2322 1346
+CONVEX 455 GT_PK(2,2) 1372 2330 1371 2331 2332 1395
+CONVEX 456 GT_PK(2,2) 1372 2329 1373 2333 1507 1396
+CONVEX 457 GT_PK(2,2) 1372 2333 1396 2334 2335 1417
+CONVEX 458 GT_PK(2,2) 1372 2331 1395 2334 2320 1417
+CONVEX 459 GT_PK(2,2) 1344 2336 1369 2337 2338 1370
+CONVEX 460 GT_PK(2,2) 1344 2339 1345 2337 2325 1370
+CONVEX 461 GT_PK(2,2) 1344 2340 1343 2341 2342 1316
+CONVEX 462 GT_PK(2,2) 1344 2340 1343 2336 2343 1369
+CONVEX 463 GT_PK(2,2) 1317 2344 1344 2345 2341 1316
+CONVEX 464 GT_PK(2,2) 1317 2344 1344 2346 2339 1345
+CONVEX 465 GT_PK(2,2) 1444 2347 1429 2348 1744 1443
+CONVEX 466 GT_PK(2,2) 1444 2349 1430 2350 1516 1445
+CONVEX 467 GT_PK(2,2) 1444 2347 1429 2349 2351 1430
+CONVEX 468 GT_PK(2,2) 1410 2352 1428 2353 1733 1409
+CONVEX 469 GT_PK(2,2) 1410 2354 1429 2352 1743 1428
+CONVEX 470 GT_PK(2,2) 1368 2355 1369 2356 2357 1392
+CONVEX 471 GT_PK(2,2) 1368 2358 1391 2356 2359 1392
+CONVEX 472 GT_PK(2,2) 1368 2360 1343 2355 2343 1369
+CONVEX 473 GT_PK(2,2) 1413 2361 1432 2362 2306 1414
+CONVEX 474 GT_PK(2,2) 1413 2363 1431 2364 1511 1412
+CONVEX 475 GT_PK(2,2) 1413 2365 1391 2364 1746 1412
+CONVEX 476 GT_PK(2,2) 1413 2362 1414 2366 2367 1392
+CONVEX 477 GT_PK(2,2) 1413 2365 1391 2366 2359 1392
+CONVEX 478 GT_PK(2,2) 1413 2363 1431 2368 1514 1446
+CONVEX 479 GT_PK(2,2) 1413 2361 1432 2368 2369 1446
+CONVEX 480 GT_PK(2,2) 1113 2370 1112 2371 2372 1148
+CONVEX 481 GT_PK(2,2) 1113 2373 1149 2371 1752 1148
+CONVEX 482 GT_PK(2,2) 1113 2374 1076 2370 2281 1112
+CONVEX 483 GT_PK(2,2) 1150 2375 1185 2376 1519 1184
+CONVEX 484 GT_PK(2,2) 1150 2377 1149 2376 1754 1184
+CONVEX 485 GT_PK(2,2) 1079 2378 1078 2379 2380 1115
+CONVEX 486 GT_PK(2,2) 1079 2381 1116 2379 2382 1115
+CONVEX 487 GT_PK(2,2) 1079 2381 1116 2383 2384 1080
+CONVEX 488 GT_PK(2,2) 1079 2378 1078 2385 2290 1041
+CONVEX 489 GT_PK(2,2) 1280 2386 1248 2387 1748 1279
+CONVEX 490 GT_PK(2,2) 1280 2388 1309 2387 2389 1279
+CONVEX 491 GT_PK(2,2) 1280 2388 1309 2390 2273 1310
+CONVEX 492 GT_PK(2,2) 1217 2391 1183 2392 2393 1216
+CONVEX 493 GT_PK(2,2) 1217 2394 1218 2395 2396 1250
+CONVEX 494 GT_PK(2,2) 1217 2394 1218 2397 1518 1184
+CONVEX 495 GT_PK(2,2) 1217 2391 1183 2397 1753 1184
+CONVEX 496 GT_PK(2,2) 1253 2398 1284 2399 2400 1285
+CONVEX 497 GT_PK(2,2) 1253 2401 1252 2398 2402 1284
+CONVEX 498 GT_PK(2,2) 1311 2403 1312 2404 2405 1339
+CONVEX 499 GT_PK(2,2) 1311 2406 1282 2403 2407 1312
+CONVEX 500 GT_PK(2,2) 1153 2408 1187 2409 2410 1152
+CONVEX 501 GT_PK(2,2) 1153 2408 1187 2411 1755 1188
+CONVEX 502 GT_PK(2,2) 1154 2412 1188 2413 2310 1189
+CONVEX 503 GT_PK(2,2) 1154 2414 1153 2412 2411 1188
+CONVEX 504 GT_PK(2,2) 1220 2415 1187 2416 1756 1221
+CONVEX 505 GT_PK(2,2) 1220 2417 1253 2416 2418 1221
+CONVEX 506 GT_PK(2,2) 1220 2419 1252 2420 2421 1219
+CONVEX 507 GT_PK(2,2) 1220 2417 1253 2419 2401 1252
+CONVEX 508 GT_PK(2,2) 665 2422 704 2423 1774 705
+CONVEX 509 GT_PK(2,2) 547 2424 508 2425 1765 546
+CONVEX 510 GT_PK(2,2) 586 2426 587 2427 2428 625
+CONVEX 511 GT_PK(2,2) 586 2429 585 2427 2430 625
+CONVEX 512 GT_PK(2,2) 586 2429 585 2431 1778 546
+CONVEX 513 GT_PK(2,2) 586 2432 547 2431 2425 546
+CONVEX 514 GT_PK(2,2) 586 2432 547 2426 2433 587
+CONVEX 515 GT_PK(2,2) 624 2434 585 2435 2430 625
+CONVEX 516 GT_PK(2,2) 899 2436 898 2437 1780 938
+CONVEX 517 GT_PK(2,2) 899 2438 939 2437 2439 938
+CONVEX 518 GT_PK(2,2) 899 2438 939 2440 1814 900
+CONVEX 519 GT_PK(2,2) 739 2441 779 2442 1804 778
+CONVEX 520 GT_PK(2,2) 739 2443 738 2442 2444 778
+CONVEX 521 GT_PK(2,2) 819 2445 818 2446 2447 858
+CONVEX 522 GT_PK(2,2) 819 2445 818 2448 1802 779
+CONVEX 523 GT_PK(2,2) 623 2449 624 2450 2451 663
+CONVEX 524 GT_PK(2,2) 742 2452 743 2453 1531 781
+CONVEX 525 GT_PK(2,2) 742 2454 741 2453 2455 781
+CONVEX 526 GT_PK(2,2) 780 2456 820 2457 1807 781
+CONVEX 527 GT_PK(2,2) 780 2458 741 2457 2455 781
+CONVEX 528 GT_PK(2,2) 780 2459 819 2456 2460 820
+CONVEX 529 GT_PK(2,2) 780 2459 819 2461 2448 779
+CONVEX 530 GT_PK(2,2) 662 2462 623 2463 2450 663
+CONVEX 531 GT_PK(2,2) 979 2464 1017 2465 2466 978
+CONVEX 532 GT_PK(2,2) 979 2467 940 2465 1811 978
+CONVEX 533 GT_PK(2,2) 979 2467 940 2468 2469 941
+CONVEX 534 GT_PK(2,2) 1056 2470 1057 2471 2472 1094
+CONVEX 535 GT_PK(2,2) 1055 2473 1056 2474 2475 1017
+CONVEX 536 GT_PK(2,2) 1295 2476 1294 2477 2478 1262
+CONVEX 537 GT_PK(2,2) 1295 2479 1263 2477 1790 1262
+CONVEX 538 GT_PK(2,2) 1295 2479 1263 2480 1794 1264
+CONVEX 539 GT_PK(2,2) 817 2481 818 2482 1803 778
+CONVEX 540 GT_PK(2,2) 860 2483 821 2484 1805 820
+CONVEX 541 GT_PK(2,2) 860 2485 899 2486 2440 900
+CONVEX 542 GT_PK(2,2) 977 2487 939 2488 1812 978
+CONVEX 543 GT_PK(2,2) 977 2487 939 2489 2439 938
+CONVEX 544 GT_PK(2,2) 977 2490 976 2489 1821 938
+CONVEX 545 GT_PK(2,2) 977 2490 976 2491 2492 1015
+CONVEX 546 GT_PK(2,2) 980 2493 942 2494 1819 941
+CONVEX 547 GT_PK(2,2) 980 2495 979 2496 2497 1019
+CONVEX 548 GT_PK(2,2) 980 2495 979 2494 2468 941
+CONVEX 549 GT_PK(2,2) 861 2498 821 2499 1809 822
+CONVEX 550 GT_PK(2,2) 861 2500 860 2501 2486 900
+CONVEX 551 GT_PK(2,2) 861 2500 860 2498 2483 821
+CONVEX 552 GT_PK(2,2) 901 2502 940 2503 2469 941
+CONVEX 553 GT_PK(2,2) 901 2504 902 2503 1818 941
+CONVEX 554 GT_PK(2,2) 901 2502 940 2505 1813 900
+CONVEX 555 GT_PK(2,2) 901 2506 861 2505 2501 900
+CONVEX 556 GT_PK(2,2) 427 2507 428 2508 1838 390
+CONVEX 557 GT_PK(2,2) 356 2509 392 2510 1842 355
+CONVEX 558 GT_PK(2,2) 356 2511 393 2509 1833 392
+CONVEX 559 GT_PK(2,2) 356 2512 320 2510 1560 355
+CONVEX 560 GT_PK(2,2) 353 2513 318 2514 2515 317
+CONVEX 561 GT_PK(2,2) 353 2516 352 2514 1824 317
+CONVEX 562 GT_PK(2,2) 353 2517 354 2518 1840 390
+CONVEX 563 GT_PK(2,2) 353 2513 318 2517 1846 354
+CONVEX 564 GT_PK(2,2) 838 2519 839 2520 2521 878
+CONVEX 565 GT_PK(2,2) 517 2522 556 2523 2524 557
+CONVEX 566 GT_PK(2,2) 516 2525 478 2526 1608 477
+CONVEX 567 GT_PK(2,2) 516 2527 517 2525 2528 478
+CONVEX 568 GT_PK(2,2) 516 2527 517 2529 2522 556
+CONVEX 569 GT_PK(2,2) 596 2530 556 2531 2524 557
+CONVEX 570 GT_PK(2,2) 596 2532 597 2531 2533 557
+CONVEX 571 GT_PK(2,2) 596 2532 597 2534 2535 636
+CONVEX 572 GT_PK(2,2) 714 2536 715 2537 2538 675
+CONVEX 573 GT_PK(2,2) 982 2539 983 2540 2541 1021
+CONVEX 574 GT_PK(2,2) 982 2542 1020 2540 1466 1021
+CONVEX 575 GT_PK(2,2) 982 2543 981 2542 2544 1020
+CONVEX 576 GT_PK(2,2) 787 2545 786 2546 2547 826
+CONVEX 577 GT_PK(2,2) 787 2545 786 2548 1858 747
+CONVEX 578 GT_PK(2,2) 1100 2549 1135 2550 2551 1136
+CONVEX 579 GT_PK(2,2) 1100 2549 1135 2552 1868 1099
+CONVEX 580 GT_PK(2,2) 1098 2553 1134 2554 1867 1099
+CONVEX 581 GT_PK(2,2) 1098 2555 1062 2554 2556 1099
+CONVEX 582 GT_PK(2,2) 1133 2557 1134 2558 2559 1168
+CONVEX 583 GT_PK(2,2) 1133 2560 1098 2557 2553 1134
+CONVEX 584 GT_PK(2,2) 1097 2561 1133 2562 2563 1132
+CONVEX 585 GT_PK(2,2) 1097 2561 1133 2564 2560 1098
+CONVEX 586 GT_PK(2,2) 1167 2565 1201 2566 1864 1200
+CONVEX 587 GT_PK(2,2) 1167 2567 1166 2566 2568 1200
+CONVEX 588 GT_PK(2,2) 1167 2569 1132 2567 1869 1166
+CONVEX 589 GT_PK(2,2) 1167 2570 1133 2569 2563 1132
+CONVEX 590 GT_PK(2,2) 1167 2565 1201 2571 2572 1168
+CONVEX 591 GT_PK(2,2) 1167 2570 1133 2571 2558 1168
+CONVEX 592 GT_PK(2,2) 1096 2573 1095 2574 1872 1059
+CONVEX 593 GT_PK(2,2) 1096 2575 1097 2576 2562 1132
+CONVEX 594 GT_PK(2,2) 1096 2576 1132 2577 1870 1131
+CONVEX 595 GT_PK(2,2) 1096 2573 1095 2577 2578 1131
+CONVEX 596 GT_PK(2,2) 1096 2574 1059 2579 2580 1060
+CONVEX 597 GT_PK(2,2) 1096 2575 1097 2579 2581 1060
+CONVEX 598 GT_PK(2,2) 1065 2582 1027 2583 2584 1064
+CONVEX 599 GT_PK(2,2) 1065 2582 1027 2585 2586 1028
+CONVEX 600 GT_PK(2,2) 751 2587 711 2588 2589 712
+CONVEX 601 GT_PK(2,2) 1063 2590 1062 2591 2556 1099
+CONVEX 602 GT_PK(2,2) 1063 2592 1100 2591 2552 1099
+CONVEX 603 GT_PK(2,2) 1063 2592 1100 2593 2594 1064
+CONVEX 604 GT_PK(2,2) 1022 2595 1023 2596 2597 1060
+CONVEX 605 GT_PK(2,2) 1022 2598 1059 2599 1564 1021
+CONVEX 606 GT_PK(2,2) 1022 2598 1059 2596 2580 1060
+CONVEX 607 GT_PK(2,2) 1022 2600 983 2599 2541 1021
+CONVEX 608 GT_PK(2,2) 985 2601 1023 2602 2603 1024
+CONVEX 609 GT_PK(2,2) 949 2604 950 2605 2606 988
+CONVEX 610 GT_PK(2,2) 949 2604 950 2607 2608 911
+CONVEX 611 GT_PK(2,2) 949 2607 911 2609 2610 910
+CONVEX 612 GT_PK(2,2) 949 2611 948 2609 1875 910
+CONVEX 613 GT_PK(2,2) 1030 2612 1029 2613 2614 1067
+CONVEX 614 GT_PK(2,2) 989 2615 950 2616 2606 988
+CONVEX 615 GT_PK(2,2) 989 2617 1027 2616 2618 988
+CONVEX 616 GT_PK(2,2) 989 2617 1027 2619 2586 1028
+CONVEX 617 GT_PK(2,2) 912 2620 872 2621 2622 873
+CONVEX 618 GT_PK(2,2) 912 2623 950 2624 2608 911
+CONVEX 619 GT_PK(2,2) 912 2620 872 2624 2625 911
+CONVEX 620 GT_PK(2,2) 1206 2626 1207 2627 2628 1173
+CONVEX 621 GT_PK(2,2) 758 2629 797 2630 1892 757
+CONVEX 622 GT_PK(2,2) 758 2631 718 2630 1911 757
+CONVEX 623 GT_PK(2,2) 758 2631 718 2632 1908 719
+CONVEX 624 GT_PK(2,2) 758 2633 759 2632 1903 719
+CONVEX 625 GT_PK(2,2) 758 2629 797 2634 2635 798
+CONVEX 626 GT_PK(2,2) 758 2633 759 2634 2636 798
+CONVEX 627 GT_PK(2,2) 875 2637 835 2638 1896 836
+CONVEX 628 GT_PK(2,2) 875 2639 914 2640 2641 915
+CONVEX 629 GT_PK(2,2) 875 2637 835 2642 2643 874
+CONVEX 630 GT_PK(2,2) 875 2639 914 2642 2644 874
+CONVEX 631 GT_PK(2,2) 754 2645 714 2646 2536 715
+CONVEX 632 GT_PK(2,2) 794 2647 754 2648 2649 793
+CONVEX 633 GT_PK(2,2) 638 2650 599 2651 1898 598
+CONVEX 634 GT_PK(2,2) 638 2652 677 2653 1885 678
+CONVEX 635 GT_PK(2,2) 639 2654 678 2655 1907 679
+CONVEX 636 GT_PK(2,2) 639 2656 640 2655 1926 679
+CONVEX 637 GT_PK(2,2) 639 2657 638 2654 2653 678
+CONVEX 638 GT_PK(2,2) 639 2657 638 2658 2650 599
+CONVEX 639 GT_PK(2,2) 560 2659 559 2660 2661 520
+CONVEX 640 GT_PK(2,2) 560 2662 599 2659 1897 559
+CONVEX 641 GT_PK(2,2) 560 2663 521 2660 2664 520
+CONVEX 642 GT_PK(2,2) 560 2663 521 2665 2060 561
+CONVEX 643 GT_PK(2,2) 762 2666 761 2667 2668 801
+CONVEX 644 GT_PK(2,2) 722 2669 721 2670 1916 682
+CONVEX 645 GT_PK(2,2) 722 2669 721 2671 1918 761
+CONVEX 646 GT_PK(2,2) 722 2672 683 2670 2673 682
+CONVEX 647 GT_PK(2,2) 722 2674 762 2671 2666 761
+CONVEX 648 GT_PK(2,2) 1404 2675 1405 2676 1942 1383
+CONVEX 649 GT_PK(2,2) 1423 2677 1424 2678 1579 1405
+CONVEX 650 GT_PK(2,2) 1423 2679 1404 2678 2675 1405
+CONVEX 651 GT_PK(2,2) 1423 2679 1404 2680 2681 1422
+CONVEX 652 GT_PK(2,2) 1360 2682 1384 2683 1941 1383
+CONVEX 653 GT_PK(2,2) 1360 2682 1384 2684 1937 1361
+CONVEX 654 GT_PK(2,2) 1335 2685 1360 2686 2687 1334
+CONVEX 655 GT_PK(2,2) 1335 2688 1361 2689 2278 1336
+CONVEX 656 GT_PK(2,2) 1335 2685 1360 2688 2684 1361
+CONVEX 657 GT_PK(2,2) 1212 2690 1178 2691 2692 1211
+CONVEX 658 GT_PK(2,2) 1212 2693 1244 2691 2694 1211
+CONVEX 659 GT_PK(2,2) 1179 2695 1212 2696 2697 1213
+CONVEX 660 GT_PK(2,2) 1179 2695 1212 2698 2690 1178
+CONVEX 661 GT_PK(2,2) 1245 2699 1212 2700 2697 1213
+CONVEX 662 GT_PK(2,2) 1245 2699 1212 2701 2693 1244
+CONVEX 663 GT_PK(2,2) 1182 2702 1183 2703 2393 1216
+CONVEX 664 GT_PK(2,2) 1182 2702 1183 2704 1751 1148
+CONVEX 665 GT_PK(2,2) 1147 2705 1112 2706 2372 1148
+CONVEX 666 GT_PK(2,2) 1147 2707 1182 2706 2704 1148
+CONVEX 667 GT_PK(2,2) 1147 2707 1182 2708 2709 1181
+CONVEX 668 GT_PK(2,2) 1308 2710 1278 2711 1580 1279
+CONVEX 669 GT_PK(2,2) 1308 2712 1309 2711 2389 1279
+CONVEX 670 GT_PK(2,2) 1308 2712 1309 2713 2271 1336
+CONVEX 671 GT_PK(2,2) 1308 2714 1335 2713 2689 1336
+CONVEX 672 GT_PK(2,2) 1268 2715 1298 2716 2717 1297
+CONVEX 673 GT_PK(2,2) 1268 2718 1236 2719 2720 1237
+CONVEX 674 GT_PK(2,2) 1268 2721 1269 2719 2722 1237
+CONVEX 675 GT_PK(2,2) 1268 2721 1269 2715 2723 1298
+CONVEX 676 GT_PK(2,2) 1299 2724 1269 2725 2726 1270
+CONVEX 677 GT_PK(2,2) 1299 2724 1269 2727 2723 1298
+CONVEX 678 GT_PK(2,2) 1137 2728 1171 2729 2730 1136
+CONVEX 679 GT_PK(2,2) 1137 2731 1138 2732 1879 1102
+CONVEX 680 GT_PK(2,2) 1169 2733 1134 2734 2559 1168
+CONVEX 681 GT_PK(2,2) 1169 2733 1134 2735 1866 1135
+CONVEX 682 GT_PK(2,2) 1267 2736 1268 2737 2716 1297
+CONVEX 683 GT_PK(2,2) 1267 2736 1268 2738 2718 1236
+CONVEX 684 GT_PK(2,2) 1204 2739 1236 2740 2720 1237
+CONVEX 685 GT_PK(2,2) 1240 2741 1207 2742 2743 1208
+CONVEX 686 GT_PK(2,2) 1271 2744 1240 2745 2746 1272
+CONVEX 687 GT_PK(2,2) 1243 2747 1244 2748 2694 1211
+CONVEX 688 GT_PK(2,2) 972 2749 971 2750 1952 933
+CONVEX 689 GT_PK(2,2) 1083 2751 1046 2752 2753 1045
+CONVEX 690 GT_PK(2,2) 1002 2754 1003 2755 2756 964
+CONVEX 691 GT_PK(2,2) 1002 2757 1040 2758 2286 1001
+CONVEX 692 GT_PK(2,2) 1002 2754 1003 2759 2760 1041
+CONVEX 693 GT_PK(2,2) 1002 2757 1040 2759 2289 1041
+CONVEX 694 GT_PK(2,2) 1081 2761 1043 2762 2763 1080
+CONVEX 695 GT_PK(2,2) 929 2764 930 2765 1958 968
+CONVEX 696 GT_PK(2,2) 1008 2766 969 2767 1953 970
+CONVEX 697 GT_PK(2,2) 1008 2767 970 2768 1946 1009
+CONVEX 698 GT_PK(2,2) 1157 2769 1192 2770 1742 1158
+CONVEX 699 GT_PK(2,2) 1010 2771 1049 2772 2773 1011
+CONVEX 700 GT_PK(2,2) 1010 2774 972 2772 2775 1011
+CONVEX 701 GT_PK(2,2) 1010 2776 971 2777 1945 1009
+CONVEX 702 GT_PK(2,2) 1010 2774 972 2776 2749 971
+CONVEX 703 GT_PK(2,2) 974 2778 936 2779 1551 975
+CONVEX 704 GT_PK(2,2) 974 2780 1013 2779 2781 975
+CONVEX 705 GT_PK(2,2) 1014 2782 1013 2783 2784 1052
+CONVEX 706 GT_PK(2,2) 1014 2782 1013 2785 2781 975
+CONVEX 707 GT_PK(2,2) 1014 2786 976 2785 1822 975
+CONVEX 708 GT_PK(2,2) 1014 2786 976 2787 2492 1015
+CONVEX 709 GT_PK(2,2) 1051 2788 1013 2789 2784 1052
+CONVEX 710 GT_PK(2,2) 1124 2790 1123 2791 2792 1087
+CONVEX 711 GT_PK(2,2) 1163 2793 1164 2794 1538 1198
+CONVEX 712 GT_PK(2,2) 1163 2795 1197 2794 1965 1198
+CONVEX 713 GT_PK(2,2) 725 2796 685 2797 2798 724
+CONVEX 714 GT_PK(2,2) 725 2799 764 2797 2800 724
+CONVEX 715 GT_PK(2,2) 684 2801 685 2802 2803 645
+CONVEX 716 GT_PK(2,2) 684 2801 685 2804 2798 724
+CONVEX 717 GT_PK(2,2) 570 2805 571 2806 2807 610
+CONVEX 718 GT_PK(2,2) 570 2808 609 2806 1966 610
+CONVEX 719 GT_PK(2,2) 570 2809 531 2810 2811 530
+CONVEX 720 GT_PK(2,2) 570 2809 531 2805 2812 571
+CONVEX 721 GT_PK(2,2) 646 2813 685 2814 2803 645
+CONVEX 722 GT_PK(2,2) 646 2815 606 2814 2816 645
+CONVEX 723 GT_PK(2,2) 30 2817 29 2818 1975 15
+CONVEX 724 GT_PK(2,2) 30 2817 29 2819 2820 48
+CONVEX 725 GT_PK(2,2) 28 2821 29 2822 1974 14
+CONVEX 726 GT_PK(2,2) 28 2822 14 2823 2824 13
+CONVEX 727 GT_PK(2,2) 28 2825 27 2823 1704 13
+CONVEX 728 GT_PK(2,2) 89 2826 66 2827 2828 90
+CONVEX 729 GT_PK(2,2) 89 2829 114 2830 2831 88
+CONVEX 730 GT_PK(2,2) 89 2832 65 2830 1493 88
+CONVEX 731 GT_PK(2,2) 89 2826 66 2832 1980 65
+CONVEX 732 GT_PK(2,2) 528 2833 529 2834 2835 490
+CONVEX 733 GT_PK(2,2) 489 2836 451 2837 2838 490
+CONVEX 734 GT_PK(2,2) 489 2839 528 2840 2841 527
+CONVEX 735 GT_PK(2,2) 489 2839 528 2837 2834 490
+CONVEX 736 GT_PK(2,2) 452 2842 451 2843 2844 413
+CONVEX 737 GT_PK(2,2) 452 2842 451 2845 2838 490
+CONVEX 738 GT_PK(2,2) 414 2846 452 2847 2843 413
+CONVEX 739 GT_PK(2,2) 414 2846 452 2848 2849 453
+CONVEX 740 GT_PK(2,2) 491 2850 529 2851 2852 530
+CONVEX 741 GT_PK(2,2) 491 2850 529 2853 2835 490
+CONVEX 742 GT_PK(2,2) 491 2854 452 2853 2845 490
+CONVEX 743 GT_PK(2,2) 491 2854 452 2855 2849 453
+CONVEX 744 GT_PK(2,2) 385 2856 423 2857 2858 422
+CONVEX 745 GT_PK(2,2) 311 2859 310 2860 1995 346
+CONVEX 746 GT_PK(2,2) 311 2859 310 2861 1997 276
+CONVEX 747 GT_PK(2,2) 382 2862 345 2863 1996 346
+CONVEX 748 GT_PK(2,2) 382 2864 383 2863 2865 346
+CONVEX 749 GT_PK(2,2) 382 2866 381 2862 2867 345
+CONVEX 750 GT_PK(2,2) 382 2868 420 2864 2869 383
+CONVEX 751 GT_PK(2,2) 382 2866 381 2870 2871 419
+CONVEX 752 GT_PK(2,2) 382 2868 420 2870 2872 419
+CONVEX 753 GT_PK(2,2) 347 2873 383 2874 2865 346
+CONVEX 754 GT_PK(2,2) 347 2875 311 2874 2860 346
+CONVEX 755 GT_PK(2,2) 494 2876 455 2877 2002 456
+CONVEX 756 GT_PK(2,2) 494 2878 495 2877 2879 456
+CONVEX 757 GT_PK(2,2) 494 2876 455 2880 1989 493
+CONVEX 758 GT_PK(2,2) 494 2878 495 2881 2882 533
+CONVEX 759 GT_PK(2,2) 497 2883 459 2884 1983 498
+CONVEX 760 GT_PK(2,2) 457 2885 495 2886 2879 456
+CONVEX 761 GT_PK(2,2) 235 2887 268 2888 2889 234
+CONVEX 762 GT_PK(2,2) 235 2890 202 2888 2239 234
+CONVEX 763 GT_PK(2,2) 235 2891 203 2890 2892 202
+CONVEX 764 GT_PK(2,2) 309 2893 310 2894 1994 345
+CONVEX 765 GT_PK(2,2) 309 2895 274 2896 2897 308
+CONVEX 766 GT_PK(2,2) 309 2895 274 2898 1973 275
+CONVEX 767 GT_PK(2,2) 309 2893 310 2898 1998 275
+CONVEX 768 GT_PK(2,2) 344 2899 343 2900 2008 308
+CONVEX 769 GT_PK(2,2) 344 2901 309 2900 2896 308
+CONVEX 770 GT_PK(2,2) 344 2901 309 2902 2894 345
+CONVEX 771 GT_PK(2,2) 344 2903 381 2902 2867 345
+CONVEX 772 GT_PK(2,2) 344 2903 381 2904 2905 380
+CONVEX 773 GT_PK(2,2) 344 2899 343 2904 2013 380
+CONVEX 774 GT_PK(2,2) 376 2906 414 2907 2847 413
+CONVEX 775 GT_PK(2,2) 376 2906 414 2908 2909 377
+CONVEX 776 GT_PK(2,2) 378 2910 341 2911 2912 377
+CONVEX 777 GT_PK(2,2) 378 2913 379 2914 2004 416
+CONVEX 778 GT_PK(2,2) 378 2913 379 2915 2012 342
+CONVEX 779 GT_PK(2,2) 378 2910 341 2915 2018 342
+CONVEX 780 GT_PK(2,2) 305 2916 341 2917 2017 306
+CONVEX 781 GT_PK(2,2) 340 2918 341 2919 2912 377
+CONVEX 782 GT_PK(2,2) 340 2920 376 2919 2908 377
+CONVEX 783 GT_PK(2,2) 340 2920 376 2921 2922 339
+CONVEX 784 GT_PK(2,2) 340 2923 305 2918 2916 341
+CONVEX 785 GT_PK(2,2) 340 2921 339 2924 2014 304
+CONVEX 786 GT_PK(2,2) 340 2923 305 2924 2925 304
+CONVEX 787 GT_PK(2,2) 765 2926 805 2927 1592 766
+CONVEX 788 GT_PK(2,2) 765 2928 725 2929 2930 1
+CONVEX 789 GT_PK(2,2) 765 2928 725 2931 2799 764
+CONVEX 790 GT_PK(2,2) 765 2932 726 2929 2933 1
+CONVEX 791 GT_PK(2,2) 765 2932 726 2927 2020 766
+CONVEX 792 GT_PK(2,2) 844 2934 805 2935 1593 845
+CONVEX 793 GT_PK(2,2) 802 2936 762 2937 2667 801
+CONVEX 794 GT_PK(2,2) 648 2938 609 2939 1967 649
+CONVEX 795 GT_PK(2,2) 648 2940 688 2939 2941 649
+CONVEX 796 GT_PK(2,2) 648 2942 608 2943 2944 647
+CONVEX 797 GT_PK(2,2) 648 2942 608 2938 2945 609
+CONVEX 798 GT_PK(2,2) 687 2946 726 2947 2019 727
+CONVEX 799 GT_PK(2,2) 687 2948 688 2947 2021 727
+CONVEX 800 GT_PK(2,2) 687 2949 648 2948 2940 688
+CONVEX 801 GT_PK(2,2) 687 2949 648 2950 2943 647
+CONVEX 802 GT_PK(2,2) 613 2951 652 2952 2953 653
+CONVEX 803 GT_PK(2,2) 532 2954 531 2955 2812 571
+CONVEX 804 GT_PK(2,2) 532 2956 572 2957 2958 533
+CONVEX 805 GT_PK(2,2) 532 2956 572 2955 2959 571
+CONVEX 806 GT_PK(2,2) 532 2954 531 2960 2961 493
+CONVEX 807 GT_PK(2,2) 532 2962 494 2957 2881 533
+CONVEX 808 GT_PK(2,2) 532 2962 494 2960 2880 493
+CONVEX 809 GT_PK(2,2) 808 2963 769 2964 2965 768
+CONVEX 810 GT_PK(2,2) 808 2966 807 2964 1598 768
+CONVEX 811 GT_PK(2,2) 808 2966 807 2967 1600 847
+CONVEX 812 GT_PK(2,2) 729 2968 769 2969 2970 730
+CONVEX 813 GT_PK(2,2) 729 2971 690 2969 2972 730
+CONVEX 814 GT_PK(2,2) 729 2973 728 2974 1468 768
+CONVEX 815 GT_PK(2,2) 729 2968 769 2974 2965 768
+CONVEX 816 GT_PK(2,2) 689 2975 688 2976 2941 649
+CONVEX 817 GT_PK(2,2) 689 2975 688 2977 2022 728
+CONVEX 818 GT_PK(2,2) 689 2978 729 2977 2973 728
+CONVEX 819 GT_PK(2,2) 689 2978 729 2979 2971 690
+CONVEX 820 GT_PK(2,2) 691 2980 690 2981 2972 730
+CONVEX 821 GT_PK(2,2) 611 2982 571 2983 2807 610
+CONVEX 822 GT_PK(2,2) 611 2984 572 2982 2959 571
+CONVEX 823 GT_PK(2,2) 854 2985 894 2986 1961 855
+CONVEX 824 GT_PK(2,2) 891 2987 930 2988 1956 931
+CONVEX 825 GT_PK(2,2) 536 2989 497 2990 2884 498
+CONVEX 826 GT_PK(2,2) 614 2991 575 2992 2993 574
+CONVEX 827 GT_PK(2,2) 614 2994 613 2995 2952 653
+CONVEX 828 GT_PK(2,2) 614 2994 613 2992 2996 574
+CONVEX 829 GT_PK(2,2) 774 2997 813 2998 2999 773
+CONVEX 830 GT_PK(2,2) 627 3000 628 3001 2026 667
+CONVEX 831 GT_PK(2,2) 627 3000 628 3002 2030 588
+CONVEX 832 GT_PK(2,2) 549 3003 510 3004 3005 509
+CONVEX 833 GT_PK(2,2) 433 3006 395 3007 1470 394
+CONVEX 834 GT_PK(2,2) 404 3008 403 3009 1604 366
+CONVEX 835 GT_PK(2,2) 404 3010 367 3009 2047 366
+CONVEX 836 GT_PK(2,2) 404 3010 367 3011 3012 405
+CONVEX 837 GT_PK(2,2) 404 3013 443 3011 3014 405
+CONVEX 838 GT_PK(2,2) 642 3015 681 3016 1917 682
+CONVEX 839 GT_PK(2,2) 642 3015 681 3017 1924 641
+CONVEX 840 GT_PK(2,2) 644 3018 684 3019 2802 645
+CONVEX 841 GT_PK(2,2) 644 3018 684 3020 3021 683
+CONVEX 842 GT_PK(2,2) 484 3022 523 3023 2056 522
+CONVEX 843 GT_PK(2,2) 524 3024 523 3025 2057 563
+CONVEX 844 GT_PK(2,2) 482 3026 521 3027 2664 520
+CONVEX 845 GT_PK(2,2) 558 3028 597 3029 2533 557
+CONVEX 846 GT_PK(2,2) 558 3030 559 3031 1899 598
+CONVEX 847 GT_PK(2,2) 558 3028 597 3031 3032 598
+CONVEX 848 GT_PK(2,2) 436 3033 397 3034 2061 398
+CONVEX 849 GT_PK(2,2) 436 3035 437 3034 2064 398
+CONVEX 850 GT_PK(2,2) 440 3036 439 3037 1606 478
+CONVEX 851 GT_PK(2,2) 440 3036 439 3038 2095 401
+CONVEX 852 GT_PK(2,2) 440 3039 402 3038 2092 401
+CONVEX 853 GT_PK(2,2) 221 3040 254 3041 2117 255
+CONVEX 854 GT_PK(2,2) 221 3041 255 3042 1628 222
+CONVEX 855 GT_PK(2,2) 221 3043 188 3044 2114 220
+CONVEX 856 GT_PK(2,2) 221 3040 254 3044 2116 220
+CONVEX 857 GT_PK(2,2) 221 3045 189 3042 1620 222
+CONVEX 858 GT_PK(2,2) 221 3043 188 3045 2110 189
+CONVEX 859 GT_PK(2,2) 323 3046 359 3047 2086 322
+CONVEX 860 GT_PK(2,2) 323 3048 287 3047 2124 322
+CONVEX 861 GT_PK(2,2) 323 3046 359 3049 2079 360
+CONVEX 862 GT_PK(2,2) 213 3050 214 3051 2162 182
+CONVEX 863 GT_PK(2,2) 213 3050 214 3052 2164 246
+CONVEX 864 GT_PK(2,2) 213 3053 181 3051 1662 182
+CONVEX 865 GT_PK(2,2) 213 3054 212 3053 3055 181
+CONVEX 866 GT_PK(2,2) 213 3052 246 3056 2201 245
+CONVEX 867 GT_PK(2,2) 213 3054 212 3056 3057 245
+CONVEX 868 GT_PK(2,2) 180 3058 212 3059 3055 181
+CONVEX 869 GT_PK(2,2) 180 3060 151 3059 2179 181
+CONVEX 870 GT_PK(2,2) 180 3061 211 3058 3062 212
+CONVEX 871 GT_PK(2,2) 74 3063 52 3064 3065 53
+CONVEX 872 GT_PK(2,2) 74 3066 73 3063 2182 52
+CONVEX 873 GT_PK(2,2) 74 3064 53 3067 1681 98
+CONVEX 874 GT_PK(2,2) 283 3068 282 3069 1699 249
+CONVEX 875 GT_PK(2,2) 283 3070 250 3069 2190 249
+CONVEX 876 GT_PK(2,2) 283 3068 282 3071 1695 317
+CONVEX 877 GT_PK(2,2) 283 3072 318 3071 2515 317
+CONVEX 878 GT_PK(2,2) 283 3072 318 3073 1844 284
+CONVEX 879 GT_PK(2,2) 283 3070 250 3073 2187 284
+CONVEX 880 GT_PK(2,2) 26 3074 12 3075 1702 27
+CONVEX 881 GT_PK(2,2) 26 3076 11 3074 3077 12
+CONVEX 882 GT_PK(2,2) 26 3076 11 3078 2207 25
+CONVEX 883 GT_PK(2,2) 26 3078 25 3079 1716 44
+CONVEX 884 GT_PK(2,2) 26 3079 44 3080 1979 45
+CONVEX 885 GT_PK(2,2) 26 3075 27 3080 3081 45
+CONVEX 886 GT_PK(2,2) 81 3082 57 3083 2211 80
+CONVEX 887 GT_PK(2,2) 81 3084 107 3085 3086 82
+CONVEX 888 GT_PK(2,2) 81 3087 106 3083 2220 80
+CONVEX 889 GT_PK(2,2) 81 3084 107 3087 3088 106
+CONVEX 890 GT_PK(2,2) 193 3089 161 3090 1640 192
+CONVEX 891 GT_PK(2,2) 193 3091 162 3089 2228 161
+CONVEX 892 GT_PK(2,2) 193 3092 225 3090 1482 192
+CONVEX 893 GT_PK(2,2) 338 3093 339 3094 2015 303
+CONVEX 894 GT_PK(2,2) 338 3095 302 3094 2231 303
+CONVEX 895 GT_PK(2,2) 58 3096 37 3097 2234 36
+CONVEX 896 GT_PK(2,2) 58 3098 81 3099 3085 82
+CONVEX 897 GT_PK(2,2) 58 3100 57 3097 2213 36
+CONVEX 898 GT_PK(2,2) 58 3098 81 3100 3082 57
+CONVEX 899 GT_PK(2,2) 200 3101 168 3102 2246 169
+CONVEX 900 GT_PK(2,2) 200 3103 201 3102 3104 169
+CONVEX 901 GT_PK(2,2) 200 3103 201 3105 2240 233
+CONVEX 902 GT_PK(2,2) 86 3106 87 3107 3108 112
+CONVEX 903 GT_PK(2,2) 113 3109 87 3110 3108 112
+CONVEX 904 GT_PK(2,2) 113 3111 141 3112 3113 114
+CONVEX 905 GT_PK(2,2) 113 3112 114 3114 2831 88
+CONVEX 906 GT_PK(2,2) 113 3109 87 3114 2243 88
+CONVEX 907 GT_PK(2,2) 40 3115 39 3116 2260 21
+CONVEX 908 GT_PK(2,2) 40 3117 22 3118 1726 41
+CONVEX 909 GT_PK(2,2) 40 3117 22 3116 1720 21
+CONVEX 910 GT_PK(2,2) 40 3115 39 3119 3120 61
+CONVEX 911 GT_PK(2,2) 59 3121 58 3122 3099 82
+CONVEX 912 GT_PK(2,2) 59 3121 58 3123 3096 37
+CONVEX 913 GT_PK(2,2) 108 3124 107 3125 3086 82
+CONVEX 914 GT_PK(2,2) 1364 3126 1365 3127 3128 1339
+CONVEX 915 GT_PK(2,2) 963 3129 1002 3130 2755 964
+CONVEX 916 GT_PK(2,2) 963 3129 1002 3131 2758 1001
+CONVEX 917 GT_PK(2,2) 963 3132 925 3130 3133 964
+CONVEX 918 GT_PK(2,2) 963 3132 925 3134 2298 924
+CONVEX 919 GT_PK(2,2) 1038 3135 1000 3136 2284 1039
+CONVEX 920 GT_PK(2,2) 1038 3137 1076 3136 3138 1039
+CONVEX 921 GT_PK(2,2) 1038 3137 1076 3139 2280 1075
+CONVEX 922 GT_PK(2,2) 965 3140 927 3141 2291 966
+CONVEX 923 GT_PK(2,2) 965 3142 1003 3143 2756 964
+CONVEX 924 GT_PK(2,2) 965 3144 1004 3141 3145 966
+CONVEX 925 GT_PK(2,2) 965 3144 1004 3142 3146 1003
+CONVEX 926 GT_PK(2,2) 886 3147 925 3148 2299 885
+CONVEX 927 GT_PK(2,2) 886 3148 885 3149 1739 846
+CONVEX 928 GT_PK(2,2) 886 3150 847 3149 1602 846
+CONVEX 929 GT_PK(2,2) 886 3151 887 3150 3152 847
+CONVEX 930 GT_PK(2,2) 1393 3153 1369 3154 2338 1370
+CONVEX 931 GT_PK(2,2) 1393 3153 1369 3155 2357 1392
+CONVEX 932 GT_PK(2,2) 1393 3156 1414 3155 2367 1392
+CONVEX 933 GT_PK(2,2) 1393 3157 1415 3156 2304 1414
+CONVEX 934 GT_PK(2,2) 1254 3158 1286 3159 3160 1285
+CONVEX 935 GT_PK(2,2) 1254 3161 1253 3159 2399 1285
+CONVEX 936 GT_PK(2,2) 1254 3162 1222 3163 2311 1221
+CONVEX 937 GT_PK(2,2) 1254 3161 1253 3163 2418 1221
+CONVEX 938 GT_PK(2,2) 1374 3164 1348 3165 2313 1397
+CONVEX 939 GT_PK(2,2) 1293 3166 1294 3167 3168 1323
+CONVEX 940 GT_PK(2,2) 1293 3166 1294 3169 2478 1262
+CONVEX 941 GT_PK(2,2) 1321 3170 1348 3171 2317 1320
+CONVEX 942 GT_PK(2,2) 1321 3172 1291 3171 3173 1320
+CONVEX 943 GT_PK(2,2) 1319 3174 1347 3175 2328 1346
+CONVEX 944 GT_PK(2,2) 1319 3174 1347 3176 2316 1320
+CONVEX 945 GT_PK(2,2) 1394 3177 1416 3178 2318 1395
+CONVEX 946 GT_PK(2,2) 1394 3179 1415 3180 2302 1434
+CONVEX 947 GT_PK(2,2) 1394 3177 1416 3180 3181 1434
+CONVEX 948 GT_PK(2,2) 1394 3182 1371 3183 2324 1370
+CONVEX 949 GT_PK(2,2) 1394 3182 1371 3178 2332 1395
+CONVEX 950 GT_PK(2,2) 1394 3184 1393 3183 3154 1370
+CONVEX 951 GT_PK(2,2) 1394 3184 1393 3179 3157 1415
+CONVEX 952 GT_PK(2,2) 1195 3185 1196 3186 1583 1229
+CONVEX 953 GT_PK(2,2) 1261 3187 1262 3188 1535 1229
+CONVEX 954 GT_PK(2,2) 1261 3189 1293 3187 3169 1262
+CONVEX 955 GT_PK(2,2) 1411 3190 1390 3191 1747 1412
+CONVEX 956 GT_PK(2,2) 1411 3192 1430 3191 1512 1412
+CONVEX 957 GT_PK(2,2) 1411 3193 1429 3192 2351 1430
+CONVEX 958 GT_PK(2,2) 1411 3194 1410 3193 2354 1429
+CONVEX 959 GT_PK(2,2) 1077 3195 1113 3196 2374 1076
+CONVEX 960 GT_PK(2,2) 1077 3197 1040 3198 2288 1078
+CONVEX 961 GT_PK(2,2) 1077 3196 1076 3199 3138 1039
+CONVEX 962 GT_PK(2,2) 1077 3197 1040 3199 2287 1039
+CONVEX 963 GT_PK(2,2) 1151 3200 1150 3201 2375 1185
+CONVEX 964 GT_PK(2,2) 1151 3202 1116 3203 3204 1152
+CONVEX 965 GT_PK(2,2) 1151 3202 1116 3205 2382 1115
+CONVEX 966 GT_PK(2,2) 1151 3200 1150 3205 3206 1115
+CONVEX 967 GT_PK(2,2) 1249 3207 1280 3208 2386 1248
+CONVEX 968 GT_PK(2,2) 1249 3208 1248 3209 3210 1216
+CONVEX 969 GT_PK(2,2) 1249 3211 1217 3212 2395 1250
+CONVEX 970 GT_PK(2,2) 1249 3211 1217 3209 2392 1216
+CONVEX 971 GT_PK(2,2) 1251 3213 1282 3214 3215 1250
+CONVEX 972 GT_PK(2,2) 1251 3216 1218 3214 2396 1250
+CONVEX 973 GT_PK(2,2) 1251 3216 1218 3217 1520 1219
+CONVEX 974 GT_PK(2,2) 1251 3218 1252 3217 2421 1219
+CONVEX 975 GT_PK(2,2) 1281 3219 1311 3220 2406 1282
+CONVEX 976 GT_PK(2,2) 1281 3221 1249 3222 3207 1280
+CONVEX 977 GT_PK(2,2) 1281 3222 1280 3223 2390 1310
+CONVEX 978 GT_PK(2,2) 1281 3219 1311 3223 3224 1310
+CONVEX 979 GT_PK(2,2) 1281 3220 1282 3225 3215 1250
+CONVEX 980 GT_PK(2,2) 1281 3221 1249 3225 3212 1250
+CONVEX 981 GT_PK(2,2) 1367 3226 1391 3227 1745 1390
+CONVEX 982 GT_PK(2,2) 1367 3228 1368 3226 2358 1391
+CONVEX 983 GT_PK(2,2) 1367 3229 1366 3227 3230 1390
+CONVEX 984 GT_PK(2,2) 1367 3229 1366 3231 3232 1341
+CONVEX 985 GT_PK(2,2) 1342 3233 1368 3234 2360 1343
+CONVEX 986 GT_PK(2,2) 1342 3235 1367 3233 3228 1368
+CONVEX 987 GT_PK(2,2) 1342 3235 1367 3236 3231 1341
+CONVEX 988 GT_PK(2,2) 1155 3237 1154 3238 3239 1119
+CONVEX 989 GT_PK(2,2) 1155 3237 1154 3240 2413 1189
+CONVEX 990 GT_PK(2,2) 1155 3241 1190 3240 3242 1189
+CONVEX 991 GT_PK(2,2) 1155 3241 1190 3243 3244 1156
+CONVEX 992 GT_PK(2,2) 1186 3245 1220 3246 2415 1187
+CONVEX 993 GT_PK(2,2) 1186 3246 1187 3247 2410 1152
+CONVEX 994 GT_PK(2,2) 1186 3248 1185 3249 1521 1219
+CONVEX 995 GT_PK(2,2) 1186 3245 1220 3249 2420 1219
+CONVEX 996 GT_PK(2,2) 1186 3250 1151 3247 3203 1152
+CONVEX 997 GT_PK(2,2) 1186 3250 1151 3248 3201 1185
+CONVEX 998 GT_PK(2,2) 666 3251 665 3252 2423 705
+CONVEX 999 GT_PK(2,2) 664 3253 665 3254 2422 704
+CONVEX 1000 GT_PK(2,2) 664 3255 624 3256 2451 663
+CONVEX 1001 GT_PK(2,2) 664 3253 665 3257 3258 625
+CONVEX 1002 GT_PK(2,2) 664 3255 624 3257 2435 625
+CONVEX 1003 GT_PK(2,2) 506 3259 507 3260 1766 545
+CONVEX 1004 GT_PK(2,2) 506 3259 507 3261 1771 468
+CONVEX 1005 GT_PK(2,2) 506 3261 468 3262 1759 467
+CONVEX 1006 GT_PK(2,2) 506 3263 505 3262 3264 467
+CONVEX 1007 GT_PK(2,2) 740 3265 739 3266 2441 779
+CONVEX 1008 GT_PK(2,2) 740 3267 780 3266 2461 779
+CONVEX 1009 GT_PK(2,2) 740 3267 780 3268 2458 741
+CONVEX 1010 GT_PK(2,2) 740 3265 739 3269 3270 700
+CONVEX 1011 GT_PK(2,2) 859 3271 819 3272 2460 820
+CONVEX 1012 GT_PK(2,2) 859 3273 860 3272 2484 820
+CONVEX 1013 GT_PK(2,2) 859 3273 860 3274 2485 899
+CONVEX 1014 GT_PK(2,2) 859 3274 899 3275 2436 898
+CONVEX 1015 GT_PK(2,2) 859 3275 898 3276 1801 858
+CONVEX 1016 GT_PK(2,2) 859 3271 819 3276 2446 858
+CONVEX 1017 GT_PK(2,2) 543 3277 504 3278 3279 505
+CONVEX 1018 GT_PK(2,2) 543 3280 542 3281 3282 582
+CONVEX 1019 GT_PK(2,2) 543 3277 504 3280 3283 542
+CONVEX 1020 GT_PK(2,2) 544 3284 543 3285 3278 505
+CONVEX 1021 GT_PK(2,2) 544 3286 506 3287 3260 545
+CONVEX 1022 GT_PK(2,2) 544 3286 506 3285 3263 505
+CONVEX 1023 GT_PK(2,2) 584 3288 624 3289 2434 585
+CONVEX 1024 GT_PK(2,2) 584 3290 623 3288 2449 624
+CONVEX 1025 GT_PK(2,2) 584 3289 585 3291 1777 545
+CONVEX 1026 GT_PK(2,2) 584 3292 544 3291 3287 545
+CONVEX 1027 GT_PK(2,2) 702 3293 742 3294 2454 741
+CONVEX 1028 GT_PK(2,2) 702 3295 662 3296 2463 663
+CONVEX 1029 GT_PK(2,2) 702 3293 742 3297 2452 743
+CONVEX 1030 GT_PK(2,2) 622 3298 662 3299 2462 623
+CONVEX 1031 GT_PK(2,2) 622 3298 662 3300 3301 661
+CONVEX 1032 GT_PK(2,2) 622 3302 621 3303 3304 582
+CONVEX 1033 GT_PK(2,2) 622 3302 621 3300 3305 661
+CONVEX 1034 GT_PK(2,2) 1093 3306 1092 3307 3308 1129
+CONVEX 1035 GT_PK(2,2) 1093 3309 1056 3310 2471 1094
+CONVEX 1036 GT_PK(2,2) 1093 3311 1055 3306 3312 1092
+CONVEX 1037 GT_PK(2,2) 1093 3311 1055 3309 2473 1056
+CONVEX 1038 GT_PK(2,2) 1093 3313 1130 3307 1534 1129
+CONVEX 1039 GT_PK(2,2) 1093 3310 1094 3313 3314 1130
+CONVEX 1040 GT_PK(2,2) 1018 3315 1057 3316 3317 1019
+CONVEX 1041 GT_PK(2,2) 1018 3318 1056 3315 2470 1057
+CONVEX 1042 GT_PK(2,2) 1018 3318 1056 3319 2475 1017
+CONVEX 1043 GT_PK(2,2) 1018 3320 979 3316 2497 1019
+CONVEX 1044 GT_PK(2,2) 1018 3320 979 3319 2464 1017
+CONVEX 1045 GT_PK(2,2) 1054 3321 1055 3322 3312 1092
+CONVEX 1046 GT_PK(2,2) 777 3323 738 3324 2444 778
+CONVEX 1047 GT_PK(2,2) 777 3325 817 3324 2482 778
+CONVEX 1048 GT_PK(2,2) 856 3326 895 3327 3328 896
+CONVEX 1049 GT_PK(2,2) 856 3326 895 3329 1960 855
+CONVEX 1050 GT_PK(2,2) 857 3330 817 3331 2481 818
+CONVEX 1051 GT_PK(2,2) 857 3332 897 3333 1800 858
+CONVEX 1052 GT_PK(2,2) 857 3331 818 3333 2447 858
+CONVEX 1053 GT_PK(2,2) 857 3332 897 3334 1796 896
+CONVEX 1054 GT_PK(2,2) 857 3335 856 3334 3327 896
+CONVEX 1055 GT_PK(2,2) 857 3335 856 3330 3336 817
+CONVEX 1056 GT_PK(2,2) 1016 3337 1017 3338 2466 978
+CONVEX 1057 GT_PK(2,2) 1016 3339 977 3338 2488 978
+CONVEX 1058 GT_PK(2,2) 1016 3339 977 3340 2491 1015
+CONVEX 1059 GT_PK(2,2) 1016 3341 1054 3340 3342 1015
+CONVEX 1060 GT_PK(2,2) 1016 3343 1055 3337 2474 1017
+CONVEX 1061 GT_PK(2,2) 1016 3341 1054 3343 3321 1055
+CONVEX 1062 GT_PK(2,2) 862 3344 861 3345 2499 822
+CONVEX 1063 GT_PK(2,2) 862 3346 823 3345 1788 822
+CONVEX 1064 GT_PK(2,2) 862 3347 901 3348 2504 902
+CONVEX 1065 GT_PK(2,2) 862 3347 901 3344 2506 861
+CONVEX 1066 GT_PK(2,2) 862 3346 823 3349 1461 863
+CONVEX 1067 GT_PK(2,2) 862 3350 903 3349 3351 863
+CONVEX 1068 GT_PK(2,2) 862 3348 902 3350 1816 903
+CONVEX 1069 GT_PK(2,2) 351 3352 352 3353 1823 316
+CONVEX 1070 GT_PK(2,2) 351 3353 316 3354 1554 315
+CONVEX 1071 GT_PK(2,2) 351 3355 388 3352 3356 352
+CONVEX 1072 GT_PK(2,2) 351 3355 388 3357 3358 387
+CONVEX 1073 GT_PK(2,2) 837 3359 797 3360 1894 836
+CONVEX 1074 GT_PK(2,2) 837 3359 797 3361 2635 798
+CONVEX 1075 GT_PK(2,2) 837 3362 838 3361 3363 798
+CONVEX 1076 GT_PK(2,2) 799 3364 838 3365 2519 839
+CONVEX 1077 GT_PK(2,2) 799 3364 838 3366 3363 798
+CONVEX 1078 GT_PK(2,2) 799 3367 759 3366 2636 798
+CONVEX 1079 GT_PK(2,2) 799 3367 759 3368 1900 760
+CONVEX 1080 GT_PK(2,2) 637 3369 597 3370 2535 636
+CONVEX 1081 GT_PK(2,2) 637 3369 597 3371 3032 598
+CONVEX 1082 GT_PK(2,2) 637 3372 638 3371 2651 598
+CONVEX 1083 GT_PK(2,2) 637 3372 638 3373 2652 677
+CONVEX 1084 GT_PK(2,2) 518 3374 517 3375 2523 557
+CONVEX 1085 GT_PK(2,2) 518 3376 558 3375 3029 557
+CONVEX 1086 GT_PK(2,2) 671 3377 710 3378 3379 670
+CONVEX 1087 GT_PK(2,2) 671 3380 711 3377 3381 710
+CONVEX 1088 GT_PK(2,2) 753 3382 714 3383 3384 713
+CONVEX 1089 GT_PK(2,2) 753 3385 792 3386 3387 793
+CONVEX 1090 GT_PK(2,2) 753 3388 754 3386 2649 793
+CONVEX 1091 GT_PK(2,2) 753 3388 754 3382 2645 714
+CONVEX 1092 GT_PK(2,2) 669 3389 708 3390 3391 707
+CONVEX 1093 GT_PK(2,2) 669 3392 668 3393 2025 629
+CONVEX 1094 GT_PK(2,2) 669 3390 707 3392 1854 668
+CONVEX 1095 GT_PK(2,2) 669 3389 708 3394 3395 670
+CONVEX 1096 GT_PK(2,2) 825 3396 864 3397 3398 826
+CONVEX 1097 GT_PK(2,2) 825 3399 786 3400 1856 785
+CONVEX 1098 GT_PK(2,2) 825 3399 786 3397 2547 826
+CONVEX 1099 GT_PK(2,2) 865 3401 864 3402 3398 826
+CONVEX 1100 GT_PK(2,2) 865 3401 864 3403 3404 904
+CONVEX 1101 GT_PK(2,2) 748 3405 787 3406 3407 788
+CONVEX 1102 GT_PK(2,2) 748 3408 749 3406 3409 788
+CONVEX 1103 GT_PK(2,2) 748 3408 749 3410 3411 708
+CONVEX 1104 GT_PK(2,2) 748 3410 708 3412 3391 707
+CONVEX 1105 GT_PK(2,2) 748 3412 707 3413 1853 747
+CONVEX 1106 GT_PK(2,2) 748 3405 787 3413 2548 747
+CONVEX 1107 GT_PK(2,2) 1061 3414 1098 3415 2555 1062
+CONVEX 1108 GT_PK(2,2) 1061 3416 1023 3417 2597 1060
+CONVEX 1109 GT_PK(2,2) 1061 3418 1097 3417 2581 1060
+CONVEX 1110 GT_PK(2,2) 1061 3418 1097 3414 2564 1098
+CONVEX 1111 GT_PK(2,2) 1061 3415 1062 3419 3420 1024
+CONVEX 1112 GT_PK(2,2) 1061 3416 1023 3419 2603 1024
+CONVEX 1113 GT_PK(2,2) 1066 3421 1103 3422 1878 1102
+CONVEX 1114 GT_PK(2,2) 1066 3423 1065 3422 3424 1102
+CONVEX 1115 GT_PK(2,2) 1066 3421 1103 3425 3426 1067
+CONVEX 1116 GT_PK(2,2) 1066 3423 1065 3427 2585 1028
+CONVEX 1117 GT_PK(2,2) 1066 3428 1029 3425 2614 1067
+CONVEX 1118 GT_PK(2,2) 1066 3428 1029 3427 3429 1028
+CONVEX 1119 GT_PK(2,2) 752 3430 713 3431 3432 712
+CONVEX 1120 GT_PK(2,2) 752 3433 792 3434 3435 791
+CONVEX 1121 GT_PK(2,2) 752 3436 753 3430 3383 713
+CONVEX 1122 GT_PK(2,2) 752 3436 753 3433 3385 792
+CONVEX 1123 GT_PK(2,2) 752 3437 751 3431 2588 712
+CONVEX 1124 GT_PK(2,2) 752 3437 751 3434 3438 791
+CONVEX 1125 GT_PK(2,2) 831 3439 792 3440 3435 791
+CONVEX 1126 GT_PK(2,2) 789 3441 749 3442 3409 788
+CONVEX 1127 GT_PK(2,2) 1026 3443 1027 3444 2584 1064
+CONVEX 1128 GT_PK(2,2) 1026 3445 1063 3444 2593 1064
+CONVEX 1129 GT_PK(2,2) 1026 3443 1027 3446 2618 988
+CONVEX 1130 GT_PK(2,2) 1025 3447 1062 3448 3420 1024
+CONVEX 1131 GT_PK(2,2) 1025 3449 1063 3447 2590 1062
+CONVEX 1132 GT_PK(2,2) 1025 3450 1026 3449 3445 1063
+CONVEX 1133 GT_PK(2,2) 984 3451 1022 3452 2600 983
+CONVEX 1134 GT_PK(2,2) 984 3451 1022 3453 2595 1023
+CONVEX 1135 GT_PK(2,2) 984 3454 985 3453 2601 1023
+CONVEX 1136 GT_PK(2,2) 984 3455 945 3452 3456 983
+CONVEX 1137 GT_PK(2,2) 947 3457 948 3458 1874 909
+CONVEX 1138 GT_PK(2,2) 991 3459 1030 3460 2612 1029
+CONVEX 1139 GT_PK(2,2) 991 3459 1030 3461 3462 992
+CONVEX 1140 GT_PK(2,2) 1033 3463 1032 3464 3465 1070
+CONVEX 1141 GT_PK(2,2) 1031 3466 1030 3467 3462 992
+CONVEX 1142 GT_PK(2,2) 1031 3468 993 3467 3469 992
+CONVEX 1143 GT_PK(2,2) 1031 3468 993 3470 3471 1032
+CONVEX 1144 GT_PK(2,2) 953 3472 914 3473 3474 952
+CONVEX 1145 GT_PK(2,2) 953 3475 991 3473 3476 952
+CONVEX 1146 GT_PK(2,2) 953 3475 991 3477 3461 992
+CONVEX 1147 GT_PK(2,2) 953 3472 914 3478 2641 915
+CONVEX 1148 GT_PK(2,2) 913 3479 912 3480 2621 873
+CONVEX 1149 GT_PK(2,2) 913 3480 873 3481 3482 874
+CONVEX 1150 GT_PK(2,2) 913 3483 914 3481 2644 874
+CONVEX 1151 GT_PK(2,2) 913 3483 914 3484 3474 952
+CONVEX 1152 GT_PK(2,2) 951 3485 989 3486 2615 950
+CONVEX 1153 GT_PK(2,2) 951 3487 912 3486 2623 950
+CONVEX 1154 GT_PK(2,2) 951 3488 913 3487 3479 912
+CONVEX 1155 GT_PK(2,2) 951 3488 913 3489 3484 952
+CONVEX 1156 GT_PK(2,2) 1205 3490 1204 3491 2740 1237
+CONVEX 1157 GT_PK(2,2) 1205 3490 1204 3492 3493 1171
+CONVEX 1158 GT_PK(2,2) 1174 3494 1207 3495 2743 1208
+CONVEX 1159 GT_PK(2,2) 1174 3494 1207 3496 2628 1173
+CONVEX 1160 GT_PK(2,2) 1139 3497 1103 3498 1877 1138
+CONVEX 1161 GT_PK(2,2) 1139 3499 1174 3500 3501 1140
+CONVEX 1162 GT_PK(2,2) 1139 3498 1138 3502 3503 1173
+CONVEX 1163 GT_PK(2,2) 1139 3499 1174 3502 3496 1173
+CONVEX 1164 GT_PK(2,2) 833 3504 872 3505 2622 873
+CONVEX 1165 GT_PK(2,2) 833 3506 794 3507 2648 793
+CONVEX 1166 GT_PK(2,2) 834 3508 873 3509 3482 874
+CONVEX 1167 GT_PK(2,2) 834 3510 835 3509 2643 874
+CONVEX 1168 GT_PK(2,2) 834 3511 833 3508 3505 873
+CONVEX 1169 GT_PK(2,2) 834 3511 833 3512 3506 794
+CONVEX 1170 GT_PK(2,2) 755 3513 754 3514 2646 715
+CONVEX 1171 GT_PK(2,2) 755 3515 794 3513 2647 754
+CONVEX 1172 GT_PK(2,2) 755 3514 715 3516 3517 716
+CONVEX 1173 GT_PK(2,2) 755 3518 756 3516 1887 716
+CONVEX 1174 GT_PK(2,2) 600 3519 601 3520 2048 640
+CONVEX 1175 GT_PK(2,2) 600 3521 639 3520 2656 640
+CONVEX 1176 GT_PK(2,2) 600 3519 601 3522 2054 561
+CONVEX 1177 GT_PK(2,2) 600 3523 560 3522 2665 561
+CONVEX 1178 GT_PK(2,2) 600 3521 639 3524 2658 599
+CONVEX 1179 GT_PK(2,2) 600 3523 560 3524 2662 599
+CONVEX 1180 GT_PK(2,2) 723 3525 722 3526 2674 762
+CONVEX 1181 GT_PK(2,2) 723 3525 722 3527 2672 683
+CONVEX 1182 GT_PK(2,2) 723 3528 684 3529 2804 724
+CONVEX 1183 GT_PK(2,2) 723 3528 684 3527 3021 683
+CONVEX 1184 GT_PK(2,2) 1438 3530 1424 3531 1936 1439
+CONVEX 1185 GT_PK(2,2) 1438 3532 1423 3530 2677 1424
+CONVEX 1186 GT_PK(2,2) 1437 3533 1423 3534 2680 1422
+CONVEX 1187 GT_PK(2,2) 1437 3535 1436 3534 3536 1422
+CONVEX 1188 GT_PK(2,2) 1437 3537 1438 3533 3532 1423
+CONVEX 1189 GT_PK(2,2) 1180 3538 1179 3539 2696 1213
+CONVEX 1190 GT_PK(2,2) 1180 3540 1214 3539 3541 1213
+CONVEX 1191 GT_PK(2,2) 1180 3540 1214 3542 3543 1181
+CONVEX 1192 GT_PK(2,2) 1180 3538 1179 3544 3545 1145
+CONVEX 1193 GT_PK(2,2) 1144 3546 1179 3547 3545 1145
+CONVEX 1194 GT_PK(2,2) 1144 3546 1179 3548 2698 1178
+CONVEX 1195 GT_PK(2,2) 1246 3549 1245 3550 2700 1213
+CONVEX 1196 GT_PK(2,2) 1246 3551 1214 3550 3541 1213
+CONVEX 1197 GT_PK(2,2) 1246 3551 1214 3552 3553 1247
+CONVEX 1198 GT_PK(2,2) 1246 3554 1277 3549 3555 1245
+CONVEX 1199 GT_PK(2,2) 1246 3556 1278 3552 1581 1247
+CONVEX 1200 GT_PK(2,2) 1246 3554 1277 3556 3557 1278
+CONVEX 1201 GT_PK(2,2) 1215 3558 1214 3559 3553 1247
+CONVEX 1202 GT_PK(2,2) 1215 3560 1248 3559 1749 1247
+CONVEX 1203 GT_PK(2,2) 1215 3560 1248 3561 3210 1216
+CONVEX 1204 GT_PK(2,2) 1215 3562 1182 3561 2703 1216
+CONVEX 1205 GT_PK(2,2) 1215 3558 1214 3563 3543 1181
+CONVEX 1206 GT_PK(2,2) 1215 3562 1182 3563 2709 1181
+CONVEX 1207 GT_PK(2,2) 1307 3564 1308 3565 2710 1278
+CONVEX 1208 GT_PK(2,2) 1307 3566 1277 3567 3568 1306
+CONVEX 1209 GT_PK(2,2) 1307 3566 1277 3565 3557 1278
+CONVEX 1210 GT_PK(2,2) 1307 3569 1334 3567 3570 1306
+CONVEX 1211 GT_PK(2,2) 1307 3571 1335 3569 2686 1334
+CONVEX 1212 GT_PK(2,2) 1307 3564 1308 3571 2714 1335
+CONVEX 1213 GT_PK(2,2) 1326 3572 1299 3573 2727 1298
+CONVEX 1214 GT_PK(2,2) 1326 3572 1299 3574 3575 1327
+CONVEX 1215 GT_PK(2,2) 1326 3576 1375 3577 3578 1351
+CONVEX 1216 GT_PK(2,2) 1172 3579 1137 3580 2728 1171
+CONVEX 1217 GT_PK(2,2) 1172 3581 1205 3580 3492 1171
+CONVEX 1218 GT_PK(2,2) 1172 3581 1205 3582 3583 1206
+CONVEX 1219 GT_PK(2,2) 1172 3582 1206 3584 2627 1173
+CONVEX 1220 GT_PK(2,2) 1172 3585 1138 3584 3503 1173
+CONVEX 1221 GT_PK(2,2) 1172 3579 1137 3585 2731 1138
+CONVEX 1222 GT_PK(2,2) 1101 3586 1100 3587 2550 1136
+CONVEX 1223 GT_PK(2,2) 1101 3588 1137 3587 2729 1136
+CONVEX 1224 GT_PK(2,2) 1101 3588 1137 3589 2732 1102
+CONVEX 1225 GT_PK(2,2) 1101 3586 1100 3590 2594 1064
+CONVEX 1226 GT_PK(2,2) 1101 3591 1065 3589 3424 1102
+CONVEX 1227 GT_PK(2,2) 1101 3591 1065 3590 2583 1064
+CONVEX 1228 GT_PK(2,2) 1203 3592 1204 3593 2739 1236
+CONVEX 1229 GT_PK(2,2) 1235 3594 1267 3595 3596 1266
+CONVEX 1230 GT_PK(2,2) 1235 3597 1265 3595 3598 1266
+CONVEX 1231 GT_PK(2,2) 1235 3597 1265 3599 1860 1234
+CONVEX 1232 GT_PK(2,2) 1235 3594 1267 3600 2738 1236
+CONVEX 1233 GT_PK(2,2) 1235 3601 1203 3600 3593 1236
+CONVEX 1234 GT_PK(2,2) 1170 3602 1204 3603 3493 1171
+CONVEX 1235 GT_PK(2,2) 1170 3603 1171 3604 2730 1136
+CONVEX 1236 GT_PK(2,2) 1170 3605 1203 3606 3607 1169
+CONVEX 1237 GT_PK(2,2) 1170 3605 1203 3602 3592 1204
+CONVEX 1238 GT_PK(2,2) 1170 3608 1135 3604 2551 1136
+CONVEX 1239 GT_PK(2,2) 1170 3606 1169 3608 2735 1135
+CONVEX 1240 GT_PK(2,2) 1239 3609 1206 3610 2626 1207
+CONVEX 1241 GT_PK(2,2) 1239 3611 1240 3610 2741 1207
+CONVEX 1242 GT_PK(2,2) 1239 3612 1271 3611 2744 1240
+CONVEX 1243 GT_PK(2,2) 1239 3612 1271 3613 3614 1270
+CONVEX 1244 GT_PK(2,2) 1274 3615 1243 3616 3617 1242
+CONVEX 1245 GT_PK(2,2) 1274 3618 1273 3616 3619 1242
+CONVEX 1246 GT_PK(2,2) 1274 3620 1304 3621 3622 1303
+CONVEX 1247 GT_PK(2,2) 1274 3618 1273 3621 3623 1303
+CONVEX 1248 GT_PK(2,2) 1241 3624 1240 3625 2746 1272
+CONVEX 1249 GT_PK(2,2) 1241 3626 1273 3625 3627 1272
+CONVEX 1250 GT_PK(2,2) 1241 3624 1240 3628 2742 1208
+CONVEX 1251 GT_PK(2,2) 1241 3626 1273 3629 3619 1242
+CONVEX 1252 GT_PK(2,2) 967 3630 1006 3631 3632 968
+CONVEX 1253 GT_PK(2,2) 967 3633 929 3631 2765 968
+CONVEX 1254 GT_PK(2,2) 967 3634 966 3635 2293 928
+CONVEX 1255 GT_PK(2,2) 967 3633 929 3635 3636 928
+CONVEX 1256 GT_PK(2,2) 1082 3637 1083 3638 3639 1119
+CONVEX 1257 GT_PK(2,2) 1082 3637 1083 3640 2752 1045
+CONVEX 1258 GT_PK(2,2) 1044 3641 1081 3642 2761 1043
+CONVEX 1259 GT_PK(2,2) 1044 3643 1006 3644 3645 1045
+CONVEX 1260 GT_PK(2,2) 1044 3646 1082 3644 3640 1045
+CONVEX 1261 GT_PK(2,2) 1044 3646 1082 3641 3647 1081
+CONVEX 1262 GT_PK(2,2) 1117 3648 1116 3649 2384 1080
+CONVEX 1263 GT_PK(2,2) 1117 3650 1081 3649 2762 1080
+CONVEX 1264 GT_PK(2,2) 1117 3648 1116 3651 3204 1152
+CONVEX 1265 GT_PK(2,2) 1117 3652 1153 3651 2409 1152
+CONVEX 1266 GT_PK(2,2) 1005 3653 1004 3654 3655 1043
+CONVEX 1267 GT_PK(2,2) 1005 3656 1044 3654 3642 1043
+CONVEX 1268 GT_PK(2,2) 1005 3656 1044 3657 3643 1006
+CONVEX 1269 GT_PK(2,2) 1005 3658 967 3657 3630 1006
+CONVEX 1270 GT_PK(2,2) 1005 3653 1004 3659 3145 966
+CONVEX 1271 GT_PK(2,2) 1005 3658 967 3659 3634 966
+CONVEX 1272 GT_PK(2,2) 1042 3660 1004 3661 3655 1043
+CONVEX 1273 GT_PK(2,2) 1042 3662 1079 3663 2385 1041
+CONVEX 1274 GT_PK(2,2) 1042 3664 1003 3663 2760 1041
+CONVEX 1275 GT_PK(2,2) 1042 3660 1004 3664 3146 1003
+CONVEX 1276 GT_PK(2,2) 1042 3661 1043 3665 2763 1080
+CONVEX 1277 GT_PK(2,2) 1042 3662 1079 3665 2383 1080
+CONVEX 1278 GT_PK(2,2) 1007 3666 1008 3667 2766 969
+CONVEX 1279 GT_PK(2,2) 1007 3667 969 3668 1957 968
+CONVEX 1280 GT_PK(2,2) 1007 3669 1006 3668 3632 968
+CONVEX 1281 GT_PK(2,2) 1007 3669 1006 3670 3645 1045
+CONVEX 1282 GT_PK(2,2) 1007 3671 1046 3670 2753 1045
+CONVEX 1283 GT_PK(2,2) 1007 3666 1008 3671 3672 1046
+CONVEX 1284 GT_PK(2,2) 1122 3673 1123 3674 3675 1158
+CONVEX 1285 GT_PK(2,2) 1122 3676 1157 3674 2770 1158
+CONVEX 1286 GT_PK(2,2) 973 3677 972 3678 2775 1011
+CONVEX 1287 GT_PK(2,2) 1050 3679 1049 3680 3681 1087
+CONVEX 1288 GT_PK(2,2) 1050 3679 1049 3682 2773 1011
+CONVEX 1289 GT_PK(2,2) 1160 3683 1124 3684 3685 1125
+CONVEX 1290 GT_PK(2,2) 1160 3686 1195 3687 3688 1194
+CONVEX 1291 GT_PK(2,2) 1089 3689 1051 3690 2789 1052
+CONVEX 1292 GT_PK(2,2) 1089 3691 1090 3690 3692 1052
+CONVEX 1293 GT_PK(2,2) 686 3693 646 3694 3695 647
+CONVEX 1294 GT_PK(2,2) 686 3696 687 3694 2950 647
+CONVEX 1295 GT_PK(2,2) 686 3693 646 3697 2813 685
+CONVEX 1296 GT_PK(2,2) 686 3698 726 3699 2933 1
+CONVEX 1297 GT_PK(2,2) 686 3696 687 3698 2946 726
+CONVEX 1298 GT_PK(2,2) 686 3700 725 3699 2930 1
+CONVEX 1299 GT_PK(2,2) 686 3700 725 3697 2796 685
+CONVEX 1300 GT_PK(2,2) 272 3701 307 3702 1991 306
+CONVEX 1301 GT_PK(2,2) 116 3703 91 3704 3705 90
+CONVEX 1302 GT_PK(2,2) 16 3706 30 3707 2818 15
+CONVEX 1303 GT_PK(2,2) 46 3708 27 3709 3081 45
+CONVEX 1304 GT_PK(2,2) 46 3710 28 3708 2825 27
+CONVEX 1305 GT_PK(2,2) 170 3711 201 3712 2237 202
+CONVEX 1306 GT_PK(2,2) 170 3711 201 3713 3104 169
+CONVEX 1307 GT_PK(2,2) 140 3714 139 3715 3716 112
+CONVEX 1308 GT_PK(2,2) 140 3717 113 3715 3110 112
+CONVEX 1309 GT_PK(2,2) 140 3717 113 3718 3111 141
+CONVEX 1310 GT_PK(2,2) 140 3719 170 3718 3720 141
+CONVEX 1311 GT_PK(2,2) 140 3714 139 3721 2245 169
+CONVEX 1312 GT_PK(2,2) 140 3719 170 3721 3713 169
+CONVEX 1313 GT_PK(2,2) 568 3722 528 3723 2833 529
+CONVEX 1314 GT_PK(2,2) 569 3724 570 3725 2808 609
+CONVEX 1315 GT_PK(2,2) 569 3726 608 3725 2945 609
+CONVEX 1316 GT_PK(2,2) 569 3727 568 3726 3728 608
+CONVEX 1317 GT_PK(2,2) 569 3724 570 3729 2810 530
+CONVEX 1318 GT_PK(2,2) 569 3730 529 3729 2852 530
+CONVEX 1319 GT_PK(2,2) 569 3727 568 3730 3723 529
+CONVEX 1320 GT_PK(2,2) 415 3731 414 3732 2909 377
+CONVEX 1321 GT_PK(2,2) 415 3733 378 3734 2914 416
+CONVEX 1322 GT_PK(2,2) 415 3733 378 3732 2911 377
+CONVEX 1323 GT_PK(2,2) 415 3735 454 3734 1988 416
+CONVEX 1324 GT_PK(2,2) 415 3736 453 3735 3737 454
+CONVEX 1325 GT_PK(2,2) 415 3731 414 3736 2848 453
+CONVEX 1326 GT_PK(2,2) 492 3738 531 3739 2811 530
+CONVEX 1327 GT_PK(2,2) 492 3740 491 3739 2851 530
+CONVEX 1328 GT_PK(2,2) 492 3738 531 3741 2961 493
+CONVEX 1329 GT_PK(2,2) 492 3740 491 3742 2855 453
+CONVEX 1330 GT_PK(2,2) 492 3743 454 3741 1990 493
+CONVEX 1331 GT_PK(2,2) 492 3742 453 3743 3737 454
+CONVEX 1332 GT_PK(2,2) 349 3744 314 3745 2206 313
+CONVEX 1333 GT_PK(2,2) 349 3746 348 3745 3747 313
+CONVEX 1334 GT_PK(2,2) 349 3748 385 3746 3749 348
+CONVEX 1335 GT_PK(2,2) 277 3750 311 3751 2861 276
+CONVEX 1336 GT_PK(2,2) 312 3752 348 3753 3747 313
+CONVEX 1337 GT_PK(2,2) 312 3754 277 3755 3750 311
+CONVEX 1338 GT_PK(2,2) 312 3756 347 3752 3757 348
+CONVEX 1339 GT_PK(2,2) 312 3756 347 3755 2875 311
+CONVEX 1340 GT_PK(2,2) 312 3758 278 3753 2205 313
+CONVEX 1341 GT_PK(2,2) 312 3754 277 3758 3759 278
+CONVEX 1342 GT_PK(2,2) 421 3760 460 3761 1981 459
+CONVEX 1343 GT_PK(2,2) 421 3762 420 3761 3763 459
+CONVEX 1344 GT_PK(2,2) 421 3760 460 3764 3765 422
+CONVEX 1345 GT_PK(2,2) 421 3762 420 3766 2869 383
+CONVEX 1346 GT_PK(2,2) 384 3767 347 3768 2873 383
+CONVEX 1347 GT_PK(2,2) 384 3769 421 3770 3764 422
+CONVEX 1348 GT_PK(2,2) 384 3769 421 3768 3766 383
+CONVEX 1349 GT_PK(2,2) 384 3771 385 3770 2857 422
+CONVEX 1350 GT_PK(2,2) 384 3771 385 3772 3749 348
+CONVEX 1351 GT_PK(2,2) 384 3767 347 3772 3757 348
+CONVEX 1352 GT_PK(2,2) 535 3773 575 3774 2993 574
+CONVEX 1353 GT_PK(2,2) 535 3775 536 3773 3776 575
+CONVEX 1354 GT_PK(2,2) 535 3775 536 3777 2989 497
+CONVEX 1355 GT_PK(2,2) 418 3778 417 3779 2001 456
+CONVEX 1356 GT_PK(2,2) 418 3780 457 3779 2886 456
+CONVEX 1357 GT_PK(2,2) 418 3780 457 3781 3782 419
+CONVEX 1358 GT_PK(2,2) 418 3778 417 3783 2005 380
+CONVEX 1359 GT_PK(2,2) 418 3784 381 3781 2871 419
+CONVEX 1360 GT_PK(2,2) 418 3784 381 3783 2905 380
+CONVEX 1361 GT_PK(2,2) 458 3785 497 3786 2883 459
+CONVEX 1362 GT_PK(2,2) 458 3787 457 3788 3782 419
+CONVEX 1363 GT_PK(2,2) 458 3789 420 3788 2872 419
+CONVEX 1364 GT_PK(2,2) 458 3789 420 3786 3763 459
+CONVEX 1365 GT_PK(2,2) 884 3790 844 3791 3792 883
+CONVEX 1366 GT_PK(2,2) 884 3793 924 3794 2300 885
+CONVEX 1367 GT_PK(2,2) 884 3794 885 3795 1738 845
+CONVEX 1368 GT_PK(2,2) 884 3790 844 3795 2935 845
+CONVEX 1369 GT_PK(2,2) 884 3791 883 3796 3797 923
+CONVEX 1370 GT_PK(2,2) 884 3793 924 3796 3798 923
+CONVEX 1371 GT_PK(2,2) 843 3799 844 3800 3792 883
+CONVEX 1372 GT_PK(2,2) 763 3801 802 3802 2936 762
+CONVEX 1373 GT_PK(2,2) 763 3803 723 3804 3529 724
+CONVEX 1374 GT_PK(2,2) 763 3803 723 3802 3526 762
+CONVEX 1375 GT_PK(2,2) 763 3805 764 3804 2800 724
+CONVEX 1376 GT_PK(2,2) 573 3806 613 3807 2996 574
+CONVEX 1377 GT_PK(2,2) 573 3808 572 3809 2958 533
+CONVEX 1378 GT_PK(2,2) 848 3810 808 3811 2967 847
+CONVEX 1379 GT_PK(2,2) 848 3812 887 3813 2297 888
+CONVEX 1380 GT_PK(2,2) 848 3812 887 3811 3152 847
+CONVEX 1381 GT_PK(2,2) 692 3814 652 3815 2953 653
+CONVEX 1382 GT_PK(2,2) 692 3816 691 3814 3817 652
+CONVEX 1383 GT_PK(2,2) 612 3818 613 3819 2951 652
+CONVEX 1384 GT_PK(2,2) 612 3820 573 3818 3806 613
+CONVEX 1385 GT_PK(2,2) 612 3821 611 3822 2984 572
+CONVEX 1386 GT_PK(2,2) 612 3820 573 3822 3808 572
+CONVEX 1387 GT_PK(2,2) 651 3823 612 3824 3821 611
+CONVEX 1388 GT_PK(2,2) 651 3823 612 3825 3819 652
+CONVEX 1389 GT_PK(2,2) 651 3826 691 3825 3817 652
+CONVEX 1390 GT_PK(2,2) 651 3826 691 3827 2980 690
+CONVEX 1391 GT_PK(2,2) 650 3828 689 3829 2976 649
+CONVEX 1392 GT_PK(2,2) 650 3830 610 3829 1968 649
+CONVEX 1393 GT_PK(2,2) 650 3831 611 3830 2983 610
+CONVEX 1394 GT_PK(2,2) 650 3832 651 3831 3824 611
+CONVEX 1395 GT_PK(2,2) 650 3828 689 3833 2979 690
+CONVEX 1396 GT_PK(2,2) 650 3832 651 3833 3827 690
+CONVEX 1397 GT_PK(2,2) 815 3834 854 3835 2986 855
+CONVEX 1398 GT_PK(2,2) 893 3836 894 3837 3838 933
+CONVEX 1399 GT_PK(2,2) 893 3839 854 3836 2985 894
+CONVEX 1400 GT_PK(2,2) 893 3840 932 3837 1951 933
+CONVEX 1401 GT_PK(2,2) 893 3841 853 3839 3842 854
+CONVEX 1402 GT_PK(2,2) 812 3843 813 3844 2999 773
+CONVEX 1403 GT_PK(2,2) 889 3845 888 3846 2295 928
+CONVEX 1404 GT_PK(2,2) 889 3847 929 3846 3636 928
+CONVEX 1405 GT_PK(2,2) 695 3848 694 3849 3850 655
+CONVEX 1406 GT_PK(2,2) 770 3851 769 3852 2970 730
+CONVEX 1407 GT_PK(2,2) 615 3853 614 3854 2991 575
+CONVEX 1408 GT_PK(2,2) 548 3855 549 3856 3004 509
+CONVEX 1409 GT_PK(2,2) 548 3857 589 3858 2029 588
+CONVEX 1410 GT_PK(2,2) 548 3855 549 3857 3859 589
+CONVEX 1411 GT_PK(2,2) 434 3860 395 3861 2088 396
+CONVEX 1412 GT_PK(2,2) 434 3862 433 3860 3006 395
+CONVEX 1413 GT_PK(2,2) 434 3863 472 3864 3865 473
+CONVEX 1414 GT_PK(2,2) 434 3863 472 3862 3866 433
+CONVEX 1415 GT_PK(2,2) 442 3867 404 3868 3013 443
+CONVEX 1416 GT_PK(2,2) 442 3867 404 3869 3008 403
+CONVEX 1417 GT_PK(2,2) 643 3870 683 3871 2673 682
+CONVEX 1418 GT_PK(2,2) 643 3872 642 3871 3016 682
+CONVEX 1419 GT_PK(2,2) 643 3872 642 3873 3874 603
+CONVEX 1420 GT_PK(2,2) 643 3875 644 3870 3020 683
+CONVEX 1421 GT_PK(2,2) 602 3876 642 3877 3874 603
+CONVEX 1422 GT_PK(2,2) 602 3878 562 3879 2053 601
+CONVEX 1423 GT_PK(2,2) 602 3879 601 3880 2049 641
+CONVEX 1424 GT_PK(2,2) 602 3876 642 3880 3017 641
+CONVEX 1425 GT_PK(2,2) 602 3878 562 3881 2058 563
+CONVEX 1426 GT_PK(2,2) 602 3877 603 3881 3882 563
+CONVEX 1427 GT_PK(2,2) 565 3883 526 3884 3885 525
+CONVEX 1428 GT_PK(2,2) 488 3886 489 3887 2840 527
+CONVEX 1429 GT_PK(2,2) 488 3888 526 3887 3889 527
+CONVEX 1430 GT_PK(2,2) 486 3890 524 3891 3892 525
+CONVEX 1431 GT_PK(2,2) 444 3893 482 3894 3895 443
+CONVEX 1432 GT_PK(2,2) 444 3894 443 3896 3014 405
+CONVEX 1433 GT_PK(2,2) 483 3897 482 3898 3026 521
+CONVEX 1434 GT_PK(2,2) 483 3898 521 3899 2059 522
+CONVEX 1435 GT_PK(2,2) 483 3900 484 3899 3023 522
+CONVEX 1436 GT_PK(2,2) 483 3900 484 3901 3902 445
+CONVEX 1437 GT_PK(2,2) 483 3903 444 3901 3904 445
+CONVEX 1438 GT_PK(2,2) 483 3903 444 3897 3893 482
+CONVEX 1439 GT_PK(2,2) 519 3905 559 3906 2661 520
+CONVEX 1440 GT_PK(2,2) 519 3907 558 3905 3030 559
+CONVEX 1441 GT_PK(2,2) 519 3908 518 3909 3910 480
+CONVEX 1442 GT_PK(2,2) 519 3908 518 3907 3376 558
+CONVEX 1443 GT_PK(2,2) 288 3911 287 3912 2120 253
+CONVEX 1444 GT_PK(2,2) 288 3913 323 3911 3048 287
+CONVEX 1445 GT_PK(2,2) 288 3914 254 3912 2115 253
+CONVEX 1446 GT_PK(2,2) 288 3914 254 3915 2118 289
+CONVEX 1447 GT_PK(2,2) 244 3916 212 3917 3057 245
+CONVEX 1448 GT_PK(2,2) 244 3918 211 3916 3062 212
+CONVEX 1449 GT_PK(2,2) 244 3919 278 3917 2203 245
+CONVEX 1450 GT_PK(2,2) 244 3920 277 3919 3759 278
+CONVEX 1451 GT_PK(2,2) 150 3921 180 3922 3060 151
+CONVEX 1452 GT_PK(2,2) 150 3923 122 3924 3925 149
+CONVEX 1453 GT_PK(2,2) 121 3926 122 3927 3928 96
+CONVEX 1454 GT_PK(2,2) 121 3926 122 3929 3925 149
+CONVEX 1455 GT_PK(2,2) 97 3930 122 3931 3928 96
+CONVEX 1456 GT_PK(2,2) 97 3932 73 3931 3933 96
+CONVEX 1457 GT_PK(2,2) 97 3934 74 3932 3066 73
+CONVEX 1458 GT_PK(2,2) 97 3934 74 3935 3067 98
+CONVEX 1459 GT_PK(2,2) 93 3936 69 3937 3938 92
+CONVEX 1460 GT_PK(2,2) 51 3939 73 3940 2183 33
+CONVEX 1461 GT_PK(2,2) 51 3941 32 3940 3942 33
+CONVEX 1462 GT_PK(2,2) 226 3943 225 3944 1474 259
+CONVEX 1463 GT_PK(2,2) 226 3945 193 3943 3092 225
+CONVEX 1464 GT_PK(2,2) 294 3946 259 3947 1449 293
+CONVEX 1465 GT_PK(2,2) 294 3948 329 3947 2044 293
+CONVEX 1466 GT_PK(2,2) 294 3948 329 3949 2041 330
+CONVEX 1467 GT_PK(2,2) 294 3950 295 3949 3951 330
+CONVEX 1468 GT_PK(2,2) 331 3952 367 3953 2046 330
+CONVEX 1469 GT_PK(2,2) 331 3954 295 3953 3951 330
+CONVEX 1470 GT_PK(2,2) 134 3955 107 3956 3088 106
+CONVEX 1471 GT_PK(2,2) 134 3957 163 3958 3959 164
+CONVEX 1472 GT_PK(2,2) 195 3960 196 3961 3962 164
+CONVEX 1473 GT_PK(2,2) 195 3963 163 3961 3959 164
+CONVEX 1474 GT_PK(2,2) 232 3964 200 3965 3105 233
+CONVEX 1475 GT_PK(2,2) 111 3966 139 3967 3716 112
+CONVEX 1476 GT_PK(2,2) 111 3968 86 3967 3107 112
+CONVEX 1477 GT_PK(2,2) 63 3969 86 3970 3106 87
+CONVEX 1478 GT_PK(2,2) 63 3970 87 3971 2242 64
+CONVEX 1479 GT_PK(2,2) 63 3972 42 3973 2256 41
+CONVEX 1480 GT_PK(2,2) 63 3972 42 3971 2258 64
+CONVEX 1481 GT_PK(2,2) 62 3974 40 3975 3119 61
+CONVEX 1482 GT_PK(2,2) 62 3976 63 3977 3969 86
+CONVEX 1483 GT_PK(2,2) 62 3974 40 3978 3118 41
+CONVEX 1484 GT_PK(2,2) 62 3976 63 3978 3973 41
+CONVEX 1485 GT_PK(2,2) 38 3979 59 3980 3123 37
+CONVEX 1486 GT_PK(2,2) 38 3980 37 3981 2235 19
+CONVEX 1487 GT_PK(2,2) 38 3982 39 3983 2261 20
+CONVEX 1488 GT_PK(2,2) 38 3983 20 3984 1496 5
+CONVEX 1489 GT_PK(2,2) 38 3981 19 3984 3985 5
+CONVEX 1490 GT_PK(2,2) 83 3986 59 3987 3122 82
+CONVEX 1491 GT_PK(2,2) 83 3988 108 3987 3125 82
+CONVEX 1492 GT_PK(2,2) 83 3988 108 3989 3990 109
+CONVEX 1493 GT_PK(2,2) 165 3991 196 3992 3962 164
+CONVEX 1494 GT_PK(2,2) 1338 3993 1364 3994 3127 1339
+CONVEX 1495 GT_PK(2,2) 1338 3995 1337 3996 2272 1310
+CONVEX 1496 GT_PK(2,2) 1338 3997 1311 3994 2404 1339
+CONVEX 1497 GT_PK(2,2) 1338 3997 1311 3996 3224 1310
+CONVEX 1498 GT_PK(2,2) 1388 3998 1364 3999 4000 1387
+CONVEX 1499 GT_PK(2,2) 1388 3999 1387 4001 2267 1409
+CONVEX 1500 GT_PK(2,2) 1388 4002 1410 4001 2353 1409
+CONVEX 1501 GT_PK(2,2) 1388 3998 1364 4003 3126 1365
+CONVEX 1502 GT_PK(2,2) 1363 4004 1362 4005 2279 1337
+CONVEX 1503 GT_PK(2,2) 1363 4006 1338 4005 3995 1337
+CONVEX 1504 GT_PK(2,2) 1363 4006 1338 4007 3993 1364
+CONVEX 1505 GT_PK(2,2) 1363 4007 1364 4008 4000 1387
+CONVEX 1506 GT_PK(2,2) 1363 4008 1387 4009 2268 1386
+CONVEX 1507 GT_PK(2,2) 1363 4004 1362 4009 2276 1386
+CONVEX 1508 GT_PK(2,2) 1109 4010 1144 4011 3547 1145
+CONVEX 1509 GT_PK(2,2) 1109 4010 1144 4012 4013 1108
+CONVEX 1510 GT_PK(2,2) 1037 4014 1038 4015 3139 1075
+CONVEX 1511 GT_PK(2,2) 1037 4016 1074 4015 4017 1075
+CONVEX 1512 GT_PK(2,2) 962 4018 1000 4019 2283 1001
+CONVEX 1513 GT_PK(2,2) 962 4020 963 4019 3131 1001
+CONVEX 1514 GT_PK(2,2) 962 4021 924 4022 3798 923
+CONVEX 1515 GT_PK(2,2) 962 4020 963 4021 3134 924
+CONVEX 1516 GT_PK(2,2) 926 4023 886 4024 3147 925
+CONVEX 1517 GT_PK(2,2) 926 4024 925 4025 3133 964
+CONVEX 1518 GT_PK(2,2) 926 4026 927 4027 2296 887
+CONVEX 1519 GT_PK(2,2) 926 4023 886 4027 3151 887
+CONVEX 1520 GT_PK(2,2) 926 4028 965 4025 3143 964
+CONVEX 1521 GT_PK(2,2) 926 4028 965 4026 3140 927
+CONVEX 1522 GT_PK(2,2) 1349 4029 1374 4030 3164 1348
+CONVEX 1523 GT_PK(2,2) 1349 4031 1321 4030 3170 1348
+CONVEX 1524 GT_PK(2,2) 1349 4029 1374 4032 4033 1350
+CONVEX 1525 GT_PK(2,2) 1191 4034 1157 4035 2769 1192
+CONVEX 1526 GT_PK(2,2) 1191 4036 1190 4037 3244 1156
+CONVEX 1527 GT_PK(2,2) 1191 4034 1157 4037 4038 1156
+CONVEX 1528 GT_PK(2,2) 1292 4039 1261 4040 3189 1293
+CONVEX 1529 GT_PK(2,2) 1292 4041 1321 4042 3172 1291
+CONVEX 1530 GT_PK(2,2) 1226 4043 1259 4044 4045 1258
+CONVEX 1531 GT_PK(2,2) 1226 4046 1193 4047 1740 1192
+CONVEX 1532 GT_PK(2,2) 1260 4048 1292 4049 4039 1261
+CONVEX 1533 GT_PK(2,2) 1260 4050 1259 4051 4052 1291
+CONVEX 1534 GT_PK(2,2) 1260 4048 1292 4051 4042 1291
+CONVEX 1535 GT_PK(2,2) 1114 4053 1077 4054 3198 1078
+CONVEX 1536 GT_PK(2,2) 1114 4053 1077 4055 3195 1113
+CONVEX 1537 GT_PK(2,2) 1114 4054 1078 4056 2380 1115
+CONVEX 1538 GT_PK(2,2) 1114 4057 1150 4056 3206 1115
+CONVEX 1539 GT_PK(2,2) 1114 4055 1113 4058 2373 1149
+CONVEX 1540 GT_PK(2,2) 1114 4057 1150 4058 2377 1149
+CONVEX 1541 GT_PK(2,2) 1283 4059 1251 4060 3213 1282
+CONVEX 1542 GT_PK(2,2) 1283 4061 1313 4062 4063 1284
+CONVEX 1543 GT_PK(2,2) 1283 4064 1252 4062 2402 1284
+CONVEX 1544 GT_PK(2,2) 1283 4059 1251 4064 3218 1252
+CONVEX 1545 GT_PK(2,2) 1283 4060 1282 4065 2407 1312
+CONVEX 1546 GT_PK(2,2) 1283 4061 1313 4065 4066 1312
+CONVEX 1547 GT_PK(2,2) 1340 4067 1366 4068 3232 1341
+CONVEX 1548 GT_PK(2,2) 1340 4069 1313 4070 4066 1312
+CONVEX 1549 GT_PK(2,2) 1340 4069 1313 4068 4071 1341
+CONVEX 1550 GT_PK(2,2) 1340 4070 1312 4072 2405 1339
+CONVEX 1551 GT_PK(2,2) 1340 4073 1365 4072 3128 1339
+CONVEX 1552 GT_PK(2,2) 1340 4067 1366 4073 4074 1365
+CONVEX 1553 GT_PK(2,2) 1315 4075 1342 4076 3234 1343
+CONVEX 1554 GT_PK(2,2) 1315 4077 1286 4078 3160 1285
+CONVEX 1555 GT_PK(2,2) 1315 4077 1286 4079 4080 1316
+CONVEX 1556 GT_PK(2,2) 1315 4076 1343 4079 2342 1316
+CONVEX 1557 GT_PK(2,2) 1120 4081 1155 4082 3238 1119
+CONVEX 1558 GT_PK(2,2) 1120 4081 1155 4083 3243 1156
+CONVEX 1559 GT_PK(2,2) 1120 4084 1083 4082 3639 1119
+CONVEX 1560 GT_PK(2,2) 626 4085 665 4086 3258 625
+CONVEX 1561 GT_PK(2,2) 626 4087 666 4085 3251 665
+CONVEX 1562 GT_PK(2,2) 626 4088 587 4086 2428 625
+CONVEX 1563 GT_PK(2,2) 703 4089 704 4090 1775 744
+CONVEX 1564 GT_PK(2,2) 703 4091 664 4089 3254 704
+CONVEX 1565 GT_PK(2,2) 703 4092 743 4090 1529 744
+CONVEX 1566 GT_PK(2,2) 703 4091 664 4093 3256 663
+CONVEX 1567 GT_PK(2,2) 703 4094 702 4093 3296 663
+CONVEX 1568 GT_PK(2,2) 703 4094 702 4092 3297 743
+CONVEX 1569 GT_PK(2,2) 503 4095 504 4096 4097 465
+CONVEX 1570 GT_PK(2,2) 503 4095 504 4098 3283 542
+CONVEX 1571 GT_PK(2,2) 499 4099 460 4100 1982 498
+CONVEX 1572 GT_PK(2,2) 466 4101 504 4102 4097 465
+CONVEX 1573 GT_PK(2,2) 466 4103 428 4104 1556 467
+CONVEX 1574 GT_PK(2,2) 466 4105 505 4104 3264 467
+CONVEX 1575 GT_PK(2,2) 466 4101 504 4105 3279 505
+CONVEX 1576 GT_PK(2,2) 466 4106 427 4102 4107 465
+CONVEX 1577 GT_PK(2,2) 466 4106 427 4103 2507 428
+CONVEX 1578 GT_PK(2,2) 660 4108 661 4109 4110 700
+CONVEX 1579 GT_PK(2,2) 660 4111 621 4108 3305 661
+CONVEX 1580 GT_PK(2,2) 701 4112 702 4113 3294 741
+CONVEX 1581 GT_PK(2,2) 701 4112 702 4114 3295 662
+CONVEX 1582 GT_PK(2,2) 701 4114 662 4115 3301 661
+CONVEX 1583 GT_PK(2,2) 701 4115 661 4116 4110 700
+CONVEX 1584 GT_PK(2,2) 701 4117 740 4116 3269 700
+CONVEX 1585 GT_PK(2,2) 701 4117 740 4113 3268 741
+CONVEX 1586 GT_PK(2,2) 583 4118 584 4119 3290 623
+CONVEX 1587 GT_PK(2,2) 583 4120 622 4119 3299 623
+CONVEX 1588 GT_PK(2,2) 583 4118 584 4121 3292 544
+CONVEX 1589 GT_PK(2,2) 583 4121 544 4122 3284 543
+CONVEX 1590 GT_PK(2,2) 583 4122 543 4123 3281 582
+CONVEX 1591 GT_PK(2,2) 583 4120 622 4123 3303 582
+CONVEX 1592 GT_PK(2,2) 1091 4124 1054 4125 3322 1092
+CONVEX 1593 GT_PK(2,2) 1091 4126 1127 4127 4128 1090
+CONVEX 1594 GT_PK(2,2) 1053 4129 1014 4130 2783 1052
+CONVEX 1595 GT_PK(2,2) 1053 4131 1090 4130 3692 1052
+CONVEX 1596 GT_PK(2,2) 1053 4129 1014 4132 2787 1015
+CONVEX 1597 GT_PK(2,2) 1053 4133 1054 4132 3342 1015
+CONVEX 1598 GT_PK(2,2) 1053 4134 1091 4131 4127 1090
+CONVEX 1599 GT_PK(2,2) 1053 4134 1091 4133 4124 1054
+CONVEX 1600 GT_PK(2,2) 425 4135 388 4136 3358 387
+CONVEX 1601 GT_PK(2,2) 389 4137 427 4138 2508 390
+CONVEX 1602 GT_PK(2,2) 389 4139 388 4140 3356 352
+CONVEX 1603 GT_PK(2,2) 389 4141 353 4138 2518 390
+CONVEX 1604 GT_PK(2,2) 389 4141 353 4140 2516 352
+CONVEX 1605 GT_PK(2,2) 350 4142 314 4143 1701 315
+CONVEX 1606 GT_PK(2,2) 350 4144 351 4143 3354 315
+CONVEX 1607 GT_PK(2,2) 350 4145 349 4142 3744 314
+CONVEX 1608 GT_PK(2,2) 350 4144 351 4146 3357 387
+CONVEX 1609 GT_PK(2,2) 877 4147 838 4148 2520 878
+CONVEX 1610 GT_PK(2,2) 877 4149 837 4147 3362 838
+CONVEX 1611 GT_PK(2,2) 800 4150 799 4151 3365 839
+CONVEX 1612 GT_PK(2,2) 800 4152 761 4153 2668 801
+CONVEX 1613 GT_PK(2,2) 800 4152 761 4154 1919 760
+CONVEX 1614 GT_PK(2,2) 800 4150 799 4154 3368 760
+CONVEX 1615 GT_PK(2,2) 676 4155 637 4156 3370 636
+CONVEX 1616 GT_PK(2,2) 676 4156 636 4157 4158 675
+CONVEX 1617 GT_PK(2,2) 676 4159 715 4157 2538 675
+CONVEX 1618 GT_PK(2,2) 676 4159 715 4160 3517 716
+CONVEX 1619 GT_PK(2,2) 676 4161 677 4160 1888 716
+CONVEX 1620 GT_PK(2,2) 676 4155 637 4161 3373 677
+CONVEX 1621 GT_PK(2,2) 479 4162 518 4163 3374 517
+CONVEX 1622 GT_PK(2,2) 479 4163 517 4164 2528 478
+CONVEX 1623 GT_PK(2,2) 479 4165 440 4164 3037 478
+CONVEX 1624 GT_PK(2,2) 479 4162 518 4166 3910 480
+CONVEX 1625 GT_PK(2,2) 515 4167 516 4168 2526 477
+CONVEX 1626 GT_PK(2,2) 475 4169 436 4170 3035 437
+CONVEX 1627 GT_PK(2,2) 511 4171 472 4172 4173 510
+CONVEX 1628 GT_PK(2,2) 511 4171 472 4174 3865 473
+CONVEX 1629 GT_PK(2,2) 550 4175 549 4176 3859 589
+CONVEX 1630 GT_PK(2,2) 550 4175 549 4177 3003 510
+CONVEX 1631 GT_PK(2,2) 550 4178 511 4177 4172 510
+CONVEX 1632 GT_PK(2,2) 635 4179 636 4180 4158 675
+CONVEX 1633 GT_PK(2,2) 635 4181 596 4179 2534 636
+CONVEX 1634 GT_PK(2,2) 673 4182 713 4183 3432 712
+CONVEX 1635 GT_PK(2,2) 593 4184 592 4185 4186 632
+CONVEX 1636 GT_PK(2,2) 593 4184 592 4187 4188 553
+CONVEX 1637 GT_PK(2,2) 709 4189 749 4190 4191 710
+CONVEX 1638 GT_PK(2,2) 709 4189 749 4192 3411 708
+CONVEX 1639 GT_PK(2,2) 709 4190 710 4193 3379 670
+CONVEX 1640 GT_PK(2,2) 709 4192 708 4193 3395 670
+CONVEX 1641 GT_PK(2,2) 905 4194 865 4195 3403 904
+CONVEX 1642 GT_PK(2,2) 905 4196 943 4195 4197 904
+CONVEX 1643 GT_PK(2,2) 827 4198 787 4199 3407 788
+CONVEX 1644 GT_PK(2,2) 827 4198 787 4200 2546 826
+CONVEX 1645 GT_PK(2,2) 866 4201 867 4202 4203 906
+CONVEX 1646 GT_PK(2,2) 866 4204 905 4202 4205 906
+CONVEX 1647 GT_PK(2,2) 866 4204 905 4206 4194 865
+CONVEX 1648 GT_PK(2,2) 866 4207 827 4201 4208 867
+CONVEX 1649 GT_PK(2,2) 866 4206 865 4209 3402 826
+CONVEX 1650 GT_PK(2,2) 866 4207 827 4209 4200 826
+CONVEX 1651 GT_PK(2,2) 832 4210 831 4211 3439 792
+CONVEX 1652 GT_PK(2,2) 832 4211 792 4212 3387 793
+CONVEX 1653 GT_PK(2,2) 832 4213 833 4212 3507 793
+CONVEX 1654 GT_PK(2,2) 832 4213 833 4214 3504 872
+CONVEX 1655 GT_PK(2,2) 830 4215 831 4216 3440 791
+CONVEX 1656 GT_PK(2,2) 828 4217 867 4218 4219 868
+CONVEX 1657 GT_PK(2,2) 828 4220 789 4221 3442 788
+CONVEX 1658 GT_PK(2,2) 828 4222 827 4221 4199 788
+CONVEX 1659 GT_PK(2,2) 828 4222 827 4217 4208 867
+CONVEX 1660 GT_PK(2,2) 986 4223 1025 4224 3448 1024
+CONVEX 1661 GT_PK(2,2) 986 4225 985 4224 2602 1024
+CONVEX 1662 GT_PK(2,2) 986 4226 947 4227 3457 948
+CONVEX 1663 GT_PK(2,2) 986 4226 947 4225 4228 985
+CONVEX 1664 GT_PK(2,2) 907 4229 867 4230 4219 868
+CONVEX 1665 GT_PK(2,2) 907 4229 867 4231 4203 906
+CONVEX 1666 GT_PK(2,2) 907 4232 945 4231 4233 906
+CONVEX 1667 GT_PK(2,2) 990 4234 991 4235 3460 1029
+CONVEX 1668 GT_PK(2,2) 990 4235 1029 4236 3429 1028
+CONVEX 1669 GT_PK(2,2) 990 4237 989 4236 2619 1028
+CONVEX 1670 GT_PK(2,2) 990 4238 951 4237 3485 989
+CONVEX 1671 GT_PK(2,2) 990 4234 991 4239 3476 952
+CONVEX 1672 GT_PK(2,2) 990 4238 951 4239 3489 952
+CONVEX 1673 GT_PK(2,2) 1072 4240 1073 4241 4242 1035
+CONVEX 1674 GT_PK(2,2) 1072 4243 1109 4244 4012 1108
+CONVEX 1675 GT_PK(2,2) 1072 4243 1109 4240 4245 1073
+CONVEX 1676 GT_PK(2,2) 994 4246 993 4247 3471 1032
+CONVEX 1677 GT_PK(2,2) 994 4248 1033 4247 3463 1032
+CONVEX 1678 GT_PK(2,2) 994 4246 993 4249 4250 955
+CONVEX 1679 GT_PK(2,2) 994 4251 956 4249 4252 955
+CONVEX 1680 GT_PK(2,2) 954 4253 953 4254 3478 915
+CONVEX 1681 GT_PK(2,2) 954 4255 993 4256 4250 955
+CONVEX 1682 GT_PK(2,2) 954 4255 993 4257 3469 992
+CONVEX 1683 GT_PK(2,2) 954 4253 953 4257 3477 992
+CONVEX 1684 GT_PK(2,2) 954 4258 916 4256 4259 955
+CONVEX 1685 GT_PK(2,2) 954 4258 916 4254 4260 915
+CONVEX 1686 GT_PK(2,2) 1238 4261 1269 4262 2722 1237
+CONVEX 1687 GT_PK(2,2) 1238 4263 1205 4262 3491 1237
+CONVEX 1688 GT_PK(2,2) 1238 4261 1269 4264 2726 1270
+CONVEX 1689 GT_PK(2,2) 1238 4265 1239 4264 3613 1270
+CONVEX 1690 GT_PK(2,2) 1238 4263 1205 4266 3583 1206
+CONVEX 1691 GT_PK(2,2) 1238 4265 1239 4266 3609 1206
+CONVEX 1692 GT_PK(2,2) 1210 4267 1243 4268 2748 1211
+CONVEX 1693 GT_PK(2,2) 1210 4267 1243 4269 3617 1242
+CONVEX 1694 GT_PK(2,2) 795 4270 834 4271 3510 835
+CONVEX 1695 GT_PK(2,2) 795 4272 755 4273 3518 756
+CONVEX 1696 GT_PK(2,2) 795 4270 834 4274 3512 794
+CONVEX 1697 GT_PK(2,2) 795 4272 755 4274 3515 794
+CONVEX 1698 GT_PK(2,2) 795 4275 796 4273 1889 756
+CONVEX 1699 GT_PK(2,2) 795 4275 796 4271 1895 835
+CONVEX 1700 GT_PK(2,2) 1403 4276 1404 4277 2681 1422
+CONVEX 1701 GT_PK(2,2) 1403 4278 1402 4279 4280 1381
+CONVEX 1702 GT_PK(2,2) 1333 4281 1334 4282 3570 1306
+CONVEX 1703 GT_PK(2,2) 1333 4283 1305 4282 4284 1306
+CONVEX 1704 GT_PK(2,2) 1296 4285 1324 4286 4287 1297
+CONVEX 1705 GT_PK(2,2) 1296 4288 1267 4289 3596 1266
+CONVEX 1706 GT_PK(2,2) 1296 4288 1267 4286 2737 1297
+CONVEX 1707 GT_PK(2,2) 1325 4290 1324 4291 4292 1351
+CONVEX 1708 GT_PK(2,2) 1325 4293 1326 4294 3573 1298
+CONVEX 1709 GT_PK(2,2) 1325 4293 1326 4291 3577 1351
+CONVEX 1710 GT_PK(2,2) 1325 4294 1298 4295 2717 1297
+CONVEX 1711 GT_PK(2,2) 1325 4290 1324 4295 4287 1297
+CONVEX 1712 GT_PK(2,2) 1398 4296 1353 4297 4298 1376
+CONVEX 1713 GT_PK(2,2) 1146 4299 1147 4300 2708 1181
+CONVEX 1714 GT_PK(2,2) 1146 4301 1180 4300 3542 1181
+CONVEX 1715 GT_PK(2,2) 1146 4301 1180 4302 3544 1145
+CONVEX 1716 GT_PK(2,2) 1276 4303 1305 4304 4284 1306
+CONVEX 1717 GT_PK(2,2) 1276 4305 1277 4304 3568 1306
+CONVEX 1718 GT_PK(2,2) 1276 4305 1277 4306 3555 1245
+CONVEX 1719 GT_PK(2,2) 1276 4306 1245 4307 2701 1244
+CONVEX 1720 GT_PK(2,2) 1352 4308 1326 4309 3574 1327
+CONVEX 1721 GT_PK(2,2) 1352 4308 1326 4310 3576 1375
+CONVEX 1722 GT_PK(2,2) 1352 4311 1353 4309 4312 1327
+CONVEX 1723 GT_PK(2,2) 1352 4310 1375 4313 4314 1376
+CONVEX 1724 GT_PK(2,2) 1352 4311 1353 4313 4298 1376
+CONVEX 1725 GT_PK(2,2) 1202 4315 1203 4316 3607 1169
+CONVEX 1726 GT_PK(2,2) 1202 4316 1169 4317 2734 1168
+CONVEX 1727 GT_PK(2,2) 1202 4318 1235 4319 3599 1234
+CONVEX 1728 GT_PK(2,2) 1202 4318 1235 4315 3601 1203
+CONVEX 1729 GT_PK(2,2) 1202 4320 1201 4319 1863 1234
+CONVEX 1730 GT_PK(2,2) 1202 4320 1201 4317 2572 1168
+CONVEX 1731 GT_PK(2,2) 1275 4321 1274 4322 3620 1304
+CONVEX 1732 GT_PK(2,2) 1275 4321 1274 4323 3615 1243
+CONVEX 1733 GT_PK(2,2) 1275 4324 1305 4322 4325 1304
+CONVEX 1734 GT_PK(2,2) 1275 4326 1276 4324 4303 1305
+CONVEX 1735 GT_PK(2,2) 1275 4323 1243 4327 2747 1244
+CONVEX 1736 GT_PK(2,2) 1275 4326 1276 4327 4307 1244
+CONVEX 1737 GT_PK(2,2) 1118 4328 1082 4329 3647 1081
+CONVEX 1738 GT_PK(2,2) 1118 4330 1117 4329 3650 1081
+CONVEX 1739 GT_PK(2,2) 1118 4328 1082 4331 3638 1119
+CONVEX 1740 GT_PK(2,2) 1118 4330 1117 4332 3652 1153
+CONVEX 1741 GT_PK(2,2) 1118 4333 1154 4331 3239 1119
+CONVEX 1742 GT_PK(2,2) 1118 4333 1154 4332 2414 1153
+CONVEX 1743 GT_PK(2,2) 1086 4334 1123 4335 2792 1087
+CONVEX 1744 GT_PK(2,2) 1086 4336 1122 4334 3673 1123
+CONVEX 1745 GT_PK(2,2) 1086 4337 1049 4335 3681 1087
+CONVEX 1746 GT_PK(2,2) 1121 4338 1157 4339 4038 1156
+CONVEX 1747 GT_PK(2,2) 1121 4340 1122 4338 3676 1157
+CONVEX 1748 GT_PK(2,2) 1121 4341 1120 4339 4083 1156
+CONVEX 1749 GT_PK(2,2) 935 4342 973 4343 4344 974
+CONVEX 1750 GT_PK(2,2) 935 4345 895 4346 3328 896
+CONVEX 1751 GT_PK(2,2) 935 4347 936 4346 1797 896
+CONVEX 1752 GT_PK(2,2) 935 4343 974 4347 2778 936
+CONVEX 1753 GT_PK(2,2) 934 4348 895 4349 1959 894
+CONVEX 1754 GT_PK(2,2) 934 4350 973 4351 3677 972
+CONVEX 1755 GT_PK(2,2) 934 4352 935 4348 4345 895
+CONVEX 1756 GT_PK(2,2) 934 4352 935 4350 4342 973
+CONVEX 1757 GT_PK(2,2) 934 4349 894 4353 3838 933
+CONVEX 1758 GT_PK(2,2) 934 4351 972 4353 2750 933
+CONVEX 1759 GT_PK(2,2) 1012 4354 1051 4355 2788 1013
+CONVEX 1760 GT_PK(2,2) 1012 4356 974 4355 2780 1013
+CONVEX 1761 GT_PK(2,2) 1012 4357 973 4356 4344 974
+CONVEX 1762 GT_PK(2,2) 1012 4357 973 4358 3678 1011
+CONVEX 1763 GT_PK(2,2) 1012 4359 1050 4358 3682 1011
+CONVEX 1764 GT_PK(2,2) 1012 4359 1050 4354 4360 1051
+CONVEX 1765 GT_PK(2,2) 1159 4361 1160 4362 3683 1124
+CONVEX 1766 GT_PK(2,2) 1159 4363 1193 4364 1741 1158
+CONVEX 1767 GT_PK(2,2) 1159 4365 1194 4363 4366 1193
+CONVEX 1768 GT_PK(2,2) 1159 4361 1160 4365 3687 1194
+CONVEX 1769 GT_PK(2,2) 1159 4367 1123 4364 3675 1158
+CONVEX 1770 GT_PK(2,2) 1159 4362 1124 4367 2790 1123
+CONVEX 1771 GT_PK(2,2) 1088 4368 1124 4369 3685 1125
+CONVEX 1772 GT_PK(2,2) 1088 4370 1089 4369 4371 1125
+CONVEX 1773 GT_PK(2,2) 1088 4368 1124 4372 2791 1087
+CONVEX 1774 GT_PK(2,2) 1088 4370 1089 4373 3689 1051
+CONVEX 1775 GT_PK(2,2) 1088 4374 1050 4372 3680 1087
+CONVEX 1776 GT_PK(2,2) 1088 4374 1050 4373 4360 1051
+CONVEX 1777 GT_PK(2,2) 1128 4375 1127 4376 4377 1163
+CONVEX 1778 GT_PK(2,2) 1128 4378 1092 4379 3308 1129
+CONVEX 1779 GT_PK(2,2) 1128 4380 1091 4378 4125 1092
+CONVEX 1780 GT_PK(2,2) 1128 4380 1091 4375 4126 1127
+CONVEX 1781 GT_PK(2,2) 1128 4381 1164 4379 1542 1129
+CONVEX 1782 GT_PK(2,2) 1128 4376 1163 4381 2793 1164
+CONVEX 1783 GT_PK(2,2) 1161 4382 1160 4383 3684 1125
+CONVEX 1784 GT_PK(2,2) 1161 4384 1195 4385 3185 1196
+CONVEX 1785 GT_PK(2,2) 1161 4382 1160 4384 3686 1195
+CONVEX 1786 GT_PK(2,2) 1162 4386 1163 4387 2795 1197
+CONVEX 1787 GT_PK(2,2) 1162 4388 1127 4386 4377 1163
+CONVEX 1788 GT_PK(2,2) 1162 4387 1197 4389 1964 1196
+CONVEX 1789 GT_PK(2,2) 1162 4390 1161 4389 4385 1196
+CONVEX 1790 GT_PK(2,2) 271 4391 305 4392 2917 306
+CONVEX 1791 GT_PK(2,2) 271 4393 272 4392 3702 306
+CONVEX 1792 GT_PK(2,2) 240 4394 241 4395 1972 274
+CONVEX 1793 GT_PK(2,2) 273 4396 307 4397 2009 308
+CONVEX 1794 GT_PK(2,2) 273 4398 272 4396 3701 307
+CONVEX 1795 GT_PK(2,2) 273 4399 274 4397 2897 308
+CONVEX 1796 GT_PK(2,2) 273 4400 240 4399 4395 274
+CONVEX 1797 GT_PK(2,2) 67 4401 91 4402 3705 90
+CONVEX 1798 GT_PK(2,2) 67 4403 66 4402 2828 90
+CONVEX 1799 GT_PK(2,2) 67 4403 66 4404 1978 45
+CONVEX 1800 GT_PK(2,2) 67 4405 46 4404 3709 45
+CONVEX 1801 GT_PK(2,2) 47 4406 28 4407 2821 29
+CONVEX 1802 GT_PK(2,2) 47 4408 46 4406 3710 28
+CONVEX 1803 GT_PK(2,2) 47 4407 29 4409 2820 48
+CONVEX 1804 GT_PK(2,2) 47 4410 69 4409 4411 48
+CONVEX 1805 GT_PK(2,2) 567 4412 528 4413 2841 527
+CONVEX 1806 GT_PK(2,2) 567 4414 568 4412 3722 528
+CONVEX 1807 GT_PK(2,2) 607 4415 608 4416 2944 647
+CONVEX 1808 GT_PK(2,2) 607 4417 568 4415 3728 608
+CONVEX 1809 GT_PK(2,2) 607 4418 567 4417 4414 568
+CONVEX 1810 GT_PK(2,2) 607 4419 646 4416 3695 647
+CONVEX 1811 GT_PK(2,2) 607 4419 646 4420 2815 606
+CONVEX 1812 GT_PK(2,2) 607 4418 567 4420 4421 606
+CONVEX 1813 GT_PK(2,2) 386 4422 349 4423 3748 385
+CONVEX 1814 GT_PK(2,2) 386 4423 385 4424 2856 423
+CONVEX 1815 GT_PK(2,2) 386 4425 350 4426 4146 387
+CONVEX 1816 GT_PK(2,2) 386 4425 350 4422 4145 349
+CONVEX 1817 GT_PK(2,2) 496 4427 535 4428 3777 497
+CONVEX 1818 GT_PK(2,2) 496 4429 457 4430 2885 495
+CONVEX 1819 GT_PK(2,2) 496 4431 458 4428 3785 497
+CONVEX 1820 GT_PK(2,2) 496 4431 458 4429 3787 457
+CONVEX 1821 GT_PK(2,2) 534 4432 535 4433 3774 574
+CONVEX 1822 GT_PK(2,2) 534 4434 573 4435 3809 533
+CONVEX 1823 GT_PK(2,2) 534 4434 573 4433 3807 574
+CONVEX 1824 GT_PK(2,2) 534 4436 495 4435 2882 533
+CONVEX 1825 GT_PK(2,2) 534 4437 496 4436 4430 495
+CONVEX 1826 GT_PK(2,2) 534 4437 496 4432 4427 535
+CONVEX 1827 GT_PK(2,2) 803 4438 763 4439 3805 764
+CONVEX 1828 GT_PK(2,2) 803 4438 763 4440 3801 802
+CONVEX 1829 GT_PK(2,2) 804 4441 843 4442 3799 844
+CONVEX 1830 GT_PK(2,2) 804 4443 765 4444 2926 805
+CONVEX 1831 GT_PK(2,2) 804 4442 844 4444 2934 805
+CONVEX 1832 GT_PK(2,2) 804 4443 765 4445 2931 764
+CONVEX 1833 GT_PK(2,2) 804 4446 803 4445 4439 764
+CONVEX 1834 GT_PK(2,2) 804 4446 803 4441 4447 843
+CONVEX 1835 GT_PK(2,2) 693 4448 692 4449 4450 732
+CONVEX 1836 GT_PK(2,2) 693 4451 733 4449 4452 732
+CONVEX 1837 GT_PK(2,2) 693 4451 733 4453 4454 694
+CONVEX 1838 GT_PK(2,2) 693 4448 692 4455 3815 653
+CONVEX 1839 GT_PK(2,2) 731 4456 692 4457 4450 732
+CONVEX 1840 GT_PK(2,2) 731 4458 771 4457 4459 732
+CONVEX 1841 GT_PK(2,2) 731 4460 691 4461 2981 730
+CONVEX 1842 GT_PK(2,2) 731 4456 692 4460 3816 691
+CONVEX 1843 GT_PK(2,2) 731 4462 770 4461 3852 730
+CONVEX 1844 GT_PK(2,2) 731 4462 770 4458 4463 771
+CONVEX 1845 GT_PK(2,2) 892 4464 932 4465 1948 931
+CONVEX 1846 GT_PK(2,2) 892 4466 891 4465 2988 931
+CONVEX 1847 GT_PK(2,2) 892 4467 893 4464 3840 932
+CONVEX 1848 GT_PK(2,2) 892 4467 893 4468 3841 853
+CONVEX 1849 GT_PK(2,2) 816 4469 815 4470 3835 855
+CONVEX 1850 GT_PK(2,2) 816 4471 856 4470 3329 855
+CONVEX 1851 GT_PK(2,2) 816 4472 777 4473 3325 817
+CONVEX 1852 GT_PK(2,2) 816 4471 856 4473 3336 817
+CONVEX 1853 GT_PK(2,2) 814 4474 815 4475 3834 854
+CONVEX 1854 GT_PK(2,2) 814 4476 853 4475 3842 854
+CONVEX 1855 GT_PK(2,2) 814 4477 774 4478 2997 813
+CONVEX 1856 GT_PK(2,2) 814 4476 853 4478 4479 813
+CONVEX 1857 GT_PK(2,2) 772 4480 812 4481 3844 773
+CONVEX 1858 GT_PK(2,2) 772 4482 733 4481 4483 773
+CONVEX 1859 GT_PK(2,2) 772 4482 733 4484 4452 732
+CONVEX 1860 GT_PK(2,2) 772 4485 771 4484 4459 732
+CONVEX 1861 GT_PK(2,2) 849 4486 848 4487 3813 888
+CONVEX 1862 GT_PK(2,2) 849 4488 889 4487 3845 888
+CONVEX 1863 GT_PK(2,2) 734 4489 695 4490 3848 694
+CONVEX 1864 GT_PK(2,2) 734 4491 774 4492 2998 773
+CONVEX 1865 GT_PK(2,2) 734 4491 774 4493 4494 735
+CONVEX 1866 GT_PK(2,2) 734 4489 695 4493 4495 735
+CONVEX 1867 GT_PK(2,2) 734 4496 733 4492 4483 773
+CONVEX 1868 GT_PK(2,2) 734 4496 733 4490 4454 694
+CONVEX 1869 GT_PK(2,2) 471 4497 510 4498 3005 509
+CONVEX 1870 GT_PK(2,2) 471 4499 472 4497 4173 510
+CONVEX 1871 GT_PK(2,2) 435 4500 436 4501 3033 397
+CONVEX 1872 GT_PK(2,2) 435 4501 397 4502 2078 396
+CONVEX 1873 GT_PK(2,2) 435 4503 434 4502 3861 396
+CONVEX 1874 GT_PK(2,2) 435 4503 434 4504 3864 473
+CONVEX 1875 GT_PK(2,2) 604 4505 643 4506 3873 603
+CONVEX 1876 GT_PK(2,2) 604 4505 643 4507 3875 644
+CONVEX 1877 GT_PK(2,2) 487 4508 526 4509 3885 525
+CONVEX 1878 GT_PK(2,2) 487 4510 488 4508 3888 526
+CONVEX 1879 GT_PK(2,2) 487 4511 486 4509 3891 525
+CONVEX 1880 GT_PK(2,2) 485 4512 524 4513 3024 523
+CONVEX 1881 GT_PK(2,2) 485 4514 486 4512 3890 524
+CONVEX 1882 GT_PK(2,2) 485 4515 484 4513 3022 523
+CONVEX 1883 GT_PK(2,2) 485 4514 486 4516 4517 447
+CONVEX 1884 GT_PK(2,2) 481 4518 482 4519 3027 520
+CONVEX 1885 GT_PK(2,2) 481 4520 519 4519 3906 520
+CONVEX 1886 GT_PK(2,2) 481 4518 482 4521 3895 443
+CONVEX 1887 GT_PK(2,2) 481 4520 519 4522 3909 480
+CONVEX 1888 GT_PK(2,2) 481 4523 442 4521 3868 443
+CONVEX 1889 GT_PK(2,2) 481 4523 442 4522 4524 480
+CONVEX 1890 GT_PK(2,2) 324 4525 288 4526 3915 289
+CONVEX 1891 GT_PK(2,2) 324 4527 325 4526 2141 289
+CONVEX 1892 GT_PK(2,2) 324 4528 323 4529 3049 360
+CONVEX 1893 GT_PK(2,2) 324 4525 288 4528 3913 323
+CONVEX 1894 GT_PK(2,2) 324 4530 361 4529 2068 360
+CONVEX 1895 GT_PK(2,2) 324 4530 361 4527 2069 325
+CONVEX 1896 GT_PK(2,2) 179 4531 180 4532 3061 211
+CONVEX 1897 GT_PK(2,2) 179 4532 211 4533 4534 210
+CONVEX 1898 GT_PK(2,2) 179 4535 178 4533 4536 210
+CONVEX 1899 GT_PK(2,2) 179 4535 178 4537 4538 149
+CONVEX 1900 GT_PK(2,2) 179 4539 150 4537 3924 149
+CONVEX 1901 GT_PK(2,2) 179 4539 150 4531 3921 180
+CONVEX 1902 GT_PK(2,2) 243 4540 211 4541 4534 210
+CONVEX 1903 GT_PK(2,2) 243 4542 244 4540 3918 211
+CONVEX 1904 GT_PK(2,2) 243 4541 210 4543 4544 242
+CONVEX 1905 GT_PK(2,2) 243 4542 244 4545 3920 277
+CONVEX 1906 GT_PK(2,2) 243 4546 276 4543 1985 242
+CONVEX 1907 GT_PK(2,2) 243 4545 277 4546 3751 276
+CONVEX 1908 GT_PK(2,2) 123 4547 150 4548 3923 122
+CONVEX 1909 GT_PK(2,2) 123 4549 97 4548 3930 122
+CONVEX 1910 GT_PK(2,2) 123 4550 151 4551 2181 124
+CONVEX 1911 GT_PK(2,2) 123 4547 150 4550 3922 151
+CONVEX 1912 GT_PK(2,2) 123 4551 124 4552 1668 98
+CONVEX 1913 GT_PK(2,2) 123 4549 97 4552 3935 98
+CONVEX 1914 GT_PK(2,2) 95 4553 121 4554 4555 120
+CONVEX 1915 GT_PK(2,2) 95 4553 121 4556 3927 96
+CONVEX 1916 GT_PK(2,2) 70 4557 69 4558 4411 48
+CONVEX 1917 GT_PK(2,2) 70 4559 93 4557 3936 69
+CONVEX 1918 GT_PK(2,2) 50 4560 32 4561 4562 31
+CONVEX 1919 GT_PK(2,2) 50 4563 51 4560 3941 32
+CONVEX 1920 GT_PK(2,2) 368 4564 367 4565 3012 405
+CONVEX 1921 GT_PK(2,2) 368 4566 331 4564 3952 367
+CONVEX 1922 GT_PK(2,2) 446 4567 484 4568 3902 445
+CONVEX 1923 GT_PK(2,2) 446 4569 485 4570 4516 447
+CONVEX 1924 GT_PK(2,2) 446 4569 485 4567 4515 484
+CONVEX 1925 GT_PK(2,2) 267 4571 302 4572 2230 268
+CONVEX 1926 GT_PK(2,2) 267 4572 268 4573 2889 234
+CONVEX 1927 GT_PK(2,2) 267 4574 233 4573 2241 234
+CONVEX 1928 GT_PK(2,2) 264 4575 263 4576 4577 298
+CONVEX 1929 GT_PK(2,2) 133 4578 134 4579 3956 106
+CONVEX 1930 GT_PK(2,2) 133 4580 105 4581 2221 132
+CONVEX 1931 GT_PK(2,2) 133 4580 105 4579 2219 106
+CONVEX 1932 GT_PK(2,2) 133 4582 162 4581 2229 132
+CONVEX 1933 GT_PK(2,2) 133 4583 163 4582 4584 162
+CONVEX 1934 GT_PK(2,2) 133 4578 134 4583 3957 163
+CONVEX 1935 GT_PK(2,2) 135 4585 108 4586 3124 107
+CONVEX 1936 GT_PK(2,2) 135 4587 134 4586 3955 107
+CONVEX 1937 GT_PK(2,2) 135 4587 134 4588 3958 164
+CONVEX 1938 GT_PK(2,2) 135 4589 165 4588 3992 164
+CONVEX 1939 GT_PK(2,2) 194 4590 226 4591 3945 193
+CONVEX 1940 GT_PK(2,2) 194 4592 195 4593 3963 163
+CONVEX 1941 GT_PK(2,2) 194 4594 227 4590 4595 226
+CONVEX 1942 GT_PK(2,2) 194 4594 227 4592 4596 195
+CONVEX 1943 GT_PK(2,2) 194 4593 163 4597 4584 162
+CONVEX 1944 GT_PK(2,2) 194 4591 193 4597 3091 162
+CONVEX 1945 GT_PK(2,2) 375 4598 376 4599 2907 413
+CONVEX 1946 GT_PK(2,2) 375 4600 374 4601 4602 338
+CONVEX 1947 GT_PK(2,2) 375 4598 376 4603 2922 339
+CONVEX 1948 GT_PK(2,2) 375 4601 338 4603 3093 339
+CONVEX 1949 GT_PK(2,2) 199 4604 232 4605 3964 200
+CONVEX 1950 GT_PK(2,2) 199 4606 167 4607 4608 198
+CONVEX 1951 GT_PK(2,2) 199 4607 198 4609 4610 231
+CONVEX 1952 GT_PK(2,2) 199 4604 232 4609 4611 231
+CONVEX 1953 GT_PK(2,2) 199 4605 200 4612 3101 168
+CONVEX 1954 GT_PK(2,2) 199 4606 167 4612 4613 168
+CONVEX 1955 GT_PK(2,2) 138 4614 111 4615 3966 139
+CONVEX 1956 GT_PK(2,2) 138 4615 139 4616 2244 168
+CONVEX 1957 GT_PK(2,2) 138 4617 167 4618 4619 137
+CONVEX 1958 GT_PK(2,2) 138 4617 167 4616 4613 168
+CONVEX 1959 GT_PK(2,2) 110 4620 138 4621 4614 111
+CONVEX 1960 GT_PK(2,2) 110 4622 109 4623 4624 137
+CONVEX 1961 GT_PK(2,2) 110 4620 138 4623 4618 137
+CONVEX 1962 GT_PK(2,2) 85 4625 111 4626 3968 86
+CONVEX 1963 GT_PK(2,2) 85 4627 62 4628 3975 61
+CONVEX 1964 GT_PK(2,2) 85 4627 62 4626 3977 86
+CONVEX 1965 GT_PK(2,2) 85 4629 110 4625 4621 111
+CONVEX 1966 GT_PK(2,2) 60 4630 83 4631 3986 59
+CONVEX 1967 GT_PK(2,2) 60 4632 38 4633 3982 39
+CONVEX 1968 GT_PK(2,2) 60 4632 38 4631 3979 59
+CONVEX 1969 GT_PK(2,2) 60 4633 39 4634 3120 61
+CONVEX 1970 GT_PK(2,2) 136 4635 109 4636 4624 137
+CONVEX 1971 GT_PK(2,2) 136 4637 108 4635 3990 109
+CONVEX 1972 GT_PK(2,2) 136 4638 135 4637 4585 108
+CONVEX 1973 GT_PK(2,2) 136 4638 135 4639 4589 165
+CONVEX 1974 GT_PK(2,2) 197 4640 165 4641 3991 196
+CONVEX 1975 GT_PK(2,2) 1389 4642 1388 4643 4003 1365
+CONVEX 1976 GT_PK(2,2) 1389 4644 1411 4645 3190 1390
+CONVEX 1977 GT_PK(2,2) 1389 4644 1411 4646 3194 1410
+CONVEX 1978 GT_PK(2,2) 1389 4642 1388 4646 4002 1410
+CONVEX 1979 GT_PK(2,2) 1389 4647 1366 4645 3230 1390
+CONVEX 1980 GT_PK(2,2) 1389 4647 1366 4643 4074 1365
+CONVEX 1981 GT_PK(2,2) 1110 4648 1074 4649 4650 1073
+CONVEX 1982 GT_PK(2,2) 1110 4651 1109 4649 4245 1073
+CONVEX 1983 GT_PK(2,2) 1110 4651 1109 4652 4011 1145
+CONVEX 1984 GT_PK(2,2) 1110 4653 1146 4652 4302 1145
+CONVEX 1985 GT_PK(2,2) 840 4654 800 4655 4153 801
+CONVEX 1986 GT_PK(2,2) 840 4654 800 4656 4151 839
+CONVEX 1987 GT_PK(2,2) 842 4657 803 4658 4440 802
+CONVEX 1988 GT_PK(2,2) 842 4657 803 4659 4447 843
+CONVEX 1989 GT_PK(2,2) 999 4660 1038 4661 3135 1000
+CONVEX 1990 GT_PK(2,2) 999 4662 1037 4660 4014 1038
+CONVEX 1991 GT_PK(2,2) 1036 4663 1037 4664 4016 1074
+CONVEX 1992 GT_PK(2,2) 1036 4665 1073 4666 4242 1035
+CONVEX 1993 GT_PK(2,2) 1036 4664 1074 4665 4650 1073
+CONVEX 1994 GT_PK(2,2) 1225 4667 1226 4668 4044 1258
+CONVEX 1995 GT_PK(2,2) 1225 4669 1191 4670 4035 1192
+CONVEX 1996 GT_PK(2,2) 1225 4667 1226 4670 4047 1192
+CONVEX 1997 GT_PK(2,2) 1287 4671 1317 4672 2345 1316
+CONVEX 1998 GT_PK(2,2) 1287 4673 1286 4672 4080 1316
+CONVEX 1999 GT_PK(2,2) 1255 4674 1254 4675 3158 1286
+CONVEX 2000 GT_PK(2,2) 1255 4676 1287 4675 4673 1286
+CONVEX 2001 GT_PK(2,2) 1255 4676 1287 4677 4678 1256
+CONVEX 2002 GT_PK(2,2) 1255 4674 1254 4679 3162 1222
+CONVEX 2003 GT_PK(2,2) 1318 4680 1289 4681 4682 1319
+CONVEX 2004 GT_PK(2,2) 1318 4683 1317 4684 2346 1345
+CONVEX 2005 GT_PK(2,2) 1318 4684 1345 4685 2323 1346
+CONVEX 2006 GT_PK(2,2) 1318 4681 1319 4685 3175 1346
+CONVEX 2007 GT_PK(2,2) 1288 4686 1287 4687 4678 1256
+CONVEX 2008 GT_PK(2,2) 1288 4686 1287 4688 4671 1317
+CONVEX 2009 GT_PK(2,2) 1288 4689 1318 4688 4683 1317
+CONVEX 2010 GT_PK(2,2) 1288 4689 1318 4690 4680 1289
+CONVEX 2011 GT_PK(2,2) 1290 4691 1289 4692 4682 1319
+CONVEX 2012 GT_PK(2,2) 1290 4693 1291 4694 3173 1320
+CONVEX 2013 GT_PK(2,2) 1290 4692 1319 4694 3176 1320
+CONVEX 2014 GT_PK(2,2) 1290 4691 1289 4695 4696 1258
+CONVEX 2015 GT_PK(2,2) 1290 4697 1259 4693 4052 1291
+CONVEX 2016 GT_PK(2,2) 1290 4697 1259 4695 4045 1258
+CONVEX 2017 GT_PK(2,2) 1322 4698 1292 4699 4040 1293
+CONVEX 2018 GT_PK(2,2) 1322 4700 1349 4701 4032 1350
+CONVEX 2019 GT_PK(2,2) 1322 4700 1349 4702 4031 1321
+CONVEX 2020 GT_PK(2,2) 1322 4698 1292 4702 4041 1321
+CONVEX 2021 GT_PK(2,2) 1322 4701 1350 4703 4704 1323
+CONVEX 2022 GT_PK(2,2) 1322 4699 1293 4703 3167 1323
+CONVEX 2023 GT_PK(2,2) 1228 4705 1195 4706 3688 1194
+CONVEX 2024 GT_PK(2,2) 1228 4705 1195 4707 3186 1229
+CONVEX 2025 GT_PK(2,2) 1228 4708 1261 4707 3188 1229
+CONVEX 2026 GT_PK(2,2) 1228 4709 1260 4708 4049 1261
+CONVEX 2027 GT_PK(2,2) 1314 4710 1315 4711 4075 1342
+CONVEX 2028 GT_PK(2,2) 1314 4712 1313 4713 4063 1284
+CONVEX 2029 GT_PK(2,2) 1314 4713 1284 4714 2400 1285
+CONVEX 2030 GT_PK(2,2) 1314 4710 1315 4714 4078 1285
+CONVEX 2031 GT_PK(2,2) 1314 4712 1313 4715 4071 1341
+CONVEX 2032 GT_PK(2,2) 1314 4711 1342 4715 3236 1341
+CONVEX 2033 GT_PK(2,2) 461 4716 460 4717 3765 422
+CONVEX 2034 GT_PK(2,2) 461 4718 499 4716 4099 460
+CONVEX 2035 GT_PK(2,2) 461 4719 423 4717 2858 422
+CONVEX 2036 GT_PK(2,2) 620 4720 660 4721 4111 621
+CONVEX 2037 GT_PK(2,2) 620 4720 660 4722 4723 659
+CONVEX 2038 GT_PK(2,2) 620 4724 619 4722 4725 659
+CONVEX 2039 GT_PK(2,2) 699 4726 739 4727 3270 700
+CONVEX 2040 GT_PK(2,2) 699 4728 660 4727 4109 700
+CONVEX 2041 GT_PK(2,2) 699 4728 660 4729 4723 659
+CONVEX 2042 GT_PK(2,2) 699 4726 739 4730 2443 738
+CONVEX 2043 GT_PK(2,2) 698 4731 699 4732 4730 738
+CONVEX 2044 GT_PK(2,2) 698 4731 699 4733 4729 659
+CONVEX 2045 GT_PK(2,2) 776 4734 816 4735 4472 777
+CONVEX 2046 GT_PK(2,2) 776 4734 816 4736 4469 815
+CONVEX 2047 GT_PK(2,2) 464 4737 463 4738 4739 425
+CONVEX 2048 GT_PK(2,2) 464 4737 463 4740 4741 502
+CONVEX 2049 GT_PK(2,2) 464 4742 503 4743 4096 465
+CONVEX 2050 GT_PK(2,2) 464 4742 503 4740 4744 502
+CONVEX 2051 GT_PK(2,2) 426 4745 425 4746 4135 388
+CONVEX 2052 GT_PK(2,2) 426 4747 389 4748 4137 427
+CONVEX 2053 GT_PK(2,2) 426 4747 389 4746 4139 388
+CONVEX 2054 GT_PK(2,2) 426 4749 464 4745 4738 425
+CONVEX 2055 GT_PK(2,2) 426 4748 427 4750 4107 465
+CONVEX 2056 GT_PK(2,2) 426 4749 464 4750 4743 465
+CONVEX 2057 GT_PK(2,2) 917 4751 877 4752 4148 878
+CONVEX 2058 GT_PK(2,2) 917 4751 877 4753 4754 916
+CONVEX 2059 GT_PK(2,2) 917 4755 956 4756 4252 955
+CONVEX 2060 GT_PK(2,2) 917 4753 916 4756 4259 955
+CONVEX 2061 GT_PK(2,2) 876 4757 877 4758 4754 916
+CONVEX 2062 GT_PK(2,2) 876 4758 916 4759 4260 915
+CONVEX 2063 GT_PK(2,2) 876 4760 837 4761 3360 836
+CONVEX 2064 GT_PK(2,2) 876 4757 877 4760 4149 837
+CONVEX 2065 GT_PK(2,2) 876 4762 875 4761 2638 836
+CONVEX 2066 GT_PK(2,2) 876 4762 875 4759 2640 915
+CONVEX 2067 GT_PK(2,2) 441 4763 479 4764 4165 440
+CONVEX 2068 GT_PK(2,2) 441 4765 442 4766 3869 403
+CONVEX 2069 GT_PK(2,2) 441 4765 442 4767 4524 480
+CONVEX 2070 GT_PK(2,2) 441 4763 479 4767 4166 480
+CONVEX 2071 GT_PK(2,2) 441 4768 402 4766 2089 403
+CONVEX 2072 GT_PK(2,2) 441 4764 440 4768 3039 402
+CONVEX 2073 GT_PK(2,2) 555 4769 516 4770 2529 556
+CONVEX 2074 GT_PK(2,2) 555 4771 515 4769 4167 516
+CONVEX 2075 GT_PK(2,2) 476 4772 475 4773 4170 437
+CONVEX 2076 GT_PK(2,2) 476 4774 515 4775 4168 477
+CONVEX 2077 GT_PK(2,2) 476 4776 438 4775 2100 477
+CONVEX 2078 GT_PK(2,2) 476 4776 438 4773 2101 437
+CONVEX 2079 GT_PK(2,2) 512 4777 511 4778 4174 473
+CONVEX 2080 GT_PK(2,2) 631 4779 671 4780 4781 632
+CONVEX 2081 GT_PK(2,2) 631 4782 592 4780 4186 632
+CONVEX 2082 GT_PK(2,2) 631 4779 671 4783 3378 670
+CONVEX 2083 GT_PK(2,2) 674 4784 714 4785 2537 675
+CONVEX 2084 GT_PK(2,2) 674 4786 635 4785 4180 675
+CONVEX 2085 GT_PK(2,2) 674 4784 714 4787 3384 713
+CONVEX 2086 GT_PK(2,2) 674 4786 635 4788 4789 634
+CONVEX 2087 GT_PK(2,2) 674 4790 673 4787 4182 713
+CONVEX 2088 GT_PK(2,2) 674 4790 673 4788 4791 634
+CONVEX 2089 GT_PK(2,2) 672 4792 671 4793 3380 711
+CONVEX 2090 GT_PK(2,2) 672 4792 671 4794 4781 632
+CONVEX 2091 GT_PK(2,2) 672 4793 711 4795 2589 712
+CONVEX 2092 GT_PK(2,2) 672 4796 673 4795 4183 712
+CONVEX 2093 GT_PK(2,2) 633 4797 673 4798 4791 634
+CONVEX 2094 GT_PK(2,2) 633 4799 672 4797 4796 673
+CONVEX 2095 GT_PK(2,2) 633 4800 593 4801 4185 632
+CONVEX 2096 GT_PK(2,2) 633 4799 672 4801 4794 632
+CONVEX 2097 GT_PK(2,2) 944 4802 905 4803 4196 943
+CONVEX 2098 GT_PK(2,2) 944 4804 982 4805 2543 981
+CONVEX 2099 GT_PK(2,2) 944 4803 943 4805 4806 981
+CONVEX 2100 GT_PK(2,2) 944 4804 982 4807 2539 983
+CONVEX 2101 GT_PK(2,2) 944 4808 945 4807 3456 983
+CONVEX 2102 GT_PK(2,2) 944 4808 945 4809 4233 906
+CONVEX 2103 GT_PK(2,2) 944 4802 905 4809 4205 906
+CONVEX 2104 GT_PK(2,2) 871 4810 832 4811 4210 831
+CONVEX 2105 GT_PK(2,2) 871 4812 911 4813 2610 910
+CONVEX 2106 GT_PK(2,2) 871 4814 872 4812 2625 911
+CONVEX 2107 GT_PK(2,2) 871 4810 832 4814 4214 872
+CONVEX 2108 GT_PK(2,2) 870 4815 830 4816 4215 831
+CONVEX 2109 GT_PK(2,2) 870 4817 909 4818 1876 910
+CONVEX 2110 GT_PK(2,2) 870 4819 869 4817 4820 909
+CONVEX 2111 GT_PK(2,2) 870 4819 869 4815 4821 830
+CONVEX 2112 GT_PK(2,2) 870 4822 871 4818 4813 910
+CONVEX 2113 GT_PK(2,2) 870 4822 871 4816 4811 831
+CONVEX 2114 GT_PK(2,2) 790 4823 751 4824 3438 791
+CONVEX 2115 GT_PK(2,2) 790 4825 830 4824 4216 791
+CONVEX 2116 GT_PK(2,2) 987 4826 986 4827 4223 1025
+CONVEX 2117 GT_PK(2,2) 987 4828 949 4829 2605 988
+CONVEX 2118 GT_PK(2,2) 987 4828 949 4830 2611 948
+CONVEX 2119 GT_PK(2,2) 987 4826 986 4830 4227 948
+CONVEX 2120 GT_PK(2,2) 987 4831 1026 4829 3446 988
+CONVEX 2121 GT_PK(2,2) 987 4827 1025 4831 3450 1026
+CONVEX 2122 GT_PK(2,2) 908 4832 907 4833 4230 868
+CONVEX 2123 GT_PK(2,2) 908 4834 869 4833 4835 868
+CONVEX 2124 GT_PK(2,2) 908 4836 947 4837 3458 909
+CONVEX 2125 GT_PK(2,2) 908 4834 869 4837 4820 909
+CONVEX 2126 GT_PK(2,2) 1034 4838 1072 4839 4241 1035
+CONVEX 2127 GT_PK(2,2) 1071 4840 1033 4841 3464 1070
+CONVEX 2128 GT_PK(2,2) 1071 4842 1072 4843 4244 1108
+CONVEX 2129 GT_PK(2,2) 1071 4844 1034 4840 4845 1033
+CONVEX 2130 GT_PK(2,2) 1071 4844 1034 4842 4838 1072
+CONVEX 2131 GT_PK(2,2) 1142 4846 1106 4847 4848 1141
+CONVEX 2132 GT_PK(2,2) 1104 4849 1103 4850 3426 1067
+CONVEX 2133 GT_PK(2,2) 1104 4851 1139 4849 3497 1103
+CONVEX 2134 GT_PK(2,2) 1104 4851 1139 4852 3500 1140
+CONVEX 2135 GT_PK(2,2) 1209 4853 1210 4854 4269 1242
+CONVEX 2136 GT_PK(2,2) 1209 4855 1241 4856 3628 1208
+CONVEX 2137 GT_PK(2,2) 1209 4855 1241 4854 3629 1242
+CONVEX 2138 GT_PK(2,2) 1382 4857 1404 4858 2676 1383
+CONVEX 2139 GT_PK(2,2) 1382 4859 1403 4857 4276 1404
+CONVEX 2140 GT_PK(2,2) 1382 4859 1403 4860 4279 1381
+CONVEX 2141 GT_PK(2,2) 1421 4861 1403 4862 4277 1422
+CONVEX 2142 GT_PK(2,2) 1421 4863 1436 4864 4865 1435
+CONVEX 2143 GT_PK(2,2) 1421 4863 1436 4862 3536 1422
+CONVEX 2144 GT_PK(2,2) 1421 4866 1402 4864 4867 1435
+CONVEX 2145 GT_PK(2,2) 1421 4861 1403 4866 4278 1402
+CONVEX 2146 GT_PK(2,2) 1332 4868 1305 4869 4325 1304
+CONVEX 2147 GT_PK(2,2) 1332 4870 1333 4868 4283 1305
+CONVEX 2148 GT_PK(2,2) 1377 4871 1398 4872 4296 1353
+CONVEX 2149 GT_PK(2,2) 1328 4873 1353 4874 4312 1327
+CONVEX 2150 GT_PK(2,2) 1302 4875 1273 4876 3623 1303
+CONVEX 2151 GT_PK(2,2) 1302 4875 1273 4877 3627 1272
+CONVEX 2152 GT_PK(2,2) 1420 4878 1402 4879 4867 1435
+CONVEX 2153 GT_PK(2,2) 1048 4880 1086 4881 4337 1049
+CONVEX 2154 GT_PK(2,2) 1048 4882 1010 4883 2777 1009
+CONVEX 2155 GT_PK(2,2) 1048 4882 1010 4881 2771 1049
+CONVEX 2156 GT_PK(2,2) 1085 4884 1086 4885 4336 1122
+CONVEX 2157 GT_PK(2,2) 1085 4886 1121 4885 4340 1122
+CONVEX 2158 GT_PK(2,2) 1085 4887 1048 4884 4880 1086
+CONVEX 2159 GT_PK(2,2) 1126 4888 1127 4889 4128 1090
+CONVEX 2160 GT_PK(2,2) 1126 4890 1162 4888 4388 1127
+CONVEX 2161 GT_PK(2,2) 1126 4891 1089 4892 4371 1125
+CONVEX 2162 GT_PK(2,2) 1126 4891 1089 4889 3691 1090
+CONVEX 2163 GT_PK(2,2) 1126 4893 1161 4892 4383 1125
+CONVEX 2164 GT_PK(2,2) 1126 4890 1162 4893 4390 1161
+CONVEX 2165 GT_PK(2,2) 238 4894 271 4895 4393 272
+CONVEX 2166 GT_PK(2,2) 236 4896 235 4897 2891 203
+CONVEX 2167 GT_PK(2,2) 236 4898 204 4897 4899 203
+CONVEX 2168 GT_PK(2,2) 270 4900 305 4901 2925 304
+CONVEX 2169 GT_PK(2,2) 270 4902 271 4900 4391 305
+CONVEX 2170 GT_PK(2,2) 172 4903 204 4904 4899 203
+CONVEX 2171 GT_PK(2,2) 172 4903 204 4905 4906 173
+CONVEX 2172 GT_PK(2,2) 68 4907 47 4908 4410 69
+CONVEX 2173 GT_PK(2,2) 68 4909 91 4910 4911 92
+CONVEX 2174 GT_PK(2,2) 68 4908 69 4910 3938 92
+CONVEX 2175 GT_PK(2,2) 68 4912 67 4909 4401 91
+CONVEX 2176 GT_PK(2,2) 68 4912 67 4913 4405 46
+CONVEX 2177 GT_PK(2,2) 68 4907 47 4913 4408 46
+CONVEX 2178 GT_PK(2,2) 566 4914 567 4915 4421 606
+CONVEX 2179 GT_PK(2,2) 566 4916 565 4917 3883 526
+CONVEX 2180 GT_PK(2,2) 566 4917 526 4918 3889 527
+CONVEX 2181 GT_PK(2,2) 566 4914 567 4918 4413 527
+CONVEX 2182 GT_PK(2,2) 424 4919 425 4920 4136 387
+CONVEX 2183 GT_PK(2,2) 424 4921 386 4920 4426 387
+CONVEX 2184 GT_PK(2,2) 424 4921 386 4922 4424 423
+CONVEX 2185 GT_PK(2,2) 424 4923 463 4919 4739 425
+CONVEX 2186 GT_PK(2,2) 654 4924 693 4925 4453 694
+CONVEX 2187 GT_PK(2,2) 654 4925 694 4926 3850 655
+CONVEX 2188 GT_PK(2,2) 654 4927 615 4926 4928 655
+CONVEX 2189 GT_PK(2,2) 654 4927 615 4929 3853 614
+CONVEX 2190 GT_PK(2,2) 654 4929 614 4930 2995 653
+CONVEX 2191 GT_PK(2,2) 654 4924 693 4930 4455 653
+CONVEX 2192 GT_PK(2,2) 852 4931 892 4932 4466 891
+CONVEX 2193 GT_PK(2,2) 852 4933 812 4934 3843 813
+CONVEX 2194 GT_PK(2,2) 852 4935 853 4934 4479 813
+CONVEX 2195 GT_PK(2,2) 852 4931 892 4935 4468 853
+CONVEX 2196 GT_PK(2,2) 852 4936 851 4932 4937 891
+CONVEX 2197 GT_PK(2,2) 852 4936 851 4933 4938 812
+CONVEX 2198 GT_PK(2,2) 775 4939 814 4940 4474 815
+CONVEX 2199 GT_PK(2,2) 775 4941 776 4942 4943 736
+CONVEX 2200 GT_PK(2,2) 775 4941 776 4940 4736 815
+CONVEX 2201 GT_PK(2,2) 775 4944 735 4942 4945 736
+CONVEX 2202 GT_PK(2,2) 775 4946 774 4944 4494 735
+CONVEX 2203 GT_PK(2,2) 775 4939 814 4946 4477 774
+CONVEX 2204 GT_PK(2,2) 890 4947 851 4948 4937 891
+CONVEX 2205 GT_PK(2,2) 890 4949 889 4950 3847 929
+CONVEX 2206 GT_PK(2,2) 890 4950 929 4951 2764 930
+CONVEX 2207 GT_PK(2,2) 890 4948 891 4951 2987 930
+CONVEX 2208 GT_PK(2,2) 809 4952 770 4953 3851 769
+CONVEX 2209 GT_PK(2,2) 809 4954 808 4953 2963 769
+CONVEX 2210 GT_PK(2,2) 809 4955 848 4954 3810 808
+CONVEX 2211 GT_PK(2,2) 809 4956 849 4955 4486 848
+CONVEX 2212 GT_PK(2,2) 810 4957 809 4958 4956 849
+CONVEX 2213 GT_PK(2,2) 810 4959 770 4960 4463 771
+CONVEX 2214 GT_PK(2,2) 810 4957 809 4959 4952 770
+CONVEX 2215 GT_PK(2,2) 432 4961 472 4962 3866 433
+CONVEX 2216 GT_PK(2,2) 432 4963 471 4961 4499 472
+CONVEX 2217 GT_PK(2,2) 432 4962 433 4964 3007 394
+CONVEX 2218 GT_PK(2,2) 474 4965 475 4966 4169 436
+CONVEX 2219 GT_PK(2,2) 474 4967 435 4966 4500 436
+CONVEX 2220 GT_PK(2,2) 474 4967 435 4968 4504 473
+CONVEX 2221 GT_PK(2,2) 474 4969 512 4968 4778 473
+CONVEX 2222 GT_PK(2,2) 564 4970 603 4971 3882 563
+CONVEX 2223 GT_PK(2,2) 564 4972 604 4970 4506 603
+CONVEX 2224 GT_PK(2,2) 564 4972 604 4973 4974 565
+CONVEX 2225 GT_PK(2,2) 564 4975 524 4971 3025 563
+CONVEX 2226 GT_PK(2,2) 564 4975 524 4976 3892 525
+CONVEX 2227 GT_PK(2,2) 564 4973 565 4976 3884 525
+CONVEX 2228 GT_PK(2,2) 605 4977 604 4978 4974 565
+CONVEX 2229 GT_PK(2,2) 605 4979 606 4980 2816 645
+CONVEX 2230 GT_PK(2,2) 605 4981 644 4980 3019 645
+CONVEX 2231 GT_PK(2,2) 605 4977 604 4981 4507 644
+CONVEX 2232 GT_PK(2,2) 605 4982 566 4979 4915 606
+CONVEX 2233 GT_PK(2,2) 605 4982 566 4978 4916 565
+CONVEX 2234 GT_PK(2,2) 148 4983 177 4984 4985 178
+CONVEX 2235 GT_PK(2,2) 148 4984 178 4986 4538 149
+CONVEX 2236 GT_PK(2,2) 148 4987 121 4986 3929 149
+CONVEX 2237 GT_PK(2,2) 148 4987 121 4988 4555 120
+CONVEX 2238 GT_PK(2,2) 208 4989 240 4990 4394 241
+CONVEX 2239 GT_PK(2,2) 208 4989 240 4991 4992 207
+CONVEX 2240 GT_PK(2,2) 209 4993 178 4994 4536 210
+CONVEX 2241 GT_PK(2,2) 209 4995 177 4993 4985 178
+CONVEX 2242 GT_PK(2,2) 209 4994 210 4996 4544 242
+CONVEX 2243 GT_PK(2,2) 209 4997 208 4995 4998 177
+CONVEX 2244 GT_PK(2,2) 209 4999 241 4996 1970 242
+CONVEX 2245 GT_PK(2,2) 209 4997 208 4999 4990 241
+CONVEX 2246 GT_PK(2,2) 94 5000 95 5001 4554 120
+CONVEX 2247 GT_PK(2,2) 94 5000 95 5002 5003 71
+CONVEX 2248 GT_PK(2,2) 94 5004 70 5002 5005 71
+CONVEX 2249 GT_PK(2,2) 94 5004 70 5006 4559 93
+CONVEX 2250 GT_PK(2,2) 72 5007 95 5008 5003 71
+CONVEX 2251 GT_PK(2,2) 72 5009 50 5008 5010 71
+CONVEX 2252 GT_PK(2,2) 72 5009 50 5011 4563 51
+CONVEX 2253 GT_PK(2,2) 72 5007 95 5012 4556 96
+CONVEX 2254 GT_PK(2,2) 72 5013 73 5012 3933 96
+CONVEX 2255 GT_PK(2,2) 72 5011 51 5013 3939 73
+CONVEX 2256 GT_PK(2,2) 175 5014 207 5015 5016 206
+CONVEX 2257 GT_PK(2,2) 49 5017 70 5018 5005 71
+CONVEX 2258 GT_PK(2,2) 49 5019 50 5018 5010 71
+CONVEX 2259 GT_PK(2,2) 49 5020 30 5021 2819 48
+CONVEX 2260 GT_PK(2,2) 49 5017 70 5021 4558 48
+CONVEX 2261 GT_PK(2,2) 49 5019 50 5022 4561 31
+CONVEX 2262 GT_PK(2,2) 49 5023 16 5022 5024 31
+CONVEX 2263 GT_PK(2,2) 49 5023 16 5020 3706 30
+CONVEX 2264 GT_PK(2,2) 406 5025 368 5026 4565 405
+CONVEX 2265 GT_PK(2,2) 406 5027 444 5026 3896 405
+CONVEX 2266 GT_PK(2,2) 406 5027 444 5028 3904 445
+CONVEX 2267 GT_PK(2,2) 301 5029 267 5030 4571 302
+CONVEX 2268 GT_PK(2,2) 299 5031 264 5032 4576 298
+CONVEX 2269 GT_PK(2,2) 265 5033 299 5034 5035 300
+CONVEX 2270 GT_PK(2,2) 265 5033 299 5036 5031 264
+CONVEX 2271 GT_PK(2,2) 265 5037 232 5038 4611 231
+CONVEX 2272 GT_PK(2,2) 265 5036 264 5038 5039 231
+CONVEX 2273 GT_PK(2,2) 260 5040 226 5041 3944 259
+CONVEX 2274 GT_PK(2,2) 260 5042 227 5040 4595 226
+CONVEX 2275 GT_PK(2,2) 260 5043 261 5042 5044 227
+CONVEX 2276 GT_PK(2,2) 260 5045 294 5041 3946 259
+CONVEX 2277 GT_PK(2,2) 260 5045 294 5046 3950 295
+CONVEX 2278 GT_PK(2,2) 260 5043 261 5046 5047 295
+CONVEX 2279 GT_PK(2,2) 412 5048 451 5049 2844 413
+CONVEX 2280 GT_PK(2,2) 412 5050 375 5049 4599 413
+CONVEX 2281 GT_PK(2,2) 412 5050 375 5051 4600 374
+CONVEX 2282 GT_PK(2,2) 412 5052 411 5051 5053 374
+CONVEX 2283 GT_PK(2,2) 84 5054 83 5055 3989 109
+CONVEX 2284 GT_PK(2,2) 84 5056 110 5055 4622 109
+CONVEX 2285 GT_PK(2,2) 84 5057 60 5058 4634 61
+CONVEX 2286 GT_PK(2,2) 84 5057 60 5054 4630 83
+CONVEX 2287 GT_PK(2,2) 84 5059 85 5058 4628 61
+CONVEX 2288 GT_PK(2,2) 84 5059 85 5056 4629 110
+CONVEX 2289 GT_PK(2,2) 166 5060 167 5061 4619 137
+CONVEX 2290 GT_PK(2,2) 166 5062 136 5061 4636 137
+CONVEX 2291 GT_PK(2,2) 166 5060 167 5063 4608 198
+CONVEX 2292 GT_PK(2,2) 166 5064 197 5063 5065 198
+CONVEX 2293 GT_PK(2,2) 166 5062 136 5066 4639 165
+CONVEX 2294 GT_PK(2,2) 166 5064 197 5066 4640 165
+CONVEX 2295 GT_PK(2,2) 230 5067 264 5068 5039 231
+CONVEX 2296 GT_PK(2,2) 230 5067 264 5069 4575 263
+CONVEX 2297 GT_PK(2,2) 230 5070 198 5068 4610 231
+CONVEX 2298 GT_PK(2,2) 230 5071 197 5070 5065 198
+CONVEX 2299 GT_PK(2,2) 1111 5072 1110 5073 4648 1074
+CONVEX 2300 GT_PK(2,2) 1111 5074 1075 5075 2282 1112
+CONVEX 2301 GT_PK(2,2) 1111 5073 1074 5074 4017 1075
+CONVEX 2302 GT_PK(2,2) 1111 5072 1110 5076 4653 1146
+CONVEX 2303 GT_PK(2,2) 1111 5077 1147 5075 2705 1112
+CONVEX 2304 GT_PK(2,2) 1111 5076 1146 5077 4299 1147
+CONVEX 2305 GT_PK(2,2) 841 5078 840 5079 5080 880
+CONVEX 2306 GT_PK(2,2) 841 5081 842 5082 4658 802
+CONVEX 2307 GT_PK(2,2) 841 5082 802 5083 2937 801
+CONVEX 2308 GT_PK(2,2) 841 5078 840 5083 4655 801
+CONVEX 2309 GT_PK(2,2) 881 5084 920 5085 5086 880
+CONVEX 2310 GT_PK(2,2) 881 5087 841 5085 5079 880
+CONVEX 2311 GT_PK(2,2) 881 5087 841 5088 5081 842
+CONVEX 2312 GT_PK(2,2) 879 5089 840 5090 5080 880
+CONVEX 2313 GT_PK(2,2) 879 5091 839 5092 2521 878
+CONVEX 2314 GT_PK(2,2) 879 5089 840 5091 4656 839
+CONVEX 2315 GT_PK(2,2) 959 5093 920 5094 5095 958
+CONVEX 2316 GT_PK(2,2) 961 5096 962 5097 4018 1000
+CONVEX 2317 GT_PK(2,2) 961 5098 999 5097 4661 1000
+CONVEX 2318 GT_PK(2,2) 961 5096 962 5099 4022 923
+CONVEX 2319 GT_PK(2,2) 998 5100 999 5101 4662 1037
+CONVEX 2320 GT_PK(2,2) 998 5102 1036 5101 4663 1037
+CONVEX 2321 GT_PK(2,2) 1224 5103 1225 5104 4669 1191
+CONVEX 2322 GT_PK(2,2) 1224 5104 1191 5105 4036 1190
+CONVEX 2323 GT_PK(2,2) 1257 5106 1288 5107 4687 1256
+CONVEX 2324 GT_PK(2,2) 1257 5108 1225 5109 4668 1258
+CONVEX 2325 GT_PK(2,2) 1257 5110 1289 5109 4696 1258
+CONVEX 2326 GT_PK(2,2) 1257 5106 1288 5110 4690 1289
+CONVEX 2327 GT_PK(2,2) 1257 5111 1224 5107 5112 1256
+CONVEX 2328 GT_PK(2,2) 1257 5111 1224 5108 5103 1225
+CONVEX 2329 GT_PK(2,2) 1227 5113 1228 5114 4706 1194
+CONVEX 2330 GT_PK(2,2) 1227 5113 1228 5115 4709 1260
+CONVEX 2331 GT_PK(2,2) 1227 5115 1260 5116 4050 1259
+CONVEX 2332 GT_PK(2,2) 1227 5117 1226 5116 4043 1259
+CONVEX 2333 GT_PK(2,2) 1227 5114 1194 5118 4366 1193
+CONVEX 2334 GT_PK(2,2) 1227 5117 1226 5118 4046 1193
+CONVEX 2335 GT_PK(2,2) 541 5119 503 5120 4098 542
+CONVEX 2336 GT_PK(2,2) 541 5119 503 5121 4744 502
+CONVEX 2337 GT_PK(2,2) 658 5122 698 5123 5124 697
+CONVEX 2338 GT_PK(2,2) 658 5125 619 5126 4725 659
+CONVEX 2339 GT_PK(2,2) 658 5122 698 5126 4733 659
+CONVEX 2340 GT_PK(2,2) 737 5127 698 5128 5124 697
+CONVEX 2341 GT_PK(2,2) 737 5128 697 5129 5130 736
+CONVEX 2342 GT_PK(2,2) 737 5131 776 5129 4943 736
+CONVEX 2343 GT_PK(2,2) 737 5131 776 5132 4735 777
+CONVEX 2344 GT_PK(2,2) 737 5132 777 5133 3323 738
+CONVEX 2345 GT_PK(2,2) 737 5127 698 5133 4732 738
+CONVEX 2346 GT_PK(2,2) 616 5134 615 5135 4928 655
+CONVEX 2347 GT_PK(2,2) 696 5136 697 5137 5130 736
+CONVEX 2348 GT_PK(2,2) 696 5138 735 5137 4945 736
+CONVEX 2349 GT_PK(2,2) 696 5139 695 5138 4495 735
+CONVEX 2350 GT_PK(2,2) 918 5140 957 5141 5142 956
+CONVEX 2351 GT_PK(2,2) 918 5143 917 5141 4755 956
+CONVEX 2352 GT_PK(2,2) 918 5143 917 5144 4752 878
+CONVEX 2353 GT_PK(2,2) 918 5145 879 5144 5092 878
+CONVEX 2354 GT_PK(2,2) 595 5146 635 5147 4789 634
+CONVEX 2355 GT_PK(2,2) 595 5148 555 5149 4770 556
+CONVEX 2356 GT_PK(2,2) 595 5150 596 5149 2530 556
+CONVEX 2357 GT_PK(2,2) 595 5146 635 5150 4181 596
+CONVEX 2358 GT_PK(2,2) 554 5151 555 5152 4771 515
+CONVEX 2359 GT_PK(2,2) 554 5153 593 5154 4187 553
+CONVEX 2360 GT_PK(2,2) 551 5155 550 5156 4178 511
+CONVEX 2361 GT_PK(2,2) 551 5157 512 5156 4777 511
+CONVEX 2362 GT_PK(2,2) 630 5158 631 5159 4783 670
+CONVEX 2363 GT_PK(2,2) 630 5160 669 5161 3393 629
+CONVEX 2364 GT_PK(2,2) 630 5160 669 5159 3394 670
+CONVEX 2365 GT_PK(2,2) 750 5162 790 5163 4823 751
+CONVEX 2366 GT_PK(2,2) 750 5164 711 5165 3381 710
+CONVEX 2367 GT_PK(2,2) 750 5163 751 5164 2587 711
+CONVEX 2368 GT_PK(2,2) 750 5162 790 5166 5167 789
+CONVEX 2369 GT_PK(2,2) 750 5168 749 5165 4191 710
+CONVEX 2370 GT_PK(2,2) 750 5166 789 5168 3441 749
+CONVEX 2371 GT_PK(2,2) 829 5169 869 5170 4821 830
+CONVEX 2372 GT_PK(2,2) 829 5171 790 5170 4825 830
+CONVEX 2373 GT_PK(2,2) 829 5169 869 5172 4835 868
+CONVEX 2374 GT_PK(2,2) 829 5171 790 5173 5167 789
+CONVEX 2375 GT_PK(2,2) 829 5174 828 5172 4218 868
+CONVEX 2376 GT_PK(2,2) 829 5174 828 5173 4220 789
+CONVEX 2377 GT_PK(2,2) 946 5175 908 5176 4832 907
+CONVEX 2378 GT_PK(2,2) 946 5177 984 5178 3455 945
+CONVEX 2379 GT_PK(2,2) 946 5176 907 5178 4232 945
+CONVEX 2380 GT_PK(2,2) 946 5175 908 5179 4836 947
+CONVEX 2381 GT_PK(2,2) 946 5177 984 5180 3454 985
+CONVEX 2382 GT_PK(2,2) 946 5179 947 5180 4228 985
+CONVEX 2383 GT_PK(2,2) 995 5181 957 5182 5142 956
+CONVEX 2384 GT_PK(2,2) 995 5183 994 5182 4251 956
+CONVEX 2385 GT_PK(2,2) 995 5183 994 5184 4248 1033
+CONVEX 2386 GT_PK(2,2) 995 5185 1034 5184 4845 1033
+CONVEX 2387 GT_PK(2,2) 1176 5186 1142 5187 4847 1141
+CONVEX 2388 GT_PK(2,2) 1176 5188 1209 5189 4853 1210
+CONVEX 2389 GT_PK(2,2) 1107 5190 1142 5191 4846 1106
+CONVEX 2390 GT_PK(2,2) 1107 5191 1106 5192 5193 1070
+CONVEX 2391 GT_PK(2,2) 1107 5194 1071 5192 4841 1070
+CONVEX 2392 GT_PK(2,2) 1107 5194 1071 5195 4843 1108
+CONVEX 2393 GT_PK(2,2) 1143 5196 1144 5197 3548 1178
+CONVEX 2394 GT_PK(2,2) 1143 5198 1107 5199 5190 1142
+CONVEX 2395 GT_PK(2,2) 1143 5196 1144 5200 4013 1108
+CONVEX 2396 GT_PK(2,2) 1143 5198 1107 5200 5195 1108
+CONVEX 2397 GT_PK(2,2) 1068 5201 1104 5202 4850 1067
+CONVEX 2398 GT_PK(2,2) 1068 5203 1030 5202 2613 1067
+CONVEX 2399 GT_PK(2,2) 1068 5204 1031 5203 3466 1030
+CONVEX 2400 GT_PK(2,2) 1358 5205 1357 5206 5207 1381
+CONVEX 2401 GT_PK(2,2) 1358 5208 1382 5206 4860 1381
+CONVEX 2402 GT_PK(2,2) 1358 5209 1332 5205 5210 1357
+CONVEX 2403 GT_PK(2,2) 1358 5209 1332 5211 4870 1333
+CONVEX 2404 GT_PK(2,2) 1359 5212 1333 5213 4281 1334
+CONVEX 2405 GT_PK(2,2) 1359 5214 1360 5213 2687 1334
+CONVEX 2406 GT_PK(2,2) 1359 5215 1358 5212 5211 1333
+CONVEX 2407 GT_PK(2,2) 1359 5215 1358 5216 5208 1382
+CONVEX 2408 GT_PK(2,2) 1359 5214 1360 5217 2683 1383
+CONVEX 2409 GT_PK(2,2) 1359 5216 1382 5217 4858 1383
+CONVEX 2410 GT_PK(2,2) 1355 5218 1379 5219 5220 1378
+CONVEX 2411 GT_PK(2,2) 1355 5218 1379 5221 5222 1356
+CONVEX 2412 GT_PK(2,2) 1399 5223 1377 5224 4871 1398
+CONVEX 2413 GT_PK(2,2) 1399 5225 1418 5226 5227 1378
+CONVEX 2414 GT_PK(2,2) 1399 5223 1377 5226 5228 1378
+CONVEX 2415 GT_PK(2,2) 1301 5229 1328 5230 5231 1329
+CONVEX 2416 GT_PK(2,2) 1301 5232 1302 5230 5233 1329
+CONVEX 2417 GT_PK(2,2) 1301 5234 1271 5235 2745 1272
+CONVEX 2418 GT_PK(2,2) 1301 5232 1302 5235 4877 1272
+CONVEX 2419 GT_PK(2,2) 1330 5236 1302 5237 5233 1329
+CONVEX 2420 GT_PK(2,2) 1330 5238 1355 5237 5239 1329
+CONVEX 2421 GT_PK(2,2) 1330 5238 1355 5240 5221 1356
+CONVEX 2422 GT_PK(2,2) 1330 5236 1302 5241 4876 1303
+CONVEX 2423 GT_PK(2,2) 1331 5242 1304 5243 3622 1303
+CONVEX 2424 GT_PK(2,2) 1331 5244 1330 5243 5241 1303
+CONVEX 2425 GT_PK(2,2) 1331 5244 1330 5245 5240 1356
+CONVEX 2426 GT_PK(2,2) 1331 5246 1332 5242 4869 1304
+CONVEX 2427 GT_PK(2,2) 1331 5246 1332 5247 5210 1357
+CONVEX 2428 GT_PK(2,2) 1331 5245 1356 5247 5248 1357
+CONVEX 2429 GT_PK(2,2) 1401 5249 1420 5250 4878 1402
+CONVEX 2430 GT_PK(2,2) 1401 5249 1420 5251 5252 1419
+CONVEX 2431 GT_PK(2,2) 1380 5253 1402 5254 4280 1381
+CONVEX 2432 GT_PK(2,2) 1380 5255 1357 5254 5207 1381
+CONVEX 2433 GT_PK(2,2) 1380 5256 1401 5253 5250 1402
+CONVEX 2434 GT_PK(2,2) 1380 5256 1401 5257 5258 1379
+CONVEX 2435 GT_PK(2,2) 1380 5259 1356 5255 5248 1357
+CONVEX 2436 GT_PK(2,2) 1380 5257 1379 5259 5222 1356
+CONVEX 2437 GT_PK(2,2) 1047 5260 1085 5261 4887 1048
+CONVEX 2438 GT_PK(2,2) 1047 5261 1048 5262 4883 1009
+CONVEX 2439 GT_PK(2,2) 1047 5263 1008 5262 2768 1009
+CONVEX 2440 GT_PK(2,2) 1047 5263 1008 5264 3672 1046
+CONVEX 2441 GT_PK(2,2) 1084 5265 1121 5266 4341 1120
+CONVEX 2442 GT_PK(2,2) 1084 5267 1085 5265 4886 1121
+CONVEX 2443 GT_PK(2,2) 1084 5266 1120 5268 4084 1083
+CONVEX 2444 GT_PK(2,2) 1084 5269 1047 5267 5260 1085
+CONVEX 2445 GT_PK(2,2) 1084 5268 1083 5270 2751 1046
+CONVEX 2446 GT_PK(2,2) 1084 5269 1047 5270 5264 1046
+CONVEX 2447 GT_PK(2,2) 205 5271 204 5272 4906 173
+CONVEX 2448 GT_PK(2,2) 205 5273 238 5274 5275 206
+CONVEX 2449 GT_PK(2,2) 239 5276 273 5277 4400 240
+CONVEX 2450 GT_PK(2,2) 239 5277 240 5278 4992 207
+CONVEX 2451 GT_PK(2,2) 239 5276 273 5279 4398 272
+CONVEX 2452 GT_PK(2,2) 239 5280 238 5279 4895 272
+CONVEX 2453 GT_PK(2,2) 239 5278 207 5281 5016 206
+CONVEX 2454 GT_PK(2,2) 239 5280 238 5281 5275 206
+CONVEX 2455 GT_PK(2,2) 237 5282 270 5283 5284 236
+CONVEX 2456 GT_PK(2,2) 237 5285 205 5286 5273 238
+CONVEX 2457 GT_PK(2,2) 237 5286 238 5287 4894 271
+CONVEX 2458 GT_PK(2,2) 237 5282 270 5287 4902 271
+CONVEX 2459 GT_PK(2,2) 237 5283 236 5288 4898 204
+CONVEX 2460 GT_PK(2,2) 237 5285 205 5288 5271 204
+CONVEX 2461 GT_PK(2,2) 269 5289 304 5290 2016 303
+CONVEX 2462 GT_PK(2,2) 269 5291 270 5289 4901 304
+CONVEX 2463 GT_PK(2,2) 269 5292 268 5290 2232 303
+CONVEX 2464 GT_PK(2,2) 269 5291 270 5293 5284 236
+CONVEX 2465 GT_PK(2,2) 269 5294 235 5292 2887 268
+CONVEX 2466 GT_PK(2,2) 269 5293 236 5294 4896 235
+CONVEX 2467 GT_PK(2,2) 171 5295 172 5296 4904 203
+CONVEX 2468 GT_PK(2,2) 171 5296 203 5297 2892 202
+CONVEX 2469 GT_PK(2,2) 171 5298 170 5297 3712 202
+CONVEX 2470 GT_PK(2,2) 171 5298 170 5299 3720 141
+CONVEX 2471 GT_PK(2,2) 115 5300 116 5301 3704 90
+CONVEX 2472 GT_PK(2,2) 115 5302 89 5301 2827 90
+CONVEX 2473 GT_PK(2,2) 115 5302 89 5303 2829 114
+CONVEX 2474 GT_PK(2,2) 143 5304 172 5305 4905 173
+CONVEX 2475 GT_PK(2,2) 143 5306 115 5307 5300 116
+CONVEX 2476 GT_PK(2,2) 850 5308 890 5309 4947 851
+CONVEX 2477 GT_PK(2,2) 850 5310 810 5311 4958 849
+CONVEX 2478 GT_PK(2,2) 850 5311 849 5312 4488 889
+CONVEX 2479 GT_PK(2,2) 850 5308 890 5312 4949 889
+CONVEX 2480 GT_PK(2,2) 811 5313 851 5314 4938 812
+CONVEX 2481 GT_PK(2,2) 811 5315 810 5316 4960 771
+CONVEX 2482 GT_PK(2,2) 811 5317 850 5313 5309 851
+CONVEX 2483 GT_PK(2,2) 811 5317 850 5315 5310 810
+CONVEX 2484 GT_PK(2,2) 811 5318 772 5316 4485 771
+CONVEX 2485 GT_PK(2,2) 811 5318 772 5314 4480 812
+CONVEX 2486 GT_PK(2,2) 513 5319 474 5320 4969 512
+CONVEX 2487 GT_PK(2,2) 513 5319 474 5321 4965 475
+CONVEX 2488 GT_PK(2,2) 119 5322 94 5323 5006 93
+CONVEX 2489 GT_PK(2,2) 119 5322 94 5324 5001 120
+CONVEX 2490 GT_PK(2,2) 145 5325 175 5326 5327 146
+CONVEX 2491 GT_PK(2,2) 176 5328 208 5329 4998 177
+CONVEX 2492 GT_PK(2,2) 176 5330 175 5331 5327 146
+CONVEX 2493 GT_PK(2,2) 176 5328 208 5332 4991 207
+CONVEX 2494 GT_PK(2,2) 176 5330 175 5332 5014 207
+CONVEX 2495 GT_PK(2,2) 407 5333 446 5334 4568 445
+CONVEX 2496 GT_PK(2,2) 407 5335 406 5334 5028 445
+CONVEX 2497 GT_PK(2,2) 297 5336 263 5337 4577 298
+CONVEX 2498 GT_PK(2,2) 297 5338 333 5337 5339 298
+CONVEX 2499 GT_PK(2,2) 369 5340 406 5341 5025 368
+CONVEX 2500 GT_PK(2,2) 369 5342 407 5340 5335 406
+CONVEX 2501 GT_PK(2,2) 336 5343 301 5344 5345 300
+CONVEX 2502 GT_PK(2,2) 335 5346 336 5347 5348 372
+CONVEX 2503 GT_PK(2,2) 335 5349 299 5350 5035 300
+CONVEX 2504 GT_PK(2,2) 335 5346 336 5350 5344 300
+CONVEX 2505 GT_PK(2,2) 266 5351 265 5352 5037 232
+CONVEX 2506 GT_PK(2,2) 266 5352 232 5353 3965 233
+CONVEX 2507 GT_PK(2,2) 266 5354 267 5353 4574 233
+CONVEX 2508 GT_PK(2,2) 266 5355 301 5354 5029 267
+CONVEX 2509 GT_PK(2,2) 266 5355 301 5356 5345 300
+CONVEX 2510 GT_PK(2,2) 266 5351 265 5356 5034 300
+CONVEX 2511 GT_PK(2,2) 229 5357 230 5358 5069 263
+CONVEX 2512 GT_PK(2,2) 229 5359 197 5360 4641 196
+CONVEX 2513 GT_PK(2,2) 229 5357 230 5359 5071 197
+CONVEX 2514 GT_PK(2,2) 450 5361 412 5362 5048 451
+CONVEX 2515 GT_PK(2,2) 450 5361 412 5363 5052 411
+CONVEX 2516 GT_PK(2,2) 450 5364 489 5362 2836 451
+CONVEX 2517 GT_PK(2,2) 450 5365 488 5364 3886 489
+CONVEX 2518 GT_PK(2,2) 448 5366 486 5367 4517 447
+CONVEX 2519 GT_PK(2,2) 448 5368 487 5366 4511 486
+CONVEX 2520 GT_PK(2,2) 921 5369 881 5370 5084 920
+CONVEX 2521 GT_PK(2,2) 921 5371 959 5370 5093 920
+CONVEX 2522 GT_PK(2,2) 960 5372 961 5373 5098 999
+CONVEX 2523 GT_PK(2,2) 960 5374 998 5373 5100 999
+CONVEX 2524 GT_PK(2,2) 960 5374 998 5375 5376 959
+CONVEX 2525 GT_PK(2,2) 960 5377 921 5375 5371 959
+CONVEX 2526 GT_PK(2,2) 997 5378 1036 5379 4666 1035
+CONVEX 2527 GT_PK(2,2) 997 5380 998 5378 5102 1036
+CONVEX 2528 GT_PK(2,2) 997 5381 959 5382 5094 958
+CONVEX 2529 GT_PK(2,2) 997 5380 998 5381 5376 959
+CONVEX 2530 GT_PK(2,2) 1223 5383 1255 5384 4677 1256
+CONVEX 2531 GT_PK(2,2) 1223 5385 1224 5384 5112 1256
+CONVEX 2532 GT_PK(2,2) 1223 5383 1255 5386 4679 1222
+CONVEX 2533 GT_PK(2,2) 1223 5385 1224 5387 5105 1190
+CONVEX 2534 GT_PK(2,2) 1223 5386 1222 5388 2309 1189
+CONVEX 2535 GT_PK(2,2) 1223 5387 1190 5388 3242 1189
+CONVEX 2536 GT_PK(2,2) 581 5389 541 5390 5120 542
+CONVEX 2537 GT_PK(2,2) 581 5391 620 5392 4721 621
+CONVEX 2538 GT_PK(2,2) 581 5390 542 5393 3282 582
+CONVEX 2539 GT_PK(2,2) 581 5392 621 5393 3304 582
+CONVEX 2540 GT_PK(2,2) 657 5394 658 5395 5123 697
+CONVEX 2541 GT_PK(2,2) 657 5396 696 5395 5136 697
+CONVEX 2542 GT_PK(2,2) 618 5397 658 5398 5125 619
+CONVEX 2543 GT_PK(2,2) 618 5399 657 5400 5401 617
+CONVEX 2544 GT_PK(2,2) 618 5399 657 5397 5394 658
+CONVEX 2545 GT_PK(2,2) 576 5402 616 5403 5134 615
+CONVEX 2546 GT_PK(2,2) 576 5404 536 5405 3776 575
+CONVEX 2547 GT_PK(2,2) 576 5403 615 5405 3854 575
+CONVEX 2548 GT_PK(2,2) 656 5406 616 5407 5408 617
+CONVEX 2549 GT_PK(2,2) 656 5409 657 5407 5401 617
+CONVEX 2550 GT_PK(2,2) 656 5409 657 5410 5396 696
+CONVEX 2551 GT_PK(2,2) 656 5410 696 5411 5139 695
+CONVEX 2552 GT_PK(2,2) 656 5411 695 5412 3849 655
+CONVEX 2553 GT_PK(2,2) 656 5406 616 5412 5135 655
+CONVEX 2554 GT_PK(2,2) 540 5413 541 5414 5121 502
+CONVEX 2555 GT_PK(2,2) 462 5415 461 5416 4719 423
+CONVEX 2556 GT_PK(2,2) 462 5417 424 5416 4922 423
+CONVEX 2557 GT_PK(2,2) 462 5417 424 5418 4923 463
+CONVEX 2558 GT_PK(2,2) 919 5419 957 5420 5421 958
+CONVEX 2559 GT_PK(2,2) 919 5422 918 5419 5140 957
+CONVEX 2560 GT_PK(2,2) 919 5423 920 5420 5095 958
+CONVEX 2561 GT_PK(2,2) 919 5423 920 5424 5086 880
+CONVEX 2562 GT_PK(2,2) 919 5425 879 5424 5090 880
+CONVEX 2563 GT_PK(2,2) 919 5422 918 5425 5145 879
+CONVEX 2564 GT_PK(2,2) 594 5426 633 5427 4800 593
+CONVEX 2565 GT_PK(2,2) 594 5428 554 5427 5153 593
+CONVEX 2566 GT_PK(2,2) 594 5426 633 5429 4798 634
+CONVEX 2567 GT_PK(2,2) 594 5428 554 5430 5151 555
+CONVEX 2568 GT_PK(2,2) 594 5431 595 5429 5147 634
+CONVEX 2569 GT_PK(2,2) 594 5431 595 5430 5148 555
+CONVEX 2570 GT_PK(2,2) 514 5432 476 5433 4772 475
+CONVEX 2571 GT_PK(2,2) 514 5434 554 5435 5154 553
+CONVEX 2572 GT_PK(2,2) 514 5432 476 5436 4774 515
+CONVEX 2573 GT_PK(2,2) 514 5434 554 5436 5152 515
+CONVEX 2574 GT_PK(2,2) 514 5437 513 5435 5438 553
+CONVEX 2575 GT_PK(2,2) 514 5437 513 5433 5321 475
+CONVEX 2576 GT_PK(2,2) 591 5439 631 5440 4782 592
+CONVEX 2577 GT_PK(2,2) 591 5441 630 5439 5158 631
+CONVEX 2578 GT_PK(2,2) 590 5442 630 5443 5161 629
+CONVEX 2579 GT_PK(2,2) 590 5444 589 5443 2028 629
+CONVEX 2580 GT_PK(2,2) 590 5445 550 5444 4176 589
+CONVEX 2581 GT_PK(2,2) 590 5446 591 5442 5441 630
+CONVEX 2582 GT_PK(2,2) 590 5447 551 5445 5155 550
+CONVEX 2583 GT_PK(2,2) 590 5446 591 5447 5448 551
+CONVEX 2584 GT_PK(2,2) 1177 5449 1176 5450 5186 1142
+CONVEX 2585 GT_PK(2,2) 1177 5451 1143 5452 5197 1178
+CONVEX 2586 GT_PK(2,2) 1177 5451 1143 5450 5199 1142
+CONVEX 2587 GT_PK(2,2) 1177 5452 1178 5453 2692 1211
+CONVEX 2588 GT_PK(2,2) 1177 5454 1210 5453 4268 1211
+CONVEX 2589 GT_PK(2,2) 1177 5449 1176 5454 5189 1210
+CONVEX 2590 GT_PK(2,2) 1175 5455 1176 5456 5188 1209
+CONVEX 2591 GT_PK(2,2) 1175 5457 1174 5458 3495 1208
+CONVEX 2592 GT_PK(2,2) 1175 5456 1209 5458 4856 1208
+CONVEX 2593 GT_PK(2,2) 1175 5457 1174 5459 3501 1140
+CONVEX 2594 GT_PK(2,2) 1175 5460 1141 5459 5461 1140
+CONVEX 2595 GT_PK(2,2) 1175 5455 1176 5460 5187 1141
+CONVEX 2596 GT_PK(2,2) 1105 5462 1068 5463 5201 1104
+CONVEX 2597 GT_PK(2,2) 1105 5464 1106 5465 4848 1141
+CONVEX 2598 GT_PK(2,2) 1105 5465 1141 5466 5461 1140
+CONVEX 2599 GT_PK(2,2) 1105 5463 1104 5466 4852 1140
+CONVEX 2600 GT_PK(2,2) 1069 5467 1106 5468 5193 1070
+CONVEX 2601 GT_PK(2,2) 1069 5469 1068 5470 5204 1031
+CONVEX 2602 GT_PK(2,2) 1069 5471 1105 5467 5464 1106
+CONVEX 2603 GT_PK(2,2) 1069 5471 1105 5469 5462 1068
+CONVEX 2604 GT_PK(2,2) 1069 5472 1032 5468 3465 1070
+CONVEX 2605 GT_PK(2,2) 1069 5470 1031 5472 3470 1032
+CONVEX 2606 GT_PK(2,2) 1354 5473 1377 5474 4872 1353
+CONVEX 2607 GT_PK(2,2) 1354 5475 1328 5474 4873 1353
+CONVEX 2608 GT_PK(2,2) 1354 5473 1377 5476 5228 1378
+CONVEX 2609 GT_PK(2,2) 1354 5477 1355 5476 5219 1378
+CONVEX 2610 GT_PK(2,2) 1354 5475 1328 5478 5231 1329
+CONVEX 2611 GT_PK(2,2) 1354 5477 1355 5478 5239 1329
+CONVEX 2612 GT_PK(2,2) 1300 5479 1328 5480 4874 1327
+CONVEX 2613 GT_PK(2,2) 1300 5481 1301 5479 5229 1328
+CONVEX 2614 GT_PK(2,2) 1300 5482 1299 5483 2725 1270
+CONVEX 2615 GT_PK(2,2) 1300 5482 1299 5480 3575 1327
+CONVEX 2616 GT_PK(2,2) 1300 5484 1271 5483 3614 1270
+CONVEX 2617 GT_PK(2,2) 1300 5481 1301 5484 5234 1271
+CONVEX 2618 GT_PK(2,2) 1400 5485 1401 5486 5258 1379
+CONVEX 2619 GT_PK(2,2) 1400 5487 1418 5488 5227 1378
+CONVEX 2620 GT_PK(2,2) 1400 5486 1379 5488 5220 1378
+CONVEX 2621 GT_PK(2,2) 1400 5489 1419 5487 5490 1418
+CONVEX 2622 GT_PK(2,2) 1400 5485 1401 5489 5251 1419
+CONVEX 2623 GT_PK(2,2) 174 5491 205 5492 5272 173
+CONVEX 2624 GT_PK(2,2) 174 5493 145 5494 5325 175
+CONVEX 2625 GT_PK(2,2) 174 5494 175 5495 5015 206
+CONVEX 2626 GT_PK(2,2) 174 5491 205 5495 5274 206
+CONVEX 2627 GT_PK(2,2) 142 5496 171 5497 5295 172
+CONVEX 2628 GT_PK(2,2) 142 5498 143 5497 5304 172
+CONVEX 2629 GT_PK(2,2) 142 5496 171 5499 5299 141
+CONVEX 2630 GT_PK(2,2) 142 5498 143 5500 5306 115
+CONVEX 2631 GT_PK(2,2) 142 5499 141 5501 3113 114
+CONVEX 2632 GT_PK(2,2) 142 5500 115 5501 5303 114
+CONVEX 2633 GT_PK(2,2) 552 5502 513 5503 5320 512
+CONVEX 2634 GT_PK(2,2) 552 5504 551 5503 5157 512
+CONVEX 2635 GT_PK(2,2) 552 5505 592 5506 4188 553
+CONVEX 2636 GT_PK(2,2) 552 5502 513 5506 5438 553
+CONVEX 2637 GT_PK(2,2) 552 5507 591 5505 5440 592
+CONVEX 2638 GT_PK(2,2) 552 5507 591 5504 5448 551
+CONVEX 2639 GT_PK(2,2) 144 5508 143 5509 5305 173
+CONVEX 2640 GT_PK(2,2) 144 5510 174 5509 5492 173
+CONVEX 2641 GT_PK(2,2) 144 5510 174 5511 5493 145
+CONVEX 2642 GT_PK(2,2) 144 5508 143 5512 5307 116
+CONVEX 2643 GT_PK(2,2) 118 5513 119 5514 5515 146
+CONVEX 2644 GT_PK(2,2) 118 5516 145 5514 5326 146
+CONVEX 2645 GT_PK(2,2) 118 5513 119 5517 5323 93
+CONVEX 2646 GT_PK(2,2) 118 5517 93 5518 3937 92
+CONVEX 2647 GT_PK(2,2) 147 5519 176 5520 5329 177
+CONVEX 2648 GT_PK(2,2) 147 5521 148 5522 4988 120
+CONVEX 2649 GT_PK(2,2) 147 5521 148 5520 4983 177
+CONVEX 2650 GT_PK(2,2) 147 5519 176 5523 5331 146
+CONVEX 2651 GT_PK(2,2) 147 5524 119 5522 5324 120
+CONVEX 2652 GT_PK(2,2) 147 5524 119 5523 5515 146
+CONVEX 2653 GT_PK(2,2) 408 5525 446 5526 4570 447
+CONVEX 2654 GT_PK(2,2) 408 5527 407 5525 5333 446
+CONVEX 2655 GT_PK(2,2) 332 5528 297 5529 5338 333
+CONVEX 2656 GT_PK(2,2) 332 5530 368 5531 4566 331
+CONVEX 2657 GT_PK(2,2) 332 5532 369 5530 5341 368
+CONVEX 2658 GT_PK(2,2) 332 5532 369 5529 5533 333
+CONVEX 2659 GT_PK(2,2) 262 5534 297 5535 5336 263
+CONVEX 2660 GT_PK(2,2) 262 5536 229 5535 5358 263
+CONVEX 2661 GT_PK(2,2) 373 5537 336 5538 5348 372
+CONVEX 2662 GT_PK(2,2) 373 5539 410 5538 5540 372
+CONVEX 2663 GT_PK(2,2) 373 5541 411 5542 5053 374
+CONVEX 2664 GT_PK(2,2) 373 5539 410 5541 5543 411
+CONVEX 2665 GT_PK(2,2) 228 5544 261 5545 5044 227
+CONVEX 2666 GT_PK(2,2) 228 5546 229 5547 5360 196
+CONVEX 2667 GT_PK(2,2) 228 5548 262 5544 5549 261
+CONVEX 2668 GT_PK(2,2) 228 5548 262 5546 5536 229
+CONVEX 2669 GT_PK(2,2) 228 5550 195 5547 3960 196
+CONVEX 2670 GT_PK(2,2) 228 5545 227 5550 4596 195
+CONVEX 2671 GT_PK(2,2) 449 5551 448 5552 5368 487
+CONVEX 2672 GT_PK(2,2) 449 5552 487 5553 4510 488
+CONVEX 2673 GT_PK(2,2) 449 5554 450 5553 5365 488
+CONVEX 2674 GT_PK(2,2) 449 5554 450 5555 5363 411
+CONVEX 2675 GT_PK(2,2) 449 5556 410 5555 5543 411
+CONVEX 2676 GT_PK(2,2) 449 5551 448 5556 5557 410
+CONVEX 2677 GT_PK(2,2) 882 5558 921 5559 5369 881
+CONVEX 2678 GT_PK(2,2) 882 5560 843 5561 3800 883
+CONVEX 2679 GT_PK(2,2) 882 5562 842 5560 4659 843
+CONVEX 2680 GT_PK(2,2) 882 5559 881 5562 5088 842
+CONVEX 2681 GT_PK(2,2) 922 5563 960 5564 5377 921
+CONVEX 2682 GT_PK(2,2) 922 5565 883 5566 3797 923
+CONVEX 2683 GT_PK(2,2) 922 5567 961 5566 5099 923
+CONVEX 2684 GT_PK(2,2) 922 5563 960 5567 5372 961
+CONVEX 2685 GT_PK(2,2) 922 5568 882 5565 5561 883
+CONVEX 2686 GT_PK(2,2) 922 5568 882 5564 5558 921
+CONVEX 2687 GT_PK(2,2) 996 5569 995 5570 5181 957
+CONVEX 2688 GT_PK(2,2) 996 5570 957 5571 5421 958
+CONVEX 2689 GT_PK(2,2) 996 5572 997 5571 5382 958
+CONVEX 2690 GT_PK(2,2) 996 5572 997 5573 5379 1035
+CONVEX 2691 GT_PK(2,2) 996 5574 1034 5573 4839 1035
+CONVEX 2692 GT_PK(2,2) 996 5569 995 5574 5185 1034
+CONVEX 2693 GT_PK(2,2) 578 5575 618 5576 5400 617
+CONVEX 2694 GT_PK(2,2) 578 5577 538 5578 5579 539
+CONVEX 2695 GT_PK(2,2) 580 5580 540 5581 5413 541
+CONVEX 2696 GT_PK(2,2) 580 5582 620 5583 4724 619
+CONVEX 2697 GT_PK(2,2) 580 5584 581 5582 5391 620
+CONVEX 2698 GT_PK(2,2) 580 5584 581 5581 5389 541
+CONVEX 2699 GT_PK(2,2) 579 5585 540 5586 5587 539
+CONVEX 2700 GT_PK(2,2) 579 5588 578 5586 5578 539
+CONVEX 2701 GT_PK(2,2) 579 5588 578 5589 5575 618
+CONVEX 2702 GT_PK(2,2) 579 5589 618 5590 5398 619
+CONVEX 2703 GT_PK(2,2) 579 5591 580 5590 5583 619
+CONVEX 2704 GT_PK(2,2) 579 5591 580 5585 5580 540
+CONVEX 2705 GT_PK(2,2) 501 5592 540 5593 5587 539
+CONVEX 2706 GT_PK(2,2) 501 5594 462 5595 5418 463
+CONVEX 2707 GT_PK(2,2) 501 5595 463 5596 4741 502
+CONVEX 2708 GT_PK(2,2) 501 5592 540 5596 5414 502
+CONVEX 2709 GT_PK(2,2) 577 5597 576 5598 5402 616
+CONVEX 2710 GT_PK(2,2) 577 5598 616 5599 5408 617
+CONVEX 2711 GT_PK(2,2) 577 5600 578 5599 5576 617
+CONVEX 2712 GT_PK(2,2) 577 5600 578 5601 5577 538
+CONVEX 2713 GT_PK(2,2) 500 5602 462 5603 5415 461
+CONVEX 2714 GT_PK(2,2) 500 5604 538 5605 5579 539
+CONVEX 2715 GT_PK(2,2) 500 5606 501 5605 5593 539
+CONVEX 2716 GT_PK(2,2) 500 5606 501 5602 5594 462
+CONVEX 2717 GT_PK(2,2) 500 5603 461 5607 4718 499
+CONVEX 2718 GT_PK(2,2) 500 5604 538 5607 5608 499
+CONVEX 2719 GT_PK(2,2) 117 5609 118 5610 5518 92
+CONVEX 2720 GT_PK(2,2) 117 5611 144 5612 5512 116
+CONVEX 2721 GT_PK(2,2) 117 5611 144 5613 5511 145
+CONVEX 2722 GT_PK(2,2) 117 5609 118 5613 5516 145
+CONVEX 2723 GT_PK(2,2) 117 5614 91 5610 4911 92
+CONVEX 2724 GT_PK(2,2) 117 5612 116 5614 3703 91
+CONVEX 2725 GT_PK(2,2) 409 5615 410 5616 5540 372
+CONVEX 2726 GT_PK(2,2) 409 5617 408 5618 5526 447
+CONVEX 2727 GT_PK(2,2) 409 5619 448 5618 5367 447
+CONVEX 2728 GT_PK(2,2) 409 5619 448 5615 5557 410
+CONVEX 2729 GT_PK(2,2) 371 5620 335 5621 5347 372
+CONVEX 2730 GT_PK(2,2) 371 5622 409 5621 5616 372
+CONVEX 2731 GT_PK(2,2) 371 5622 409 5623 5617 408
+CONVEX 2732 GT_PK(2,2) 296 5624 262 5625 5534 297
+CONVEX 2733 GT_PK(2,2) 296 5626 331 5627 3954 295
+CONVEX 2734 GT_PK(2,2) 296 5628 261 5627 5047 295
+CONVEX 2735 GT_PK(2,2) 296 5624 262 5628 5549 261
+CONVEX 2736 GT_PK(2,2) 296 5629 332 5626 5531 331
+CONVEX 2737 GT_PK(2,2) 296 5629 332 5625 5528 297
+CONVEX 2738 GT_PK(2,2) 337 5630 373 5631 5537 336
+CONVEX 2739 GT_PK(2,2) 337 5631 336 5632 5343 301
+CONVEX 2740 GT_PK(2,2) 337 5633 374 5634 4602 338
+CONVEX 2741 GT_PK(2,2) 337 5630 373 5633 5542 374
+CONVEX 2742 GT_PK(2,2) 337 5634 338 5635 3095 302
+CONVEX 2743 GT_PK(2,2) 337 5632 301 5635 5030 302
+CONVEX 2744 GT_PK(2,2) 537 5636 577 5637 5597 576
+CONVEX 2745 GT_PK(2,2) 537 5638 536 5639 2990 498
+CONVEX 2746 GT_PK(2,2) 537 5637 576 5638 5404 536
+CONVEX 2747 GT_PK(2,2) 537 5640 499 5639 4100 498
+CONVEX 2748 GT_PK(2,2) 537 5641 538 5640 5608 499
+CONVEX 2749 GT_PK(2,2) 537 5636 577 5641 5601 538
+CONVEX 2750 GT_PK(2,2) 334 5642 371 5643 5620 335
+CONVEX 2751 GT_PK(2,2) 334 5643 335 5644 5349 299
+CONVEX 2752 GT_PK(2,2) 334 5645 333 5646 5339 298
+CONVEX 2753 GT_PK(2,2) 334 5644 299 5646 5032 298
+CONVEX 2754 GT_PK(2,2) 370 5647 408 5648 5527 407
+CONVEX 2755 GT_PK(2,2) 370 5649 371 5647 5623 408
+CONVEX 2756 GT_PK(2,2) 370 5650 369 5648 5342 407
+CONVEX 2757 GT_PK(2,2) 370 5651 334 5649 5642 371
+CONVEX 2758 GT_PK(2,2) 370 5650 369 5652 5533 333
+CONVEX 2759 GT_PK(2,2) 370 5651 334 5652 5645 333
END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h5.5.mesh b/tests/meshes/disc_P2_h10.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h5.5.mesh
rename to tests/meshes/disc_P2_h10.mesh
diff --git a/tests/meshes/disc_P2_h2.mesh b/tests/meshes/disc_P2_h2.mesh
old mode 100755
new mode 100644
index 8a11842..35b2731
--- a/tests/meshes/disc_P2_h2.mesh
+++ b/tests/meshes/disc_P2_h2.mesh
@@ -10,312 +10,1392 @@ BEGIN POINTS LIST
POINT 2 -20 20
POINT 3 20 20
POINT 4 0 40
- POINT 5 -10.98978892636249 3.289986853546615
- POINT 6 -7.455051935387742 1.441384732666446
- POINT 7 -3.676797270081755 0.3408758629801169
- POINT 8 3.676739140647854 0.3408649912656072
- POINT 9 7.454956757891998 1.441346499866884
- POINT 10 10.98967587538561 3.289912503101757
- POINT 11 -14.0168269073075 5.73365626899654
- POINT 12 -8.695621440244636 6.296208976859693
- POINT 13 -4.394745255440499 5.015856566647908
- POINT 14 -2.026216535175318e-05 4.385124114216329
- POINT 15 4.394708091285465 5.015856253328598
- POINT 16 8.695583210536949 6.296192236703892
- POINT 17 14.01674847505161 5.733579208955796
- POINT 18 -16.59751417751507 8.841033957952504
- POINT 19 -11.67153666400569 9.560370517352128
- POINT 20 -6.622536405170427 9.609178468908505
- POINT 21 -2.162226938155009 8.907447576607822
- POINT 22 2.162220418053965 8.907449303560238
- POINT 23 6.62252892316614 9.609178885793535
- POINT 24 11.67152235457562 9.560353456050622
- POINT 25 16.59746793653143 8.840965180813091
- POINT 26 -18.49296961576042 12.38356548043812
- POINT 27 -14.03986978753954 13.21961891707463
- POINT 28 -9.212447689054923 13.42718043490255
- POINT 29 -4.546978357052273 13.23975192949301
- POINT 30 5.760553932435131e-06 13.09029577543401
- POINT 31 4.546984712272912 13.2397591385677
- POINT 32 9.212451943525352 13.42717994917974
- POINT 33 14.03987180658499 13.21960569166439
- POINT 34 18.49294552140193 12.3835069787666
- POINT 35 -19.60575567023449 16.04850096809653
- POINT 36 -15.59452670078516 17.30489743540965
- POINT 37 -11.19255363614599 17.32291243784231
- POINT 38 -6.720002186738463 17.55851232809086
- POINT 39 -2.521105171955536 17.0288301192291
- POINT 40 2.521117530994832 17.02884382666544
- POINT 41 6.720008173371727 17.55852412828754
- POINT 42 11.19255813733148 17.32291152297285
- POINT 43 15.59452813708109 17.30489873028883
- POINT 44 19.60574841112116 16.04846495145881
- POINT 45 -16.35730659116254 21.75725594233062
- POINT 46 -12.54544836995473 21.48138724705098
- POINT 47 -8.37129847568881 21.60726175061301
- POINT 48 -4.053718777686841 21.85246502790269
- POINT 49 -1.430589398276894e-05 24.01054233578156
- POINT 50 4.05371501425693 21.85249206836341
- POINT 51 8.371300119263841 21.60726988024046
- POINT 52 12.54545081863551 21.48139080472586
- POINT 53 16.35731330216852 21.75725990853536
- POINT 54 -19.41056153872311 24.81976148284177
- POINT 55 -14.80560392580181 26.07573876068267
- POINT 56 -10.66746926752378 25.66425346686257
- POINT 57 -6.065699906353569 25.80431103098134
- POINT 58 -2.285109034351877 27.41452583361899
- POINT 59 2.285117889708415 27.41450890210915
- POINT 60 6.065725475366363 25.80433146618176
- POINT 61 10.66748147994728 25.66426492608582
- POINT 62 14.80560831647502 26.07574769863441
- POINT 63 19.41055542162303 24.81978611809871
- POINT 64 -17.79052993253167 29.13767173407599
- POINT 65 -12.53266642765302 30.28076603601422
- POINT 66 -8.408829224822554 29.44178330973553
- POINT 67 -4.486611626819454 30.93433334096026
- POINT 68 -3.455844492966306e-06 31.78686138258002
- POINT 69 4.486608079340947 30.93433387532503
- POINT 70 8.408846377235559 29.44180970477908
- POINT 71 12.53266137297764 30.28079181313681
- POINT 72 17.79050469035144 29.13772087902333
- POINT 73 -15.42321743407593 32.73280660267888
- POINT 74 -12.36825118230115 35.71707233206979
- POINT 75 -8.654673025388929 33.6487632940044
- POINT 76 -4.244918305693361 35.1578478808239
- POINT 77 4.244868056856853 35.1578586139012
- POINT 78 8.654638880706619 33.64878973380078
- POINT 79 12.36818408598653 35.71712513202336
- POINT 80 15.42316052899461 32.73287553137968
- POINT 81 -8.358587775297027 38.16959026512966
- POINT 82 -4.173840349470416 39.55962823616952
- POINT 83 -3.315758252031564e-05 36.08253135745896
- POINT 84 4.173782294307199 39.55964062450516
- POINT 85 8.358512109833965 38.16962507345837
- POINT 86 -15.31869198252731 11.03032643751357
- POINT 87 -14.13452542076038 9.200702237652315
- POINT 88 -12.85570322577262 11.38999471721338
- POINT 89 14.81719997183304 15.26225221097661
- POINT 90 12.61621497195824 15.27125860731862
- POINT 91 13.39354313720629 17.31390512663084
- POINT 92 16.26640866399346 12.80155633521549
- POINT 93 15.31866987155821 11.03028543623874
- POINT 94 17.63438934978107 10.56451880793851
- POINT 95 17.04373682924151 14.84420285452771
- POINT 96 -10.59366972652097 31.96476466500931
- POINT 97 -10.47074782623779 29.86127467287488
- POINT 98 -8.531751125105743 31.54527330186997
- POINT 99 -12.45045880497709 32.99891918404201
- POINT 100 -10.51146210384504 34.68291781303709
- POINT 101 -8.506630400342978 35.90917677956703
- POINT 102 -10.43571526797337 37.06153095754958
- POINT 103 -17.63442337101413 10.56458323774599
- POINT 104 -16.26641970164998 12.80159219875637
- POINT 105 -15.3858183445685 7.22202811794831
- POINT 106 -12.8441817856566 7.647013393174333
- POINT 107 16.29805650341323 27.60673428882887
- POINT 108 15.16158303166454 29.70925634608007
- POINT 109 13.66913484472633 28.17826975588561
- POINT 110 -1.142556245098185 29.6006936080995
- POINT 111 4.427678269136592e-06 27.41451736786407
- POINT 112 1.142557216931961 29.60068514234459
- POINT 113 -17.04374815827279 14.84423145792389
- POINT 114 -14.81719824416235 15.26225817624214
- POINT 115 15.97592071962481 19.53107931941209
- POINT 116 18.17865665108426 20.87862995426768
- POINT 117 17.79726406854054 18.65244936514441
- POINT 118 11.62616187505517 13.32339282042206
- POINT 119 10.20250504042842 15.3750457360763
- POINT 120 6.879718327899132 13.33346954387372
- POINT 121 7.917490433345746 11.51817941748664
- POINT 122 5.584756817719526 11.42446901218062
- POINT 123 7.545654146317784 19.582897004264
- POINT 124 8.956283155351606 17.4407178256302
- POINT 125 9.781929128297662 19.46509070160666
- POINT 126 7.96623005844854 15.49285203873364
- POINT 127 5.633496442822319 15.39914163342762
- POINT 128 12.8556970805803 11.3899795738575
- POINT 129 14.13449514555352 9.200659318431857
- POINT 130 10.44198714905048 11.49376670261518
- POINT 131 9.147025638870879 9.584766170922078
- POINT 132 -13.97794193086447 31.50678631934655
- POINT 133 -13.97561719584198 34.30671603178849
- POINT 134 -16.70387650845763 30.99911431489088
- POINT 135 -15.16159818009234 29.7092188850451
- POINT 136 -6.301753040495194 36.66371907297678
- POINT 137 -6.449795665541145 34.40330558741415
- POINT 138 -4.209379327581889 37.35873805849671
- POINT 139 -6.304639255162508 38.98029279438281
- POINT 140 4.209325175582026 37.35874961920318
- POINT 141 6.301690083345409 36.66374184367979
- POINT 142 6.304573775735958 38.98031527820729
- POINT 143 -13.66913517672742 28.17825239834845
- POINT 144 -16.29806692916674 27.60670524737933
- POINT 145 -17.10808273226246 25.44775012176222
- POINT 146 -18.72542076142402 27.02556955988556
- POINT 147 10.51141148334658 34.68295743291207
- POINT 148 8.506575495270292 35.90920740362957
- POINT 149 10.4356453552653 37.06157496167121
- POINT 150 6.449753468781736 34.40332417385099
- POINT 151 10.59365012684213 31.96479077346879
- POINT 152 8.531742628971088 31.54529971928993
- POINT 153 10.4707538751066 29.86130075895795
- POINT 154 12.45042272948209 32.99895847258009
- POINT 155 17.60013827410112 16.67668184087382
- POINT 156 19.90119304214559 18.01442401696686
- POINT 157 19.13728303754552 14.18928652402979
- POINT 158 13.97555586519206 34.30677709224583
- POINT 159 13.97791095098612 31.50683367225824
- POINT 160 16.70383744452203 30.99917471256351
- POINT 161 -17.60014118550983 16.67669920175309
- POINT 162 -19.90119484636033 18.01444229663801
- POINT 163 -17.79726335039258 18.65244871770483
- POINT 164 -19.13729740986643 14.18933437204147
- POINT 165 14.45138206040202 21.61932535663061
- POINT 166 13.67552956755527 23.77856925168013
- POINT 167 15.58146080932177 23.91650380358488
- POINT 168 10.45837546894968 21.54433034248316
- POINT 169 11.8690044779835 19.40215116384935
- POINT 170 14.0699894778583 19.39314476750734
- POINT 171 18.7254069306502 27.02560730650771
- POINT 172 17.10808186904902 25.44776690836656
- POINT 173 17.88393436189578 23.28852301331703
- POINT 174 19.85209195747333 22.42784944192063
- POINT 175 8.366603477656822 25.73429819613379
- POINT 176 9.53816392859142 27.55303731543246
- POINT 177 7.237285926300961 27.62307058548042
- POINT 178 11.60007142646246 27.97252836961132
- POINT 179 12.73654489821115 25.87000631236012
- POINT 180 9.519390799605562 23.63576740316314
- POINT 181 7.218512797315102 23.70580067321111
- POINT 182 11.6064661492914 23.57282786540584
- POINT 183 5.059720244811647 23.82841176727259
- POINT 184 6.212507566760386 21.72988097430193
- POINT 185 5.386861593814329 19.70550809832548
- POINT 186 3.169416451982673 24.63350048523628
- POINT 187 4.175421682537388 26.60942018414546
- POINT 188 12.84413541481362 7.64696633250321
- POINT 189 15.38575758374665 7.221953946724504
- POINT 190 6.545145650911207 5.656024245016244
- POINT 191 7.659056066851544 7.952685561248713
- POINT 192 5.508618507225803 7.312517569561066
- POINT 193 10.18355278255628 7.928272846377257
- POINT 194 11.35616584279428 6.014885722829844
- POINT 195 9.84262954296128 4.793052369902824
- POINT 196 12.5627706312312 4.437969385077269
- POINT 197 5.924832424588732 3.228601376597741
- POINT 198 5.59298116705137 0.7979540467762278
- POINT 199 4.03572361596666 2.678360622297102
- POINT 200 8.075269984214474 3.868769368285388
- POINT 201 9.268518322543754 2.277286464498438
- POINT 202 -3.385860330585666 29.17442958728963
- POINT 203 -2.243307541331974 31.36059736177015
- POINT 204 -4.365764966256407 33.04609061089208
- POINT 205 -2.122460880768927 33.47235463170196
- POINT 206 -5.276155766586511 28.3693221859708
- POINT 207 -6.447720425821004 30.1880583253479
- POINT 208 -7.237264565588061 27.62304717035844
- POINT 209 -4.175404470352722 26.60941843230016
- POINT 210 -6.570642326104192 32.29154831748234
- POINT 211 -2.122475731637941 35.62018961914143
- POINT 212 -1.830671350664097e-05 33.93469637001949
- POINT 213 2.122417449637166 35.62019498568008
- POINT 214 2.12243230050618 33.47235999824061
- POINT 215 -2.086936753526468 37.82107979681424
- POINT 216 -1.657879126015782e-05 38.04126567872948
- POINT 217 -2.098502568614956 39.88960238033538
- POINT 218 2.086874568362339 37.82108599098206
- POINT 219 2.09847524707464 39.8896054946081
- POINT 220 5.276166777353655 28.3693326707534
- POINT 221 6.447727228288253 30.18807179005206
- POINT 222 3.385862984524681 29.17442138871709
- POINT 223 6.570623480023783 32.2915618045629
- POINT 224 4.365738068098899 33.04609624461312
- POINT 225 2.243302311748227 31.36059762895253
- POINT 226 -15.97591664597385 19.53107668887014
- POINT 227 -18.17865329558127 20.87862797116531
- POINT 228 -17.88393406494282 23.2885087125862
- POINT 229 -19.85209345422734 22.42783684408701
- POINT 230 -15.58145525848218 23.91649735150665
- POINT 231 1.260561645774382 15.05956980104973
- POINT 232 3.534051121633872 15.13430148261657
- POINT 233 2.273495236413422 13.16502745700086
- POINT 234 4.62056285218328 17.29368397747649
- POINT 235 3.287416272625881 19.44066794751443
- POINT 236 1.260558765497416 18.51442191333272
- POINT 237 2.026857507128465 20.92624603418171
- POINT 238 -1.260549705700802 15.05956294733156
- POINT 239 -3.534041764503905 15.13429102436105
- POINT 240 -2.27348629824917 13.16502385246351
- POINT 241 -4.620553679346999 17.29367122365998
- POINT 242 -5.633490271895369 15.39913212879194
- POINT 243 6.179519647986353e-06 17.02883697294727
- POINT 244 -1.260552585977768 18.51441505961455
- POINT 245 3.354602565163439 11.07360422106397
- POINT 246 4.392374670610053 9.258314094676887
- POINT 247 1.081113089303949 10.99887253949712
- POINT 248 3.278464254669715 6.961652778444417
- POINT 249 -8.956277911442228 17.44071238296659
- POINT 250 -9.781926055917403 19.46508709422766
- POINT 251 -7.545650331213636 19.58288703935193
- POINT 252 -13.39354016846558 17.31390493662598
- POINT 253 -12.61621171184277 15.27126567745847
- POINT 254 -7.659078922707532 7.952693722884099
- POINT 255 -10.18357905212516 7.928289747105911
- POINT 256 -9.147036534588061 9.584774493130316
- POINT 257 -11.35622417377607 6.014932622928116
- POINT 258 -9.842705183303561 4.793097915203154
- POINT 259 -12.5628648971392 4.438046414902402
- POINT 260 -8.07533668781619 3.868796854763069
- POINT 261 -9.268622145138828 2.27734158433505
- POINT 262 1.081100077944307 6.646286708888283
- POINT 263 2.197343914560057 4.700490183772463
- POINT 264 1.838359439241251 2.362994552740968
- POINT 265 -1.013108267587659e-05 2.192562057108165
- POINT 266 1.846253788767268 0.0853985780217391
- POINT 267 -1.081110588800538 10.99887167602092
- POINT 268 -3.354602647603641 11.07359975305042
- POINT 269 -4.392381671662718 9.258313022758163
- POINT 270 -5.58475738111135 11.42446519920076
- POINT 271 -3.260050521758373e-06 8.90744844008403
- POINT 272 -1.08112360016018 6.646285845412075
- POINT 273 -8.366584586938671 25.73428224892195
- POINT 274 -9.519383871606294 23.63575760873779
- POINT 275 -7.21849919102119 23.70578639079717
- POINT 276 -9.538149246173166 27.55301838829905
- POINT 277 -11.6000678475884 27.97250975143839
- POINT 278 -12.73653659666279 25.86999611377262
- POINT 279 -5.059709342020205 23.82838802944201
- POINT 280 -6.212508626687826 21.72986338925784
- POINT 281 -3.287411974821189 19.44064757356589
- POINT 282 -2.026859388843421 20.92623251395134
- POINT 283 -3.169413906019359 24.63349543076084
- POINT 284 -5.386860482212652 19.70548867799678
- POINT 285 -11.86900100305036 19.40214984244664
- POINT 286 -10.45837342282177 21.54432449883199
- POINT 287 -11.60645881873926 23.57282035695677
- POINT 288 -14.45137748055864 21.6193215946908
- POINT 289 -14.06998753536995 19.39314234123031
- POINT 290 -13.67552614787827 23.77856300386682
- POINT 291 -7.966224937896692 15.49284638149671
- POINT 292 -6.879713023053598 13.33346618219778
- POINT 293 -10.20250066260046 15.37504643637243
- POINT 294 -7.917492047112675 11.51817945190553
- POINT 295 -10.44199217653031 11.49377547612734
- POINT 296 -11.62615873829723 13.32339967598859
- POINT 297 -1.838408766123554 2.362999988598223
- POINT 298 -1.846281530475226 0.08540130760665365
- POINT 299 -3.278486096797754 6.961652071627865
- POINT 300 -2.197382758802926 4.700490340432118
- POINT 301 -6.545183347842568 5.6560327717538
- POINT 302 -5.92489859541412 3.228620649657177
- POINT 303 -5.508640830305463 7.312517517778206
- POINT 304 -4.035771262761127 2.678366214814012
- POINT 305 -5.593056997119752 0.797976657516179
- POINT 306 -2.026866541790412 22.93150368184212
- POINT 307 -7.152946991384468e-06 22.00527116789078
- POINT 308 -1.14256167012293 25.71253408470027
- POINT 309 1.142551791907216 25.71252561894535
- POINT 310 2.026850354181474 22.93151720207248
+ POINT 5 -7.08999439411224 1.298877587388341
+ POINT 6 -5.282004223598042 0.7100950914239894
+ POINT 7 -3.47031521720064 0.3033781502190239
+ POINT 8 -1.689974063564663 0.07152821552843025
+ POINT 9 1.689960162663852 0.07152703670926773
+ POINT 10 3.470291113247503 0.3033739033986539
+ POINT 11 5.281972434142698 0.7100863867937268
+ POINT 12 7.089956578995546 1.298863250915369
+ POINT 13 -10.33788236531681 2.879013223504487
+ POINT 14 -8.728323343402396 2.005101511455367
+ POINT 15 -6.155723063676203 2.801434963065342
+ POINT 16 -4.091201195594828 2.459658715166061
+ POINT 17 -2.066659832781266 2.187655143712953
+ POINT 18 -4.444059962388502e-06 2.064287137447093
+ POINT 19 2.066650046418929 2.187657831466219
+ POINT 20 4.091191239691891 2.459658150301677
+ POINT 21 6.155715570419536 2.801429443148412
+ POINT 22 8.728292838334855 2.005086715177716
+ POINT 23 10.3378510065 2.878994288669519
+ POINT 24 -13.31700959313135 5.078295824654251
+ POINT 25 -11.8842697780299 3.913852796799773
+ POINT 26 -9.460448082417175 4.366488604800259
+ POINT 27 -7.512025315084293 4.126002865730436
+ POINT 28 -5.172892121816004 4.455275571417475
+ POINT 29 -3.057534701397881 4.267955770521298
+ POINT 30 -1.012355277947994 4.110780430542055
+ POINT 31 1.012349419089582 4.110782567666035
+ POINT 32 3.057529483199409 4.267957853121388
+ POINT 33 5.172886691584971 4.455272913530382
+ POINT 34 7.512016782430195 4.125998677146069
+ POINT 35 9.460436885249777 4.366480067235193
+ POINT 36 11.88424594459136 3.913835188943747
+ POINT 37 13.31698679929866 5.078275482126558
+ POINT 38 -14.7498830675396 6.492929647996144
+ POINT 39 -12.45509720824102 6.556537137387828
+ POINT 40 -10.6482491458674 5.948211070168938
+ POINT 41 -8.422109451390526 6.167912606077227
+ POINT 42 -6.353060403793894 6.112985632708121
+ POINT 43 -4.1407681774423 6.228053553808773
+ POINT 44 -2.044474263097546 6.130734213928414
+ POINT 45 -1.590000917432027e-06 6.079527809516725
+ POINT 46 2.044472146376001 6.130736081211611
+ POINT 47 4.140767470322072 6.22805374467435
+ POINT 48 6.353058937427791 6.112982734736828
+ POINT 49 8.422108492096564 6.167907314850485
+ POINT 50 10.64824854146091 5.948202934940974
+ POINT 51 12.45509688415863 6.556538659055924
+ POINT 52 14.74986960384593 6.492914945498344
+ POINT 53 -16.04355519086491 8.058294224118221
+ POINT 54 -13.74135223644284 8.192183278283656
+ POINT 55 -11.47752803375488 8.160729976898475
+ POINT 56 -9.493527168153337 7.92578225082361
+ POINT 57 -7.348476128284648 8.030483731407866
+ POINT 58 -5.251990097092846 8.021830105465815
+ POINT 59 -3.111403417400961 8.061569553457121
+ POINT 60 -1.03035566619991 8.025902010406856
+ POINT 61 1.030354767138576 8.025902400729668
+ POINT 62 3.111403710309801 8.061569941428463
+ POINT 63 5.251991017315566 8.021829123575905
+ POINT 64 7.348476568276788 8.030480163525478
+ POINT 65 9.49352663676625 7.92577656119784
+ POINT 66 11.47752506667806 8.160726192772536
+ POINT 67 13.74135116972482 8.192181839463158
+ POINT 68 16.04354708966182 8.058283340247721
+ POINT 69 -17.19580986241097 9.787060992258192
+ POINT 70 -14.93702314944201 9.823933424582281
+ POINT 71 -12.67351421081692 9.907845730886832
+ POINT 72 -10.48194789872941 9.921029402134767
+ POINT 73 -8.415247672061369 9.840575684874789
+ POINT 74 -6.293821461179366 9.890161035967978
+ POINT 75 -4.18979493172746 9.895564239362063
+ POINT 76 -2.081243704999238 9.916613908721169
+ POINT 77 5.730172508017217e-08 9.910960593168005
+ POINT 78 2.081244132593595 9.916613808527552
+ POINT 79 4.189795976700378 9.895563750716825
+ POINT 80 6.293822706796825 9.890159478467984
+ POINT 81 8.415248200245212 9.840572417227369
+ POINT 82 10.48194698614503 9.921026346494969
+ POINT 83 12.67351249301398 9.90784290415405
+ POINT 84 14.93702196401547 9.823930709655935
+ POINT 85 17.19580506925672 9.787052921897237
+ POINT 86 -18.1760415240729 11.65545001122227
+ POINT 87 -15.97553246064111 11.5448525408589
+ POINT 88 -13.78571642443011 11.61751913076442
+ POINT 89 -11.59628723826348 11.69602393958708
+ POINT 90 -9.442169657304916 11.7276271718398
+ POINT 91 -7.349624558628578 11.71151253389753
+ POINT 92 -5.24282073613147 11.73166174921223
+ POINT 93 -3.137905182843987 11.749161104766
+ POINT 94 -1.042556134226208 11.76547185321201
+ POINT 95 1.042556695466196 11.76547172930404
+ POINT 96 3.13790593838561 11.74916068398455
+ POINT 97 5.242821722657395 11.73166093775092
+ POINT 98 7.349625501825332 11.7115109952139
+ POINT 99 9.442169874348188 11.72762525690472
+ POINT 100 11.59628683371615 11.69602200942614
+ POINT 101 13.78571564810794 11.61751684765504
+ POINT 102 15.97553159279355 11.54484971825705
+ POINT 103 18.17603883633879 11.65544415682245
+ POINT 104 -18.9605397782243 13.63620150237337
+ POINT 105 -16.8378114819632 13.34701391345798
+ POINT 106 -14.74755920142683 13.39190264700377
+ POINT 107 -12.63015409928628 13.45515225576576
+ POINT 108 -10.4974158537763 13.51638952902862
+ POINT 109 -8.377087236386718 13.55137598391785
+ POINT 110 -6.285880485474346 13.5571522438029
+ POINT 111 -4.197964629953373 13.554499339371
+ POINT 112 -2.088214950681028 13.58585648886253
+ POINT 113 2.731150748891409e-07 13.59731244193799
+ POINT 114 2.088215540160786 13.58585624443037
+ POINT 115 4.197965288358211 13.55449885456938
+ POINT 116 6.285881219549023 13.55715142631005
+ POINT 117 8.377087797482492 13.5513749885778
+ POINT 118 10.49741609890272 13.51638838986579
+ POINT 119 12.63015411255437 13.45515089704564
+ POINT 120 14.74755900190871 13.3919008647022
+ POINT 121 16.83781104922592 13.34701152878708
+ POINT 122 18.96053842326367 13.63619746535554
+ POINT 123 -19.5357573624754 15.71582163367355
+ POINT 124 -17.53374306722162 15.20882267305824
+ POINT 125 -15.57069741754931 15.24451363995668
+ POINT 126 -13.55098734811856 15.27194090964616
+ POINT 127 -11.4874826074671 15.31182390849893
+ POINT 128 -9.398270307101383 15.3521915525082
+ POINT 129 -7.307964300837752 15.3807112166889
+ POINT 130 -5.231490199222396 15.39200882295255
+ POINT 131 -3.169152633696715 15.35291249391119
+ POINT 132 -1.041499472772248 15.40847695692984
+ POINT 133 1.041499922227459 15.40847686112553
+ POINT 134 3.169153095957357 15.35291225824823
+ POINT 135 5.231490717147384 15.39200836588829
+ POINT 136 7.307964797170775 15.38071066913708
+ POINT 137 9.398270745362067 15.35219096658757
+ POINT 138 11.48748296447435 15.31182320391143
+ POINT 139 13.55098760797554 15.27193995853761
+ POINT 140 15.57069756108526 15.24451232768288
+ POINT 141 17.5337430129703 15.20882089303506
+ POINT 142 19.53575681130713 15.71581912036011
+ POINT 143 -18.2269232082509 17.13021291903821
+ POINT 144 -16.40696619670878 17.17145148168169
+ POINT 145 -14.46503683750223 17.15281425943443
+ POINT 146 -12.45424174106675 17.15199836204197
+ POINT 147 -10.39981013664358 17.16515504075176
+ POINT 148 -8.328026293006795 17.18988295252257
+ POINT 149 -6.256758829896484 17.21190086556036
+ POINT 150 -4.196112455235621 17.22388615617422
+ POINT 151 -2.171217513306863 17.11254059462183
+ POINT 152 1.665915350806957e-07 17.22074676082319
+ POINT 153 2.171217828945217 17.1125405142267
+ POINT 154 4.19611284158213 17.22388591748381
+ POINT 155 6.256759233014987 17.21190057227975
+ POINT 156 8.32802671761999 17.18988265372117
+ POINT 157 10.39981059340922 17.16515474428726
+ POINT 158 12.45424219159261 17.15199799003971
+ POINT 159 14.46503723679426 17.15281363556374
+ POINT 160 16.40696659288819 17.17145057879611
+ POINT 161 18.22692352993353 17.13021164782587
+ POINT 162 -19.89780896458842 17.98079262859248
+ POINT 163 -17.84230000449807 19.0216744028301
+ POINT 164 -15.67627065513821 19.02313060013363
+ POINT 165 -13.55906626932976 19.0036025225671
+ POINT 166 -11.45548002657009 18.98870888881037
+ POINT 167 -9.365348057261556 18.99918972787285
+ POINT 168 -7.287998267664897 19.0218085635537
+ POINT 169 -5.225476971032742 19.04419029905378
+ POINT 170 -3.181207515747626 19.06061320124515
+ POINT 171 -1.234450813224698 18.81027364364246
+ POINT 172 1.234451001429794 18.8102736784703
+ POINT 173 3.181207777678578 19.06061305006857
+ POINT 174 5.225477302694968 19.04419014960234
+ POINT 175 7.287998656796332 19.02180842950959
+ POINT 176 9.365348511226138 18.99918964629332
+ POINT 177 11.45548052731511 18.98870888549819
+ POINT 178 13.55906673221513 19.00360248933783
+ POINT 179 15.6762709640833 19.02313030096059
+ POINT 180 17.84230024444024 19.02167396477342
+ POINT 181 19.89780885181004 17.98079151724459
+ POINT 182 -18.34809671121251 20.89054860233434
+ POINT 183 -16.5148528869666 20.87800710044906
+ POINT 184 -14.52694695679922 20.85426661015416
+ POINT 185 -12.45599638977427 20.8108810324845
+ POINT 186 -10.37011211347385 20.80605366101868
+ POINT 187 -8.288100923056527 20.82387931457176
+ POINT 188 -6.210897946834899 20.84807602452601
+ POINT 189 -4.130583790032196 20.86687448767059
+ POINT 190 -2.030932593701857 20.87063865748742
+ POINT 191 9.744431586633517e-08 21.64935021861394
+ POINT 192 2.030932751362846 20.87063857502341
+ POINT 193 4.130584013659444 20.86687431844705
+ POINT 194 6.210898346296974 20.84807594605767
+ POINT 195 8.288101445193462 20.82387932992417
+ POINT 196 10.37011274159265 20.80605382218947
+ POINT 197 12.45599711658471 20.8108813744629
+ POINT 198 14.52694762208812 20.85426702370534
+ POINT 199 16.51485331119099 20.87800725634424
+ POINT 200 18.348097009919 20.89054895986076
+ POINT 201 -19.88382274553589 22.15257822717576
+ POINT 202 -17.85872906553023 22.79187608979278
+ POINT 203 -15.75836820209814 22.71857538973881
+ POINT 204 -13.57945048306569 22.62787433244293
+ POINT 205 -11.43502337227142 22.60571660119635
+ POINT 206 -9.32896785495339 22.62172230713452
+ POINT 207 -7.252191943285577 22.65010775210676
+ POINT 208 -5.19352107545026 22.67271964550248
+ POINT 209 -3.145718127729072 22.67904520073677
+ POINT 210 -1.19802941618547 22.93488185752093
+ POINT 211 1.198029575535804 22.93488182516196
+ POINT 212 3.145718298303114 22.67904507452085
+ POINT 213 5.193521324838902 22.67271937177574
+ POINT 214 7.252192530636423 22.65010772431655
+ POINT 215 9.328968618053137 22.62172251326393
+ POINT 216 11.43502432491394 22.60571702295378
+ POINT 217 13.57945157268804 22.62787513308746
+ POINT 218 15.75836910518877 22.71857642015902
+ POINT 219 17.85872913941462 22.7918771500154
+ POINT 220 19.88382260621709 22.15257951409296
+ POINT 221 -19.56496589012501 24.14874796995999
+ POINT 222 -17.12378015908613 24.49263729810405
+ POINT 223 -14.75261366404331 24.36653106466741
+ POINT 224 -12.51545015644557 24.36405857012063
+ POINT 225 -10.36487612468117 24.40059700241373
+ POINT 226 -8.270782662155399 24.44922254990688
+ POINT 227 -6.207288303035652 24.48752518657241
+ POINT 228 -4.152672439085122 24.50430982838724
+ POINT 229 -2.144764510838116 24.6392641397031
+ POINT 230 6.736184551131563e-08 24.56637229685156
+ POINT 231 2.144764639428793 24.6392640566236
+ POINT 232 4.152672593221236 24.5043096033403
+ POINT 233 6.207288592802848 24.48752465778632
+ POINT 234 8.270783499471428 24.44922265688236
+ POINT 235 10.36487726829784 24.4005974184117
+ POINT 236 12.51545141239867 24.36405943508291
+ POINT 237 14.75261493047371 24.36653271363972
+ POINT 238 17.12378075459493 24.4926401834798
+ POINT 239 19.56496529523762 24.14875077537231
+ POINT 240 -19.08648829040304 25.9754468234863
+ POINT 241 -17.2845615037453 26.31014844212238
+ POINT 242 -15.41261905344529 26.10941999036963
+ POINT 243 -13.37179093546351 26.11632995430249
+ POINT 244 -11.29591265365937 26.16877399507631
+ POINT 245 -9.236109783161917 26.24563353410026
+ POINT 246 -7.197506282144635 26.30683884552605
+ POINT 247 -5.148124747507762 26.32635712487787
+ POINT 248 -3.122954853611116 26.40463970225008
+ POINT 249 -1.028840474391874 26.37582534616704
+ POINT 250 1.028840597301122 26.37582532979795
+ POINT 251 3.122954923639289 26.40463955141999
+ POINT 252 5.148124848876652 26.32635667877105
+ POINT 253 7.197506356103443 26.30683804371632
+ POINT 254 9.236111124219747 26.24563372506302
+ POINT 255 11.29591412227338 26.16877501716782
+ POINT 256 13.3717921011747 26.11633170886203
+ POINT 257 15.41261961645513 26.1094231779272
+ POINT 258 17.28456075910474 26.31015378144565
+ POINT 259 19.08648669351269 25.97545192419629
+ POINT 260 -18.31673994912508 28.03100477126815
+ POINT 261 -16.29279631468638 28.07734896422777
+ POINT 262 -14.29108105178232 27.93826211324394
+ POINT 263 -12.23205698562959 27.95454691920996
+ POINT 264 -10.1921242779246 28.04641052160824
+ POINT 265 -8.184908522052318 28.14581978804722
+ POINT 266 -6.142892720399755 28.15468429908139
+ POINT 267 -4.115765842832939 28.20978375998045
+ POINT 268 -2.044953225702631 28.19763670818671
+ POINT 269 1.215817429928157e-07 28.20528019734085
+ POINT 270 2.044953387448034 28.19763672758267
+ POINT 271 4.115765884875199 28.20978350344839
+ POINT 272 6.142892053295159 28.15468405294527
+ POINT 273 8.184908802060571 28.1458177672969
+ POINT 274 10.1921266003412 28.04641156253142
+ POINT 275 12.23205881411247 27.95454935528251
+ POINT 276 14.2910815778731 27.93826589300298
+ POINT 277 16.29279479603289 28.07735539177588
+ POINT 278 18.31673641698378 28.0310128272082
+ POINT 279 -17.36678064292307 29.91942186322351
+ POINT 280 -15.30701199611502 29.80163024565981
+ POINT 281 -13.1975126296105 29.73273604910611
+ POINT 282 -11.14232609374812 29.83834011557202
+ POINT 283 -9.18383040196667 30.00598319236085
+ POINT 284 -7.135586668146636 29.99761305864382
+ POINT 285 -5.123286168201119 30.04271988926355
+ POINT 286 -3.053121112865554 30.02630175178171
+ POINT 287 -1.015876570824747 30.05156154994286
+ POINT 288 1.015877381461083 30.05156170293002
+ POINT 289 3.053121697974701 30.02630185030043
+ POINT 290 5.123284228587577 30.0427213293883
+ POINT 291 7.135586245905698 29.99761060242232
+ POINT 292 9.183831168146963 30.00598031130402
+ POINT 293 11.14232972160493 29.83834373724195
+ POINT 294 13.19751369866922 29.73274161644041
+ POINT 295 15.30700948964564 29.80163858123015
+ POINT 296 17.36677404971316 29.91943340651388
+ POINT 297 -16.21450019303935 31.70854318392894
+ POINT 298 -14.18134842576247 31.46072633556853
+ POINT 299 -12.05433474215738 31.57807989769072
+ POINT 300 -10.18803390533311 31.90895778516169
+ POINT 301 -8.127827538982091 31.83562093362241
+ POINT 302 -6.132870312528693 31.91947084481104
+ POINT 303 -4.060514707104238 31.84886116654844
+ POINT 304 -2.023054298900899 31.90620457141977
+ POINT 305 1.779731685490338e-06 31.92616315841029
+ POINT 306 2.023057639192921 31.90620515692421
+ POINT 307 4.060510421402324 31.84886697474238
+ POINT 308 6.132869669181516 31.91946778705557
+ POINT 309 8.127827628663475 31.83561745950141
+ POINT 310 10.18803390203203 31.90895591912609
+ POINT 311 12.05433729770214 31.5780897141657
+ POINT 312 14.18134461110469 31.46073802168817
+ POINT 313 16.21448882325949 31.70855892928177
+ POINT 314 -14.85855987098478 33.38742688347396
+ POINT 315 -12.97622115412793 33.15231979037343
+ POINT 316 -11.24542238667929 33.84152597332419
+ POINT 317 -9.096796145803623 33.67355592311518
+ POINT 318 -7.169110863793735 33.81460869617811
+ POINT 319 -5.025802643706024 33.69074033624606
+ POINT 320 -3.036012504986613 33.74897677262599
+ POINT 321 -1.006001725651425 33.81394161048243
+ POINT 322 1.006017505359627 33.81394238106373
+ POINT 323 3.03600454008222 33.7489957057666
+ POINT 324 5.025801824829388 33.69073476359576
+ POINT 325 7.169110502599582 33.81460511144136
+ POINT 326 9.09679356939724 33.67355436459209
+ POINT 327 11.24541326548703 33.84153193558982
+ POINT 328 12.97621626240949 33.15233833055714
+ POINT 329 14.85854134665239 33.38744744340443
+ POINT 330 -13.24234864752243 34.98800194480442
+ POINT 331 -10.03539086910046 35.3828070140792
+ POINT 332 -8.191323309688949 35.8082238544771
+ POINT 333 -5.969442595277822 35.42728838548917
+ POINT 334 -3.964572821971675 35.68073227615353
+ POINT 335 -2.062446042804255 35.66361537576937
+ POINT 336 3.401394552337428e-05 35.7433135846511
+ POINT 337 2.062435708551036 35.66367717807774
+ POINT 338 3.96457676799794 35.68072163899399
+ POINT 339 5.969444351238414 35.42728363799607
+ POINT 340 8.19131937738778 35.80822453891639
+ POINT 341 10.03538306356879 35.38281277249126
+ POINT 342 13.2423188856883 34.98802824022632
+ POINT 343 -11.71964489363993 36.20647782730662
+ POINT 344 -9.885418518050601 37.38615830834937
+ POINT 345 -6.769213566269587 37.09871131951007
+ POINT 346 -4.834310082657146 37.45809613171494
+ POINT 347 -2.966207997229898 37.80957975457357
+ POINT 348 -1.228951401026502 37.50853541118494
+ POINT 349 1.228967413584314 37.50873516084056
+ POINT 350 2.966244431714553 37.80956888117363
+ POINT 351 4.834322604660215 37.45809313826081
+ POINT 352 6.769215951806145 37.09871058669637
+ POINT 353 9.885380262406448 37.38618005968161
+ POINT 354 11.71961051109886 36.20650269083999
+ POINT 355 -8.160801736293346 38.25928024378061
+ POINT 356 -6.108721403629119 39.04425169999729
+ POINT 357 -4.094025391529261 39.57648988183318
+ POINT 358 -2.032918826278168 39.89641276827972
+ POINT 359 -0.000114943787747096 38.55954134616952
+ POINT 360 2.032857647557499 39.89641901912924
+ POINT 361 4.093978133093873 39.57649976491602
+ POINT 362 6.108678764431183 39.04426537708952
+ POINT 363 8.16076002653128 38.25929888548312
+ POINT 364 19.74927974328947 16.84311090331085
+ POINT 365 19.06236619087178 17.55550158253523
+ POINT 366 18.88134017062033 16.42301538409299
+ POINT 367 18.87005454812514 18.50123274100901
+ POINT 368 18.92115012222012 19.51083698238671
+ POINT 369 19.97443587516672 18.98910375220634
+ POINT 370 18.03461188718688 18.07594280629964
+ POINT 371 -1.016516885032958 39.22797705722462
+ POINT 372 -1.017777998289471 39.97408640454459
+ POINT 373 -5.747189387354801e-05 39.27977067308476
+ POINT 374 1.016371351884876 39.22798018264938
+ POINT 375 1.017747548306818 39.9740879692846
+ POINT 376 2.499551039636026 38.85299395015144
+ POINT 377 3.530111282404213 38.69303432304483
+ POINT 378 3.067591411714378 39.76334698055007
+ POINT 379 -10.9924492306217 14.41410671876377
+ POINT 380 -10.44287645728424 15.33200773050357
+ POINT 381 -9.947843080438842 14.43429054076841
+ POINT 382 -12.05881835337669 14.38348808213234
+ POINT 383 -11.56378497653129 13.48577089239719
+ POINT 384 -19.1159597283742 21.52156341475505
+ POINT 385 -19.17404835560626 20.44527430116717
+ POINT 386 -19.97093456597552 21.07785567562136
+ POINT 387 18.53474991213871 15.46232000669758
+ POINT 388 18.24714071811698 14.4225091791953
+ POINT 389 19.27621315646036 14.66824556999596
+ POINT 390 17.88033327145191 16.16951627043046
+ POINT 391 -1.878316948172965 1.129591679620692
+ POINT 392 -2.768487524990953 1.245516646965989
+ POINT 393 -2.582747461702293 0.167465745146943
+ POINT 394 7.648469065631529 32.82511128547139
+ POINT 395 8.132952035998411 33.74407973801672
+ POINT 396 8.612310599030359 32.75458591204675
+ POINT 397 10.87749678733383 35.79465773166562
+ POINT 398 10.81858671612841 36.82136097977488
+ POINT 399 9.960381662987619 36.38449641608644
+ POINT 400 -11.96631262099795 7.358633557143151
+ POINT 401 -11.55167317705421 6.252374103778383
+ POINT 402 -11.06288858981114 7.054470523533706
+ POINT 403 -12.16968349313546 5.2351949670938
+ POINT 404 -11.26625946194865 4.931031933484356
+ POINT 405 -12.0755211222859 9.034287853892653
+ POINT 406 -11.57773105477317 9.914437566510799
+ POINT 407 -10.97973796624214 9.040879689516622
+ POINT 408 -10.17110926624146 33.75754094821968
+ POINT 409 -10.64040662788987 34.61216649370169
+ POINT 410 -9.566093507452038 34.52818146859719
+ POINT 411 -5.471515743143133 38.25117391585611
+ POINT 412 -5.108309760920813 39.33662769024022
+ POINT 413 -4.464167737093204 38.51729300677406
+ POINT 414 -17.075786992357 11.60015127604059
+ POINT 415 -16.58567116152604 10.66595676655855
+ POINT 416 -17.71058118590639 10.70832033698396
+ POINT 417 -11.04685154601989 12.60620673430785
+ POINT 418 -12.11322066877488 12.57558809767642
+ POINT 419 -12.1349007245402 10.80193483523696
+ POINT 420 -11.03911756849645 10.80852667086092
+ POINT 421 -9.437251545081509 13.53388275647323
+ POINT 422 -8.887678771744049 14.45178376821303
+ POINT 423 -12.51923497779283 15.29188240907255
+ POINT 424 -13.09057072370242 14.36354658270596
+ POINT 425 -18.87005448454325 18.50123351571129
+ POINT 426 -18.03461160637449 18.07594366093415
+ POINT 427 -19.06236608641966 17.55550277381534
+ POINT 428 -18.92115000224904 19.51083720141505
+ POINT 429 -19.97443590274372 18.98910431002001
+ POINT 430 -18.09519835785529 19.95611150258222
+ POINT 431 0.5990148364900598 22.29211602188795
+ POINT 432 -0.599014659370577 22.29211603806743
+ POINT 433 7.967516690854382e-08 22.93488184134145
+ POINT 434 -1.01546624812877 21.25999443805068
+ POINT 435 4.872215793316759e-08 20.82467510930697
+ POINT 436 -1.015466296850928 20.43531932874371
+ POINT 437 -1.614481004943663 21.90276025750417
+ POINT 438 6.782362015092881 16.29630562070841
+ POINT 439 6.26972775715908 15.38635951751268
+ POINT 440 5.744124975081186 16.30195446908402
+ POINT 441 -5.74412451455944 16.30195484425646
+ POINT 442 -5.226435642566052 17.21789351086729
+ POINT 443 -4.713801327229008 16.30794748956339
+ POINT 444 -4.200321416459555 15.37246065843187
+ POINT 445 -3.682632544466168 16.2883993250427
+ POINT 446 -5.718863643637123 1.755765027244666
+ POINT 447 -6.622858728894221 2.050156275226842
+ POINT 448 -6.1930002735872 0.9829879862466689
+ POINT 449 -1.033332138420614 2.125971140580023
+ POINT 450 -0.5061798610039783 3.087533783994574
+ POINT 451 -1.53950755536463 3.149217787127504
+ POINT 452 0.8449778593019447 1.06790708707818
+ POINT 453 -2.222029981194251e-06 1.032143568723546
+ POINT 454 0.8457366719362006 0.01788976042541284
+ POINT 455 -0.8449892538123129 1.067907676487761
+ POINT 456 -0.8457434623547605 0.01789005539397318
+ POINT 457 7.14550668849857 38.67998224759658
+ POINT 458 7.464987989168712 37.67900473608974
+ POINT 459 6.438947358118664 38.07148798189294
+ POINT 460 5.471500684545699 38.25117925767516
+ POINT 461 5.801769278233181 37.27840186247859
+ POINT 462 4.399449686329078 36.5694073886274
+ POINT 463 3.900283518187385 37.63383100971722
+ POINT 464 3.465410599856247 36.74514526008381
+ POINT 465 4.464150368877045 38.51729645158841
+ POINT 466 5.108265028519643 39.33663957465164
+ POINT 467 6.569277426918998 34.62094437471872
+ POINT 468 5.497623088033901 34.55900920079591
+ POINT 469 6.097456163714485 33.75266993751856
+ POINT 470 4.967010559618177 35.55400263849503
+ POINT 471 4.495189296413664 34.68572820129488
+ POINT 472 5.401883477949315 36.44268838812844
+ POINT 473 6.369330151522279 36.26299711234622
+ POINT 474 9.113351220478284 35.59551865570383
+ POINT 475 9.038349819897114 36.597202299299
+ POINT 476 7.080381864313097 35.61775408845623
+ POINT 477 7.480267664596962 36.45346756280638
+ POINT 478 7.680214939993681 34.81141482517887
+ POINT 479 8.64405647339251 34.74088945175424
+ POINT 480 9.566088316483015 34.52818356854168
+ POINT 481 8.17603970195953 37.03376171219976
+ POINT 482 9.033624999701651 37.84358769694784
+ POINT 483 18.72983203648753 27.01380028490616
+ POINT 484 17.80064858804426 27.17058330432692
+ POINT 485 18.18552372630872 26.14280285282097
+ POINT 486 14.85185059716412 27.02384453546509
+ POINT 487 13.8314368395239 27.02729880093251
+ POINT 488 14.39220585881491 26.11287744339462
+ POINT 489 -2.499563411754033 38.85299626142665
+ POINT 490 -3.530116694379579 38.69303481820337
+ POINT 491 -3.067645385176077 39.76333856162318
+ POINT 492 -3.900259039943522 37.63383794314426
+ POINT 493 3.013506238274488 35.67219940853586
+ POINT 494 2.514340070132794 36.73662302962569
+ POINT 495 6.650990085890549 32.86703644924846
+ POINT 496 5.579335747005452 32.80510127532567
+ POINT 497 7.130348648922496 31.87754262327849
+ POINT 498 7.631706937284587 30.91661403096186
+ POINT 499 8.159708707026331 30.00179545686317
+ POINT 500 8.655829398405219 30.92079888540271
+ POINT 501 6.634227957543607 30.95853919473894
+ POINT 502 6.129435237246637 30.02016596590531
+ POINT 503 5.628076948884546 30.98109455822193
+ POINT 504 11.94551072074933 21.70829919870834
+ POINT 505 11.41305492908868 20.80846759832619
+ POINT 506 10.9025685332533 21.70588542257163
+ POINT 507 13.00753192439992 19.90724193190037
+ POINT 508 13.49147236933642 20.83257419908412
+ POINT 509 14.04300717715163 19.92893475652158
+ POINT 510 -1.632691703463277 19.84045615056494
+ POINT 511 -0.617225406612349 19.40513682182123
+ POINT 512 7.881862384261 8.935526290376423
+ POINT 513 6.821149637536807 8.96031982099673
+ POINT 514 7.354535453521018 9.865365947847677
+ POINT 515 1.878305104541391 1.129592434087743
+ POINT 516 2.768470579833216 1.245515867432436
+ POINT 517 2.582728607973412 0.1674632640394325
+ POINT 518 1.033322801179483 2.125972484456656
+ POINT 519 -12.88605340068618 5.81741648102104
+ POINT 520 -14.05126013257847 5.767569248488341
+ POINT 521 -13.60249013789031 6.524733392691986
+ POINT 522 -12.61408342909388 4.479532986874619
+ POINT 523 -13.09822472234193 7.374360207835742
+ POINT 524 -12.60944013509886 8.176456627591065
+ POINT 525 -13.20743322362988 9.050014504585244
+ POINT 526 -14.24561765199122 7.3425564631399
+ POINT 527 -14.89245371365388 8.125238751200939
+ POINT 528 -15.41659981616689 7.259181873308678
+ POINT 529 -12.11082177040361 33.4969228818488
+ POINT 530 -12.51527794814265 32.36519984403208
+ POINT 531 -11.64987856441833 32.70980293550745
+ POINT 532 -10.81862285529724 36.82133760142749
+ POINT 533 -10.87751788137019 35.79464242069291
+ POINT 534 -9.960404693575528 36.38448266121428
+ POINT 535 -11.48253364015961 35.0240019003154
+ POINT 536 -10.7167281460062 32.87524187924294
+ POINT 537 -11.12118432374524 31.74351884142621
+ POINT 538 -9.642415025568365 32.79125685413843
+ POINT 539 -18.53475021484851 15.4623221533659
+ POINT 540 -19.27621404631537 14.6682488620726
+ POINT 541 -18.24714142272296 14.42251208771581
+ POINT 542 -18.88134028536315 16.42301727635588
+ POINT 543 -17.88033313773626 16.16951779604823
+ POINT 544 -19.74928002630716 16.84311272522837
+ POINT 545 -15.49028917015346 8.94111382435025
+ POINT 546 -16.06641650592649 9.805497208420237
+ POINT 547 -16.64214543071471 8.907705737630335
+ POINT 548 -15.45627780504156 10.68439298272059
+ POINT 549 -14.33918769294243 9.008058351432968
+ POINT 550 -13.80526868012947 9.865889577734556
+ POINT 551 -14.1492732747727 14.33192177832496
+ POINT 552 -15.15912830948807 14.31820814348022
+ POINT 553 -14.56084238283394 15.25822727480142
+ POINT 554 -13.68885665035655 13.42352745138476
+ POINT 555 -17.50692650301805 12.50123196234012
+ POINT 556 -17.89917563009375 13.49160770791567
+ POINT 557 -18.59468367857226 12.63537262535845
+ POINT 558 -16.40667197130215 12.44593322715844
+ POINT 559 -17.18577727459241 14.27791829325811
+ POINT 560 -15.79268534169501 13.36945828023087
+ POINT 561 -15.36154583103397 12.46837759393134
+ POINT 562 -16.20425444975626 14.29576377670733
+ POINT 563 -16.55222024238547 15.22666815650746
+ POINT 564 14.61766884814922 19.01336639514921
+ POINT 565 15.10160929308571 19.93869866233297
+ POINT 566 -8.954387420107352 8.883178967849199
+ POINT 567 -8.421001648218994 7.978132991115737
+ POINT 568 -7.881861900173009 8.935529708141328
+ POINT 569 -10.48552760095411 8.043256113861043
+ POINT 570 -10.07088815701037 6.936996660496273
+ POINT 571 -9.987737533441372 8.923405826479188
+ POINT 572 -9.448597785395389 9.880802543504778
+ POINT 573 -8.909628446845817 12.63950157787882
+ POINT 574 -9.96979275554061 12.62200835043421
+ POINT 575 -10.5192284477842 11.71182555571344
+ POINT 576 -9.962058778017163 10.82432828698728
+ POINT 577 -8.928708664683143 10.78410142835729
+ POINT 578 -8.826724490159041 19.9115345212223
+ POINT 579 -7.788049595360713 19.92284393906273
+ POINT 580 -8.326673162463226 19.01049914571327
+ POINT 581 6.796923008359899 14.46893104772356
+ POINT 582 5.758685968348203 14.47457989609917
+ POINT 583 7.331484508515757 13.55426320744392
+ POINT 584 7.842526297326634 14.46604282885744
+ POINT 585 3.183665335263674 17.16821321585526
+ POINT 586 3.688660309630354 18.14224948377619
+ POINT 587 2.676212803311897 18.08657678214764
+ POINT 588 5.226436037298559 17.21789324488178
+ POINT 589 4.713801779364758 16.30794714168605
+ POINT 590 1.702834415187505 17.9614070963485
+ POINT 591 2.207829389554186 18.93544336426943
+ POINT 592 9.410254775410465e-08 18.81027366105638
+ POINT 593 0.6172255007148968 19.40513683923515
+ POINT 594 -9.714117030543257 27.14602202785425
+ POINT 595 -10.74401846579198 27.10759225834228
+ POINT 596 -10.26601121841064 26.20720376458829
+ POINT 597 -15.19792430940091 31.58463475974873
+ POINT 598 -14.51995414837362 32.42407660952124
+ POINT 599 -15.55919105425835 32.56628720680114
+ POINT 600 -13.5787847899452 32.30652306297098
+ POINT 601 -13.91739051255635 33.26987333692369
+ POINT 602 -13.68943052768649 30.59673119233732
+ POINT 603 -13.11784158395992 31.51940311662963
+ POINT 604 -12.62592368588394 30.65540797339841
+ POINT 605 -18.10341288837137 21.84121234606356
+ POINT 606 -18.87127590553306 22.47222715848427
+ POINT 607 -17.12463310060343 18.09656294225589
+ POINT 608 -17.31694470247984 17.15083220035995
+ POINT 609 -16.9703546319652 16.19013707736997
+ POINT 610 -15.98883180712904 16.20798256081918
+ POINT 611 10.38199647148354 22.61371976810885
+ POINT 612 9.849540679822894 21.7138881677267
+ POINT 613 8.8085350316233 21.72280092159405
+ POINT 614 9.329107093393057 20.81496657605682
+ POINT 615 8.9287090372967 10.78409883706605
+ POINT 616 9.962058430246611 10.82432580169985
+ POINT 617 9.448597593195121 9.88079938186117
+ POINT 618 9.969792986625455 12.62200682338526
+ POINT 619 8.90962883591534 12.63950012274126
+ POINT 620 9.437251948192607 13.5338816892218
+ POINT 621 10.67234141492057 4.14015762808947
+ POINT 622 9.899143945874886 3.622737177952356
+ POINT 623 11.12308967028839 3.378421352424517
+ POINT 624 10.05434271335534 5.157341501088084
+ POINT 625 11.26624724302613 4.931019061942361
+ POINT 626 11.04685146630943 12.60620519964597
+ POINT 627 12.11322047313526 12.57558645323589
+ POINT 628 11.56378510572855 13.48576964345572
+ POINT 629 10.51922835403217 11.71182363316543
+ POINT 630 11.03911690993059 10.80852417796056
+ POINT 631 8.353117771266421 15.36645081786232
+ POINT 632 8.887679271422279 14.45178297758268
+ POINT 633 9.947843422132394 14.43428967822668
+ POINT 634 -7.354534566620368 9.865368360421384
+ POINT 635 -6.821148794732007 8.960322383687922
+ POINT 636 -5.241808196453412 9.89286263766502
+ POINT 637 -5.768321098655418 10.8109113925901
+ POINT 638 -4.716307833929465 10.81361299428714
+ POINT 639 -8.846687175134175 18.09453634019771
+ POINT 640 -7.808012280335847 18.10584575803814
+ POINT 641 -7.292392561451639 17.20089190904147
+ POINT 642 -6.77237854878069 18.11685471455703
+ POINT 643 -3.663850057285723 10.82236267206403
+ POINT 644 -2.609574443921612 10.83288750674358
+ POINT 645 -3.135519318363349 9.906089074041617
+ POINT 646 -4.190362959487728 11.74041142698911
+ POINT 647 1.022235278187542 6.105131945364167
+ POINT 648 1.537413456757289 7.078319240970639
+ POINT 649 0.5151765885688294 7.052715105123196
+ POINT 650 2.577937928342901 7.096153011320037
+ POINT 651 2.070879238724189 8.043736171079065
+ POINT 652 3.092619808349037 6.17939491294298
+ POINT 653 3.626085590315936 7.144811843051406
+ POINT 654 11.48251188829295 35.02401731321491
+ POINT 655 10.64039816452791 34.61217235404054
+ POINT 656 10.17110341744214 33.75754315009095
+ POINT 657 14.6689103389384 22.67322577662324
+ POINT 658 14.05319959738808 21.7410710783964
+ POINT 659 15.14265836363845 21.78642172193218
+ POINT 660 13.01772434463638 21.71937825377518
+ POINT 661 12.50723794880099 22.61679607802062
+ POINT 662 18.09519862717962 19.95611146231709
+ POINT 663 19.1740485049595 20.44527447993038
+ POINT 664 19.11595980806804 21.52156423697686
+ POINT 665 19.97093453194041 21.0778563218991
+ POINT 666 16.26820018552503 25.3010316807035
+ POINT 667 17.20417075684983 25.40139698246272
+ POINT 668 16.34859018777993 26.20978847968642
+ POINT 669 18.10513372405381 25.23404605383805
+ POINT 670 18.34437302491627 24.32069547942606
+ POINT 671 19.34729683337535 25.06775162939346
+ POINT 672 15.85270720624401 27.09338928485154
+ POINT 673 16.78867777756881 27.19375458661076
+ POINT 674 15.291938186953 28.00781064238943
+ POINT 675 17.30476560650833 28.05418410949204
+ POINT 676 16.82978442287303 28.99839439914488
+ POINT 677 17.8667222480114 28.98778277049785
+ POINT 678 11.90568276733603 25.26641722612537
+ POINT 679 12.94362175678668 25.24019557197247
+ POINT 680 12.33385311172404 26.14255336301493
+ POINT 681 13.04745149254336 23.49596728408519
+ POINT 682 11.97523786865631 23.48488822901835
+ POINT 683 13.26157019599279 27.94640762414275
+ POINT 684 12.80192545764358 27.03544053207227
+ POINT 685 11.76398646819293 27.06166218622517
+ POINT 686 12.71478625639084 28.84364548586147
+ POINT 687 13.74429763827116 28.8355037547217
+ POINT 688 11.6871942678587 28.89644654626223
+ POINT 689 12.16992171013707 29.78554267684118
+ POINT 690 -2.645241319283594 23.65915467021994
+ POINT 691 -2.171873771957271 22.80696352912885
+ POINT 692 -1.671396963511793 23.78707299861202
+ POINT 693 -3.638150958880634 21.77295984420368
+ POINT 694 -4.169619601589666 22.67588242311962
+ POINT 695 -4.662052432741228 21.76979706658653
+ POINT 696 -2.588325360715464 21.77484192911209
+ POINT 697 -3.080758191867026 20.868756572579
+ POINT 698 -3.465390409600786 36.74515601536355
+ POINT 699 -4.39944145231441 36.56941420393424
+ POINT 700 -6.438967484949353 38.07148150975368
+ POINT 701 -5.801761824463367 37.27840372561251
+ POINT 702 -7.465007651281466 37.67899578164534
+ POINT 703 -7.145548671869747 38.67996608706892
+ POINT 704 1.645701561067675 36.58620616945915
+ POINT 705 2.097605922649433 37.6591520210071
+ POINT 706 1.630912530570906 38.7025770899849
+ POINT 707 0.6144262348982835 38.03413825350503
+ POINT 708 0.6145007137649187 36.62602437274583
+ POINT 709 1.03123486124828 35.70349538136442
+ POINT 710 3.50029065404008 34.71485867238029
+ POINT 711 4.030903182455804 33.71986523468118
+ POINT 712 2.549220124316628 34.70633644192217
+ POINT 713 5.09669004529192 31.88416738089897
+ POINT 714 4.59189732499495 30.94579415206534
+ POINT 715 4.543156123115856 32.76980086916907
+ POINT 716 3.548257480742272 32.79893134025448
+ POINT 717 3.041784030297622 31.8775360658333
+ POINT 718 2.529531089637571 32.8276004313454
+ POINT 719 6.639239149600429 29.07614732768379
+ POINT 720 5.633088140941368 29.09870269116678
+ POINT 721 -5.741117900464612 18.12804558230707
+ POINT 722 -4.710794713134181 18.134038227614
+ POINT 723 -6.25673761934882 19.03299943130374
+ POINT 724 9.094364861792316 3.185783391206454
+ POINT 725 8.120154810382525 3.065542696161892
+ POINT 726 8.486226833839986 4.246239372190631
+ POINT 727 9.543080762382589 2.423606448705923
+ POINT 728 4.181697363812684 8.041699532502184
+ POINT 729 4.69637924381882 7.124941434125128
+ POINT 730 4.720893497007972 8.958696437146365
+ POINT 731 3.650599843505089 8.978566846072644
+ POINT 732 5.772906862056196 8.955994301021946
+ POINT 733 5.241809341748601 9.892861614592405
+ POINT 734 6.300233792796178 8.026154643550692
+ POINT 735 6.622836074707541 2.05014634703189
+ POINT 736 5.718844002281117 1.755757914971069
+ POINT 737 6.192965581434661 0.9829766219365916
+ POINT 738 5.664301131002254 3.628351178339397
+ POINT 739 6.833866176424866 3.46371406014724
+ POINT 740 6.342451737007583 4.290635795338225
+ POINT 741 7.442004204377196 2.403258079163064
+ POINT 742 7.917003402974732 1.633697762640239
+ POINT 743 8.94127268867317 5.267193691042839
+ POINT 744 7.96706263726338 5.146952995998276
+ POINT 745 9.535178516778736 6.058055124895729
+ POINT 746 -13.10928490082518 34.07016086758892
+ POINT 747 -12.24388551710086 34.4147639590643
+ POINT 748 -12.49585729120814 35.61581090418589
+ POINT 749 -14.07322716081642 34.21070994911054
+ POINT 750 -14.36136978693606 10.72072627767335
+ POINT 751 -14.88062444253561 11.58118583581166
+ POINT 752 -14.26663781292847 12.50471088888409
+ POINT 753 -13.22961531762352 10.76268243082563
+ POINT 754 -13.2079352618582 12.53633569326509
+ POINT 755 -12.6910018313468 11.65677153517575
+ POINT 756 15.07065410043878 18.08797196826217
+ POINT 757 14.01205198450469 18.07820806245078
+ POINT 758 -6.796922393156049 14.4689317302459
+ POINT 759 -6.269727250030074 15.38636001982073
+ POINT 760 -5.758685342348371 14.47458053337772
+ POINT 761 -7.817995296922273 16.28529708460574
+ POINT 762 -8.353117303969567 15.36645138459855
+ POINT 763 -8.863148300054089 16.27103725251539
+ POINT 764 -7.842525768612235 14.46604360030338
+ POINT 765 -7.331483860930532 13.55426411386037
+ POINT 766 -6.782361565367118 16.29630604112463
+ POINT 767 -3.683558631825044 14.45370591664109
+ POINT 768 -4.714727414587884 14.47325408116177
+ POINT 769 -5.24192255771386 13.55582579158695
+ POINT 770 -4.720392683042421 12.64308054429161
+ POINT 771 -5.764350610802907 12.64440699650756
+ POINT 772 -3.667934906398679 12.6518302220685
+ POINT 773 -8.395897107966746 11.71956985286866
+ POINT 774 -7.863355897507648 12.63144425890769
+ POINT 775 -6.817752522051462 12.63433238885021
+ POINT 776 -6.296222647380024 11.72158714155488
+ POINT 777 -6.821723009903972 10.80083678493275
+ POINT 778 -7.882436115344974 10.77604410938616
+ POINT 779 4.716308849678887 10.81361234423387
+ POINT 780 5.76832221472711 10.81091020810945
+ POINT 781 4.190363830521503 11.74041081086773
+ POINT 782 3.663850957542993 10.82236221735069
+ POINT 783 1.564857731194123 14.49716655277795
+ POINT 784 1.04410790663793 13.59158434318418
+ POINT 785 0.5207500976712671 14.50289465153176
+ POINT 786 1.565386117813491 12.67566398686721
+ POINT 787 0.5212784842906355 12.68139208562102
+ POINT 788 2.613060739273198 12.66750846420746
+ POINT 789 2.090231316925903 11.7573162066443
+ POINT 790 2.247276054134772e-07 15.40847690902769
+ POINT 791 -0.5207495998285867 14.50289469943392
+ POINT 792 -11.21209063177709 28.0004787204091
+ POINT 793 -11.76398481964448 27.06166045714313
+ POINT 794 -13.26156901870596 27.94640451622695
+ POINT 795 -12.71478480762005 28.84364148415803
+ POINT 796 -13.74429684069641 28.83549908117502
+ POINT 797 -12.16991936167931 29.78553808233906
+ POINT 798 -11.59833041795275 30.70821000663137
+ POINT 799 -10.66722518583636 28.94237531859013
+ POINT 800 -10.16307824785739 29.92216165396643
+ POINT 801 -9.687977339945633 29.02619685698455
+ POINT 802 -11.68719153968886 28.89644351739098
+ POINT 803 -10.66517999954061 30.87364895036685
+ POINT 804 -9.685932153649887 30.95747048876127
+ POINT 805 -16.82978847880473 28.99838541372564
+ POINT 806 -17.30476813190573 28.05417686774796
+ POINT 807 -17.86672715494531 28.98777290369169
+ POINT 808 -12.80192396054655 27.03543843675622
+ POINT 809 -12.33385179456144 26.1425519746894
+ POINT 810 -13.83143599362291 27.02729603377322
+ POINT 811 -18.71184747782762 23.47031202987638
+ POINT 812 -19.74963048996175 23.15469430712368
+ POINT 813 -19.34729785953139 25.06774765708812
+ POINT 814 -18.34437302460557 24.32069263403202
+ POINT 815 -18.10513422474459 25.23404206079518
+ POINT 816 -17.49125461230818 23.64225669394841
+ POINT 817 7.817995757395382 16.28529666142913
+ POINT 818 7.292392975317489 17.20089161300046
+ POINT 819 7.80801268720816 18.10584554161538
+ POINT 820 6.772378944905659 18.11685450089467
+ POINT 821 8.863148731491028 16.27103681015437
+ POINT 822 1.015466424403581 21.25999439681868
+ POINT 823 1.614481163449325 21.90276020009269
+ POINT 824 1.015466375681423 20.43531928751171
+ POINT 825 1.63269187639632 19.84045612674685
+ POINT 826 2.606070264520712 19.96562581254599
+ POINT 827 4.710795072138549 18.13403803354307
+ POINT 828 4.203342540186773 19.05240159983545
+ POINT 829 5.741118267854977 18.12804536094104
+ POINT 830 6.25673797974565 19.03299928955596
+ POINT 831 8.29058057434478 22.63591511879024
+ POINT 832 7.770146987914942 21.73699352712036
+ POINT 833 7.761488015053925 23.54966519059946
+ POINT 834 8.799876058762283 23.53547258507314
+ POINT 835 7.882436851035273 10.77604170622064
+ POINT 836 6.821724104311079 10.80083523684094
+ POINT 837 8.395897688086761 11.71956812605931
+ POINT 838 6.296223612241364 11.72158596648241
+ POINT 839 7.863356649653912 12.63144299189585
+ POINT 840 6.817753360687178 12.63433121076197
+ POINT 841 5.764351471103209 12.64440618203048
+ POINT 842 15.41658924936081 7.259168960497591
+ POINT 843 14.24561038678537 7.342548392480751
+ POINT 844 14.89244912969332 8.12523258985544
+ POINT 845 12.07551877984602 9.034284548463294
+ POINT 846 13.2074318313694 9.050012371808604
+ POINT 847 12.60943811820144 8.176454016117848
+ POINT 848 12.13489966336506 10.8019324567901
+ POINT 849 11.57772973957951 9.91443462532451
+ POINT 850 10.97973602641154 9.040876269633753
+ POINT 851 11.96631097541835 7.35863242591423
+ POINT 852 11.55167271280977 6.252370796998449
+ POINT 853 11.06288680406948 7.054464563856754
+ POINT 854 12.169671414375 5.235186923999835
+ POINT 855 12.88604184172865 5.817407070591241
+ POINT 856 12.61406020569684 4.479514007912766
+ POINT 857 13.09822402694172 7.374360249259541
+ POINT 858 13.60248324400228 6.524726802277135
+ POINT 859 14.05124229732068 5.767551513356759
+ POINT 860 17.07578521456617 11.60014693753975
+ POINT 861 17.71057756929273 10.70831332876806
+ POINT 862 16.58566833102513 10.66595132007714
+ POINT 863 16.40667132100974 12.44593062352206
+ POINT 864 15.79268502556732 13.36945619674464
+ POINT 865 15.36154529735113 12.46837529147962
+ POINT 866 17.18577703109811 14.27791621091107
+ POINT 867 17.8991747362448 13.49160449707131
+ POINT 868 17.50692494278236 12.50122784280477
+ POINT 869 18.59468174703889 12.63536765117651
+ POINT 870 -5.772905779136106 8.955995570716897
+ POINT 871 -6.300233112688748 8.02615691843684
+ POINT 872 -4.720892514410153 8.958697172413938
+ POINT 873 -2.562097267089574 3.227805457117126
+ POINT 874 -2.034944989672938 4.189368100531676
+ POINT 875 -0.5151786281004135 7.052714909961791
+ POINT 876 -4.495306666907339e-07 8.025902205568261
+ POINT 877 -0.5151778044490922 8.96843130178743
+ POINT 878 -1.555799685599574 8.971257959564014
+ POINT 879 -1.040621823848756 9.913787250944587
+ POINT 880 0.5151774122201507 8.968431496948837
+ POINT 881 2.806199940197374e-07 11.76547179125803
+ POINT 882 -0.5212779305555666 12.681392147575
+ POINT 883 -2.090230658535098 11.75731647898901
+ POINT 884 -1.561899919612723 10.84104288096659
+ POINT 885 -0.5212780384622415 10.83821622319001
+ POINT 886 0.5212783763839607 10.83821616123602
+ POINT 887 -8.95781830977193 7.046847428450418
+ POINT 888 -9.535179298628961 6.058061838123082
+ POINT 889 -7.885292789837587 7.099198168742546
+ POINT 890 -6.342458718450149 4.290639218573956
+ POINT 891 -5.664307592746104 3.628355267241409
+ POINT 892 -6.833874189380248 3.463718914397889
+ POINT 893 -4.115213411606943 4.361615670969387
+ POINT 894 -4.656830149629152 5.341664562613124
+ POINT 895 -3.599151439420091 5.248004662165036
+ POINT 896 -7.4420232035393 2.403268237260354
+ POINT 897 -7.917037371317474 1.633712477540171
+ POINT 898 -8.120174329243344 3.065552188592901
+ POINT 899 0.5061739145443324 5.095155188591381
+ POINT 900 -2.929429205988932e-06 4.110781499104045
+ POINT 901 -0.5061784339744557 5.09515412002939
+ POINT 902 1.528410782732792 5.120759324438823
+ POINT 903 0.5061724875148098 3.087534852556564
+ POINT 904 1.539499732754256 3.149220199566127
+ POINT 905 11.64987528159459 32.70981082487776
+ POINT 906 12.51527678005581 32.36521402236142
+ POINT 907 12.11081476394826 33.49693513307348
+ POINT 908 12.62592549818568 30.65541566530306
+ POINT 909 11.59833350965353 30.70821672570382
+ POINT 910 14.07320338353421 34.21073365839178
+ POINT 911 13.10926757404889 34.07018328539174
+ POINT 912 13.91737880453094 33.26989288698078
+ POINT 913 12.24386607558766 34.41478008790807
+ POINT 914 12.49582536742833 35.61583656588377
+ POINT 915 14.16603325158087 23.49720392336359
+ POINT 916 15.25549201783124 23.54255456689937
+ POINT 917 15.93819784253432 24.42958644855976
+ POINT 918 15.08261727346442 25.23797794578346
+ POINT 919 16.44107492989185 23.60560830181941
+ POINT 920 13.63403317143619 24.36529607436132
+ POINT 921 14.0622035158242 25.24143221125088
+ POINT 922 16.13661120818988 21.79829183825163
+ POINT 923 15.52090046663956 20.86613714002479
+ POINT 924 16.09556213763715 19.95056877865242
+ POINT 925 17.17857677781561 19.94984061055883
+ POINT 926 16.75928560426177 19.02240213286701
+ POINT 927 17.431475160555 20.8842781081025
+ POINT 928 18.71184721732612 23.47031396269385
+ POINT 929 18.87127587281586 22.47222833205418
+ POINT 930 19.74963016806416 23.15469636218577
+ POINT 931 17.49125494700478 23.6422586667476
+ POINT 932 18.10341307466681 21.84121305493807
+ POINT 933 16.8085491223017 22.75522678508721
+ POINT 934 17.18679122530281 21.83494220317982
+ POINT 935 14.51994297887854 32.4240927325463
+ POINT 936 13.57878043675709 32.30653817612266
+ POINT 937 13.11784095440342 31.51941386792693
+ POINT 938 13.68942915488696 30.59673981906429
+ POINT 939 11.44016434034826 24.38232842674731
+ POINT 940 10.89995079660589 23.50315722068274
+ POINT 941 10.83039569528561 25.28468621778976
+ POINT 942 9.846922943175489 23.51115996583782
+ POINT 943 9.317830383884633 24.42491003764703
+ POINT 944 9.800494196258793 25.32311557173736
+ POINT 945 8.753447311845587 25.34742819097269
+ POINT 946 10.26601262324656 26.20720437111542
+ POINT 947 -9.188516399988456 28.09611515482773
+ POINT 948 -8.684369462009494 29.07590149020404
+ POINT 949 -8.710509152607116 27.19572666107374
+ POINT 950 -4.967007708624748 35.55401033082136
+ POINT 951 -5.401876338967484 36.44269225860205
+ POINT 952 -6.369328080773704 36.26299985249962
+ POINT 953 -8.644059727746285 34.74088988879614
+ POINT 954 -9.113357089394702 35.59551543427815
+ POINT 955 -7.680217086741342 34.8114162753276
+ POINT 956 -8.132953504798678 33.74408230964664
+ POINT 957 -9.038370913869775 36.59719108141323
+ POINT 958 -7.080382952483385 35.61775611998313
+ POINT 959 -6.569276729535778 34.62094854083364
+ POINT 960 -7.480268437979268 36.45346758699358
+ POINT 961 -8.176062522991147 37.03375204912885
+ POINT 962 -9.033664824607252 37.8435674405669
+ POINT 963 -3.013509432387965 35.67217382596145
+ POINT 964 -2.514327020017076 36.73659756517147
+ POINT 965 -1.031206014429366 35.70346448021024
+ POINT 966 -1.53422388422784 34.73877849312591
+ POINT 967 -0.5029838558529507 34.77862759756677
+ POINT 968 2.021011022720923 33.78146904341516
+ POINT 969 1.514537572276274 32.86007376899397
+ POINT 970 1.534226606955332 34.73880977957074
+ POINT 971 0.5030257596525753 34.77862798285742
+ POINT 972 7.889854101383875e-06 33.81394199577308
+ POINT 973 1.536896992374578 27.28673102869031
+ POINT 974 2.075897760470205 26.39023244060897
+ POINT 975 2.583954155543661 27.30113813950133
+ POINT 976 3.556816059688512 30.9375844125214
+ POINT 977 4.088202963281139 30.03451158984436
+ POINT 978 2.538089668583811 30.96625350361232
+ POINT 979 0.5030096425456565 32.87005276973701
+ POINT 980 -0.5029999729598695 32.87005238444636
+ POINT 981 1.011529709462303 31.91618415766725
+ POINT 982 11.21209270722683 28.00048045890696
+ POINT 983 10.74402036130729 27.10759328984962
+ POINT 984 9.714118862280475 27.14602264379722
+ POINT 985 10.66722816097306 28.94237764988668
+ POINT 986 9.687978884244082 29.02619593691772
+ POINT 987 10.16308044487594 29.92216202427299
+ POINT 988 7.660247523983134 29.07171418485961
+ POINT 989 8.684369985103768 29.07589903930046
+ POINT 990 7.163900427677865 28.15025091012108
+ POINT 991 9.188517701200887 28.09611466491416
+ POINT 992 8.710509963140158 27.19572574617996
+ POINT 993 -4.203342243390184 19.05240175014947
+ POINT 994 -3.688659985491623 18.14224967870969
+ POINT 995 -3.655895652889911 19.96374384445787
+ POINT 996 -4.678030380532469 19.95553239336218
+ POINT 997 -2.207829164486162 18.93544342244381
+ POINT 998 -2.606070054724741 19.96562592936628
+ POINT 999 -5.170740868433548 20.8574752560983
+ POINT 1000 -5.702209511142579 21.76039783501424
+ POINT 1001 -5.71818745893382 19.94613316178989
+ POINT 1002 -6.731544945060238 21.74909188831638
+ POINT 1003 -6.222856509367919 22.66141369880462
+ POINT 1004 -7.249499434945713 20.83597766954888
+ POINT 1005 -7.770146433171051 21.73699353333926
+ POINT 1006 -6.749448107249898 19.93494229403985
+ POINT 1007 5.802524977371679 7.067405929156367
+ POINT 1008 6.85076775285229 7.071731449131153
+ POINT 1009 7.387583714762178 6.140445024793657
+ POINT 1010 7.885292530186677 7.099193739187982
+ POINT 1011 5.762972814506381 5.284127824133605
+ POINT 1012 5.246913203874932 6.170518239705588
+ POINT 1013 4.656827080953521 5.341663329102365
+ POINT 1014 6.932537859928994 5.119490705941448
+ POINT 1015 5.123453405055713 2.630543796725044
+ POINT 1016 4.686581836917295 1.584872268547702
+ POINT 1017 3.780741176469697 1.381516026850165
+ POINT 1018 4.380854250247183 0.4856945617800922
+ POINT 1019 3.07892064305541 2.323657990883948
+ POINT 1020 4.632038965638431 3.457465531916029
+ POINT 1021 8.957817564431407 7.046841938024162
+ POINT 1022 8.421001602521519 7.978128362361659
+ POINT 1023 8.954387418505732 8.883174489212605
+ POINT 1024 10.48552585172216 8.043251376985188
+ POINT 1025 10.07088758911358 6.936989748069407
+ POINT 1026 9.98773681145564 8.923401453846404
+ POINT 1027 14.14927330494213 14.3319204116199
+ POINT 1028 13.09057086026495 14.36354542779163
+ POINT 1029 13.68885655723154 13.42352588087392
+ POINT 1030 14.5608425845304 15.25822614311025
+ POINT 1031 15.01786739893976 16.19866298162331
+ POINT 1032 14.0080124223849 16.21237679705068
+ POINT 1033 15.15912828149698 14.31820659619254
+ POINT 1034 16.20425430515559 14.29576192823498
+ POINT 1035 16.55222028702778 15.22666661035897
+ POINT 1036 15.43600191484122 17.16213210717993
+ POINT 1037 16.04161877848574 18.09729043987835
+ POINT 1038 17.12463341866421 18.09656227178477
+ POINT 1039 17.31694506141086 17.15083111331099
+ POINT 1040 15.98883207698672 16.2079814532395
+ POINT 1041 16.97035480292924 16.19013573591558
+ POINT 1042 -9.329106518265187 20.81496648779522
+ POINT 1043 -9.8677300853677 19.90262169444576
+ POINT 1044 -16.0416184259235 18.09729104090766
+ POINT 1045 -16.75928532981814 19.02240250148187
+ POINT 1046 -10.94364637205534 16.23848947462534
+ POINT 1047 -9.899040221872481 16.25867329662998
+ POINT 1048 -9.363918214825187 17.17751899663717
+ POINT 1049 -9.882579096952568 18.0821723843123
+ POINT 1050 1.561900414029895 10.8410427689158
+ POINT 1051 2.609575035489602 10.83288724625605
+ POINT 1052 1.04062209494766 9.913787200847779
+ POINT 1053 3.135520054646986 9.906088779622188
+ POINT 1054 2.596323921451698 8.989091874978008
+ POINT 1055 1.555799449866085 8.97125810462861
+ POINT 1056 5.241923253953617 13.55582514043971
+ POINT 1057 4.714728002752798 14.47325361022883
+ POINT 1058 3.143090414259499 13.57017754949987
+ POINT 1059 3.667935613371911 12.65182976927697
+ POINT 1060 4.720393505507803 12.64307989616015
+ POINT 1061 2.105326509092408 15.38069455968688
+ POINT 1062 2.670185462451287 16.23272638623747
+ POINT 1063 1.606358875586338 16.26050868767612
+ POINT 1064 2.628684318059071 14.4693842513393
+ POINT 1065 3.683559192157784 14.45370555640881
+ POINT 1066 4.200321906552371 15.37246031206826
+ POINT 1067 3.682632968769743 16.28839908786602
+ POINT 1068 -1.606358493039556 16.26050877577584
+ POINT 1069 -2.670185073501789 16.23272654426651
+ POINT 1070 -2.105326053234482 15.38069472542052
+ POINT 1071 -3.183664984271242 17.16821337539803
+ POINT 1072 -2.676212514527244 18.08657689793349
+ POINT 1073 -1.70283416326578 17.96140711913215
+ POINT 1074 0.6172255840106643 18.01551021964674
+ POINT 1075 -0.6172253233165815 18.01551020223283
+ POINT 1076 -1.085608673357664 17.16664367772251
+ POINT 1077 -0.5207496530903567 16.31461185887652
+ POINT 1078 0.5207500444094971 16.31461181097436
+ POINT 1079 1.085608997768376 17.16664363752495
+ POINT 1080 -16.26819960626571 25.30102864423684
+ POINT 1081 -15.0826163587443 25.23797552751852
+ POINT 1082 -15.93819691156472 24.42958418138574
+ POINT 1083 -15.85270768406584 27.0933844772987
+ POINT 1084 -14.85185005261381 27.02384105180678
+ POINT 1085 -15.29193868323435 28.00780553873586
+ POINT 1086 -14.3922049944544 26.11287497233606
+ POINT 1087 -14.06220229975341 25.24143050948495
+ POINT 1088 -15.7999041554007 28.93948960494379
+ POINT 1089 -16.33689631951905 29.86052605444166
+ POINT 1090 -14.74418021093874 30.63117829061417
+ POINT 1091 -15.76075609457718 30.75508671479437
+ POINT 1092 -16.81445339648837 30.82931935765637
+ POINT 1093 -14.25226231286276 29.76718314738296
+ POINT 1094 -14.79904652394867 28.86994617945188
+ POINT 1095 8.846687614423065 18.09453615000725
+ POINT 1096 8.326673584011235 19.01049903790145
+ POINT 1097 8.8267249782098 19.91153448810875
+ POINT 1098 9.867730626409395 19.90262173424139
+ POINT 1099 7.788050050994897 19.92284387971688
+ POINT 1100 4.650398721048944 25.41533314105567
+ POINT 1101 4.13553988625797 26.36549811509552
+ POINT 1102 3.637813758430262 25.45447457738014
+ POINT 1103 3.148718616325014 24.57178682998195
+ POINT 1104 2.633859781534041 25.52195180402179
+ POINT 1105 1.586802618364957 25.50754469321078
+ POINT 1106 3.649195445762174 23.59167733893057
+ POINT 1107 4.169619811571008 22.67588222314829
+ POINT 1108 4.673096959030069 23.58851448755802
+ POINT 1109 2.58832552483298 21.77484182477213
+ POINT 1110 2.171873936919459 22.8069634498414
+ POINT 1111 2.645241468865954 23.65915456557222
+ POINT 1112 1.671397107482298 23.78707294089278
+ POINT 1113 4.678030658177207 19.95553223402469
+ POINT 1114 3.655895895669011 19.96374368425781
+ POINT 1115 3.638151155981279 21.77295969648394
+ POINT 1116 4.662052669249173 21.76979684511139
+ POINT 1117 3.080758382511145 20.86875644673523
+ POINT 1118 6.731545438466698 21.74909183518711
+ POINT 1119 7.249499895745219 20.83597763799092
+ POINT 1120 6.749448501546653 19.93494218778363
+ POINT 1121 5.718187824495971 19.94613304783
+ POINT 1122 5.702209835567938 21.7603976589167
+ POINT 1123 6.222856927737663 22.66141354804614
+ POINT 1124 5.17074117997821 20.85747513225235
+ POINT 1125 14.88062362045075 11.58118328295605
+ POINT 1126 14.26663732500833 12.50470885617862
+ POINT 1127 13.20793488033116 12.53633387235034
+ POINT 1128 12.69100124091205 11.65676942854059
+ POINT 1129 13.22961407056096 10.76267987590455
+ POINT 1130 -4.181696757246904 8.041699829461468
+ POINT 1131 -3.650599174564211 8.978566896409593
+ POINT 1132 -3.626085797421631 7.144811553632946
+ POINT 1133 -4.696379137267573 7.124941829637294
+ POINT 1134 -2.5963235612001 8.989091731089145
+ POINT 1135 -2.070879541800435 8.043735781931989
+ POINT 1136 -3.574367948496355 3.363807242843679
+ POINT 1137 -3.078930514188047 2.323656929439507
+ POINT 1138 -5.123462129635516 2.630546839115701
+ POINT 1139 -4.686602709596436 1.584876903295025
+ POINT 1140 -4.632046658705416 3.457467143291768
+ POINT 1141 -3.780758206397734 1.381518432692542
+ POINT 1142 -4.380882064820396 0.4857008521467929
+ POINT 1143 -1.537414964648728 7.078318112167635
+ POINT 1144 -1.022237926549232 6.10513101172257
+ POINT 1145 -2.551004482247714 5.199344992224856
+ POINT 1146 -3.092621220269923 6.179393883868594
+ POINT 1147 -2.577938840249254 7.096151883692768
+ POINT 1148 -1.52841477052277 5.120757322235234
+ POINT 1149 -1.565385542453618 12.67566417103727
+ POINT 1150 -1.044107338782977 13.59158446540026
+ POINT 1151 -1.564857211726638 14.49716672289619
+ POINT 1152 -2.628683792188871 14.46938449138686
+ POINT 1153 -2.613060066762507 12.66750879681426
+ POINT 1154 -3.143089790317201 13.57017791411676
+ POINT 1155 -8.941278766903849 5.267200605438743
+ POINT 1156 -8.486236698750734 4.246245735265347
+ POINT 1157 -7.96706738323741 5.146957735903831
+ POINT 1158 -9.094385712909785 3.185795058127813
+ POINT 1159 -9.899165223866994 3.622750914152373
+ POINT 1160 -9.543111594457244 2.423623277029117
+ POINT 1161 -10.05434861414229 5.157349837484599
+ POINT 1162 -10.67235893022354 4.140170700800017
+ POINT 1163 -11.12311705597741 3.378439779022869
+ POINT 1164 -7.38758492759221 6.140449119392674
+ POINT 1165 -6.932542859439094 5.119494249219278
+ POINT 1166 -5.762976262804949 5.284130602062798
+ POINT 1167 -6.850768266039271 7.071734682057993
+ POINT 1168 -5.80252525044337 7.067407869086968
+ POINT 1169 -5.246914290618097 6.170519593258447
+ POINT 1170 10.71672358375953 32.87524392735796
+ POINT 1171 9.642413735714634 32.79125514185909
+ POINT 1172 11.12118559986708 31.74352281664589
+ POINT 1173 9.15793076534775 31.87228668931375
+ POINT 1174 9.685932535089496 30.95746811521505
+ POINT 1175 10.66518181181848 30.87364982818402
+ POINT 1176 15.19791671718209 31.58464847548497
+ POINT 1177 15.55917637400988 32.56630552600364
+ POINT 1178 15.79990214283926 28.93949698650302
+ POINT 1179 16.3368917696794 29.86053599387202
+ POINT 1180 15.76074915645257 30.75509875525596
+ POINT 1181 16.81444462265249 30.82933310971594
+ POINT 1182 14.74417705037517 30.63118830145916
+ POINT 1183 14.25226159415743 29.76719009883528
+ POINT 1184 14.79904553375937 28.86995223711657
+ POINT 1185 -7.660247595099477 29.07171642334552
+ POINT 1186 -8.159708535056653 30.00179812550234
+ POINT 1187 -6.639239694273195 29.0761486788626
+ POINT 1188 -7.163900621226036 28.1502520435643
+ POINT 1189 -5.497622619491922 34.55901436086761
+ POINT 1190 -4.49518773283885 34.6857363061998
+ POINT 1191 -5.579336478117359 32.80510559052856
+ POINT 1192 -6.09745675374988 33.75267451621208
+ POINT 1193 -6.650990588161214 32.86703977049458
+ POINT 1194 -5.700404689242956 23.58012241603744
+ POINT 1195 -6.729740123160614 23.56881646933958
+ POINT 1196 -7.239035482595526 24.46837386823964
+ POINT 1197 -7.761487302720488 23.54966515100682
+ POINT 1198 -7.691207402098477 27.22632931678663
+ POINT 1199 -6.670199501272196 27.23076157230372
+ POINT 1200 -6.172815514826199 26.31659798520196
+ POINT 1201 -5.645508733953759 27.24052071197963
+ POINT 1202 -8.216808032653276 26.27623618981316
+ POINT 1203 -6.702397292590144 25.39718201604923
+ POINT 1204 -5.677706525271708 25.40694115572514
+ POINT 1205 -7.734144472150017 25.37803069771646
+ POINT 1206 -8.753446222658658 25.34742804200357
+ POINT 1207 -1.645698721915378 36.58607539347716
+ POINT 1208 -2.0975796991282 37.65905758287926
+ POINT 1209 -1.630935113652335 38.70247408973233
+ POINT 1210 -0.6145331724071246 38.03403837867723
+ POINT 1211 -0.6144586935404894 36.62592449791802
+ POINT 1212 8.00627890595873e-06 37.50863528601275
+ POINT 1213 0.5990148214488246 23.75062706100676
+ POINT 1214 -0.5990146744118122 23.75062707718625
+ POINT 1215 -1.072382221738135 24.60281821827733
+ POINT 1216 1.072382353395319 24.60281817673758
+ POINT 1217 0.5144203323314835 25.47109881332476
+ POINT 1218 3.58444379142495 29.11804267687441
+ POINT 1219 3.080359636161616 28.20371011551553
+ POINT 1220 2.549037542711368 29.11196928894155
+ POINT 1221 3.619360404257244 27.30721152743419
+ POINT 1222 5.129328969085179 28.18223377819683
+ POINT 1223 4.619525056731388 29.12625241641835
+ POINT 1224 4.631945366875925 27.26807009110972
+ POINT 1225 5.645508451085906 27.24052036585816
+ POINT 1226 2.034499539717892 30.03893177661523
+ POINT 1227 1.530415384454558 29.12459921525634
+ POINT 1228 1.519467510327002 30.97888342992712
+ POINT 1229 0.5079395805963843 30.98886243067015
+ POINT 1230 3.57436036144565 3.363808001711532
+ POINT 1231 4.115208087392189 4.361615383325885
+ POINT 1232 2.034939451144496 4.189370210393712
+ POINT 1233 2.551000814787705 5.199346967166499
+ POINT 1234 2.562089764809169 3.227807842293803
+ POINT 1235 3.599148476760741 5.248005798897869
+ POINT 1236 -8.808534389004958 21.72280081085314
+ POINT 1237 -8.290579899119484 22.63591502962064
+ POINT 1238 -9.849539984213617 21.7138879840766
+ POINT 1239 -8.799875258554394 23.5354724285207
+ POINT 1240 -14.05319871993245 21.74107047129854
+ POINT 1241 -13.49147167328674 20.83257382131933
+ POINT 1242 -13.01772343641998 21.71937768246372
+ POINT 1243 -15.07065374632022 18.08797242978403
+ POINT 1244 -15.4360015171055 17.16213287055806
+ POINT 1245 -14.0080120928104 16.21237758454029
+ POINT 1246 -15.01786712752577 16.19866394969555
+ POINT 1247 -17.17857644573234 19.94984075163958
+ POINT 1248 -17.43147479908956 20.8842778513917
+ POINT 1249 -16.09556177105241 19.95056885029135
+ POINT 1250 -15.52089992188291 20.86613685530161
+ POINT 1251 -15.10160880596872 19.93869860514389
+ POINT 1252 -17.18679097624842 21.83494159512092
+ POINT 1253 -18.18552489707417 26.14279763280435
+ POINT 1254 -17.20417083141572 25.40139287011322
+ POINT 1255 -16.3485902785953 26.20978421624601
+ POINT 1256 -16.78867890921584 27.19374870317508
+ POINT 1257 -17.80065072643519 27.17057660669527
+ POINT 1258 -18.72983447894121 27.01379366339507
+ POINT 1259 11.95573882194991 19.89979512998055
+ POINT 1260 10.91279663445388 19.89738135384383
+ POINT 1261 10.41041451927062 18.99394926589576
+ POINT 1262 12.50727362976512 18.99615568741801
+ POINT 1263 5.677706720839749 25.40694066827868
+ POINT 1264 5.179980593012042 24.49591713056331
+ POINT 1265 5.700404958820875 23.58012201478103
+ POINT 1266 6.729740561719636 23.56881619105143
+ POINT 1267 7.239036046137137 24.46837365733434
+ POINT 1268 7.691207579082008 27.22632790550661
+ POINT 1269 6.670199204699301 27.23076104833079
+ POINT 1270 6.172815602490047 26.31659736124369
+ POINT 1271 8.216808740161595 26.27623588438967
+ POINT 1272 6.702397474453146 25.39718135075132
+ POINT 1273 7.734144927787435 25.37803035029934
+ POINT 1274 14.36136880606171 10.72072377865549
+ POINT 1275 15.45627677840451 10.68439021395649
+ POINT 1276 15.49028452683864 8.941107024951828
+ POINT 1277 14.33918656687014 9.008056274559546
+ POINT 1278 13.80526722851472 9.865886806904992
+ POINT 1279 16.06641351663609 9.805491815776586
+ POINT 1280 16.64213914845493 8.907696187396814
+ POINT 1281 -7.631707103564363 30.91661699613311
+ POINT 1282 -8.655828970474381 30.92080206299163
+ POINT 1283 -7.130348925755392 31.87754588921673
+ POINT 1284 -6.634228490337664 30.95854195172743
+ POINT 1285 -9.157930722157598 31.87228935939205
+ POINT 1286 -8.612311842392856 32.75458842836879
+ POINT 1287 -7.648469201387913 32.82511481490026
+ POINT 1288 -2.549229273895434 34.70629607419768
+ POINT 1289 -2.021007115319019 33.78145919155421
+ POINT 1290 -3.500292663479144 34.71485452438976
+ POINT 1291 -4.030907574346319 33.71985855443602
+ POINT 1292 -5.179980371060386 24.49591750747982
+ POINT 1293 -4.650398593296442 25.41533347663255
+ POINT 1294 -3.649195283407097 23.591677514562
+ POINT 1295 -3.148718474961619 24.57178698404517
+ POINT 1296 -4.673096757267691 23.58851473694486
+ POINT 1297 0.5144203594414323 27.2905527635694
+ POINT 1298 1.022476754514889 28.20145846246176
+ POINT 1299 0.507938751521413 29.12842095013544
+ POINT 1300 -9.846921989817281 23.51115965477413
+ POINT 1301 -9.317829393418286 24.42490977616031
+ POINT 1302 -9.800492953921545 25.323115268257
+ POINT 1303 -10.83039438917027 25.28468549874502
+ POINT 1304 -10.92764508160684 18.07693196478106
+ POINT 1305 -10.41041404191582 18.99394930834161
+ POINT 1306 -10.91279607002197 19.89738127491452
+ POINT 1307 -11.95573820817218 19.89979496064743
+ POINT 1308 -11.41305425162406 20.80846734675159
+ POINT 1309 -15.14265757944868 21.78642099994649
+ POINT 1310 -14.66890934258192 22.67322486109087
+ POINT 1311 -16.13661054453237 21.79829124509394
+ POINT 1312 -15.25549093307073 23.54255322720311
+ POINT 1313 -14.1660320735545 23.49720269855517
+ POINT 1314 -16.80854863381419 22.75522573976579
+ POINT 1315 -16.44107418059214 23.60560634392143
+ POINT 1316 10.44287685491821 15.3320070852495
+ POINT 1317 10.99244953168854 14.41410579688861
+ POINT 1318 12.05881853851436 14.38348705047854
+ POINT 1319 12.51923528622494 15.29188158122452
+ POINT 1320 9.882579552317679 18.08217219529029
+ POINT 1321 9.363918655514606 17.17751869900422
+ POINT 1322 10.92764556036217 18.07693181489272
+ POINT 1323 9.899040669385645 16.25867285543741
+ POINT 1324 10.94364677894179 16.23848897409934
+ POINT 1325 -0.5144201764050657 27.29055277175395
+ POINT 1326 6.145462372320054e-08 26.3758253379825
+ POINT 1327 -0.5144202035150144 25.4710988215093
+ POINT 1328 -1.586802492614995 25.50754474293507
+ POINT 1329 4.053181679175566e-07 30.05156162643644
+ POINT 1330 -0.5079373955465308 30.98886235417658
+ POINT 1331 -0.5079382246215022 29.12842087364186
+ POINT 1332 -12.94362054595454 25.24019426221156
+ POINT 1333 -13.63403191024444 24.36529481739402
+ POINT 1334 -13.04745031975563 23.49596645128178
+ POINT 1335 -11.90568140505247 25.26641628259847
+ POINT 1336 -11.44016314056337 24.38232778626718
+ POINT 1337 -10.38199561361241 22.61371945416543
+ POINT 1338 -10.90256774287263 21.70588513110751
+ POINT 1339 -10.8999497484763 23.50315680180504
+ POINT 1340 -11.94550988102284 21.70829881684042
+ POINT 1341 -11.9752367643585 23.48488758565849
+ POINT 1342 -12.50723692766855 22.61679546681964
+ POINT 1343 -11.95486088381842 18.07035362542616
+ POINT 1344 -11.42702593885517 17.15857670139686
+ POINT 1345 -11.97086217426693 16.23191113527045
+ POINT 1346 -13.00261454459266 16.21196963584406
+ POINT 1347 -13.45963928928449 17.15240631073819
+ POINT 1348 -14.04300661306449 19.92893456636063
+ POINT 1349 -14.61766846223399 19.01336656135037
+ POINT 1350 -14.012051553416 18.07820839100076
+ POINT 1351 -13.00753132955202 19.9072417775258
+ POINT 1352 -12.50727314794993 18.99615570568874
+ POINT 1353 -13.00665400519826 18.07780044230454
+ POINT 1354 11.42702639250091 17.15857636716348
+ POINT 1355 11.95486135945386 18.07035343776895
+ POINT 1356 13.45963971419343 17.15240581280172
+ POINT 1357 13.00665446190387 18.07780023968877
+ POINT 1358 11.97086257803348 16.23191059697557
+ POINT 1359 13.00261489978407 16.21196897428866
+ POINT 1360 -4.63194529517035 27.26807044242916
+ POINT 1361 -5.129329281616346 28.18223402953092
+ POINT 1362 -2.075897664001495 26.39023252420856
+ POINT 1363 -2.633859682224616 25.52195192097659
+ POINT 1364 -3.619360348222028 27.30721173111527
+ POINT 1365 -4.135539800559439 26.36549841356398
+ POINT 1366 -3.637813646348119 25.45447476531866
+ POINT 1367 -1.530414898263689 29.12459912906478
+ POINT 1368 -1.022476552060444 28.20145845276378
+ POINT 1369 -2.583954039656873 27.30113820521839
+ POINT 1370 -3.080359534267785 28.20371023408358
+ POINT 1371 -1.536896850047253 27.28673102717688
+ POINT 1372 -4.543158675405131 32.76980075139725
+ POINT 1373 -5.096692509816465 31.88416600567974
+ POINT 1374 -3.548263606045425 32.79891896958721
+ POINT 1375 -2.549037169284093 29.11196922998421
+ POINT 1376 -2.034498841845151 30.03893165086228
+ POINT 1377 -3.584443477849247 29.11804275588108
+ POINT 1378 -1.519465434862823 30.97888306068132
+ POINT 1379 -1.011526259584607 31.91618386491503
+ POINT 1380 -3.041784503002568 31.8775328689841
+ POINT 1381 -2.529533401943756 32.82759067202288
+ POINT 1382 -2.538087705883227 30.96625316160074
+ POINT 1383 -3.556817909984896 30.93758145916507
+ POINT 1384 -1.514528012276162 32.8600730909511
+ POINT 1385 -4.088203640533337 30.03451082052263
+ POINT 1386 -4.591900437652678 30.94579052790599
+ POINT 1387 -6.129436418173878 30.02016647395368
+ POINT 1388 -5.628078240364906 30.9810953670373
+ POINT 1389 -4.619526005517029 29.126251824622
+ POINT 1390 -5.633089444300436 29.09870209417247
END POINTS LIST
@@ -323,145 +1403,669 @@ END POINTS LIST
BEGIN MESH STRUCTURE DESCRIPTION
-CONVEX 0 'GT_PK(2,2)' 18 86 27 87 88 19
-CONVEX 1 'GT_PK(2,2)' 33 89 43 90 91 42
-CONVEX 2 'GT_PK(2,2)' 33 92 34 93 94 25
-CONVEX 3 'GT_PK(2,2)' 33 89 43 92 95 34
-CONVEX 4 'GT_PK(2,2)' 65 96 75 97 98 66
-CONVEX 5 'GT_PK(2,2)' 65 96 75 99 100 74
-CONVEX 6 'GT_PK(2,2)' 81 101 75 102 100 74
-CONVEX 7 'GT_PK(2,2)' 26 103 18 104 86 27
-CONVEX 8 'GT_PK(2,2)' 11 105 18 106 87 19
-CONVEX 9 'GT_PK(2,2)' 72 107 62 108 109 71
-CONVEX 10 'GT_PK(2,2)' 58 110 68 111 112 59
-CONVEX 11 'GT_PK(2,2)' 36 113 26 114 104 27
-CONVEX 12 'GT_PK(2,2)' 53 115 43 116 117 3
-CONVEX 13 'GT_PK(2,2)' 32 118 33 119 90 42
-CONVEX 14 'GT_PK(2,2)' 32 120 31 121 122 23
-CONVEX 15 'GT_PK(2,2)' 41 123 51 124 125 42
-CONVEX 16 'GT_PK(2,2)' 41 126 32 124 119 42
-CONVEX 17 'GT_PK(2,2)' 41 126 32 127 120 31
-CONVEX 18 'GT_PK(2,2)' 24 128 33 129 93 25
-CONVEX 19 'GT_PK(2,2)' 24 130 32 131 121 23
-CONVEX 20 'GT_PK(2,2)' 24 130 32 128 118 33
-CONVEX 21 'GT_PK(2,2)' 73 132 65 133 99 74
-CONVEX 22 'GT_PK(2,2)' 73 132 65 134 135 64
-CONVEX 23 'GT_PK(2,2)' 76 136 81 137 101 75
-CONVEX 24 'GT_PK(2,2)' 76 138 82 136 139 81
-CONVEX 25 'GT_PK(2,2)' 77 140 84 141 142 85
-CONVEX 26 'GT_PK(2,2)' 55 143 65 144 135 64
-CONVEX 27 'GT_PK(2,2)' 55 145 54 144 146 64
-CONVEX 28 'GT_PK(2,2)' 78 147 79 148 149 85
-CONVEX 29 'GT_PK(2,2)' 78 150 77 148 141 85
-CONVEX 30 'GT_PK(2,2)' 78 151 71 152 153 70
-CONVEX 31 'GT_PK(2,2)' 78 147 79 151 154 71
-CONVEX 32 'GT_PK(2,2)' 44 155 43 156 117 3
-CONVEX 33 'GT_PK(2,2)' 44 155 43 157 95 34
-CONVEX 34 'GT_PK(2,2)' 80 158 79 159 154 71
-CONVEX 35 'GT_PK(2,2)' 80 160 72 159 108 71
-CONVEX 36 'GT_PK(2,2)' 35 161 36 162 163 2
-CONVEX 37 'GT_PK(2,2)' 35 161 36 164 113 26
-CONVEX 38 'GT_PK(2,2)' 52 165 53 166 167 62
-CONVEX 39 'GT_PK(2,2)' 52 168 51 169 125 42
-CONVEX 40 'GT_PK(2,2)' 52 170 43 169 91 42
-CONVEX 41 'GT_PK(2,2)' 52 165 53 170 115 43
-CONVEX 42 'GT_PK(2,2)' 63 171 72 172 107 62
-CONVEX 43 'GT_PK(2,2)' 63 173 53 172 167 62
-CONVEX 44 'GT_PK(2,2)' 63 173 53 174 116 3
-CONVEX 45 'GT_PK(2,2)' 61 175 60 176 177 70
-CONVEX 46 'GT_PK(2,2)' 61 178 71 176 153 70
-CONVEX 47 'GT_PK(2,2)' 61 179 62 178 109 71
-CONVEX 48 'GT_PK(2,2)' 61 175 60 180 181 51
-CONVEX 49 'GT_PK(2,2)' 61 182 52 179 166 62
-CONVEX 50 'GT_PK(2,2)' 61 182 52 180 168 51
-CONVEX 51 'GT_PK(2,2)' 50 183 60 184 181 51
-CONVEX 52 'GT_PK(2,2)' 50 185 41 184 123 51
-CONVEX 53 'GT_PK(2,2)' 50 183 60 186 187 59
-CONVEX 54 'GT_PK(2,2)' 17 188 24 189 129 25
-CONVEX 55 'GT_PK(2,2)' 16 190 15 191 192 23
-CONVEX 56 'GT_PK(2,2)' 16 193 24 191 131 23
-CONVEX 57 'GT_PK(2,2)' 16 194 17 195 196 10
-CONVEX 58 'GT_PK(2,2)' 16 194 17 193 188 24
-CONVEX 59 'GT_PK(2,2)' 9 197 15 198 199 8
-CONVEX 60 'GT_PK(2,2)' 9 200 16 201 195 10
-CONVEX 61 'GT_PK(2,2)' 9 200 16 197 190 15
-CONVEX 62 'GT_PK(2,2)' 67 202 58 203 110 68
-CONVEX 63 'GT_PK(2,2)' 67 204 76 203 205 68
-CONVEX 64 'GT_PK(2,2)' 67 206 57 207 208 66
-CONVEX 65 'GT_PK(2,2)' 67 206 57 202 209 58
-CONVEX 66 'GT_PK(2,2)' 67 210 75 207 98 66
-CONVEX 67 'GT_PK(2,2)' 67 204 76 210 137 75
-CONVEX 68 'GT_PK(2,2)' 83 211 76 212 205 68
-CONVEX 69 'GT_PK(2,2)' 83 213 77 212 214 68
-CONVEX 70 'GT_PK(2,2)' 83 215 82 216 217 4
-CONVEX 71 'GT_PK(2,2)' 83 211 76 215 138 82
-CONVEX 72 'GT_PK(2,2)' 83 218 84 216 219 4
-CONVEX 73 'GT_PK(2,2)' 83 213 77 218 140 84
-CONVEX 74 'GT_PK(2,2)' 69 220 60 221 177 70
-CONVEX 75 'GT_PK(2,2)' 69 220 60 222 187 59
-CONVEX 76 'GT_PK(2,2)' 69 223 78 221 152 70
-CONVEX 77 'GT_PK(2,2)' 69 223 78 224 150 77
-CONVEX 78 'GT_PK(2,2)' 69 225 68 222 112 59
-CONVEX 79 'GT_PK(2,2)' 69 224 77 225 214 68
-CONVEX 80 'GT_PK(2,2)' 45 226 36 227 163 2
-CONVEX 81 'GT_PK(2,2)' 45 228 54 227 229 2
-CONVEX 82 'GT_PK(2,2)' 45 230 55 228 145 54
-CONVEX 83 'GT_PK(2,2)' 40 231 30 232 233 31
-CONVEX 84 'GT_PK(2,2)' 40 234 41 232 127 31
-CONVEX 85 'GT_PK(2,2)' 40 235 50 236 237 1
-CONVEX 86 'GT_PK(2,2)' 40 235 50 234 185 41
-CONVEX 87 'GT_PK(2,2)' 39 238 30 239 240 29
-CONVEX 88 'GT_PK(2,2)' 39 241 38 239 242 29
-CONVEX 89 'GT_PK(2,2)' 39 243 40 244 236 1
-CONVEX 90 'GT_PK(2,2)' 39 243 40 238 231 30
-CONVEX 91 'GT_PK(2,2)' 22 245 31 246 122 23
-CONVEX 92 'GT_PK(2,2)' 22 247 30 245 233 31
-CONVEX 93 'GT_PK(2,2)' 22 248 15 246 192 23
-CONVEX 94 'GT_PK(2,2)' 37 249 38 250 251 47
-CONVEX 95 'GT_PK(2,2)' 37 252 36 253 114 27
-CONVEX 96 'GT_PK(2,2)' 12 254 20 255 256 19
-CONVEX 97 'GT_PK(2,2)' 12 257 11 255 106 19
-CONVEX 98 'GT_PK(2,2)' 12 257 11 258 259 5
-CONVEX 99 'GT_PK(2,2)' 12 260 6 258 261 5
-CONVEX 100 'GT_PK(2,2)' 14 262 22 263 248 15
-CONVEX 101 'GT_PK(2,2)' 14 264 8 265 266 0
-CONVEX 102 'GT_PK(2,2)' 14 263 15 264 199 8
-CONVEX 103 'GT_PK(2,2)' 21 267 30 268 240 29
-CONVEX 104 'GT_PK(2,2)' 21 269 20 268 270 29
-CONVEX 105 'GT_PK(2,2)' 21 271 22 267 247 30
-CONVEX 106 'GT_PK(2,2)' 21 272 14 271 262 22
-CONVEX 107 'GT_PK(2,2)' 56 273 57 274 275 47
-CONVEX 108 'GT_PK(2,2)' 56 273 57 276 208 66
-CONVEX 109 'GT_PK(2,2)' 56 277 65 276 97 66
-CONVEX 110 'GT_PK(2,2)' 56 278 55 277 143 65
-CONVEX 111 'GT_PK(2,2)' 48 279 57 280 275 47
-CONVEX 112 'GT_PK(2,2)' 48 281 39 282 244 1
-CONVEX 113 'GT_PK(2,2)' 48 279 57 283 209 58
-CONVEX 114 'GT_PK(2,2)' 48 284 38 280 251 47
-CONVEX 115 'GT_PK(2,2)' 48 281 39 284 241 38
-CONVEX 116 'GT_PK(2,2)' 46 285 37 286 250 47
-CONVEX 117 'GT_PK(2,2)' 46 287 56 286 274 47
-CONVEX 118 'GT_PK(2,2)' 46 288 45 289 226 36
-CONVEX 119 'GT_PK(2,2)' 46 285 37 289 252 36
-CONVEX 120 'GT_PK(2,2)' 46 288 45 290 230 55
-CONVEX 121 'GT_PK(2,2)' 46 287 56 290 278 55
-CONVEX 122 'GT_PK(2,2)' 28 291 38 292 242 29
-CONVEX 123 'GT_PK(2,2)' 28 293 37 291 249 38
-CONVEX 124 'GT_PK(2,2)' 28 294 20 292 270 29
-CONVEX 125 'GT_PK(2,2)' 28 294 20 295 256 19
-CONVEX 126 'GT_PK(2,2)' 28 296 27 295 88 19
-CONVEX 127 'GT_PK(2,2)' 28 293 37 296 253 27
-CONVEX 128 'GT_PK(2,2)' 7 297 14 298 265 0
-CONVEX 129 'GT_PK(2,2)' 13 299 21 300 272 14
-CONVEX 130 'GT_PK(2,2)' 13 301 12 302 260 6
-CONVEX 131 'GT_PK(2,2)' 13 301 12 303 254 20
-CONVEX 132 'GT_PK(2,2)' 13 299 21 303 269 20
-CONVEX 133 'GT_PK(2,2)' 13 304 7 302 305 6
-CONVEX 134 'GT_PK(2,2)' 13 304 7 300 297 14
-CONVEX 135 'GT_PK(2,2)' 49 306 48 307 282 1
-CONVEX 136 'GT_PK(2,2)' 49 306 48 308 283 58
-CONVEX 137 'GT_PK(2,2)' 49 308 58 309 111 59
-CONVEX 138 'GT_PK(2,2)' 49 310 50 307 237 1
-CONVEX 139 'GT_PK(2,2)' 49 310 50 309 186 59
+CONVEX 0 'GT_PK(2,2)' 181 364 142 365 366 161
+CONVEX 1 'GT_PK(2,2)' 180 367 181 368 369 3
+CONVEX 2 'GT_PK(2,2)' 180 367 181 370 365 161
+CONVEX 3 'GT_PK(2,2)' 358 371 359 372 373 4
+CONVEX 4 'GT_PK(2,2)' 360 374 359 375 373 4
+CONVEX 5 'GT_PK(2,2)' 350 376 360 377 378 361
+CONVEX 6 'GT_PK(2,2)' 127 379 108 380 381 128
+CONVEX 7 'GT_PK(2,2)' 127 379 108 382 383 107
+CONVEX 8 'GT_PK(2,2)' 182 384 201 385 386 2
+CONVEX 9 'GT_PK(2,2)' 141 387 142 388 389 122
+CONVEX 10 'GT_PK(2,2)' 141 387 142 390 366 161
+CONVEX 11 'GT_PK(2,2)' 17 391 8 392 393 7
+CONVEX 12 'GT_PK(2,2)' 325 394 309 395 396 326
+CONVEX 13 'GT_PK(2,2)' 354 397 341 398 399 353
+CONVEX 14 'GT_PK(2,2)' 39 400 55 401 402 40
+CONVEX 15 'GT_PK(2,2)' 39 403 25 401 404 40
+CONVEX 16 'GT_PK(2,2)' 71 405 55 406 407 72
+CONVEX 17 'GT_PK(2,2)' 316 408 317 409 410 331
+CONVEX 18 'GT_PK(2,2)' 356 411 346 412 413 357
+CONVEX 19 'GT_PK(2,2)' 87 414 86 415 416 69
+CONVEX 20 'GT_PK(2,2)' 89 417 108 418 383 107
+CONVEX 21 'GT_PK(2,2)' 89 419 71 420 406 72
+CONVEX 22 'GT_PK(2,2)' 109 421 108 422 381 128
+CONVEX 23 'GT_PK(2,2)' 126 423 127 424 382 107
+CONVEX 24 'GT_PK(2,2)' 163 425 162 426 427 143
+CONVEX 25 'GT_PK(2,2)' 163 425 162 428 429 2
+CONVEX 26 'GT_PK(2,2)' 163 430 182 428 385 2
+CONVEX 27 'GT_PK(2,2)' 191 431 211 432 433 210
+CONVEX 28 'GT_PK(2,2)' 191 434 190 435 436 1
+CONVEX 29 'GT_PK(2,2)' 191 434 190 432 437 210
+CONVEX 30 'GT_PK(2,2)' 136 438 155 439 440 135
+CONVEX 31 'GT_PK(2,2)' 149 441 130 442 443 150
+CONVEX 32 'GT_PK(2,2)' 131 444 130 445 443 150
+CONVEX 33 'GT_PK(2,2)' 15 446 6 447 448 5
+CONVEX 34 'GT_PK(2,2)' 18 449 17 450 451 30
+CONVEX 35 'GT_PK(2,2)' 18 452 9 453 454 0
+CONVEX 36 'GT_PK(2,2)' 18 455 8 453 456 0
+CONVEX 37 'GT_PK(2,2)' 18 449 17 455 391 8
+CONVEX 38 'GT_PK(2,2)' 363 457 362 458 459 352
+CONVEX 39 'GT_PK(2,2)' 351 460 362 461 459 352
+CONVEX 40 'GT_PK(2,2)' 351 462 338 463 464 350
+CONVEX 41 'GT_PK(2,2)' 351 463 350 465 377 361
+CONVEX 42 'GT_PK(2,2)' 351 460 362 465 466 361
+CONVEX 43 'GT_PK(2,2)' 339 467 325 468 469 324
+CONVEX 44 'GT_PK(2,2)' 339 470 338 468 471 324
+CONVEX 45 'GT_PK(2,2)' 339 472 351 473 461 352
+CONVEX 46 'GT_PK(2,2)' 339 472 351 470 462 338
+CONVEX 47 'GT_PK(2,2)' 340 474 341 475 399 353
+CONVEX 48 'GT_PK(2,2)' 340 476 339 477 473 352
+CONVEX 49 'GT_PK(2,2)' 340 476 339 478 467 325
+CONVEX 50 'GT_PK(2,2)' 340 474 341 479 480 326
+CONVEX 51 'GT_PK(2,2)' 340 478 325 479 395 326
+CONVEX 52 'GT_PK(2,2)' 340 481 363 475 482 353
+CONVEX 53 'GT_PK(2,2)' 340 481 363 477 458 352
+CONVEX 54 'GT_PK(2,2)' 278 483 259 484 485 258
+CONVEX 55 'GT_PK(2,2)' 276 486 257 487 488 256
+CONVEX 56 'GT_PK(2,2)' 347 489 358 490 491 357
+CONVEX 57 'GT_PK(2,2)' 347 492 346 490 413 357
+CONVEX 58 'GT_PK(2,2)' 337 493 338 494 464 350
+CONVEX 59 'GT_PK(2,2)' 308 495 325 496 469 324
+CONVEX 60 'GT_PK(2,2)' 308 495 325 497 394 309
+CONVEX 61 'GT_PK(2,2)' 291 498 309 499 500 292
+CONVEX 62 'GT_PK(2,2)' 291 501 308 498 497 309
+CONVEX 63 'GT_PK(2,2)' 291 501 308 502 503 290
+CONVEX 64 'GT_PK(2,2)' 197 504 216 505 506 196
+CONVEX 65 'GT_PK(2,2)' 197 507 178 508 509 198
+CONVEX 66 'GT_PK(2,2)' 171 510 190 511 436 1
+CONVEX 67 'GT_PK(2,2)' 64 512 81 513 514 80
+CONVEX 68 'GT_PK(2,2)' 19 515 9 516 517 10
+CONVEX 69 'GT_PK(2,2)' 19 518 18 515 452 9
+CONVEX 70 'GT_PK(2,2)' 24 519 39 520 521 38
+CONVEX 71 'GT_PK(2,2)' 24 519 39 522 403 25
+CONVEX 72 'GT_PK(2,2)' 54 523 39 524 400 55
+CONVEX 73 'GT_PK(2,2)' 54 525 71 524 405 55
+CONVEX 74 'GT_PK(2,2)' 54 523 39 526 521 38
+CONVEX 75 'GT_PK(2,2)' 54 527 53 526 528 38
+CONVEX 76 'GT_PK(2,2)' 315 529 316 530 531 299
+CONVEX 77 'GT_PK(2,2)' 343 532 344 533 534 331
+CONVEX 78 'GT_PK(2,2)' 343 535 316 533 409 331
+CONVEX 79 'GT_PK(2,2)' 300 536 316 537 531 299
+CONVEX 80 'GT_PK(2,2)' 300 536 316 538 408 317
+CONVEX 81 'GT_PK(2,2)' 123 539 124 540 541 104
+CONVEX 82 'GT_PK(2,2)' 123 539 124 542 543 143
+CONVEX 83 'GT_PK(2,2)' 123 544 162 542 427 143
+CONVEX 84 'GT_PK(2,2)' 70 545 53 546 547 69
+CONVEX 85 'GT_PK(2,2)' 70 548 87 546 415 69
+CONVEX 86 'GT_PK(2,2)' 70 549 54 545 527 53
+CONVEX 87 'GT_PK(2,2)' 70 549 54 550 525 71
+CONVEX 88 'GT_PK(2,2)' 106 551 126 552 553 125
+CONVEX 89 'GT_PK(2,2)' 106 551 126 554 424 107
+CONVEX 90 'GT_PK(2,2)' 105 555 86 556 557 104
+CONVEX 91 'GT_PK(2,2)' 105 558 87 555 414 86
+CONVEX 92 'GT_PK(2,2)' 105 559 124 556 541 104
+CONVEX 93 'GT_PK(2,2)' 105 560 106 558 561 87
+CONVEX 94 'GT_PK(2,2)' 105 559 124 562 563 125
+CONVEX 95 'GT_PK(2,2)' 105 560 106 562 552 125
+CONVEX 96 'GT_PK(2,2)' 179 564 178 565 509 198
+CONVEX 97 'GT_PK(2,2)' 56 566 73 567 568 57
+CONVEX 98 'GT_PK(2,2)' 56 569 55 570 402 40
+CONVEX 99 'GT_PK(2,2)' 56 569 55 571 407 72
+CONVEX 100 'GT_PK(2,2)' 56 566 73 571 572 72
+CONVEX 101 'GT_PK(2,2)' 90 573 109 574 421 108
+CONVEX 102 'GT_PK(2,2)' 90 575 89 576 420 72
+CONVEX 103 'GT_PK(2,2)' 90 575 89 574 417 108
+CONVEX 104 'GT_PK(2,2)' 90 577 73 576 572 72
+CONVEX 105 'GT_PK(2,2)' 187 578 167 579 580 168
+CONVEX 106 'GT_PK(2,2)' 116 581 136 582 439 135
+CONVEX 107 'GT_PK(2,2)' 116 581 136 583 584 117
+CONVEX 108 'GT_PK(2,2)' 154 585 153 586 587 173
+CONVEX 109 'GT_PK(2,2)' 154 588 155 589 440 135
+CONVEX 110 'GT_PK(2,2)' 172 590 153 591 587 173
+CONVEX 111 'GT_PK(2,2)' 172 592 171 593 511 1
+CONVEX 112 'GT_PK(2,2)' 264 594 245 595 596 244
+CONVEX 113 'GT_PK(2,2)' 298 597 297 598 599 314
+CONVEX 114 'GT_PK(2,2)' 298 600 315 598 601 314
+CONVEX 115 'GT_PK(2,2)' 298 602 281 603 604 299
+CONVEX 116 'GT_PK(2,2)' 298 600 315 603 530 299
+CONVEX 117 'GT_PK(2,2)' 202 605 182 606 384 201
+CONVEX 118 'GT_PK(2,2)' 144 607 163 608 426 143
+CONVEX 119 'GT_PK(2,2)' 144 609 124 610 563 125
+CONVEX 120 'GT_PK(2,2)' 144 609 124 608 543 143
+CONVEX 121 'GT_PK(2,2)' 215 611 216 612 506 196
+CONVEX 122 'GT_PK(2,2)' 215 613 195 612 614 196
+CONVEX 123 'GT_PK(2,2)' 99 615 81 616 617 82
+CONVEX 124 'GT_PK(2,2)' 99 618 118 619 620 117
+CONVEX 125 'GT_PK(2,2)' 35 621 36 622 623 23
+CONVEX 126 'GT_PK(2,2)' 35 621 36 624 625 50
+CONVEX 127 'GT_PK(2,2)' 100 626 118 627 628 119
+CONVEX 128 'GT_PK(2,2)' 100 629 99 630 616 82
+CONVEX 129 'GT_PK(2,2)' 100 629 99 626 618 118
+CONVEX 130 'GT_PK(2,2)' 137 631 136 632 584 117
+CONVEX 131 'GT_PK(2,2)' 137 633 118 632 620 117
+CONVEX 132 'GT_PK(2,2)' 74 634 73 635 568 57
+CONVEX 133 'GT_PK(2,2)' 74 636 75 637 638 92
+CONVEX 134 'GT_PK(2,2)' 148 639 167 640 580 168
+CONVEX 135 'GT_PK(2,2)' 148 641 149 640 642 168
+CONVEX 136 'GT_PK(2,2)' 93 643 75 644 645 76
+CONVEX 137 'GT_PK(2,2)' 93 643 75 646 638 92
+CONVEX 138 'GT_PK(2,2)' 46 647 45 648 649 61
+CONVEX 139 'GT_PK(2,2)' 46 650 62 648 651 61
+CONVEX 140 'GT_PK(2,2)' 46 650 62 652 653 47
+CONVEX 141 'GT_PK(2,2)' 327 654 354 655 397 341
+CONVEX 142 'GT_PK(2,2)' 327 655 341 656 480 326
+CONVEX 143 'GT_PK(2,2)' 217 657 218 658 659 198
+CONVEX 144 'GT_PK(2,2)' 217 660 197 658 508 198
+CONVEX 145 'GT_PK(2,2)' 217 660 197 661 504 216
+CONVEX 146 'GT_PK(2,2)' 200 662 180 663 368 3
+CONVEX 147 'GT_PK(2,2)' 200 664 220 663 665 3
+CONVEX 148 'GT_PK(2,2)' 238 666 257 667 668 258
+CONVEX 149 'GT_PK(2,2)' 238 669 259 667 485 258
+CONVEX 150 'GT_PK(2,2)' 238 670 239 669 671 259
+CONVEX 151 'GT_PK(2,2)' 277 672 257 673 668 258
+CONVEX 152 'GT_PK(2,2)' 277 674 276 672 486 257
+CONVEX 153 'GT_PK(2,2)' 277 675 278 673 484 258
+CONVEX 154 'GT_PK(2,2)' 277 675 278 676 677 296
+CONVEX 155 'GT_PK(2,2)' 236 678 255 679 680 256
+CONVEX 156 'GT_PK(2,2)' 236 681 217 682 661 216
+CONVEX 157 'GT_PK(2,2)' 275 683 276 684 487 256
+CONVEX 158 'GT_PK(2,2)' 275 685 255 684 680 256
+CONVEX 159 'GT_PK(2,2)' 275 686 294 683 687 276
+CONVEX 160 'GT_PK(2,2)' 275 686 294 688 689 293
+CONVEX 161 'GT_PK(2,2)' 209 690 229 691 692 210
+CONVEX 162 'GT_PK(2,2)' 209 693 189 694 695 208
+CONVEX 163 'GT_PK(2,2)' 209 696 190 691 437 210
+CONVEX 164 'GT_PK(2,2)' 209 693 189 696 697 190
+CONVEX 165 'GT_PK(2,2)' 334 698 347 699 492 346
+CONVEX 166 'GT_PK(2,2)' 345 700 356 701 411 346
+CONVEX 167 'GT_PK(2,2)' 345 702 355 700 703 356
+CONVEX 168 'GT_PK(2,2)' 349 704 337 705 494 350
+CONVEX 169 'GT_PK(2,2)' 349 706 360 707 374 359
+CONVEX 170 'GT_PK(2,2)' 349 705 350 706 376 360
+CONVEX 171 'GT_PK(2,2)' 349 708 336 704 709 337
+CONVEX 172 'GT_PK(2,2)' 323 710 338 711 471 324
+CONVEX 173 'GT_PK(2,2)' 323 712 337 710 493 338
+CONVEX 174 'GT_PK(2,2)' 307 713 308 714 503 290
+CONVEX 175 'GT_PK(2,2)' 307 713 308 715 496 324
+CONVEX 176 'GT_PK(2,2)' 307 716 323 715 711 324
+CONVEX 177 'GT_PK(2,2)' 307 716 323 717 718 306
+CONVEX 178 'GT_PK(2,2)' 272 719 291 720 502 290
+CONVEX 179 'GT_PK(2,2)' 169 721 149 722 442 150
+CONVEX 180 'GT_PK(2,2)' 169 721 149 723 642 168
+CONVEX 181 'GT_PK(2,2)' 22 724 35 725 726 34
+CONVEX 182 'GT_PK(2,2)' 22 724 35 727 622 23
+CONVEX 183 'GT_PK(2,2)' 63 728 62 729 653 47
+CONVEX 184 'GT_PK(2,2)' 63 728 62 730 731 79
+CONVEX 185 'GT_PK(2,2)' 63 730 79 732 733 80
+CONVEX 186 'GT_PK(2,2)' 63 734 64 732 513 80
+CONVEX 187 'GT_PK(2,2)' 21 735 12 736 737 11
+CONVEX 188 'GT_PK(2,2)' 21 738 33 739 740 34
+CONVEX 189 'GT_PK(2,2)' 21 741 22 739 725 34
+CONVEX 190 'GT_PK(2,2)' 21 741 22 735 742 12
+CONVEX 191 'GT_PK(2,2)' 49 743 35 744 726 34
+CONVEX 192 'GT_PK(2,2)' 49 743 35 745 624 50
+CONVEX 193 'GT_PK(2,2)' 330 746 315 747 529 316
+CONVEX 194 'GT_PK(2,2)' 330 748 343 747 535 316
+CONVEX 195 'GT_PK(2,2)' 330 746 315 749 601 314
+CONVEX 196 'GT_PK(2,2)' 88 750 70 751 548 87
+CONVEX 197 'GT_PK(2,2)' 88 752 106 751 561 87
+CONVEX 198 'GT_PK(2,2)' 88 750 70 753 550 71
+CONVEX 199 'GT_PK(2,2)' 88 752 106 754 554 107
+CONVEX 200 'GT_PK(2,2)' 88 755 89 754 418 107
+CONVEX 201 'GT_PK(2,2)' 88 755 89 753 419 71
+CONVEX 202 'GT_PK(2,2)' 159 756 179 757 564 178
+CONVEX 203 'GT_PK(2,2)' 129 758 110 759 760 130
+CONVEX 204 'GT_PK(2,2)' 129 761 148 762 763 128
+CONVEX 205 'GT_PK(2,2)' 129 764 109 762 422 128
+CONVEX 206 'GT_PK(2,2)' 129 758 110 764 765 109
+CONVEX 207 'GT_PK(2,2)' 129 766 149 759 441 130
+CONVEX 208 'GT_PK(2,2)' 129 761 148 766 641 149
+CONVEX 209 'GT_PK(2,2)' 111 767 131 768 444 130
+CONVEX 210 'GT_PK(2,2)' 111 769 110 768 760 130
+CONVEX 211 'GT_PK(2,2)' 111 769 110 770 771 92
+CONVEX 212 'GT_PK(2,2)' 111 772 93 770 646 92
+CONVEX 213 'GT_PK(2,2)' 91 773 90 774 573 109
+CONVEX 214 'GT_PK(2,2)' 91 775 110 776 771 92
+CONVEX 215 'GT_PK(2,2)' 91 775 110 774 765 109
+CONVEX 216 'GT_PK(2,2)' 91 777 74 776 637 92
+CONVEX 217 'GT_PK(2,2)' 91 773 90 778 577 73
+CONVEX 218 'GT_PK(2,2)' 91 777 74 778 634 73
+CONVEX 219 'GT_PK(2,2)' 97 779 79 780 733 80
+CONVEX 220 'GT_PK(2,2)' 97 781 96 779 782 79
+CONVEX 221 'GT_PK(2,2)' 114 783 133 784 785 113
+CONVEX 222 'GT_PK(2,2)' 114 786 95 784 787 113
+CONVEX 223 'GT_PK(2,2)' 114 786 95 788 789 96
+CONVEX 224 'GT_PK(2,2)' 132 790 133 791 785 113
+CONVEX 225 'GT_PK(2,2)' 263 792 264 793 595 244
+CONVEX 226 'GT_PK(2,2)' 263 794 262 795 796 281
+CONVEX 227 'GT_PK(2,2)' 282 797 281 798 604 299
+CONVEX 228 'GT_PK(2,2)' 282 799 264 800 801 283
+CONVEX 229 'GT_PK(2,2)' 282 802 263 797 795 281
+CONVEX 230 'GT_PK(2,2)' 282 802 263 799 792 264
+CONVEX 231 'GT_PK(2,2)' 282 803 300 800 804 283
+CONVEX 232 'GT_PK(2,2)' 282 803 300 798 537 299
+CONVEX 233 'GT_PK(2,2)' 261 805 279 806 807 260
+CONVEX 234 'GT_PK(2,2)' 243 808 263 809 793 244
+CONVEX 235 'GT_PK(2,2)' 243 808 263 810 794 262
+CONVEX 236 'GT_PK(2,2)' 221 811 202 812 606 201
+CONVEX 237 'GT_PK(2,2)' 221 813 240 814 815 222
+CONVEX 238 'GT_PK(2,2)' 221 811 202 814 816 222
+CONVEX 239 'GT_PK(2,2)' 156 817 136 818 438 155
+CONVEX 240 'GT_PK(2,2)' 156 819 175 818 820 155
+CONVEX 241 'GT_PK(2,2)' 156 821 137 817 631 136
+CONVEX 242 'GT_PK(2,2)' 192 822 191 823 431 211
+CONVEX 243 'GT_PK(2,2)' 192 822 191 824 435 1
+CONVEX 244 'GT_PK(2,2)' 192 825 172 824 593 1
+CONVEX 245 'GT_PK(2,2)' 192 825 172 826 591 173
+CONVEX 246 'GT_PK(2,2)' 174 827 154 828 586 173
+CONVEX 247 'GT_PK(2,2)' 174 827 154 829 588 155
+CONVEX 248 'GT_PK(2,2)' 174 830 175 829 820 155
+CONVEX 249 'GT_PK(2,2)' 214 831 215 832 613 195
+CONVEX 250 'GT_PK(2,2)' 214 831 215 833 834 234
+CONVEX 251 'GT_PK(2,2)' 98 835 81 836 514 80
+CONVEX 252 'GT_PK(2,2)' 98 837 99 835 615 81
+CONVEX 253 'GT_PK(2,2)' 98 838 97 836 780 80
+CONVEX 254 'GT_PK(2,2)' 98 837 99 839 619 117
+CONVEX 255 'GT_PK(2,2)' 98 840 116 839 583 117
+CONVEX 256 'GT_PK(2,2)' 98 838 97 840 841 116
+CONVEX 257 'GT_PK(2,2)' 52 842 68 843 844 67
+CONVEX 258 'GT_PK(2,2)' 83 845 66 846 847 67
+CONVEX 259 'GT_PK(2,2)' 83 848 100 849 630 82
+CONVEX 260 'GT_PK(2,2)' 83 845 66 849 850 82
+CONVEX 261 'GT_PK(2,2)' 51 851 66 852 853 50
+CONVEX 262 'GT_PK(2,2)' 51 854 36 855 856 37
+CONVEX 263 'GT_PK(2,2)' 51 854 36 852 625 50
+CONVEX 264 'GT_PK(2,2)' 51 851 66 857 847 67
+CONVEX 265 'GT_PK(2,2)' 51 858 52 855 859 37
+CONVEX 266 'GT_PK(2,2)' 51 858 52 857 843 67
+CONVEX 267 'GT_PK(2,2)' 103 860 102 861 862 85
+CONVEX 268 'GT_PK(2,2)' 121 863 102 864 865 120
+CONVEX 269 'GT_PK(2,2)' 121 866 141 867 388 122
+CONVEX 270 'GT_PK(2,2)' 121 868 103 867 869 122
+CONVEX 271 'GT_PK(2,2)' 121 868 103 863 860 102
+CONVEX 272 'GT_PK(2,2)' 58 870 74 871 635 57
+CONVEX 273 'GT_PK(2,2)' 58 870 74 872 636 75
+CONVEX 274 'GT_PK(2,2)' 29 873 17 874 451 30
+CONVEX 275 'GT_PK(2,2)' 60 875 45 876 649 61
+CONVEX 276 'GT_PK(2,2)' 60 877 77 878 879 76
+CONVEX 277 'GT_PK(2,2)' 60 877 77 876 880 61
+CONVEX 278 'GT_PK(2,2)' 94 881 95 882 787 113
+CONVEX 279 'GT_PK(2,2)' 94 883 93 884 644 76
+CONVEX 280 'GT_PK(2,2)' 94 885 77 884 879 76
+CONVEX 281 'GT_PK(2,2)' 94 885 77 881 886 95
+CONVEX 282 'GT_PK(2,2)' 41 887 56 888 570 40
+CONVEX 283 'GT_PK(2,2)' 41 887 56 889 567 57
+CONVEX 284 'GT_PK(2,2)' 28 890 27 891 892 15
+CONVEX 285 'GT_PK(2,2)' 28 893 29 894 895 43
+CONVEX 286 'GT_PK(2,2)' 14 896 15 897 447 5
+CONVEX 287 'GT_PK(2,2)' 14 898 27 896 892 15
+CONVEX 288 'GT_PK(2,2)' 31 899 45 900 901 30
+CONVEX 289 'GT_PK(2,2)' 31 902 46 899 647 45
+CONVEX 290 'GT_PK(2,2)' 31 903 18 900 450 30
+CONVEX 291 'GT_PK(2,2)' 31 904 19 903 518 18
+CONVEX 292 'GT_PK(2,2)' 311 905 327 906 907 328
+CONVEX 293 'GT_PK(2,2)' 311 908 294 909 689 293
+CONVEX 294 'GT_PK(2,2)' 342 910 329 911 912 328
+CONVEX 295 'GT_PK(2,2)' 342 913 327 914 654 354
+CONVEX 296 'GT_PK(2,2)' 342 913 327 911 907 328
+CONVEX 297 'GT_PK(2,2)' 237 915 217 916 657 218
+CONVEX 298 'GT_PK(2,2)' 237 917 238 918 666 257
+CONVEX 299 'GT_PK(2,2)' 237 917 238 916 919 218
+CONVEX 300 'GT_PK(2,2)' 237 920 236 915 681 217
+CONVEX 301 'GT_PK(2,2)' 237 918 257 921 488 256
+CONVEX 302 'GT_PK(2,2)' 237 920 236 921 679 256
+CONVEX 303 'GT_PK(2,2)' 199 922 218 923 659 198
+CONVEX 304 'GT_PK(2,2)' 199 924 179 923 565 198
+CONVEX 305 'GT_PK(2,2)' 199 924 179 925 926 180
+CONVEX 306 'GT_PK(2,2)' 199 927 200 925 662 180
+CONVEX 307 'GT_PK(2,2)' 219 928 239 929 930 220
+CONVEX 308 'GT_PK(2,2)' 219 931 238 928 670 239
+CONVEX 309 'GT_PK(2,2)' 219 932 200 929 664 220
+CONVEX 310 'GT_PK(2,2)' 219 931 238 933 919 218
+CONVEX 311 'GT_PK(2,2)' 219 934 199 933 922 218
+CONVEX 312 'GT_PK(2,2)' 219 934 199 932 927 200
+CONVEX 313 'GT_PK(2,2)' 312 935 329 936 912 328
+CONVEX 314 'GT_PK(2,2)' 312 937 311 936 906 328
+CONVEX 315 'GT_PK(2,2)' 312 937 311 938 908 294
+CONVEX 316 'GT_PK(2,2)' 235 939 236 940 682 216
+CONVEX 317 'GT_PK(2,2)' 235 939 236 941 678 255
+CONVEX 318 'GT_PK(2,2)' 235 942 215 940 611 216
+CONVEX 319 'GT_PK(2,2)' 235 942 215 943 834 234
+CONVEX 320 'GT_PK(2,2)' 235 944 254 943 945 234
+CONVEX 321 'GT_PK(2,2)' 235 944 254 941 946 255
+CONVEX 322 'GT_PK(2,2)' 265 947 264 948 801 283
+CONVEX 323 'GT_PK(2,2)' 265 947 264 949 594 245
+CONVEX 324 'GT_PK(2,2)' 333 950 334 951 699 346
+CONVEX 325 'GT_PK(2,2)' 333 952 345 951 701 346
+CONVEX 326 'GT_PK(2,2)' 332 953 317 954 410 331
+CONVEX 327 'GT_PK(2,2)' 332 955 318 953 956 317
+CONVEX 328 'GT_PK(2,2)' 332 957 344 954 534 331
+CONVEX 329 'GT_PK(2,2)' 332 958 333 955 959 318
+CONVEX 330 'GT_PK(2,2)' 332 958 333 960 952 345
+CONVEX 331 'GT_PK(2,2)' 332 961 355 957 962 344
+CONVEX 332 'GT_PK(2,2)' 332 960 345 961 702 355
+CONVEX 333 'GT_PK(2,2)' 335 963 334 964 698 347
+CONVEX 334 'GT_PK(2,2)' 335 965 336 966 967 321
+CONVEX 335 'GT_PK(2,2)' 322 968 323 969 718 306
+CONVEX 336 'GT_PK(2,2)' 322 968 323 970 712 337
+CONVEX 337 'GT_PK(2,2)' 322 971 336 972 967 321
+CONVEX 338 'GT_PK(2,2)' 322 971 336 970 709 337
+CONVEX 339 'GT_PK(2,2)' 250 973 270 974 975 251
+CONVEX 340 'GT_PK(2,2)' 289 976 307 977 714 290
+CONVEX 341 'GT_PK(2,2)' 289 976 307 978 717 306
+CONVEX 342 'GT_PK(2,2)' 305 979 322 980 972 321
+CONVEX 343 'GT_PK(2,2)' 305 979 322 981 969 306
+CONVEX 344 'GT_PK(2,2)' 274 982 275 983 685 255
+CONVEX 345 'GT_PK(2,2)' 274 984 254 983 946 255
+CONVEX 346 'GT_PK(2,2)' 274 982 275 985 688 293
+CONVEX 347 'GT_PK(2,2)' 274 985 293 986 987 292
+CONVEX 348 'GT_PK(2,2)' 273 988 291 989 499 292
+CONVEX 349 'GT_PK(2,2)' 273 990 272 988 719 291
+CONVEX 350 'GT_PK(2,2)' 273 991 274 989 986 292
+CONVEX 351 'GT_PK(2,2)' 273 991 274 992 984 254
+CONVEX 352 'GT_PK(2,2)' 170 993 169 994 722 150
+CONVEX 353 'GT_PK(2,2)' 170 993 169 995 996 189
+CONVEX 354 'GT_PK(2,2)' 170 997 171 998 510 190
+CONVEX 355 'GT_PK(2,2)' 170 995 189 998 697 190
+CONVEX 356 'GT_PK(2,2)' 188 999 189 1000 695 208
+CONVEX 357 'GT_PK(2,2)' 188 1001 169 999 996 189
+CONVEX 358 'GT_PK(2,2)' 188 1000 208 1002 1003 207
+CONVEX 359 'GT_PK(2,2)' 188 1004 187 1002 1005 207
+CONVEX 360 'GT_PK(2,2)' 188 1004 187 1006 579 168
+CONVEX 361 'GT_PK(2,2)' 188 1001 169 1006 723 168
+CONVEX 362 'GT_PK(2,2)' 48 1007 63 1008 734 64
+CONVEX 363 'GT_PK(2,2)' 48 1009 49 1008 1010 64
+CONVEX 364 'GT_PK(2,2)' 48 1011 33 1012 1013 47
+CONVEX 365 'GT_PK(2,2)' 48 1007 63 1012 729 47
+CONVEX 366 'GT_PK(2,2)' 48 1011 33 1014 740 34
+CONVEX 367 'GT_PK(2,2)' 48 1009 49 1014 744 34
+CONVEX 368 'GT_PK(2,2)' 20 1015 21 1016 736 11
+CONVEX 369 'GT_PK(2,2)' 20 1017 10 1016 1018 11
+CONVEX 370 'GT_PK(2,2)' 20 1019 19 1017 516 10
+CONVEX 371 'GT_PK(2,2)' 20 1015 21 1020 738 33
+CONVEX 372 'GT_PK(2,2)' 65 1021 49 1022 1010 64
+CONVEX 373 'GT_PK(2,2)' 65 1022 64 1023 512 81
+CONVEX 374 'GT_PK(2,2)' 65 1024 66 1025 853 50
+CONVEX 375 'GT_PK(2,2)' 65 1021 49 1025 745 50
+CONVEX 376 'GT_PK(2,2)' 65 1023 81 1026 617 82
+CONVEX 377 'GT_PK(2,2)' 65 1024 66 1026 850 82
+CONVEX 378 'GT_PK(2,2)' 139 1027 120 1028 1029 119
+CONVEX 379 'GT_PK(2,2)' 140 1030 139 1031 1032 159
+CONVEX 380 'GT_PK(2,2)' 140 1030 139 1033 1027 120
+CONVEX 381 'GT_PK(2,2)' 140 1034 121 1035 866 141
+CONVEX 382 'GT_PK(2,2)' 140 1034 121 1033 864 120
+CONVEX 383 'GT_PK(2,2)' 160 1036 159 1037 756 179
+CONVEX 384 'GT_PK(2,2)' 160 1038 180 1039 370 161
+CONVEX 385 'GT_PK(2,2)' 160 1037 179 1038 926 180
+CONVEX 386 'GT_PK(2,2)' 160 1040 140 1036 1031 159
+CONVEX 387 'GT_PK(2,2)' 160 1041 141 1039 390 161
+CONVEX 388 'GT_PK(2,2)' 160 1040 140 1041 1035 141
+CONVEX 389 'GT_PK(2,2)' 186 1042 187 1043 578 167
+CONVEX 390 'GT_PK(2,2)' 164 1044 144 1045 607 163
+CONVEX 391 'GT_PK(2,2)' 147 1046 127 1047 380 128
+CONVEX 392 'GT_PK(2,2)' 147 1048 148 1047 763 128
+CONVEX 393 'GT_PK(2,2)' 147 1048 148 1049 639 167
+CONVEX 394 'GT_PK(2,2)' 78 1050 95 1051 789 96
+CONVEX 395 'GT_PK(2,2)' 78 1052 77 1050 886 95
+CONVEX 396 'GT_PK(2,2)' 78 1051 96 1053 782 79
+CONVEX 397 'GT_PK(2,2)' 78 1054 62 1053 731 79
+CONVEX 398 'GT_PK(2,2)' 78 1054 62 1055 651 61
+CONVEX 399 'GT_PK(2,2)' 78 1052 77 1055 880 61
+CONVEX 400 'GT_PK(2,2)' 115 1056 116 1057 582 135
+CONVEX 401 'GT_PK(2,2)' 115 1058 114 1059 788 96
+CONVEX 402 'GT_PK(2,2)' 115 1060 97 1059 781 96
+CONVEX 403 'GT_PK(2,2)' 115 1060 97 1056 841 116
+CONVEX 404 'GT_PK(2,2)' 134 1061 133 1062 1063 153
+CONVEX 405 'GT_PK(2,2)' 134 1064 114 1061 783 133
+CONVEX 406 'GT_PK(2,2)' 134 1065 115 1064 1058 114
+CONVEX 407 'GT_PK(2,2)' 134 1065 115 1066 1057 135
+CONVEX 408 'GT_PK(2,2)' 134 1067 154 1066 589 135
+CONVEX 409 'GT_PK(2,2)' 134 1067 154 1062 585 153
+CONVEX 410 'GT_PK(2,2)' 151 1068 132 1069 1070 131
+CONVEX 411 'GT_PK(2,2)' 151 1069 131 1071 445 150
+CONVEX 412 'GT_PK(2,2)' 151 1072 170 1071 994 150
+CONVEX 413 'GT_PK(2,2)' 151 1072 170 1073 997 171
+CONVEX 414 'GT_PK(2,2)' 152 1074 172 1075 592 171
+CONVEX 415 'GT_PK(2,2)' 152 1076 151 1075 1073 171
+CONVEX 416 'GT_PK(2,2)' 152 1076 151 1077 1068 132
+CONVEX 417 'GT_PK(2,2)' 152 1077 132 1078 790 133
+CONVEX 418 'GT_PK(2,2)' 152 1078 133 1079 1063 153
+CONVEX 419 'GT_PK(2,2)' 152 1074 172 1079 590 153
+CONVEX 420 'GT_PK(2,2)' 242 1080 222 1081 1082 223
+CONVEX 421 'GT_PK(2,2)' 242 1083 261 1084 1085 262
+CONVEX 422 'GT_PK(2,2)' 242 1086 243 1081 1087 223
+CONVEX 423 'GT_PK(2,2)' 242 1086 243 1084 810 262
+CONVEX 424 'GT_PK(2,2)' 280 1088 261 1089 805 279
+CONVEX 425 'GT_PK(2,2)' 280 1090 298 1091 597 297
+CONVEX 426 'GT_PK(2,2)' 280 1089 279 1091 1092 297
+CONVEX 427 'GT_PK(2,2)' 280 1090 298 1093 602 281
+CONVEX 428 'GT_PK(2,2)' 280 1094 262 1093 796 281
+CONVEX 429 'GT_PK(2,2)' 280 1088 261 1094 1085 262
+CONVEX 430 'GT_PK(2,2)' 176 1095 156 1096 819 175
+CONVEX 431 'GT_PK(2,2)' 176 1097 195 1098 614 196
+CONVEX 432 'GT_PK(2,2)' 176 1096 175 1097 1099 195
+CONVEX 433 'GT_PK(2,2)' 252 1100 232 1101 1102 251
+CONVEX 434 'GT_PK(2,2)' 231 1103 232 1104 1102 251
+CONVEX 435 'GT_PK(2,2)' 231 1105 250 1104 974 251
+CONVEX 436 'GT_PK(2,2)' 212 1106 232 1107 1108 213
+CONVEX 437 'GT_PK(2,2)' 212 1109 192 1110 823 211
+CONVEX 438 'GT_PK(2,2)' 212 1111 231 1110 1112 211
+CONVEX 439 'GT_PK(2,2)' 212 1111 231 1106 1103 232
+CONVEX 440 'GT_PK(2,2)' 193 1113 174 1114 828 173
+CONVEX 441 'GT_PK(2,2)' 193 1115 212 1116 1107 213
+CONVEX 442 'GT_PK(2,2)' 193 1117 192 1114 826 173
+CONVEX 443 'GT_PK(2,2)' 193 1115 212 1117 1109 192
+CONVEX 444 'GT_PK(2,2)' 194 1118 214 1119 832 195
+CONVEX 445 'GT_PK(2,2)' 194 1120 175 1119 1099 195
+CONVEX 446 'GT_PK(2,2)' 194 1121 174 1120 830 175
+CONVEX 447 'GT_PK(2,2)' 194 1118 214 1122 1123 213
+CONVEX 448 'GT_PK(2,2)' 194 1124 193 1122 1116 213
+CONVEX 449 'GT_PK(2,2)' 194 1124 193 1121 1113 174
+CONVEX 450 'GT_PK(2,2)' 101 1125 102 1126 865 120
+CONVEX 451 'GT_PK(2,2)' 101 1126 120 1127 1029 119
+CONVEX 452 'GT_PK(2,2)' 101 1128 100 1127 627 119
+CONVEX 453 'GT_PK(2,2)' 101 1129 83 1128 848 100
+CONVEX 454 'GT_PK(2,2)' 59 1130 58 1131 872 75
+CONVEX 455 'GT_PK(2,2)' 59 1130 58 1132 1133 43
+CONVEX 456 'GT_PK(2,2)' 59 1131 75 1134 645 76
+CONVEX 457 'GT_PK(2,2)' 59 1135 60 1134 878 76
+CONVEX 458 'GT_PK(2,2)' 16 1136 29 1137 873 17
+CONVEX 459 'GT_PK(2,2)' 16 1138 15 1139 446 6
+CONVEX 460 'GT_PK(2,2)' 16 1140 28 1138 891 15
+CONVEX 461 'GT_PK(2,2)' 16 1140 28 1136 893 29
+CONVEX 462 'GT_PK(2,2)' 16 1137 17 1141 392 7
+CONVEX 463 'GT_PK(2,2)' 16 1139 6 1141 1142 7
+CONVEX 464 'GT_PK(2,2)' 44 1143 60 1144 875 45
+CONVEX 465 'GT_PK(2,2)' 44 1145 29 1146 895 43
+CONVEX 466 'GT_PK(2,2)' 44 1147 59 1146 1132 43
+CONVEX 467 'GT_PK(2,2)' 44 1147 59 1143 1135 60
+CONVEX 468 'GT_PK(2,2)' 44 1144 45 1148 901 30
+CONVEX 469 'GT_PK(2,2)' 44 1145 29 1148 874 30
+CONVEX 470 'GT_PK(2,2)' 112 1149 94 1150 882 113
+CONVEX 471 'GT_PK(2,2)' 112 1151 132 1150 791 113
+CONVEX 472 'GT_PK(2,2)' 112 1151 132 1152 1070 131
+CONVEX 473 'GT_PK(2,2)' 112 1149 94 1153 883 93
+CONVEX 474 'GT_PK(2,2)' 112 1154 111 1152 767 131
+CONVEX 475 'GT_PK(2,2)' 112 1154 111 1153 772 93
+CONVEX 476 'GT_PK(2,2)' 26 1155 41 1156 1157 27
+CONVEX 477 'GT_PK(2,2)' 26 1158 14 1159 1160 13
+CONVEX 478 'GT_PK(2,2)' 26 1158 14 1156 898 27
+CONVEX 479 'GT_PK(2,2)' 26 1155 41 1161 888 40
+CONVEX 480 'GT_PK(2,2)' 26 1162 25 1161 404 40
+CONVEX 481 'GT_PK(2,2)' 26 1159 13 1162 1163 25
+CONVEX 482 'GT_PK(2,2)' 42 1164 41 1165 1157 27
+CONVEX 483 'GT_PK(2,2)' 42 1166 28 1165 890 27
+CONVEX 484 'GT_PK(2,2)' 42 1164 41 1167 889 57
+CONVEX 485 'GT_PK(2,2)' 42 1168 58 1167 871 57
+CONVEX 486 'GT_PK(2,2)' 42 1168 58 1169 1133 43
+CONVEX 487 'GT_PK(2,2)' 42 1166 28 1169 894 43
+CONVEX 488 'GT_PK(2,2)' 310 1170 327 1171 656 326
+CONVEX 489 'GT_PK(2,2)' 310 1172 311 1170 905 327
+CONVEX 490 'GT_PK(2,2)' 310 1173 309 1171 396 326
+CONVEX 491 'GT_PK(2,2)' 310 1173 309 1174 500 292
+CONVEX 492 'GT_PK(2,2)' 310 1175 293 1174 987 292
+CONVEX 493 'GT_PK(2,2)' 310 1172 311 1175 909 293
+CONVEX 494 'GT_PK(2,2)' 313 1176 312 1177 935 329
+CONVEX 495 'GT_PK(2,2)' 295 1178 277 1179 676 296
+CONVEX 496 'GT_PK(2,2)' 295 1180 313 1179 1181 296
+CONVEX 497 'GT_PK(2,2)' 295 1180 313 1182 1176 312
+CONVEX 498 'GT_PK(2,2)' 295 1182 312 1183 938 294
+CONVEX 499 'GT_PK(2,2)' 295 1183 294 1184 687 276
+CONVEX 500 'GT_PK(2,2)' 295 1178 277 1184 674 276
+CONVEX 501 'GT_PK(2,2)' 284 1185 265 1186 948 283
+CONVEX 502 'GT_PK(2,2)' 284 1185 265 1187 1188 266
+CONVEX 503 'GT_PK(2,2)' 319 1189 333 1190 950 334
+CONVEX 504 'GT_PK(2,2)' 319 1191 302 1192 1193 318
+CONVEX 505 'GT_PK(2,2)' 319 1189 333 1192 959 318
+CONVEX 506 'GT_PK(2,2)' 227 1194 208 1195 1003 207
+CONVEX 507 'GT_PK(2,2)' 227 1196 226 1195 1197 207
+CONVEX 508 'GT_PK(2,2)' 246 1198 265 1199 1188 266
+CONVEX 509 'GT_PK(2,2)' 246 1200 247 1199 1201 266
+CONVEX 510 'GT_PK(2,2)' 246 1198 265 1202 949 245
+CONVEX 511 'GT_PK(2,2)' 246 1203 227 1200 1204 247
+CONVEX 512 'GT_PK(2,2)' 246 1205 226 1202 1206 245
+CONVEX 513 'GT_PK(2,2)' 246 1203 227 1205 1196 226
+CONVEX 514 'GT_PK(2,2)' 348 1207 335 1208 964 347
+CONVEX 515 'GT_PK(2,2)' 348 1209 358 1210 371 359
+CONVEX 516 'GT_PK(2,2)' 348 1208 347 1209 489 358
+CONVEX 517 'GT_PK(2,2)' 348 1207 335 1211 965 336
+CONVEX 518 'GT_PK(2,2)' 348 1212 349 1210 707 359
+CONVEX 519 'GT_PK(2,2)' 348 1212 349 1211 708 336
+CONVEX 520 'GT_PK(2,2)' 230 1213 211 1214 433 210
+CONVEX 521 'GT_PK(2,2)' 230 1215 229 1214 692 210
+CONVEX 522 'GT_PK(2,2)' 230 1216 231 1213 1112 211
+CONVEX 523 'GT_PK(2,2)' 230 1216 231 1217 1105 250
+CONVEX 524 'GT_PK(2,2)' 271 1218 289 1219 1220 270
+CONVEX 525 'GT_PK(2,2)' 271 1219 270 1221 975 251
+CONVEX 526 'GT_PK(2,2)' 271 1222 272 1223 720 290
+CONVEX 527 'GT_PK(2,2)' 271 1218 289 1223 977 290
+CONVEX 528 'GT_PK(2,2)' 271 1224 252 1221 1101 251
+CONVEX 529 'GT_PK(2,2)' 271 1224 252 1222 1225 272
+CONVEX 530 'GT_PK(2,2)' 288 1226 289 1227 1220 270
+CONVEX 531 'GT_PK(2,2)' 288 1226 289 1228 978 306
+CONVEX 532 'GT_PK(2,2)' 288 1229 305 1228 981 306
+CONVEX 533 'GT_PK(2,2)' 32 1230 20 1231 1020 33
+CONVEX 534 'GT_PK(2,2)' 32 1232 31 1233 902 46
+CONVEX 535 'GT_PK(2,2)' 32 1232 31 1234 904 19
+CONVEX 536 'GT_PK(2,2)' 32 1230 20 1234 1019 19
+CONVEX 537 'GT_PK(2,2)' 32 1231 33 1235 1013 47
+CONVEX 538 'GT_PK(2,2)' 32 1233 46 1235 652 47
+CONVEX 539 'GT_PK(2,2)' 206 1236 187 1237 1005 207
+CONVEX 540 'GT_PK(2,2)' 206 1238 186 1236 1042 187
+CONVEX 541 'GT_PK(2,2)' 206 1239 226 1237 1197 207
+CONVEX 542 'GT_PK(2,2)' 184 1240 204 1241 1242 185
+CONVEX 543 'GT_PK(2,2)' 145 1243 164 1244 1044 144
+CONVEX 544 'GT_PK(2,2)' 145 1245 126 1246 553 125
+CONVEX 545 'GT_PK(2,2)' 145 1244 144 1246 610 125
+CONVEX 546 'GT_PK(2,2)' 183 1247 163 1248 430 182
+CONVEX 547 'GT_PK(2,2)' 183 1249 164 1247 1045 163
+CONVEX 548 'GT_PK(2,2)' 183 1250 184 1249 1251 164
+CONVEX 549 'GT_PK(2,2)' 183 1252 202 1248 605 182
+CONVEX 550 'GT_PK(2,2)' 241 1253 240 1254 815 222
+CONVEX 551 'GT_PK(2,2)' 241 1255 242 1254 1080 222
+CONVEX 552 'GT_PK(2,2)' 241 1255 242 1256 1083 261
+CONVEX 553 'GT_PK(2,2)' 241 1253 240 1257 1258 260
+CONVEX 554 'GT_PK(2,2)' 241 1256 261 1257 806 260
+CONVEX 555 'GT_PK(2,2)' 177 1259 197 1260 505 196
+CONVEX 556 'GT_PK(2,2)' 177 1261 176 1260 1098 196
+CONVEX 557 'GT_PK(2,2)' 177 1259 197 1262 507 178
+CONVEX 558 'GT_PK(2,2)' 233 1263 252 1264 1100 232
+CONVEX 559 'GT_PK(2,2)' 233 1264 232 1265 1108 213
+CONVEX 560 'GT_PK(2,2)' 233 1266 214 1267 833 234
+CONVEX 561 'GT_PK(2,2)' 233 1266 214 1265 1123 213
+CONVEX 562 'GT_PK(2,2)' 253 1268 273 1269 990 272
+CONVEX 563 'GT_PK(2,2)' 253 1270 252 1269 1225 272
+CONVEX 564 'GT_PK(2,2)' 253 1268 273 1271 992 254
+CONVEX 565 'GT_PK(2,2)' 253 1272 233 1270 1263 252
+CONVEX 566 'GT_PK(2,2)' 253 1271 254 1273 945 234
+CONVEX 567 'GT_PK(2,2)' 253 1272 233 1273 1267 234
+CONVEX 568 'GT_PK(2,2)' 84 1274 101 1275 1125 102
+CONVEX 569 'GT_PK(2,2)' 84 1276 68 1277 844 67
+CONVEX 570 'GT_PK(2,2)' 84 1278 83 1277 846 67
+CONVEX 571 'GT_PK(2,2)' 84 1274 101 1278 1129 83
+CONVEX 572 'GT_PK(2,2)' 84 1276 68 1279 1280 85
+CONVEX 573 'GT_PK(2,2)' 84 1275 102 1279 862 85
+CONVEX 574 'GT_PK(2,2)' 301 1281 284 1282 1186 283
+CONVEX 575 'GT_PK(2,2)' 301 1281 284 1283 1284 302
+CONVEX 576 'GT_PK(2,2)' 301 1285 300 1282 804 283
+CONVEX 577 'GT_PK(2,2)' 301 1285 300 1286 538 317
+CONVEX 578 'GT_PK(2,2)' 301 1287 318 1286 956 317
+CONVEX 579 'GT_PK(2,2)' 301 1283 302 1287 1193 318
+CONVEX 580 'GT_PK(2,2)' 320 1288 335 1289 966 321
+CONVEX 581 'GT_PK(2,2)' 320 1288 335 1290 963 334
+CONVEX 582 'GT_PK(2,2)' 320 1291 319 1290 1190 334
+CONVEX 583 'GT_PK(2,2)' 228 1292 227 1293 1204 247
+CONVEX 584 'GT_PK(2,2)' 228 1294 209 1295 690 229
+CONVEX 585 'GT_PK(2,2)' 228 1294 209 1296 694 208
+CONVEX 586 'GT_PK(2,2)' 228 1292 227 1296 1194 208
+CONVEX 587 'GT_PK(2,2)' 269 1297 250 1298 973 270
+CONVEX 588 'GT_PK(2,2)' 269 1299 288 1298 1227 270
+CONVEX 589 'GT_PK(2,2)' 225 1300 206 1301 1239 226
+CONVEX 590 'GT_PK(2,2)' 225 1302 245 1303 596 244
+CONVEX 591 'GT_PK(2,2)' 225 1301 226 1302 1206 245
+CONVEX 592 'GT_PK(2,2)' 166 1304 147 1305 1049 167
+CONVEX 593 'GT_PK(2,2)' 166 1306 186 1305 1043 167
+CONVEX 594 'GT_PK(2,2)' 166 1306 186 1307 1308 185
+CONVEX 595 'GT_PK(2,2)' 203 1309 184 1310 1240 204
+CONVEX 596 'GT_PK(2,2)' 203 1311 183 1309 1250 184
+CONVEX 597 'GT_PK(2,2)' 203 1310 204 1312 1313 223
+CONVEX 598 'GT_PK(2,2)' 203 1311 183 1314 1252 202
+CONVEX 599 'GT_PK(2,2)' 203 1315 222 1312 1082 223
+CONVEX 600 'GT_PK(2,2)' 203 1314 202 1315 816 222
+CONVEX 601 'GT_PK(2,2)' 138 1316 137 1317 633 118
+CONVEX 602 'GT_PK(2,2)' 138 1317 118 1318 628 119
+CONVEX 603 'GT_PK(2,2)' 138 1319 139 1318 1028 119
+CONVEX 604 'GT_PK(2,2)' 157 1320 176 1321 1095 156
+CONVEX 605 'GT_PK(2,2)' 157 1322 177 1320 1261 176
+CONVEX 606 'GT_PK(2,2)' 157 1321 156 1323 821 137
+CONVEX 607 'GT_PK(2,2)' 157 1324 138 1323 1316 137
+CONVEX 608 'GT_PK(2,2)' 249 1325 269 1326 1297 250
+CONVEX 609 'GT_PK(2,2)' 249 1327 230 1328 1215 229
+CONVEX 610 'GT_PK(2,2)' 249 1327 230 1326 1217 250
+CONVEX 611 'GT_PK(2,2)' 287 1329 288 1330 1229 305
+CONVEX 612 'GT_PK(2,2)' 287 1331 269 1329 1299 288
+CONVEX 613 'GT_PK(2,2)' 224 1332 243 1333 1087 223
+CONVEX 614 'GT_PK(2,2)' 224 1334 204 1333 1313 223
+CONVEX 615 'GT_PK(2,2)' 224 1332 243 1335 809 244
+CONVEX 616 'GT_PK(2,2)' 224 1336 225 1335 1303 244
+CONVEX 617 'GT_PK(2,2)' 205 1337 206 1338 1238 186
+CONVEX 618 'GT_PK(2,2)' 205 1339 225 1337 1300 206
+CONVEX 619 'GT_PK(2,2)' 205 1338 186 1340 1308 185
+CONVEX 620 'GT_PK(2,2)' 205 1341 224 1339 1336 225
+CONVEX 621 'GT_PK(2,2)' 205 1342 204 1340 1242 185
+CONVEX 622 'GT_PK(2,2)' 205 1341 224 1342 1334 204
+CONVEX 623 'GT_PK(2,2)' 146 1343 166 1344 1304 147
+CONVEX 624 'GT_PK(2,2)' 146 1344 147 1345 1046 127
+CONVEX 625 'GT_PK(2,2)' 146 1346 126 1345 423 127
+CONVEX 626 'GT_PK(2,2)' 146 1347 145 1346 1245 126
+CONVEX 627 'GT_PK(2,2)' 165 1348 184 1349 1251 164
+CONVEX 628 'GT_PK(2,2)' 165 1350 145 1349 1243 164
+CONVEX 629 'GT_PK(2,2)' 165 1348 184 1351 1241 185
+CONVEX 630 'GT_PK(2,2)' 165 1352 166 1351 1307 185
+CONVEX 631 'GT_PK(2,2)' 165 1353 146 1350 1347 145
+CONVEX 632 'GT_PK(2,2)' 165 1353 146 1352 1343 166
+CONVEX 633 'GT_PK(2,2)' 158 1354 157 1355 1322 177
+CONVEX 634 'GT_PK(2,2)' 158 1356 159 1357 757 178
+CONVEX 635 'GT_PK(2,2)' 158 1355 177 1357 1262 178
+CONVEX 636 'GT_PK(2,2)' 158 1354 157 1358 1324 138
+CONVEX 637 'GT_PK(2,2)' 158 1359 139 1356 1032 159
+CONVEX 638 'GT_PK(2,2)' 158 1358 138 1359 1319 139
+CONVEX 639 'GT_PK(2,2)' 267 1360 247 1361 1201 266
+CONVEX 640 'GT_PK(2,2)' 248 1362 249 1363 1328 229
+CONVEX 641 'GT_PK(2,2)' 248 1364 267 1365 1360 247
+CONVEX 642 'GT_PK(2,2)' 248 1366 228 1363 1295 229
+CONVEX 643 'GT_PK(2,2)' 248 1366 228 1365 1293 247
+CONVEX 644 'GT_PK(2,2)' 268 1367 287 1368 1331 269
+CONVEX 645 'GT_PK(2,2)' 268 1369 248 1370 1364 267
+CONVEX 646 'GT_PK(2,2)' 268 1371 249 1368 1325 269
+CONVEX 647 'GT_PK(2,2)' 268 1369 248 1371 1362 249
+CONVEX 648 'GT_PK(2,2)' 303 1372 319 1373 1191 302
+CONVEX 649 'GT_PK(2,2)' 303 1374 320 1372 1291 319
+CONVEX 650 'GT_PK(2,2)' 286 1375 268 1376 1367 287
+CONVEX 651 'GT_PK(2,2)' 286 1375 268 1377 1370 267
+CONVEX 652 'GT_PK(2,2)' 304 1378 287 1379 1330 305
+CONVEX 653 'GT_PK(2,2)' 304 1380 303 1381 1374 320
+CONVEX 654 'GT_PK(2,2)' 304 1382 286 1378 1376 287
+CONVEX 655 'GT_PK(2,2)' 304 1382 286 1380 1383 303
+CONVEX 656 'GT_PK(2,2)' 304 1379 305 1384 980 321
+CONVEX 657 'GT_PK(2,2)' 304 1381 320 1384 1289 321
+CONVEX 658 'GT_PK(2,2)' 285 1385 286 1386 1383 303
+CONVEX 659 'GT_PK(2,2)' 285 1387 284 1388 1284 302
+CONVEX 660 'GT_PK(2,2)' 285 1386 303 1388 1373 302
+CONVEX 661 'GT_PK(2,2)' 285 1385 286 1389 1377 267
+CONVEX 662 'GT_PK(2,2)' 285 1387 284 1390 1187 266
+CONVEX 663 'GT_PK(2,2)' 285 1389 267 1390 1361 266
END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h4.mesh b/tests/meshes/disc_P2_h4.mesh
old mode 100755
new mode 100644
index cf5de4c..8a11842
--- a/tests/meshes/disc_P2_h4.mesh
+++ b/tests/meshes/disc_P2_h4.mesh
@@ -10,76 +10,312 @@ BEGIN POINTS LIST
POINT 2 -20 20
POINT 3 20 20
POINT 4 0 40
- POINT 5 -17.30114108180553 9.966530148019924
- POINT 6 -9.808147479055082 2.570133591094111
- POINT 7 -1.708558578927821e-05 8.543196483845456
- POINT 8 9.808090002043611 2.570101247796567
- POINT 9 17.30111946939649 9.966492881056432
- POINT 10 -11.11908532087554 19.19371433923335
- POINT 11 -7.338567471994479 11.96760951723277
- POINT 12 7.338553489686806 11.96760527958758
- POINT 13 11.11909943493882 19.19371966673324
- POINT 14 -18.46336467991046 27.68792330197096
- POINT 15 -7.814569052463167 27.16902224808882
- POINT 16 -2.416328877977159e-05 30.67219567518138
- POINT 17 7.814550453131275 27.16904062048118
- POINT 18 18.46334013420301 27.68798225094262
- POINT 19 -14.02734782961414 34.25599918865808
- POINT 20 -7.620060823604273 38.4914756859719
- POINT 21 7.619967037895926 38.49151433342378
- POINT 22 14.02726271722185 34.25608293564759
- POINT 23 -3.669292278790135 10.25540300053911
- POINT 24 -8.542792894639106e-06 14.27159824192273
- POINT 25 -3.66928373599724 15.98380475861638
- POINT 26 4.904036458228911 5.556648865821012
- POINT 27 -8.542792894639106e-06 4.271598241922728
- POINT 28 5.069629237738408 0.6531926679034217
- POINT 29 -4.904082282320435 5.556665037469783
- POINT 30 -5.069635862356059 0.6532010267693861
- POINT 31 -8.57335747552478 7.268871554163439
- POINT 32 -9.228826396435009 15.58066192823306
- POINT 33 -5.55954266043777 19.59685716961667
- POINT 34 -9.466827186669352 23.18136829366108
- POINT 35 -3.907284526231583 23.58451112404441
- POINT 36 -3.907296607875973 28.9206089616351
- POINT 37 -1.208164438988579e-05 25.33609783759069
- POINT 38 3.907263144921248 28.92061814783128
- POINT 39 3.907275226565638 23.58452031024059
- POINT 40 -14.05008341543081 5.766422005880317
- POINT 41 -12.31985427690001 10.96706983262635
- POINT 42 -14.21011320134054 14.58012224362663
- POINT 43 -19.31350236908489 14.80495895853099
- POINT 44 -15.55954266043777 19.59685716961667
- POINT 45 3.809971437303573 34.58185500430258
- POINT 46 3.883930314926162 39.61925469584116
- POINT 47 -1.208164438988579e-05 35.33609783759069
- POINT 48 7.7172587455136 32.83027747695248
- POINT 49 9.46682494403505 23.18138014360721
- POINT 50 5.559549717469412 19.59685983336662
- POINT 51 14.21010945216765 14.58010627389484
- POINT 52 15.55954971746941 19.59685983336662
- POINT 53 19.31349869257853 14.80493815780015
- POINT 54 14.79121978457092 23.44085095883793
- POINT 55 19.61207315056955 23.92003294700594
- POINT 56 13.13894529366714 27.4285114357119
- POINT 57 16.57392195826274 31.19398585576821
- POINT 58 10.92090658517656 30.71256177806439
- POINT 59 11.02884741112402 36.68426558642455
- POINT 60 -3.810042493446526 34.58183568057664
- POINT 61 -3.883965127593389 39.61924484649614
- POINT 62 -11.02892896948328 36.68420469540357
- POINT 63 -7.71731493803372 32.83024896703036
- POINT 64 -10.92095844103865 30.71251071837345
- POINT 65 3.669268202050509 10.25540088171652
- POINT 66 3.669276744843403 15.98380263979379
- POINT 67 9.228826462312814 15.58066247316041
- POINT 68 8.573321745865208 7.268853263692073
- POINT 69 12.31983647954165 10.967049080322
- POINT 70 14.0500594277336 5.76638370796578
- POINT 71 -16.57396817408611 31.19390992193383
- POINT 72 -13.13896686618681 27.42847277502989
- POINT 73 -14.791225000393 23.44081882060215
- POINT 74 -19.61207880049138 23.92000163860839
+ POINT 5 -10.98978892636249 3.289986853546615
+ POINT 6 -7.455051935387742 1.441384732666446
+ POINT 7 -3.676797270081755 0.3408758629801169
+ POINT 8 3.676739140647854 0.3408649912656072
+ POINT 9 7.454956757891998 1.441346499866884
+ POINT 10 10.98967587538561 3.289912503101757
+ POINT 11 -14.0168269073075 5.73365626899654
+ POINT 12 -8.695621440244636 6.296208976859693
+ POINT 13 -4.394745255440499 5.015856566647908
+ POINT 14 -2.026216535175318e-05 4.385124114216329
+ POINT 15 4.394708091285465 5.015856253328598
+ POINT 16 8.695583210536949 6.296192236703892
+ POINT 17 14.01674847505161 5.733579208955796
+ POINT 18 -16.59751417751507 8.841033957952504
+ POINT 19 -11.67153666400569 9.560370517352128
+ POINT 20 -6.622536405170427 9.609178468908505
+ POINT 21 -2.162226938155009 8.907447576607822
+ POINT 22 2.162220418053965 8.907449303560238
+ POINT 23 6.62252892316614 9.609178885793535
+ POINT 24 11.67152235457562 9.560353456050622
+ POINT 25 16.59746793653143 8.840965180813091
+ POINT 26 -18.49296961576042 12.38356548043812
+ POINT 27 -14.03986978753954 13.21961891707463
+ POINT 28 -9.212447689054923 13.42718043490255
+ POINT 29 -4.546978357052273 13.23975192949301
+ POINT 30 5.760553932435131e-06 13.09029577543401
+ POINT 31 4.546984712272912 13.2397591385677
+ POINT 32 9.212451943525352 13.42717994917974
+ POINT 33 14.03987180658499 13.21960569166439
+ POINT 34 18.49294552140193 12.3835069787666
+ POINT 35 -19.60575567023449 16.04850096809653
+ POINT 36 -15.59452670078516 17.30489743540965
+ POINT 37 -11.19255363614599 17.32291243784231
+ POINT 38 -6.720002186738463 17.55851232809086
+ POINT 39 -2.521105171955536 17.0288301192291
+ POINT 40 2.521117530994832 17.02884382666544
+ POINT 41 6.720008173371727 17.55852412828754
+ POINT 42 11.19255813733148 17.32291152297285
+ POINT 43 15.59452813708109 17.30489873028883
+ POINT 44 19.60574841112116 16.04846495145881
+ POINT 45 -16.35730659116254 21.75725594233062
+ POINT 46 -12.54544836995473 21.48138724705098
+ POINT 47 -8.37129847568881 21.60726175061301
+ POINT 48 -4.053718777686841 21.85246502790269
+ POINT 49 -1.430589398276894e-05 24.01054233578156
+ POINT 50 4.05371501425693 21.85249206836341
+ POINT 51 8.371300119263841 21.60726988024046
+ POINT 52 12.54545081863551 21.48139080472586
+ POINT 53 16.35731330216852 21.75725990853536
+ POINT 54 -19.41056153872311 24.81976148284177
+ POINT 55 -14.80560392580181 26.07573876068267
+ POINT 56 -10.66746926752378 25.66425346686257
+ POINT 57 -6.065699906353569 25.80431103098134
+ POINT 58 -2.285109034351877 27.41452583361899
+ POINT 59 2.285117889708415 27.41450890210915
+ POINT 60 6.065725475366363 25.80433146618176
+ POINT 61 10.66748147994728 25.66426492608582
+ POINT 62 14.80560831647502 26.07574769863441
+ POINT 63 19.41055542162303 24.81978611809871
+ POINT 64 -17.79052993253167 29.13767173407599
+ POINT 65 -12.53266642765302 30.28076603601422
+ POINT 66 -8.408829224822554 29.44178330973553
+ POINT 67 -4.486611626819454 30.93433334096026
+ POINT 68 -3.455844492966306e-06 31.78686138258002
+ POINT 69 4.486608079340947 30.93433387532503
+ POINT 70 8.408846377235559 29.44180970477908
+ POINT 71 12.53266137297764 30.28079181313681
+ POINT 72 17.79050469035144 29.13772087902333
+ POINT 73 -15.42321743407593 32.73280660267888
+ POINT 74 -12.36825118230115 35.71707233206979
+ POINT 75 -8.654673025388929 33.6487632940044
+ POINT 76 -4.244918305693361 35.1578478808239
+ POINT 77 4.244868056856853 35.1578586139012
+ POINT 78 8.654638880706619 33.64878973380078
+ POINT 79 12.36818408598653 35.71712513202336
+ POINT 80 15.42316052899461 32.73287553137968
+ POINT 81 -8.358587775297027 38.16959026512966
+ POINT 82 -4.173840349470416 39.55962823616952
+ POINT 83 -3.315758252031564e-05 36.08253135745896
+ POINT 84 4.173782294307199 39.55964062450516
+ POINT 85 8.358512109833965 38.16962507345837
+ POINT 86 -15.31869198252731 11.03032643751357
+ POINT 87 -14.13452542076038 9.200702237652315
+ POINT 88 -12.85570322577262 11.38999471721338
+ POINT 89 14.81719997183304 15.26225221097661
+ POINT 90 12.61621497195824 15.27125860731862
+ POINT 91 13.39354313720629 17.31390512663084
+ POINT 92 16.26640866399346 12.80155633521549
+ POINT 93 15.31866987155821 11.03028543623874
+ POINT 94 17.63438934978107 10.56451880793851
+ POINT 95 17.04373682924151 14.84420285452771
+ POINT 96 -10.59366972652097 31.96476466500931
+ POINT 97 -10.47074782623779 29.86127467287488
+ POINT 98 -8.531751125105743 31.54527330186997
+ POINT 99 -12.45045880497709 32.99891918404201
+ POINT 100 -10.51146210384504 34.68291781303709
+ POINT 101 -8.506630400342978 35.90917677956703
+ POINT 102 -10.43571526797337 37.06153095754958
+ POINT 103 -17.63442337101413 10.56458323774599
+ POINT 104 -16.26641970164998 12.80159219875637
+ POINT 105 -15.3858183445685 7.22202811794831
+ POINT 106 -12.8441817856566 7.647013393174333
+ POINT 107 16.29805650341323 27.60673428882887
+ POINT 108 15.16158303166454 29.70925634608007
+ POINT 109 13.66913484472633 28.17826975588561
+ POINT 110 -1.142556245098185 29.6006936080995
+ POINT 111 4.427678269136592e-06 27.41451736786407
+ POINT 112 1.142557216931961 29.60068514234459
+ POINT 113 -17.04374815827279 14.84423145792389
+ POINT 114 -14.81719824416235 15.26225817624214
+ POINT 115 15.97592071962481 19.53107931941209
+ POINT 116 18.17865665108426 20.87862995426768
+ POINT 117 17.79726406854054 18.65244936514441
+ POINT 118 11.62616187505517 13.32339282042206
+ POINT 119 10.20250504042842 15.3750457360763
+ POINT 120 6.879718327899132 13.33346954387372
+ POINT 121 7.917490433345746 11.51817941748664
+ POINT 122 5.584756817719526 11.42446901218062
+ POINT 123 7.545654146317784 19.582897004264
+ POINT 124 8.956283155351606 17.4407178256302
+ POINT 125 9.781929128297662 19.46509070160666
+ POINT 126 7.96623005844854 15.49285203873364
+ POINT 127 5.633496442822319 15.39914163342762
+ POINT 128 12.8556970805803 11.3899795738575
+ POINT 129 14.13449514555352 9.200659318431857
+ POINT 130 10.44198714905048 11.49376670261518
+ POINT 131 9.147025638870879 9.584766170922078
+ POINT 132 -13.97794193086447 31.50678631934655
+ POINT 133 -13.97561719584198 34.30671603178849
+ POINT 134 -16.70387650845763 30.99911431489088
+ POINT 135 -15.16159818009234 29.7092188850451
+ POINT 136 -6.301753040495194 36.66371907297678
+ POINT 137 -6.449795665541145 34.40330558741415
+ POINT 138 -4.209379327581889 37.35873805849671
+ POINT 139 -6.304639255162508 38.98029279438281
+ POINT 140 4.209325175582026 37.35874961920318
+ POINT 141 6.301690083345409 36.66374184367979
+ POINT 142 6.304573775735958 38.98031527820729
+ POINT 143 -13.66913517672742 28.17825239834845
+ POINT 144 -16.29806692916674 27.60670524737933
+ POINT 145 -17.10808273226246 25.44775012176222
+ POINT 146 -18.72542076142402 27.02556955988556
+ POINT 147 10.51141148334658 34.68295743291207
+ POINT 148 8.506575495270292 35.90920740362957
+ POINT 149 10.4356453552653 37.06157496167121
+ POINT 150 6.449753468781736 34.40332417385099
+ POINT 151 10.59365012684213 31.96479077346879
+ POINT 152 8.531742628971088 31.54529971928993
+ POINT 153 10.4707538751066 29.86130075895795
+ POINT 154 12.45042272948209 32.99895847258009
+ POINT 155 17.60013827410112 16.67668184087382
+ POINT 156 19.90119304214559 18.01442401696686
+ POINT 157 19.13728303754552 14.18928652402979
+ POINT 158 13.97555586519206 34.30677709224583
+ POINT 159 13.97791095098612 31.50683367225824
+ POINT 160 16.70383744452203 30.99917471256351
+ POINT 161 -17.60014118550983 16.67669920175309
+ POINT 162 -19.90119484636033 18.01444229663801
+ POINT 163 -17.79726335039258 18.65244871770483
+ POINT 164 -19.13729740986643 14.18933437204147
+ POINT 165 14.45138206040202 21.61932535663061
+ POINT 166 13.67552956755527 23.77856925168013
+ POINT 167 15.58146080932177 23.91650380358488
+ POINT 168 10.45837546894968 21.54433034248316
+ POINT 169 11.8690044779835 19.40215116384935
+ POINT 170 14.0699894778583 19.39314476750734
+ POINT 171 18.7254069306502 27.02560730650771
+ POINT 172 17.10808186904902 25.44776690836656
+ POINT 173 17.88393436189578 23.28852301331703
+ POINT 174 19.85209195747333 22.42784944192063
+ POINT 175 8.366603477656822 25.73429819613379
+ POINT 176 9.53816392859142 27.55303731543246
+ POINT 177 7.237285926300961 27.62307058548042
+ POINT 178 11.60007142646246 27.97252836961132
+ POINT 179 12.73654489821115 25.87000631236012
+ POINT 180 9.519390799605562 23.63576740316314
+ POINT 181 7.218512797315102 23.70580067321111
+ POINT 182 11.6064661492914 23.57282786540584
+ POINT 183 5.059720244811647 23.82841176727259
+ POINT 184 6.212507566760386 21.72988097430193
+ POINT 185 5.386861593814329 19.70550809832548
+ POINT 186 3.169416451982673 24.63350048523628
+ POINT 187 4.175421682537388 26.60942018414546
+ POINT 188 12.84413541481362 7.64696633250321
+ POINT 189 15.38575758374665 7.221953946724504
+ POINT 190 6.545145650911207 5.656024245016244
+ POINT 191 7.659056066851544 7.952685561248713
+ POINT 192 5.508618507225803 7.312517569561066
+ POINT 193 10.18355278255628 7.928272846377257
+ POINT 194 11.35616584279428 6.014885722829844
+ POINT 195 9.84262954296128 4.793052369902824
+ POINT 196 12.5627706312312 4.437969385077269
+ POINT 197 5.924832424588732 3.228601376597741
+ POINT 198 5.59298116705137 0.7979540467762278
+ POINT 199 4.03572361596666 2.678360622297102
+ POINT 200 8.075269984214474 3.868769368285388
+ POINT 201 9.268518322543754 2.277286464498438
+ POINT 202 -3.385860330585666 29.17442958728963
+ POINT 203 -2.243307541331974 31.36059736177015
+ POINT 204 -4.365764966256407 33.04609061089208
+ POINT 205 -2.122460880768927 33.47235463170196
+ POINT 206 -5.276155766586511 28.3693221859708
+ POINT 207 -6.447720425821004 30.1880583253479
+ POINT 208 -7.237264565588061 27.62304717035844
+ POINT 209 -4.175404470352722 26.60941843230016
+ POINT 210 -6.570642326104192 32.29154831748234
+ POINT 211 -2.122475731637941 35.62018961914143
+ POINT 212 -1.830671350664097e-05 33.93469637001949
+ POINT 213 2.122417449637166 35.62019498568008
+ POINT 214 2.12243230050618 33.47235999824061
+ POINT 215 -2.086936753526468 37.82107979681424
+ POINT 216 -1.657879126015782e-05 38.04126567872948
+ POINT 217 -2.098502568614956 39.88960238033538
+ POINT 218 2.086874568362339 37.82108599098206
+ POINT 219 2.09847524707464 39.8896054946081
+ POINT 220 5.276166777353655 28.3693326707534
+ POINT 221 6.447727228288253 30.18807179005206
+ POINT 222 3.385862984524681 29.17442138871709
+ POINT 223 6.570623480023783 32.2915618045629
+ POINT 224 4.365738068098899 33.04609624461312
+ POINT 225 2.243302311748227 31.36059762895253
+ POINT 226 -15.97591664597385 19.53107668887014
+ POINT 227 -18.17865329558127 20.87862797116531
+ POINT 228 -17.88393406494282 23.2885087125862
+ POINT 229 -19.85209345422734 22.42783684408701
+ POINT 230 -15.58145525848218 23.91649735150665
+ POINT 231 1.260561645774382 15.05956980104973
+ POINT 232 3.534051121633872 15.13430148261657
+ POINT 233 2.273495236413422 13.16502745700086
+ POINT 234 4.62056285218328 17.29368397747649
+ POINT 235 3.287416272625881 19.44066794751443
+ POINT 236 1.260558765497416 18.51442191333272
+ POINT 237 2.026857507128465 20.92624603418171
+ POINT 238 -1.260549705700802 15.05956294733156
+ POINT 239 -3.534041764503905 15.13429102436105
+ POINT 240 -2.27348629824917 13.16502385246351
+ POINT 241 -4.620553679346999 17.29367122365998
+ POINT 242 -5.633490271895369 15.39913212879194
+ POINT 243 6.179519647986353e-06 17.02883697294727
+ POINT 244 -1.260552585977768 18.51441505961455
+ POINT 245 3.354602565163439 11.07360422106397
+ POINT 246 4.392374670610053 9.258314094676887
+ POINT 247 1.081113089303949 10.99887253949712
+ POINT 248 3.278464254669715 6.961652778444417
+ POINT 249 -8.956277911442228 17.44071238296659
+ POINT 250 -9.781926055917403 19.46508709422766
+ POINT 251 -7.545650331213636 19.58288703935193
+ POINT 252 -13.39354016846558 17.31390493662598
+ POINT 253 -12.61621171184277 15.27126567745847
+ POINT 254 -7.659078922707532 7.952693722884099
+ POINT 255 -10.18357905212516 7.928289747105911
+ POINT 256 -9.147036534588061 9.584774493130316
+ POINT 257 -11.35622417377607 6.014932622928116
+ POINT 258 -9.842705183303561 4.793097915203154
+ POINT 259 -12.5628648971392 4.438046414902402
+ POINT 260 -8.07533668781619 3.868796854763069
+ POINT 261 -9.268622145138828 2.27734158433505
+ POINT 262 1.081100077944307 6.646286708888283
+ POINT 263 2.197343914560057 4.700490183772463
+ POINT 264 1.838359439241251 2.362994552740968
+ POINT 265 -1.013108267587659e-05 2.192562057108165
+ POINT 266 1.846253788767268 0.0853985780217391
+ POINT 267 -1.081110588800538 10.99887167602092
+ POINT 268 -3.354602647603641 11.07359975305042
+ POINT 269 -4.392381671662718 9.258313022758163
+ POINT 270 -5.58475738111135 11.42446519920076
+ POINT 271 -3.260050521758373e-06 8.90744844008403
+ POINT 272 -1.08112360016018 6.646285845412075
+ POINT 273 -8.366584586938671 25.73428224892195
+ POINT 274 -9.519383871606294 23.63575760873779
+ POINT 275 -7.21849919102119 23.70578639079717
+ POINT 276 -9.538149246173166 27.55301838829905
+ POINT 277 -11.6000678475884 27.97250975143839
+ POINT 278 -12.73653659666279 25.86999611377262
+ POINT 279 -5.059709342020205 23.82838802944201
+ POINT 280 -6.212508626687826 21.72986338925784
+ POINT 281 -3.287411974821189 19.44064757356589
+ POINT 282 -2.026859388843421 20.92623251395134
+ POINT 283 -3.169413906019359 24.63349543076084
+ POINT 284 -5.386860482212652 19.70548867799678
+ POINT 285 -11.86900100305036 19.40214984244664
+ POINT 286 -10.45837342282177 21.54432449883199
+ POINT 287 -11.60645881873926 23.57282035695677
+ POINT 288 -14.45137748055864 21.6193215946908
+ POINT 289 -14.06998753536995 19.39314234123031
+ POINT 290 -13.67552614787827 23.77856300386682
+ POINT 291 -7.966224937896692 15.49284638149671
+ POINT 292 -6.879713023053598 13.33346618219778
+ POINT 293 -10.20250066260046 15.37504643637243
+ POINT 294 -7.917492047112675 11.51817945190553
+ POINT 295 -10.44199217653031 11.49377547612734
+ POINT 296 -11.62615873829723 13.32339967598859
+ POINT 297 -1.838408766123554 2.362999988598223
+ POINT 298 -1.846281530475226 0.08540130760665365
+ POINT 299 -3.278486096797754 6.961652071627865
+ POINT 300 -2.197382758802926 4.700490340432118
+ POINT 301 -6.545183347842568 5.6560327717538
+ POINT 302 -5.92489859541412 3.228620649657177
+ POINT 303 -5.508640830305463 7.312517517778206
+ POINT 304 -4.035771262761127 2.678366214814012
+ POINT 305 -5.593056997119752 0.797976657516179
+ POINT 306 -2.026866541790412 22.93150368184212
+ POINT 307 -7.152946991384468e-06 22.00527116789078
+ POINT 308 -1.14256167012293 25.71253408470027
+ POINT 309 1.142551791907216 25.71252561894535
+ POINT 310 2.026850354181474 22.93151720207248
END POINTS LIST
@@ -87,35 +323,145 @@ END POINTS LIST
BEGIN MESH STRUCTURE DESCRIPTION
-CONVEX 0 'GT_PK(2,2)' 7 23 11 24 25 1
-CONVEX 1 'GT_PK(2,2)' 7 26 8 27 28 0
-CONVEX 2 'GT_PK(2,2)' 7 29 6 27 30 0
-CONVEX 3 'GT_PK(2,2)' 7 29 6 23 31 11
-CONVEX 4 'GT_PK(2,2)' 10 32 11 33 25 1
-CONVEX 5 'GT_PK(2,2)' 10 34 15 33 35 1
-CONVEX 6 'GT_PK(2,2)' 16 36 15 37 35 1
-CONVEX 7 'GT_PK(2,2)' 16 38 17 37 39 1
-CONVEX 8 'GT_PK(2,2)' 5 40 6 41 31 11
-CONVEX 9 'GT_PK(2,2)' 5 42 10 43 44 2
-CONVEX 10 'GT_PK(2,2)' 5 42 10 41 32 11
-CONVEX 11 'GT_PK(2,2)' 21 45 16 46 47 4
-CONVEX 12 'GT_PK(2,2)' 21 45 16 48 38 17
-CONVEX 13 'GT_PK(2,2)' 13 49 17 50 39 1
-CONVEX 14 'GT_PK(2,2)' 13 51 9 52 53 3
-CONVEX 15 'GT_PK(2,2)' 13 54 18 52 55 3
-CONVEX 16 'GT_PK(2,2)' 13 54 18 49 56 17
-CONVEX 17 'GT_PK(2,2)' 22 57 18 58 56 17
-CONVEX 18 'GT_PK(2,2)' 22 59 21 58 48 17
-CONVEX 19 'GT_PK(2,2)' 20 60 16 61 47 4
-CONVEX 20 'GT_PK(2,2)' 20 62 19 63 64 15
-CONVEX 21 'GT_PK(2,2)' 20 60 16 63 36 15
-CONVEX 22 'GT_PK(2,2)' 12 65 7 66 24 1
-CONVEX 23 'GT_PK(2,2)' 12 67 13 66 50 1
-CONVEX 24 'GT_PK(2,2)' 12 65 7 68 26 8
-CONVEX 25 'GT_PK(2,2)' 12 69 9 68 70 8
-CONVEX 26 'GT_PK(2,2)' 12 67 13 69 51 9
-CONVEX 27 'GT_PK(2,2)' 14 71 19 72 64 15
-CONVEX 28 'GT_PK(2,2)' 14 73 10 74 44 2
-CONVEX 29 'GT_PK(2,2)' 14 73 10 72 34 15
+CONVEX 0 'GT_PK(2,2)' 18 86 27 87 88 19
+CONVEX 1 'GT_PK(2,2)' 33 89 43 90 91 42
+CONVEX 2 'GT_PK(2,2)' 33 92 34 93 94 25
+CONVEX 3 'GT_PK(2,2)' 33 89 43 92 95 34
+CONVEX 4 'GT_PK(2,2)' 65 96 75 97 98 66
+CONVEX 5 'GT_PK(2,2)' 65 96 75 99 100 74
+CONVEX 6 'GT_PK(2,2)' 81 101 75 102 100 74
+CONVEX 7 'GT_PK(2,2)' 26 103 18 104 86 27
+CONVEX 8 'GT_PK(2,2)' 11 105 18 106 87 19
+CONVEX 9 'GT_PK(2,2)' 72 107 62 108 109 71
+CONVEX 10 'GT_PK(2,2)' 58 110 68 111 112 59
+CONVEX 11 'GT_PK(2,2)' 36 113 26 114 104 27
+CONVEX 12 'GT_PK(2,2)' 53 115 43 116 117 3
+CONVEX 13 'GT_PK(2,2)' 32 118 33 119 90 42
+CONVEX 14 'GT_PK(2,2)' 32 120 31 121 122 23
+CONVEX 15 'GT_PK(2,2)' 41 123 51 124 125 42
+CONVEX 16 'GT_PK(2,2)' 41 126 32 124 119 42
+CONVEX 17 'GT_PK(2,2)' 41 126 32 127 120 31
+CONVEX 18 'GT_PK(2,2)' 24 128 33 129 93 25
+CONVEX 19 'GT_PK(2,2)' 24 130 32 131 121 23
+CONVEX 20 'GT_PK(2,2)' 24 130 32 128 118 33
+CONVEX 21 'GT_PK(2,2)' 73 132 65 133 99 74
+CONVEX 22 'GT_PK(2,2)' 73 132 65 134 135 64
+CONVEX 23 'GT_PK(2,2)' 76 136 81 137 101 75
+CONVEX 24 'GT_PK(2,2)' 76 138 82 136 139 81
+CONVEX 25 'GT_PK(2,2)' 77 140 84 141 142 85
+CONVEX 26 'GT_PK(2,2)' 55 143 65 144 135 64
+CONVEX 27 'GT_PK(2,2)' 55 145 54 144 146 64
+CONVEX 28 'GT_PK(2,2)' 78 147 79 148 149 85
+CONVEX 29 'GT_PK(2,2)' 78 150 77 148 141 85
+CONVEX 30 'GT_PK(2,2)' 78 151 71 152 153 70
+CONVEX 31 'GT_PK(2,2)' 78 147 79 151 154 71
+CONVEX 32 'GT_PK(2,2)' 44 155 43 156 117 3
+CONVEX 33 'GT_PK(2,2)' 44 155 43 157 95 34
+CONVEX 34 'GT_PK(2,2)' 80 158 79 159 154 71
+CONVEX 35 'GT_PK(2,2)' 80 160 72 159 108 71
+CONVEX 36 'GT_PK(2,2)' 35 161 36 162 163 2
+CONVEX 37 'GT_PK(2,2)' 35 161 36 164 113 26
+CONVEX 38 'GT_PK(2,2)' 52 165 53 166 167 62
+CONVEX 39 'GT_PK(2,2)' 52 168 51 169 125 42
+CONVEX 40 'GT_PK(2,2)' 52 170 43 169 91 42
+CONVEX 41 'GT_PK(2,2)' 52 165 53 170 115 43
+CONVEX 42 'GT_PK(2,2)' 63 171 72 172 107 62
+CONVEX 43 'GT_PK(2,2)' 63 173 53 172 167 62
+CONVEX 44 'GT_PK(2,2)' 63 173 53 174 116 3
+CONVEX 45 'GT_PK(2,2)' 61 175 60 176 177 70
+CONVEX 46 'GT_PK(2,2)' 61 178 71 176 153 70
+CONVEX 47 'GT_PK(2,2)' 61 179 62 178 109 71
+CONVEX 48 'GT_PK(2,2)' 61 175 60 180 181 51
+CONVEX 49 'GT_PK(2,2)' 61 182 52 179 166 62
+CONVEX 50 'GT_PK(2,2)' 61 182 52 180 168 51
+CONVEX 51 'GT_PK(2,2)' 50 183 60 184 181 51
+CONVEX 52 'GT_PK(2,2)' 50 185 41 184 123 51
+CONVEX 53 'GT_PK(2,2)' 50 183 60 186 187 59
+CONVEX 54 'GT_PK(2,2)' 17 188 24 189 129 25
+CONVEX 55 'GT_PK(2,2)' 16 190 15 191 192 23
+CONVEX 56 'GT_PK(2,2)' 16 193 24 191 131 23
+CONVEX 57 'GT_PK(2,2)' 16 194 17 195 196 10
+CONVEX 58 'GT_PK(2,2)' 16 194 17 193 188 24
+CONVEX 59 'GT_PK(2,2)' 9 197 15 198 199 8
+CONVEX 60 'GT_PK(2,2)' 9 200 16 201 195 10
+CONVEX 61 'GT_PK(2,2)' 9 200 16 197 190 15
+CONVEX 62 'GT_PK(2,2)' 67 202 58 203 110 68
+CONVEX 63 'GT_PK(2,2)' 67 204 76 203 205 68
+CONVEX 64 'GT_PK(2,2)' 67 206 57 207 208 66
+CONVEX 65 'GT_PK(2,2)' 67 206 57 202 209 58
+CONVEX 66 'GT_PK(2,2)' 67 210 75 207 98 66
+CONVEX 67 'GT_PK(2,2)' 67 204 76 210 137 75
+CONVEX 68 'GT_PK(2,2)' 83 211 76 212 205 68
+CONVEX 69 'GT_PK(2,2)' 83 213 77 212 214 68
+CONVEX 70 'GT_PK(2,2)' 83 215 82 216 217 4
+CONVEX 71 'GT_PK(2,2)' 83 211 76 215 138 82
+CONVEX 72 'GT_PK(2,2)' 83 218 84 216 219 4
+CONVEX 73 'GT_PK(2,2)' 83 213 77 218 140 84
+CONVEX 74 'GT_PK(2,2)' 69 220 60 221 177 70
+CONVEX 75 'GT_PK(2,2)' 69 220 60 222 187 59
+CONVEX 76 'GT_PK(2,2)' 69 223 78 221 152 70
+CONVEX 77 'GT_PK(2,2)' 69 223 78 224 150 77
+CONVEX 78 'GT_PK(2,2)' 69 225 68 222 112 59
+CONVEX 79 'GT_PK(2,2)' 69 224 77 225 214 68
+CONVEX 80 'GT_PK(2,2)' 45 226 36 227 163 2
+CONVEX 81 'GT_PK(2,2)' 45 228 54 227 229 2
+CONVEX 82 'GT_PK(2,2)' 45 230 55 228 145 54
+CONVEX 83 'GT_PK(2,2)' 40 231 30 232 233 31
+CONVEX 84 'GT_PK(2,2)' 40 234 41 232 127 31
+CONVEX 85 'GT_PK(2,2)' 40 235 50 236 237 1
+CONVEX 86 'GT_PK(2,2)' 40 235 50 234 185 41
+CONVEX 87 'GT_PK(2,2)' 39 238 30 239 240 29
+CONVEX 88 'GT_PK(2,2)' 39 241 38 239 242 29
+CONVEX 89 'GT_PK(2,2)' 39 243 40 244 236 1
+CONVEX 90 'GT_PK(2,2)' 39 243 40 238 231 30
+CONVEX 91 'GT_PK(2,2)' 22 245 31 246 122 23
+CONVEX 92 'GT_PK(2,2)' 22 247 30 245 233 31
+CONVEX 93 'GT_PK(2,2)' 22 248 15 246 192 23
+CONVEX 94 'GT_PK(2,2)' 37 249 38 250 251 47
+CONVEX 95 'GT_PK(2,2)' 37 252 36 253 114 27
+CONVEX 96 'GT_PK(2,2)' 12 254 20 255 256 19
+CONVEX 97 'GT_PK(2,2)' 12 257 11 255 106 19
+CONVEX 98 'GT_PK(2,2)' 12 257 11 258 259 5
+CONVEX 99 'GT_PK(2,2)' 12 260 6 258 261 5
+CONVEX 100 'GT_PK(2,2)' 14 262 22 263 248 15
+CONVEX 101 'GT_PK(2,2)' 14 264 8 265 266 0
+CONVEX 102 'GT_PK(2,2)' 14 263 15 264 199 8
+CONVEX 103 'GT_PK(2,2)' 21 267 30 268 240 29
+CONVEX 104 'GT_PK(2,2)' 21 269 20 268 270 29
+CONVEX 105 'GT_PK(2,2)' 21 271 22 267 247 30
+CONVEX 106 'GT_PK(2,2)' 21 272 14 271 262 22
+CONVEX 107 'GT_PK(2,2)' 56 273 57 274 275 47
+CONVEX 108 'GT_PK(2,2)' 56 273 57 276 208 66
+CONVEX 109 'GT_PK(2,2)' 56 277 65 276 97 66
+CONVEX 110 'GT_PK(2,2)' 56 278 55 277 143 65
+CONVEX 111 'GT_PK(2,2)' 48 279 57 280 275 47
+CONVEX 112 'GT_PK(2,2)' 48 281 39 282 244 1
+CONVEX 113 'GT_PK(2,2)' 48 279 57 283 209 58
+CONVEX 114 'GT_PK(2,2)' 48 284 38 280 251 47
+CONVEX 115 'GT_PK(2,2)' 48 281 39 284 241 38
+CONVEX 116 'GT_PK(2,2)' 46 285 37 286 250 47
+CONVEX 117 'GT_PK(2,2)' 46 287 56 286 274 47
+CONVEX 118 'GT_PK(2,2)' 46 288 45 289 226 36
+CONVEX 119 'GT_PK(2,2)' 46 285 37 289 252 36
+CONVEX 120 'GT_PK(2,2)' 46 288 45 290 230 55
+CONVEX 121 'GT_PK(2,2)' 46 287 56 290 278 55
+CONVEX 122 'GT_PK(2,2)' 28 291 38 292 242 29
+CONVEX 123 'GT_PK(2,2)' 28 293 37 291 249 38
+CONVEX 124 'GT_PK(2,2)' 28 294 20 292 270 29
+CONVEX 125 'GT_PK(2,2)' 28 294 20 295 256 19
+CONVEX 126 'GT_PK(2,2)' 28 296 27 295 88 19
+CONVEX 127 'GT_PK(2,2)' 28 293 37 296 253 27
+CONVEX 128 'GT_PK(2,2)' 7 297 14 298 265 0
+CONVEX 129 'GT_PK(2,2)' 13 299 21 300 272 14
+CONVEX 130 'GT_PK(2,2)' 13 301 12 302 260 6
+CONVEX 131 'GT_PK(2,2)' 13 301 12 303 254 20
+CONVEX 132 'GT_PK(2,2)' 13 299 21 303 269 20
+CONVEX 133 'GT_PK(2,2)' 13 304 7 302 305 6
+CONVEX 134 'GT_PK(2,2)' 13 304 7 300 297 14
+CONVEX 135 'GT_PK(2,2)' 49 306 48 307 282 1
+CONVEX 136 'GT_PK(2,2)' 49 306 48 308 283 58
+CONVEX 137 'GT_PK(2,2)' 49 308 58 309 111 59
+CONVEX 138 'GT_PK(2,2)' 49 310 50 307 237 1
+CONVEX 139 'GT_PK(2,2)' 49 310 50 309 186 59
END MESH STRUCTURE DESCRIPTION
diff --git a/tests/meshes/disc_P2_h3.mesh b/tests/meshes/disc_P2_h6.mesh
old mode 100755
new mode 100644
similarity index 100%
rename from tests/meshes/disc_P2_h3.mesh
rename to tests/meshes/disc_P2_h6.mesh
diff --git a/tests/meshes/disc_P2_h4.mesh b/tests/meshes/disc_P2_h8.mesh
old mode 100755
new mode 100644
similarity index 100%
copy from tests/meshes/disc_P2_h4.mesh
copy to tests/meshes/disc_P2_h8.mesh
diff --git a/tests/meshes/disc_with_a_hole.mesh b/tests/meshes/disc_with_a_hole.mesh
new file mode 100644
index 0000000..4ad9757
--- /dev/null
+++ b/tests/meshes/disc_with_a_hole.mesh
@@ -0,0 +1,7512 @@
+% GETFEM MESH FILE
+% GETFEM VERSION 4.2
+
+
+
+BEGIN POINTS LIST
+
+ POINT 0 -0.1831400501705945 1.085
+ POINT 1 -0.1221366915211338 1.085
+ POINT 2 -0.06094447842118987 1.085
+ POINT 3 -4.860124806940584e-07 1.085
+ POINT 4 0.06094347858902648 1.085
+ POINT 5 0.1221355988213509 1.085
+ POINT 6 0.1831387786308221 1.085
+ POINT 7 -0.1831400501705936 1.115
+ POINT 8 -0.1221366915211331 1.115
+ POINT 9 -0.06094447842118909 1.115
+ POINT 10 -4.860124798811236e-07 1.115
+ POINT 11 0.06094347858902724 1.115
+ POINT 12 0.1221355988213518 1.115
+ POINT 13 0.1831387786308231 1.115
+ POINT 14 -0.9579485469910241 1.1
+ POINT 15 -0.9536121630153567 1.018251607755177
+ POINT 16 -0.9536121630153566 1.181748392244824
+ POINT 17 -0.9468729466281971 0.9252444492003281
+ POINT 18 -0.9468729466281977 1.274755550799672
+ POINT 19 -0.93263521502612 1.141923963122789
+ POINT 20 -0.9326352150261203 1.058076036877212
+ POINT 21 -0.9384580616517235 0.9718816511266565
+ POINT 22 -0.9384580616517229 1.228118348873344
+ POINT 23 -0.9304268511318274 0.8328953827914626
+ POINT 24 -0.9304268511318392 1.367104617208541
+ POINT 25 -0.9269182185738766 0.8790968356683193
+ POINT 26 -0.9269182185738729 1.320903164331681
+ POINT 27 -0.9062100436549875 1.1
+ POINT 28 -0.9060117823578904 1.184731690469689
+ POINT 29 -0.9060117823578909 1.015268309530311
+ POINT 30 -0.9116750129830854 0.7953791674260838
+ POINT 31 -0.9116750129830821 1.404620832573915
+ POINT 32 -0.9014153706221945 0.9263928027184778
+ POINT 33 -0.9014153706221937 1.273607197281522
+ POINT 34 -0.8913382910627831 0.7515168232776571
+ POINT 35 -0.8913382910627824 1.448483176722343
+ POINT 36 -0.8910241196205029 0.8376417009322997
+ POINT 37 -0.8910241196204957 1.362358299067698
+ POINT 38 -0.8799438187176032 1.142390923174468
+ POINT 39 -0.8799438187176035 1.057609076825532
+ POINT 40 -0.8787882002865459 0.9711580252863642
+ POINT 41 -0.8787882002865449 1.228841974713636
+ POINT 42 -0.8724782356643878 0.8824374427521267
+ POINT 43 -0.8724782356643878 1.317562557247874
+ POINT 44 -0.8699121486478247 0.7067856954716143
+ POINT 45 -0.8699121486478235 1.493214304528386
+ POINT 46 -0.8667175752970341 0.79550709009108
+ POINT 47 -0.8667175752970344 1.404492909908921
+ POINT 48 -0.8540354674354467 1.1
+ POINT 49 -0.8531328775677696 1.01474633216935
+ POINT 50 -0.8531328775677687 1.18525366783065
+ POINT 51 -0.8472207301893622 1.537648799477751
+ POINT 52 -0.8472207301893637 0.6623512005222491
+ POINT 53 -0.8498584036833633 0.9274188286182075
+ POINT 54 -0.8498584036833616 1.272581171381792
+ POINT 55 -0.8435832968746951 0.7519064816213191
+ POINT 56 -0.8435832968746929 1.448093518378681
+ POINT 57 -0.8443903506489219 0.8396677111162839
+ POINT 58 -0.8443903506489211 1.360332288883716
+ POINT 59 -0.8276864754909862 1.057710784930937
+ POINT 60 -0.8276864754909858 1.142289215069063
+ POINT 61 -0.8232614921768798 0.6185477829702379
+ POINT 62 -0.8232614921768779 1.581452217029762
+ POINT 63 -0.8258047515447828 0.9716218656801762
+ POINT 64 -0.8258047515447814 1.228378134319824
+ POINT 65 -0.8221449469150279 0.8842854910087741
+ POINT 66 -0.8221449469150255 1.315714508991226
+ POINT 67 -0.8203126522485878 1.492170870380266
+ POINT 68 -0.8203126522485906 0.7078291296197341
+ POINT 69 -0.8190558696042978 0.7966532151011669
+ POINT 70 -0.8190558696042948 1.403346784898833
+ POINT 71 -0.7983221854253684 0.5755453437180023
+ POINT 72 -0.7983221854253664 1.624454656281997
+ POINT 73 -0.8028892693828614 1.1
+ POINT 74 -0.8005634868146716 1.015300169238529
+ POINT 75 -0.8005634868146705 1.184699830761471
+ POINT 76 -0.7986676233827895 0.9286676329158237
+ POINT 77 -0.7986676233827874 1.271332367084176
+ POINT 78 -0.7965130016801985 1.536259216264676
+ POINT 79 -0.7965130016802018 0.663740783735324
+ POINT 80 -0.7945869550868088 1.446928347139331
+ POINT 81 -0.7945869550868121 0.7530716528606685
+ POINT 82 -0.7955040160159019 0.8414284328141315
+ POINT 83 -0.795504016015899 1.358571567185868
+ POINT 84 -0.7734357367667966 0.5337815592089615
+ POINT 85 -0.7734357367667943 1.666218440791038
+ POINT 86 -0.7722740567141997 0.619814647715211
+ POINT 87 -0.7722740567141955 1.580185352284789
+ POINT 88 -0.7739963348175709 0.9724986644189636
+ POINT 89 -0.7739963348175691 1.227501335581036
+ POINT 90 -0.7755505331466257 1.058796084019805
+ POINT 91 -0.7755505331466251 1.141203915980195
+ POINT 92 -0.7720240529066452 0.8860820882134751
+ POINT 93 -0.7720240529066424 1.313917911786525
+ POINT 94 -0.7702507239895221 1.490907010219453
+ POINT 95 -0.7702507239895265 0.709092989780547
+ POINT 96 -0.76982298456209 0.7982959211876208
+ POINT 97 -0.7698229845620863 1.401704078812379
+ POINT 98 -0.7521378046271575 1.703497142396713
+ POINT 99 -0.7521378046271593 0.4965028576032874
+ POINT 100 -0.7480942399279058 1.624037848954842
+ POINT 101 -0.7480942399279102 0.575962151045158
+ POINT 102 -0.7482441579594751 0.9300877171211201
+ POINT 103 -0.7482441579594726 1.26991228287888
+ POINT 104 -0.7458669675392005 1.535145698505869
+ POINT 105 -0.7458669675392061 0.6648543014941309
+ POINT 106 -0.756718824632699 1.1
+ POINT 107 -0.7446340139491506 0.7546417390354253
+ POINT 108 -0.7446340139491456 1.445358260964575
+ POINT 109 -0.7456625525131874 0.8435263090980402
+ POINT 110 -0.7456625525131837 1.356473690901959
+ POINT 111 -0.7470223347898509 1.183443029239035
+ POINT 112 -0.747022334789852 1.016556970760965
+ POINT 113 -0.7236784888240529 0.9726960144026661
+ POINT 114 -0.7236784888240511 1.227303985597334
+ POINT 115 -0.7253397751034656 0.5313369060971803
+ POINT 116 -0.7253397751034607 1.66866309390282
+ POINT 117 -0.7215559556489026 1.579684102924607
+ POINT 118 -0.7215559556489094 0.6203158970753926
+ POINT 119 -0.7219490798732888 0.8884547255052579
+ POINT 120 -0.7219490798732855 1.311545274494742
+ POINT 121 -0.7196995645808442 0.7104615311810405
+ POINT 122 -0.7196995645808377 1.489538468818959
+ POINT 123 -0.7196079367913081 0.8004234109856573
+ POINT 124 -0.719607936791303 1.399576589014342
+ POINT 125 -0.7091611426460883 1.723937819091995
+ POINT 126 -0.7091611426460922 0.4760621809080049
+ POINT 127 -0.7151235525104215 1.067169930334382
+ POINT 128 -0.7151235525104211 1.132830069665618
+ POINT 129 -0.69921123536385 0.9320870848205438
+ POINT 130 -0.6992112353638473 1.267912915179456
+ POINT 131 -0.6976773356884957 0.5750576230876238
+ POINT 132 -0.6976773356884879 1.624942376912377
+ POINT 133 -0.6949633474332183 0.6657840944266995
+ POINT 134 -0.6949633474332102 1.5342159055733
+ POINT 135 -0.6939282952573032 0.7565353044660686
+ POINT 136 -0.6939282952572965 1.443464695533931
+ POINT 137 -0.6951276108726241 0.8464216934386539
+ POINT 138 -0.6951276108726195 1.353578306561346
+ POINT 139 -0.6922036434212111 1.18632051565429
+ POINT 140 -0.6922036434212123 1.01367948434571
+ POINT 141 -0.6753210546869803 1.769388371883719
+ POINT 142 -0.675321054686985 0.4306116281162803
+ POINT 143 -0.6745567877543186 0.5277491450628998
+ POINT 144 -0.6745567877543097 1.6722508549371
+ POINT 145 -0.6799892910827381 0.9707238072725279
+ POINT 146 -0.6799892910827361 1.229276192727472
+ POINT 147 -0.6704619845507307 0.620537843127872
+ POINT 148 -0.6704619845507207 1.579462156872128
+ POINT 149 -0.6686224004883864 0.7119206060201243
+ POINT 150 -0.6686224004883776 1.488079393979875
+ POINT 151 -0.6714759484894501 0.8925653889507473
+ POINT 152 -0.6714759484894464 1.307434611049253
+ POINT 153 -0.6672196581697956 1.1
+ POINT 154 -0.6685479877883514 0.8031319063219492
+ POINT 155 -0.668547987788345 1.39686809367805
+ POINT 156 -0.6496004465471991 1.719899253762834
+ POINT 157 -0.6496004465472092 0.4801007462371655
+ POINT 158 -0.6445595490931657 1.808268187714327
+ POINT 159 -0.6445595490931704 0.3917318122856721
+ POINT 160 -0.6504593917898083 1.052904489962882
+ POINT 161 -0.6504593917898077 1.147095510037118
+ POINT 162 -0.6461566239124039 1.625487484166899
+ POINT 163 -0.6461566239124161 0.5745125158331007
+ POINT 164 -0.6497255195828517 1.260735836481562
+ POINT 165 -0.6497255195828544 0.939264163518438
+ POINT 166 -0.6436333246528698 0.666692780789526
+ POINT 167 -0.6436333246528585 1.533307219210474
+ POINT 168 -0.6425287818496805 0.7586960779899323
+ POINT 169 -0.6425287818496718 1.441303922010067
+ POINT 170 -0.6435876776757695 0.8504664172361277
+ POINT 171 -0.643587677675764 1.349533582763872
+ POINT 172 -0.634100201211382 0.9960643941018079
+ POINT 173 -0.6341002012113808 1.203935605898192
+ POINT 174 -0.6217896878708183 1.764252933581088
+ POINT 175 -0.621789687870829 0.4357470664189113
+ POINT 176 -0.6215069401240921 0.5279530044066069
+ POINT 177 -0.6215069401240777 1.672046995593393
+ POINT 178 -0.619040503528354 1.841814462459029
+ POINT 179 -0.6190405035283585 0.3581855375409709
+ POINT 180 -0.618843615567465 0.6209351862433928
+ POINT 181 -0.6188436155674508 1.579064813756607
+ POINT 182 -0.617043598407388 0.7134321911740658
+ POINT 183 -0.6170435984073763 1.486567808825934
+ POINT 184 -0.6193474858382423 0.8990704639437634
+ POINT 185 -0.6193474858382384 1.300929536056236
+ POINT 186 -0.6165600119752158 0.8063526180627931
+ POINT 187 -0.6165600119752079 1.393647381937206
+ POINT 188 -0.5958600487122456 0.4819057105934332
+ POINT 189 -0.5958600487122292 1.718094289406567
+ POINT 190 -0.5967298688224213 0.9498401683928475
+ POINT 191 -0.5967298688224194 1.250159831607152
+ POINT 192 -0.5940252787520831 0.5747782731172082
+ POINT 193 -0.5940252787520656 1.625221726882792
+ POINT 194 -0.5954896416081709 1.806923712884393
+ POINT 195 -0.5954896416081811 0.3930762871156072
+ POINT 196 -0.5919130112536681 0.6676343194020075
+ POINT 197 -0.5919130112536528 1.532365680597992
+ POINT 198 -0.5905043018224629 0.7609227824966485
+ POINT 199 -0.5905043018224519 1.439077217503351
+ POINT 200 -0.5904786418180429 1.34444817934922
+ POINT 201 -0.5904786418180489 0.8555518206507792
+ POINT 202 -0.575127329340774 1.858033892824939
+ POINT 203 -0.5751273293407817 0.3419661071750617
+ POINT 204 -0.5688893294108635 0.5285309367958891
+ POINT 205 -0.5688893294108427 1.671469063204111
+ POINT 206 -0.5699160733827983 1.763365938000253
+ POINT 207 -0.5699160733828161 0.4366340619997466
+ POINT 208 -0.5669183449505661 0.6215112570496228
+ POINT 209 -0.5669183449505467 1.578488742950377
+ POINT 210 -0.5650891335111676 0.7148423435816584
+ POINT 211 -0.5650891335111525 1.485157656418341
+ POINT 212 -0.5638960833070213 0.9074983940941561
+ POINT 213 -0.5638960833070181 1.292501605905844
+ POINT 214 -0.5636630743979608 0.8096368805838361
+ POINT 215 -0.5636630743979515 1.390363119416164
+ POINT 216 -0.5449743599532946 1.809662886419388
+ POINT 217 -0.5449743599533131 0.3903371135806124
+ POINT 218 -0.5434229926384195 0.4824501944563475
+ POINT 219 -0.5434229926383954 1.717549805543652
+ POINT 220 -0.5430521415286259 1.895242374740083
+ POINT 221 -0.5430521415286342 0.3047576252599174
+ POINT 222 -0.5418595483133686 0.5752192949818696
+ POINT 223 -0.5418595483133447 1.624780705018131
+ POINT 224 -0.5399685050783705 0.6685031015863688
+ POINT 225 -0.5399685050783506 1.531496898413631
+ POINT 226 -0.5381012848662108 0.7627851976799476
+ POINT 227 -0.5381012848661972 1.437214802320052
+ POINT 228 -0.5355171767024853 0.8610324986397297
+ POINT 229 -0.5355171767024792 1.33896750136027
+ POINT 230 -0.5179824057448147 1.763738206807861
+ POINT 231 -0.5179824057448419 0.4362617931921388
+ POINT 232 -0.519403182715177 1.856065951290971
+ POINT 233 -0.519403182715195 0.3439340487090296
+ POINT 234 -0.5166215410729682 0.5288899566205453
+ POINT 235 -0.5166215410729396 1.671110043379455
+ POINT 236 -0.5149088578556342 0.6220593342190522
+ POINT 237 -0.514908857855609 1.577940665780948
+ POINT 238 -0.5129874226342817 0.7159109791949766
+ POINT 239 -0.5129874226342628 1.484089020805023
+ POINT 240 -0.5104959390297588 0.8118208434204569
+ POINT 241 -0.5104959390297482 1.388179156579543
+ POINT 242 -0.4965146932664501 1.909150534791506
+ POINT 243 -0.4965146932664645 0.2908494652084942
+ POINT 244 -0.4912413368669863 0.4825234201576784
+ POINT 245 -0.4912413368669525 1.717476579842322
+ POINT 246 -0.4925631063907636 1.810351297168797
+ POINT 247 -0.4925631063907935 0.3896487028312039
+ POINT 248 -0.4897752908246767 0.5755716668934836
+ POINT 249 -0.4897752908246454 1.624428333106517
+ POINT 250 -0.4879831713995912 0.6691422716770096
+ POINT 251 -0.4879831713995662 1.53085772832299
+ POINT 252 -0.4857614830075255 0.7638114089954339
+ POINT 253 -0.485761483007509 1.436188591004566
+ POINT 254 -0.4814747973003526 0.8621820437841374
+ POINT 255 -0.4814747973003471 1.337817956215863
+ POINT 256 -0.4670674080750463 1.857879821141432
+ POINT 257 -0.4670674080750777 0.3421201788585687
+ POINT 258 -0.4657746186627555 1.764003008376716
+ POINT 259 -0.4657746186627946 0.4359969916232846
+ POINT 260 -0.4645126915802672 0.5290599673893566
+ POINT 261 -0.4645126915802291 1.670940032610644
+ POINT 262 -0.4623856843938286 1.944420267015488
+ POINT 263 -0.4623856843938449 0.2555797329845126
+ POINT 264 -0.4629410966899151 0.6224391085042588
+ POINT 265 -0.462941096689883 1.577560891495741
+ POINT 266 -0.4580955715048124 0.8119278994184609
+ POINT 267 -0.4580955715048002 1.388072100581539
+ POINT 268 -0.4609766955247612 0.7165020192704445
+ POINT 269 -0.4609766955247377 1.483497980729556
+ POINT 270 -0.4401232684303554 1.904157213678314
+ POINT 271 -0.4401232684303871 0.2958427863216869
+ POINT 272 -0.4401545616500645 1.810802447177152
+ POINT 273 -0.4401545616501087 0.3891975528228482
+ POINT 274 -0.4391191521648905 1.717506584308547
+ POINT 275 -0.439119152164936 0.4824934156914535
+ POINT 276 -0.4377936415351498 0.5757681175189491
+ POINT 277 -0.4377936415351097 1.624231882481051
+ POINT 278 -0.4360909537421102 0.6694853518073688
+ POINT 279 -0.436090953742079 1.530514648192631
+ POINT 280 -0.4338103127142864 0.7640435281884114
+ POINT 281 -0.4338103127142665 1.435956471811589
+ POINT 282 -0.4302748410770543 0.8584164300184868
+ POINT 283 -0.4302748410770477 1.341583569981514
+ POINT 284 -0.4149827817557805 1.955463681139268
+ POINT 285 -0.4149827817558082 0.2445363188607328
+ POINT 286 -0.4141383485381396 1.85761728626324
+ POINT 287 -0.4141383485381885 0.3423827137367611
+ POINT 288 -0.4135741794697709 1.764161586174935
+ POINT 289 -0.4135741794698244 0.4358384138250659
+ POINT 290 -0.41251222034567 0.5291055101211619
+ POINT 291 -0.412512220345621 1.670894489878838
+ POINT 292 -0.4110790395919397 0.6226060770753183
+ POINT 293 -0.4110790395918997 1.577393922924682
+ POINT 294 -0.4091825773029129 0.7166973031402304
+ POINT 295 -0.4091825773028843 1.48330269685977
+ POINT 296 -0.4065557213228956 0.8113195233369715
+ POINT 297 -0.4065557213228809 1.388680476663029
+ POINT 298 -0.3878177241637965 1.904459667441801
+ POINT 299 -0.3878177241638489 0.2955403325582004
+ POINT 300 -0.3878105653955269 1.810873471718969
+ POINT 301 -0.3878105653955889 0.3891265282810324
+ POINT 302 -0.3870825043499591 1.717565514490002
+ POINT 303 -0.3870825043500182 0.4824344855099987
+ POINT 304 -0.3859255058922946 1.624194721717216
+ POINT 305 -0.3859255058923445 0.575805278282784
+ POINT 306 -0.3843482688640849 0.6695628310602136
+ POINT 307 -0.3843482688640468 1.530437168939787
+ POINT 308 -0.3822282887441195 0.7639980698204516
+ POINT 309 -0.3822282887440953 1.436001930179549
+ POINT 310 -0.3795651628319828 0.8578626349660576
+ POINT 311 -0.3795651628319746 1.342137365033943
+ POINT 312 -0.3799015643868359 1.987343093404322
+ POINT 313 -0.3799015643868685 0.2126569065956826
+ POINT 314 -0.3617896156133397 1.857542016936602
+ POINT 315 -0.3617896156134105 0.3424579830633995
+ POINT 316 -0.3614806854826632 1.764246791718439
+ POINT 317 -0.3614806854827337 0.4357532082815622
+ POINT 318 -0.3606197767026246 1.670944264036021
+ POINT 319 -0.360619776702686 0.52905573596398
+ POINT 320 -0.3593418972919841 0.6225776898113793
+ POINT 321 -0.3593418972919356 1.577422310188621
+ POINT 322 -0.3605276892868896 1.948840408370762
+ POINT 323 -0.3605276892869442 0.2511595916292396
+ POINT 324 -0.3575970791860329 0.7166250671087057
+ POINT 325 -0.3575970791859986 1.483374932891295
+ POINT 326 -0.3553427284982968 0.8114961487669258
+ POINT 327 -0.3553427284982786 1.388503851233074
+ POINT 328 -0.3356875125154271 1.810917973760963
+ POINT 329 -0.3356875125155104 0.3890820262390376
+ POINT 330 -0.335157048346053 1.717658196619142
+ POINT 331 -0.3351570483461277 0.482341803380859
+ POINT 332 -0.3355245735139815 1.903899610337385
+ POINT 333 -0.3355245735140612 0.2961003896626168
+ POINT 334 -0.3341723112410051 1.624293627419084
+ POINT 335 -0.3341723112410657 0.5757063725809165
+ POINT 336 -0.3327535375331993 0.6694147422614259
+ POINT 337 -0.332753537533154 1.530585257738575
+ POINT 338 -0.3375061587390842 1.994293567901896
+ POINT 339 -0.3375061587391351 0.2057064320981111
+ POINT 340 -0.3308495912553663 0.7638227447492506
+ POINT 341 -0.3308495912553371 1.43617725525075
+ POINT 342 -0.328810360056786 0.8607993531865977
+ POINT 343 -0.3288103600567755 1.339200646813402
+ POINT 344 -0.3095345464975335 1.764349243305467
+ POINT 345 -0.3095345464976234 0.4356507566945342
+ POINT 346 -0.3097191543686472 1.85753325661615
+ POINT 347 -0.3097191543687449 0.3424667433838504
+ POINT 348 -0.3088398255628163 1.671078203532153
+ POINT 349 -0.3088398255628911 0.5289217964678473
+ POINT 350 -0.3096718884392127 1.950900695336235
+ POINT 351 -0.3096718884393007 0.2490993046637691
+ POINT 352 -0.3077291497463801 0.6223864728884371
+ POINT 353 -0.3077291497463225 1.577613527111563
+ POINT 354 -0.306172683160504 0.716284198562098
+ POINT 355 -0.3061726831604634 1.483715801437903
+ POINT 356 -0.3041296240891921 0.8114748468954843
+ POINT 357 -0.3041296240891693 1.388525153104516
+ POINT 358 -0.2835874733130658 2.004440242113223
+ POINT 359 -0.2835874733131581 0.1955597578867781
+ POINT 360 -0.2772466330276022 0.8601184919549703
+ POINT 361 -0.2772466330275861 1.339881508045031
+ POINT 362 -0.2836560889267754 1.904217317085991
+ POINT 363 -0.2836560889268903 0.2957826829140113
+ POINT 364 -0.2837647736115534 1.81101623472558
+ POINT 365 -0.2837647736116612 0.3889837652744201
+ POINT 366 -0.2833575350390876 1.717804586619344
+ POINT 367 -0.2833575350391791 0.4821954133806566
+ POINT 368 -0.2825325955655086 0.5755041278804186
+ POINT 369 -0.2825325955654366 1.624495872119582
+ POINT 370 -0.2812997548474108 0.6690602390775401
+ POINT 371 -0.281299754847358 1.53093976092246
+ POINT 372 -0.2795956382422121 0.7631610738056374
+ POINT 373 -0.2795956382421773 1.436838926194363
+ POINT 374 -0.2572655922241447 1.951183962849591
+ POINT 375 -0.2572655922242799 0.2488160371504113
+ POINT 376 -0.2529349224681767 0.809865175538766
+ POINT 377 -0.2529349224681485 1.390134824461235
+ POINT 378 -0.2578829701045607 1.857651936822879
+ POINT 379 -0.2578829701046907 0.3423480631771214
+ POINT 380 -0.2577425430864999 1.764500887213571
+ POINT 381 -0.2577425430866109 0.4354991127864294
+ POINT 382 -0.2571757259716498 1.671275247462491
+ POINT 383 -0.2571757259717387 0.5287247525375093
+ POINT 384 -0.2562386854421237 0.622070131376782
+ POINT 385 -0.2562386854420569 1.577929868623218
+ POINT 386 -0.25490323827345 0.7156418326642326
+ POINT 387 -0.2549032382734029 1.484358167335768
+ POINT 388 -0.247515761905271 0.9053924999306833
+ POINT 389 -0.2475157619052596 1.294607500069318
+ POINT 390 -0.2459772544047217 2.03365599971047
+ POINT 391 -0.2459772544048423 0.1663440002895439
+ POINT 392 -0.2318788292926477 1.90419787195102
+ POINT 393 -0.2318788292928055 0.2958021280489813
+ POINT 394 -0.2258246365432377 0.8552157958428594
+ POINT 395 -0.2258246365432157 1.344784204157142
+ POINT 396 -0.2320262703182353 1.811174885016426
+ POINT 397 -0.2320262703183704 0.3888251149835743
+ POINT 398 -0.2285359905104811 0.7619592367733946
+ POINT 399 -0.2285359905104407 1.438040763226607
+ POINT 400 -0.231685286592747 1.717997160532642
+ POINT 401 -0.2316852865928559 0.4820028394673587
+ POINT 402 -0.2310029555128524 1.624763968414791
+ POINT 403 -0.2310029555129357 0.5752360315852098
+ POINT 404 -0.2299849506647595 0.6685496414543
+ POINT 405 -0.2299849506646991 1.531450358545701
+ POINT 406 -0.2292160537848134 1.994589520532671
+ POINT 407 -0.229216053784972 0.2054104794673292
+ POINT 408 -0.214514385481446 0.9447671870322673
+ POINT 409 -0.214514385481437 1.255232812967733
+ POINT 410 -0.2062484648026199 1.857802637391785
+ POINT 411 -0.2062484648027862 0.342197362608215
+ POINT 412 -0.2060889900021632 1.764699478117377
+ POINT 413 -0.2060889900022961 0.4353005218826227
+ POINT 414 -0.2021987051369457 0.8075707074959839
+ POINT 415 -0.2021987051369123 1.392429292504017
+ POINT 416 -0.2056203462366304 1.671508253837725
+ POINT 417 -0.2056203462367331 0.528491746162276
+ POINT 418 -0.2038013626451649 0.7148206591846478
+ POINT 419 -0.2038013626451117 1.485179340815353
+ POINT 420 -0.2048618944080998 0.6216846131170866
+ POINT 421 -0.204861894408024 1.578315386882914
+ POINT 422 -0.1984570533138456 0.8968959470979802
+ POINT 423 -0.1984570533138287 1.303104052902021
+ POINT 424 -0.2057008646608839 1.950035935258586
+ POINT 425 -0.2057008646610764 0.2499640647414151
+ POINT 426 -0.2042883871958971 2.036634636264992
+ POINT 427 -0.2042883871960733 0.1633653637350263
+ POINT 428 -0.1804292192291089 1.811398186562769
+ POINT 429 -0.1804292192292725 0.3886018134372312
+ POINT 430 -0.1801183211920823 1.718217299855282
+ POINT 431 -0.180118321192208 0.4817827001447186
+ POINT 432 -0.1795732127989675 0.5749422833728902
+ POINT 433 -0.1795732127988737 1.625057716627111
+ POINT 434 -0.1787913695417206 0.6679896324594679
+ POINT 435 -0.1787913695416534 1.532010367540533
+ POINT 436 -0.1777306308467431 0.7606928914972395
+ POINT 437 -0.1777306308466975 1.439307108502762
+ POINT 438 -0.1761150662600552 0.8517257472138611
+ POINT 439 -0.1761150662600285 1.34827425278614
+ POINT 440 -0.1804933442862886 1.904295770672358
+ POINT 441 -0.1804933442864951 0.2957042293276425
+ POINT 442 -0.1802856585414381 1.995150774889356
+ POINT 443 -0.180285658541672 0.2048492251106524
+ POINT 444 -0.1725727862162227 0.9828520564076326
+ POINT 445 -0.1725727862162142 1.217147943592367
+ POINT 446 -0.1735564404921586 0.9312606089659764
+ POINT 447 -0.1735564404921447 1.268739391034023
+ POINT 448 -0.1541526126400332 0.5282518492809056
+ POINT 449 -0.1541526126399179 1.671748150719095
+ POINT 450 -0.154530131391553 1.764931914853332
+ POINT 451 -0.1545301313917068 0.4350680851466682
+ POINT 452 -0.1535791871825837 0.621298306631623
+ POINT 453 -0.1535791871825 1.578701693368378
+ POINT 454 -0.1528325181370678 0.7140498653340365
+ POINT 455 -0.1528325181370093 1.485950134665964
+ POINT 456 -0.1547717476144791 1.858106431657039
+ POINT 457 -0.154771747614683 0.3418935683429608
+ POINT 458 -0.1519150991039568 0.8059220132079378
+ POINT 459 -0.151915099103919 1.394077986792063
+ POINT 460 -0.1513610431229057 0.894028060148353
+ POINT 461 -0.1513610431228849 1.305971939851647
+ POINT 462 -0.147804818839815 1.036855176374575
+ POINT 463 -0.1478048188398104 1.163144823625425
+ POINT 464 -0.1550991949402817 1.95069351523123
+ POINT 465 -0.1550991949405417 0.2493064847687724
+ POINT 466 -0.1569764140553453 2.04144617697824
+ POINT 467 -0.156976414055625 0.1585538230217833
+ POINT 468 -0.1309751068178905 0.9389040867766143
+ POINT 469 -0.1309751068178742 1.261095913223385
+ POINT 470 -0.1282208626306776 0.5746657924978447
+ POINT 471 -0.1282208626305747 1.625334207502156
+ POINT 472 -0.1286218935034544 0.4815622592137688
+ POINT 473 -0.1286218935033138 1.718437740786232
+ POINT 474 -0.127680179313051 0.6674959411266428
+ POINT 475 -0.1276801793129778 1.532504058873358
+ POINT 476 -0.1289027838811274 1.81168728507047
+ POINT 477 -0.1289027838813178 0.3883127149295301
+ POINT 478 -0.1270557007486456 0.7597738334003341
+ POINT 479 -0.1270557007485957 1.440226166599667
+ POINT 480 -0.1267470095238308 0.8504728314998437
+ POINT 481 -0.1267470095238004 1.349527168500157
+ POINT 482 -0.1292722592925101 1.904911721181042
+ POINT 483 -0.1292722592927681 0.2950882788189579
+ POINT 484 -0.1307440516123454 1.997627406610912
+ POINT 485 -0.1307440516126796 0.2023725933890967
+ POINT 486 -0.112279811851176 0.9877401836834668
+ POINT 487 -0.1122798118511645 1.212259816316533
+ POINT 488 -0.1028966861265167 0.8953257112251324
+ POINT 489 -0.1028966861264929 1.304674288774867
+ POINT 490 -0.1027417013820717 0.5280384155148649
+ POINT 491 -0.1027417013819461 1.671961584485136
+ POINT 492 -0.1023601528280935 0.6209735736280839
+ POINT 493 -0.1023601528280035 1.579026426371916
+ POINT 494 -0.1030161123983802 0.4348339482304783
+ POINT 495 -0.1030161123982087 1.765166051769522
+ POINT 496 -0.1019126566536072 0.7134888804715439
+ POINT 497 -0.1019126566535444 1.486511119528457
+ POINT 498 -0.1081932122028892 2.046052095033941
+ POINT 499 -0.1081932122033292 0.1539479049660801
+ POINT 500 -0.1032984807255899 1.858556510106172
+ POINT 501 -0.1032984807258285 0.3414434898938275
+ POINT 502 -0.1015974267283907 0.8051584060324877
+ POINT 503 -0.1015974267283494 1.394841593967513
+ POINT 504 -0.1042203088923835 1.952134912512847
+ POINT 505 -0.1042203088927207 0.2478650874871551
+ POINT 506 -0.08795858082150917 1.036808160914416
+ POINT 507 -0.08795858082150269 1.163191839085584
+ POINT 508 -0.08005102713617487 0.9417084396066751
+ POINT 509 -0.08005102713615674 1.258291560393324
+ POINT 510 -0.07691463820892808 0.5744484002646579
+ POINT 511 -0.07691463820881841 1.625551599735342
+ POINT 512 -0.07716046516680464 0.4813763589883581
+ POINT 513 -0.07716046516665287 1.718623641011642
+ POINT 514 -0.07660465823349831 0.6671435604336916
+ POINT 515 -0.07660465823342097 1.532856439566309
+ POINT 516 -0.07736748909008549 0.38801960080118
+ POINT 517 -0.07736748908987366 1.81198039919882
+ POINT 518 -0.07661903634428543 0.8504747388397425
+ POINT 519 -0.07661903634425246 1.349525261160258
+ POINT 520 -0.07632120107526325 1.440726303194311
+ POINT 521 -0.07632120107531613 0.7592736968056897
+ POINT 522 -0.07781263600537069 1.905722361794162
+ POINT 523 -0.07781263600567627 0.2942776382058379
+ POINT 524 -0.08004363613137362 2.000383500313594
+ POINT 525 -0.08004363613183517 0.1996164996864095
+ POINT 526 -0.0559999113467252 0.9893277891269358
+ POINT 527 -0.05599991134671244 1.210672210873064
+ POINT 528 -0.05788507663100856 2.050160025819993
+ POINT 529 -0.05788507663169315 0.1498399741800107
+ POINT 530 -0.05198335124933791 0.8962396156636803
+ POINT 531 -0.05198335124931239 1.30376038433632
+ POINT 532 -0.05135874934970781 0.5278871653211805
+ POINT 533 -0.05135874934957552 1.67211283467882
+ POINT 534 -0.05117150950945746 0.6207582375488547
+ POINT 535 -0.05117150950936337 1.579241762451146
+ POINT 536 -0.0515046804156326 0.4346511272408036
+ POINT 537 -0.05150468041544897 1.765348872759197
+ POINT 538 -0.05097073817771281 0.7131714239874237
+ POINT 539 -0.05097073817764739 1.486828576012577
+ POINT 540 -0.05093445858608758 1.395070917976774
+ POINT 541 -0.05093445858613099 0.8049290820232267
+ POINT 542 -0.0516959102662103 0.3410315293615078
+ POINT 543 -0.05169591026594614 1.858968470638492
+ POINT 544 -0.05250263262737111 1.953562362789113
+ POINT 545 -0.05250263262777843 0.2464376372108871
+ POINT 546 -0.02923843550413714 1.037189576765915
+ POINT 547 -0.02923843550413003 1.162810423234085
+ POINT 548 -0.02684567612083516 0.9427237096296219
+ POINT 549 -0.02684567612081612 1.257276290370378
+ POINT 550 -0.0256290642485476 0.5743275888022862
+ POINT 551 -0.02562906424843439 1.625672411197714
+ POINT 552 -0.02570927719867766 0.4812664935568532
+ POINT 553 -0.02570927719851984 1.718733506443147
+ POINT 554 -0.02553130176181111 0.6669630951720619
+ POINT 555 -0.02553130176173156 1.533036904827938
+ POINT 556 -0.02564107701666078 0.8506292219506194
+ POINT 557 -0.02564107701662644 1.34937077804938
+ POINT 558 -0.02578274546385875 0.3878300199219967
+ POINT 559 -0.02578274546363475 1.812169980078004
+ POINT 560 -0.02545725541026908 1.440924035204501
+ POINT 561 -0.02545725541032354 0.7590759647954988
+ POINT 562 -0.02597533670440194 0.2937075616122788
+ POINT 563 -0.02597533670406646 1.906292438387721
+ POINT 564 -0.02715752861408654 2.00283812650318
+ POINT 565 -0.02715752861466844 0.1971618734968165
+ POINT 566 0.0001060566618052758 2.056464602496978
+ POINT 567 0.0001060566607955944 0.1435353975030218
+ POINT 568 4.498954657408062e-05 1.954195654033885
+ POINT 569 4.498954613619913e-05 0.2458043459661152
+ POINT 570 1.301074709369493e-05 0.5278316963996699
+ POINT 571 1.301074722832493e-05 1.67216830360033
+ POINT 572 1.853005188068379e-05 0.4345804987277953
+ POINT 573 1.853005206862521e-05 1.765419501272205
+ POINT 574 9.029618820962205e-06 0.6206829100622077
+ POINT 575 9.029618916473857e-06 1.579317089937792
+ POINT 576 2.755002613394829e-05 0.3408645880775799
+ POINT 577 2.755002640766755e-05 1.85913541192242
+ POINT 578 6.117981920893762e-06 0.7130709894837995
+ POINT 579 6.117981987239091e-06 1.486929010516201
+ POINT 580 3.927235068396062e-06 0.8048899804697156
+ POINT 581 3.927235112537805e-06 1.395110019530284
+ POINT 582 2.131519148037421e-06 0.8965385089999506
+ POINT 583 2.131519174138948e-06 1.303461491000049
+ POINT 584 8.073892274146564e-07 0.9897637009991882
+ POINT 585 8.073892405002767e-07 1.210236299000812
+ POINT 586 0.02727829340400103 2.002838877420526
+ POINT 587 0.02727829340341847 0.1971611225794771
+ POINT 588 0.02604353488916887 0.2937073833946612
+ POINT 589 0.0260435348895045 1.906292616605339
+ POINT 590 0.02546714582459855 1.440924077721913
+ POINT 591 0.02546714582454408 0.7590759222780874
+ POINT 592 0.02582735778321789 0.3878298550693518
+ POINT 593 0.02582735778344194 1.812170144930649
+ POINT 594 0.02564698863023528 0.8506291916172056
+ POINT 595 0.02564698863026962 1.349370808382794
+ POINT 596 0.02554615920114567 0.6669630262519477
+ POINT 597 0.02554615920122523 1.533036973748052
+ POINT 598 0.02574006902144038 0.48126636691
+ POINT 599 0.02574006902159822 1.71873363309
+ POINT 600 0.02565070317739629 0.5743274990655421
+ POINT 601 0.0256507031775095 1.625672500934458
+ POINT 602 0.02684851501042848 0.9427236954490001
+ POINT 603 0.0268485150104475 1.257276304551
+ POINT 604 0.02923879114824334 1.03718958958726
+ POINT 605 0.02923879114825042 1.162810410412739
+ POINT 606 0.0525861270216425 1.953562690093548
+ POINT 607 0.05258612702123463 0.2464373099064527
+ POINT 608 0.05174897302004708 0.3410311812195033
+ POINT 609 0.0517489730203114 1.858968818780497
+ POINT 610 0.05094217170570704 0.8049290195242967
+ POINT 611 0.05094217170575045 1.395070980475703
+ POINT 612 0.05098278126367017 0.7131713123080727
+ POINT 613 0.05098278126373558 1.486828687691927
+ POINT 614 0.0515408144742448 0.434650835259082
+ POINT 615 0.05154081447442849 1.765349164740918
+ POINT 616 0.05118926474222068 0.6207580769387208
+ POINT 617 0.05118926474231477 1.579241923061279
+ POINT 618 0.05138426530563364 0.5278869551172036
+ POINT 619 0.05138426530576595 1.672113044882796
+ POINT 620 0.05198751576055614 0.8962395638261084
+ POINT 621 0.05198751576058167 1.303760436173892
+ POINT 622 0.05802794017971325 2.05015957752752
+ POINT 623 0.05802794017902615 0.1498404224724769
+ POINT 624 0.05600147421400192 0.9893278020497333
+ POINT 625 0.05600147421401467 1.210672197950267
+ POINT 626 0.08013870529564407 2.000383166832803
+ POINT 627 0.08013870529518136 0.1996168331671935
+ POINT 628 0.07787444443800853 1.905722818218862
+ POINT 629 0.07787444443770257 0.2942771817811382
+ POINT 630 0.07633077349412344 0.7592735790435056
+ POINT 631 0.0763307734941763 1.440726420956494
+ POINT 632 0.07662470108458261 0.8504746639849161
+ POINT 633 0.07662470108461558 1.349525336015084
+ POINT 634 0.07740948908851965 0.3880191176644888
+ POINT 635 0.07740948908873163 1.811980882335512
+ POINT 636 0.07661904253835244 0.6671433511099205
+ POINT 637 0.07661904253842976 1.532856648890079
+ POINT 638 0.07718995146307245 0.4813759790234425
+ POINT 639 0.07718995146322427 1.718624020976558
+ POINT 640 0.07693550811663503 0.5744481243242622
+ POINT 641 0.07693550811674467 1.625551875675737
+ POINT 642 0.080053719905557 0.9417083984252431
+ POINT 643 0.08005371990557508 1.258291601574757
+ POINT 644 0.08795884128619492 1.036808212099732
+ POINT 645 0.08795884128620145 1.163191787900268
+ POINT 646 0.1042887841859397 1.952135097176459
+ POINT 647 0.1042887841856019 0.2478649028235401
+ POINT 648 0.1016047249671883 0.8051583110144459
+ POINT 649 0.1016047249672295 1.394841688985554
+ POINT 650 0.1033460524918481 1.85855716785852
+ POINT 651 0.1033460524916093 0.3414428321414809
+ POINT 652 0.1082836431672455 2.04604815653973
+ POINT 653 0.108283643166804 0.1539518434602488
+ POINT 654 0.1019241429643946 0.7134886607512265
+ POINT 655 0.1019241429644573 1.486511339248773
+ POINT 656 0.1030496430262543 0.4348333667996823
+ POINT 657 0.103049643026426 1.765166633200318
+ POINT 658 0.1023770323556856 0.6209732407916818
+ POINT 659 0.1023770323557756 1.579026759208318
+ POINT 660 0.1027657653997885 0.5280379886401907
+ POINT 661 0.1027657653999141 1.671962011359809
+ POINT 662 0.1029005408761629 1.30467437038148
+ POINT 663 0.1029005408761392 0.8953256296185208
+ POINT 664 0.1122811996605864 0.98774023011387
+ POINT 665 0.1122811996605979 1.21225976988613
+ POINT 666 0.1308118172111283 1.997626195609268
+ POINT 667 0.1308118172107931 0.2023738043907235
+ POINT 668 0.1293238622289973 1.904912409383023
+ POINT 669 0.1293238622287388 0.2950875906169775
+ POINT 670 0.1267521888405835 0.8504727705070667
+ POINT 671 0.1267521888406139 1.349527229492933
+ POINT 672 0.1270646659059979 0.7597736587462834
+ POINT 673 0.1270646659060478 1.440226341253716
+ POINT 674 0.1289401647492597 1.811688059625802
+ POINT 675 0.1289401647490691 0.3883119403741986
+ POINT 676 0.1276936700118202 0.6674955797526303
+ POINT 677 0.1276936700118933 1.532504420247369
+ POINT 678 0.1286489580214782 0.4815616303842095
+ POINT 679 0.1286489580216189 1.718438369615791
+ POINT 680 0.1282402874798554 0.5746653121548623
+ POINT 681 0.1282402874799583 1.625334687845137
+ POINT 682 0.1309774981495956 0.9389040214840099
+ POINT 683 0.1309774981496117 1.261095978515991
+ POINT 684 0.1570324277787871 2.041441984565794
+ POINT 685 0.1570324277785065 0.1585580154341836
+ POINT 686 0.1551511027361098 1.950693882207201
+ POINT 687 0.1551511027358492 0.2493061177927973
+ POINT 688 0.1478048498553272 1.036855351646321
+ POINT 689 0.1478048498553319 1.163144648353679
+ POINT 690 0.1513643897070269 0.894028043714827
+ POINT 691 0.1513643897070477 1.305971956285173
+ POINT 692 0.151921746522442 0.8059219283201078
+ POINT 693 0.1519217465224798 1.394078071679892
+ POINT 694 0.1548118272034952 1.858107350439874
+ POINT 695 0.1548118272032912 0.341892649560127
+ POINT 696 0.1528431373618925 0.7140495304301574
+ POINT 697 0.152843137361951 1.485950469569842
+ POINT 698 0.1535947148231471 0.6212977775285243
+ POINT 699 0.1535947148232308 1.578702222471475
+ POINT 700 0.1545598185243301 1.76493276556504
+ POINT 701 0.1545598185241761 0.4350672344349603
+ POINT 702 0.1541744579288568 0.5282511923556599
+ POINT 703 0.1541744579289723 1.67174880764434
+ POINT 704 0.1735585105362263 0.9312606683708957
+ POINT 705 0.1735585105362404 1.268739331629105
+ POINT 706 0.1725737560216426 0.9828522181549038
+ POINT 707 0.172573756021651 1.217147781845097
+ POINT 708 0.1803318546001305 1.9951500332343
+ POINT 709 0.1803318545998961 0.2048499667656928
+ POINT 710 0.1805338250628097 1.904296726416062
+ POINT 711 0.1805338250626029 0.2957032735839382
+ POINT 712 0.1761195766067141 1.348274207132526
+ POINT 713 0.1761195766066875 0.8517257928674726
+ POINT 714 0.1777387496738202 0.7606926538605064
+ POINT 715 0.1777387496738658 1.439307346139493
+ POINT 716 0.1788036310025682 0.6679890911690252
+ POINT 717 0.1788036310026355 1.532010908830974
+ POINT 718 0.1795906730602023 0.5749415701841191
+ POINT 719 0.1795906730602962 1.62505842981588
+ POINT 720 0.1801421650649189 1.718218171128954
+ POINT 721 0.180142165064793 0.4817818288710459
+ POINT 722 0.1804608063993886 1.81139922037779
+ POINT 723 0.1804608063992247 0.3886007796222101
+ POINT 724 0.204322134012417 2.036631688233844
+ POINT 725 0.2043221340122403 0.1633683117661385
+ POINT 726 0.2057382000675267 1.950036813781466
+ POINT 727 0.2057382000673339 0.2499631862185334
+ POINT 728 0.1984597452753919 0.8968961790648596
+ POINT 729 0.1984597452754089 1.303103820935139
+ POINT 730 0.2048757187458903 1.578316149334288
+ POINT 731 0.2048757187458145 0.6216838506657113
+ POINT 732 0.2038108733764408 0.714820174631232
+ POINT 733 0.203810873376494 1.485179825368767
+ POINT 734 0.2056394443830584 1.671509166172381
+ POINT 735 0.2056394443829556 0.5284908338276189
+ POINT 736 0.2022045159953981 0.8075706211649034
+ POINT 737 0.2022045159954316 1.392429378835095
+ POINT 738 0.2061141260057746 1.764700574049656
+ POINT 739 0.2061141260056416 0.4352994259503444
+ POINT 740 0.2062804246860582 1.857803764278236
+ POINT 741 0.2062804246858916 0.3421962357217642
+ POINT 742 0.2145155953827285 0.9447674375791411
+ POINT 743 0.2145155953827374 1.255232562420859
+ POINT 744 0.2292460117984814 1.994590684868222
+ POINT 745 0.2292460117983225 0.2054093151317783
+ POINT 746 0.2299957449751754 0.6685488772010935
+ POINT 747 0.2299957449752358 1.531451122798906
+ POINT 748 0.2310181106835776 1.624764954255937
+ POINT 749 0.2310181106834942 0.5752350457440627
+ POINT 750 0.2317054503580209 1.717998286295852
+ POINT 751 0.2317054503579118 0.4820017137041473
+ POINT 752 0.2285430831554674 0.7619588769893884
+ POINT 753 0.2285430831555078 1.438041123010611
+ POINT 754 0.2320516614469718 1.811176161531719
+ POINT 755 0.2320516614468365 0.3888238384682812
+ POINT 756 0.225828305344291 0.8552159043007362
+ POINT 757 0.2258283053443129 1.344784095699262
+ POINT 758 0.2319087818211577 1.904198989421268
+ POINT 759 0.2319087818209996 0.2958010105787312
+ POINT 760 0.2459989525486379 2.033654363492142
+ POINT 761 0.2459989525485172 0.166345636507845
+ POINT 762 0.2475174760458261 0.905392808589402
+ POINT 763 0.2475174760458374 1.294607191410597
+ POINT 764 0.2549114779452099 0.7156411412724247
+ POINT 765 0.254911477945257 1.484358858727575
+ POINT 766 0.2562505837018355 1.57793090903224
+ POINT 767 0.2562505837017685 0.6220690909677594
+ POINT 768 0.257191792825805 1.671276456625063
+ POINT 769 0.2571917928257161 0.5287235433749365
+ POINT 770 0.2577629095016755 1.764502227532713
+ POINT 771 0.2577629095015642 0.4354977724672864
+ POINT 772 0.2579070455300894 1.857653275260769
+ POINT 773 0.2579070455299591 0.3423467247392308
+ POINT 774 0.2529397486016737 0.8098649724765766
+ POINT 775 0.2529397486017019 1.390135027523422
+ POINT 776 0.2572905259451417 1.951184904222711
+ POINT 777 0.2572905259450062 0.2488150957772869
+ POINT 778 0.2796015982310787 0.7631604982155205
+ POINT 779 0.2796015982311135 1.436839501784479
+ POINT 780 0.2813089441944599 1.530940792248024
+ POINT 781 0.2813089441944069 0.6690592077519755
+ POINT 782 0.2825452749728528 1.624497176123785
+ POINT 783 0.2825452749727808 0.5755028238762141
+ POINT 784 0.2833738704200612 1.717806012070717
+ POINT 785 0.2833738704199696 0.4821939879292828
+ POINT 786 0.2837841917529496 1.811017757473077
+ POINT 787 0.2837841917528416 0.388982242526923
+ POINT 788 0.2836767085375295 1.904218555150446
+ POINT 789 0.2836767085374143 0.2957814448495524
+ POINT 790 0.2772492414227249 0.8601184689770959
+ POINT 791 0.2772492414227409 1.339881531022904
+ POINT 792 0.2836030344354198 2.004441573778339
+ POINT 793 0.2836030344353273 0.1955584262216606
+ POINT 794 0.3041334292856778 0.8114743735520394
+ POINT 795 0.3041334292857006 1.38852562644796
+ POINT 796 0.3061795743710523 0.7162832494915146
+ POINT 797 0.306179574371093 1.483716750508485
+ POINT 798 0.3077390212333289 1.577614885885851
+ POINT 799 0.3077390212332711 0.6223851141141483
+ POINT 800 0.3096865396528937 1.950901505461759
+ POINT 801 0.3096865396528055 0.249098494538237
+ POINT 802 0.3088527981673977 1.671079760816977
+ POINT 803 0.3088527981673229 0.528920239183022
+ POINT 804 0.3097361619722371 1.857534878505294
+ POINT 805 0.3097361619721392 0.3424651214947053
+ POINT 806 0.3095502641650076 1.76435087580034
+ POINT 807 0.3095502641649175 0.4356491241996593
+ POINT 808 0.3288120431688741 0.8607989374422602
+ POINT 809 0.3288120431688846 1.339201062557741
+ POINT 810 0.3308544215557402 0.7638219050359595
+ POINT 811 0.3308544215557694 1.43617809496404
+ POINT 812 0.3375126524052514 1.994293817311727
+ POINT 813 0.3375126524052001 0.2057061826882657
+ POINT 814 0.3327610765217816 1.530586589066711
+ POINT 815 0.3327610765217361 0.6694134109332888
+ POINT 816 0.3341824871133745 1.624295294975124
+ POINT 817 0.3341824871133137 0.5757047050248755
+ POINT 818 0.3355374802211898 1.903901262633753
+ POINT 819 0.3355374802211097 0.2960987373662459
+ POINT 820 0.3351696534103493 1.717659992280941
+ POINT 821 0.3351696534102745 0.4823400077190578
+ POINT 822 0.3357015118006413 1.810919793428409
+ POINT 823 0.3357015118005579 0.3890802065715904
+ POINT 824 0.355345685543038 0.8114954427610821
+ POINT 825 0.3553456855430563 1.388504557238918
+ POINT 826 0.3576026275587584 0.7166238312648966
+ POINT 827 0.3576026275587927 1.483376168735103
+ POINT 828 0.3605349712249165 1.948842121693117
+ POINT 829 0.3605349712248616 0.2511578783068814
+ POINT 830 0.3593497453902491 1.577424020408742
+ POINT 831 0.3593497453902004 0.6225759795912578
+ POINT 832 0.3606297522654421 1.670946224705702
+ POINT 833 0.3606297522653806 0.5290537752942978
+ POINT 834 0.3614920902775046 1.764248807423054
+ POINT 835 0.3614920902774339 0.4357511925769451
+ POINT 836 0.3618006540253253 1.857543999807811
+ POINT 837 0.3618006540252542 0.3424560001921882
+ POINT 838 0.3799039844548204 1.987344325951082
+ POINT 839 0.3799039844547873 0.2126556740489144
+ POINT 840 0.3795665604827047 0.8578622168360505
+ POINT 841 0.3795665604827129 1.34213778316395
+ POINT 842 0.3822320838617883 0.7639969713609172
+ POINT 843 0.3822320838618125 1.436003028639083
+ POINT 844 0.3843541839155623 1.530438831989408
+ POINT 845 0.3843541839155242 0.6695611680105915
+ POINT 846 0.3859332601431844 1.624196795445392
+ POINT 847 0.3859332601431343 0.5758032045546086
+ POINT 848 0.3870916435182385 1.717567749069627
+ POINT 849 0.3870916435181792 0.4824322509303727
+ POINT 850 0.3878198212396085 1.810875694218735
+ POINT 851 0.3878198212395463 0.3891243057812644
+ POINT 852 0.3878245318011455 1.904461840930953
+ POINT 853 0.3878245318010928 0.295538159069046
+ POINT 854 0.4065580313390023 0.8113186627225936
+ POINT 855 0.4065580313390171 1.388681337277407
+ POINT 856 0.4091868448889848 1.483304259678024
+ POINT 857 0.4091868448889562 0.7166957403219757
+ POINT 858 0.4110849437607559 0.6226039815364102
+ POINT 859 0.411084943760796 1.57739601846359
+ POINT 860 0.4125193961378941 1.670896906073372
+ POINT 861 0.4125193961378449 0.5291030939266279
+ POINT 862 0.4135817456760087 1.764164069156654
+ POINT 863 0.413581745675955 0.4358359308433455
+ POINT 864 0.4141444786512157 1.857619721936957
+ POINT 865 0.4141444786511664 0.342380278063042
+ POINT 866 0.4149840108493548 1.955465936092288
+ POINT 867 0.4149840108493268 0.2445340639077114
+ POINT 868 0.4302760379260603 0.8584159888355891
+ POINT 869 0.4302760379260669 1.341584011164411
+ POINT 870 0.4338131777967077 0.7640421200991923
+ POINT 871 0.4338131777967277 1.435957879900808
+ POINT 872 0.4360953183053679 0.6694833049817823
+ POINT 873 0.4360953183053992 1.530516695018218
+ POINT 874 0.4377991333224288 0.5757656018816784
+ POINT 875 0.4377991333224691 1.624234398118322
+ POINT 876 0.4391251775368907 1.71750931774424
+ POINT 877 0.439125177536845 0.4824906822557598
+ POINT 878 0.4401597743231614 1.810805160981683
+ POINT 879 0.4401597743231169 0.3891948390183168
+ POINT 880 0.4401253939088489 1.904159869449121
+ POINT 881 0.4401253939088169 0.2958401305508781
+ POINT 882 0.4609797622650783 1.48349994820593
+ POINT 883 0.4609797622650548 0.7165000517940698
+ POINT 884 0.4580973287579283 0.8119267663435248
+ POINT 885 0.4580973287579405 1.388073233656475
+ POINT 886 0.4629451825270938 0.6224365809087732
+ POINT 887 0.4629451825271261 1.577563419091227
+ POINT 888 0.4623841620811467 1.944422939213552
+ POINT 889 0.4623841620811303 0.2555770607864476
+ POINT 890 0.4645173284388175 0.5290570541716649
+ POINT 891 0.4645173284388558 1.670942945828335
+ POINT 892 0.4657788661344336 1.764006027971564
+ POINT 893 0.4657788661343942 0.4359939720284358
+ POINT 894 0.4670694877649046 1.857882777412384
+ POINT 895 0.4670694877648729 0.3421172225876152
+ POINT 896 0.481475798554698 0.8621813745644581
+ POINT 897 0.4814757985547035 1.337818625435542
+ POINT 898 0.4857634906689199 1.436190418959564
+ POINT 899 0.4857634906689035 0.7638095810404367
+ POINT 900 0.4879860821372959 0.6691397652542252
+ POINT 901 0.4879860821373211 1.530860234745775
+ POINT 902 0.4897787226538702 0.5755686722678167
+ POINT 903 0.4897787226539017 1.624431327732183
+ POINT 904 0.4925649638028262 1.81035457336747
+ POINT 905 0.4925649638027961 0.3896454266325297
+ POINT 906 0.491244631009867 1.717479865051679
+ POINT 907 0.491244631009833 0.4825201349483209
+ POINT 908 0.4965127469132501 1.909153795938472
+ POINT 909 0.4965127469132354 0.290846204061528
+ POINT 910 0.510497172814505 0.8118192753582937
+ POINT 911 0.5104971728145157 1.388180724641707
+ POINT 912 0.5129893597151404 0.7159085206318639
+ POINT 913 0.5129893597151594 1.484091479368137
+ POINT 914 0.5149112745397199 0.6220563087553478
+ POINT 915 0.5149112745397453 1.577943691244653
+ POINT 916 0.5166239332213995 1.671113489643147
+ POINT 917 0.5166239332213707 0.528886510356853
+ POINT 918 0.519402149253141 1.856069498229687
+ POINT 919 0.5194021492531223 0.3439305017703124
+ POINT 920 0.5179838456323649 1.763741824525091
+ POINT 921 0.5179838456323376 0.436258175474909
+ POINT 922 0.5355179471519832 0.8610313646375148
+ POINT 923 0.5355179471519892 1.338968635362486
+ POINT 924 0.5381024565807641 0.7627828689476459
+ POINT 925 0.5381024565807777 1.437217131052355
+ POINT 926 0.5399700699996864 0.6685000579078603
+ POINT 927 0.5399700699997064 1.53149994209214
+ POINT 928 0.5418611427009609 0.5752157647607447
+ POINT 929 0.541861142700985 1.624784235239255
+ POINT 930 0.543048551417165 1.895246104189044
+ POINT 931 0.5430485514171568 0.3047538958109555
+ POINT 932 0.543423948721677 0.4824463109995085
+ POINT 933 0.5434239487217013 1.717553689000492
+ POINT 934 0.5449734661365295 1.809666792143957
+ POINT 935 0.5449734661365109 0.3903332078560427
+ POINT 936 0.5636636934947677 0.8096348064899566
+ POINT 937 0.563663693494777 1.390365193510045
+ POINT 938 0.5638964884375066 0.90749790301109
+ POINT 939 0.5638964884375097 1.292502096988911
+ POINT 940 0.565090006747472 0.7148393329579851
+ POINT 941 0.5650900067474872 1.485160667042016
+ POINT 942 0.5669192536511706 1.578492341942532
+ POINT 943 0.566919253651151 0.621507658057468
+ POINT 944 0.5699152080909332 1.763370224225762
+ POINT 945 0.5699152080909152 0.4366297757742388
+ POINT 946 0.568889778169672 0.5285269041704842
+ POINT 947 0.568889778169693 1.671473095829516
+ POINT 948 0.5751236529375724 1.858038128643103
+ POINT 949 0.5751236529375642 0.3419618713568972
+ POINT 950 0.590478852657328 0.855550119497996
+ POINT 951 0.590478852657334 1.344449880502005
+ POINT 952 0.590504642678035 0.7609199103277213
+ POINT 953 0.5905046426780463 1.43908008967228
+ POINT 954 0.5919133498822817 0.6676306738310475
+ POINT 955 0.5919133498822972 1.532369326168953
+ POINT 956 0.5954866943863356 1.806928298300893
+ POINT 957 0.5954866943863252 0.3930717016991069
+ POINT 958 0.5940252517533466 0.5747741347590816
+ POINT 959 0.5940252517533643 1.625225865240919
+ POINT 960 0.5967300361208071 0.9498398068586414
+ POINT 961 0.596730036120809 1.250160193141359
+ POINT 962 0.5958590463421782 0.4819011636493623
+ POINT 963 0.5958590463421949 1.718098836350638
+ POINT 964 0.6165599577119201 0.8063499927067439
+ POINT 965 0.6165599577119278 1.393650007293257
+ POINT 966 0.6193473886432476 0.899069077918274
+ POINT 967 0.6193473886432513 1.300930922081727
+ POINT 968 0.6170434880604998 1.486571417742423
+ POINT 969 0.6170434880604879 0.7134285822575774
+ POINT 970 0.6188431819761337 0.6209309398604157
+ POINT 971 0.6188431819761482 1.579069060139585
+ POINT 972 0.6190358850789275 1.841819288132658
+ POINT 973 0.6190358850789225 0.3581807118673422
+ POINT 974 0.6215057026034905 0.5279483222940986
+ POINT 975 0.621505702603505 1.672051677705902
+ POINT 976 0.6217869642503756 1.764257977417268
+ POINT 977 0.6217869642503647 0.4357420225827333
+ POINT 978 0.6341001028670564 0.9960638930846765
+ POINT 979 0.6341001028670576 1.203936106915324
+ POINT 980 0.6435873362001189 0.8504640863007134
+ POINT 981 0.6435873362001242 1.349535913699287
+ POINT 982 0.6425283358304207 0.7586926156791651
+ POINT 983 0.6425283358304295 1.441307384320836
+ POINT 984 0.6436325724813013 0.6666884768802879
+ POINT 985 0.6436325724813128 1.533311523119713
+ POINT 986 0.6497251990069113 0.9392628791843283
+ POINT 987 0.6497251990069137 1.260737120815673
+ POINT 988 0.646155168873761 0.5745076936096669
+ POINT 989 0.6461551688737733 1.625492306390333
+ POINT 990 0.6504592574828876 1.052904324402318
+ POINT 991 0.6504592574828881 1.147095675597682
+ POINT 992 0.6445551034372188 1.808273554051036
+ POINT 993 0.6445551034372136 0.3917264459489646
+ POINT 994 0.6495977529009989 0.4800954687272823
+ POINT 995 0.6495977529010092 1.719904531272718
+ POINT 996 0.6685473043066247 0.8031286720838697
+ POINT 997 0.6685473043066311 1.396871327916131
+ POINT 998 0.6672193864220373 1.1
+ POINT 999 0.6714754293806562 0.8925633166472781
+ POINT 1000 0.6714754293806601 1.307436683352723
+ POINT 1001 0.6686214109474826 0.71191634872483
+ POINT 1002 0.6686214109474916 1.488083651275171
+ POINT 1003 0.6704603881005182 0.6205328788909628
+ POINT 1004 0.6704603881005283 1.579467121109038
+ POINT 1005 0.6799889327878302 0.9707225707057096
+ POINT 1006 0.6799889327878326 1.229277429294291
+ POINT 1007 0.6745540153600085 0.527743751054467
+ POINT 1008 0.6745540153600175 1.672256248945533
+ POINT 1009 0.6753166278434668 1.769394175289471
+ POINT 1010 0.6753166278434619 0.4306058247105304
+ POINT 1011 0.6922033060224299 1.013678517867092
+ POINT 1012 0.6922033060224312 1.186321482132909
+ POINT 1013 0.695126791230159 0.8464187211403625
+ POINT 1014 0.6951267912301636 1.353581278859638
+ POINT 1015 0.6939271441816669 0.7565311918381677
+ POINT 1016 0.6939271441816736 1.443468808161833
+ POINT 1017 0.6949616531062637 1.534220924042734
+ POINT 1018 0.6949616531062556 0.6657790759572669
+ POINT 1019 0.697674679076005 0.5750520248472112
+ POINT 1020 0.6976746790760129 1.624947975152789
+ POINT 1021 0.6992106723653471 0.9320852461296082
+ POINT 1022 0.6992106723653495 1.267914753870392
+ POINT 1023 0.7151230349588964 1.06716956053494
+ POINT 1024 0.7151230349588966 1.13283043946506
+ POINT 1025 0.7091565683352502 1.723943895605046
+ POINT 1026 0.7091565683352463 0.4760561043949534
+ POINT 1027 0.719606703038442 0.8004195066279448
+ POINT 1028 0.719606703038447 1.399580493372056
+ POINT 1029 0.7196978113605996 0.7104565655360038
+ POINT 1030 0.7196978113606061 1.489543434463997
+ POINT 1031 0.7219482356728502 0.8884520210971256
+ POINT 1032 0.7219482356728534 1.311547978902875
+ POINT 1033 0.7215533889786911 0.6203101486235227
+ POINT 1034 0.7215533889786978 1.579689851376478
+ POINT 1035 0.7253358630263914 0.531330690859809
+ POINT 1036 0.7253358630263962 1.668669309140191
+ POINT 1037 0.7236780075487798 0.9726943960082572
+ POINT 1038 0.7236780075487816 1.227305603991743
+ POINT 1039 0.7470217926390116 1.0165557488846
+ POINT 1040 0.7470217926390129 1.183444251115401
+ POINT 1041 0.7456613308960666 0.8435226501058076
+ POINT 1042 0.7456613308960703 1.356477349894193
+ POINT 1043 0.7446322515098044 1.445363092037379
+ POINT 1044 0.7446322515097994 0.7546369079626216
+ POINT 1045 0.7567182575892406 1.100000000000001
+ POINT 1046 0.74586447443495 1.535151492272178
+ POINT 1047 0.7458644744349444 0.6648485077278227
+ POINT 1048 0.7482433904982198 0.9300852887618416
+ POINT 1049 0.7482433904982222 1.269914711238159
+ POINT 1050 0.748090646191401 0.5759556989837471
+ POINT 1051 0.7480906461914056 1.624044301016253
+ POINT 1052 0.7521327806758343 0.4964960774870433
+ POINT 1053 0.7521327806758367 1.703503922512957
+ POINT 1054 0.769821284847335 0.7982912787003689
+ POINT 1055 0.7698212848473387 1.401708721299632
+ POINT 1056 0.7702483181885972 1.490912752883813
+ POINT 1057 0.7702483181885927 0.7090872471161874
+ POINT 1058 0.7720229381145532 0.8860787058386009
+ POINT 1059 0.7720229381145558 1.3139212941614
+ POINT 1060 0.7755499142748119 1.058795478838545
+ POINT 1061 0.7755499142748125 1.141204521161455
+ POINT 1062 0.7739956427287733 0.9724966080016204
+ POINT 1063 0.7739956427287751 1.22750339199838
+ POINT 1064 0.772270684371083 1.58019194340864
+ POINT 1065 0.7722706843710792 0.6198080565913601
+ POINT 1066 0.7734310634285065 0.53377445840695
+ POINT 1067 0.7734310634285085 1.66622554159305
+ POINT 1068 0.7955024515172865 0.8414240249455552
+ POINT 1069 0.7955024515172893 1.358575975054445
+ POINT 1070 0.7945846769565481 1.446933968687508
+ POINT 1071 0.7945846769565449 0.7530660313124925
+ POINT 1072 0.7965098296699125 1.536265854797571
+ POINT 1073 0.7965098296699091 0.6637341452024296
+ POINT 1074 0.7986666573172631 0.9286646065420509
+ POINT 1075 0.7986666573172649 1.27133539345795
+ POINT 1076 0.8005628094927209 1.015298664946768
+ POINT 1077 0.800562809492722 1.184701335053233
+ POINT 1078 0.8028887054763968 1.1
+ POINT 1079 0.7983178082632083 0.5755380038921456
+ POINT 1080 0.7983178082632104 1.624461996107855
+ POINT 1081 0.8190537587556244 1.403352230773871
+ POINT 1082 0.8190537587556211 0.7966477692261302
+ POINT 1083 0.8203096977788009 0.7078225308376412
+ POINT 1084 0.8203096977788035 1.492177469162359
+ POINT 1085 0.8221435939740134 0.8842813833770112
+ POINT 1086 0.8221435939740159 1.31571861662299
+ POINT 1087 0.8258039244274097 0.9716193442904529
+ POINT 1088 0.825803924427411 1.228380655709548
+ POINT 1089 0.8232574159080223 0.6185402802551151
+ POINT 1090 0.8232574159080239 1.581459719744885
+ POINT 1091 0.8276858483030251 1.057709961461792
+ POINT 1092 0.8276858483030256 1.142290038538209
+ POINT 1093 0.8443885300557721 0.8396624678687937
+ POINT 1094 0.8443885300557725 1.360337532131206
+ POINT 1095 0.8435805887245759 1.448099999129817
+ POINT 1096 0.8435805887245733 0.7519000008701837
+ POINT 1097 0.8498572807834188 1.272584845453782
+ POINT 1098 0.849857280783417 0.9274151545462185
+ POINT 1099 0.8472169799856861 0.6623436269915201
+ POINT 1100 0.8472169799856875 1.53765637300848
+ POINT 1101 0.8531321577228631 1.014744484197918
+ POINT 1102 0.853132157722864 1.185255515802082
+ POINT 1103 0.8540348764901032 1.1
+ POINT 1104 0.8667152045029036 1.404499231715792
+ POINT 1105 0.866715204502905 0.7955007682842086
+ POINT 1106 0.8699087572681803 0.706778149725626
+ POINT 1107 0.8699087572681814 1.493221850274375
+ POINT 1108 0.8724767766843866 0.8824324819562084
+ POINT 1109 0.8724767766843858 1.317567518043792
+ POINT 1110 0.8787873413159252 1.228845043713379
+ POINT 1111 0.8787873413159242 0.9711549562866214
+ POINT 1112 0.8799432083523225 1.057608043069113
+ POINT 1113 0.8799432083523231 1.142391956930888
+ POINT 1114 0.8910218646725004 0.8376356513259199
+ POINT 1115 0.8910218646725104 1.362364348674084
+ POINT 1116 0.8913352919409994 1.448490594754667
+ POINT 1117 0.891335291940999 0.7515094052453336
+ POINT 1118 0.9014140835591762 0.9263883896376017
+ POINT 1119 0.901414083559177 1.273611610362399
+ POINT 1120 0.9116723447648609 1.404627991393473
+ POINT 1121 0.9116723447648556 0.7953720086065287
+ POINT 1122 0.90601105317802 1.18473392379679
+ POINT 1123 0.9060110531780194 1.015266076203211
+ POINT 1124 0.9062094956083043 1.1
+ POINT 1125 0.9269164684327946 0.8790908543699592
+ POINT 1126 0.9269164684328 1.320909145630042
+ POINT 1127 0.93042503959068 1.367111693519781
+ POINT 1128 0.9304250395906971 0.8328883064802138
+ POINT 1129 0.9384571821641754 0.9718778870737869
+ POINT 1130 0.9384571821641761 1.228122112926214
+ POINT 1131 0.9326347751840141 1.141925258570363
+ POINT 1132 0.9326347751840138 1.058074741429638
+ POINT 1133 0.9468718349292397 0.9252392374031051
+ POINT 1134 0.9468718349292387 1.274760762596895
+ POINT 1135 0.9536117424828211 1.181750933235814
+ POINT 1136 0.9536117424828208 1.018249066764187
+ POINT 1137 0.9579479718299321 1.1
+ POINT 1140 0.2078382133028135 1.044557708079978
+ POINT 1141 0.2078382133028137 1.155442291920023
+ POINT 1142 0.2275088140704905 0.9987735668087067
+ POINT 1143 0.2275088140704908 1.201226433191294
+ POINT 1144 0.262926530009175 0.9543605004654494
+ POINT 1145 0.2629265300091753 1.245639499534551
+ POINT 1146 0.3066837435753103 0.9231043350251863
+ POINT 1147 0.3066837435753106 1.276895664974814
+ POINT 1148 0.3533857101346237 0.9055080773390662
+ POINT 1149 0.3533857101346237 1.294491922660934
+ POINT 1150 0.4031929398929588 0.9000254887870959
+ POINT 1151 0.4031929398929588 1.299974511212904
+ POINT 1152 0.4526726158946173 1.292939357143166
+ POINT 1153 0.4526726158946175 0.9070606428568343
+ POINT 1154 0.4985340570798776 1.274043211862398
+ POINT 1155 0.4985340570798779 0.9259567881376026
+ POINT 1156 0.5403534806376503 1.242481228493078
+ POINT 1157 0.5403534806376505 0.9575187715069222
+ POINT 1158 0.5731656909892855 0.9999318059311387
+ POINT 1159 0.5731656909892854 1.200068194068862
+ POINT 1160 0.5930650777366978 1.047790079883964
+ POINT 1161 0.5930650777366978 1.152209920116036
+ POINT 1162 0.6000000000000001 1.1
+ POINT 1163 -1 1.1
+ POINT 1164 -0.9988075196278913 1.051178501305475
+ POINT 1165 -0.9988075196278913 1.148821498694526
+ POINT 1166 -0.9946460018453503 1.203340848714626
+ POINT 1167 -0.9946460018453503 0.9966591512853744
+ POINT 1168 -0.9886824084962801 0.9499763514308659
+ POINT 1169 -0.9886824084962801 1.250023648569134
+ POINT 1170 -0.9793136870795526 0.8976520266999143
+ POINT 1171 -0.9793136870795526 1.302347973300086
+ POINT 1172 -0.9687311922593916 0.8518873700439709
+ POINT 1173 -0.9687311922593919 1.348112629956029
+ POINT 1174 -0.9541486151094242 0.8006667070224767
+ POINT 1175 -0.9541486151094243 1.399333292977523
+ POINT 1176 -0.9377821750456562 0.7527758761741372
+ POINT 1177 -0.9377821750456563 1.447224123825863
+ POINT 1178 -0.9191933774375671 1.493806468807863
+ POINT 1179 -0.919193377437567 0.706193531192137
+ POINT 1180 -0.8983458759015261 1.539288842620342
+ POINT 1181 -0.8983458759015261 0.6607111573796581
+ POINT 1182 -0.8752870986433947 1.583603654812935
+ POINT 1183 -0.8752870986433947 0.6163963451870651
+ POINT 1184 -0.8500926216478474 1.6266332069096
+ POINT 1185 -0.8500926216478473 0.5733667930903997
+ POINT 1186 -0.8228092872820637 1.668317584421231
+ POINT 1187 -0.8228092872820636 0.5316824155787693
+ POINT 1188 -0.7933287286708404 0.4912064978455274
+ POINT 1189 -0.7933287286708406 1.708793502154473
+ POINT 1190 -0.7602039895389419 1.749684457478456
+ POINT 1191 -0.7602039895389416 0.4503155425215434
+ POINT 1192 -0.7299780737933029 1.78347056394626
+ POINT 1193 -0.7299780737933027 0.4165294360537394
+ POINT 1194 -0.6960595084092013 1.817984095055831
+ POINT 1195 -0.6960595084092008 0.3820159049441684
+ POINT 1196 -0.6599563434123792 1.851303949670013
+ POINT 1197 -0.6599563434123787 0.3486960503299865
+ POINT 1198 -0.6200195705656705 1.884586344589021
+ POINT 1199 -0.6200195705656703 0.3154136554109792
+ POINT 1200 -0.5835741235739795 1.912059876052783
+ POINT 1201 -0.5835741235739798 0.2879401239472171
+ POINT 1202 -0.5411341115458262 1.940936307529595
+ POINT 1203 -0.5411341115458274 0.2590636924704062
+ POINT 1204 -0.50266651448993 1.964480407649905
+ POINT 1205 -0.5026665144899328 0.2355195923500973
+ POINT 1206 -0.4577555992172864 0.2109219317825781
+ POINT 1207 -0.4577555992172805 1.989078068217425
+ POINT 1208 -0.4169676263156609 0.1910786620368719
+ POINT 1209 -0.4169676263156503 2.008921337963133
+ POINT 1210 -0.3695972238204201 0.1708079358150771
+ POINT 1211 -0.3695972238204002 2.029192064184931
+ POINT 1212 -0.3242388268761011 0.1540247449610483
+ POINT 1213 -0.324238826876067 2.045975255038964
+ POINT 1214 -0.2812980875895877 0.1403795615356869
+ POINT 1215 -0.2812980875895289 2.05962043846433
+ POINT 1216 -0.2312451250851507 0.1271044803657727
+ POINT 1217 -0.2312451250850431 2.072895519634253
+ POINT 1218 -0.1832715546065833 0.1169376737601598
+ POINT 1219 -0.1832715546064036 2.083062326239874
+ POINT 1220 -0.1356077632886996 0.1092373974882602
+ POINT 1221 -0.1356077632883874 2.090762602511783
+ POINT 1222 -0.0885147872871202 0.1039251371350065
+ POINT 1223 -0.08851478728655356 2.096074862865044
+ POINT 1224 -0.04285417533887703 0.1009186621420532
+ POINT 1225 -0.04285417533781429 2.099081337857993
+ POINT 1226 0.0001433356683681271 0.1000000102725569
+ POINT 1227 0.0001433356697270945 2.099999989727443
+ POINT 1228 0.04307817169925682 0.1009282953045617
+ POINT 1229 0.04307817170032539 2.099071704695392
+ POINT 1230 0.08863241599800338 0.1039355970448714
+ POINT 1231 0.08863241599857262 2.096064402955078
+ POINT 1232 0.1356707817812499 0.1092460250037528
+ POINT 1233 0.1356707817815631 2.090753974996205
+ POINT 1234 0.1833060428014915 0.1169441039938484
+ POINT 1235 0.1833060428016714 2.083055896006119
+ POINT 1236 0.2312640468069951 0.1271089780173465
+ POINT 1237 0.2312640468071028 2.072891021982628
+ POINT 1238 0.2813063825371679 0.1403819931119193
+ POINT 1239 0.2813063825372267 2.059618006888064
+ POINT 1240 0.3242416718960558 0.1540257201138868
+ POINT 1241 0.32424167189609 2.045974279886102
+ POINT 1242 0.3695968496920622 0.1708077870011485
+ POINT 1243 0.3695968496920825 2.029192212998844
+ POINT 1244 0.4169650593957588 0.19107748446686
+ POINT 1245 0.4169650593957698 2.008922515533135
+ POINT 1246 0.4577517637302356 0.2109199570331936
+ POINT 1247 0.4577517637302418 1.989080042966803
+ POINT 1248 0.5026617898174395 0.2355168451279528
+ POINT 1249 0.5026617898174425 1.964483154872046
+ POINT 1250 0.5411288334876985 0.2590602961161587
+ POINT 1251 0.5411288334876998 1.940939703883841
+ POINT 1252 0.5835684779845887 1.912063933137503
+ POINT 1253 0.5835684779845882 0.2879360668624968
+ POINT 1254 0.6200136653097331 1.884591011183018
+ POINT 1255 0.6200136653097329 0.3154089888169822
+ POINT 1256 0.6599503042297035 1.851309254533126
+ POINT 1257 0.6599503042297034 0.3486907454668737
+ POINT 1258 0.6960534263044139 1.817989991385595
+ POINT 1259 0.6960534263044139 0.3820100086144057
+ POINT 1260 0.7299720297813322 1.783477019172497
+ POINT 1261 0.7299720297813324 0.4165229808275033
+ POINT 1262 0.7601979892008397 1.749691478484211
+ POINT 1263 0.7601979892008398 0.4503085215157892
+ POINT 1264 0.7933229460072876 1.708801037563438
+ POINT 1265 0.7933229460072878 0.4911989624365626
+ POINT 1266 0.8228037771134272 1.668325561951843
+ POINT 1267 0.8228037771134273 0.5316744380481577
+ POINT 1268 0.8500874750073061 0.5733584854612174
+ POINT 1269 0.850087475007306 1.626641514538783
+ POINT 1270 0.8752823895423416 1.583612177841965
+ POINT 1271 0.8752823895423418 0.616387822158035
+ POINT 1272 0.8983416567203735 1.539297470742656
+ POINT 1273 0.8983416567203737 0.6607025292573446
+ POINT 1274 0.9191896855856203 1.49381508593883
+ POINT 1275 0.9191896855856204 0.70618491406117
+ POINT 1276 0.9377790428432951 1.447232583154164
+ POINT 1277 0.9377790428432952 0.7527674168458366
+ POINT 1278 0.9541460805874687 1.399341371847548
+ POINT 1279 0.9541460805874686 0.8006586281524527
+ POINT 1280 0.9687293155562601 1.348119957242258
+ POINT 1281 0.96872931555626 0.8518800427577421
+ POINT 1282 0.9793123591572941 1.302354400005967
+ POINT 1283 0.9793123591572943 0.8976455999940335
+ POINT 1284 0.9886816102942397 1.250028908767574
+ POINT 1285 0.9886816102942398 0.9499710912324267
+ POINT 1286 0.9946456213813893 0.9966554894209182
+ POINT 1287 0.9946456213813893 1.203344510579083
+ POINT 1288 0.9988074296771728 1.051176661096569
+ POINT 1289 0.9988074296771728 1.148823338903431
+ POINT 1290 1 1.100000000000001
+ POINT 1291 -0.6000000000000001 1.1
+ POINT 1292 -0.5930649720945202 1.047789689235342
+ POINT 1293 -0.5930649720945202 1.152210310764658
+ POINT 1294 -0.5731652580328794 0.9999310567138523
+ POINT 1295 -0.5731652580328797 1.200068943286148
+ POINT 1296 -0.5403527732641303 0.9575180747004463
+ POINT 1297 -0.5403527732641304 1.242481925299554
+ POINT 1298 -0.4985333081227975 0.9259563641198627
+ POINT 1299 -0.4985333081227977 1.274043635880137
+ POINT 1300 -0.4526720320716488 0.9070604834735944
+ POINT 1301 -0.452672032071649 1.292939516526406
+ POINT 1302 -0.4031926294713015 0.9000254838309167
+ POINT 1303 -0.4031926294713015 1.299974516169083
+ POINT 1304 -0.3533857018620679 0.9055080793217674
+ POINT 1305 -0.3533857018620677 1.294491920678233
+ POINT 1306 -0.3066839869016689 0.9231042066655285
+ POINT 1307 -0.3066839869016685 1.276895793334472
+ POINT 1308 -0.2629268363192107 0.9543602121721556
+ POINT 1309 -0.2629268363192103 1.245639787827844
+ POINT 1310 -0.2275091105076497 0.9987730616775465
+ POINT 1311 -0.2275091105076493 1.201226938322453
+ POINT 1312 -0.2078384167740776 1.044557002857828
+ POINT 1313 -0.2078384167740773 1.155442997142171
+ POINT 1316 0.3105578434202637 0.2006323044549632
+ POINT 1317 0.330877162150628 0.1798659514010763
+ POINT 1318 0.3039223531656916 0.1747920731677737
+ POINT 1319 0.9287764515652551 1.470640395825729
+ POINT 1320 0.9145571673921472 1.447861588954416
+ POINT 1321 0.9052624887633098 1.471152840346749
+ POINT 1322 0.3535547510486312 0.1882569848447071
+ POINT 1323 0.3470207240960523 0.1621425390562533
+ POINT 1324 0.3235995960290028 0.2274023386132513
+ POINT 1325 0.3351107554388335 0.2501281864225592
+ POINT 1326 0.3490238118150308 0.2284320304975735
+ POINT 1327 0.3587083184299937 0.20918092836859
+ POINT 1328 0.3702194778398245 0.2319067761778978
+ POINT 1329 0.3747504170734248 0.1917317305250314
+ POINT 1330 0.2966447870440664 0.2223284603799488
+ POINT 1331 0.3226120099369576 0.2725986159522414
+ POINT 1332 0.3480362257229856 0.2736283078365636
+ POINT 1333 0.3998055198280663 1.694232327571499
+ POINT 1334 0.3865745742016681 1.670921565389537
+ POINT 1335 0.3738606978918403 1.694256986887664
+ POINT 1336 0.2966816240951099 0.2724399696938947
+ POINT 1337 0.309607094379262 0.2959400911078991
+ POINT 1338 0.2834885327989058 0.2489567951577619
+ POINT 1339 0.2704836172412103 0.2722982703134196
+ POINT 1340 0.2704467801901668 0.2221867609994737
+ POINT 1341 -0.6860964672519752 0.9922016458091191
+ POINT 1342 -0.6631519223162972 1.004871939223759
+ POINT 1343 -0.6570447461470601 0.9833941006871679
+ POINT 1344 0.8945492214269009 1.493518468106602
+ POINT 1345 0.8806220246045904 1.470856222514521
+ POINT 1346 0.924725693804078 1.425930287273818
+ POINT 1347 0.9015038183529301 1.42655929307407
+ POINT 1348 0.8317211444056984 1.381844881452539
+ POINT 1349 0.8199454907865309 1.359456753592826
+ POINT 1350 0.8072781051364568 1.380964102914158
+ POINT 1351 0.7944375218014815 1.402530476036751
+ POINT 1352 0.782661868182314 1.380142348177039
+ POINT 1353 -0.6648574053327962 0.954993985395483
+ POINT 1354 -0.6419128603971183 0.967664278810123
+ POINT 1355 -0.7018338899533956 0.9717099108375971
+ POINT 1356 -0.7079410661226326 0.9931877493741881
+ POINT 1357 -0.689600263223294 0.9514054460465359
+ POINT 1358 -0.7114448620939515 0.9523915496116049
+ POINT 1359 -0.6744683774733522 0.9356756241694909
+ POINT 1360 -0.7353504118069525 0.9946264925818153
+ POINT 1361 -0.7196129891055322 1.015118227553337
+ POINT 1362 -0.7310729436501368 1.041863450547673
+ POINT 1363 -0.7036635979658169 1.040424707340046
+ POINT 1364 -0.6827914721501149 1.060037210148632
+ POINT 1365 -0.6713315176055104 1.033291987154296
+ POINT 1366 -0.6422797965005951 1.024484442032345
+ POINT 1367 0.1806772808953734 0.1609631636001611
+ POINT 1368 0.1938140884068659 0.1401562078799934
+ POINT 1369 0.170169235289999 0.137751059714016
+ POINT 1370 0.2177930904096177 0.1452386448917425
+ POINT 1371 0.2073473437627681 0.1217326137325622
+ POINT 1372 0.1923269943060682 0.1841091392659156
+ POINT 1373 0.2047889331991093 0.2051296409487355
+ POINT 1374 0.2167840729052814 0.1843888134489584
+ POINT 1375 -0.6570447461470584 1.216605899312832
+ POINT 1376 -0.6648574053327939 1.245006014604517
+ POINT 1377 -0.6419128603971163 1.232335721189877
+ POINT 1378 0.2251605432803788 0.1648569741369917
+ POINT 1379 0.2376224821734198 0.1858774758198117
+ POINT 1380 0.2386314996777561 0.1467273072625958
+ POINT 1381 0.6195247751943302 1.863205149657838
+ POINT 1382 0.6401982971402014 1.868209698154603
+ POINT 1383 0.6394930946543155 1.846564271332892
+ POINT 1384 0.1686821411892013 0.1817039910999382
+ POINT 1385 0.2648009934919222 0.1809520313647528
+ POINT 1386 0.2824547084862477 0.1679702096667899
+ POINT 1387 0.2636526675428426 0.1533638148098821
+ POINT 1388 0.302850869865998 0.146962041353332
+ POINT 1389 0.2564245231168249 0.2004838706767195
+ POINT 1390 0.2432682688716643 0.2271122054545326
+ POINT 1391 0.06406238642952972 1.602396899368508
+ POINT 1392 0.03841998395991213 1.602457211997868
+ POINT 1393 0.05129310564712708 1.625612188305098
+ POINT 1394 0.02559914718061562 1.579279506499536
+ POINT 1395 0.01282986639821299 1.602494795436125
+ POINT 1396 0.01277759441007085 1.556177031842922
+ POINT 1397 0.03836771197177 1.556139448404666
+ POINT 1398 0.3833947362238888 1.483340214206564
+ POINT 1399 0.3709784057371776 1.506907500362256
+ POINT 1400 0.3967705144022736 1.506871545833716
+ POINT 1401 0.4131084105275646 1.717538533406934
+ POINT 1402 0.4258222868373924 1.694203111908806
+ POINT 1403 0.4263534616064497 1.740836693450447
+ POINT 1404 0.4396803059052212 1.764085048564109
+ POINT 1405 0.4524520218356621 1.740757672857902
+ POINT 1406 0.4003366945971236 1.74086590911314
+ POINT 1407 0.8567446729963786 1.470660924702096
+ POINT 1408 0.8674579403327876 1.448295296942242
+ POINT 1409 0.8841252069942774 1.516259660508515
+ POINT 1410 0.9090501674264285 1.516686684574852
+ POINT 1411 0.6599358656403378 0.4111661353297475
+ POINT 1412 0.6331710338437891 0.413734234265849
+ POINT 1413 0.6485517960469134 0.4331739236466319
+ POINT 1414 0.6356923585756817 0.4579187456550078
+ POINT 1415 0.6624571903722304 0.4553506467189063
+ POINT 1416 0.6856850270739379 0.406307916662468
+ POINT 1417 0.7026443288123971 0.4235644027690169
+ POINT 1418 0.7132215200510187 0.3990612984460665
+ POINT 1419 0.101697719700112 1.440476381105105
+ POINT 1420 0.08912745822931681 1.463618880102634
+ POINT 1421 0.1144944044352526 1.463368840251245
+ POINT 1422 -0.02546526567548752 1.395090468753529
+ POINT 1423 -0.01281857489075695 1.372240398789832
+ POINT 1424 -0.03828776780135701 1.372220848013077
+ POINT 1425 0.8555518672793381 1.382418381923499
+ POINT 1426 0.842884481629264 1.403925731244831
+ POINT 1427 0.8551478966137398 1.426299615422804
+ POINT 1428 0.8313171737401002 1.425726114951844
+ POINT 1429 0.8891937746338823 1.404563611554632
+ POINT 1430 0.8790252482219515 1.426494913235229
+ POINT 1431 0.7572267681785716 1.423535906668505
+ POINT 1432 0.7447139939428928 1.400644607335844
+ POINT 1433 0.7321194772741257 1.422471792704717
+ POINT 1434 0.6812742775645826 1.465776229718502
+ POINT 1435 0.6682277400060515 1.442388096241334
+ POINT 1436 0.6555748733889606 1.464695517798003
+ POINT 1437 0.719279697845739 1.444415950099606
+ POINT 1438 0.7067669236100602 1.421524650766945
+ POINT 1439 0.6428324495039957 1.487327534508797
+ POINT 1440 0.6297859119454646 1.46393940103163
+ POINT 1441 0.603774065369273 1.462825753707352
+ POINT 1442 0.6165164892542379 1.440193736996558
+ POINT 1443 0.5777973247127668 1.462120378357148
+ POINT 1444 0.5910667474039935 1.48586604239222
+ POINT 1445 0.6303380302709063 1.509941470431068
+ POINT 1446 0.6561269917144021 1.510697587197442
+ POINT 1447 0.6922365980893541 0.4533309645527419
+ POINT 1448 0.7195642990582893 0.4462895426112284
+ POINT 1449 0.6793771606181226 0.4780757865611179
+ POINT 1450 0.6703042648708137 0.3868682272816851
+ POINT 1451 0.6833011103054119 1.33050898110618
+ POINT 1452 0.7085375134515085 1.332564628881256
+ POINT 1453 0.6967118325267567 1.309492331127799
+ POINT 1454 0.6853430508730047 1.287675718611557
+ POINT 1455 0.7105794540191015 1.289731366386634
+ POINT 1456 0.6575313827903921 1.328486298526005
+ POINT 1457 0.6693570637151439 1.351558596279463
+ POINT 1458 0.6744679356861316 1.264325937343032
+ POINT 1459 0.6606003141937868 1.284086902084198
+ POINT 1460 0.6454114090119557 1.304183802717225
+ POINT 1461 0.6314673624216878 1.325233417890507
+ POINT 1462 0.6345362938250825 1.2808340214487
+ POINT 1463 0.5643035496293995 0.7618513896376836
+ POINT 1464 0.5508830750377659 0.7862088377188012
+ POINT 1465 0.5770841680864014 0.7852773584088389
+ POINT 1466 0.6035323001949775 0.7836349515172326
+ POINT 1467 0.590111825603344 0.8079923995983502
+ POINT 1468 0.5777973247127535 0.7378796216428531
+ POINT 1469 0.6037740653692615 0.7371742462926494
+ POINT 1470 0.5910667474039799 0.7141339576077812
+ POINT 1471 0.6165164892542279 0.7598062630034432
+ POINT 1472 0.6297859119454543 0.7360605989683713
+ POINT 1473 0.3957094643753987 1.459653644158553
+ POINT 1474 0.3699173557103026 1.459689598687093
+ POINT 1475 0.6295441467711704 0.7825213041929545
+ POINT 1476 0.5515962316641181 0.7388111009528155
+ POINT 1477 0.5220280546541926 0.2470716852197019
+ POINT 1478 0.4995872683653374 0.2631815245947404
+ POINT 1479 0.5188207902004669 0.2749532500888434
+ POINT 1480 -0.6088248682915238 1.741173611493827
+ POINT 1481 -0.5958528806268083 1.763809435790671
+ POINT 1482 -0.5828880610475138 1.74073011370341
+ POINT 1483 -0.6086396647394946 1.78558832323274
+ POINT 1484 -0.5827028574954846 1.785144825442323
+ POINT 1485 -0.3585509031986421 0.6694887866608198
+ POINT 1486 -0.3709726740250589 0.6930939490844596
+ POINT 1487 -0.3451753083596161 0.6930199046850658
+ POINT 1488 0.02159211418002621 0.1222318464037917
+ POINT 1489 0.02161573739333394 0.1002336473470703
+ POINT 1490 0.0001246961645818607 0.1217677038877894
+ POINT 1491 -0.7977677744455398 0.6191812153427245
+ POINT 1492 -0.785298121069784 0.5976799957166066
+ POINT 1493 -0.8107918388011242 0.5970465633441201
+ POINT 1494 -0.5158174195690226 0.5753954809376767
+ POINT 1495 -0.5031984159488225 0.5522308117570145
+ POINT 1496 -0.5292405446931684 0.5520546258012075
+ POINT 1497 -0.346757104266525 0.599142031196148
+ POINT 1498 -0.3335355235191821 0.6224820813499081
+ POINT 1499 -0.3209507304937229 0.5990464227346768
+ POINT 1500 -0.3718450830780345 0.6460702604357964
+ POINT 1501 -0.3852104684419619 0.6225918834433488
+ POINT 1502 -0.3977136542280123 0.6460844540677659
+ POINT 1503 -0.3460477174125917 0.6459962160364026
+ POINT 1504 -0.3202413436397897 0.6459006075749315
+ POINT 1505 -0.3726337015921644 0.5991914840470817
+ POINT 1506 -0.3985022727421421 0.5992056776790512
+ POINT 1507 -0.3600489085667051 0.5757558254318502
+ POINT 1508 -0.3732726412975153 0.552430507123382
+ POINT 1509 -0.3473960439718758 0.5523810542724483
+ POINT 1510 -0.3865659985241779 0.529080623042571
+ POINT 1511 -0.3992188631190072 0.552455394201973
+ POINT 1512 -0.7833822327188185 0.5124940285272445
+ POINT 1513 -0.8083223964676064 0.5112599016808302
+ POINT 1514 -0.7981225120244301 0.5327319873938654
+ POINT 1515 -0.7858789610960825 0.5546634514634818
+ POINT 1516 -0.810565736353716 0.5536138796483858
+ POINT 1517 -0.6227302476297141 1.718996771584701
+ POINT 1518 -0.6356950672090087 1.742076093671961
+ POINT 1519 -0.633174618481992 1.786260560647708
+ POINT 1520 -0.6200245953506682 1.80759595029936
+ POINT 1521 -0.6624607506170896 1.744643812823277
+ POINT 1522 -0.6485553712788994 1.766820652732404
+ POINT 1523 -0.7346825660925169 0.4631888617147741
+ POINT 1524 -0.7195696082196974 0.4462958084808721
+ POINT 1525 -0.7452825106742071 0.4332511872652864
+ POINT 1526 -0.659940301890073 1.788828279799023
+ POINT 1527 -0.8268481821912206 1.015023250703939
+ POINT 1528 -0.8131841191797272 0.9934610174593526
+ POINT 1529 -0.8394688145562762 0.9931840989247629
+ POINT 1530 -0.582374689061536 1.694781676305339
+ POINT 1531 -0.5951981347674602 1.671758029398752
+ POINT 1532 -0.6086834944181534 1.69507064249998
+ POINT 1533 -0.5696415206753123 1.71782204747511
+ POINT 1534 -0.5561561610246191 1.694509434373882
+ POINT 1535 -0.5566695330105969 1.740457871771953
+ POINT 1536 -0.6355536933356384 1.695973124678114
+ POINT 1537 -0.7237276966616626 0.931087400970832
+ POINT 1538 -0.735961323391764 0.9513918657618932
+ POINT 1539 -0.6606007340361523 0.9159147762345927
+ POINT 1540 -0.6853435919266501 0.9123262368856455
+ POINT 1541 -0.7105801576185694 0.9102709051629009
+ POINT 1542 -0.7350966189163819 0.909271221313189
+ POINT 1543 0.5314786558844472 1.786704308334524
+ POINT 1544 0.5052744047175955 1.787048198946281
+ POINT 1545 0.5187692149696779 1.810010682755713
+ POINT 1546 0.4918813558833992 1.763873926248328
+ POINT 1547 0.4791719149686299 1.787180300669517
+ POINT 1548 0.5321878076948352 1.832868145186822
+ POINT 1549 0.5059835565279835 1.833212035798579
+ POINT 1550 -0.6967125141813695 0.8905100572280027
+ POINT 1551 -0.7611202463885229 0.9512931907700419
+ POINT 1552 -0.7488374118208119 0.9725973394108148
+ POINT 1553 -0.7605093348037115 0.9945278175899641
+ POINT 1554 0.5625339662120833 1.926774175248419
+ POINT 1555 0.5633085147008768 1.903655018663274
+ POINT 1556 0.5420886924524324 1.918092904036442
+ POINT 1557 0.1677414786678726 0.2270780422792451
+ POINT 1558 0.1804446514015915 0.2496346520056653
+ POINT 1559 0.193035027333615 0.2274065764921131
+ POINT 1560 0.2174921059328282 0.2276862506751559
+ POINT 1561 0.5472629010953567 1.857053813436395
+ POINT 1562 0.560048559537051 1.83385246039353
+ POINT 1563 0.5312253503351529 1.875657801209366
+ POINT 1564 0.5590861021773688 1.876642116416074
+ POINT 1565 0.5793460654610805 1.885051030890303
+ POINT 1566 0.5970797690082499 1.849928708387881
+ POINT 1567 0.5975686591236528 1.87131456991306
+ POINT 1568 0.6019478252094758 1.898535419205424
+ POINT 1569 0.1555718359053446 0.2036118855782081
+ POINT 1570 0.1429814599733212 0.2258399610917604
+ POINT 1571 0.1439221224946498 0.1804659099124536
+ POINT 1572 0.167842463899226 0.2725046956883677
+ POINT 1573 0.1931360125649684 0.2728332299012358
+ POINT 1574 0.142237482482294 0.2721968542048874
+ POINT 1575 0.1549288436456708 0.2953954321004578
+ POINT 1576 0.1297199434607255 0.2485855103081687
+ POINT 1577 0.1168063232071703 0.2714762467202588
+ POINT 1578 0.1175503006981975 0.2251193536071318
+ POINT 1579 0.7727278633415622 1.706152480038197
+ POINT 1580 0.7561653849383382 1.726597700498584
+ POINT 1581 0.7770294917647319 1.729464191934571
+ POINT 1582 0.06908332273710376 0.1747286278198352
+ POINT 1583 0.09421117423099265 0.1767843383137211
+ POINT 1584 0.08315579167291505 0.1518961329663628
+ POINT 1585 0.04265311679122231 0.173500772525977
+ POINT 1586 0.05370849934929992 0.1983889778733353
+ POINT 1587 0.1054752612529872 0.2009953187789585
+ POINT 1588 0.1195477301887986 0.1781628239254862
+ POINT 1589 0.219166043066515 1.834489962904977
+ POINT 1590 0.2062562339231802 1.811287690954754
+ POINT 1591 0.1933706155427234 1.834601492328013
+ POINT 1592 0.1418759959763775 1.834897705032838
+ POINT 1593 0.1161431086205539 1.835122613742161
+ POINT 1594 0.1290789398476717 1.858332259149197
+ POINT 1595 0.1805461259447767 1.857955557359055
+ POINT 1596 0.1676363168014419 1.834753285408832
+ POINT 1597 0.1547004855743241 1.811543640001796
+ POINT 1598 0.0896562702362601 1.602289317442028
+ POINT 1599 0.1025878977983515 1.625443281760437
+ POINT 1600 0.1153086599178669 1.602180723526728
+ POINT 1601 0.07678314854904517 1.579134341134798
+ POINT 1602 0.1399539016339994 1.463088405411779
+ POINT 1603 0.1273836401632042 1.486230904409308
+ POINT 1604 0.1402684036869221 1.509227444908606
+ POINT 1605 0.1148089064881753 1.509507879748071
+ POINT 1606 0.05108260086982749 1.532946811319066
+ POINT 1607 0.06390415364037226 1.556049285975679
+ POINT 1608 0.08949803744710266 1.555941704049199
+ POINT 1609 0.1150353511838344 1.555765589727844
+ POINT 1610 0.1021563562751615 1.532680534568724
+ POINT 1611 0.08927159275144354 1.509683994069426
+ POINT 1612 7.428719746837079e-06 1.533036939287995
+ POINT 1613 -0.01276113607140754 1.556176997382865
+ POINT 1614 0.2961133342937295 1.694442886443847
+ POINT 1615 0.2830222954966014 1.67117810872102
+ POINT 1616 0.2702828316229331 1.69454123434789
+ POINT 1617 0.3092717619152052 1.717733002175829
+ POINT 1618 0.2964620672925344 1.741078443935528
+ POINT 1619 0.3223599587876784 1.741005434040641
+ POINT 1620 0.3611306484642939 1.717613870675284
+ POINT 1621 0.3478997028378957 1.694303108493322
+ POINT 1622 0.3220112257888735 1.694369876548959
+ POINT 1623 0.3347412752164199 1.67101299276134
+ POINT 1624 0.1918396748742629 1.555163529082631
+ POINT 1625 0.217435731860563 1.554883636066597
+ POINT 1626 0.2043996879889357 1.53173101581494
+ POINT 1627 0.1658233841822933 1.508980689200408
+ POINT 1628 0.1532486505072644 1.532257664539172
+ POINT 1629 0.2575396603890411 1.717902149183284
+ POINT 1630 0.2444486215919129 1.694637371460457
+ POINT 1631 0.08985063675832938 1.648756943517773
+ POINT 1632 0.1155030264399362 1.648648349602473
+ POINT 1633 0.4118661967328268 1.624215596781857
+ POINT 1634 0.4244420385416325 1.600815208290956
+ POINT 1635 0.3985091019519902 1.600796406954491
+ POINT 1636 0.3992263281405393 1.647546850759382
+ POINT 1637 0.3732815062043133 1.647571510075547
+ POINT 1638 0.4251592647301816 1.647565652095847
+ POINT 1639 0.3451818520402872 1.506981378900907
+ POINT 1640 0.3585576302186719 1.53051271052806
+ POINT 1641 0.3070350103581208 1.530763690657368
+ POINT 1642 0.2945239827138944 1.554277839066938
+ POINT 1643 0.3202500488775552 1.554100737476281
+ POINT 1644 0.2556523445848479 1.531195957523465
+ POINT 1645 0.2681102110698584 1.507649825487799
+ POINT 1646 0.2424536114602464 1.50790499076324
+ POINT 1647 0.2053043918719369 1.624911692035909
+ POINT 1648 0.2179469147147339 1.601540551795112
+ POINT 1649 0.1922331959030932 1.601687289575084
+ POINT 1650 0.3875369179767567 1.764206438289854
+ POINT 1651 0.3742918668978715 1.740908278246341
+ POINT 1652 0.348330871843927 1.740954399851998
+ POINT 1653 0.3355211772212561 1.764299841611697
+ POINT 1654 0.4529693202287975 1.787405594476623
+ POINT 1655 0.4663623690629938 1.810579867174576
+ POINT 1656 0.4268707599995851 1.787484615069168
+ POINT 1657 0.066362416158208 0.2230270715368231
+ POINT 1658 0.03993221021232655 0.2217992162429649
+ POINT 1659 0.09221374474039161 0.2237408679953668
+ POINT 1660 -0.1806324006256212 2.039040406621616
+ POINT 1661 -0.1937799709011503 2.059848481252433
+ POINT 1662 -0.1701239843308744 2.062254251609057
+ POINT 1663 0.07843745560341825 0.2471511063649964
+ POINT 1664 -0.06453169967790989 1.835474434918656
+ POINT 1665 -0.03873932786479044 1.835569225358248
+ POINT 1666 -0.05157511727675421 1.812075189638412
+ POINT 1667 0.9329092126761649 1.40198468162051
+ POINT 1668 0.9462655865016076 1.42339053759003
+ POINT 1669 0.02800114080161467 0.9895457515244608
+ POINT 1670 0.0414249946122152 0.9660257487493666
+ POINT 1671 0.01342466119982795 0.9662436982240942
+ POINT 1672 0.01461979926873538 1.013476645293224
+ POINT 1673 0.04262013268112264 1.013258695818497
+ POINT 1674 0.06802759705977945 0.9655181002374882
+ POINT 1675 0.05345111745799274 0.9422160469371217
+ POINT 1676 0.07198015775009842 1.013068007074732
+ POINT 1677 0.05859881621721913 1.036998900843496
+ POINT 1678 0.94957717757347 1.35761582538102
+ POINT 1679 0.94782289199453 1.33451455143615
+ POINT 1680 0.92867075401174 1.344010419574911
+ POINT 1681 0.9422855600890744 1.383226532683664
+ POINT 1682 0.9210486921777705 1.385869842456627
+ POINT 1683 0.9617787456594511 1.373827764110459
+ POINT 1684 0.8492699027251828 1.582535948793425
+ POINT 1685 0.8366724454576649 1.604050617141834
+ POINT 1686 0.8629531698349334 1.60528390699867
+ POINT 1687 0.08414133693729417 0.9885340160818017
+ POINT 1688 0.0961674597830717 0.9647243142695565
+ POINT 1689 0.1001200204733907 1.012274221106801
+ POINT 1690 0.8727793183530305 1.538476921875568
+ POINT 1691 0.8585628686269344 1.515439111641427
+ POINT 1692 0.8612496847640145 1.560634275425223
+ POINT 1693 0.8870887851205513 1.56159883807625
+ POINT 1694 0.8352371979468557 1.559558046376683
+ POINT 1695 0.9460344623234981 0.995063476918987
+ POINT 1696 0.9741286819321051 1.007452278092553
+ POINT 1697 0.9665514017727823 0.9842666882473525
+ POINT 1698 0.564303549629412 1.438148610362317
+ POINT 1699 0.5515962316641325 1.461188899047185
+ POINT 1700 0.23151436300617 0.2493891409979101
+ POINT 1701 0.2188234909441668 0.2728820983986323
+ POINT 1702 0.2445996538830029 0.272308053178009
+ POINT 1703 0.257792745179207 0.2957912277141418
+ POINT 1704 0.976209586079997 1.165287136069623
+ POINT 1705 0.9741286819321052 1.192547721907448
+ POINT 1706 0.9970992459298592 1.176112375906327
+ POINT 1707 0.3984345219252731 0.2018665792578872
+ POINT 1708 0.3934115203775905 0.180637516735541
+ POINT 1709 0.3877594910370942 0.2478459711072964
+ POINT 1710 0.3974439976520571 0.2285948689783129
+ POINT 1711 0.4159745351225428 0.2178057741872857
+ POINT 1712 0.9762095860799969 1.034712863930378
+ POINT 1713 0.9970992459298593 1.023887624093674
+ POINT 1714 0.06365677737895595 1.463777554324211
+ POINT 1715 0.07645346211409645 1.48667001347035
+ POINT 1716 0.06380091190108267 1.509842668291003
+ POINT 1717 0.0382644702324804 1.50993283071999
+ POINT 1718 -0.06377674746517002 1.372298089568516
+ POINT 1719 -0.05113005668043945 1.349448019604819
+ POINT 1720 -0.2009698514016221 1.346529228471641
+ POINT 1721 -0.214011670840064 1.36860674833058
+ POINT 1722 -0.1891568856984704 1.370351772645079
+ POINT 1723 -0.1640150826819737 1.371176119789101
+ POINT 1724 -0.1393310543138597 1.37180257764611
+ POINT 1725 -0.1514310378919145 1.348900710643148
+ POINT 1726 -0.1770569021204156 1.39325363964804
+ POINT 1727 -0.1538970377147242 1.625195962064633
+ POINT 1728 -0.1668629127193958 1.648402933673103
+ POINT 1729 -0.1411867376352463 1.648541179110625
+ POINT 1730 0.6782065117866271 0.3651286320925168
+ POINT 1731 0.6522527038334585 0.3702085957079192
+ POINT 1732 0.6812372242441523 1.420170068038982
+ POINT 1733 0.6555378200685302 1.419089356118483
+ POINT 1734 0.694077003672539 1.398225910644094
+ POINT 1735 0.8869454301217814 1.295589564203095
+ POINT 1736 0.899696622558593 1.319238331836917
+ POINT 1737 0.9141652759959884 1.29726037799622
+ POINT 1738 0.8756356821712978 1.273098227908091
+ POINT 1739 0.8611670287339024 1.295076181748787
+ POINT 1740 0.7611195166134986 1.24870905161827
+ POINT 1741 0.7488368251387784 1.227404497995062
+ POINT 1742 0.7359606990235019 1.248610157614951
+ POINT 1743 0.732781142897778 1.512347463368087
+ POINT 1744 0.7580563963117736 1.513032122577995
+ POINT 1745 0.7449730647746016 1.490228093673905
+ POINT 1746 0.7321650314352053 1.467453263250688
+ POINT 1747 0.7574402848492008 1.468137922460596
+ POINT 1748 0.7068124777711398 1.466506121312915
+ POINT 1749 0.6941596111540489 1.488813542869584
+ POINT 1750 0.7822029809019434 1.42432134499357
+ POINT 1751 0.8068192178560862 1.425143099730689
+ POINT 1752 0.7696084642331762 1.446148530362444
+ POINT 1753 0.7824164975725727 1.468923360785661
+ POINT 1754 0.819082632840562 1.447516983908662
+ POINT 1755 0.7607608548099538 0.5548650786953486
+ POINT 1756 0.7732042272273046 0.5757468514379463
+ POINT 1757 0.7858744358458574 0.5546562311495478
+ POINT 1758 0.7601806652812401 0.5978818777875536
+ POINT 1759 0.7852942463171437 0.5976730302417528
+ POINT 1760 0.7348220175850461 0.5981329238036349
+ POINT 1761 0.7469120366748851 0.6200591026074413
+ POINT 1762 -0.9495790216956095 0.8423913764177167
+ POINT 1763 -0.9422877331206259 0.8167810449069697
+ POINT 1764 -0.9617809404832132 0.8261799449944801
+ POINT 1765 0.722882662633703 0.5755038619154791
+ POINT 1766 0.709614034027348 0.597681086735367
+ POINT 1767 0.7367132546088961 0.553643194921778
+ POINT 1768 0.749383463227449 0.5325525746333795
+ POINT 1769 0.7115052710511982 0.5531913578535101
+ POINT 1770 0.3052280098934415 1.436508798374259
+ POINT 1771 0.2928905863011033 1.460278126146482
+ POINT 1772 0.3185169979634312 1.459947422736263
+ POINT 1773 0.2672565380881853 1.460599180256027
+ POINT 1774 0.280545526158175 1.48403780461803
+ POINT 1775 -0.997099456147766 1.023890378073273
+ POINT 1776 -0.976209841321624 1.034715054530326
+ POINT 1777 -0.9741290824303535 1.007455379520275
+ POINT 1778 -0.9657213673270058 1.054627269091343
+ POINT 1779 -0.9431236890207385 1.038163822316194
+ POINT 1780 0.317493925420735 1.412351860706
+ POINT 1781 0.291867513758407 1.41268256411622
+ POINT 1782 0.2662706734164078 1.413487264653951
+ POINT 1783 0.2785365889437013 1.389330326985691
+ POINT 1784 0.2540723406933107 1.437440312397545
+ POINT 1785 0.2417272805503824 1.461199990869093
+ POINT 1786 0.2407414158786049 1.414088075267017
+ POINT 1787 -0.263637670997215 0.1533617809126154
+ POINT 1788 -0.2386111897449965 0.1467242403276583
+ POINT 1789 -0.2563575494494993 0.1334179771792528
+ POINT 1790 0.6560673202533777 1.373203620807709
+ POINT 1791 0.6818370477683974 1.375226303387885
+ POINT 1792 0.630073646956026 1.371592960496272
+ POINT 1793 0.6425536310092794 1.395260667604694
+ POINT 1794 -0.1120927493046179 0.1063022514097499
+ POINT 1795 -0.1219004877460144 0.1315926512271701
+ POINT 1796 -0.09835399974522469 0.1289365210505433
+ POINT 1797 0.6170330944287291 1.346992897100646
+ POINT 1798 0.6035194051846309 1.369049943897631
+ POINT 1799 0.2937442592827765 1.507328771378255
+ POINT 1800 0.3194703254464373 1.507151669787598
+ POINT 1801 0.3318911009649429 1.483546459621794
+ POINT 1802 0.40802263082927 1.435980454269945
+ POINT 1803 0.4215000113428563 1.459631069789416
+ POINT 1804 0.447396470030903 1.459728914053369
+ POINT 1805 0.4733716264669992 1.459845183582747
+ POINT 1806 0.4597883342328238 1.436074149430186
+ POINT 1807 0.4350833035770316 1.483402103941977
+ POINT 1808 0.4201856045678724 1.412319608589107
+ POINT 1809 0.3943950576004148 1.412342182958245
+ POINT 1810 0.6049131206502927 1.322690401291866
+ POINT 1811 0.7085375134515046 0.8674353711187441
+ POINT 1812 0.6833011103054076 0.8694910188938203
+ POINT 1813 0.6967118325267532 0.8905076688722018
+ POINT 1814 0.6853430508730016 0.9123242813884431
+ POINT 1815 0.7105794540190986 0.910268633613367
+ POINT 1816 0.7338047832844583 0.8659873356014667
+ POINT 1817 0.7203940610631128 0.8449706856230851
+ POINT 1818 0.735095813085535 0.9092686549294836
+ POINT 1819 0.7601331643063864 0.9080819973002212
+ POINT 1820 0.7469855868937016 0.8872653634678633
+ POINT 1821 0.7237270314317834 0.9310852674457248
+ POINT 1822 0.7588421345053099 0.8648006779722043
+ POINT 1823 -0.3194631103468517 0.692849470411762
+ POINT 1824 -0.3318848811732684 0.7164546328354018
+ POINT 1825 0.5390396832313062 0.7153739267949245
+ POINT 1826 0.5255459081479522 0.739345694789755
+ POINT 1827 -0.07319993195940667 0.1268825556575086
+ POINT 1828 -0.08303914441751115 0.1518939395730454
+ POINT 1829 -0.02888950998544878 0.1466876858415162
+ POINT 1830 -0.0425213026231808 0.1735009238384136
+ POINT 1831 -0.01352573597693642 0.1703486354999191
+ POINT 1832 -0.06896435638176415 0.1747282369332101
+ POINT 1833 -0.09411842416758216 0.1767822023262448
+ POINT 1834 -0.05360058237325181 0.198389186591613
+ POINT 1835 0.01369217503210703 0.1703482600412494
+ POINT 1836 6.038239437501473e-05 0.1971614980381468
+ POINT 1837 0.2183287775332249 0.5518629397858408
+ POINT 1838 0.1926150587215789 0.551716202005869
+ POINT 1839 0.2053043918718482 0.5750883079640909
+ POINT 1840 0.2441049517546052 0.5519792945594997
+ POINT 1841 0.2314156186043358 0.5286071886012778
+ POINT 1842 0.3194703254463942 0.6928483302124017
+ POINT 1843 0.3318911009649054 0.7164535403782055
+ POINT 1844 0.3451818520402472 0.6930186210990927
+ POINT 1845 -0.759070512126703 0.642334474604671
+ POINT 1846 -0.7337114615940578 0.6425850992847617
+ POINT 1847 -0.7469150061815546 0.6200652723953017
+ POINT 1848 -0.7327832660600251 0.6876579163375858
+ POINT 1849 -0.7580588457643663 0.686973645637339
+ POINT 1850 -0.7449751442851853 0.7097772604807937
+ POINT 1851 -0.8098872469285407 0.641144283352781
+ POINT 1852 -0.7843935291972007 0.6417777157252675
+ POINT 1853 -0.7711899846097039 0.6642975426147275
+ POINT 1854 -0.7833818628348641 0.6864168867579354
+ POINT 1855 0.6044784189713848 0.6905296280443125
+ POINT 1856 0.5785016783148769 0.6912350033945163
+ POINT 1857 0.5525300383735792 0.6916696954329227
+ POINT 1858 0.565941709940984 0.6680653658694539
+ POINT 1859 0.5264797148574134 0.6922042892698621
+ POINT 1860 -0.6035321568988299 1.416362299720279
+ POINT 1861 -0.6295443969124399 1.417475651973637
+ POINT 1862 -0.6165165418360619 1.440190569756709
+ POINT 1863 -0.6425539998817764 1.395257737807628
+ POINT 1864 -0.6555383848190084 1.419086007844059
+ POINT 1865 -0.8629580988590819 0.5947245111688882
+ POINT 1866 -0.8492742954101373 0.6174720640786515
+ POINT 1867 -0.8366770569123636 0.5959572880303188
+ POINT 1868 -0.8242074035366078 0.574456068404201
+ POINT 1869 -0.8367105808207925 0.5523546732213156
+ POINT 1870 -0.477143991202472 0.5523158171414201
+ POINT 1871 -0.4905671163266177 0.5289749620049509
+ POINT 1872 -0.4778770142236268 0.5057916937735174
+ POINT 1873 -0.5039314389699773 0.5057066883891118
+ POINT 1874 -0.555374438862116 0.5518751158888794
+ POINT 1875 -0.5427554352419158 0.5287104467082172
+ POINT 1876 -0.6086834944181689 0.50492935750002
+ POINT 1877 -0.6227302476297274 0.4810032284152993
+ POINT 1878 -0.6355536933356507 0.5040268753218862
+ POINT 1879 -0.5823746890615545 0.5052183236946611
+ POINT 1880 -0.5951981347674777 0.528241970601248
+ POINT 1881 -0.6480318639392053 0.5278510747347533
+ POINT 1882 -0.6620786171507639 0.5039249456500327
+ POINT 1883 -0.6918589652002054 0.5019056629854524
+ POINT 1884 -0.6793807945966507 0.4780814635725852
+ POINT 1885 -0.7172504588747789 0.5036995435025926
+ POINT 1886 -0.6999482814288921 0.5295430255800401
+ POINT 1887 -0.4518159218726016 0.5057766915404051
+ POINT 1888 -0.4385124559629686 0.5290827387552592
+ POINT 1889 -0.425815686255303 0.5057994629063077
+ POINT 1890 -0.4651802445159612 0.4825084179245659
+ POINT 1891 -0.3347298011327886 0.5289887662159136
+ POINT 1892 -0.3215060684019784 0.5523140845243819
+ POINT 1893 -0.2960986803010351 0.505558604924252
+ POINT 1894 -0.3092572916926534 0.4822686083807578
+ POINT 1895 -0.3219984369545094 0.5056317999243531
+ POINT 1896 -0.3478884125244068 0.5056987696724196
+ POINT 1897 -0.4118595737137472 0.5757866979008666
+ POINT 1898 -0.4251529309404098 0.5524368138200555
+ POINT 1899 -0.4511531665577085 0.5524140424541528
+ POINT 1900 -0.4637844661799133 0.5756698922062163
+ POINT 1901 -0.4244363405635447 0.5991870972971337
+ POINT 1902 -0.7607649883473534 0.5548718551270597
+ POINT 1903 -0.7367170075156879 0.5536495285711691
+ POINT 1904 -0.7493877559351311 0.5325592326530709
+ POINT 1905 -0.760184148321055 0.5978883993801845
+ POINT 1906 -0.7348250977884099 0.5981390240602753
+ POINT 1907 -0.7732082126766393 0.5757537473815801
+ POINT 1908 -0.7306494736366258 0.4862825192556461
+ POINT 1909 -0.7387387898653124 0.5139198818502339
+ POINT 1910 -0.7561708970830505 0.4734092000624154
+ POINT 1911 -0.7770353879932983 0.470543086616642
+ POINT 1912 -0.7727332666489999 0.4938546777244074
+ POINT 1913 -0.762786770696978 0.5151422084061245
+ POINT 1914 -0.76050933480371 1.205472182410036
+ POINT 1915 -0.7488374118208101 1.227402660589185
+ POINT 1916 -0.7353504118069509 1.205373507418185
+ POINT 1917 -0.523006557866122 0.8364266710300934
+ POINT 1918 -0.5370795067138598 0.8107288620021464
+ POINT 1919 -0.5495901255502231 0.8353346896117829
+ POINT 1920 0.01292294391775528 1.788794823101427
+ POINT 1921 -0.01288210770578306 1.788794740675104
+ POINT 1922 2.230615990359008e-05 1.812170062504326
+ POINT 1923 0.03868408612893522 1.788759654835784
+ POINT 1924 0.02577967226324856 1.765384333006562
+ POINT 1925 -0.06475427313565842 1.882345416216327
+ POINT 1926 -0.05189398635471858 1.906007400090941
+ POINT 1927 -0.0388356234850063 1.882630454513107
+ POINT 1928 -0.02583418011976923 1.859051941280456
+ POINT 1929 -0.0129738933388294 1.882713925155071
+ POINT 1930 0.0129274539049248 1.835652778426534
+ POINT 1931 0.02588826152335953 1.859052115351459
+ POINT 1932 0.03878816540187666 1.835569481855573
+ POINT 1933 -0.01287759771861354 1.835652696000212
+ POINT 1934 0.1938140884070442 2.059843792119981
+ POINT 1935 0.2073473437629118 2.078267386267408
+ POINT 1936 0.2177930904097599 2.054761355108236
+ POINT 1937 -0.6300738448254859 1.371590482350539
+ POINT 1938 -0.6560678327320545 1.373200838220961
+ POINT 1939 -0.6035193268966255 1.369047780643213
+ POINT 1940 -0.5901115431865798 1.392005250676685
+ POINT 1941 -0.5770708581079972 1.367405649382692
+ POINT 1942 -0.6170331597469034 1.346990881056546
+ POINT 1943 -0.5770836881102017 1.414720168459757
+ POINT 1944 -0.6049130638281406 1.322688857702728
+ POINT 1945 -0.5771873625625306 1.318474892627532
+ POINT 1946 -0.5916217845726283 1.29671557098104
+ POINT 1947 0.09845802958290904 2.071056279747404
+ POINT 1948 0.1121830258768022 2.093687560908923
+ POINT 1949 0.1219772124744043 2.068401065767968
+ POINT 1950 -0.5629979092602611 1.341707840354745
+ POINT 1951 -0.5497066300047486 1.315734553633057
+ POINT 1952 -0.5495901255502154 1.364665310388217
+ POINT 1953 -0.6314675817570012 1.325231559410054
+ POINT 1954 -0.1462920886718663 2.066104389745012
+ POINT 1955 -0.1594861386106257 2.087200167945221
+ POINT 1956 0.4651849042733789 1.71749459139796
+ POINT 1957 0.4785117485721503 1.740742946511622
+ POINT 1958 0.504614238321116 1.740610844788385
+ POINT 1959 0.6703042648708164 1.813131772718315
+ POINT 1960 0.6522527038334611 1.829791404292081
+ POINT 1961 0.6782065117866272 1.834871367907484
+ POINT 1962 0.6317954942580731 1.825046421091847
+ POINT 1963 0.5173342898657842 1.717516777026086
+ POINT 1964 0.530703897177033 1.740647756762791
+ POINT 1965 0.6044784189713985 1.509470371955688
+ POINT 1966 0.617772961181805 1.532840424644333
+ POINT 1967 0.5785016783148922 1.508764996605485
+ POINT 1968 0.2824547084863233 2.032029790333202
+ POINT 1969 0.3028508698660445 2.053037958646653
+ POINT 1970 0.3039223531657549 2.025207926832221
+ POINT 1971 -0.6072650725682625 1.824369087671711
+ POINT 1972 -0.597083916434564 1.849924177641984
+ POINT 1973 -0.5853084854744725 1.832478802854666
+ POINT 1974 -0.6195300370470123 1.863200403524025
+ POINT 1975 -0.5975734499532223 1.87131011870698
+ POINT 1976 -0.6394984234703667 1.846559206064521
+ POINT 1977 -0.6402042756369813 1.868204715851268
+ POINT 1978 -0.6318000263107599 1.825041325086678
+ POINT 1979 0.3747504170734515 2.008268269474963
+ POINT 1980 0.3934115203776062 2.019362483264453
+ POINT 1981 0.3984345219252951 1.998133420742108
+ POINT 1982 0.7981174202709679 1.667275551772446
+ POINT 1983 0.7833770047178981 1.687513289578244
+ POINT 1984 0.8083167462868259 1.688747855768731
+ POINT 1985 0.7627819220521725 1.684864732053004
+ POINT 1986 0.7469120366748905 1.579940897392559
+ POINT 1987 0.7590675794030165 1.557671717840409
+ POINT 1988 0.7337089317068239 1.557420671824328
+ POINT 1989 0.7348220175850517 1.601867076196366
+ POINT 1990 0.7601806652812444 1.602118122212447
+ POINT 1991 0.6446517850383382 1.579268090624311
+ POINT 1992 0.6570464802909206 1.556389322114375
+ POINT 1993 0.6312378772287305 1.556190291629649
+ POINT 1994 0.6053782659292226 1.555719193154269
+ POINT 1995 0.5794163017667339 1.555430834055743
+ POINT 1996 0.5928812178136593 1.578780701041059
+ POINT 1997 0.7096140340273553 1.602318913264633
+ POINT 1998 0.7228826626337093 1.624496138084521
+ POINT 1999 0.6960068885396131 1.579578486242758
+ POINT 2000 0.6840675335882707 1.602207548130913
+ POINT 2001 0.1420678447162463 1.881509879911448
+ POINT 2002 0.1163349573604227 1.881734788620771
+ POINT 2003 -0.03835140563554747 1.556139333639542
+ POINT 2004 -0.02558123994522345 1.579279426194469
+ POINT 2005 0.1661991729129332 1.555356565651225
+ POINT 2006 0.140644192417562 1.555603321359422
+ POINT 2007 0.1792352167845606 1.578509185902882
+ POINT 2008 0.1279858735895032 1.578864490839897
+ POINT 2009 0.1409175011515946 1.602018455158306
+ POINT 2010 0.1665926939417635 1.601880326143678
+ POINT 2011 0.1539154802701272 1.625196558830509
+ POINT 2012 0.1913072521895647 1.508595367099871
+ POINT 2013 0.1783270053692225 1.485565147469305
+ POINT 2014 0.2169033091758649 1.508315474083837
+ POINT 2015 0.2293611756608755 1.484769342048171
+ POINT 2016 0.2186724473705396 1.694753726234116
+ POINT 2017 0.2314156186044317 1.671392811398722
+ POINT 2018 0.218328777533318 1.648137060214159
+ POINT 2019 0.2441049517546913 1.6480207054405
+ POINT 2020 0.1926150587216773 1.64828379799413
+ POINT 2021 0.2705683899608683 1.741154119801715
+ POINT 2022 0.2836565868333416 1.764426551666527
+ POINT 2023 0.2447341799298482 1.741250256914283
+ POINT 2024 0.1288047307753781 1.765049699382679
+ POINT 2025 0.1416043882729745 1.741685567590415
+ POINT 2026 0.1158493005240225 1.741802501408054
+ POINT 2027 0.1417499916367949 1.788310412595421
+ POINT 2028 0.1675103124618594 1.788165992971415
+ POINT 2029 0.1159949038878428 1.78842734641306
+ POINT 2030 0.08997785843156919 1.695293016168183
+ POINT 2031 0.1029194547424216 1.718531195296174
+ POINT 2032 0.1157073617107665 1.6952001904878
+ POINT 2033 0.09011979724482513 1.741895327088438
+ POINT 2034 0.06436538296882638 1.741986592858738
+ POINT 2035 0.07729522875042726 1.765257898970618
+ POINT 2036 0.3726415027667168 1.600810407927067
+ POINT 2037 0.3852173445755225 1.577410019436166
+ POINT 2038 0.3977195638381791 1.553917425226499
+ POINT 2039 0.3718519646529057 1.553931426199075
+ POINT 2040 0.3460554109560153 1.554005304737727
+ POINT 2041 0.333544383311789 1.577519453147297
+ POINT 2042 0.2436343471927065 1.601347931644089
+ POINT 2043 0.2305631512238629 1.578123529183264
+ POINT 2044 0.2687797639481477 1.554435850640132
+ POINT 2045 0.2819948024675821 1.577772897459046
+ POINT 2046 0.2431231643385356 1.554691015915573
+ POINT 2047 0.2693979293373441 1.601214042578013
+ POINT 2048 0.2951421481030908 1.601056031004819
+ POINT 2049 0.2567816928282152 1.624631065189861
+ POINT 2050 0.2956990365701253 1.647788468470381
+ POINT 2051 0.2698685338993289 1.647886816374424
+ POINT 2052 0.4235901310330976 1.553956356740904
+ POINT 2053 0.4102247511104807 1.530477763503813
+ POINT 2054 0.422641081597192 1.506910477348121
+ POINT 2055 0.4485375402852387 1.507008321612074
+ POINT 2056 0.3746559557585566 1.787562250820895
+ POINT 2057 0.4007007834578086 1.787519881687694
+ POINT 2058 0.413989797781385 1.810840427600209
+ POINT 2059 -0.6522579462527724 1.82978606869217
+ POINT 2060 -0.5052727560677891 1.787044751988329
+ POINT 2061 -0.4791688625267596 1.787177152772756
+ POINT 2062 -0.4918785122037851 1.763870607592289
+ POINT 2063 -0.4825260994418793 1.954450337332696
+ POINT 2064 -0.4803685255622034 1.977066747545017
+ POINT 2065 -0.4600706418055546 1.966749167616457
+ POINT 2066 -0.1219004877456383 2.068407348772862
+ POINT 2067 -0.1120927493041786 2.0936977485903
+ POINT 2068 -0.09835399974472138 2.071063478949492
+ POINT 2069 -0.1325848131291172 2.04374913600609
+ POINT 2070 -0.2174584592228486 1.972312727895629
+ POINT 2071 -0.2314832284425143 1.950609949054088
+ POINT 2072 -0.243240823004479 1.972886741691131
+ POINT 2073 -0.1194686319076173 2.021839750822426
+ POINT 2074 -0.09411842416713141 2.023217797673768
+ POINT 2075 -0.1053938438718595 1.999005453462253
+ POINT 2076 -0.1438602328338454 2.019536791794576
+ POINT 2077 -0.08911692886440384 1.463618711361384
+ POINT 2078 -0.07644169741559591 1.486669847770516
+ POINT 2079 -0.06364596962645531 1.463777439603444
+ POINT 2080 -0.1154812820062604 1.648647895993646
+ POINT 2081 -0.128447157010932 1.671854867602115
+ POINT 2082 -0.3702146268368627 1.968091750887542
+ POINT 2083 -0.35870386156296 1.990818330653109
+ POINT 2084 -0.3490169240129869 1.971566988136329
+ POINT 2085 -0.2707536583490266 1.787758560969576
+ POINT 2086 -0.2836385447920167 1.764425065259519
+ POINT 2087 -0.2966496600545434 1.787682739015524
+ POINT 2088 -0.2447139148396235 1.741249023873106
+ POINT 2089 -0.2319157665443315 1.764600182665474
+ POINT 2090 -0.2188871382974551 1.74134831932501
+ POINT 2091 -0.270769529515668 1.880934626954435
+ POINT 2092 -0.283801062236604 1.857592596719515
+ POINT 2093 -0.2966876216477112 1.880875286851071
+ POINT 2094 -0.2708238718580571 1.83433408577423
+ POINT 2095 -0.2967419639901003 1.834274745670865
+ POINT 2096 -0.4275530250930679 1.929810447408791
+ POINT 2097 -0.4014002529597884 1.929961674290535
+ POINT 2098 -0.4139704962970759 1.904308440560057
+ POINT 2099 -0.451254476412092 1.924288740346901
+ POINT 2100 -0.4386842330748045 1.949941974077378
+ POINT 2101 -0.387755235521335 1.952152044755015
+ POINT 2102 -0.374172706725343 1.926650037906281
+ POINT 2103 -0.3974421730713081 1.971403387271795
+ POINT 2104 -0.4363691904865304 1.972270874678347
+ POINT 2105 -0.466358834020414 1.810576872172974
+ POINT 2106 -0.45296459015641 1.787402727776934
+ POINT 2107 -0.5059831445529703 1.833208624229884
+ POINT 2108 -0.4932352953951117 1.856972886216202
+ POINT 2109 -0.479815257232905 1.834115559155114
+ POINT 2110 -0.4159752040357154 1.982192509551201
+ POINT 2111 -0.4374741354185797 1.999230994149872
+ POINT 2112 -0.3984345953512431 1.998132215683728
+ POINT 2113 -0.2177667561404701 2.054765077949622
+ POINT 2114 -0.2073206705197153 2.078273039378709
+ POINT 2115 -0.4536109848625554 1.834341134159292
+ POINT 2116 -0.5314783828490546 1.786700546613625
+ POINT 2117 -0.5187687331720291 1.810007091794092
+ POINT 2118 -0.5321887713342358 1.832864418855179
+ POINT 2119 -0.09033298490773178 1.835268454652496
+ POINT 2120 -0.07749719549576803 1.858762490372332
+ POINT 2121 -0.09055555836548029 1.882139435950167
+ POINT 2122 -0.11628537000905 1.881734115643607
+ POINT 2123 -0.1035424476489404 1.905317041487602
+ POINT 2124 -0.1031351364855005 1.811833842134645
+ POINT 2125 -0.1161006323033587 1.835121897588321
+ POINT 2126 -0.09019180074404116 1.788573225484171
+ POINT 2127 -0.115959448139668 1.788426668419996
+ POINT 2128 -0.1287731218948808 1.765048983311427
+ POINT 2129 -0.1417164576363402 1.788309599961901
+ POINT 2130 0.878868534587707 1.383431790194938
+ POINT 2131 0.8677051973641414 1.361350940402645
+ POINT 2132 0.8817493206784481 1.339965933358938
+ POINT 2133 0.8584326533700792 1.338952525087499
+ POINT 2134 0.9013471047186856 1.383496170033779
+ POINT 2135 0.9107234521315952 1.364738021096933
+ POINT 2136 0.9089691665526551 1.341636747152063
+ POINT 2137 0.9742895940953512 1.325299327201649
+ POINT 2138 0.953114413795047 1.311631772818004
+ POINT 2139 -0.5553744388620937 1.648124884111121
+ POINT 2140 -0.5679424135327051 1.625001215950461
+ POINT 2141 -0.5814573040814541 1.648345395043452
+ POINT 2142 -0.5427554352418911 1.671289553291783
+ POINT 2143 -0.5292405446931421 1.647945374198793
+ POINT 2144 -0.5300222668556676 1.694329924461554
+ POINT 2145 -0.6077661094380716 1.648634361238093
+ POINT 2146 -0.6480318639391938 1.672148925265247
+ POINT 2147 -0.6620786171507544 1.696075054349967
+ POINT 2148 -0.6793807945966437 1.721918536427415
+ POINT 2149 -0.6922410986665344 1.746663095487857
+ POINT 2150 0.7711871520524312 1.535708673534874
+ POINT 2151 0.7833790739292548 1.513589303840692
+ POINT 2152 0.7843902570204977 1.558228899103106
+ POINT 2153 0.7977640501395535 1.580825831576763
+ POINT 2154 0.8098836227889682 1.558862787271228
+ POINT 2155 0.8218634048278 1.536961113903026
+ POINT 2156 0.9635693962292076 0.9609244891531068
+ POINT 2157 0.9919382970906427 0.9732781993305182
+ POINT 2158 -0.691858965200199 1.698094337014548
+ POINT 2159 -0.7734558906711323 0.9293776750184719
+ POINT 2160 -0.7863319791001802 0.9505831486673937
+ POINT 2161 -0.7601341054330601 0.9080849026672977
+ POINT 2162 -0.7853458381447174 0.9073748605646494
+ POINT 2163 -0.7469865663899671 0.8872684068593666
+ POINT 2164 -0.1673242262919574 0.4584253926456934
+ POINT 2165 -0.1543701073478312 0.4816724796792437
+ POINT 2166 -0.1415760124475806 0.4583151721802184
+ POINT 2167 -0.1803095606970014 0.4351843035146454
+ POINT 2168 -0.1931036555972521 0.4585416110136706
+ POINT 2169 -0.205901803892532 0.4818927698060387
+ POINT 2170 -0.218887138297576 0.4586516806749907
+ POINT 2171 0.9199356328616758 0.9491331383556942
+ POINT 2172 0.8901007124375502 0.9487716729621116
+ POINT 2173 0.9086222617400498 0.9715164216802041
+ POINT 2174 0.9222341176710974 0.9935719816384989
+ POINT 2175 0.9298113978304201 1.016757571483699
+ POINT 2176 0.8923991972469718 0.9932105162449161
+ POINT 2177 -0.01276259188987216 1.50998295767207
+ POINT 2178 0.01277613859160624 1.509982992132127
+ POINT 2179 0.02549444962286141 1.486878849104064
+ POINT 2180 -0.02548231009783007 1.486878793264389
+ POINT 2181 -0.03825101996968948 1.509932740420258
+ POINT 2182 -0.1267562629161342 1.394459790379788
+ POINT 2183 -0.1141722181260749 1.372184381233835
+ POINT 2184 -0.08910823153630094 1.372183427563885
+ POINT 2185 -0.1016830229340264 1.349526214830207
+ POINT 2186 -0.07626594265721851 1.394956255972143
+ POINT 2187 -0.08895931390180634 1.417783948580912
+ POINT 2188 -0.06362782983067541 1.417898610585542
+ POINT 2189 -0.1912963660933825 1.508594854177943
+ POINT 2190 -0.2168931566549054 1.508314849680527
+ POINT 2191 -0.2043881601031762 1.531730363043117
+ POINT 2192 -0.3478884125243388 1.694301230327581
+ POINT 2193 -0.3738511405262918 1.694254889263011
+ POINT 2194 -0.3611197763480061 1.717611855554572
+ POINT 2195 -0.3865659985241228 1.67091937695743
+ POINT 2196 -0.39979736234779 1.69423000218442
+ POINT 2197 -0.4905671163265843 1.671025037995049
+ POINT 2198 -0.4771439912024373 1.64768418285858
+ POINT 2199 -0.5031984159487926 1.647769188242986
+ POINT 2200 -0.2951308726558796 1.601054699615573
+ POINT 2201 -0.3209507304936638 1.600953577265324
+ POINT 2202 -0.3083524534032209 1.624394749769333
+ POINT 2203 -0.2693856405037467 1.6012128703714
+ POINT 2204 -0.2567677755391445 1.624629920267187
+ POINT 2205 -0.2436208204774546 1.601346918519005
+ POINT 2206 -0.2819839175941897 1.577771697867391
+ POINT 2207 -0.1925967795177521 1.648282985232417
+ POINT 2208 -0.1798864794382742 1.67162820227841
+ POINT 2209 -0.2052880841558631 1.624910842520951
+ POINT 2210 -0.2183116508747414 1.648136111126258
+ POINT 2211 -0.1918266319748387 1.555162877211723
+ POINT 2212 -0.2174234225363615 1.554882872714307
+ POINT 2213 -0.2305502899250405 1.578122627753066
+ POINT 2214 -0.243111818053378 1.55469011358446
+ POINT 2215 -0.1922175536034488 1.601686551755012
+ POINT 2216 -0.2179324249604382 1.601539677648852
+ POINT 2217 -0.1673242262918176 1.741574607354307
+ POINT 2218 -0.1931036555971227 1.74145838898633
+ POINT 2219 -0.1803095606968581 1.764815696485355
+ POINT 2220 -0.2059018038924146 1.718107230193962
+ POINT 2221 -0.1928693337143564 1.694862776846503
+ POINT 2222 -0.1671354669160001 1.694982725287189
+ POINT 2223 -0.2186528164146888 1.694752707185183
+ POINT 2224 -0.1671354669161206 0.5050172747128121
+ POINT 2225 -0.1413872530717438 0.5049070542473372
+ POINT 2226 -0.1928693337144706 0.5051372231534973
+ POINT 2227 -0.1798864794383832 0.5283717977215908
+ POINT 2228 0.8473101853292009 1.316643067333391
+ POINT 2229 0.8332660620148942 1.338028074377098
+ POINT 2230 0.8360004373787173 1.294151731038386
+ POINT 2231 0.8088230227456525 1.337147295838718
+ POINT 2232 0.7970832660442859 1.314819955392195
+ POINT 2233 0.7837626948159225 1.336248634607923
+ POINT 2234 0.7588421345053131 1.335199322027796
+ POINT 2235 0.7705818912066797 1.357526662474319
+ POINT 2236 0.7577413078717046 1.379093035596912
+ POINT 2237 0.7326340169672587 1.378028921633125
+ POINT 2238 0.7073297322334349 1.511882179253365
+ POINT 2239 0.7204130637706068 1.534686208157456
+ POINT 2240 0.7082575210424807 1.556955387709606
+ POINT 2241 0.6827110206033959 1.556844022575886
+ POINT 2242 0.6692971127937882 1.533766223581223
+ POINT 2243 0.6817915320268777 1.511152287658952
+ POINT 2244 -0.9287798605407519 0.7293681467360079
+ POINT 2245 -0.9145602330542196 0.7521463497258971
+ POINT 2246 -0.905265834250175 0.728855177234897
+ POINT 2247 -0.2186528164147946 0.5052472928148173
+ POINT 2248 0.1326580354726552 0.1562549294472162
+ POINT 2249 -0.07744001868790265 1.304217336555594
+ POINT 2250 -0.08975786123537269 1.327099774967563
+ POINT 2251 -0.06430119379678242 1.326642822748289
+ POINT 2252 -0.9210509320574565 0.8141372751087732
+ POINT 2253 -0.9107254853761652 0.8352685418618812
+ POINT 2254 -0.9013495663017941 0.8165104341791918
+ POINT 2255 -0.9329118140462548 0.7980229372242802
+ POINT 2256 -0.9247285940143708 0.7740775218001106
+ POINT 2257 -0.9462684141426484 0.7766177364233513
+ POINT 2258 -0.9015066520229342 0.7734479953518705
+ POINT 2259 -0.8659605389271577 0.992952178727857
+ POINT 2260 -0.8522964759156644 0.9713899454832702
+ POINT 2261 -0.9286725348528519 0.8559961092298909
+ POINT 2262 -0.9089711690971898 0.8583692683003095
+ POINT 2263 -0.9478247054166341 0.8654921028561451
+ POINT 2264 -0.03881221413296941 1.32656558119285
+ POINT 2265 -0.02599060986506913 1.303610937668185
+ POINT 2266 -0.01281947274872615 1.326416134524715
+ POINT 2267 -0.8930769311862955 1.078804538412766
+ POINT 2268 -0.9062895168718619 1.057842556851372
+ POINT 2269 -0.9194226293405539 1.079038018438606
+ POINT 2270 -0.8141249811528288 1.036505477084733
+ POINT 2271 -0.8404096765293778 1.036228558550143
+ POINT 2272 -0.8538151471042948 1.057659930878235
+ POINT 2273 -0.8665383481426865 1.036177704497441
+ POINT 2274 -0.801618504318806 1.058253434475371
+ POINT 2275 -0.7880570099806486 1.037048126629167
+ POINT 2276 -0.6896002632232917 1.248594553953464
+ POINT 2277 -0.6744683774733495 1.264324375830509
+ POINT 2278 -0.7018338899533936 1.228290089162403
+ POINT 2279 -0.7114448620939492 1.247608450388395
+ POINT 2280 -0.9630933168538751 1.288551762049879
+ POINT 2281 -0.9677776775622389 1.262389599684403
+ POINT 2282 -0.9843457811105139 1.276248072925443
+ POINT 2283 -0.3984345953512647 0.2018677843162772
+ POINT 2284 -0.3747493941036443 0.1917324212053798
+ POINT 2285 -0.3934130036650907 0.1806381514619984
+ POINT 2286 -0.2838010622367179 0.3424074032804859
+ POINT 2287 -0.2707695295157905 0.3190653730455663
+ POINT 2288 -0.2966876216478176 0.3191247131489309
+ POINT 2289 -0.296741963990203 0.3657252543291353
+ POINT 2290 -0.270823871858176 0.3656659142257707
+ POINT 2291 -0.2824427804513729 0.1679696597112325
+ POINT 2292 -0.3028453177000343 0.1469602770360696
+ POINT 2293 -0.3039131500946296 0.1747922514239132
+ POINT 2294 -0.2647823638590002 0.180951879088161
+ POINT 2295 0.4512547779949736 0.2757085956686628
+ POINT 2296 0.4683190704110262 0.293343167306203
+ POINT 2297 0.4794484544971829 0.2732116324239878
+ POINT 2298 0.4825229759492849 0.2455469529572002
+ POINT 2299 0.4803642369967863 0.2229309036258916
+ POINT 2300 0.460067962905683 0.2332485089098206
+ POINT 2301 0.7605087176838941 1.20547382155689
+ POINT 2302 0.7872792261107485 1.206102363525806
+ POINT 2303 0.7737923010658674 1.184072793084317
+ POINT 2304 0.7353499000938972 1.205374927553572
+ POINT 2305 0.7204130637706 0.6653137918425448
+ POINT 2306 0.7337089317068177 0.6425793281756726
+ POINT 2307 0.7082575210424733 0.6430446122903948
+ POINT 2308 0.7073297322334275 0.6881178207466354
+ POINT 2309 0.732781142897772 0.6876525366319133
+ POINT 2310 0.8451092275234906 0.7073003402816336
+ POINT 2311 0.8319451432516871 0.7298612658539125
+ POINT 2312 0.8567446729963768 0.7293390752979049
+ POINT 2313 -0.01342177230082099 1.280368890685214
+ POINT 2314 -0.03941451368506425 1.280518337353349
+ POINT 2315 0.8337633388822435 0.6850830789145806
+ POINT 2316 0.8218634048277976 0.6630388860969748
+ POINT 2317 0.808409763724355 0.6857783380200354
+ POINT 2318 0.8585628686269332 0.684560888358573
+ POINT 2319 0.5242998146976467 1.412698927847031
+ POINT 2320 0.4981303317417178 1.412185571800635
+ POINT 2321 0.5119329736248488 1.436703775005959
+ POINT 2322 0.3687888847024344 1.412253792939
+ POINT 2323 0.3809518584410367 1.388592947258163
+ POINT 2324 0.5420886924524276 0.2819070959635571
+ POINT 2325 0.5197806491651961 0.2978000499362418
+ POINT 2326 -0.06601718919273455 1.281025972364822
+ POINT 2327 -0.09147385663132482 1.281482924584096
+ POINT 2328 0.5553754604353165 0.5518713344656144
+ POINT 2329 0.5427568556955213 0.5287067072636686
+ POINT 2330 0.5292425379611658 0.5520511375587989
+ POINT 2331 0.5679431972271538 0.5749949497599132
+ POINT 2332 0.5814575149615093 0.5516505194647829
+ POINT 2333 -0.05344835162848643 1.257783925381851
+ POINT 2334 0.1654718142430747 1.06092767582316
+ POINT 2335 0.1349702243383391 1.06092767582316
+ POINT 2336 0.1526371887260865 1.085
+ POINT 2337 0.1954884959668178 1.064778854039989
+ POINT 2338 0.1778215315790703 1.040706529863149
+ POINT 2339 -0.292884160701358 0.7397226361838677
+ POINT 2340 -0.267249438257831 0.739401453234935
+ POINT 2341 -0.280537960716977 0.7159630156131653
+ POINT 2342 -0.2540658143763466 0.762560155289516
+ POINT 2343 -0.2417196143919655 0.7388005347188136
+ POINT 2344 -0.08925865744355274 0.6903162204526178
+ POINT 2345 -0.1021424187732746 0.6673197507801671
+ POINT 2346 -0.1147964179833291 0.6904924107990933
+ POINT 2347 -0.06388808387147789 0.6439508989912732
+ POINT 2348 -0.05106797999765471 0.6670533278028767
+ POINT 2349 -0.03835140563563429 0.6438606663604582
+ POINT 2350 -0.1273725873953375 0.7137693729027902
+ POINT 2351 -0.1402563487250594 0.6907729032303396
+ POINT 2352 -0.02558123994531825 0.6207205738055313
+ POINT 2353 -0.01276113607149507 0.6438230026171348
+ POINT 2354 0.01282986639810862 0.5975052045638749
+ POINT 2355 0.02559914718052082 0.6207204935004642
+ POINT 2356 0.03841998395980848 0.5975427880021315
+ POINT 2357 -0.1891568856985005 0.8296482273549225
+ POINT 2358 -0.164015082682006 0.8288238802108994
+ POINT 2359 -0.1770569021204513 0.8067463603519609
+ POINT 2360 0.013424661199844 1.233756301775906
+ POINT 2361 -0.01342243436578781 1.233756294685595
+ POINT 2362 1.419444815688523e-06 1.257276297460689
+ POINT 2363 0.01342532326481082 1.280368897775525
+ POINT 2364 -0.3664754323470254 0.8816853571439125
+ POINT 2365 -0.3913788961516422 0.8789440593984872
+ POINT 2366 -0.3781167863242682 0.9012007923576599
+ POINT 2367 0.1148263648583884 1.327100799937206
+ POINT 2368 0.1390582892738308 1.327749592889053
+ POINT 2369 0.1271324652916053 1.305323163333326
+ POINT 2370 0.1169390195128873 1.282885174448736
+ POINT 2371 0.1411709439283297 1.283533967400582
+ POINT 2372 -0.195489233472336 1.064778501428914
+ POINT 2373 -0.1654724345052048 1.060927588187288
+ POINT 2374 -0.1778216178069463 1.040706089616202
+ POINT 2375 0.03941801538551458 1.280518370362446
+ POINT 2376 0.0259948236398779 1.303610963586971
+ POINT 2377 0.04142499461223108 1.233974251250634
+ POINT 2378 0.02800114080162758 1.21045424847554
+ POINT 2379 -0.1637380546914567 1.327123096318894
+ POINT 2380 -0.1390540263233427 1.327749554175902
+ POINT 2381 0.05345111745801129 1.257783953062879
+ POINT 2382 0.06802759705979487 1.234481899762512
+ POINT 2383 -0.05036962598528509 0.125379318161032
+ POINT 2384 -0.06570168040718957 0.1021606896941414
+ POINT 2385 -0.02137405933904072 0.1222270298225375
+ POINT 2386 -0.02136035900106343 0.100228158496477
+ POINT 2387 0.06602061783307837 1.281026018874325
+ POINT 2388 0.02599482363985209 0.8963890364130295
+ POINT 2389 0.01342532326478826 0.9196311022244754
+ POINT 2390 0.03941801538549231 0.9194816296375543
+ POINT 2391 -0.01342177230084356 0.9196311093147862
+ POINT 2392 1.419444796660341e-06 0.942723702539311
+ POINT 2393 -0.02599060986509493 0.8963890623318154
+ POINT 2394 -0.03941451368508653 0.9194816626466511
+ POINT 2395 -0.06627313437980681 0.2230270684486483
+ POINT 2396 -0.03983008062122344 0.2217997553538518
+ POINT 2397 -0.09213197251227792 0.2237407935867823
+ POINT 2398 -0.07836147076024955 0.2471513623490211
+ POINT 2399 -0.06515763431672736 0.2703576377083625
+ POINT 2400 -0.09101647244919847 0.2710713628464965
+ POINT 2401 2.23061596795731e-05 0.3878299374956742
+ POINT 2402 -0.01288210770598903 0.411205259324896
+ POINT 2403 0.01292294391754929 0.4112051768985736
+ POINT 2404 -0.05189398635503911 0.2939925999090583
+ POINT 2405 -0.06475427313594329 0.3176545837836728
+ POINT 2406 -0.03883562348530612 0.3173695454868933
+ POINT 2407 -0.03923898466609019 0.270072599411583
+ POINT 2408 1.539591138136238e-05 0.4812664302334266
+ POINT 2409 0.01287929953666053 0.4579234328188976
+ POINT 2410 -0.01284537357339849 0.4579234961423243
+ POINT 2411 -0.03853401327419273 0.5045768294390169
+ POINT 2412 -0.02567286930130706 0.5278594308604252
+ POINT 2413 -0.01284813322579198 0.5045490949782616
+ POINT 2414 0.01287653988426704 0.5045490316548349
+ POINT 2415 0.07754751275582819 0.3412370066804921
+ POINT 2416 0.09061024846465593 0.3178600069613095
+ POINT 2417 0.06481170872887482 0.3176541815003207
+ POINT 2418 0.03878816540163248 0.3644305181444275
+ POINT 2419 0.05161842343586877 0.3879244863669203
+ POINT 2420 0.06457923105428337 0.364525149441996
+ POINT 2421 0.09037777079006448 0.3647309749029848
+ POINT 2422 0.4558759182403792 0.8602986817000235
+ POINT 2423 0.4414743269103389 0.8827383158462117
+ POINT 2424 0.4670742072246578 0.8846210087106462
+ POINT 2425 0.2919664924990176 0.8916114020011411
+ POINT 2426 0.2623833587342755 0.8827556387832489
+ POINT 2427 0.2771006098105682 0.9142485718072941
+ POINT 2428 0.03864044174784259 0.457958601084541
+ POINT 2429 0.02577967226306274 0.4346156669934387
+ POINT 2430 0.03868408612873134 0.4112403451642169
+ POINT 2431 0.06447515178138222 0.4113349764617854
+ POINT 2432 0.08949803744701901 0.6440582959508012
+ POINT 2433 0.07678314854895311 0.6208656588652013
+ POINT 2434 0.06390415364028657 0.6439507140243206
+ POINT 2435 0.2567816928281375 0.5753689348101384
+ POINT 2436 0.2698685338992485 0.5521131836255753
+ POINT 2437 0.2956990365700518 0.5522115315296181
+ POINT 2438 0.2830222954965195 0.5288218912789793
+ POINT 2439 0.2961133342936462 0.5055571135561524
+ POINT 2440 0.2702828316228428 0.5054587656521097
+ POINT 2441 0.2964620672924435 0.458921556064471
+ POINT 2442 0.2836565868332408 0.4355734483334729
+ POINT 2443 0.2705683899607669 0.4588458801982847
+ POINT 2444 0.1161431086203392 0.3648773862578397
+ POINT 2445 0.1031748269187944 0.3881655290193437
+ POINT 2446 0.2937442592827296 0.692671228621745
+ POINT 2447 0.3070350103580715 0.6692363093426321
+ POINT 2448 0.3202500488775036 0.6458992625237185
+ POINT 2449 0.2945239827138391 0.6457221609330619
+ POINT 2450 0.2293611756608254 0.7152306579518284
+ POINT 2451 0.2424536114601926 0.692095009236759
+ POINT 2452 0.2169033091758081 0.6916845259161628
+ POINT 2453 0.2681102110698084 0.6923501745122
+ POINT 2454 0.2556523445847911 0.6688040424765345
+ POINT 2455 0.2805455261581311 0.7159621953819697
+ POINT 2456 0.2417272805503387 0.7388000091309066
+ POINT 2457 0.2161769782659541 0.7383895258103101
+ POINT 2458 0.2672565380881443 0.7394008197439725
+ POINT 2459 0.2928905863010655 0.7397218738535175
+ POINT 2460 0.2540723406932731 0.7625596876024544
+ POINT 2461 -0.6941609825346153 0.7111910686005825
+ POINT 2462 -0.7068139299190737 0.7334984178235546
+ POINT 2463 -0.6812753478728448 0.7342279552430965
+ POINT 2464 -0.7321667892649975 0.7325516351082328
+ POINT 2465 -0.7574423689693386 0.7318673644079862
+ POINT 2466 -0.7192811546032269 0.755588521750747
+ POINT 2467 -0.8218668659347828 0.6630459921287866
+ POINT 2468 -0.8352411111831217 0.6404494917462435
+ POINT 2469 -0.8612539144163792 0.6393737728546571
+ POINT 2470 -0.8870932491813824 0.6384097409424483
+ POINT 2471 -0.8727833030454449 0.6615311789509536
+ POINT 2472 -0.8084128269643962 0.685784956677529
+ POINT 2473 -0.7952816881190585 0.7084610597001406
+ POINT 2474 -0.8337666912189772 0.6850901650709915
+ POINT 2475 -0.2449546202115306 0.3655865890803478
+ POINT 2476 -0.2578955219650158 0.3889044401289972
+ POINT 2477 -0.2448844067024907 0.4121621138850018
+ POINT 2478 -0.2319157665444535 0.435399817334526
+ POINT 2479 -0.2190576301603332 0.4120628184330985
+ POINT 2480 -0.2707536583491361 0.4122414390304248
+ POINT 2481 -0.5242986119479848 0.7873030205502023
+ POINT 2482 -0.5508821796320857 0.7862110391318918
+ POINT 2483 -0.5643027933443369 0.761853990088298
+ POINT 2484 -0.5770836881102119 0.7852798315402423
+ POINT 2485 -0.5023420743401554 0.5988155005562679
+ POINT 2486 -0.5283842030845014 0.5986393146004609
+ POINT 2487 -0.5409136014031002 0.6217852956343375
+ POINT 2488 -0.5543889466319674 0.5983652760157463
+ POINT 2489 -0.5307026991916307 0.4593559938242432
+ POINT 2490 -0.543949239563829 0.4364479275959428
+ POINT 2491 -0.5566695330106178 0.4595421282280471
+ POINT 2492 -0.5173321647527029 0.4824868073070129
+ POINT 2493 -0.5046118713059141 0.4593926066749086
+ POINT 2494 -0.5696415206753326 0.4821779525248904
+ POINT 2495 -0.5828880610475309 0.4592698862965899
+ POINT 2496 -0.5561561610246415 0.5054905656261184
+ POINT 2497 -0.5300222668556939 0.5056700755384465
+ POINT 2498 -0.5814573040814732 0.5516546049565487
+ POINT 2499 -0.6077661094380876 0.5513656387619075
+ POINT 2500 -0.5804718118513246 0.5981447650834155
+ POINT 2501 -0.5679424135327258 0.574998784049539
+ POINT 2502 -0.2964460407684013 0.4589230850375954
+ POINT 2503 -0.3223457974218755 0.4589962800376966
+ POINT 2504 -0.2836385447921171 0.4355749347404818
+ POINT 2505 -0.270550039062895 0.458847263083543
+ POINT 2506 -0.3355076159901785 0.4357019824880481
+ POINT 2507 -0.3483188669144307 0.4590475058312106
+ POINT 2508 -0.2966496600546423 0.4123172609844771
+ POINT 2509 -0.2687692201447673 0.6455651852271611
+ POINT 2510 -0.2556423527560852 0.66880494026592
+ POINT 2511 -0.2431118180534416 0.645309886415541
+ POINT 2512 -0.2937362190039574 0.6926722188198191
+ POINT 2513 -0.3070266461903051 0.669237490669483
+ POINT 2514 -0.2945144522968954 0.6457233559829886
+ POINT 2515 -0.2819839175942519 0.6222283021326096
+ POINT 2516 -0.2681014965604304 0.6923510358708864
+ POINT 2517 -0.2424440944691047 0.6920957370592663
+ POINT 2518 -0.5314783828490774 0.4132994533863756
+ POINT 2519 -0.5574452166680646 0.4134855877901795
+ POINT 2520 -0.4918785122038183 0.4361293924077118
+ POINT 2521 -0.4785079777648905 0.4592602058904815
+ POINT 2522 -0.4524468854138654 0.4592452036573691
+ POINT 2523 -0.4263466658173802 0.4591659147582597
+ POINT 2524 -0.4396743990663096 0.4359177027241753
+ POINT 2525 -0.4268643705599666 0.4125179833239571
+ POINT 2526 -0.4529645901564516 0.4125972722230664
+ POINT 2527 -0.4131008282574771 0.4824639506007261
+ POINT 2528 -0.3997973623478441 0.5057699978155803
+ POINT 2529 -0.373851140526352 0.5057451107369894
+ POINT 2530 -0.3611197763480729 0.4823881444454289
+ POINT 2531 -0.3742815949163759 0.4590938468957804
+ POINT 2532 -0.4003283419099213 0.4591364496675323
+ POINT 2533 -0.3875274324762791 0.435795811053314
+ POINT 2534 -0.4006923724327067 0.4124824710530491
+ POINT 2535 -0.4139825635228488 0.3891620405519403
+ POINT 2536 -0.3746456254391613 0.4124398682812973
+ POINT 2537 -0.6088248682915374 0.4588263885061722
+ POINT 2538 -0.6356950672090191 0.4579239063280384
+ POINT 2539 -0.5958528806268226 0.4361905642093289
+ POINT 2540 -0.6922410986665386 0.4533369045121426
+ POINT 2541 -0.6624607506170971 0.4553561871767229
+ POINT 2542 -0.6485553712789069 0.4331793472675958
+ POINT 2543 -0.6331746184819997 0.4137394393522916
+ POINT 2544 -0.6599403018900777 0.4111717202009762
+ POINT 2545 -0.7026495642401438 0.4235705320850099
+ POINT 2546 -0.685690281548093 0.4063137665302243
+ POINT 2547 -0.7132275880957658 0.3990674728769562
+ POINT 2548 -0.6703095287511855 0.3868738586149202
+ POINT 2549 -0.3687855086212081 0.7877471092936887
+ POINT 2550 -0.3943920050335076 0.7876587965787116
+ POINT 2551 -0.3809492249105962 0.8114078360519487
+ POINT 2552 -0.3674539456651398 0.8346793918664916
+ POINT 2553 -0.3930604420774392 0.8345910791515145
+ POINT 2554 -0.4201830170185911 0.7876815257626915
+ POINT 2555 -0.4459529421095494 0.7879857138034361
+ POINT 2556 -0.432325646413854 0.8116237113777163
+ POINT 2557 -0.4080193007292029 0.7640207990044314
+ POINT 2558 -0.8152878724369238 1.078855392465468
+ POINT 2559 -0.7892199012647436 1.079398042009903
+ POINT 2560 -0.7872799108161198 1.206100583171254
+ POINT 2561 -0.7737929108022608 1.184071430000253
+ POINT 2562 -0.8141249811528282 1.163494522915267
+ POINT 2563 -0.8404096765293773 1.163771441449857
+ POINT 2564 -0.8268481821912196 1.184976749296061
+ POINT 2565 -0.562997909260267 0.8582921596452544
+ POINT 2566 -0.5770708581080048 0.8325943506173077
+ POINT 2567 -0.5771873625625351 0.8815251073724677
+ POINT 2568 -0.5497066300047533 0.8842654463669429
+ POINT 2569 -0.5170252424126414 0.8934944313797962
+ POINT 2570 -0.5312146957149094 0.9167273791070094
+ POINT 2571 -0.5204810166117203 0.9403618947863438
+ POINT 2572 -0.5521244282855758 0.9325082343973012
+ POINT 2573 -0.4959853681650557 0.8370014436022972
+ POINT 2574 -0.4697851844025825 0.8370549716012992
+ POINT 2575 -0.4842957552672856 0.811874371419459
+ POINT 2576 -0.508495987001419 0.8616072712119336
+ POINT 2577 -0.490004052711575 0.8940692039520001
+ POINT 2578 -0.4761907297653662 0.9150811726788727
+ POINT 2579 -0.4670734146860007 0.884621263628866
+ POINT 2580 -0.7321209753702294 0.7775325750105413
+ POINT 2581 -0.7067681160243056 0.778479357725863
+ POINT 2582 -0.7572284992556203 0.776468830111523
+ POINT 2583 -0.744715460676699 0.7993596660866391
+ POINT 2584 -0.6631519223162959 1.195128060776241
+ POINT 2585 -0.6860964672519736 1.207798354190881
+ POINT 2586 -0.6713315176055095 1.166708012845704
+ POINT 2587 -0.6422797965005942 1.175515557967655
+ POINT 2588 -0.7079410661226311 1.206812250625812
+ POINT 2589 -0.719612989105531 1.184881772446662
+ POINT 2590 0.06457923105452151 1.835474850558005
+ POINT 2591 0.07754751275607977 1.858762993319508
+ POINT 2592 0.09037777079028989 1.835269025097016
+ POINT 2593 0.05161842343608678 1.81207551363308
+ POINT 2594 0.1031748269189957 1.811834470980657
+ POINT 2595 0.06447515178158006 1.788665023538215
+ POINT 2596 0.09022956605757881 1.788573757767915
+ POINT 2597 0.01303554245795609 1.88271401426388
+ POINT 2598 3.409909271902094e-05 1.90629252749653
+ POINT 2599 0.03889625395490795 1.882630717692918
+ POINT 2600 0.01304426221803929 1.930244135319612
+ POINT 2601 -0.01296517357874619 1.930244046210803
+ POINT 2602 0.02631555828410829 1.953879172063716
+ POINT 2603 0.0393148309555735 1.929927653349444
+ POINT 2604 0.1326580354730163 2.043745070552762
+ POINT 2605 0.1439221224949577 2.019534090087531
+ POINT 2606 0.1195477301891869 2.021837176074499
+ POINT 2607 0.1686821411894588 2.018296008900047
+ POINT 2608 0.1555718359056294 1.996388114421784
+ POINT 2609 0.180677280895602 2.039036836399819
+ POINT 2610 0.1923269943062738 2.015890860734072
+ POINT 2611 0.1463516047801751 2.066097979780999
+ POINT 2612 0.1701692352902293 2.062248940285956
+ POINT 2613 0.1595348512405214 2.087192296991657
+ POINT 2614 -0.01281947274875637 0.873583865475285
+ POINT 2615 -0.03881221413299935 0.8734344188071499
+ POINT 2616 0.01282456007469166 0.8735838503085781
+ POINT 2617 2.955806787248785e-06 0.8506292067839125
+ POINT 2618 0.03881725219539571 0.873434377721657
+ POINT 2619 -0.01461881405745486 1.013476638882552
+ POINT 2620 1.778220531014479e-07 1.037189583176588
+ POINT 2621 -0.02799955197874889 0.989545745063062
+ POINT 2622 -0.04261917342543117 1.013258682946425
+ POINT 2623 -0.01342243436580387 0.9662437053144051
+ POINT 2624 -0.04142279373378017 0.9660257493782789
+ POINT 2625 0.01366164147528756 1.978517265727205
+ POINT 2626 0.03993221021282176 1.978200783757037
+ POINT 2627 0.7026443288123996 1.776435597230984
+ POINT 2628 0.6856850270739403 1.793692083337532
+ POINT 2629 0.7132215200510186 1.800938701553934
+ POINT 2630 0.6599358656403428 1.788833864670254
+ POINT 2631 0.6200208989117773 1.807600926175965
+ POINT 2632 0.6072612897326315 1.824373793216776
+ POINT 2633 0.585305173661954 1.832483213471998
+ POINT 2634 0.5702300802614326 1.808297545222425
+ POINT 2635 0.4600679629056943 1.966751491090177
+ POINT 2636 0.4803642369967909 1.977069096374106
+ POINT 2637 0.4825229759492946 1.954453047042799
+ POINT 2638 0.06602061783305657 0.9189739811256757
+ POINT 2639 0.09147713039084808 0.9185170140218819
+ POINT 2640 0.07744402831834765 0.8957825967223145
+ POINT 2641 0.1055156090275763 0.9403062099546264
+ POINT 2642 0.1169390195128674 0.9171148255512653
+ POINT 2643 0.5079574480831955 1.88261164708408
+ POINT 2644 0.5197806491652076 1.902199950063758
+ POINT 2645 0.4794484544971984 1.926788367576012
+ POINT 2646 0.4995872683653463 1.936818475405259
+ POINT 2647 0.518820790200475 1.925046749911156
+ POINT 2648 0.5220280546541946 1.952928314780297
+ POINT 2649 0.204788933199306 1.994870359051261
+ POINT 2650 0.2174921059330041 1.972313749324844
+ POINT 2651 0.1930350273338286 1.972593423507883
+ POINT 2652 0.2167840729054492 2.015611186551033
+ POINT 2653 0.3105578434203357 1.999367695545033
+ POINT 2654 0.3235995960290726 1.972597661386743
+ POINT 2655 0.2966447870441568 1.977671539620049
+ POINT 2656 0.3490238118150839 1.971567969502422
+ POINT 2657 0.3351107554389051 1.949871813577438
+ POINT 2658 0.3587083184300359 1.990819071631404
+ POINT 2659 0.3702194778398684 1.968093223822099
+ POINT 2660 0.353554751048667 2.011743015155286
+ POINT 2661 0.3308771621506708 2.020134048598914
+ POINT 2662 0.3470207240960796 2.037857460943737
+ POINT 2663 0.2449793534885306 1.834414718396244
+ POINT 2664 0.2320937351080738 1.857728519769502
+ POINT 2665 0.7858744358458595 1.645343768850453
+ POINT 2666 0.8105607926883188 1.646393779029849
+ POINT 2667 0.8107876120856172 1.60296085792637
+ POINT 2668 0.8242026416352581 1.625551755323319
+ POINT 2669 0.8367052499582527 1.647653471359671
+ POINT 2670 0.7852942463171467 1.602326969758248
+ POINT 2671 0.7732042272273081 1.624253148562054
+ POINT 2672 0.7607608548099571 1.645134921304652
+ POINT 2673 0.1549288436459035 1.904604567899542
+ POINT 2674 0.1676728261331525 1.881202038427968
+ POINT 2675 0.193407124874434 1.881050245347149
+ POINT 2676 -0.01281001731475896 1.602494750567753
+ POINT 2677 1.081946453755124e-05 1.625672456066086
+ POINT 2678 -0.03840028687889888 1.60245708682443
+ POINT 2679 0.1928908047239886 1.694863668650667
+ POINT 2680 0.2059238077114699 1.718108228712403
+ POINT 2681 0.1673509917946245 1.741575468346997
+ POINT 2682 0.1543955615432689 1.718328270372372
+ POINT 2683 0.05146501024241125 1.718678827033279
+ POINT 2684 0.03864044174801336 1.742041398915459
+ POINT 2685 0.01287929953683342 1.742076567181102
+ POINT 2686 1.5395911539191e-05 1.718733569766574
+ POINT 2687 -0.01284537357322561 1.742076503857676
+ POINT 2688 0.3083638810431136 1.624396235549455
+ POINT 2689 0.3215176426403861 1.647687527896051
+ POINT 2690 0.3474061196894083 1.647620759840413
+ POINT 2691 0.3600578736282795 1.624246045210258
+ POINT 2692 0.3467661162518118 1.600859657691933
+ POINT 2693 0.3209607541733517 1.600955090430488
+ POINT 2694 0.4620407002213602 1.530688464881996
+ POINT 2695 0.4744829222011997 1.507180091475853
+ POINT 2696 0.2838216037511633 1.857594076883031
+ POINT 2697 0.2707918770338095 1.880935915205607
+ POINT 2698 0.2967064352548833 1.88087671682787
+ POINT 2699 0.6064342168647563 1.602147462690252
+ POINT 2700 0.5804722527022674 1.601859103591726
+ POINT 2701 0.5679431972271747 1.625005050240087
+ POINT 2702 0.5543901981760777 1.601638288590894
+ POINT 2703 0.5553754604353389 1.648128665534386
+ POINT 2704 0.5814575149615286 1.648349480535217
+ POINT 2705 0.5292425379611922 1.647948862441201
+ POINT 2706 0.5158199326774433 1.624607781485719
+ POINT 2707 0.5032013279376506 1.647772408687665
+ POINT 2708 0.5300239409715504 1.694333589321819
+ POINT 2709 0.5039342821156333 1.694296677347413
+ POINT 2710 0.5561568634456971 1.694513392415004
+ POINT 2711 0.5427568556955462 1.671293292736332
+ POINT 2712 -0.4683189808484027 1.90665387423491
+ POINT 2713 -0.4794501888301393 1.926785400903497
+ POINT 2714 -0.5188244024061381 1.92504342116055
+ POINT 2715 -0.519783417397538 1.902196454765794
+ POINT 2716 -0.5420931265372261 1.918089341134839
+ POINT 2717 -0.4995906038781901 1.936815471220705
+ POINT 2718 -0.522033062066741 1.952925250012697
+ POINT 2719 -0.2047508561631258 1.994870147711013
+ POINT 2720 -0.2167522204903552 2.015612078398831
+ POINT 2721 -0.1922870228686676 2.015892705577174
+ POINT 2722 -0.192993261601161 1.972593355073971
+ POINT 2723 -0.1686310362983917 2.018298475933798
+ POINT 2724 -0.1555148550768918 1.996389090750134
+ POINT 2725 -0.2564017635489396 1.999514881322947
+ POINT 2726 -0.2704265327686053 1.977812102481407
+ POINT 2727 -0.296663988682994 1.927559006211113
+ POINT 2728 -0.2834687403316787 1.951042329092913
+ POINT 2729 -0.27046084057546 1.927700639967791
+ POINT 2730 -0.3350997888630511 1.949870551853499
+ POINT 2731 -0.3235890235891484 1.972597131619066
+ POINT 2732 -0.2966296808761393 1.977670468724729
+ POINT 2733 -0.310546816026075 1.999366905007559
+ POINT 2734 -0.2448808996986042 1.880924904386949
+ POINT 2735 -0.2577674591097115 1.904207594518505
+ POINT 2736 -0.2187898469767658 1.927116903604803
+ POINT 2737 -0.2445722107583962 1.927690917400305
+ POINT 2738 -0.244954620211398 1.834413410919653
+ POINT 2739 -0.2578955219648943 1.811095559871003
+ POINT 2740 -0.2448844067023676 1.787837886114998
+ POINT 2741 -0.2190576301601992 1.787937181566902
+ POINT 2742 -0.3747493941036181 2.008267578794626
+ POINT 2743 -0.3535516912797422 2.011742816043414
+ POINT 2744 -0.3934130036650753 2.019361848538008
+ POINT 2745 -0.2375966540947675 2.01412276012157
+ POINT 2746 -0.2251328208003094 2.035145317987731
+ POINT 2747 -0.2386111897448824 2.053275759672361
+ POINT 2748 -0.2636376709971253 2.0466382190874
+ POINT 2749 -0.2563575494494162 2.066582022820769
+ POINT 2750 -0.2647823638588938 2.019048120911846
+ POINT 2751 -0.2824427804512973 2.032030340288776
+ POINT 2752 -0.07726039640682882 1.765257462264359
+ POINT 2753 -0.06443608475266131 1.788664635979008
+ POINT 2754 -0.02574307518169017 1.765384187015701
+ POINT 2755 -0.03864371293954186 1.7887594264186
+ POINT 2756 -0.0386069788069844 1.742041189601172
+ POINT 2757 0.9241429592442079 1.274186186479647
+ POINT 2758 0.9368941516810193 1.297834954113468
+ POINT 2759 0.9630920970432664 1.288557581301431
+ POINT 2760 0.9843447339259433 1.276253921352871
+ POINT 2761 0.9677767226117392 1.262394835682235
+ POINT 2762 0.8337633388822454 1.51491692108542
+ POINT 2763 0.8451092275234924 1.492699659718367
+ POINT 2764 0.8084097637243579 1.514221661979965
+ POINT 2765 0.8319451432516897 1.470138734146088
+ POINT 2766 0.7952790079837003 1.491545111023086
+ POINT 2767 0.8074471873676758 1.469555718924934
+ POINT 2768 0.9677767226117397 0.9376051643177659
+ POINT 2769 0.9843447339259433 0.9237460786471298
+ POINT 2770 0.963092097043267 0.9114424186985692
+ POINT 2771 0.9426645085467076 0.948558562238446
+ POINT 2772 0.9241429592442079 0.9258138135203534
+ POINT 2773 0.121629348905091 0.9633221257989399
+ POINT 2774 0.3616810060111013 0.2958184482176459
+ POINT 2775 0.3741797515129772 0.2733480186879637
+ POINT 2776 0.879025248221952 0.773505086764771
+ POINT 2777 0.8674579403327862 0.7517047030577586
+ POINT 2778 0.8551478966137391 0.7737003845771961
+ POINT 2779 0.8806220246045897 0.7291437774854799
+ POINT 2780 0.9052624887633097 0.7288471596532518
+ POINT 2781 0.9145571673921471 0.7521384110455851
+ POINT 2782 0.9287764515652552 0.729359604174271
+ POINT 2783 0.8945492214269004 0.706481531893398
+ POINT 2784 0.8891937746338803 0.7954363884453686
+ POINT 2785 0.8788685345877028 0.8165682098050642
+ POINT 2786 0.9013471047186781 0.8165038299662243
+ POINT 2787 0.9015038183529274 0.7734407069259311
+ POINT 2788 0.9329092126761621 0.7980153183794907
+ POINT 2789 0.9462655865016076 0.7766094624099704
+ POINT 2790 0.9247256938040753 0.7740697127261826
+ POINT 2791 0.8643223110496706 0.9492850554164199
+ POINT 2792 0.8378306026054134 0.9495172494183357
+ POINT 2793 0.8522956328716669 0.9713871502885372
+ POINT 2794 0.8756356821712966 0.9269017720919102
+ POINT 2795 0.8795716054504412 1.015005280200564
+ POINT 2796 0.8659597495193936 0.9929497202422699
+ POINT 2797 0.8394680410751364 0.9931819142441856
+ POINT 2798 0.8901007124375511 1.251228327037889
+ POINT 2799 0.8643223110496721 1.250714944583581
+ POINT 2800 0.8665376830375928 1.036176263633515
+ POINT 2801 0.8404090030129441 1.036227222829855
+ POINT 2802 0.8538145283276738 1.057659002265452
+ POINT 2803 0.892977130765171 1.036437059636162
+ POINT 2804 0.9657211024305934 1.145374298736897
+ POINT 2805 0.9431232588334175 1.161838095903088
+ POINT 2806 -0.03819585699817833 1.417997476590637
+ POINT 2807 -0.01272666408757827 1.418017027367393
+ POINT 2808 -0.05088922824276616 1.440825169199406
+ POINT 2809 -0.03821399679395823 1.463876305608539
+ POINT 2810 -0.01272556871414092 1.463926522860351
+ POINT 2811 0.03822496354416707 1.46387638270692
+ POINT 2812 0.05089895965938743 1.440825249339203
+ POINT 2813 0.01273663190329289 1.463926544119057
+ POINT 2814 4.94520716473601e-06 1.440924056463207
+ POINT 2815 0.0382046587651745 1.417997529098808
+ POINT 2816 0.06363647259996337 1.417898700716099
+ POINT 2817 0.02547304947043149 1.395090500002994
+ POINT 2818 0.01273553652985554 1.418017048626099
+ POINT 2819 -0.1648228649753082 1.416692547647412
+ POINT 2820 -0.1899646679918049 1.41586820050339
+ POINT 2821 -0.7085383453729526 1.332561790528044
+ POINT 2822 -0.7338058161932346 1.334009482698351
+ POINT 2823 -0.7203950816929017 1.355025998731653
+ POINT 2824 0.4014042713252098 0.2700361114883787
+ POINT 2825 0.2563711264786659 0.1334215781903364
+ POINT 2826 0.1934071248742473 0.3189497546528511
+ POINT 2827 0.2190946032534457 0.3189986231502477
+ POINT 2828 0.2062213034418013 0.2957521420813347
+ POINT 2829 -0.3732726412974596 1.647569492876618
+ POINT 2830 -0.3473960439718148 1.647618945727552
+ POINT 2831 -0.3600489085666498 1.62424417456815
+ POINT 2832 -0.3992188631189578 1.647544605798027
+ POINT 2833 -0.3335355235191291 1.577517918650092
+ POINT 2834 -0.3467571042664703 1.600857968803852
+ POINT 2835 -0.3726337015921151 1.600808515952918
+ POINT 2836 -0.3852104684419176 1.577408116556651
+ POINT 2837 -0.3985022727420972 1.600794322320949
+ POINT 2838 -0.4597858978608877 1.436072531408077
+ POINT 2839 -0.4459529421095333 1.412014286196564
+ POINT 2840 -0.4719285272561546 1.412130345793053
+ POINT 2841 -0.4258156862552557 1.694200537093693
+ POINT 2842 -0.4131008282574248 1.717536049399274
+ POINT 2843 -0.4518159218725598 1.694223308459595
+ POINT 2844 -0.438512455962925 1.670917261244741
+ POINT 2845 -0.3486570945636606 1.880720813636993
+ POINT 2846 -0.3226218639413143 1.880716433476767
+ POINT 2847 -0.3357543849909934 1.857537636776376
+ POINT 2848 -0.3095903312203784 1.904058463711688
+ POINT 2849 -0.3480261314004355 1.926370009354073
+ POINT 2850 -0.361671148838889 1.904179638889593
+ POINT 2851 -0.3748036698885681 1.881000842189201
+ POINT 2852 -0.3225982309765971 1.92740015283681
+ POINT 2853 -0.3347298011327204 1.671011233784087
+ POINT 2854 -0.3219984369544346 1.694368200075648
+ POINT 2855 -0.3215060684019106 1.647685915475618
+ POINT 2856 -0.2956862105641265 1.647787037825868
+ POINT 2857 -0.2687692201447074 1.554434814772839
+ POINT 2858 -0.2556423527560285 1.53119505973408
+ POINT 2859 -0.2945144522968403 1.554276644017012
+ POINT 2860 -0.2293523004592573 1.484768754075561
+ POINT 2861 -0.242444094469051 1.507904262940734
+ POINT 2862 -0.2681014965603805 1.507648964129114
+ POINT 2863 -0.2805379607169332 1.484036984386835
+ POINT 2864 -0.2937362190039107 1.507327781180182
+ POINT 2865 -0.1158190029507613 1.741801896277877
+ POINT 2866 -0.1415760124474334 1.741684827819782
+ POINT 2867 -0.154370107347698 1.718327520320757
+ POINT 2868 -0.11568179744263 1.695199662635684
+ POINT 2869 -0.1413872530716158 1.695092945752663
+ POINT 2870 0.7853447977159104 1.292628343809675
+ POINT 2871 0.7734550239077436 1.270625052348054
+ POINT 2872 0.760133164306389 1.291918002699779
+ POINT 2873 0.8104051256456404 1.29352700504047
+ POINT 2874 0.78633115002302 1.249419392728165
+ POINT 2875 0.8242619690503419 1.271960119455866
+ POINT 2876 -0.8891962941400597 0.7954431287585819
+ POINT 2877 -0.8788708474587685 0.8165743955116899
+ POINT 2878 -0.855553962972978 0.817587400603682
+ POINT 2879 -0.8317231101266098 0.8181604631087254
+ POINT 2880 -0.842886722450666 0.7960801525961234
+ POINT 2881 -0.8677072351347124 0.8386547060242918
+ POINT 2882 -0.8551504360858646 0.7737067858561996
+ POINT 2883 -0.8313195832394964 0.774279848361243
+ POINT 2884 -0.8674607939687391 0.7517116524494881
+ POINT 2885 -0.8790279331799086 0.7735119566843686
+ POINT 2886 -0.9635702350740019 0.9609290012787612
+ POINT 2887 -0.9426655041399603 0.9485630501634923
+ POINT 2888 -0.9677776775622386 0.9376104003155969
+ POINT 2889 -0.966552031748537 0.9842704012060155
+ POINT 2890 -0.9460351123335401 0.9950666294409165
+ POINT 2891 -0.9919388674548592 0.9732826640416895
+ POINT 2892 -0.8643233019849546 0.9492884269522859
+ POINT 2893 -0.837831577614073 0.9495203471491918
+ POINT 2894 -0.9843457811105139 0.9237519270745573
+ POINT 2895 -0.9630933168538749 0.9114482379501212
+ POINT 2896 -0.9531159528267146 0.8883744311841169
+ POINT 2897 -0.9742911853903737 0.8747075543418724
+ POINT 2898 -0.9368955826010368 0.9021706424343237
+ POINT 2899 0.167672826132947 0.3187979615720326
+ POINT 2900 0.1805461259445914 0.3420444426409456
+ POINT 2901 0.142067844716015 0.3184901200885523
+ POINT 2902 0.1933706155425582 0.3653985076719871
+ POINT 2903 0.2062562339230306 0.3887123090452457
+ POINT 2904 0.2191660430663641 0.3655100370950227
+ POINT 2905 -0.8801227555452171 1.1
+ POINT 2906 -0.8669896430765252 1.078804538412766
+ POINT 2907 -0.8408609714632165 1.078855392465469
+ POINT 2908 -0.8284623684091541 1.1
+ POINT 2909 -0.8408609714632163 1.121144607534532
+ POINT 2910 -0.8152878724369237 1.121144607534532
+ POINT 2911 -0.9320792953230057 1.1
+ POINT 2912 -0.9452918810085722 1.079038018438606
+ POINT 2913 -0.9783780333094576 1.075589250652737
+ POINT 2914 -0.9997018354559252 1.075581970061974
+ POINT 2915 -0.978974273495512 1.1
+ POINT 2916 -0.9783780333094576 1.124410749347263
+ POINT 2917 -0.9997018354559252 1.124418029938026
+ POINT 2918 -0.7073677738319613 1.376577447787844
+ POINT 2919 -0.7326352446522433 1.378025139958151
+ POINT 2920 -0.694077962289824 1.398222341346196
+ POINT 2921 -0.6818377993304823 1.375223200119698
+ POINT 2922 -0.757228499255616 1.423531169888477
+ POINT 2923 -0.7822049698244475 1.424316212975855
+ POINT 2924 -0.7696104845179772 1.446143304051953
+ POINT 2925 -0.7944394270831905 1.402525431855606
+ POINT 2926 -0.8068214123455517 1.425137566019082
+ POINT 2927 -0.7447154606766946 1.400640333913361
+ POINT 2928 -0.7321209753702242 1.422467424989458
+ POINT 2929 -0.757742768537635 1.379088884857169
+ POINT 2930 -0.8313195832394938 1.425720151638757
+ POINT 2931 -0.8190851259807508 1.447510932759006
+ POINT 2932 0.2320937351079254 0.3422714802304975
+ POINT 2933 0.2449793534883978 0.365585281603756
+ POINT 2934 0.167636316801258 0.3652467145911685
+ POINT 2935 -0.9495790216956155 1.357608623582285
+ POINT 2936 -0.9617809404832132 1.37382005500552
+ POINT 2937 -0.9422877331206317 1.383218955093032
+ POINT 2938 0.2449079136754794 0.319073867658981
+ POINT 2939 0.1675103124617005 0.4118340070285852
+ POINT 2940 0.1803369722649089 0.4351833301926523
+ POINT 2941 0.1932874662024331 0.4119501027862773
+ POINT 2942 0.219082893726239 0.4120616322093128
+ POINT 2943 -0.3587038615630018 0.2091816693468968
+ POINT 2944 -0.3702146268369063 0.2319082491124611
+ POINT 2945 -0.3490169240130396 0.2284330118636753
+ POINT 2946 -0.3535516912797776 0.1882571839565941
+ POINT 2947 -0.3308724928076181 0.1798655885295797
+ POINT 2948 -0.3470195026008582 0.1621420870864006
+ POINT 2949 -0.3105468160261466 0.2006330949924446
+ POINT 2950 -0.2564017635490651 0.2004851186770537
+ POINT 2951 -0.270426532768719 0.2221878975185947
+ POINT 2952 -0.243240823004626 0.2271132583088702
+ POINT 2953 -0.2375966540949072 0.1858772398784365
+ POINT 2954 -0.1053938438722574 0.2009945465377531
+ POINT 2955 -0.1174821802527001 0.2251188404381259
+ POINT 2956 -0.1194686319080044 0.1781602491775884
+ POINT 2957 -0.1937799709013283 0.140151518747593
+ POINT 2958 -0.2073206705198589 0.1217269606213222
+ POINT 2959 -0.217766756140612 0.1452349220503995
+ POINT 2960 -0.2251328208004578 0.1648546820122851
+ POINT 2961 -0.2167522204905226 0.1843879216011778
+ POINT 2962 -0.204750856163322 0.2051298522889908
+ POINT 2963 -0.1922870228688727 0.1841072944228394
+ POINT 2964 0.7880563618837664 1.037047071892657
+ POINT 2965 0.8016178812889185 1.058252720150169
+ POINT 2966 0.814124328897873 1.03650431320428
+ POINT 2967 0.7872792261107471 0.9938976364741942
+ POINT 2968 0.8131833669600652 0.9934590046186105
+ POINT 2969 0.7998997835780914 0.9720579761460366
+ POINT 2970 0.8268474836077919 1.015021574572343
+ POINT 2971 0.7612858534569118 1.037675613861573
+ POINT 2972 0.7310724137989539 1.04186265470977
+ POINT 2973 0.7453364746168541 1.062982519686742
+ POINT 2974 0.7737923010658663 1.015927206915684
+ POINT 2975 0.7605087176838925 0.9945261784431102
+ POINT 2976 0.7661340859320263 1.079397739419273
+ POINT 2977 0.7359206462740685 1.08358478026747
+ POINT 2978 0.6895998025765886 0.9514039084176589
+ POINT 2979 0.6744679356861292 0.9356740626569682
+ POINT 2980 0.6648570658973707 0.954992724945019
+ POINT 2981 0.8555518672793385 0.8175816180765012
+ POINT 2982 0.8677051973641363 0.8386490595973568
+ POINT 2983 0.1547004855741469 0.3884563599982044
+ POINT 2984 0.1417499916366226 0.4116895874045794
+ POINT 2985 0.1418759959761801 0.3651022949671628
+ POINT 2986 0.8367052499582528 0.5523465286403295
+ POINT 2987 0.8105607926883178 0.5536062209701517
+ POINT 2988 0.8242026416352572 0.5744482446766814
+ POINT 2989 0.1463516047798782 0.1339020202189682
+ POINT 2990 0.1219772124740269 0.1315989342320008
+ POINT 2991 0.159534851240275 0.1128077030083028
+ POINT 2992 0.807447187367673 0.7304442810750669
+ POINT 2993 0.8190826328405592 0.7524830160913381
+ POINT 2994 0.9090501674264286 0.6833133154251484
+ POINT 2995 0.884125206994277 0.6837403394914854
+ POINT 2996 0.8727793183530299 0.6615230781244323
+ POINT 2997 0.8870887851205516 0.6384011619237503
+ POINT 2998 0.861249684764014 0.6393657245747775
+ POINT 2999 0.0652302857294686 0.2703572458437954
+ POINT 3000 0.09108161431165221 0.2710710423023391
+ POINT 3001 0.1035991533332207 0.2946823861990578
+ POINT 3002 0.02906699841991087 0.1466879099877493
+ POINT 3003 0.3585576302186302 0.6694872894719401
+ POINT 3004 0.3709784057371413 0.6930924996377441
+ POINT 3005 0.3967705144022402 0.6931284541662837
+ POINT 3006 0.3833947362238573 0.7166597857934361
+ POINT 3007 0.3985091019519451 0.5992035930455094
+ POINT 3008 0.4244420385415923 0.5991847917090443
+ POINT 3009 0.4118661967327816 0.5757844032181435
+ POINT 3010 0.4370150631439248 0.6225202812225916
+ POINT 3011 0.4503721579247613 0.5991010913952257
+ POINT 3012 0.4889282285334068 0.6222464448320605
+ POINT 3013 0.4754656323321949 0.6457881730814992
+ POINT 3014 0.5014486783385079 0.6455980370047865
+ POINT 3015 0.4350833035770055 0.7165978960580228
+ POINT 3016 0.421500011342832 0.740368930210584
+ POINT 3017 0.4473964700308812 0.740271085946631
+ POINT 3018 0.4733716264669791 0.7401548164172533
+ POINT 3019 0.4597883342328056 0.7639258505698145
+ POINT 3020 0.5158199326774155 0.5753922185142807
+ POINT 3021 0.5032013279376204 0.5522275913123349
+ POINT 3022 0.502344998596795 0.5988124905115823
+ POINT 3023 0.5283862086203404 0.5986360367580462
+ POINT 3024 0.476361952590482 0.599002626588295
+ POINT 3025 0.4637889279881495 0.5756671370747475
+ POINT 3026 0.08896774923070291 1.417784054971024
+ POINT 3027 0.1143346954366387 1.417534015119635
+ POINT 3028 0.07627344833648998 1.394956334730629
+ POINT 3029 0.5508830750377773 1.4137911622812
+ POINT 3030 0.5770841680864116 1.414722641591162
+ POINT 3031 0.5370804331546464 1.389272959075876
+ POINT 3032 0.549590820323383 1.364666914436265
+ POINT 3033 0.5230075599832524 1.363574680002096
+ POINT 3034 0.07333017808851476 0.1268880097586741
+ POINT 3035 0.09845802958240367 0.1289437202525601
+ POINT 3036 0.06587245777886791 0.1021719490282051
+ POINT 3037 0.05055305593914149 0.1253843588885193
+ POINT 3038 0.7359206462740686 1.11641521973253
+ POINT 3039 0.7151230349588965 1.1
+ POINT 3040 0.7469855868937045 1.312734636532138
+ POINT 3041 0.7350958130855378 1.290731345070517
+ POINT 3042 0.7338047832844619 1.334012664398534
+ POINT 3043 0.2436328066240513 1.224696835708564
+ POINT 3044 0.2210122047266141 1.228229497806077
+ POINT 3045 0.2387210626959564 1.250436030977705
+ POINT 3046 0.2000412850460709 1.209187107518196
+ POINT 3047 0.2162420219164395 1.178949385625486
+ POINT 3048 0.1902059846622324 1.18629503688256
+ POINT 3049 0.1935446757021942 1.236190172132978
+ POINT 3050 0.3030306422958128 1.339541296790322
+ POINT 3051 0.3177478933720976 1.308048363766277
+ POINT 3052 0.2919664924990257 1.308388597998859
+ POINT 3053 0.1121830258763612 0.1063124390910272
+ POINT 3054 0.5312152727586936 1.283272654425654
+ POINT 3055 0.55212498453758 1.267491662740994
+ POINT 3056 0.5204817563689089 1.259637546906306
+ POINT 3057 0.5170260021159334 1.306505923612442
+ POINT 3058 0.5497072177947495 1.315735366175698
+ POINT 3059 0.4842972507862281 1.388126979149091
+ POINT 3060 0.4719304097134303 1.41213182630802
+ POINT 3061 0.4459552532773341 1.412015556778642
+ POINT 3062 0.4323276800484788 1.388377285466941
+ POINT 3063 0.6200208989117694 0.3923990738240358
+ POINT 3064 0.608636829318345 0.4144068621409202
+ POINT 3065 0.631795494258068 0.3749535789081534
+ POINT 3066 0.6072612897326238 0.3756262067832246
+ POINT 3067 0.6394930946543129 0.3534357286671079
+ POINT 3068 0.5633085147008725 0.2963449813367262
+ POINT 3069 0.5625339662120824 0.2732258247515809
+ POINT 3070 0.5590861021773605 0.3233578835839263
+ POINT 3071 0.5793460654610763 0.314948969109697
+ POINT 3072 0.6019478252094754 0.3014645807945758
+ POINT 3073 0.5975686591236485 0.3286854300869397
+ POINT 3074 0.5970797690082433 0.3500712916121197
+ POINT 3075 0.5853051736619447 0.367516786528002
+ POINT 3076 0.6195247751943277 0.3367948503421622
+ POINT 3077 0.5046142383210852 0.4593891552116149
+ POINT 3078 0.4918813558833659 0.4361260737516724
+ POINT 3079 0.4785117485721136 0.4592570534883783
+ POINT 3080 0.5052744047175668 0.4129518010537193
+ POINT 3081 0.4791719149685952 0.4128196993304827
+ POINT 3082 0.5312253503351396 0.3243421987906339
+ POINT 3083 0.5472629010953433 0.3429461865636048
+ POINT 3084 0.5079574480831789 0.3173883529159202
+ POINT 3085 0.4009845052261296 0.318959218566044
+ POINT 3086 0.4271349362799917 0.31911020430696
+ POINT 3087 0.4139749628549548 0.2956891448099621
+ POINT 3088 0.5951977403865812 0.5282376132322915
+ POINT 3089 0.6077654771784186 0.5513612285265901
+ POINT 3090 0.6086823744728344 0.5049247429717304
+ POINT 3091 0.5823744122559251 0.5052140339099233
+ POINT 3092 0.6355517277522447 0.5040218955106904
+ POINT 3093 0.6227283996215885 0.4809983161883223
+ POINT 3094 0.6480298589817495 0.5278460366742828
+ POINT 3095 0.6620758841305037 0.5039196098908747
+ POINT 3096 0.7590675794030117 0.6423282821595914
+ POINT 3097 0.7711871520524267 0.6642913264651261
+ POINT 3098 0.7843902570204941 0.6417711008968948
+ POINT 3099 0.7172462156808188 0.5036933976273812
+ POINT 3100 0.7387343218511129 0.5139133841734261
+ POINT 3101 0.7306446745055404 0.4862760909409984
+ POINT 3102 0.6918552918476274 0.5018999277247103
+ POINT 3103 0.6999449391932 0.5295372209571381
+ POINT 3104 0.6861143472180067 0.5513978879508391
+ POINT 3105 0.7627819220521704 0.5151352679469967
+ POINT 3106 0.7346772787680431 0.4631823129553713
+ POINT 3107 0.7561653849383371 0.4734022995014163
+ POINT 3108 -0.2275668138025612 0.808717941517375
+ POINT 3109 -0.2153673478237134 0.7847649721346892
+ POINT 3110 -0.2407354564893289 0.7859122061560804
+ POINT 3111 -0.2662652803551944 0.7865131246722017
+ POINT 3112 -0.2918626311657021 0.7873179603505609
+ POINT 3113 -0.2785322732786844 0.8106700112171252
+ POINT 3114 -0.4049200019545185 0.8581395324922723
+ POINT 3115 -0.4167337352741779 0.8792209569247018
+ POINT 3116 -0.4558748191887034 0.860299236901312
+ POINT 3117 -0.4441852062909333 0.8351721647184738
+ POINT 3118 -0.418415281199975 0.8348679766777292
+ POINT 3119 -0.4414734365743516 0.8827384567460406
+ POINT 3120 -0.42815293780976 0.9019913837918164
+ POINT 3121 0.01273663190323249 0.7360734558809434
+ POINT 3122 -0.01272556871420132 0.7360734771396491
+ POINT 3123 4.945207110270897e-06 0.7590759435367931
+ POINT 3124 0.03820465876512556 0.7820024709011921
+ POINT 3125 0.06363647259991524 0.7821012992839012
+ POINT 3126 0.05089895965933376 0.7591747506607964
+ POINT 3127 0.06378343639514483 0.8277018417546065
+ POINT 3128 0.03829458016797116 0.8277791055707512
+ POINT 3129 0.05113584485740894 0.8505519278010609
+ POINT 3130 -0.06430119379681168 0.8733571772517114
+ POINT 3131 -0.08975786123540107 0.8729002250324374
+ POINT 3132 -0.0774400186879273 0.8957826634444064
+ POINT 3133 -0.05113005668047311 0.8505519803951809
+ POINT 3134 -0.06362782983072357 0.7821013894144582
+ POINT 3135 -0.03819585699822726 0.7820025234093627
+ POINT 3136 -0.05088922824281984 0.7591748308005942
+ POINT 3137 -0.08895931390185341 0.7822160514190887
+ POINT 3138 -0.07626594265726083 0.8050437440278572
+ POINT 3139 -0.06377674746520821 0.8277019104314846
+ POINT 3140 -0.08910823153633807 0.8278165724361151
+ POINT 3141 -0.03828776780139589 0.8277791519869231
+ POINT 3142 -0.06364596962651448 0.7362225603965566
+ POINT 3143 -0.07644169741565998 0.7133301522294838
+ POINT 3144 -0.08911692886446165 0.7363812886386167
+ POINT 3145 -0.02548231009789596 0.7131212067356116
+ POINT 3146 -0.01276259188994511 0.6900170423279307
+ POINT 3147 -0.03825101996976196 0.6900672595797428
+ POINT 3148 -0.03821399679401818 0.7361236943914613
+ POINT 3149 -0.06378769820560556 0.6901574922105577
+ POINT 3150 -0.1143265637385181 0.7824661197164109
+ POINT 3151 -0.1394853999263012 0.7828479233041359
+ POINT 3152 -0.1267562629161737 0.8055402096202127
+ POINT 3153 -0.1016884509119808 0.7595237651030119
+ POINT 3154 -0.1144841787011264 0.7366313569359391
+ POINT 3155 -0.1399441094428567 0.7369118493671853
+ POINT 3156 -0.1658119438393942 0.6910197488967522
+ POINT 3157 -0.1532357744273858 0.6677427867930553
+ POINT 3158 -0.01281001731486332 0.5975052494322469
+ POINT 3159 -0.03840028687900253 0.5975429131755705
+ POINT 3160 1.081946442434319e-05 0.5743275439339142
+ POINT 3161 -0.0384939067991277 0.5511073770617334
+ POINT 3162 -0.01280802675072695 0.5510796426009781
+ POINT 3163 0.01283185696224499 0.551079597732606
+ POINT 3164 -0.1902056014951501 1.01370452963273
+ POINT 3165 -0.1601888025280189 1.009853616391104
+ POINT 3166 -0.1141722181261107 0.8278156187661656
+ POINT 3167 -0.1393310543138938 0.8281974223538907
+ POINT 3168 -0.151431037891943 0.8510992893568523
+ POINT 3169 -0.1016830229340581 0.850473785169793
+ POINT 3170 -0.1148218478251737 0.872899271362488
+ POINT 3171 -0.3410980309594269 0.8831537162541825
+ POINT 3172 -0.3541877614443844 0.8593309940763276
+ POINT 3173 -0.3420765442775414 0.8361477509767617
+ POINT 3174 -0.316469992072989 0.836137100041041
+ POINT 3175 -0.3297361762937444 0.811485497831205
+ POINT 3176 0.1730661332789457 1.242943556737101
+ POINT 3177 0.1940370529594889 1.261985947024982
+ POINT 3178 0.1517756270856314 1.239121880180544
+ POINT 3179 0.152268004342926 1.264917655072548
+ POINT 3180 0.162461450121644 1.287355643957139
+ POINT 3181 0.1860091279058246 1.285921576282122
+ POINT 3182 0.1749120674912283 1.304537888610156
+ POINT 3183 0.2064876703290731 1.279168191677999
+ POINT 3184 0.1601893029384915 1.190146215099388
+ POINT 3185 0.1778215315790728 1.159293470136851
+ POINT 3186 0.08976262098038926 1.327099853198282
+ POINT 3187 0.1016884449626147 1.349526282754009
+ POINT 3188 0.08911471302592255 1.372183512500319
+ POINT 3189 0.1141784569039217 1.372184459239243
+ POINT 3190 0.06378343639518301 1.372298158245394
+ POINT 3191 -0.1526383708458642 1.085
+ POINT 3192 -0.1349707551804744 1.060927588187288
+ POINT 3193 0.7452764836342496 0.4332444503854744
+ POINT 3194 -0.1050476361713215 1.060904080457208
+ POINT 3195 -0.1178816998306621 1.036831668644496
+ POINT 3196 0.7727278633415611 0.493847519961803
+ POINT 3197 0.777029491764732 0.4705358080654291
+ POINT 3198 0.344228524557281 1.459777131849572
+ POINT 3199 0.3565432527087909 1.436090561801562
+ POINT 3200 0.3431000535494129 1.412341326101479
+ POINT 3201 0.3297395574143784 1.388515091843439
+ POINT 3202 -0.2121408449285222 1.323944128529582
+ POINT 3203 -0.1872860597869286 1.325689152844081
+ POINT 3204 -0.1749090482183568 1.304537996376834
+ POINT 3205 -0.2229864076095442 1.29885577648567
+ POINT 3206 -0.2366701992242377 1.31969585211323
+ POINT 3207 -0.2064857193976328 1.279168432934877
+ POINT 3208 -0.2310150736933483 1.274920156518526
+ POINT 3209 -0.1624587418075148 1.287355665442835
+ POINT 3210 -0.1860067469029867 1.285921721968022
+ POINT 3211 -0.1940354129867908 1.261986102000878
+ POINT 3212 0.2906913353542208 1.364203578735432
+ POINT 3213 0.2650944950122214 1.365008279273163
+ POINT 3214 -0.2387206109003236 1.250436300397789
+ POINT 3215 -0.2210117479945431 1.228229875645093
+ POINT 3216 -0.2436331203401984 1.224697229100959
+ POINT 3217 -0.2837501498310734 1.262745114629294
+ POINT 3218 -0.2770998744034641 1.285751646701895
+ POINT 3219 -0.255221299112235 1.270123643948581
+ POINT 3220 0.1637419831568572 0.8728769182911498
+ POINT 3221 0.1514358827236355 0.8510992816872697
+ POINT 3222 0.1390582892738052 0.8722504071109469
+ POINT 3223 0.1640206615645647 0.8288238605937902
+ POINT 3224 0.1393369676815128 0.8281973494135872
+ POINT 3225 0.1891620463010428 0.829648207016188
+ POINT 3226 0.17706313125892 0.8067462747425056
+ POINT 3227 -0.07197924608411718 1.013067975020676
+ POINT 3228 -0.05859850816282316 1.036998868840166
+ POINT 3229 0.2515387733835269 1.342332813361083
+ POINT 3230 0.2393840269730074 1.367459561611343
+ POINT 3231 -0.03864371293974567 0.4112405735814001
+ POINT 3232 -0.02574307518187596 0.4346158129842994
+ POINT 3233 -0.03860697880715513 0.4579588103988284
+ POINT 3234 -0.01296517357913287 0.269755953789197
+ POINT 3235 -0.02622882154082112 0.2461209915885011
+ POINT 3236 0.01366164147477733 0.2214827342727962
+ POINT 3237 -0.01355626953426612 0.2214831097314659
+ POINT 3238 -0.08948240553079592 0.6440585670308878
+ POINT 3239 -0.1150201660705722 0.6442347573773634
+ POINT 3240 -0.07676583116877549 0.6208659055884693
+ POINT 3241 -0.2062277447738215 0.3887134642104028
+ POINT 3242 -0.1932591046157843 0.411951167659927
+ POINT 3243 -0.1035424476492222 0.2946829585123979
+ POINT 3244 -0.1167462840927444 0.2714766831530565
+ POINT 3245 -0.05157511727697212 0.3879248103615883
+ POINT 3246 -0.03873932786503452 0.3644307746417522
+ POINT 3247 -0.0645316996781479 0.3645255650813439
+ POINT 3248 -0.06443608475285904 0.4113353640209918
+ POINT 3249 -0.09019180074423286 0.4114267745158292
+ POINT 3250 -0.07726039640700642 0.434742537735641
+ POINT 3251 -0.1548828017896316 0.2953962540733002
+ POINT 3252 -0.167632545950589 0.3187988988353017
+ POINT 3253 -0.1420220034537256 0.3184909235809593
+ POINT 3254 -0.012973893339134 0.3172860748449294
+ POINT 3255 -0.02583418012003818 0.3409480587195439
+ POINT 3256 -0.0128775977188624 0.3643473039997883
+ POINT 3257 0.01292745390467592 0.3643472215734659
+ POINT 3258 0.02588826152309051 0.3409478846485416
+ POINT 3259 0.2407414158785705 0.7859119247329824
+ POINT 3260 0.2662706734163762 0.7865127353460486
+ POINT 3261 0.2153737995754327 0.7847647490771459
+ POINT 3262 0.2275721322985359 0.80871779682074
+ POINT 3263 0.3185169979633963 0.740052577263737
+ POINT 3264 0.3442285245572493 0.740222868150428
+ POINT 3265 0.3052280098934095 0.76349120162574
+ POINT 3266 0.3420788643559561 0.8361471901016712
+ POINT 3267 0.3541893018257894 0.8593305771391553
+ POINT 3268 0.3674561230128713 0.8346788297985663
+ POINT 3269 0.3410988766517489 0.8831535073906632
+ POINT 3270 0.3664761353086642 0.8816851470875584
+ POINT 3271 0.3177478933720922 0.8919516362337232
+ POINT 3272 0.329483714523536 0.9128437725251927
+ POINT 3273 0.3030306422957995 0.860458703209678
+ POINT 3274 0.1267632357448151 0.8055401196672769
+ POINT 3275 0.1141784569038859 0.8278155407607564
+ POINT 3276 0.08911471302588544 0.827816487499681
+ POINT 3277 0.1016884449625831 0.8504737172459914
+ POINT 3278 0.07627344833644766 0.8050436652693713
+ POINT 3279 0.08896774923065585 0.7822159450289757
+ POINT 3280 0.1143346954365931 0.7824659848803647
+ POINT 3281 0.1016977197000607 0.7595236188948945
+ POINT 3282 0.13949320621422 0.7828477935331957
+ POINT 3283 0.1409175011515012 0.5979815448416933
+ POINT 3284 0.1665926939416747 0.5981196738563217
+ POINT 3285 0.1539154802700288 0.5748034411694907
+ POINT 3286 0.1153086599177705 0.597819276473272
+ POINT 3287 0.1279858735894163 0.6211355091601031
+ POINT 3288 0.1799069511559062 0.5283710130916394
+ POINT 3289 0.1668825654945296 0.5515963812698894
+ POINT 3290 0.1412073727043561 0.5514582522552611
+ POINT 3291 0.1284701116643227 0.5281445904979253
+ POINT 3292 0.1155030264398219 0.5513516503975264
+ POINT 3293 0.1671583114968249 0.5050165106133528
+ POINT 3294 0.1928908047238743 0.5051363313493323
+ POINT 3295 0.1414117079751675 0.5049064113699346
+ POINT 3296 0.1157073617106334 0.5047998095122
+ POINT 3297 0.1543955615431356 0.4816717296276277
+ POINT 3298 0.08997785843143047 0.5047069838318166
+ POINT 3299 0.1029194547422753 0.481468804703826
+ POINT 3300 0.06436538296865862 0.4580134071412623
+ POINT 3301 0.05146501024225641 0.4813211729667213
+ POINT 3302 0.03851748424151497 0.5511072270913728
+ POINT 3303 0.02569863802636367 0.5278593257584367
+ POINT 3304 0.06428710838435304 0.5046314670703231
+ POINT 3305 0.07707501535271108 0.5279624718786972
+ POINT 3306 0.03856216716353701 0.5045766610136018
+ POINT 3307 0.2179469147146543 0.5984594482048871
+ POINT 3308 0.1922331959030084 0.5983127104249152
+ POINT 3309 0.1792352167844808 0.6214908140971178
+ POINT 3310 0.1913072521895045 0.6914046329001287
+ POINT 3311 0.1658233841822304 0.6910193107995912
+ POINT 3312 0.1783270053691666 0.7144348525306947
+ POINT 3313 0.2043996879888718 0.6682689841850593
+ POINT 3314 0.1918396748741913 0.6448364709173682
+ POINT 3315 0.2174357318604949 0.6451163639334023
+ POINT 3316 0.1661991729128577 0.6446434343487748
+ POINT 3317 0.03822496354410713 0.7361236172930801
+ POINT 3318 0.0636567773788968 0.7362224456757891
+ POINT 3319 0.02549444962279553 0.7131211508959361
+ POINT 3320 0.4778809797243252 0.5057885945599929
+ POINT 3321 0.4905706308300941 0.528971782264259
+ POINT 3322 0.5039342821156019 0.5057033226525869
+ POINT 3323 0.4771480255463438 0.5523128632197408
+ POINT 3324 0.4511582308806231 0.5524113280266716
+ POINT 3325 0.3092717619151221 0.4822669978241703
+ POINT 3326 0.322359958787596 0.4589945659593586
+ POINT 3327 0.3220112257887987 0.5056301234510399
+ POINT 3328 0.07729522875024956 0.4347421010293822
+ POINT 3329 0.090229566057387 0.4114262422320855
+ POINT 3330 0.1159949038876617 0.4115726535869405
+ POINT 3331 0.09011979724466339 0.4581046729115624
+ POINT 3332 0.1158493005238663 0.4581974985919459
+ POINT 3333 0.2186724473704337 0.5052462737658832
+ POINT 3334 0.244448621591814 0.5053626285395419
+ POINT 3335 0.2059238077113524 0.4818917712875966
+ POINT 3336 0.2575396603889407 0.4820978508167151
+ POINT 3337 0.244734179929738 0.4587497430857169
+ POINT 3338 0.2189097881817767 0.4586505698272459
+ POINT 3339 0.2319385177536029 0.4353985992088154
+ POINT 3340 0.1931281455352173 0.4585406274106951
+ POINT 3341 0.1648302480981311 0.7833072910903072
+ POINT 3342 0.1899716328346092 0.784131637512705
+ POINT 3343 0.2031409164146438 0.7613257654249475
+ POINT 3344 0.1524017077899091 0.7602331563033949
+ POINT 3345 0.1907748115251305 0.7377564142458692
+ POINT 3346 0.1652909435178563 0.7373710921453319
+ POINT 3347 0.1399539016339452 0.7369115945882204
+ POINT 3348 -0.5928809802590156 0.6212232216465079
+ POINT 3349 -0.6053783134105666 0.6442847528227001
+ POINT 3350 -0.5794156781021171 0.6445727882258152
+ POINT 3351 -0.606434447159774 0.5978567296803006
+ POINT 3352 -0.6861170617214072 0.5514033840752618
+ POINT 3353 -0.7115085553959806 0.553197264592402
+ POINT 3354 -0.6840696601196132 0.5977977331077479
+ POINT 3355 -0.7096166456687025 0.5976867600815081
+ POINT 3356 -0.69600897009982 0.6204268701016322
+ POINT 3357 -0.7228857878082029 0.5755098870663908
+ POINT 3358 -0.6817928739608023 0.6888523502234118
+ POINT 3359 -0.7073314560070312 0.68812281280387
+ POINT 3360 -0.7204151574862122 0.6653191979604152
+ POINT 3361 -0.7082596515410639 0.643049995751046
+ POINT 3362 -0.6827126659919744 0.6431609687772857
+ POINT 3363 -0.7696104845179814 0.7538566959480468
+ POINT 3364 -0.7824188395381693 0.7310823213206077
+ POINT 3365 -0.8190851259807537 0.7524890672409938
+ POINT 3366 -0.8068214123455549 0.7748624339809177
+ POINT 3367 -0.7822049698244511 0.7756837870241446
+ POINT 3368 -0.7944394270831938 0.7974745681443939
+ POINT 3369 -0.8074498036677014 0.7304503912402013
+ POINT 3370 -0.8319479745616429 0.7298678056205266
+ POINT 3371 -0.8451124004482077 0.7073074125456742
+ POINT 3372 -0.8585664394185942 0.6845684479969316
+ POINT 3373 -0.8945527630426959 0.7064896133318757
+ POINT 3374 -0.880625219855304 0.7291512593746357
+ POINT 3375 -0.8567477227612599 0.7293460885464667
+ POINT 3376 -0.8841290122746754 0.6837484264256362
+ POINT 3377 -0.9090541215675839 0.6833219419491972
+ POINT 3378 -0.3974421730713383 0.2285966127282077
+ POINT 3379 -0.3877552355213761 0.2478479552449862
+ POINT 3380 -0.4159752040357345 0.2178074904488024
+ POINT 3381 -0.437474135418588 0.2007690058501327
+ POINT 3382 -0.4363691904865473 0.2277291253216555
+ POINT 3383 -0.4981287110186421 0.7878161262079454
+ POINT 3384 -0.471928527256169 0.7878696542069474
+ POINT 3385 -0.5119313839368681 0.7632983033376908
+ POINT 3386 -0.459785897860906 0.7639274685919226
+ POINT 3387 -0.5910663659592779 0.7141372673778621
+ POINT 3388 -0.5785010723824179 0.6912383314918329
+ POINT 3389 -0.604478304830528 0.6905332552880366
+ POINT 3390 -0.5515952091886892 0.738813770630803
+ POINT 3391 -0.5777967176668153 0.7378825630391534
+ POINT 3392 -0.6037739501149255 0.7371774868353571
+ POINT 3393 -0.4889249772727747 0.6222492213616555
+ POINT 3394 -0.5014460146276127 0.6456008029480309
+ POINT 3395 -0.4754621340447532 0.6457906900906342
+ POINT 3396 -0.4503673691125324 0.5991036130116039
+ POINT 3397 -0.4370100681409274 0.6225225927897886
+ POINT 3398 -0.4763581937572959 0.5990053876988712
+ POINT 3399 -0.4817910506707711 0.3164848220335315
+ POINT 3400 -0.4535953382527324 0.3189814825901278
+ POINT 3401 -0.4683189808484258 0.2933461257650906
+ POINT 3402 -0.5188244024061459 0.2749565788394502
+ POINT 3403 -0.5420931265372309 0.2819106588651618
+ POINT 3404 -0.5197834173975494 0.2978035452342058
+ POINT 3405 -0.5187687331720533 0.3899929082059082
+ POINT 3406 -0.5052727560678176 0.4129552480116714
+ POINT 3407 -0.479168862526794 0.4128228472272443
+ POINT 3408 -0.4663588340204511 0.389423127827026
+ POINT 3409 -0.4798152572329356 0.3658844408448862
+ POINT 3410 -0.4536109848625932 0.3656588658407084
+ POINT 3411 -0.3617490389555497 0.389104277260035
+ POINT 3412 -0.348584098999122 0.4124176172602999
+ POINT 3413 -0.3226110295065669 0.4123663914667859
+ POINT 3414 -0.3097261430635858 0.3890328957567288
+ POINT 3415 -0.3227033334421276 0.365774384811444
+ POINT 3416 -0.3487385640644605 0.3657700046512186
+ POINT 3417 -0.3357543849910777 0.3424623632236249
+ POINT 3418 -0.3748000905044997 0.365792255672216
+ POINT 3419 0.2275721322985668 1.391282203179259
+ POINT 3420 0.2140164106698723 1.368606737267179
+ POINT 3421 -0.5702320007807471 0.3917067003481098
+ POINT 3422 -0.5827028574954987 0.414855174557677
+ POINT 3423 -0.608639664739505 0.4144116767672592
+ POINT 3424 -0.6200245953506758 0.3924040497006396
+ POINT 3425 -0.6522579462527746 0.3702139313078293
+ POINT 3426 -0.6782125778660616 0.3651342304718016
+ POINT 3427 0.2153737995754697 1.415235250922853
+ POINT 3428 0.5916219385403805 1.296716509535319
+ POINT 3429 0.5771876705474219 1.318475988745458
+ POINT 3430 0.5629983999046616 1.341709257932246
+ POINT 3431 -0.5625394347157243 0.2732295455268656
+ POINT 3432 -0.563313132551307 0.2963488746035672
+ POINT 3433 0.5770712730760554 1.367407537006025
+ POINT 3434 0.5901118256033524 1.392007600401651
+ POINT 3435 0.5242998146976345 0.7873010721529698
+ POINT 3436 0.5119329736248337 0.7632962249940414
+ POINT 3437 0.4981303317417042 0.7878144281993652
+ POINT 3438 0.5370804331546364 0.8107270409241252
+ POINT 3439 -0.3430961598768315 0.7876594467580882
+ POINT 3440 -0.3565389399997428 0.763910407284851
+ POINT 3441 -0.3052226147487892 0.7634919092774439
+ POINT 3442 -0.3185111372079351 0.7400534716556744
+ POINT 3443 -0.3174896076722792 0.7876487958223675
+ POINT 3444 -0.3442233352206996 0.7402239059289781
+ POINT 3445 -0.3699126839650762 0.7403115684645787
+ POINT 3446 -0.4102196113030976 0.6695240914337912
+ POINT 3447 -0.423584996667025 0.6460457144413436
+ POINT 3448 -0.4495160252160126 0.6459622301558138
+ POINT 3449 -0.4620370625708508 0.6693138117421892
+ POINT 3450 -0.3957054330235162 0.740347686480341
+ POINT 3451 -0.3833898282444729 0.716661185124468
+ POINT 3452 -0.4214964450085997 0.7403704156643209
+ POINT 3453 -0.3967654230834989 0.6931300671002221
+ POINT 3454 -0.4226367655225116 0.6930913274737995
+ POINT 3455 -0.7880570099806479 1.162951873370833
+ POINT 3456 -0.761286433968238 1.162323472609615
+ POINT 3457 -0.7892199012647433 1.120601957990098
+ POINT 3458 -0.8016185043188055 1.141746565524629
+ POINT 3459 -0.813184119179726 1.206538982540648
+ POINT 3460 -0.839468814556275 1.206815901075237
+ POINT 3461 -0.7999005431811752 1.22793973495043
+ POINT 3462 -0.746986566389964 1.312731593140633
+ POINT 3463 -0.7588433027099131 1.335195801344242
+ POINT 3464 -0.6560678327320605 0.8267991617790384
+ POINT 3465 -0.6818377993304878 0.8247767998803015
+ POINT 3466 -0.6693576442741969 0.8484440553373909
+ POINT 3467 -0.6940779622898298 0.8017776586538032
+ POINT 3468 -0.6812381415228272 0.7798336053940089
+ POINT 3469 -0.7073677738319661 0.8234225522121557
+ POINT 3470 -0.6049130638281456 0.8773111422972713
+ POINT 3471 -0.5916217845726318 0.9032844290189598
+ POINT 3472 -0.6314675817570059 0.8747684405899456
+ POINT 3473 -0.6170331597469092 0.8530091189434534
+ POINT 3474 -0.7826635002889959 0.8198621770008762
+ POINT 3475 -0.8072799428100998 0.8190408239576492
+ POINT 3476 -0.8199471833324119 0.8405480719652076
+ POINT 3477 -0.8332676487819749 0.8619766010625289
+ POINT 3478 -0.8088244814654649 0.8628569619114528
+ POINT 3479 -0.7837640344612735 0.8637552605138032
+ POINT 3480 -0.7970844999108366 0.8851837896111245
+ POINT 3481 -0.8104062851489087 0.9064765619622989
+ POINT 3482 -0.8242630135330764 0.9280432307670156
+ POINT 3483 -0.8122361874637862 0.950144749298
+ POINT 3484 -0.8360016752991957 0.9058521598134908
+ POINT 3485 -0.6217621819421643 1.050347089599112
+ POINT 3486 -0.6135825866529512 1.021927041668575
+ POINT 3487 -0.5846720269599562 1.023213005928731
+ POINT 3488 -0.6036327296221307 0.99799772540783
+ POINT 3489 -0.6252296958949042 1.076452244981441
+ POINT 3490 -0.5982586623818794 1.07366555885256
+ POINT 3491 -0.7359211885715602 1.083584965167191
+ POINT 3492 -0.7453370428285235 1.062983007177094
+ POINT 3493 -0.7661346788896624 1.079398042009903
+ POINT 3494 -0.7798040470077803 1.1
+ POINT 3495 -0.7661346788896621 1.120601957990098
+ POINT 3496 -0.7036635979658161 1.159575292659954
+ POINT 3497 -0.6827914721501145 1.139962789851368
+ POINT 3498 -0.7359211885715601 1.116415034832809
+ POINT 3499 -0.7151235525104214 1.1
+ POINT 3500 -0.731072943650136 1.158136549452327
+ POINT 3501 -0.7453370428285231 1.137016992822907
+ POINT 3502 0.05195898966375652 1.906007717412101
+ POINT 3503 0.06481170872915996 1.88234581849968
+ POINT 3504 0.09061024846492834 1.882139993038691
+ POINT 3505 0.1035991533335029 1.905317613800943
+ POINT 3506 0.06523028572982552 1.929642754156205
+ POINT 3507 -0.06515763431637089 1.929642362291637
+ POINT 3508 -0.03923898466571878 1.929927400588417
+ POINT 3509 -0.02622882154039851 1.953879008411499
+ POINT 3510 0.1677414786681202 1.97292195772075
+ POINT 3511 0.142981459973619 1.974160038908235
+ POINT 3512 0.1804446514018183 1.950365347994333
+ POINT 3513 0.1678424638994597 1.927495304311631
+ POINT 3514 0.1931360125651682 1.927166770098764
+ POINT 3515 0.1422374824825535 1.927803145795112
+ POINT 3516 0.0001246961657661851 2.07823229611221
+ POINT 3517 0.02161573739454792 2.099766352652904
+ POINT 3518 0.02159211418106533 2.077768153596185
+ POINT 3519 -0.02136035899985236 2.099771841503549
+ POINT 3520 -0.02137405933800451 2.077772970177485
+ POINT 3521 0.4993764251920219 0.7398590508361503
+ POINT 3522 0.7734550239077413 0.9293749476519462
+ POINT 3523 0.7611195166134965 0.951290948381731
+ POINT 3524 0.7863311500230181 0.9505806072718357
+ POINT 3525 -0.05036962598441143 2.074620681838993
+ POINT 3526 -0.02888950998460164 2.053312314158485
+ POINT 3527 -0.08303914441694887 2.048106060426967
+ POINT 3528 -0.06896435638119108 2.025271763066794
+ POINT 3529 -0.07319993195878105 2.073117444342518
+ POINT 3530 -0.06570168040637502 2.097839310305913
+ POINT 3531 0.04265311679185714 2.026499227474023
+ POINT 3532 0.01369217503290316 2.029651739958751
+ POINT 3533 0.02906699842075926 2.053312090012249
+ POINT 3534 0.05055305594001932 2.074615641111456
+ POINT 3535 0.07333017808914294 2.073111990241299
+ POINT 3536 0.06587245777968669 2.097828050971741
+ POINT 3537 0.08315579167347936 2.048103867033625
+ POINT 3538 0.09421117423144476 2.023215661686267
+ POINT 3539 0.1054752612533862 1.999004681221036
+ POINT 3540 0.05370849934982255 2.001611022126665
+ POINT 3541 0.06636241615864329 1.976972928463176
+ POINT 3542 0.06908332273767866 2.025271372180161
+ POINT 3543 6.038239495724865e-05 2.002838501961853
+ POINT 3544 -0.01355626953375623 1.978516890268533
+ POINT 3545 -0.03983008062072882 1.978200244646147
+ POINT 3546 -0.06627313437937236 1.976972931551354
+ POINT 3547 -0.05360058237273008 2.001610813408387
+ POINT 3548 -0.04252130262254755 2.026499076161587
+ POINT 3549 -0.01352573597614063 2.029651364500079
+ POINT 3550 0.6922365980893586 1.746669035447258
+ POINT 3551 0.6793771606181297 1.721924213438882
+ POINT 3552 0.662457190372238 1.744649353281094
+ POINT 3553 0.6918552918476338 1.698100072275289
+ POINT 3554 0.6620758841305133 1.696080390109125
+ POINT 3555 0.7195642990582912 1.753710457388772
+ POINT 3556 0.7306446745055435 1.713723909059002
+ POINT 3557 0.7346772787680449 1.736817687044629
+ POINT 3558 0.7452764836342495 1.766755549614526
+ POINT 3559 0.6086368293183556 1.78559313785908
+ POINT 3560 0.6331710338437972 1.786265765734152
+ POINT 3561 0.6485517960469211 1.766826076353369
+ POINT 3562 0.6356923585756924 1.742081254344993
+ POINT 3563 0.4363678872897983 1.972272989529545
+ POINT 3564 0.4386840864652508 1.94994443765292
+ POINT 3565 0.3974439976520876 1.971405131021685
+ POINT 3566 0.4159745351225623 1.982194225812711
+ POINT 3567 0.4374709259988622 1.999232555519259
+ POINT 3568 0.3877594910371356 1.952154028892702
+ POINT 3569 0.4014042713252501 1.929963888511621
+ POINT 3570 0.374179751513031 1.926651981312035
+ POINT 3571 0.4817911173390774 1.883518286675428
+ POINT 3572 0.4932358185090228 1.856976137821036
+ POINT 3573 0.4798172257838654 1.834118675389927
+ POINT 3574 0.453614631044033 1.834343969197033
+ POINT 3575 0.2432682688718115 1.972887794545467
+ POINT 3576 0.2315143630063342 1.950610859002089
+ POINT 3577 0.2704836172413356 1.927701729686579
+ POINT 3578 0.2834885327990177 1.951043204842235
+ POINT 3579 0.2966816240952116 1.927560030306102
+ POINT 3580 0.2704467801902808 1.977813239000525
+ POINT 3581 0.2564245231169506 1.999516129323281
+ POINT 3582 0.2251605432805274 2.035143025862992
+ POINT 3583 0.2386314996778703 2.053272692737385
+ POINT 3584 0.2376224821735597 2.014122524180182
+ POINT 3585 0.2636526675429323 2.046636185190103
+ POINT 3586 0.256371126478749 2.066578421809642
+ POINT 3587 0.2648009934920289 2.01904796863524
+ POINT 3588 0.3096070943793596 1.9040599088921
+ POINT 3589 0.3226120099370418 1.927401384047756
+ POINT 3590 0.3480362257230531 1.926371692163435
+ POINT 3591 0.3226368210967134 1.880718070569523
+ POINT 3592 0.3616810060111676 1.904181551782353
+ POINT 3593 0.6480298589817612 1.672153963325717
+ POINT 3594 0.6355517277522571 1.69597810448931
+ POINT 3595 0.6077654771784347 1.64863877147341
+ POINT 3596 0.595197740386599 1.671762386767709
+ POINT 3597 0.7493834632274523 1.667447425366621
+ POINT 3598 0.7367132546089009 1.646356805078222
+ POINT 3599 0.7387343218511164 1.686086615826574
+ POINT 3600 0.7115052710512045 1.64680864214649
+ POINT 3601 0.6999449391932069 1.670462779042862
+ POINT 3602 0.6861143472180151 1.648602112049161
+ POINT 3603 0.7172462156808233 1.696306602372619
+ POINT 3604 -0.1665761999906868 1.601879704997744
+ POINT 3605 -0.1409000249065374 1.602017950435267
+ POINT 3606 -0.1279696700052518 1.578864059870147
+ POINT 3607 -0.1152905077292891 1.602180316937036
+ POINT 3608 -0.179220540795262 1.578508540125646
+ POINT 3609 -0.1406296832477389 1.555602876120868
+ POINT 3610 -0.1150201660704907 1.555765242622637
+ POINT 3611 -0.1661852783620767 1.555356030454455
+ POINT 3612 -0.1532357744273156 1.532257213206945
+ POINT 3613 -0.08982816979538227 1.648756592110239
+ POINT 3614 -0.07705022536576084 1.672037209581978
+ POINT 3615 -0.06413669377919697 1.648832217207081
+ POINT 3616 -0.0512718512286264 1.625612005466528
+ POINT 3617 -0.03849390679900496 1.648892622938267
+ POINT 3618 -0.1025677504196966 1.625442903618749
+ POINT 3619 -0.08963739551841096 1.60228901305363
+ POINT 3620 -0.06404307385909089 1.602396681093244
+ POINT 3621 -0.07676583116868343 1.579134094411531
+ POINT 3622 0.1671583114969456 1.694983489386647
+ POINT 3623 0.1799069511560153 1.67162898690836
+ POINT 3624 0.1668825654946343 1.64840361873011
+ POINT 3625 0.1284701116644432 1.671855409502074
+ POINT 3626 0.1414117079752956 1.695093588630065
+ POINT 3627 0.1412073727044653 1.648541747744738
+ POINT 3628 0.1931281455353467 1.741459372589305
+ POINT 3629 0.1803369722650524 1.764816669807348
+ POINT 3630 0.231938517753725 1.764601400791184
+ POINT 3631 0.2190828937263732 1.787938367790687
+ POINT 3632 0.2449072854743237 1.787839194532216
+ POINT 3633 0.2189097881818977 1.741349430172754
+ POINT 3634 0.1932874662025816 1.788049897213723
+ POINT 3635 -0.0256728693011736 1.672140569139575
+ POINT 3636 -0.03853401327404768 1.695423170560983
+ POINT 3637 -0.01284813322564576 1.695450905021739
+ POINT 3638 0.01287653988441327 1.695450968345165
+ POINT 3639 -0.01280802675060303 1.648920357399022
+ POINT 3640 0.01283185696236891 1.648920402267394
+ POINT 3641 0.5283862086203651 1.601363963241954
+ POINT 3642 0.540915264095458 1.578218016593592
+ POINT 3643 0.5023449985968235 1.601187509488418
+ POINT 3644 0.5004877209262403 1.507475857056956
+ POINT 3645 0.4869845609901188 1.483795713787033
+ POINT 3646 0.5255459081479685 1.460654305210246
+ POINT 3647 0.5390396832313233 1.484626073205076
+ POINT 3648 0.4993764251920396 1.46014094916385
+ POINT 3649 0.348596801039073 1.787584300425731
+ POINT 3650 0.3226258879828245 1.787635334614374
+ POINT 3651 0.361760666520125 1.810897743823572
+ POINT 3652 0.2708456186415195 1.834335516366923
+ POINT 3653 0.2579179265999607 1.811096959502398
+ POINT 3654 0.2967601768625934 1.834276317989185
+ POINT 3655 0.3097428517767955 1.810968775450743
+ POINT 3656 0.3227188368864392 1.834227335966852
+ POINT 3657 0.2966672279589786 1.787684316636708
+ POINT 3658 0.2707735506273126 1.787759992502895
+ POINT 3659 0.4905706308301276 1.671028217735741
+ POINT 3660 0.4771480255463788 1.647687136780259
+ POINT 3661 0.4511582308806624 1.647588671973329
+ POINT 3662 0.4385183622883749 1.670919925950854
+ POINT 3663 0.4637889279881854 1.624332862925253
+ POINT 3664 0.4518212529878732 1.694226131786288
+ POINT 3665 0.4778809797243614 1.694211405440007
+ POINT 3666 -0.5804718118513061 1.601855234916585
+ POINT 3667 -0.5928809802589987 1.578776778353492
+ POINT 3668 -0.6064344471597582 1.6021432703197
+ POINT 3669 -0.5794156781020998 1.555427211774185
+ POINT 3670 -0.6053783134105518 1.5557152471773
+ POINT 3671 -0.6177731679532557 1.532836449904233
+ POINT 3672 -0.6312384701101547 1.556186016483541
+ POINT 3673 -0.7574423689693339 1.468132635592014
+ POINT 3674 -0.74497514428518 1.490222739519206
+ POINT 3675 -0.7321667892649917 1.467448364891767
+ POINT 3676 -0.7824188395381655 1.468917678679392
+ POINT 3677 -0.6570476546017896 1.556384688041301
+ POINT 3678 -0.6446528000590858 1.579263485314368
+ POINT 3679 -0.7977677744455367 1.580818784657275
+ POINT 3680 -0.8107918388011222 1.60295343665588
+ POINT 3681 -0.7852981210697809 1.602320004283393
+ POINT 3682 -0.784393529197197 1.558222284274732
+ POINT 3683 -0.8098872469285382 1.558855716647219
+ POINT 3684 0.8122352908723364 0.9501419754162519
+ POINT 3685 0.8104051256456382 0.906472994959531
+ POINT 3686 0.8242619690503401 0.9280398805441347
+ POINT 3687 0.8360004373787152 0.9058482689616149
+ POINT 3688 0.7853447977159081 0.9073716561903259
+ POINT 3689 0.7970832660442833 0.8851800446078061
+ POINT 3690 -0.7981225120244291 1.667268012606134
+ POINT 3691 -0.7858789610960804 1.645336548536518
+ POINT 3692 -0.8105657363537151 1.646386120351614
+ POINT 3693 -0.8083223964676065 1.68874009831917
+ POINT 3694 -0.7833822327188175 1.687505971472755
+ POINT 3695 -0.5625394347157237 1.926770454473135
+ POINT 3696 -0.5633131325513028 1.903651125396433
+ POINT 3697 0.7705818912066765 0.8424733375256814
+ POINT 3698 0.7837626948159199 0.8637513653920781
+ POINT 3699 0.7326340169672543 0.8219710783668762
+ POINT 3700 0.7073667471343005 0.8234191138841537
+ POINT 3701 0.7826618681823108 0.8198576518229621
+ POINT 3702 0.7577413078717008 0.8209069644030882
+ POINT 3703 -0.4817910506707482 1.883515177966469
+ POINT 3704 -0.4535953382527008 1.881018517409873
+ POINT 3705 -0.1676924267408599 1.972922145060293
+ POINT 3706 -0.1429216232763135 1.974160460921071
+ POINT 3707 -0.1804000298005828 1.950364725244908
+ POINT 3708 -0.2061860867894681 1.904246821311689
+ POINT 3709 -0.1930971044735862 1.927165852965472
+ POINT 3710 -0.1677962696132851 1.927494642951794
+ POINT 3711 -0.1421857271163959 1.927802618206136
+ POINT 3712 -0.1548828017893993 1.9046037459267
+ POINT 3713 -0.3470195026008313 2.037857912913609
+ POINT 3714 -0.3308724928075756 2.02013441147043
+ POINT 3715 -0.3039131500945664 2.025207748576093
+ POINT 3716 -0.3028453176999878 2.053039722963945
+ POINT 3717 0.7447139939428885 0.7993553926641568
+ POINT 3718 0.6303380302708946 0.6900585295689327
+ POINT 3719 0.6428324495039852 0.7126724654912038
+ POINT 3720 0.6561269917143919 0.6893024128025589
+ POINT 3721 0.6177729611817915 0.6671595753556676
+ POINT 3722 0.6555748733889517 0.7353044822019976
+ POINT 3723 0.8611670287339018 0.9049238182512134
+ POINT 3724 0.8869454301217814 0.9044104357969051
+ POINT 3725 0.8584326533700793 0.861047474912501
+ POINT 3726 0.8817493206784435 0.8600340666410642
+ POINT 3727 0.9210486921777763 0.8141301575433713
+ POINT 3728 0.9107234521315988 0.8352619789030669
+ POINT 3729 0.9422855600890829 0.8167734673163333
+ POINT 3730 0.9495771775734785 0.842384174618978
+ POINT 3731 0.9617787456594511 0.8261722358895418
+ POINT 3732 0.7892193098756044 1.079397739419273
+ POINT 3733 0.8152872768897109 1.078854980730896
+ POINT 3734 0.7798034815328188 1.100000000000001
+ POINT 3735 0.9193229141810171 1.163329591183576
+ POINT 3736 0.9298113978304205 1.183242428516302
+ POINT 3737 0.9062889917681686 1.142158607750625
+ POINT 3738 0.8929771307651715 1.163562940363839
+ POINT 3739 0.8522956328716681 1.228612849711463
+ POINT 3740 0.837830602605415 1.250482750581665
+ POINT 3741 0.812235290872338 1.249858024583749
+ POINT 3742 0.799899783578093 1.227942023853964
+ POINT 3743 0.8131833669600665 1.20654099538139
+ POINT 3744 0.8408603623965645 1.121145019269104
+ POINT 3745 0.8538145283276743 1.142340997734548
+ POINT 3746 0.8669890424212132 1.121195978465444
+ POINT 3747 0.8669890424212129 1.078804021534556
+ POINT 3748 0.8408603623965641 1.078854980730896
+ POINT 3749 0.82846179098325 1.1
+ POINT 3750 0.8152872768897113 1.121145019269104
+ POINT 3751 0.9194221353961591 1.120962629285181
+ POINT 3752 0.8930763519803138 1.121195978465444
+ POINT 3753 0.8801221860492038 1.1
+ POINT 3754 0.8930763519803134 1.078804021534556
+ POINT 3755 -0.1652815744918534 1.462628621584363
+ POINT 3756 -0.1907659967459046 1.462243224659058
+ POINT 3757 -0.1783169403910605 1.485564737740659
+ POINT 3758 -0.1658119438393313 1.508980251103249
+ POINT 3759 -0.1402563487249935 1.509227096769661
+ POINT 3760 -0.1147964179832611 1.509507589200907
+ POINT 3761 -0.1273725873952768 1.486230627097211
+ POINT 3762 -0.1144841787010701 1.463368643064062
+ POINT 3763 -0.1016884509119295 1.440476234896989
+ POINT 3764 -0.1523931657976466 1.439766637551214
+ POINT 3765 -0.1394853999262573 1.417152076695865
+ POINT 3766 -0.1399441094428025 1.463088150632815
+ POINT 3767 -0.1143265637384726 1.41753388028359
+ POINT 3768 -0.6853435919266468 1.287673763114354
+ POINT 3769 -0.7105801576185664 1.289729094837099
+ POINT 3770 -0.6967125141813659 1.309489942771997
+ POINT 3771 -0.683301779681033 1.330506458805299
+ POINT 3772 -0.6606007340361491 1.284085223765407
+ POINT 3773 -0.5521244282855743 1.267491765602699
+ POINT 3774 -0.531214695714908 1.283272620892991
+ POINT 3775 -0.5204810166117203 1.259638105213656
+ POINT 3776 -0.5170252424126385 1.306505568620204
+ POINT 3777 -0.4670734146859981 1.315378736371134
+ POINT 3778 -0.4761907297653664 1.284918827321127
+ POINT 3779 -0.4900040527115724 1.305930796048
+ POINT 3780 -0.5084959870014132 1.338392728788066
+ POINT 3781 -0.4981287110186286 1.412183873792054
+ POINT 3782 -0.4842957552672742 1.388125628580541
+ POINT 3783 -0.4959853681650477 1.362998556397703
+ POINT 3784 -0.4697851844025737 1.362945028398701
+ POINT 3785 -0.5230065578661137 1.363573328969906
+ POINT 3786 -0.6217621819421639 1.149652910400888
+ POINT 3787 -0.6135825866529505 1.178072958331425
+ POINT 3788 -0.5846720269599562 1.17678699407127
+ POINT 3789 -0.6036327296221302 1.20200227459217
+ POINT 3790 -0.5982586623818794 1.12633444114744
+ POINT 3791 -0.625229695894904 1.123547755018559
+ POINT 3792 0.603519405184624 0.8309500561023699
+ POINT 3793 0.6170330944287234 0.8530071028993547
+ POINT 3794 0.6300736469560195 0.8284070395037286
+ POINT 3795 0.5770712730760479 0.8325924629939763
+ POINT 3796 0.6560673202533718 0.8267963791922915
+ POINT 3797 0.6425536310092723 0.8047393323953068
+ POINT 3798 0.6555378200685227 0.7809106438815174
+ POINT 3799 0.6693570637151389 0.8484414037205379
+ POINT 3800 0.6575313827903875 0.8715137014739958
+ POINT 3801 0.6818370477683918 0.8247736966121162
+ POINT 3802 0.6940770036725333 0.8017740893559073
+ POINT 3803 0.5204817563689091 0.9403624530936948
+ POINT 3804 0.5521249845375786 0.9325083372590062
+ POINT 3805 0.5312152727586923 0.9167273455743463
+ POINT 3806 0.5685417583792288 0.9536792891827819
+ POINT 3807 0.5803132622791569 0.9286688549348657
+ POINT 3808 0.5581874967141129 0.9776206067864263
+ POINT 3809 0.5849478635550462 0.9748858063948901
+ POINT 3810 0.5170260021159305 0.8934940763875587
+ POINT 3811 0.5084968728533406 0.8616063696009865
+ POINT 3812 0.4900049278172879 0.8940690813510304
+ POINT 3813 0.4761914074198789 0.9150814518892764
+ POINT 3814 -0.4118595737137022 1.624213302099134
+ POINT 3815 -0.4251529309403653 1.647563186179945
+ POINT 3816 -0.4511531665576695 1.647585957545847
+ POINT 3817 -0.4637844661798776 1.624330107793784
+ POINT 3818 -0.4244363405635048 1.600812902702867
+ POINT 3819 -0.5659407581660016 1.531931289505812
+ POINT 3820 -0.5525288192947515 1.508327277415986
+ POINT 3821 -0.5785010723824027 1.508761668508167
+ POINT 3822 -0.5534434250144487 1.554992820682004
+ POINT 3823 -0.4485338246334084 1.507006314461094
+ POINT 3824 -0.4226367655224816 1.506908672526201
+ POINT 3825 -0.435079636413811 1.483400338794663
+ POINT 3826 -0.4473935041195021 1.459727226270572
+ POINT 3827 -0.4214964450085754 1.459629584335679
+ POINT 3828 -0.4733690892661234 1.459843285867061
+ POINT 3829 -0.449516025215981 1.554037769844186
+ POINT 3830 -0.4370100681408914 1.577477407210212
+ POINT 3831 -0.4235849966669893 1.553954285558657
+ POINT 3832 -0.4503673691124964 1.600896386988396
+ POINT 3833 -0.4763581937572642 1.600994612301129
+ POINT 3834 -0.4102196113030629 1.530475908566209
+ POINT 3835 -0.3977136542279733 1.553915545932234
+ POINT 3836 -0.3718450830779912 1.553929739564204
+ POINT 3837 -0.3967654230834656 1.506869932899778
+ POINT 3838 -0.4201830170185737 1.412318474237309
+ POINT 3839 -0.4323256464138405 1.388376288622284
+ POINT 3840 -0.3781167863242681 1.29879920764234
+ POINT 3841 -0.3913788961516381 1.321055940601513
+ POINT 3842 -0.3664754323470212 1.318314642856088
+ POINT 3843 0.5497072177947449 0.8842646338243024
+ POINT 3844 -0.369912683965047 1.459688431535422
+ POINT 3845 -0.3957054330234898 1.45965231351966
+ POINT 3846 -0.3833898282444415 1.483338814875533
+ POINT 3847 -0.4080193007291809 1.435979200995569
+ POINT 3848 -0.4263466658173307 1.740834085241741
+ POINT 3849 -0.400328341909865 1.740863550332469
+ POINT 3850 -0.4524468854138231 1.740754796342631
+ POINT 3851 -0.4396743990662632 1.764082297275825
+ POINT 3852 -0.3097261430634902 1.810967104243272
+ POINT 3853 -0.3226110295064803 1.787633608533215
+ POINT 3854 -0.3227033334420372 1.834225615188557
+ POINT 3855 -0.3487385640643834 1.834229995348783
+ POINT 3856 -0.361749038955477 1.810895722739966
+ POINT 3857 -0.3748000905044333 1.834207744327785
+ POINT 3858 -0.2960986803009519 1.694441395075749
+ POINT 3859 -0.3092572916925703 1.717731391619243
+ POINT 3860 -0.2705500390627937 1.741152736916458
+ POINT 3861 -0.2575214108159173 1.717900873575993
+ POINT 3862 -0.3223457974217933 1.741003719962304
+ POINT 3863 -0.2964460407683105 1.741076914962405
+ POINT 3864 -0.2313980361041401 1.671391750650108
+ POINT 3865 -0.2444305062821984 1.694636203997567
+ POINT 3866 -0.2702666305053687 1.694539917040918
+ POINT 3867 -0.283007775767233 1.671176725497322
+ POINT 3868 -0.2698541607685432 1.647885559791037
+ POINT 3869 -0.2440893407422511 1.648019607938641
+ POINT 3870 -0.2672494382577901 1.460598546765066
+ POINT 3871 -0.2928841607013203 1.460277363816133
+ POINT 3872 -0.2515356347854009 1.342332856101086
+ POINT 3873 -0.2623811974664229 1.317244504057174
+ POINT 3874 -0.2919653099646273 1.308388650689751
+ POINT 3875 -0.1028911793349833 1.718530690898937
+ POINT 3876 -0.09008828878243078 1.741894846390582
+ POINT 3877 -0.06433257279105092 1.741986256885419
+ POINT 3878 -0.05143487118258636 1.718678573727395
+ POINT 3879 -0.06425960725811419 1.695368237845231
+ POINT 3880 -0.08995108327429951 1.695292612748389
+ POINT 3881 -0.368785508621187 1.412252890706311
+ POINT 3882 -0.3565389399997162 1.436089592715149
+ POINT 3883 -0.3430961598768079 1.412340553241912
+ POINT 3884 -0.3809492249105797 1.388592163948052
+ POINT 3885 -0.3943920050334881 1.412341203421289
+ POINT 3886 -0.9090541215675839 1.516678058050803
+ POINT 3887 -0.8841290122746748 1.516251573574364
+ POINT 3888 -0.8945527630426953 1.493510386668125
+ POINT 3889 -0.3442233352206678 1.459776094071022
+ POINT 3890 -0.9222349220048072 0.9935749803284837
+ POINT 3891 -0.9298119726866239 1.016759958642744
+ POINT 3892 -0.8923999913222185 0.9932131674083375
+ POINT 3893 -0.9086231309691347 0.9715198382065103
+ POINT 3894 -0.9193234986920056 1.036672173203761
+ POINT 3895 -0.8929778005377472 1.036438693177921
+ POINT 3896 -0.8795723299628302 1.01500732084983
+ POINT 3897 -0.8996982271191322 0.880767139210223
+ POINT 3898 -0.8817511776424454 0.8600395718422131
+ POINT 3899 -0.8611683196738755 0.9049281356851671
+ POINT 3900 -0.8473115912897078 0.8833614668804504
+ POINT 3901 -0.8584342931566549 0.8610525769342052
+ POINT 3902 -0.9762098413216239 1.165284945469675
+ POINT 3903 -0.997099456147766 1.176109621926728
+ POINT 3904 -0.9741290824303535 1.192544620479725
+ POINT 3905 -0.8669896430765249 1.121195461587234
+ POINT 3906 -0.8930769311862954 1.121195461587234
+ POINT 3907 -0.8929778005377468 1.163561306822079
+ POINT 3908 -0.8795723299628295 1.18499267915017
+ POINT 3909 -0.8665383481426859 1.163822295502559
+ POINT 3910 -0.8538151471042945 1.142340069121766
+ POINT 3911 -0.8923999913222176 1.206786832591663
+ POINT 3912 -0.8659605389271567 1.207047821272143
+ POINT 3913 -0.8522964759156632 1.22861005451673
+ POINT 3914 -0.8643233019849532 1.250711573047714
+ POINT 3915 -0.8378315776140715 1.250479652850808
+ POINT 3916 -0.8674607939687377 1.448288347550512
+ POINT 3917 -0.880625219855303 1.470848740625364
+ POINT 3918 -0.8567477227612582 1.470653911453533
+ POINT 3919 -0.9052658342501747 1.471144822765103
+ POINT 3920 -0.9145602330542193 1.447853650274103
+ POINT 3921 -0.9287798605407519 1.470631853263992
+ POINT 3922 -0.8551504360858637 1.426293214143801
+ POINT 3923 -0.8428867224506646 1.403919847403877
+ POINT 3924 -0.8790279331799085 1.426488043315632
+ POINT 3925 -0.3674539456651266 1.365320608133509
+ POINT 3926 -0.3930604420774277 1.365408920848486
+ POINT 3927 -0.342076544277527 1.363852249023238
+ POINT 3928 -0.3297361762937239 1.388514502168795
+ POINT 3929 -0.3164699920729724 1.363862899958959
+ POINT 3930 -0.3235890235892179 0.2274028683809401
+ POINT 3931 -0.3350997888631224 0.2501294481465043
+ POINT 3932 -0.2834687403317903 0.2489576709070902
+ POINT 3933 -0.2966639886830955 0.2724409937888902
+ POINT 3934 -0.2704608405755851 0.2722993600322113
+ POINT 3935 -0.2966296808762294 0.2223295312752736
+ POINT 3936 -0.1462920886721623 0.1338956102550217
+ POINT 3937 -0.1594861386108715 0.112799832054819
+ POINT 3938 -0.1701239843311041 0.1377457483909715
+ POINT 3939 -0.1806324006258492 0.1609595933784048
+ POINT 3940 -0.1325848131294771 0.1562508639939317
+ POINT 3941 -0.1438602328341523 0.18046320820544
+ POINT 3942 -0.1686310362986485 0.1817015240662179
+ POINT 3943 -0.1555148550771758 0.2036109092498746
+ POINT 3944 0.4386840864652286 0.2500555623470795
+ POINT 3945 0.4275547023790719 0.2701870972292947
+ POINT 3946 0.4363678872897812 0.2277270104704525
+ POINT 3947 0.4374709259988536 0.2007674444807365
+ POINT 3948 0.6570445178274433 0.983393231895193
+ POINT 3949 0.6419126509369839 0.9676633861345023
+ POINT 3950 0.5230075599832441 0.8364253199979043
+ POINT 3951 0.4959864856846015 0.8370003249613759
+ POINT 3952 0.5495908203233755 0.8353330855637358
+ POINT 3953 0.6080387123820273 0.9244544423884578
+ POINT 3954 0.6232276175638591 0.9445513430214849
+ POINT 3955 0.6345362938250794 0.9191659785513011
+ POINT 3956 0.6154150694939318 0.972951849971659
+ POINT 3957 0.603632896928171 0.9979978495079076
+ POINT 3958 0.7067669236100544 0.7784753492330563
+ POINT 3959 0.6812372242441458 0.7798299319610187
+ POINT 3960 0.7192796978457332 0.7555840499003947
+ POINT 3961 0.7321650314351995 0.7325467367493127
+ POINT 3962 0.7068124777711333 0.7334938786870857
+ POINT 3963 0.7696084642331722 0.7538514696375571
+ POINT 3964 0.7572267681785672 0.7764640933314952
+ POINT 3965 0.78220298090194 0.7756786550064307
+ POINT 3966 0.7321194772741206 0.7775282072952832
+ POINT 3967 0.681791532026869 0.6888477123410485
+ POINT 3968 0.6941596111540411 0.7111864571304169
+ POINT 3969 0.6812742775645748 0.7342237702814989
+ POINT 3970 0.7114443399570634 0.9523898210689328
+ POINT 3971 0.701833470168305 0.9717084833569833
+ POINT 3972 0.7353499000938957 0.9946250724464286
+ POINT 3973 0.7488368251387765 0.9725955020049388
+ POINT 3974 0.8317211444056967 0.818155118547462
+ POINT 3975 0.8428844816292631 0.7960742687551694
+ POINT 3976 0.806819217856083 0.7748569002693113
+ POINT 3977 0.7944375218014781 0.7974695239632495
+ POINT 3978 0.8313171737400973 0.774273885048157
+ POINT 3979 0.5274406722697031 0.645278183331604
+ POINT 3980 0.5139780760684911 0.6688199115810427
+ POINT 3981 0.8366724454576642 0.5959493828581662
+ POINT 3982 0.8107876120856152 0.5970391420736303
+ POINT 3983 0.8352371979468542 0.6404419536233176
+ POINT 3984 0.8098836227889656 0.6411372127287723
+ POINT 3985 0.849269902725182 0.617464051206575
+ POINT 3986 0.8629531698349334 0.5947160930013301
+ POINT 3987 0.7977640501395507 0.6191741684232376
+ POINT 3988 0.7580563963117686 0.686967877422005
+ POINT 3989 0.7449730647745962 0.7097719063260957
+ POINT 3990 0.7574402848491961 0.7318620775394045
+ POINT 3991 0.7824164975725688 0.73107663921434
+ POINT 3992 0.7952790079836969 0.7084548889769143
+ POINT 3993 0.783379073929251 0.6864106961593085
+ POINT 3994 0.3718519646528623 0.6460685738009246
+ POINT 3995 0.3977195638381401 0.6460825747735008
+ POINT 3996 0.3852173445754782 0.622589980563834
+ POINT 3997 0.3726415027666674 0.5991895920729332
+ POINT 3998 0.3460554109559683 0.6459946952622733
+ POINT 3999 0.3335443833117357 0.622480546852703
+ POINT 4000 0.3478997028378276 0.5056968915066777
+ POINT 4001 0.3347412752163518 0.5289870072386599
+ POINT 4002 0.3738606978917799 0.5057430131123353
+ POINT 4003 0.3611306484642268 0.4823861293247153
+ POINT 4004 0.410224751110446 0.6695222364961869
+ POINT 4005 0.4226410815971621 0.693089522651879
+ POINT 4006 0.4485375402852113 0.6929916783879261
+ POINT 4007 0.4744829222011753 0.6928199085241475
+ POINT 4008 0.4620407002213319 0.6693115351180038
+ POINT 4009 0.4235901310330619 0.6460436432590962
+ POINT 4010 0.4495202504162308 0.6459599429452778
+ POINT 4011 0.4719304097134159 0.7878681736919808
+ POINT 4012 0.445955253277318 0.7879844432213585
+ POINT 4013 0.4842972507862167 0.8118730208509093
+ POINT 4014 0.4441866833419943 0.835171377589557
+ POINT 4015 0.4697865636563131 0.8370540704539915
+ POINT 4016 0.2210122047266095 0.9717705021939238
+ POINT 4017 0.1935446757021855 0.9638098278670224
+ POINT 4018 0.2000412850460666 0.9908128924818052
+ POINT 4019 0.1940370529594774 0.9380140529750184
+ POINT 4020 0.1730661332789345 0.9570564432628997
+ POINT 4021 0.3781169448507677 0.9012007749076077
+ POINT 4022 0.3913797501878318 0.8789438528115732
+ POINT 4023 0.4167344889095096 0.8792207388113424
+ POINT 4024 0.4281533910756757 0.9019914482378601
+ POINT 4025 0.4049212992043825 0.8581391028358198
+ POINT 4026 -0.354187761444375 1.340669005923672
+ POINT 4027 -0.3174896076722532 1.412351204177633
+ POINT 4028 -0.3451753083595763 1.506980095314935
+ POINT 4029 -0.3709726740250227 1.506906050915541
+ POINT 4030 -0.3585509031986004 1.530511213339181
+ POINT 4031 0.603532300194987 1.416365048482768
+ POINT 4032 0.6295441467711786 1.417478695807046
+ POINT 4033 0.6135825903018771 1.02192698648432
+ POINT 4034 0.5846722707577998 1.023213592262967
+ POINT 4035 0.6217621676097926 1.050347202143141
+ POINT 4036 0.6422796801749719 1.024484108743497
+ POINT 4037 0.6713312817526587 1.033291421134705
+ POINT 4038 0.682791146220892 1.060036942468629
+ POINT 4039 0.7036631704906631 1.040424039201016
+ POINT 4040 0.7196125493307207 1.015117133375846
+ POINT 4041 0.6631517044447431 1.004871205475884
+ POINT 4042 0.68609611940513 0.9922005442864006
+ POINT 4043 0.7079406567856048 0.9931864569376744
+ POINT 4044 0.6588393219524624 1.076452162201159
+ POINT 4045 0.6911712106904668 1.08358478026747
+ POINT 4046 0.6911712106904669 1.11641521973253
+ POINT 4047 0.703663170490664 1.159575960798985
+ POINT 4048 0.7196125493307221 1.184882866624155
+ POINT 4049 0.7310724137989548 1.15813734529023
+ POINT 4050 0.7079406567856064 1.206813543062326
+ POINT 4051 0.6860961194051318 1.2077994557136
+ POINT 4052 0.7018334701683071 1.228291516643017
+ POINT 4053 0.7237270314317858 1.268914732554276
+ POINT 4054 0.7114443399570656 1.247610178931068
+ POINT 4055 0.689599802576591 1.248596091582342
+ POINT 4056 0.6648570658973731 1.245007275054982
+ POINT 4057 0.720394061063117 1.355029314376916
+ POINT 4058 0.7073667471343053 1.376580886115847
+ POINT 4059 0.2552220030275064 1.270123345472574
+ POINT 4060 0.2310165357142874 1.274919876915728
+ POINT 4061 0.2229886106606231 1.298855506172868
+ POINT 4062 0.277100609810574 1.285751428192706
+ POINT 4063 0.2837498667572327 1.262744912427513
+ POINT 4064 0.2623833587342891 1.31724436121675
+ POINT 4065 0.2121440253098609 1.323943958317201
+ POINT 4066 0.2366728906950752 1.31969564355493
+ POINT 4067 0.1267632357448547 1.394459880332723
+ POINT 4068 0.1393369676815469 1.371802650586412
+ POINT 4069 0.1394932062142638 1.417152206466804
+ POINT 4070 0.1652909435179084 1.462628907854667
+ POINT 4071 0.1524017077899568 1.439766843696604
+ POINT 4072 0.1907748115251799 1.46224358575413
+ POINT 4073 0.1648302480981728 1.416692708909692
+ POINT 4074 0.1899716328346487 1.415868362487294
+ POINT 4075 0.1770631312589557 1.393253725257493
+ POINT 4076 0.3420788643559705 1.363852809898329
+ POINT 4077 0.3164727362272926 1.363863344502851
+ POINT 4078 0.5803132622791594 1.271331145065135
+ POINT 4079 0.5685417583792296 1.246320710817219
+ POINT 4080 0.5849478635550471 1.22511419360511
+ POINT 4081 0.5581874967141128 1.222379393213574
+ POINT 4082 0.3410988766517541 1.316846492609337
+ POINT 4083 0.3294837145235361 1.287156227474807
+ POINT 4084 0.3674561230128846 1.365321170201434
+ POINT 4085 0.3541893018257988 1.340669422860845
+ POINT 4086 0.3664761353086683 1.318314852912442
+ POINT 4087 0.3913797501878359 1.321056147188427
+ POINT 4088 0.3781169448507678 1.298799225092392
+ POINT 4089 0.3930622959108651 1.365409560220678
+ POINT 4090 0.4167344889095128 1.320779261188658
+ POINT 4091 0.4414743269103421 1.317261684153789
+ POINT 4092 0.4281533910756756 1.29800855176214
+ POINT 4093 0.4441866833420037 1.364828622410443
+ POINT 4094 0.418417034632542 1.365132674220909
+ POINT 4095 0.4049212992043899 1.341860897164181
+ POINT 4096 0.5314786558844242 0.4132956916654759
+ POINT 4097 0.5187692149696534 0.3899893172442862
+ POINT 4098 0.5321878076948166 0.3671318548131776
+ POINT 4099 0.5059835565279592 0.366787964201421
+ POINT 4100 0.557444337113713 0.4134814918151407
+ POINT 4101 0.5827009512386202 0.4148507387366729
+ POINT 4102 0.570230080261418 0.3917024547775748
+ POINT 4103 0.5439495268616263 0.4364439756245739
+ POINT 4104 0.5600485595370375 0.36614753960647
+ POINT 4105 0.4535974408368449 0.3189786765692466
+ POINT 4106 0.4817911173390542 0.3164817133245716
+ POINT 4107 0.4932358185089977 0.3430238621789637
+ POINT 4108 0.4406069832080197 0.3422487503253286
+ POINT 4109 0.4798172257838346 0.3658813246100724
+ POINT 4110 0.4271521264871417 0.3657875585406794
+ POINT 4111 0.4009821499453564 0.3657522919221532
+ POINT 4112 0.4139897977813316 0.3891595723997906
+ POINT 4113 0.4268707599995359 0.4125153849308312
+ POINT 4114 0.4007007834577506 0.412480118312305
+ POINT 4115 0.4536146310439949 0.365656030802966
+ POINT 4116 0.4663623690629565 0.3894201328254232
+ POINT 4117 0.4529693202287556 0.4125944055233763
+ POINT 4118 0.4396803059051746 0.4359149514358907
+ POINT 4119 0.3879725663382103 0.3424181391276151
+ POINT 4120 0.3748125929131735 0.3189970796306171
+ POINT 4121 0.348751082912906 0.3657681033818894
+ POINT 4122 0.3357684079986967 0.3424605608434468
+ POINT 4123 0.3227188368863485 0.3657726640331479
+ POINT 4124 0.3748102376324003 0.3657901529867263
+ POINT 4125 0.3617606665200521 0.3891022561764275
+ POINT 4126 0.7981174202709669 0.5327244482275539
+ POINT 4127 0.8083167462868261 0.5112521442312689
+ POINT 4128 0.7833770047178972 0.5124867104217563
+ POINT 4129 0.6338304357386257 0.5512280079518828
+ POINT 4130 0.6200902103135538 0.5746409141843742
+ POINT 4131 0.6324991754249474 0.5977193167350413
+ POINT 4132 0.6064342168647402 0.5978525373097486
+ POINT 4133 0.6719149239748829 0.574779859228439
+ POINT 4134 0.6603545921168847 0.5511257223320669
+ POINT 4135 0.6088230052962715 0.4588215931160478
+ POINT 4136 0.59585108617064 0.436185899178486
+ POINT 4137 0.5828871272165468 0.4592654697118005
+ POINT 4138 -0.331884881173231 1.483545367164599
+ POINT 4139 -0.3185111372079003 1.459946528344326
+ POINT 4140 -0.3194631103468087 1.507150529588239
+ POINT 4141 -0.52554435375023 1.460651911562538
+ POINT 4142 -0.4993744528208859 1.460138805904795
+ POINT 4143 -0.5119313839368531 1.436701696662309
+ POINT 4144 0.1163349573601741 0.3182652113792291
+ POINT 4145 0.2449072854742003 0.4121608054677838
+ POINT 4146 -0.2009698514016464 0.8534707715283603
+ POINT 4147 -0.2140116708400917 0.8313932516694217
+ POINT 4148 -0.2393797795057072 0.8325404856908127
+ POINT 4149 -0.2121408449285417 0.8760558714704199
+ POINT 4150 -0.1872860597869504 0.8743108471559207
+ POINT 4151 0.127132465291583 0.894676836666674
+ POINT 4152 0.1148263648583613 0.8728992000627938
+ POINT 4153 0.08976262098036089 0.8729001468017185
+ POINT 4154 0.01273553652980624 0.7819829513739015
+ POINT 4155 -0.01272666408762757 0.7819829726326072
+ POINT 4156 -0.0254652656755313 0.8049095312464711
+ POINT 4157 0.02547304947038772 0.8049094999970061
+ POINT 4158 -0.01281857489079619 0.8277596012101676
+ POINT 4159 0.01282545793265184 0.8277595860434606
+ POINT 4160 -0.1523931657976944 0.7602333624487868
+ POINT 4161 -0.1652815744919054 0.7373713784156379
+ POINT 4162 -0.1899646679918444 0.7841317994966117
+ POINT 4163 -0.2031333106786121 0.761326064135317
+ POINT 4164 -0.16482286497535 0.7833074523525887
+ POINT 4165 -0.1912963660934427 0.6914051458220578
+ POINT 4166 -0.1783169403911163 0.7144352622593422
+ POINT 4167 -0.190765996745954 0.7377567753409436
+ POINT 4168 -0.2168931566549622 0.6916851503194739
+ POINT 4169 -0.2293523004593074 0.7152312459244402
+ POINT 4170 -0.2043881601032401 0.6682696369568839
+ POINT 4171 -0.216168676577823 0.7383899479790212
+ POINT 4172 -0.05127185122873784 0.574387994533472
+ POINT 4173 -0.06413669377931794 0.5511677827929192
+ POINT 4174 -0.0896373955185108 0.5977109869463709
+ POINT 4175 -0.1025677504198028 0.5745570963812513
+ POINT 4176 -0.1152905077293856 0.5978196830629643
+ POINT 4177 -0.06404307385919276 0.5976033189067563
+ POINT 4178 -0.2000409483619362 0.9908125590425896
+ POINT 4179 -0.1935435858488344 0.9638096217199499
+ POINT 4180 -0.2210117479945479 0.9717701243549068
+ POINT 4181 -0.2162422823868681 1.021050008121517
+ POINT 4182 -0.2436331203401989 0.9753027708990402
+ POINT 4183 -0.2387206109003284 0.9495636996022114
+ POINT 4184 -0.4869820590795003 1.48379350076729
+ POINT 4185 -0.5004852970169145 1.507473374564007
+ POINT 4186 -0.5264779638563066 1.507792959609327
+ POINT 4187 -0.5139758382389583 1.531177313368311
+ POINT 4188 -0.1860067469030021 0.9140782780319783
+ POINT 4189 -0.2064857193976458 0.9208315670651237
+ POINT 4190 -0.1940354129868023 0.9380138979991218
+ POINT 4191 -0.1730646133541906 0.9570563326868045
+ POINT 4192 -0.1517739465170566 0.9608780715921235
+ POINT 4193 -0.1522657736550245 0.9350823478712953
+ POINT 4194 -0.2650907777478895 0.8349918337468681
+ POINT 4195 -0.2906881285583971 0.8357966694252272
+ POINT 4196 -0.3030284965421941 0.8604589225707839
+ POINT 4197 -0.25153563478542 0.8576671438989149
+ POINT 4198 0.08414133693730629 1.211465983918199
+ POINT 4199 0.1001200204733997 1.187725778893199
+ POINT 4200 0.07198015775010806 1.186931992925268
+ POINT 4201 0.1300430247579649 1.187702209119905
+ POINT 4202 0.1178818455707667 1.163168218126974
+ POINT 4203 0.1424274778411245 1.214703775865614
+ POINT 4204 0.1216293489051048 1.236677874201061
+ POINT 4205 0.09147713039086899 1.281482985978119
+ POINT 4206 0.1055156090275934 1.259693790045374
+ POINT 4207 0.0961674597830865 1.235275685730444
+ POINT 4208 0.1349702243383418 1.139072324176839
+ POINT 4209 0.1050472200537766 1.139095893950134
+ POINT 4210 0.09153953870518951 1.115
+ POINT 4211 0.07445115993761434 1.139095893950134
+ POINT 4212 -0.5390382780727077 1.484623338611682
+ POINT 4213 0.2162420219164392 1.021050614374515
+ POINT 4214 0.190205984662228 1.013704963117441
+ POINT 4215 0.03829458016801003 1.372220894429249
+ POINT 4216 0.01282545793269108 1.372240413956539
+ POINT 4217 0.0511358448574426 1.349448072198939
+ POINT 4218 2.955806821591106e-06 1.349370793216087
+ POINT 4219 0.01282456007472188 1.326416149691422
+ POINT 4220 0.01461979926874546 1.186523354706776
+ POINT 4221 1.778220601947322e-07 1.162810416823412
+ POINT 4222 -0.01461881405744477 1.186523361117448
+ POINT 4223 0.04262013268113254 1.186741304181503
+ POINT 4224 0.05859881621722593 1.163001099156504
+ POINT 4225 0.04509113486863883 1.13890520520637
+ POINT 4226 -0.5515952091886749 1.461186229369197
+ POINT 4227 -0.4744799334621519 1.507177854526273
+ POINT 4228 -0.165472434505202 1.139072411812712
+ POINT 4229 -0.1349707551804718 1.139072411812712
+ POINT 4230 -0.1526383708458634 1.115
+ POINT 4231 -0.1954892334723354 1.135221498571085
+ POINT 4232 -0.1778216178069438 1.159293910383798
+ POINT 4233 0.1872896609410397 0.8743109859661662
+ POINT 4234 0.1749120674912094 0.8954621113898433
+ POINT 4235 0.2064876703290602 0.9208318083220004
+ POINT 4236 0.2310165357142773 0.9250801230842716
+ POINT 4237 0.222988610660609 0.9011444938271308
+ POINT 4238 0.1860091279058091 0.9140784237178776
+ POINT 4239 0.1624614501216266 0.9126443560428614
+ POINT 4240 -0.06802546924145003 0.9655181143668055
+ POINT 4241 -0.05344835162850502 0.9422160746181485
+ POINT 4242 -0.0660171891927564 0.9189740276351777
+ POINT 4243 -0.1055130669770327 0.9403062631916447
+ POINT 4244 -0.09147385663134579 0.9185170754159038
+ POINT 4245 -0.1169358964722036 0.9171148990008733
+ POINT 4246 -0.08413986159895059 0.9885339864052013
+ POINT 4247 -0.1001191963363426 1.012274172298942
+ POINT 4248 -0.1300423153454955 1.012297680029021
+ POINT 4249 -0.09616541949367544 0.964724311645071
+ POINT 4250 -0.1216274593345332 0.9633221352300405
+ POINT 4251 -0.1424262990336993 0.9852961200455497
+ POINT 4252 -0.07445152962134589 1.139095919542792
+ POINT 4253 -0.05859850816281637 1.163001131159834
+ POINT 4254 -0.04509145696265957 1.138905211617042
+ POINT 4255 -0.0915405849711611 1.115
+ POINT 4256 -0.1050476361713179 1.139095919542792
+ POINT 4257 -0.1178816998306565 1.163168331355504
+ POINT 4258 -0.1300423153454874 1.187702319970979
+ POINT 4259 -0.1001191963363336 1.187725827701058
+ POINT 4260 -0.03047248221683449 1.115
+ POINT 4261 -0.01461946075830496 1.138905211617042
+ POINT 4262 0.01461915256788527 1.13890520520637
+ POINT 4263 0.03047149628827368 1.115
+ POINT 4264 -0.5643027933443245 1.438146009911702
+ POINT 4265 -0.5508821796320744 1.413788960868108
+ POINT 4266 -0.04509145696266351 1.061094788382958
+ POINT 4267 -0.07445152962134952 1.060904080457208
+ POINT 4268 -0.09154058497116185 1.085
+ POINT 4269 -0.6037739501149142 1.462822513164642
+ POINT 4270 -0.629786190128524 1.463935865418001
+ POINT 4271 -0.5910663659592644 1.485862732622138
+ POINT 4272 -0.5777967176668022 1.462117436960846
+ POINT 4273 0.01304426221765253 0.2697558646803882
+ POINT 4274 3.40990923834647e-05 0.29370747250347
+ POINT 4275 0.01303554245765141 0.3172859857361205
+ POINT 4276 0.03889625395460797 0.3173692823070822
+ POINT 4277 0.05195898966343572 0.2939922825878997
+ POINT 4278 -0.1661852783621522 0.6446439695455455
+ POINT 4279 -0.1406296832478173 0.6443971238791328
+ POINT 4280 -0.1279696700053386 0.6211359401298535
+ POINT 4281 -0.1409000249066307 0.5979820495647339
+ POINT 4282 -0.1665761999907756 0.5981202950022566
+ POINT 4283 -0.1538970377148225 0.5748040379353674
+ POINT 4284 -0.0898281697954999 0.5512434078897614
+ POINT 4285 -0.07705022536588976 0.5279627904180226
+ POINT 4286 -0.1154812820063747 0.5513521040063547
+ POINT 4287 -0.1028911793351295 0.4814693091010634
+ POINT 4288 -0.09008828878259244 0.4581051536094182
+ POINT 4289 -0.1158190029509173 0.4581981037221236
+ POINT 4290 -0.06433257279121862 0.4580137431145809
+ POINT 4291 -0.05143487118274115 0.4813214262726057
+ POINT 4292 -0.06425960725825622 0.5046317621547693
+ POINT 4293 -0.08995108327443818 0.5047073872516115
+ POINT 4294 -0.1156817974427631 0.5048003373643168
+ POINT 4295 -0.2447139148397334 0.458750976126894
+ POINT 4296 -0.2575214108160175 0.4820991264240077
+ POINT 4297 -0.2956862105641999 0.552212962174133
+ POINT 4298 -0.3083524534032872 0.5756052502306676
+ POINT 4299 -0.2951308726559443 0.5989453003844278
+ POINT 4300 -0.2693856405038162 0.5987871296286003
+ POINT 4301 -0.1674796753104897 0.4118349492919497
+ POINT 4302 -0.1287731218950435 0.4349510166885733
+ POINT 4303 -0.2191373675605783 0.3655112387958946
+ POINT 4304 -0.2320657174537384 0.3422727128926682
+ POINT 4305 -0.1933388420160294 0.3653995880227231
+ POINT 4306 -0.1676004834219778 0.365247690890096
+ POINT 4307 -0.1805101062087346 0.3420454654755879
+ POINT 4308 -0.1933709045446406 0.3189507959679287
+ POINT 4309 -0.09033298490795699 0.3647315453475037
+ POINT 4310 -0.07749719549601941 0.3412375096276676
+ POINT 4311 -0.1162853700092983 0.3182658843563927
+ POINT 4312 -0.1290351141702557 0.3416685291183941
+ POINT 4313 -0.09055555836575238 0.3178605640498327
+ POINT 4314 -0.1546660015552952 0.3884572641833807
+ POINT 4315 -0.1418372657480004 0.3651031416362454
+ POINT 4316 -0.1161006323035732 0.3648781024116788
+ POINT 4317 -0.1031351364857017 0.388166157865355
+ POINT 4318 -0.115959448139849 0.4115733315800042
+ POINT 4319 -0.1417164576365123 0.4116904000380991
+ POINT 4320 -0.2174584592230242 0.2276872721043722
+ POINT 4321 -0.1929932616013742 0.2274066449260338
+ POINT 4322 -0.2314832284426782 0.2493900509459132
+ POINT 4323 0.2009739409754892 0.8534708485841045
+ POINT 4324 0.2140164106698446 0.8313932627328198
+ POINT 4325 0.2393840269729823 0.8325404383886564
+ POINT 4326 0.2121440253098414 0.8760560416827979
+ POINT 4327 0.2515387733835079 0.8576671866389161
+ POINT 4328 0.2650944950121993 0.8349917207268363
+ POINT 4329 0.2366728906950585 0.8803043564450691
+ POINT 4330 0.3565432527087642 0.7639094381984384
+ POINT 4331 0.3431000535493891 0.7876586738985207
+ POINT 4332 0.3687888847024132 0.7877462070609996
+ POINT 4333 0.3699173557102733 0.7403104013129069
+ POINT 4334 0.3957094643753722 0.7403463558414465
+ POINT 4335 0.408022630829248 0.7640195457300547
+ POINT 4336 0.316472736227276 0.8361366554971499
+ POINT 4337 0.3297395574143579 0.8114849081565607
+ POINT 4338 0.2785365889436757 0.810669673014308
+ POINT 4339 0.2918675137583783 0.78731743588378
+ POINT 4340 0.2906913353542013 0.8357964212645677
+ POINT 4341 0.317493925420709 0.7876481392939995
+ POINT 4342 0.1025878977982452 0.5745567182395622
+ POINT 4343 0.0896562702361603 0.597710682557972
+ POINT 4344 0.06406238642942785 0.5976031006314915
+ POINT 4345 0.05129310564701566 0.5743878116949022
+ POINT 4346 0.08985063675821177 0.5512430564822264
+ POINT 4347 0.06415988671113435 0.551167539720733
+ POINT 4348 0.2687797639480877 0.6455641493598674
+ POINT 4349 0.2431231643384719 0.6453089840844264
+ POINT 4350 0.2305631512237915 0.6218764708167354
+ POINT 4351 0.2819948024675198 0.6222271025409538
+ POINT 4352 0.2436343471926314 0.5986520683559111
+ POINT 4353 0.2693979293372746 0.5987859574219867
+ POINT 4354 0.295142148103026 0.5989439689951812
+ POINT 4355 0.1021563562750863 0.6673194654312754
+ POINT 4356 0.1150353511837529 0.644234410272156
+ POINT 4357 0.1406441924174837 0.6443966786405773
+ POINT 4358 0.1532486505071942 0.6677423354608277
+ POINT 4359 0.1402684036868563 0.6907725550913939
+ POINT 4360 0.03826447023240792 0.6900671692800102
+ POINT 4361 0.06380091190101131 0.6901573317089966
+ POINT 4362 0.05108260086974906 0.6670531886809341
+ POINT 4363 0.01277759440998332 0.6438229681570777
+ POINT 4364 7.428719667277456e-06 0.6669630607120047
+ POINT 4365 0.01277613859153328 0.6900170078678736
+ POINT 4366 0.03836771197168318 0.6438605515953342
+ POINT 4367 0.1144944044351963 0.7366311597487549
+ POINT 4368 0.08912745822925902 0.736381119897366
+ POINT 4369 0.07645346211403239 0.7133299865296496
+ POINT 4370 0.1273836401631435 0.7137690955906919
+ POINT 4371 0.08927159275137353 0.6903160059305735
+ POINT 4372 0.1148089064881074 0.6904921202519284
+ POINT 4373 0.4518212529878313 0.5057738682137124
+ POINT 4374 0.465184904273339 0.4825054086020403
+ POINT 4375 0.4524520218356196 0.4592423271420978
+ POINT 4376 0.4263534616064 0.4591633065495527
+ POINT 4377 0.4003366945970671 0.4591340908868591
+ POINT 4378 0.4131084105275121 0.4824614665930662
+ POINT 4379 0.3875369179766944 0.4357935617101453
+ POINT 4380 0.3742918668978065 0.4590917217536589
+ POINT 4381 0.3483308718438542 0.4590456001480014
+ POINT 4382 0.3355211772211757 0.4357001583883022
+ POINT 4383 0.3485968010389959 0.4124156995742677
+ POINT 4384 0.3226258879827377 0.4123646653856249
+ POINT 4385 0.3746559557584901 0.4124377491791048
+ POINT 4386 0.1288047307752152 0.4349503006173213
+ POINT 4387 0.1416043882728272 0.4583144324095849
+ POINT 4388 0.1673509917944845 0.4584245316530031
+ POINT 4389 -0.6719169798004558 0.5747850694603622
+ POINT 4390 -0.6583093042315734 0.5975251794804863
+ POINT 4391 -0.6325001197399406 0.5977238510382468
+ POINT 4392 -0.6446528000590979 0.6207365146856324
+ POINT 4393 -0.6200909513322497 0.5746453944751544
+ POINT 4394 -0.6338317820182542 0.5512327601198538
+ POINT 4395 -0.6603567058333674 0.5511308304480003
+ POINT 4396 -0.6555755911690335 0.7353083420050284
+ POINT 4397 -0.6682285385534918 0.7576156912280005
+ POINT 4398 -0.6297861901285342 0.736064134581999
+ POINT 4399 -0.6428329994478872 0.712676398597095
+ POINT 4400 -0.6555383848190159 0.7809139921559407
+ POINT 4401 -0.6165165418360717 0.7598094302432904
+ POINT 4402 -0.669298336043044 0.6662384376081127
+ POINT 4403 -0.6561278625706282 0.6893066934048251
+ POINT 4404 -0.6303384615301288 0.6900624859817959
+ POINT 4405 -0.617773167953269 0.6671635500957667
+ POINT 4406 -0.6312384701101674 0.6438139835164594
+ POINT 4407 -0.6570476546018003 0.6436153119586989
+ POINT 4408 -0.4014002529598285 0.2700383257094666
+ POINT 4409 -0.3741727067253965 0.27334996209372
+ POINT 4410 -0.4275530250930976 0.2701895525912099
+ POINT 4411 -0.413970496297118 0.2956915594399436
+ POINT 4412 -0.552528819294769 0.6916727225840136
+ POINT 4413 -0.5659407581660193 0.6680687104941881
+ POINT 4414 -0.5274386814670023 0.6452812179027105
+ POINT 4415 -0.5139758382389809 0.6688226866316892
+ POINT 4416 -0.5534434250144683 0.6450071793179959
+ POINT 4417 -0.4995906038781986 0.2631845287792958
+ POINT 4418 -0.5220330620667432 0.2470747499873041
+ POINT 4419 -0.5242986119479727 1.412696979449798
+ POINT 4420 -0.5370795067138499 1.389271137997853
+ POINT 4421 -0.6080386773303289 1.275544683831694
+ POINT 4422 -0.5803129760647188 1.271330718756498
+ POINT 4423 -0.5059831445529943 0.3667913757701168
+ POINT 4424 -0.4932352953951364 0.3430271137837991
+ POINT 4425 -0.5321887713342541 0.367135581144821
+ POINT 4426 -0.5079589379908298 0.3173917569587619
+ POINT 4427 -0.5312276621219146 0.3243458369844735
+ POINT 4428 -0.4406028783066331 0.3422514462976649
+ POINT 4429 -0.4271464550941486 0.3657901332798047
+ POINT 4430 -0.4271308084842878 0.319112750029224
+ POINT 4431 -0.4009744569668887 0.3657546210088968
+ POINT 4432 -0.3879639820757995 0.3424203484000803
+ POINT 4433 -0.4009780363510187 0.3189615231474807
+ POINT 4434 -0.3748036698886297 0.3189991578107999
+ POINT 4435 -0.3225982309766809 0.272599847163193
+ POINT 4436 -0.3095903312204757 0.295941536288314
+ POINT 4437 -0.3480261314005026 0.2736299906459282
+ POINT 4438 -0.322621863941403 0.3192835665232336
+ POINT 4439 -0.3486570945637358 0.3192791863630081
+ POINT 4440 -0.361671148838955 0.2958203611104086
+ POINT 4441 -0.5793507264573807 0.3149531155611394
+ POINT 4442 -0.559089735434708 0.3233618662174895
+ POINT 4443 -0.6019536060826904 0.3014689385352345
+ POINT 4444 -0.5975734499532259 0.3286898812930204
+ POINT 4445 -0.5853084854744814 0.3675211971453344
+ POINT 4446 -0.5600508446470474 0.3661516103778371
+ POINT 4447 -0.5472652560279884 0.3429500779420456
+ POINT 4448 -0.6394984234703687 0.3534407939354787
+ POINT 4449 -0.6195300370470144 0.336799596475975
+ POINT 4450 -0.6402042756369811 0.3317952841487316
+ POINT 4451 -0.59708391643457 0.3500758223580163
+ POINT 4452 -0.6072650725682698 0.375630912328289
+ POINT 4453 -0.6318000263107644 0.3749586749133215
+ POINT 4454 -0.4733690892661433 0.7401567141329393
+ POINT 4455 -0.4473935041195238 0.7402727737294279
+ POINT 4456 -0.4350796364138371 0.7165996612053375
+ POINT 4457 -0.4485338246334357 0.6929936855389067
+ POINT 4458 -0.4744799334621762 0.6928221454737271
+ POINT 4459 -0.9531159528267128 1.311625568815883
+ POINT 4460 -0.9368955826010352 1.297829357565677
+ POINT 4461 -0.9286725348528561 1.344003890770111
+ POINT 4462 -0.9107254853761675 1.364731458138119
+ POINT 4463 -0.9089711690971842 1.341630731699689
+ POINT 4464 -0.8996982271191303 1.319232860789777
+ POINT 4465 -0.8817511776424417 1.339960428157786
+ POINT 4466 -0.9478247054166324 1.334507897143855
+ POINT 4467 -0.9742911853903737 1.325292445658128
+ POINT 4468 -0.7237276966616599 1.268912599029168
+ POINT 4469 -0.735096618916379 1.290728778686811
+ POINT 4470 -0.7601341054330575 1.291915097332702
+ POINT 4471 -0.7611202463885209 1.248706809229958
+ POINT 4472 -0.7359613233917619 1.248608134238107
+ POINT 4473 -0.8584342931566544 1.338947423065795
+ POINT 4474 -0.8677072351347084 1.361345293975707
+ POINT 4475 -0.8555539629729778 1.382412599396318
+ POINT 4476 -0.878870847458765 1.383425604488309
+ POINT 4477 -0.8317231101266079 1.381839536891275
+ POINT 4478 -0.6425539998817836 0.8047422621923712
+ POINT 4479 -0.6300738448254927 0.8284095176494604
+ POINT 4480 -0.6035321568988394 0.7836377002797208
+ POINT 4481 -0.5901115431865883 0.8079947493233146
+ POINT 4482 -0.6295443969124481 0.7825243480263627
+ POINT 4483 -0.6035193268966323 0.8309522193567862
+ POINT 4484 -0.5849475634276504 0.9748856125533498
+ POINT 4485 -0.6154150350169016 0.9729522812473277
+ POINT 4486 -0.558186928182785 0.9776198719068557
+ POINT 4487 -0.5685413210432758 0.9536791215466469
+ POINT 4488 -0.5803129760647213 0.9286692812435018
+ POINT 4489 -0.6080386773303318 0.9244553161683055
+ POINT 4490 -0.6575318130826098 0.8715159030934375
+ POINT 4491 -0.6833017796810371 0.8694935411947007
+ POINT 4492 -0.6454117171638463 0.8958179264472554
+ POINT 4493 -0.7705832842645446 0.8424773709560858
+ POINT 4494 -0.7588433027099163 0.8648041986557576
+ POINT 4495 -0.7326352446522477 0.8219748600418487
+ POINT 4496 -0.7203950816929057 0.8449740012683471
+ POINT 4497 -0.7577427685376387 0.8209111151428305
+ POINT 4498 -0.7872799108161213 0.9938994168287463
+ POINT 4499 -0.7999005431811769 0.9720602650495699
+ POINT 4500 -0.6911716053401084 1.116415034832809
+ POINT 4501 -0.6588395249798016 1.123547755018559
+ POINT 4502 -0.6336098290848978 1.1
+ POINT 4503 -0.6588395249798019 1.076452244981441
+ POINT 4504 -0.6911716053401085 1.083584965167191
+ POINT 4505 0.09108161431197412 1.92892895769766
+ POINT 4506 0.0784374556037911 1.952848893635003
+ POINT 4507 0.1297199434610248 1.95141448969183
+ POINT 4508 0.117550300698534 1.974880646392863
+ POINT 4509 0.1168063232074685 1.928523753279741
+ POINT 4510 0.09221374474079189 1.976259132004631
+ POINT 4511 0.5958510861706544 1.763814100821515
+ POINT 4512 0.5827009512386344 1.785149261263328
+ POINT 4513 0.5566695784063173 1.740461956613127
+ POINT 4514 0.543949526861649 1.763556024375426
+ POINT 4515 0.5574443371137314 1.786518508184859
+ POINT 4516 0.4406069832080601 1.857751249674671
+ POINT 4517 0.4271521264871886 1.83421244145932
+ POINT 4518 0.4009821499454121 1.834247708077846
+ POINT 4519 0.4683190704110495 1.906656832693797
+ POINT 4520 0.4512547779949978 1.924291404331337
+ POINT 4521 0.4535974408368768 1.881021323430753
+ POINT 4522 0.4275547023791019 1.929812902770704
+ POINT 4523 0.4139749628549972 1.904310855190037
+ POINT 4524 0.4271349362800323 1.880889795693039
+ POINT 4525 0.4009845052261806 1.881040781433955
+ POINT 4526 0.2445996538831497 1.92769194682199
+ POINT 4527 0.2188234909443422 1.927117901601367
+ POINT 4528 0.2577927451793436 1.904208772285857
+ POINT 4529 0.2062213034419837 1.904247857918665
+ POINT 4530 0.219094603253608 1.881001376849752
+ POINT 4531 0.2449079136756235 1.880926132341018
+ POINT 4532 0.6338304357386392 1.648771992048117
+ POINT 4533 0.6200902103135688 1.625359085815626
+ POINT 4534 0.6719149239748932 1.625220140771561
+ POINT 4535 0.6583077784871508 1.602479713749685
+ POINT 4536 0.6603545921168954 1.648874277667933
+ POINT 4537 0.6324991754249607 1.602280683264959
+ POINT 4538 -0.1021424187731994 1.532680249219833
+ POINT 4539 -0.08925865744348269 1.509683779547383
+ POINT 4540 -0.05106797999757626 1.532946672197124
+ POINT 4541 -0.06378769820553418 1.509842507789443
+ POINT 4542 -0.06388808387139217 1.556049101008727
+ POINT 4543 -0.08948240553071224 1.555941432969113
+ POINT 4544 0.03856216716368209 1.695423338986398
+ POINT 4545 0.06428710838449511 1.695368532929677
+ POINT 4546 0.02569863802649714 1.672140674241563
+ POINT 4547 0.07707501535284003 1.672037528121303
+ POINT 4548 0.0641598867112553 1.648832460279267
+ POINT 4549 0.03851748424163773 1.648892772908627
+ POINT 4550 0.5659417099410018 1.531934634130547
+ POINT 4551 0.5534446618254385 1.554996142017336
+ POINT 4552 0.5274406722697258 1.554721816668396
+ POINT 4553 0.5139780760685138 1.531180088418957
+ POINT 4554 0.5014486783385332 1.554401962995214
+ POINT 4555 0.5525300383735968 1.508330304567078
+ POINT 4556 0.5264797148574329 1.507795710730139
+ POINT 4557 0.4763619525905139 1.600997373411705
+ POINT 4558 0.4503721579247976 1.600898908604774
+ POINT 4559 0.4889282285334356 1.57775355516794
+ POINT 4560 0.437015063143961 1.577479718777408
+ POINT 4561 0.4754656323322236 1.554211826918501
+ POINT 4562 0.4495202504162626 1.554040057054722
+ POINT 4563 -0.5543889466319457 1.601634723984254
+ POINT 4564 -0.5158174195689951 1.624604519062324
+ POINT 4565 -0.7067681160242998 1.421520642274137
+ POINT 4566 -0.6812381415228208 1.420166394605991
+ POINT 4567 -0.7192811546032211 1.444411478249253
+ POINT 4568 -0.7068139299190671 1.466501582176445
+ POINT 4569 -0.6812753478728371 1.465772044756903
+ POINT 4570 -0.6941609825346077 1.488808931399417
+ POINT 4571 -0.6682285385534841 1.442384308771999
+ POINT 4572 -0.6555755911690246 1.464691657994971
+ POINT 4573 -0.642832999447877 1.487323601402905
+ POINT 4574 -0.6561278625706181 1.510693306595174
+ POINT 4575 -0.6303384615301174 1.509937514018204
+ POINT 4576 -0.6044783048305146 1.509466744711963
+ POINT 4577 -0.795281688119055 1.491538940299859
+ POINT 4578 -0.8084128269643931 1.514215043322471
+ POINT 4579 -0.7833818628348603 1.513583113242064
+ POINT 4580 -0.8319479745616404 1.470132194379473
+ POINT 4581 -0.8451124004482057 1.492692587454326
+ POINT 4582 -0.8074498036676983 1.469549608759799
+ POINT 4583 -0.6583093042315623 1.602474820519514
+ POINT 4584 -0.6840696601196044 1.602202266892252
+ POINT 4585 -0.6719169798004458 1.625214930539638
+ POINT 4586 -0.6603567058333568 1.648869169552
+ POINT 4587 -0.6861170617213987 1.648596615924738
+ POINT 4588 -0.6200909513322348 1.625354605524846
+ POINT 4589 -0.6325001197399274 1.602276148961753
+ POINT 4590 -0.6960089700998117 1.579573129898368
+ POINT 4591 -0.7096166456686952 1.602313239918492
+ POINT 4592 -0.7580588457643613 1.513026354362661
+ POINT 4593 -0.7711899846096995 1.535702457385272
+ POINT 4594 -0.759070512126698 1.557665525395329
+ POINT 4595 -0.7337114615940515 1.557414900715238
+ POINT 4596 -0.746915006181549 1.579934727604698
+ POINT 4597 -0.7327832660600191 1.512342083662414
+ POINT 4598 -0.8352411111831201 1.559550508253757
+ POINT 4599 -0.8218668659347803 1.536954007871214
+ POINT 4600 -0.833766691218975 1.514909834929008
+ POINT 4601 -0.8585664394185928 1.515431552003069
+ POINT 4602 -0.8727833030454442 1.538468821049046
+ POINT 4603 -0.8612539144163784 1.560626227145343
+ POINT 4604 -0.8492742954101363 1.582527935921348
+ POINT 4605 -0.8870932491813824 1.561590259057552
+ POINT 4606 -0.6232276942026356 1.255447834044357
+ POINT 4607 -0.6345365027105451 1.280832686268899
+ POINT 4608 -0.6454117171638424 1.304182073552744
+ POINT 4609 -0.6575318130826051 1.328484096906562
+ POINT 4610 -0.7452825106742074 1.766748812734714
+ POINT 4611 -0.7195696082196956 1.753704191519128
+ POINT 4612 -0.7346825660925151 1.736811138285226
+ POINT 4613 0.9194221353961591 1.079037370714819
+ POINT 4614 0.9062889917681682 1.057841392249375
+ POINT 4615 0.9193229141810166 1.036670408816424
+ POINT 4616 0.945291373506973 1.079037370714819
+ POINT 4617 0.9783777007535525 1.075588330548285
+ POINT 4618 0.9657211024305934 1.054625701263104
+ POINT 4619 0.9431232588334173 1.038161904096913
+ POINT 4620 -0.8366770569123627 1.604042711969681
+ POINT 4621 -0.862958098859082 1.605275488831112
+ POINT 4622 -0.8242074035366069 1.625543931595799
+ POINT 4623 -0.8367105808207926 1.647645326778684
+ POINT 4624 -0.7601841483210506 1.602111600619816
+ POINT 4625 -0.7732082126766361 1.62424625261842
+ POINT 4626 -0.7607649883473501 1.64512814487294
+ POINT 4627 -0.7348250977884042 1.601860975939725
+ POINT 4628 -0.7228857878081969 1.624490112933609
+ POINT 4629 -0.7561708970830496 1.726590799937584
+ POINT 4630 -0.772733266648999 1.706145322275593
+ POINT 4631 -0.7770353879932985 1.729456913383358
+ POINT 4632 -0.762786770696976 1.684857791593875
+ POINT 4633 -0.7306494736366229 1.713717480744354
+ POINT 4634 -0.4651802445159215 1.717491582075434
+ POINT 4635 -0.478507977764854 1.740739794109519
+ POINT 4636 -0.4778770142235909 1.694208306226483
+ POINT 4637 -0.5039314389699461 1.694293311610888
+ POINT 4638 -0.517332164752674 1.717513192692987
+ POINT 4639 -0.4268643705599177 1.787482016676044
+ POINT 4640 -0.4139825635227957 1.810837959448061
+ POINT 4641 -0.4006923724326489 1.787517528946952
+ POINT 4642 -0.1296597519163326 1.951414213872039
+ POINT 4643 -0.1174821802523645 1.97488115956188
+ POINT 4644 -0.09213197251187855 1.976259206413221
+ POINT 4645 -0.07836147075987729 1.95284863765098
+ POINT 4646 -0.09101647244887709 1.928928637153505
+ POINT 4647 -0.1167462840924468 1.928523316846944
+ POINT 4648 -0.2191373675604276 1.834488761204105
+ POINT 4649 -0.2320657174535903 1.857727287107332
+ POINT 4650 -0.2190636470476338 1.881000254671402
+ POINT 4651 -0.1933709045444542 1.881049204032071
+ POINT 4652 0.8473101853292 0.8833569326666098
+ POINT 4653 0.8332660620148927 0.8619719256229025
+ POINT 4654 0.9368941516810172 0.9021650458865321
+ POINT 4655 0.9141652759959854 0.9027396220037804
+ POINT 4656 0.8996966225585906 0.8807616681630838
+ POINT 4657 0.9531144137950445 0.8883682271819964
+ POINT 4658 0.9089691665526476 0.8583632528479395
+ POINT 4659 0.9286707540117458 0.8559895804250865
+ POINT 4660 0.9478228919945273 0.8654854485638506
+ POINT 4661 0.9742895940953513 0.8747006727983513
+ POINT 4662 0.7892193098756046 1.120602260580728
+ POINT 4663 0.7661340859320265 1.120602260580728
+ POINT 4664 0.7453364746168545 1.137017480313257
+ POINT 4665 0.7612858534569127 1.162324386138428
+ POINT 4666 0.7880563618837673 1.162952928107344
+ POINT 4667 0.801617881288919 1.141747279849832
+ POINT 4668 0.8141243288978738 1.163495686795721
+ POINT 4669 0.922234117671098 1.206428018361502
+ POINT 4670 0.8923991972469726 1.206789483755085
+ POINT 4671 0.9086222617400506 1.228483578319797
+ POINT 4672 0.9426645085467074 1.251441437761554
+ POINT 4673 0.9199356328616766 1.250866861644306
+ POINT 4674 0.9460344623234986 1.204936523081014
+ POINT 4675 0.9635693962292079 1.239075510846894
+ POINT 4676 0.9665514017727828 1.215733311752648
+ POINT 4677 0.9919382970906426 1.226721800669483
+ POINT 4678 0.8394680410751375 1.206818085755815
+ POINT 4679 0.8659597495193946 1.207050279757731
+ POINT 4680 0.8404090030129447 1.163772777170145
+ POINT 4681 0.8665376830375935 1.163823736366485
+ POINT 4682 0.826847483607793 1.184978425427658
+ POINT 4683 0.879571605450442 1.184994719799436
+ POINT 4684 0.9320787337191182 1.1
+ POINT 4685 0.945291373506973 1.120962629285181
+ POINT 4686 0.9783777007535525 1.124411669451716
+ POINT 4687 0.9997018129615381 1.124418950866357
+ POINT 4688 0.978973985914966 1.100000000000001
+ POINT 4689 0.9997018129615383 1.075581049133644
+ POINT 4690 -0.5685413210432749 1.246320878453353
+ POINT 4691 -0.5849475634276495 1.22511438744665
+ POINT 4692 -0.558186928182785 1.222380128093144
+ POINT 4693 -0.6154150350169001 1.227047718752672
+ POINT 4694 -0.6693576442741918 1.351555944662609
+ POINT 4695 -0.167600483421794 1.834752309109904
+ POINT 4696 -0.1933388420158644 1.834600411977277
+ POINT 4697 -0.1805101062085495 1.857954534524412
+ POINT 4698 -0.1418372657478033 1.834896858363754
+ POINT 4699 -0.1546660015551181 1.811542735816619
+ POINT 4700 -0.4620370625708226 1.530686188257811
+ POINT 4701 -0.4754621340447246 1.554209309909366
+ POINT 4702 -0.5274386814669798 1.554718782097289
+ POINT 4703 -0.5409136014030779 1.578214704365663
+ POINT 4704 -0.488924977272746 1.577750778638344
+ POINT 4705 -0.5023420743401272 1.601184499443732
+ POINT 4706 -0.5014460146275876 1.554399197051969
+ POINT 4707 -0.5283842030844769 1.601360685399539
+ POINT 4708 -0.307026646190256 1.530762509330517
+ POINT 4709 -0.3202413436397382 1.554099392425069
+ POINT 4710 -0.3460477174125448 1.554003783963598
+ POINT 4711 -0.4167337352741746 1.320779043075299
+ POINT 4712 -0.4049200019545112 1.341860467507728
+ POINT 4713 -0.4184152811999643 1.365132023322271
+ POINT 4714 -0.444185206290924 1.364827835281527
+ POINT 4715 -0.4558748191886974 1.339700763098688
+ POINT 4716 -0.4281529378097601 1.298008616208184
+ POINT 4717 -0.4414734365743483 1.31726154325396
+ POINT 4718 -0.3052226147487572 1.436508090722557
+ POINT 4719 -0.2918626311656733 1.41268203964944
+ POINT 4720 -0.387527432476217 1.764204188946687
+ POINT 4721 -0.3742815949163111 1.74090615310422
+ POINT 4722 -0.3483188669143581 1.74095249416879
+ POINT 4723 -0.3355076159900984 1.764298017511953
+ POINT 4724 -0.3485840989990452 1.787582382739701
+ POINT 4725 -0.3746456254390951 1.787560131718704
+ POINT 4726 -0.2662652803551629 1.413486875327799
+ POINT 4727 -0.2785322732786589 1.389329988782876
+ POINT 4728 -0.2393797795056821 1.367459514309189
+ POINT 4729 -0.2275668138025304 1.391282058482626
+ POINT 4730 -0.2650907777478673 1.365008166253133
+ POINT 4731 -0.2906881285583777 1.364203330574774
+ POINT 4732 -0.254065814376309 1.437439844710485
+ POINT 4733 -0.2417196143919218 1.461199465281187
+ POINT 4734 -0.2031333106785691 1.438673935864684
+ POINT 4735 -0.2161686765777762 1.46161005202098
+ POINT 4736 -0.2153673478236765 1.415235027865312
+ POINT 4737 -0.2407354564892946 1.414087793843921
+ POINT 4738 -0.3030284965421808 1.339541077429216
+ POINT 4739 -0.3410980309594216 1.316846283745817
+ POINT 4740 -0.317747173479222 1.308048220073937
+ POINT 4741 -0.3294838392633017 1.287156274473917
+ POINT 4742 -0.9141667945980355 0.9027448191933986
+ POINT 4743 -0.9241441586251957 0.925818625959403
+ POINT 4744 -0.8869468031432911 0.9044151227353022
+ POINT 4745 -0.9199367161369589 0.9491372269225671
+ POINT 4746 -0.8901017854543702 0.9487754140024209
+ POINT 4747 -0.8756368871527789 0.9269058156683426
+ POINT 4748 -0.9460351123335398 1.204933370559084
+ POINT 4749 -0.9222349220048066 1.206425019671516
+ POINT 4750 -0.9298119726866234 1.183240041357257
+ POINT 4751 -0.9086231309691339 1.22848016179349
+ POINT 4752 -0.9426655041399603 1.251436949836508
+ POINT 4753 -0.9635702350740014 1.239070998721239
+ POINT 4754 -0.9665520317485365 1.215729598793985
+ POINT 4755 -0.9919388674548592 1.226717335958311
+ POINT 4756 -0.945291881008572 1.120961981561394
+ POINT 4757 -0.9657213673270056 1.145372730908657
+ POINT 4758 -0.9431236890207383 1.161836177683806
+ POINT 4759 -0.9194226293405537 1.120961981561394
+ POINT 4760 -0.9193234986920051 1.163327826796239
+ POINT 4761 -0.9062895168718617 1.142157443148629
+ POINT 4762 -0.9141667945980333 1.297255180806602
+ POINT 4763 -0.9241441586251957 1.274181374040597
+ POINT 4764 -0.8869468031432908 1.295584877264698
+ POINT 4765 -0.9199367161369583 1.250862773077433
+ POINT 4766 -0.8901017854543694 1.251224585997579
+ POINT 4767 -0.8611683196738746 1.295071864314833
+ POINT 4768 -0.8756368871527777 1.273094184331657
+ POINT 4769 -0.8891962941400582 1.404556871241418
+ POINT 4770 -0.9015066520229322 1.426552004648129
+ POINT 4771 -0.9210509320574607 1.385862724891228
+ POINT 4772 -0.9329118140462531 1.401977062775719
+ POINT 4773 -0.9013495663017889 1.383489565820807
+ POINT 4774 -0.9247285940143692 1.425922478199889
+ POINT 4775 -0.9462684141426484 1.423382263576649
+ POINT 4776 0.6049131206502878 0.877309598708135
+ POINT 4777 0.6314673624216832 0.8747665821094937
+ POINT 4778 0.5629983999046556 0.8582907420677555
+ POINT 4779 0.5916219385403771 0.903283490464682
+ POINT 4780 0.5771876705474173 0.881524011254543
+ POINT 4781 0.6606003141937837 0.9159130979158032
+ POINT 4782 0.6454114090119518 0.8958161972827761
+ POINT 4783 0.6682277400060438 0.7576119037586664
+ POINT 4784 0.8072781051364538 0.8190358970858427
+ POINT 4785 0.8199454907865293 0.8405432464071745
+ POINT 4786 0.8088230227456499 0.8628527041612832
+ POINT 4787 0.7359606990234997 0.9513898423850494
+ POINT 4788 0.6312378772287175 0.6438097083703518
+ POINT 4789 0.6053782659292077 0.6442808068457315
+ POINT 4790 0.6692971127937785 0.6662337764187773
+ POINT 4791 0.5543901981760559 0.5983617114091063
+ POINT 4792 0.5804722527022488 0.5981408964082748
+ POINT 4793 0.5928812178136424 0.6212192989589418
+ POINT 4794 0.5409152640954354 0.6217819834064079
+ POINT 4795 0.5794163017667164 0.6445691659442577
+ POINT 4796 0.5534446618254187 0.6450038579826641
+ POINT 4797 0.6827110206033868 0.6431559774241149
+ POINT 4798 0.6960068885396047 0.6204215137572427
+ POINT 4799 0.6583077784871396 0.5975202862503148
+ POINT 4800 0.644651785038326 0.6207319093756892
+ POINT 4801 0.6570464802909097 0.6436106778856253
+ POINT 4802 0.6840675335882616 0.5977924518690869
+ POINT 4803 0.4869845609900976 0.7162042862129669
+ POINT 4804 0.5004877209262182 0.6925241429430447
+ POINT 4805 0.3467661162517571 0.5991403423080666
+ POINT 4806 0.3600578736282241 0.5757539547897421
+ POINT 4807 0.3083638810430472 0.5756037644505447
+ POINT 4808 0.3215176426403183 0.5523124721039487
+ POINT 4809 0.3209607541732924 0.5990449095695118
+ POINT 4810 0.3474061196893472 0.5523792401595866
+ POINT 4811 0.3732815062042575 0.5524284899244531
+ POINT 4812 0.3992263281404896 0.5524531492406183
+ POINT 4813 0.4251592647301369 0.5524343479041531
+ POINT 4814 0.3865745742016128 0.5290784346104629
+ POINT 4815 0.4385183622883312 0.5290800740491464
+ POINT 4816 0.399805519828012 0.5057676724285003
+ POINT 4817 0.4258222868373449 0.5057968880911938
+ POINT 4818 -0.1290351141700345 1.858331470881606
+ POINT 4819 -0.1676325459503838 1.881201101164698
+ POINT 4820 -0.1420220034534946 1.881509076419041
+ POINT 4821 0.2387210626959517 0.9495639690222952
+ POINT 4822 0.2436328066240511 0.9753031642914362
+ POINT 4823 0.2837498667572325 0.9372550875724873
+ POINT 4824 0.2552220030275005 0.9298766545274257
+ POINT 4825 -0.2062277447736721 1.811286535789597
+ POINT 4826 -0.1932591046156361 1.788048832340073
+ POINT 4827 -0.1674796753103309 1.78816505070805
+ POINT 4828 -0.427146455094102 1.834209866720196
+ POINT 4829 -0.4009744569668332 1.834245378991104
+ POINT 4830 0.6080387123820301 1.275545557611543
+ POINT 4831 0.6232276175638614 1.255448656978516
+ POINT 4832 -0.3879639820757397 1.857579651599921
+ POINT 4833 -0.400978036350968 1.88103847685252
+ POINT 4834 0.5982586890243901 1.073665759431299
+ POINT 4835 0.6252296287414438 1.076452162201159
+ POINT 4836 0.6336096932110187 1.1
+ POINT 4837 0.6631517044447444 1.195128794524116
+ POINT 4838 0.6570445178274451 1.216606768104808
+ POINT 4839 0.6036328969281715 1.202002150492093
+ POINT 4840 0.6135825903018777 1.17807301351568
+ POINT 4841 0.5846722707577997 1.176786407737033
+ POINT 4842 0.6154150694939333 1.227048150028342
+ POINT 4843 0.6419126509369857 1.232336613865498
+ POINT 4844 0.6588393219524626 1.123547837798841
+ POINT 4845 0.6827911462208924 1.139963057531371
+ POINT 4846 0.6713312817526597 1.166708578865296
+ POINT 4847 0.6252296287414441 1.123547837798841
+ POINT 4848 0.5982586890243901 1.126334240568701
+ POINT 4849 0.621762167609793 1.149652797856859
+ POINT 4850 0.6422796801749728 1.175515891256503
+ POINT 4851 0.164020661564597 1.371176139406209
+ POINT 4852 0.151435882723664 1.34890071831273
+ POINT 4853 0.1637419831568809 1.32712308170885
+ POINT 4854 0.1872896609410615 1.325689014033833
+ POINT 4855 0.1891620463010729 1.370351792983811
+ POINT 4856 0.2009739409755135 1.346529151415894
+ POINT 4857 0.2031409164146868 1.438674234575052
+ POINT 4858 0.2161769782660009 1.461610474189689
+ POINT 4859 0.469786563656322 1.362945929546009
+ POINT 4860 0.4959864856846096 1.362999675038624
+ POINT 4861 0.4558759182403852 1.339701318299977
+ POINT 4862 0.5084968728533463 1.338393630399014
+ POINT 4863 0.4670742072246604 1.315378991289354
+ POINT 4864 0.4900049278172905 1.30593091864897
+ POINT 4865 0.4761914074198786 1.284918548110724
+ POINT 4866 0.5561568634456745 0.5054866075849964
+ POINT 4867 0.5696414975319276 0.4821737373244354
+ POINT 4868 0.5566695784062961 0.4595380433868737
+ POINT 4869 0.5173342898657549 0.4824832229739147
+ POINT 4870 0.5300239409715238 0.5056664106781807
+ POINT 4871 0.5307038971770073 0.4593522432372088
+ POINT 4872 0.6401982971402013 0.3317903018453968
+ POINT 4873 -0.4271308084842474 1.880887249970777
+ POINT 4874 -0.4406028783065929 1.857748553702336
+ POINT 4875 0.1290789398474502 0.3416677408508039
+ POINT 4876 0.2707918770336867 0.3190640847943916
+ POINT 4877 0.2838216037510491 0.342405923116968
+ POINT 4878 0.2967064352547767 0.3191232831721288
+ POINT 4879 0.2966672279588796 0.4123156833632912
+ POINT 4880 0.2707735506272029 0.4122400074971047
+ POINT 4881 0.257917926599839 0.3889030404976021
+ POINT 4882 0.3097428517766997 0.3890312245492567
+ POINT 4883 0.2967601768624903 0.3657236820108142
+ POINT 4884 0.2708456186414003 0.3656644836330769
+ POINT 4885 0.348669067123182 0.3192773687792171
+ POINT 4886 0.3226368210966244 0.3192819294304756
+ POINT 4887 0.1522680043429109 0.9350823449274528
+ POINT 4888 0.1411709439283113 0.9164660325994185
+ POINT 4889 0.1517756270856191 0.9608781198194568
+ POINT 4890 0.1424274778411145 0.9852962241343869
+ POINT 4891 0.06430610842256937 0.8733571139055123
+ POINT 4892 -0.1624587418075321 0.9126443345571646
+ POINT 4893 -0.1749090482183757 0.8954620036231666
+ POINT 4894 -0.1390540263233682 0.8722504458240983
+ POINT 4895 -0.1637380546914805 0.872876903681107
+ POINT 4896 -0.1271288646247112 0.8946768856867426
+ POINT 4897 -0.1411680749703981 0.9164660734624837
+ POINT 4898 -0.3177471734792274 0.8919517799260631
+ POINT 4899 -0.329483839263302 0.9128437255260831
+ POINT 4900 -0.2919653099646355 0.8916113493102493
+ POINT 4901 -0.5307026991916051 1.740644006175757
+ POINT 4902 -0.5046118713058836 1.740607393325091
+ POINT 4903 -0.2366701992242543 0.8803041478867714
+ POINT 4904 -0.2229864076095583 0.9011442235143317
+ POINT 4905 -0.2623811974664366 0.8827554959428268
+ POINT 4906 -0.2310150736933585 0.9250798434814753
+ POINT 4907 -0.2552212991122408 0.9298763560514194
+ POINT 4908 -0.2770998744034699 0.9142483532981058
+ POINT 4909 -0.2837501498310739 0.9372548853707056
+ POINT 4910 0.0774440283183723 1.304217403277686
+ POINT 4911 0.03881725219542564 1.326565622278343
+ POINT 4912 0.06430610842259862 1.326642886094488
+ POINT 4913 0.1300430247579568 1.012297790880096
+ POINT 4914 0.1601893029384849 1.009853784900613
+ POINT 4915 -0.5439492395638065 1.763552072404057
+ POINT 4916 0.1654718142430775 1.139072324176839
+ POINT 4917 0.1954884959668184 1.135221145960012
+ POINT 4918 0.1526371887260874 1.115
+ POINT 4919 0.0744511599376107 1.060904106049866
+ POINT 4920 0.04509113486863491 1.06109479479363
+ POINT 4921 0.0915395387051887 1.085
+ POINT 4922 0.1050472200537729 1.060904106049866
+ POINT 4923 0.1178818455707611 1.036831781873027
+ POINT 4924 -0.1148218478251467 1.327100728637512
+ POINT 4925 -0.1271288646246889 1.305323114313257
+ POINT 4926 -0.1055130669770155 1.259693736808355
+ POINT 4927 -0.0961654194936606 1.235275688354929
+ POINT 4928 -0.1216274593345193 1.236677864769959
+ POINT 4929 -0.1169358964721835 1.282885100999126
+ POINT 4930 -0.1411680749703795 1.283533926537516
+ POINT 4931 -0.1522657736550094 1.264917652128704
+ POINT 4932 -0.1601888025280123 1.190146383608896
+ POINT 4933 -0.1424262990336894 1.21470387995445
+ POINT 4934 -0.1517739465170442 1.239121928407876
+ POINT 4935 -0.1730646133541794 1.242943667313195
+ POINT 4936 -0.1935435858488256 1.23619037828005
+ POINT 4937 -0.2000409483619318 1.20918744095741
+ POINT 4938 -0.1902056014951458 1.186295470367269
+ POINT 4939 -0.2162422823868677 1.178949991878482
+ POINT 4940 -0.07197924608410756 1.186932024979324
+ POINT 4941 -0.04261917342542124 1.186741317053575
+ POINT 4942 -0.06802546924143459 1.234481885633194
+ POINT 4943 -0.04142279373376428 1.233974250621721
+ POINT 4944 -0.08413986159893845 1.211466013594798
+ POINT 4945 -0.02799955197873597 1.210454254936938
+ POINT 4946 -0.03047248221683528 1.085
+ POINT 4947 -0.01461946075830892 1.061094788382958
+ POINT 4948 -0.5574452166680464 1.78651441220982
+ POINT 4949 0.01461915256788132 1.06109479479363
+ POINT 4950 0.0304714962882729 1.085
+ POINT 4951 -0.5600508446470343 1.833848389622163
+ POINT 4952 -0.5702320007807327 1.80829329965189
+ POINT 4953 0.03931483095520175 0.2700723466505569
+ POINT 4954 0.02631555828368541 0.2461208279362839
+ POINT 4955 -0.1792205407953417 0.6214914598743548
+ POINT 4956 -0.1918266319749102 0.6448371227882772
+ POINT 4957 -0.2305502899251118 0.6218773722469343
+ POINT 4958 -0.2174234225364297 0.6451171272856933
+ POINT 4959 -0.1922175536035337 0.5983134482449883
+ POINT 4960 -0.1284471570110525 0.5281451323978852
+ POINT 4961 -0.1411867376353554 0.5514588208893751
+ POINT 4962 -0.1668629127195004 0.5515970663268979
+ POINT 4963 -0.1925967795178503 0.5517170147675832
+ POINT 4964 -0.2698541607686237 0.5521144402089639
+ POINT 4965 -0.283007775767315 0.5288232745026783
+ POINT 4966 -0.2444305062822973 0.505363796002434
+ POINT 4967 -0.2313980361042359 0.5286082493498927
+ POINT 4968 -0.2702666305054589 0.505460082959083
+ POINT 4969 -0.2052880841559516 0.57508915747905
+ POINT 4970 -0.2183116508748344 0.5518638888737428
+ POINT 4971 -0.2440893407423372 0.5519803920613595
+ POINT 4972 -0.2567677755392221 0.5753700797328142
+ POINT 4973 -0.2436208204775297 0.5986530814809958
+ POINT 4974 -0.2179324249605177 0.5984603223511482
+ POINT 4975 -0.180400029800809 0.2496352747550937
+ POINT 4976 -0.1676924267411068 0.2270778549397124
+ POINT 4977 -0.1421857271166549 0.2721973817938652
+ POINT 4978 -0.1296597519166311 0.2485857861279637
+ POINT 4979 -0.1677962696135184 0.2725053570482074
+ POINT 4980 -0.1930971044737857 0.2728341470345288
+ POINT 4981 -0.1429216232766106 0.2258395390789346
+ POINT 4982 -0.2190636470477959 0.3189997453285982
+ POINT 4983 -0.2061860867896503 0.2957531786883119
+ POINT 4984 -0.218789846976941 0.2728830963951982
+ POINT 4985 -0.2448808996987482 0.3190750956130514
+ POINT 4986 -0.2577674591098479 0.2957924054814963
+ POINT 4987 -0.2445722107585427 0.2723090825996963
+ POINT 4988 0.3809518584410202 0.8114070527418378
+ POINT 4989 0.3930622959108535 0.834590439779322
+ POINT 4990 0.3943950576003953 0.7876578170417554
+ POINT 4991 0.4184170346325313 0.8348673257790913
+ POINT 4992 0.420185604567855 0.787680391410893
+ POINT 4993 0.4323276800484653 0.8116227145330592
+ POINT 4994 -0.4825260994418888 0.245549662667305
+ POINT 4995 -0.4794501888301547 0.2732145990965034
+ POINT 4996 -0.4386842330748265 0.2500580259226227
+ POINT 4997 -0.451254476412116 0.2757112596530997
+ POINT 4998 -0.4600706418055656 0.2332508323835454
+ POINT 4999 -0.4803685255622078 0.2229332524549853
+ POINT 5000 -0.4993744528209035 0.7398611940952052
+ POINT 5001 -0.5255443537502462 0.7393480884374621
+ POINT 5002 -0.4869820590795214 0.7162064992327106
+ POINT 5003 -0.5390382780727246 0.7153766613883175
+ POINT 5004 -0.5004852970169364 0.6925266254359931
+ POINT 5005 -0.5264779638563261 0.6922070403906727
+ POINT 5006 -0.77345589067113 1.270622324981528
+ POINT 5007 -0.7853458381447149 1.292625139435351
+ POINT 5008 -0.8122361874637845 1.249855250702
+ POINT 5009 -0.8242630135330745 1.271956769232984
+ POINT 5010 -0.7863319791001783 1.249416851332606
+ POINT 5011 -0.8473115912897067 1.31663853311955
+ POINT 5012 -0.8360016752991936 1.294147840186509
+ POINT 5013 -0.8332676487819732 1.338023398937471
+ POINT 5014 -0.8104062851489064 1.293523438037701
+ POINT 5015 -0.797084499910834 1.314816210388875
+ POINT 5016 -0.7837640344612707 1.336244739486196
+ POINT 5017 -0.7705832842645414 1.357522629043914
+ POINT 5018 -0.7826635002889927 1.380137822999123
+ POINT 5019 -0.8088244814654623 1.337143038088547
+ POINT 5020 -0.8199471833324101 1.359451928034792
+ POINT 5021 -0.807279942810097 1.380959176042351
+ POINT 5022 -0.6232276942026378 0.9445521659556427
+ POINT 5023 -0.6345365027105483 0.9191673137311007
+ POINT 5024 -0.7338058161932381 0.8659905173016491
+ POINT 5025 -0.7085383453729565 0.8674382094719559
+ POINT 5026 -0.7612864339682388 1.037676527390385
+ POINT 5027 -0.7737929108022619 1.015928569999747
+ POINT 5028 0.5828871272165641 1.7407345302882
+ POINT 5029 0.6088230052962853 1.741178406883953
+ POINT 5030 0.622728399621602 1.719001683811678
+ POINT 5031 0.60868237447285 1.69507525702827
+ POINT 5032 0.5696414975319481 1.717826262675565
+ POINT 5033 0.582374412255944 1.694785966090077
+ POINT 5034 0.3486690671232575 1.880722631220782
+ POINT 5035 0.3357684079987812 1.857539439156553
+ POINT 5036 0.3487510829129833 1.83423189661811
+ POINT 5037 0.3748125929132354 1.881002920369382
+ POINT 5038 0.3879725663382705 1.857581860872384
+ POINT 5039 0.3748102376324669 1.834209847013273
+ POINT 5040 -0.7082596515410564 1.556950004248954
+ POINT 5041 -0.6827126659919655 1.556839031222714
+ POINT 5042 -0.7204151574862053 1.534680802039585
+ POINT 5043 -0.707331456007024 1.51187718719613
+ POINT 5044 -0.6692983360430343 1.533761562391887
+ POINT 5045 -0.6817928739607939 1.511147649776588
+ POINT 5046 -0.6999482814288852 1.67045697441996
+ POINT 5047 -0.7115085553959744 1.646802735407598
+ POINT 5048 -0.7367170075156833 1.646350471428831
+ POINT 5049 -0.7172504588747746 1.696300456497408
+ POINT 5050 -0.7387387898653091 1.686080118149766
+ POINT 5051 -0.7493877559351275 1.667440767346929
+ POINT 5052 -0.6703095287511835 1.813126141385079
+ POINT 5053 -0.6782125778660619 1.834865769528198
+ POINT 5054 -0.5472652560279756 1.857049922057955
+ POINT 5055 -0.5590897354347 1.876638133782511
+ POINT 5056 -0.5312276621219014 1.875654163015527
+ POINT 5057 -0.5793507264573767 1.885046884438861
+ POINT 5058 -0.6019536060826904 1.898531061464766
+ POINT 5059 -0.6856902815480908 1.793686233469775
+ POINT 5060 -0.7026495642401416 1.77642946791499
+ POINT 5061 -0.7132275880957663 1.800932527123044
+ POINT 5062 -0.6338317820182409 1.648767239880146
+ POINT 5063 -0.5079589379908136 1.882608243041239
+
+END POINTS LIST
+
+
+
+BEGIN MESH STRUCTURE DESCRIPTION
+
+CONVEX 0 'GT_PK(2,2)' 813 1316 793 1317 1318 1240
+CONVEX 1 'GT_PK(2,2)' 1276 1319 1274 1320 1321 1116
+CONVEX 2 'GT_PK(2,2)' 813 1317 1240 1322 1323 1242
+CONVEX 3 'GT_PK(2,2)' 801 1324 813 1325 1326 829
+CONVEX 4 'GT_PK(2,2)' 813 1327 839 1326 1328 829
+CONVEX 5 'GT_PK(2,2)' 839 1327 813 1329 1322 1242
+CONVEX 6 'GT_PK(2,2)' 813 1324 801 1316 1330 793
+CONVEX 7 'GT_PK(2,2)' 801 1325 829 1331 1332 819
+CONVEX 8 'GT_PK(2,2)' 860 1333 848 1334 1335 832
+CONVEX 9 'GT_PK(2,2)' 801 1331 819 1336 1337 789
+CONVEX 10 'GT_PK(2,2)' 777 1338 801 1339 1336 789
+CONVEX 11 'GT_PK(2,2)' 793 1330 801 1340 1338 777
+CONVEX 12 'GT_PK(2,2)' 140 1341 145 1342 1343 172
+CONVEX 13 'GT_PK(2,2)' 1274 1344 1107 1321 1345 1116
+CONVEX 14 'GT_PK(2,2)' 1120 1346 1276 1347 1320 1116
+CONVEX 15 'GT_PK(2,2)' 1094 1348 1081 1349 1350 1069
+CONVEX 16 'GT_PK(2,2)' 1081 1351 1055 1350 1352 1069
+CONVEX 17 'GT_PK(2,2)' 145 1353 165 1343 1354 172
+CONVEX 18 'GT_PK(2,2)' 145 1341 140 1355 1356 113
+CONVEX 19 'GT_PK(2,2)' 129 1357 145 1358 1355 113
+CONVEX 20 'GT_PK(2,2)' 145 1357 129 1353 1359 165
+CONVEX 21 'GT_PK(2,2)' 113 1356 140 1360 1361 112
+CONVEX 22 'GT_PK(2,2)' 112 1361 140 1362 1363 127
+CONVEX 23 'GT_PK(2,2)' 127 1363 140 1364 1365 160
+CONVEX 24 'GT_PK(2,2)' 160 1365 140 1366 1342 172
+CONVEX 25 'GT_PK(2,2)' 725 1367 685 1368 1369 1234
+CONVEX 26 'GT_PK(2,2)' 725 1368 1234 1370 1371 1236
+CONVEX 27 'GT_PK(2,2)' 709 1372 725 1373 1374 745
+CONVEX 28 'GT_PK(2,2)' 146 1375 173 1376 1377 164
+CONVEX 29 'GT_PK(2,2)' 725 1378 761 1374 1379 745
+CONVEX 30 'GT_PK(2,2)' 761 1378 725 1380 1370 1236
+CONVEX 31 'GT_PK(2,2)' 1254 1381 972 1382 1383 1256
+CONVEX 32 'GT_PK(2,2)' 725 1372 709 1367 1384 685
+CONVEX 33 'GT_PK(2,2)' 793 1385 761 1386 1387 1238
+CONVEX 34 'GT_PK(2,2)' 793 1386 1238 1318 1388 1240
+CONVEX 35 'GT_PK(2,2)' 793 1340 777 1389 1390 745
+CONVEX 36 'GT_PK(2,2)' 617 1391 641 1392 1393 601
+CONVEX 37 'GT_PK(2,2)' 575 1394 617 1395 1392 601
+CONVEX 38 'GT_PK(2,2)' 575 1396 597 1394 1397 617
+CONVEX 39 'GT_PK(2,2)' 827 1398 856 1399 1400 844
+CONVEX 40 'GT_PK(2,2)' 876 1401 848 1402 1333 860
+CONVEX 41 'GT_PK(2,2)' 862 1403 876 1404 1405 892
+CONVEX 42 'GT_PK(2,2)' 876 1403 862 1401 1406 848
+CONVEX 43 'GT_PK(2,2)' 1107 1407 1095 1345 1408 1116
+CONVEX 44 'GT_PK(2,2)' 1272 1409 1107 1410 1344 1274
+CONVEX 45 'GT_PK(2,2)' 761 1385 793 1379 1389 745
+CONVEX 46 'GT_PK(2,2)' 993 1411 1010 1412 1413 977
+CONVEX 47 'GT_PK(2,2)' 977 1413 1010 1414 1415 994
+CONVEX 48 'GT_PK(2,2)' 1010 1416 1259 1417 1418 1261
+CONVEX 49 'GT_PK(2,2)' 631 1419 673 1420 1421 655
+CONVEX 50 'GT_PK(2,2)' 581 1422 540 1423 1424 557
+CONVEX 51 'GT_PK(2,2)' 1094 1425 1104 1348 1426 1081
+CONVEX 52 'GT_PK(2,2)' 1104 1427 1095 1426 1428 1081
+CONVEX 53 'GT_PK(2,2)' 1104 1429 1120 1430 1347 1116
+CONVEX 54 'GT_PK(2,2)' 1095 1427 1104 1408 1430 1116
+CONVEX 55 'GT_PK(2,2)' 1055 1431 1043 1432 1433 1028
+CONVEX 56 'GT_PK(2,2)' 1016 1434 1002 1435 1436 983
+CONVEX 57 'GT_PK(2,2)' 1043 1437 1016 1433 1438 1028
+CONVEX 58 'GT_PK(2,2)' 1002 1439 968 1436 1440 983
+CONVEX 59 'GT_PK(2,2)' 968 1441 953 1440 1442 983
+CONVEX 60 'GT_PK(2,2)' 953 1441 968 1443 1444 941
+CONVEX 61 'GT_PK(2,2)' 968 1439 1002 1445 1446 985
+CONVEX 62 'GT_PK(2,2)' 1026 1447 1010 1448 1417 1261
+CONVEX 63 'GT_PK(2,2)' 1010 1447 1026 1415 1449 994
+CONVEX 64 'GT_PK(2,2)' 1259 1416 1010 1450 1411 993
+CONVEX 65 'GT_PK(2,2)' 1014 1451 1000 1452 1453 1032
+CONVEX 66 'GT_PK(2,2)' 1000 1454 1022 1453 1455 1032
+CONVEX 67 'GT_PK(2,2)' 981 1456 1000 1457 1451 1014
+CONVEX 68 'GT_PK(2,2)' 1022 1454 1000 1458 1459 987
+CONVEX 69 'GT_PK(2,2)' 1000 1456 981 1460 1461 967
+CONVEX 70 'GT_PK(2,2)' 1000 1460 967 1459 1462 987
+CONVEX 71 'GT_PK(2,2)' 924 1463 952 1464 1465 936
+CONVEX 72 'GT_PK(2,2)' 952 1466 964 1465 1467 936
+CONVEX 73 'GT_PK(2,2)' 952 1468 940 1469 1470 969
+CONVEX 74 'GT_PK(2,2)' 952 1469 969 1471 1472 982
+CONVEX 75 'GT_PK(2,2)' 843 1473 856 1474 1398 827
+CONVEX 76 'GT_PK(2,2)' 964 1466 952 1475 1471 982
+CONVEX 77 'GT_PK(2,2)' 940 1468 952 1476 1463 924
+CONVEX 78 'GT_PK(2,2)' 1248 1477 1250 1478 1479 909
+CONVEX 79 'GT_PK(2,2)' 174 1480 189 1481 1482 206
+CONVEX 80 'GT_PK(2,2)' 194 1483 174 1484 1481 206
+CONVEX 81 'GT_PK(2,2)' 306 1485 336 1486 1487 324
+CONVEX 82 'GT_PK(2,2)' 1228 1488 567 1489 1490 1226
+CONVEX 83 'GT_PK(2,2)' 86 1491 61 1492 1493 71
+CONVEX 84 'GT_PK(2,2)' 248 1494 222 1495 1496 234
+CONVEX 85 'GT_PK(2,2)' 320 1497 335 1498 1499 352
+CONVEX 86 'GT_PK(2,2)' 320 1500 306 1501 1502 292
+CONVEX 87 'GT_PK(2,2)' 336 1503 320 1504 1498 352
+CONVEX 88 'GT_PK(2,2)' 320 1503 336 1500 1485 306
+CONVEX 89 'GT_PK(2,2)' 305 1505 320 1506 1501 292
+CONVEX 90 'GT_PK(2,2)' 320 1505 305 1497 1507 335
+CONVEX 91 'GT_PK(2,2)' 305 1508 319 1507 1509 335
+CONVEX 92 'GT_PK(2,2)' 319 1508 305 1510 1511 290
+CONVEX 93 'GT_PK(2,2)' 1188 1512 84 1513 1514 1187
+CONVEX 94 'GT_PK(2,2)' 84 1515 71 1514 1516 1187
+CONVEX 95 'GT_PK(2,2)' 189 1480 174 1517 1518 156
+CONVEX 96 'GT_PK(2,2)' 174 1483 194 1519 1520 158
+CONVEX 97 'GT_PK(2,2)' 156 1518 174 1521 1522 141
+CONVEX 98 'GT_PK(2,2)' 126 1523 1191 1524 1525 1193
+CONVEX 99 'GT_PK(2,2)' 141 1522 174 1526 1519 158
+CONVEX 100 'GT_PK(2,2)' 74 1527 49 1528 1529 63
+CONVEX 101 'GT_PK(2,2)' 205 1530 189 1531 1532 177
+CONVEX 102 'GT_PK(2,2)' 189 1530 205 1533 1534 219
+CONVEX 103 'GT_PK(2,2)' 189 1533 219 1482 1535 206
+CONVEX 104 'GT_PK(2,2)' 189 1517 156 1532 1536 177
+CONVEX 105 'GT_PK(2,2)' 129 1358 113 1537 1538 102
+CONVEX 106 'GT_PK(2,2)' 165 1359 129 1539 1540 151
+CONVEX 107 'GT_PK(2,2)' 129 1537 102 1541 1542 119
+CONVEX 108 'GT_PK(2,2)' 920 1543 934 1544 1545 904
+CONVEX 109 'GT_PK(2,2)' 892 1546 920 1547 1544 904
+CONVEX 110 'GT_PK(2,2)' 934 1548 918 1545 1549 904
+CONVEX 111 'GT_PK(2,2)' 129 1541 119 1540 1550 151
+CONVEX 112 'GT_PK(2,2)' 102 1538 113 1551 1552 88
+CONVEX 113 'GT_PK(2,2)' 113 1360 112 1552 1553 88
+CONVEX 114 'GT_PK(2,2)' 1252 1554 1251 1555 1556 930
+CONVEX 115 'GT_PK(2,2)' 687 1557 709 1558 1559 727
+CONVEX 116 'GT_PK(2,2)' 709 1373 745 1559 1560 727
+CONVEX 117 'GT_PK(2,2)' 948 1561 918 1562 1548 934
+CONVEX 118 'GT_PK(2,2)' 918 1561 948 1563 1564 930
+CONVEX 119 'GT_PK(2,2)' 948 1565 1252 1564 1555 930
+CONVEX 120 'GT_PK(2,2)' 948 1566 972 1567 1381 1254
+CONVEX 121 'GT_PK(2,2)' 1252 1565 948 1568 1567 1254
+CONVEX 122 'GT_PK(2,2)' 709 1557 687 1569 1570 667
+CONVEX 123 'GT_PK(2,2)' 709 1569 667 1384 1571 685
+CONVEX 124 'GT_PK(2,2)' 711 1572 687 1573 1558 727
+CONVEX 125 'GT_PK(2,2)' 687 1572 711 1574 1575 669
+CONVEX 126 'GT_PK(2,2)' 647 1576 687 1577 1574 669
+CONVEX 127 'GT_PK(2,2)' 667 1570 687 1578 1576 647
+CONVEX 128 'GT_PK(2,2)' 1053 1579 1264 1580 1581 1262
+CONVEX 129 'GT_PK(2,2)' 627 1582 623 1583 1584 653
+CONVEX 130 'GT_PK(2,2)' 623 1582 627 1585 1586 587
+CONVEX 131 'GT_PK(2,2)' 667 1587 627 1588 1583 653
+CONVEX 132 'GT_PK(2,2)' 754 1589 740 1590 1591 722
+CONVEX 133 'GT_PK(2,2)' 674 1592 694 1593 1594 650
+CONVEX 134 'GT_PK(2,2)' 740 1595 694 1591 1596 722
+CONVEX 135 'GT_PK(2,2)' 694 1592 674 1596 1597 722
+CONVEX 136 'GT_PK(2,2)' 641 1598 659 1599 1600 681
+CONVEX 137 'GT_PK(2,2)' 659 1598 641 1601 1391 617
+CONVEX 138 'GT_PK(2,2)' 673 1602 697 1421 1603 655
+CONVEX 139 'GT_PK(2,2)' 697 1604 677 1603 1605 655
+CONVEX 140 'GT_PK(2,2)' 597 1606 637 1397 1607 617
+CONVEX 141 'GT_PK(2,2)' 637 1608 659 1607 1601 617
+CONVEX 142 'GT_PK(2,2)' 659 1608 637 1609 1610 677
+CONVEX 143 'GT_PK(2,2)' 677 1610 637 1605 1611 655
+CONVEX 144 'GT_PK(2,2)' 555 1612 597 1613 1396 575
+CONVEX 145 'GT_PK(2,2)' 802 1614 784 1615 1616 768
+CONVEX 146 'GT_PK(2,2)' 784 1617 820 1618 1619 806
+CONVEX 147 'GT_PK(2,2)' 848 1620 820 1335 1621 832
+CONVEX 148 'GT_PK(2,2)' 820 1622 802 1621 1623 832
+CONVEX 149 'GT_PK(2,2)' 802 1622 820 1614 1617 784
+CONVEX 150 'GT_PK(2,2)' 730 1624 717 1625 1626 747
+CONVEX 151 'GT_PK(2,2)' 697 1627 717 1604 1628 677
+CONVEX 152 'GT_PK(2,2)' 784 1629 750 1616 1630 768
+CONVEX 153 'GT_PK(2,2)' 661 1631 641 1632 1599 681
+CONVEX 154 'GT_PK(2,2)' 875 1633 846 1634 1635 859
+CONVEX 155 'GT_PK(2,2)' 846 1636 860 1637 1334 832
+CONVEX 156 'GT_PK(2,2)' 846 1633 875 1636 1638 860
+CONVEX 157 'GT_PK(2,2)' 814 1639 827 1640 1399 844
+CONVEX 158 'GT_PK(2,2)' 780 1641 814 1642 1643 798
+CONVEX 159 'GT_PK(2,2)' 780 1644 747 1645 1646 765
+CONVEX 160 'GT_PK(2,2)' 748 1647 719 1648 1649 730
+CONVEX 161 'GT_PK(2,2)' 862 1650 834 1406 1651 848
+CONVEX 162 'GT_PK(2,2)' 820 1652 834 1619 1653 806
+CONVEX 163 'GT_PK(2,2)' 834 1652 820 1651 1620 848
+CONVEX 164 'GT_PK(2,2)' 878 1654 892 1655 1547 904
+CONVEX 165 'GT_PK(2,2)' 878 1656 862 1654 1404 892
+CONVEX 166 'GT_PK(2,2)' 627 1657 607 1586 1658 587
+CONVEX 167 'GT_PK(2,2)' 627 1587 667 1659 1578 647
+CONVEX 168 'GT_PK(2,2)' 426 1660 466 1661 1662 1219
+CONVEX 169 'GT_PK(2,2)' 627 1659 647 1657 1663 607
+CONVEX 170 'GT_PK(2,2)' 543 1664 517 1665 1666 559
+CONVEX 171 'GT_PK(2,2)' 1120 1667 1278 1346 1668 1276
+CONVEX 172 'GT_PK(2,2)' 624 1669 584 1670 1671 602
+CONVEX 173 'GT_PK(2,2)' 584 1669 624 1672 1673 604
+CONVEX 174 'GT_PK(2,2)' 642 1674 624 1675 1670 602
+CONVEX 175 'GT_PK(2,2)' 624 1676 644 1673 1677 604
+CONVEX 176 'GT_PK(2,2)' 1280 1678 1127 1679 1680 1126
+CONVEX 177 'GT_PK(2,2)' 1127 1681 1278 1682 1667 1120
+CONVEX 178 'GT_PK(2,2)' 1278 1681 1127 1683 1678 1280
+CONVEX 179 'GT_PK(2,2)' 1090 1684 1270 1685 1686 1269
+CONVEX 180 'GT_PK(2,2)' 624 1674 642 1687 1688 664
+CONVEX 181 'GT_PK(2,2)' 644 1676 624 1689 1687 664
+CONVEX 182 'GT_PK(2,2)' 1272 1690 1100 1409 1691 1107
+CONVEX 183 'GT_PK(2,2)' 1270 1692 1100 1693 1690 1272
+CONVEX 184 'GT_PK(2,2)' 1100 1692 1270 1694 1684 1090
+CONVEX 185 'GT_PK(2,2)' 1136 1695 1129 1696 1697 1286
+CONVEX 186 'GT_PK(2,2)' 925 1698 953 1699 1443 941
+CONVEX 187 'GT_PK(2,2)' 745 1390 777 1560 1700 727
+CONVEX 188 'GT_PK(2,2)' 727 1700 777 1701 1702 759
+CONVEX 189 'GT_PK(2,2)' 777 1339 789 1702 1703 759
+CONVEX 190 'GT_PK(2,2)' 1135 1704 1289 1705 1706 1287
+CONVEX 191 'GT_PK(2,2)' 839 1329 1242 1707 1708 1244
+CONVEX 192 'GT_PK(2,2)' 829 1328 839 1709 1710 867
+CONVEX 193 'GT_PK(2,2)' 867 1710 839 1711 1707 1244
+CONVEX 194 'GT_PK(2,2)' 1288 1712 1136 1713 1696 1286
+CONVEX 195 'GT_PK(2,2)' 613 1714 631 1715 1420 655
+CONVEX 196 'GT_PK(2,2)' 637 1716 613 1611 1715 655
+CONVEX 197 'GT_PK(2,2)' 613 1716 637 1717 1606 597
+CONVEX 198 'GT_PK(2,2)' 540 1718 519 1424 1719 557
+CONVEX 199 'GT_PK(2,2)' 395 1720 439 1721 1722 415
+CONVEX 200 'GT_PK(2,2)' 459 1723 439 1724 1725 481
+CONVEX 201 'GT_PK(2,2)' 439 1723 459 1722 1726 415
+CONVEX 202 'GT_PK(2,2)' 433 1727 471 1728 1729 449
+CONVEX 203 'GT_PK(2,2)' 1259 1450 993 1730 1731 1257
+CONVEX 204 'GT_PK(2,2)' 997 1732 1016 1733 1435 983
+CONVEX 205 'GT_PK(2,2)' 1016 1732 997 1438 1734 1028
+CONVEX 206 'GT_PK(2,2)' 1109 1735 1119 1736 1737 1126
+CONVEX 207 'GT_PK(2,2)' 1119 1735 1109 1738 1739 1097
+CONVEX 208 'GT_PK(2,2)' 1063 1740 1049 1741 1742 1038
+CONVEX 209 'GT_PK(2,2)' 1046 1743 1030 1744 1745 1056
+CONVEX 210 'GT_PK(2,2)' 1030 1746 1043 1745 1747 1056
+CONVEX 211 'GT_PK(2,2)' 1016 1748 1030 1434 1749 1002
+CONVEX 212 'GT_PK(2,2)' 1030 1748 1016 1746 1437 1043
+CONVEX 213 'GT_PK(2,2)' 1070 1750 1055 1751 1351 1081
+CONVEX 214 'GT_PK(2,2)' 1070 1752 1043 1750 1431 1055
+CONVEX 215 'GT_PK(2,2)' 1043 1752 1070 1747 1753 1056
+CONVEX 216 'GT_PK(2,2)' 1095 1754 1070 1428 1751 1081
+CONVEX 217 'GT_PK(2,2)' 1050 1755 1066 1756 1757 1079
+CONVEX 218 'GT_PK(2,2)' 1065 1758 1050 1759 1756 1079
+CONVEX 219 'GT_PK(2,2)' 1050 1758 1065 1760 1761 1033
+CONVEX 220 'GT_PK(2,2)' 23 1762 1172 1763 1764 1174
+CONVEX 221 'GT_PK(2,2)' 1019 1765 1050 1766 1760 1033
+CONVEX 222 'GT_PK(2,2)' 1050 1767 1035 1755 1768 1066
+CONVEX 223 'GT_PK(2,2)' 1035 1767 1050 1769 1765 1019
+CONVEX 224 'GT_PK(2,2)' 779 1770 811 1771 1772 797
+CONVEX 225 'GT_PK(2,2)' 779 1771 797 1773 1774 765
+CONVEX 226 'GT_PK(2,2)' 1164 1775 1167 1776 1777 15
+CONVEX 227 'GT_PK(2,2)' 20 1778 1164 1779 1776 15
+CONVEX 228 'GT_PK(2,2)' 811 1770 779 1780 1781 795
+CONVEX 229 'GT_PK(2,2)' 779 1782 775 1781 1783 795
+CONVEX 230 'GT_PK(2,2)' 753 1784 779 1785 1773 765
+CONVEX 231 'GT_PK(2,2)' 775 1782 779 1786 1784 753
+CONVEX 232 'GT_PK(2,2)' 391 1787 1214 1788 1789 1216
+CONVEX 233 'GT_PK(2,2)' 981 1457 1014 1790 1791 997
+CONVEX 234 'GT_PK(2,2)' 965 1792 981 1793 1790 997
+CONVEX 235 'GT_PK(2,2)' 1220 1794 1222 1795 1796 499
+CONVEX 236 'GT_PK(2,2)' 951 1797 981 1798 1792 965
+CONVEX 237 'GT_PK(2,2)' 797 1799 780 1774 1645 765
+CONVEX 238 'GT_PK(2,2)' 814 1800 797 1639 1801 827
+CONVEX 239 'GT_PK(2,2)' 780 1799 797 1641 1800 814
+CONVEX 240 'GT_PK(2,2)' 843 1802 871 1473 1803 856
+CONVEX 241 'GT_PK(2,2)' 882 1804 871 1805 1806 898
+CONVEX 242 'GT_PK(2,2)' 871 1804 882 1803 1807 856
+CONVEX 243 'GT_PK(2,2)' 871 1802 843 1808 1809 855
+CONVEX 244 'GT_PK(2,2)' 981 1797 951 1461 1810 967
+CONVEX 245 'GT_PK(2,2)' 1013 1811 1031 1812 1813 999
+CONVEX 246 'GT_PK(2,2)' 999 1813 1031 1814 1815 1021
+CONVEX 247 'GT_PK(2,2)' 1041 1816 1031 1817 1811 1013
+CONVEX 248 'GT_PK(2,2)' 1048 1818 1031 1819 1820 1058
+CONVEX 249 'GT_PK(2,2)' 1031 1818 1048 1815 1821 1021
+CONVEX 250 'GT_PK(2,2)' 1031 1816 1041 1820 1822 1058
+CONVEX 251 'GT_PK(2,2)' 336 1823 354 1487 1824 324
+CONVEX 252 'GT_PK(2,2)' 940 1476 924 1825 1826 912
+CONVEX 253 'GT_PK(2,2)' 1222 1827 529 1796 1828 499
+CONVEX 254 'GT_PK(2,2)' 529 1829 567 1830 1831 565
+CONVEX 255 'GT_PK(2,2)' 529 1832 525 1828 1833 499
+CONVEX 256 'GT_PK(2,2)' 525 1832 529 1834 1830 565
+CONVEX 257 'GT_PK(2,2)' 567 1835 587 1831 1836 565
+CONVEX 258 'GT_PK(2,2)' 735 1837 749 1838 1839 718
+CONVEX 259 'GT_PK(2,2)' 749 1837 735 1840 1841 769
+CONVEX 260 'GT_PK(2,2)' 796 1842 815 1843 1844 826
+CONVEX 261 'GT_PK(2,2)' 105 1845 86 1846 1847 118
+CONVEX 262 'GT_PK(2,2)' 105 1848 121 1849 1850 95
+CONVEX 263 'GT_PK(2,2)' 79 1851 61 1852 1491 86
+CONVEX 264 'GT_PK(2,2)' 105 1853 79 1845 1852 86
+CONVEX 265 'GT_PK(2,2)' 79 1853 105 1854 1849 95
+CONVEX 266 'GT_PK(2,2)' 969 1470 940 1855 1856 954
+CONVEX 267 'GT_PK(2,2)' 940 1857 926 1856 1858 954
+CONVEX 268 'GT_PK(2,2)' 940 1825 912 1857 1859 926
+CONVEX 269 'GT_PK(2,2)' 187 1860 199 1861 1862 169
+CONVEX 270 'GT_PK(2,2)' 187 1861 169 1863 1864 155
+CONVEX 271 'GT_PK(2,2)' 1183 1865 1185 1866 1867 61
+CONVEX 272 'GT_PK(2,2)' 71 1868 1185 1516 1869 1187
+CONVEX 273 'GT_PK(2,2)' 61 1867 1185 1493 1868 71
+CONVEX 274 'GT_PK(2,2)' 260 1870 248 1871 1495 234
+CONVEX 275 'GT_PK(2,2)' 244 1872 260 1873 1871 234
+CONVEX 276 'GT_PK(2,2)' 222 1874 204 1496 1875 234
+CONVEX 277 'GT_PK(2,2)' 188 1876 176 1877 1878 157
+CONVEX 278 'GT_PK(2,2)' 188 1879 204 1876 1880 176
+CONVEX 279 'GT_PK(2,2)' 176 1881 143 1878 1882 157
+CONVEX 280 'GT_PK(2,2)' 143 1883 126 1882 1884 157
+CONVEX 281 'GT_PK(2,2)' 126 1883 143 1885 1886 115
+CONVEX 282 'GT_PK(2,2)' 260 1887 275 1888 1889 290
+CONVEX 283 'GT_PK(2,2)' 275 1887 260 1890 1872 244
+CONVEX 284 'GT_PK(2,2)' 319 1891 349 1509 1892 335
+CONVEX 285 'GT_PK(2,2)' 367 1893 349 1894 1895 331
+CONVEX 286 'GT_PK(2,2)' 349 1891 319 1895 1896 331
+CONVEX 287 'GT_PK(2,2)' 305 1897 276 1511 1898 290
+CONVEX 288 'GT_PK(2,2)' 276 1899 260 1898 1888 290
+CONVEX 289 'GT_PK(2,2)' 260 1899 276 1870 1900 248
+CONVEX 290 'GT_PK(2,2)' 276 1897 305 1901 1506 292
+CONVEX 291 'GT_PK(2,2)' 101 1902 84 1903 1904 115
+CONVEX 292 'GT_PK(2,2)' 86 1905 101 1847 1906 118
+CONVEX 293 'GT_PK(2,2)' 101 1905 86 1907 1492 71
+CONVEX 294 'GT_PK(2,2)' 84 1902 101 1515 1907 71
+CONVEX 295 'GT_PK(2,2)' 99 1908 126 1909 1885 115
+CONVEX 296 'GT_PK(2,2)' 99 1910 1191 1908 1523 126
+CONVEX 297 'GT_PK(2,2)' 1191 1910 99 1911 1912 1188
+CONVEX 298 'GT_PK(2,2)' 99 1913 84 1912 1512 1188
+CONVEX 299 'GT_PK(2,2)' 84 1913 99 1904 1909 115
+CONVEX 300 'GT_PK(2,2)' 89 1914 111 1915 1916 114
+CONVEX 301 'GT_PK(2,2)' 240 1917 228 1918 1919 214
+CONVEX 302 'GT_PK(2,2)' 573 1920 593 1921 1922 559
+CONVEX 303 'GT_PK(2,2)' 593 1920 573 1923 1924 615
+CONVEX 304 'GT_PK(2,2)' 522 1925 543 1926 1927 563
+CONVEX 305 'GT_PK(2,2)' 543 1928 577 1927 1929 563
+CONVEX 306 'GT_PK(2,2)' 577 1930 593 1931 1932 609
+CONVEX 307 'GT_PK(2,2)' 577 1928 543 1933 1665 559
+CONVEX 308 'GT_PK(2,2)' 593 1930 577 1922 1933 559
+CONVEX 309 'GT_PK(2,2)' 1235 1934 724 1935 1936 1237
+CONVEX 310 'GT_PK(2,2)' 171 1937 187 1938 1863 155
+CONVEX 311 'GT_PK(2,2)' 187 1939 200 1940 1941 215
+CONVEX 312 'GT_PK(2,2)' 200 1939 187 1942 1937 171
+CONVEX 313 'GT_PK(2,2)' 199 1860 187 1943 1940 215
+CONVEX 314 'GT_PK(2,2)' 200 1944 185 1945 1946 213
+CONVEX 315 'GT_PK(2,2)' 1231 1947 652 1948 1949 1233
+CONVEX 316 'GT_PK(2,2)' 200 1945 213 1950 1951 229
+CONVEX 317 'GT_PK(2,2)' 215 1941 200 1952 1950 229
+CONVEX 318 'GT_PK(2,2)' 185 1944 200 1953 1942 171
+CONVEX 319 'GT_PK(2,2)' 466 1954 1221 1662 1955 1219
+CONVEX 320 'GT_PK(2,2)' 876 1956 906 1405 1957 892
+CONVEX 321 'GT_PK(2,2)' 906 1958 920 1957 1546 892
+CONVEX 322 'GT_PK(2,2)' 992 1959 1258 1960 1961 1256
+CONVEX 323 'GT_PK(2,2)' 972 1962 992 1383 1960 1256
+CONVEX 324 'GT_PK(2,2)' 906 1963 933 1958 1964 920
+CONVEX 325 'GT_PK(2,2)' 955 1965 968 1966 1445 985
+CONVEX 326 'GT_PK(2,2)' 968 1965 955 1444 1967 941
+CONVEX 327 'GT_PK(2,2)' 1239 1968 792 1969 1970 1241
+CONVEX 328 'GT_PK(2,2)' 178 1971 194 1972 1973 202
+CONVEX 329 'GT_PK(2,2)' 178 1972 202 1974 1975 1198
+CONVEX 330 'GT_PK(2,2)' 1196 1976 178 1977 1974 1198
+CONVEX 331 'GT_PK(2,2)' 194 1971 178 1520 1978 158
+CONVEX 332 'GT_PK(2,2)' 1243 1979 838 1980 1981 1245
+CONVEX 333 'GT_PK(2,2)' 1067 1982 1266 1983 1984 1264
+CONVEX 334 'GT_PK(2,2)' 1053 1985 1067 1579 1983 1264
+CONVEX 335 'GT_PK(2,2)' 1064 1986 1034 1987 1988 1046
+CONVEX 336 'GT_PK(2,2)' 1034 1986 1064 1989 1990 1051
+CONVEX 337 'GT_PK(2,2)' 1004 1991 971 1992 1993 985
+CONVEX 338 'GT_PK(2,2)' 971 1994 955 1993 1966 985
+CONVEX 339 'GT_PK(2,2)' 955 1994 971 1995 1996 942
+CONVEX 340 'GT_PK(2,2)' 1020 1997 1034 1998 1989 1051
+CONVEX 341 'GT_PK(2,2)' 1034 1997 1020 1999 2000 1004
+CONVEX 342 'GT_PK(2,2)' 694 2001 668 1594 2002 650
+CONVEX 343 'GT_PK(2,2)' 535 2003 555 2004 1613 575
+CONVEX 344 'GT_PK(2,2)' 717 2005 699 1628 2006 677
+CONVEX 345 'GT_PK(2,2)' 699 2005 717 2007 1624 730
+CONVEX 346 'GT_PK(2,2)' 699 2008 659 2006 1609 677
+CONVEX 347 'GT_PK(2,2)' 659 2008 699 1600 2009 681
+CONVEX 348 'GT_PK(2,2)' 699 2010 719 2009 2011 681
+CONVEX 349 'GT_PK(2,2)' 719 2010 699 1649 2007 730
+CONVEX 350 'GT_PK(2,2)' 733 2012 717 2013 1627 697
+CONVEX 351 'GT_PK(2,2)' 747 2014 733 1646 2015 765
+CONVEX 352 'GT_PK(2,2)' 717 2012 733 1626 2014 747
+CONVEX 353 'GT_PK(2,2)' 750 2016 734 1630 2017 768
+CONVEX 354 'GT_PK(2,2)' 734 2018 748 2017 2019 768
+CONVEX 355 'GT_PK(2,2)' 748 2018 734 1647 2020 719
+CONVEX 356 'GT_PK(2,2)' 770 2021 784 2022 1618 806
+CONVEX 357 'GT_PK(2,2)' 770 2023 750 2021 1629 784
+CONVEX 358 'GT_PK(2,2)' 700 2024 657 2025 2026 679
+CONVEX 359 'GT_PK(2,2)' 674 2027 700 1597 2028 722
+CONVEX 360 'GT_PK(2,2)' 657 2024 700 2029 2027 674
+CONVEX 361 'GT_PK(2,2)' 639 2030 661 2031 2032 679
+CONVEX 362 'GT_PK(2,2)' 639 2033 657 2034 2035 615
+CONVEX 363 'GT_PK(2,2)' 657 2033 639 2026 2031 679
+CONVEX 364 'GT_PK(2,2)' 846 2036 830 1635 2037 859
+CONVEX 365 'GT_PK(2,2)' 859 2037 830 2038 2039 844
+CONVEX 366 'GT_PK(2,2)' 830 2040 814 2039 1640 844
+CONVEX 367 'GT_PK(2,2)' 814 2040 830 1643 2041 798
+CONVEX 368 'GT_PK(2,2)' 766 2042 748 2043 1648 730
+CONVEX 369 'GT_PK(2,2)' 766 2044 780 2045 1642 798
+CONVEX 370 'GT_PK(2,2)' 766 2043 730 2046 1625 747
+CONVEX 371 'GT_PK(2,2)' 780 2044 766 1644 2046 747
+CONVEX 372 'GT_PK(2,2)' 782 2047 766 2048 2045 798
+CONVEX 373 'GT_PK(2,2)' 766 2047 782 2042 2049 748
+CONVEX 374 'GT_PK(2,2)' 782 2050 802 2051 1615 768
+CONVEX 375 'GT_PK(2,2)' 748 2049 782 2019 2051 768
+CONVEX 376 'GT_PK(2,2)' 873 2052 859 2053 2038 844
+CONVEX 377 'GT_PK(2,2)' 856 2054 873 1400 2053 844
+CONVEX 378 'GT_PK(2,2)' 882 2055 873 1807 2054 856
+CONVEX 379 'GT_PK(2,2)' 850 2056 834 2057 1650 862
+CONVEX 380 'GT_PK(2,2)' 878 2058 850 1656 2057 862
+CONVEX 381 'GT_PK(2,2)' 178 1976 1196 1978 2059 158
+CONVEX 382 'GT_PK(2,2)' 246 2060 230 2061 2062 258
+CONVEX 383 'GT_PK(2,2)' 1204 2063 262 2064 2065 1207
+CONVEX 384 'GT_PK(2,2)' 1221 2066 498 2067 2068 1223
+CONVEX 385 'GT_PK(2,2)' 498 2066 1221 2069 1954 466
+CONVEX 386 'GT_PK(2,2)' 424 2070 406 2071 2072 374
+CONVEX 387 'GT_PK(2,2)' 498 2073 484 2074 2075 524
+CONVEX 388 'GT_PK(2,2)' 484 2073 498 2076 2069 466
+CONVEX 389 'GT_PK(2,2)' 497 2077 520 2078 2079 539
+CONVEX 390 'GT_PK(2,2)' 471 2080 491 1729 2081 449
+CONVEX 391 'GT_PK(2,2)' 312 2082 322 2083 2084 338
+CONVEX 392 'GT_PK(2,2)' 380 2085 364 2086 2087 344
+CONVEX 393 'GT_PK(2,2)' 380 2088 400 2089 2090 412
+CONVEX 394 'GT_PK(2,2)' 378 2091 362 2092 2093 346
+CONVEX 395 'GT_PK(2,2)' 364 2094 378 2095 2092 346
+CONVEX 396 'GT_PK(2,2)' 284 2096 270 2097 2098 298
+CONVEX 397 'GT_PK(2,2)' 270 2096 284 2099 2100 262
+CONVEX 398 'GT_PK(2,2)' 322 2101 284 2102 2097 298
+CONVEX 399 'GT_PK(2,2)' 284 2101 322 2103 2082 312
+CONVEX 400 'GT_PK(2,2)' 262 2100 284 2065 2104 1207
+CONVEX 401 'GT_PK(2,2)' 272 2105 246 2106 2061 258
+CONVEX 402 'GT_PK(2,2)' 232 2107 246 2108 2109 256
+CONVEX 403 'GT_PK(2,2)' 284 2110 1209 2104 2111 1207
+CONVEX 404 'GT_PK(2,2)' 1209 2110 284 2112 2103 312
+CONVEX 405 'GT_PK(2,2)' 1217 2113 426 2114 1661 1219
+CONVEX 406 'GT_PK(2,2)' 246 2105 272 2109 2115 256
+CONVEX 407 'GT_PK(2,2)' 230 2060 246 2116 2117 216
+CONVEX 408 'GT_PK(2,2)' 246 2107 232 2117 2118 216
+CONVEX 409 'GT_PK(2,2)' 500 2119 517 2120 1664 543
+CONVEX 410 'GT_PK(2,2)' 500 2121 522 2122 2123 482
+CONVEX 411 'GT_PK(2,2)' 522 2121 500 1925 2120 543
+CONVEX 412 'GT_PK(2,2)' 517 2119 500 2124 2125 476
+CONVEX 413 'GT_PK(2,2)' 495 2126 517 2127 2124 476
+CONVEX 414 'GT_PK(2,2)' 450 2128 495 2129 2127 476
+CONVEX 415 'GT_PK(2,2)' 1115 2130 1104 2131 1425 1094
+CONVEX 416 'GT_PK(2,2)' 1109 2132 1115 2133 2131 1094
+CONVEX 417 'GT_PK(2,2)' 1104 2130 1115 1429 2134 1120
+CONVEX 418 'GT_PK(2,2)' 1115 2135 1127 2134 1682 1120
+CONVEX 419 'GT_PK(2,2)' 1127 2135 1115 1680 2136 1126
+CONVEX 420 'GT_PK(2,2)' 1115 2132 1109 2136 1736 1126
+CONVEX 421 'GT_PK(2,2)' 1282 2137 1280 2138 1679 1126
+CONVEX 422 'GT_PK(2,2)' 223 2139 205 2140 2141 193
+CONVEX 423 'GT_PK(2,2)' 205 2139 223 2142 2143 235
+CONVEX 424 'GT_PK(2,2)' 219 1534 205 2144 2142 235
+CONVEX 425 'GT_PK(2,2)' 205 1531 177 2141 2145 193
+CONVEX 426 'GT_PK(2,2)' 177 1536 156 2146 2147 144
+CONVEX 427 'GT_PK(2,2)' 156 1521 141 2148 2149 125
+CONVEX 428 'GT_PK(2,2)' 1072 2150 1046 2151 1744 1056
+CONVEX 429 'GT_PK(2,2)' 1072 2152 1064 2150 1987 1046
+CONVEX 430 'GT_PK(2,2)' 1064 2152 1072 2153 2154 1090
+CONVEX 431 'GT_PK(2,2)' 1072 2155 1100 2154 1694 1090
+CONVEX 432 'GT_PK(2,2)' 1129 2156 1285 1697 2157 1286
+CONVEX 433 'GT_PK(2,2)' 144 2147 156 2158 2148 125
+CONVEX 434 'GT_PK(2,2)' 102 1551 88 2159 2160 76
+CONVEX 435 'GT_PK(2,2)' 102 2159 76 2161 2162 92
+CONVEX 436 'GT_PK(2,2)' 119 1542 102 2163 2161 92
+CONVEX 437 'GT_PK(2,2)' 431 2164 451 2165 2166 472
+CONVEX 438 'GT_PK(2,2)' 451 2164 431 2167 2168 413
+CONVEX 439 'GT_PK(2,2)' 431 2169 401 2168 2170 413
+CONVEX 440 'GT_PK(2,2)' 1118 2171 1129 2172 2173 1111
+CONVEX 441 'GT_PK(2,2)' 1123 2174 1129 2175 1695 1136
+CONVEX 442 'GT_PK(2,2)' 1129 2174 1123 2173 2176 1111
+CONVEX 443 'GT_PK(2,2)' 555 2177 579 1612 2178 597
+CONVEX 444 'GT_PK(2,2)' 579 2179 613 2178 1717 597
+CONVEX 445 'GT_PK(2,2)' 579 2177 555 2180 2181 539
+CONVEX 446 'GT_PK(2,2)' 503 2182 459 2183 1724 481
+CONVEX 447 'GT_PK(2,2)' 519 2184 503 2185 2183 481
+CONVEX 448 'GT_PK(2,2)' 503 2184 519 2186 1718 540
+CONVEX 449 'GT_PK(2,2)' 520 2187 503 2188 2186 540
+CONVEX 450 'GT_PK(2,2)' 419 2189 435 2190 2191 405
+CONVEX 451 'GT_PK(2,2)' 318 2192 330 2193 2194 302
+CONVEX 452 'GT_PK(2,2)' 291 2195 318 2196 2193 302
+CONVEX 453 'GT_PK(2,2)' 261 2197 235 2198 2199 249
+CONVEX 454 'GT_PK(2,2)' 353 2200 369 2201 2202 334
+CONVEX 455 'GT_PK(2,2)' 369 2203 385 2204 2205 402
+CONVEX 456 'GT_PK(2,2)' 385 2203 369 2206 2200 353
+CONVEX 457 'GT_PK(2,2)' 416 2207 433 2208 1728 449
+CONVEX 458 'GT_PK(2,2)' 433 2207 416 2209 2210 402
+CONVEX 459 'GT_PK(2,2)' 435 2211 421 2191 2212 405
+CONVEX 460 'GT_PK(2,2)' 421 2213 385 2212 2214 405
+CONVEX 461 'GT_PK(2,2)' 421 2215 433 2216 2209 402
+CONVEX 462 'GT_PK(2,2)' 385 2213 421 2205 2216 402
+CONVEX 463 'GT_PK(2,2)' 430 2217 450 2218 2219 412
+CONVEX 464 'GT_PK(2,2)' 400 2220 430 2090 2218 412
+CONVEX 465 'GT_PK(2,2)' 430 2221 416 2222 2208 449
+CONVEX 466 'GT_PK(2,2)' 416 2221 430 2223 2220 400
+CONVEX 467 'GT_PK(2,2)' 448 2224 431 2225 2165 472
+CONVEX 468 'GT_PK(2,2)' 431 2224 448 2226 2227 417
+CONVEX 469 'GT_PK(2,2)' 1086 2228 1109 2229 2133 1094
+CONVEX 470 'GT_PK(2,2)' 1109 2228 1086 1739 2230 1097
+CONVEX 471 'GT_PK(2,2)' 1086 2229 1094 2231 1349 1069
+CONVEX 472 'GT_PK(2,2)' 1059 2232 1086 2233 2231 1069
+CONVEX 473 'GT_PK(2,2)' 1042 2234 1059 2235 2233 1069
+CONVEX 474 'GT_PK(2,2)' 1055 2236 1042 1352 2235 1069
+CONVEX 475 'GT_PK(2,2)' 1042 2236 1055 2237 1432 1028
+CONVEX 476 'GT_PK(2,2)' 1017 2238 1030 2239 1743 1046
+CONVEX 477 'GT_PK(2,2)' 1034 2240 1017 1988 2239 1046
+CONVEX 478 'GT_PK(2,2)' 1017 2240 1034 2241 1999 1004
+CONVEX 479 'GT_PK(2,2)' 1017 2241 1004 2242 1992 985
+CONVEX 480 'GT_PK(2,2)' 1002 2243 1017 1446 2242 985
+CONVEX 481 'GT_PK(2,2)' 1030 2238 1017 1749 2243 1002
+CONVEX 482 'GT_PK(2,2)' 1176 2244 1179 2245 2246 34
+CONVEX 483 'GT_PK(2,2)' 401 2169 431 2247 2226 417
+CONVEX 484 'GT_PK(2,2)' 685 1571 667 2248 1588 653
+CONVEX 485 'GT_PK(2,2)' 489 2249 531 2250 2251 519
+CONVEX 486 'GT_PK(2,2)' 23 2252 30 2253 2254 36
+CONVEX 487 'GT_PK(2,2)' 30 2252 23 2255 1763 1174
+CONVEX 488 'GT_PK(2,2)' 1176 2256 30 2257 2255 1174
+CONVEX 489 'GT_PK(2,2)' 30 2256 1176 2258 2245 34
+CONVEX 490 'GT_PK(2,2)' 49 2259 40 1529 2260 63
+CONVEX 491 'GT_PK(2,2)' 25 2261 23 2262 2253 36
+CONVEX 492 'GT_PK(2,2)' 23 2261 25 1762 2263 1172
+CONVEX 493 'GT_PK(2,2)' 519 2251 531 1719 2264 557
+CONVEX 494 'GT_PK(2,2)' 531 2265 583 2264 2266 557
+CONVEX 495 'GT_PK(2,2)' 39 2267 27 2268 2269 20
+CONVEX 496 'GT_PK(2,2)' 74 2270 59 1527 2271 49
+CONVEX 497 'GT_PK(2,2)' 59 2272 39 2271 2273 49
+CONVEX 498 'GT_PK(2,2)' 59 2270 74 2274 2275 90
+CONVEX 499 'GT_PK(2,2)' 130 2276 146 2277 1376 164
+CONVEX 500 'GT_PK(2,2)' 146 2276 130 2278 2279 114
+CONVEX 501 'GT_PK(2,2)' 18 2280 1171 2281 2282 1169
+CONVEX 502 'GT_PK(2,2)' 313 2283 1208 2284 2285 1210
+CONVEX 503 'GT_PK(2,2)' 379 2286 347 2287 2288 363
+CONVEX 504 'GT_PK(2,2)' 347 2286 379 2289 2290 365
+CONVEX 505 'GT_PK(2,2)' 1214 2291 359 2292 2293 1212
+CONVEX 506 'GT_PK(2,2)' 391 2294 359 1787 2291 1214
+CONVEX 507 'GT_PK(2,2)' 881 2295 889 2296 2297 909
+CONVEX 508 'GT_PK(2,2)' 889 2298 1248 2297 1478 909
+CONVEX 509 'GT_PK(2,2)' 1248 2298 889 2299 2300 1246
+CONVEX 510 'GT_PK(2,2)' 1063 2301 1040 2302 2303 1077
+CONVEX 511 'GT_PK(2,2)' 1040 2301 1063 2304 1741 1038
+CONVEX 512 'GT_PK(2,2)' 1047 2305 1018 2306 2307 1033
+CONVEX 513 'GT_PK(2,2)' 1018 2305 1047 2308 2309 1029
+CONVEX 514 'GT_PK(2,2)' 1083 2310 1106 2311 2312 1096
+CONVEX 515 'GT_PK(2,2)' 583 2265 531 2313 2314 549
+CONVEX 516 'GT_PK(2,2)' 1099 2315 1083 2316 2317 1073
+CONVEX 517 'GT_PK(2,2)' 1083 2315 1099 2310 2318 1106
+CONVEX 518 'GT_PK(2,2)' 911 2319 925 2320 2321 898
+CONVEX 519 'GT_PK(2,2)' 843 2322 825 1809 2323 855
+CONVEX 520 'GT_PK(2,2)' 1250 2324 931 1479 2325 909
+CONVEX 521 'GT_PK(2,2)' 531 2249 489 2326 2327 509
+CONVEX 522 'GT_PK(2,2)' 946 2328 928 2329 2330 917
+CONVEX 523 'GT_PK(2,2)' 928 2328 946 2331 2332 958
+CONVEX 524 'GT_PK(2,2)' 531 2326 509 2314 2333 549
+CONVEX 525 'GT_PK(2,2)' 688 2334 6 2335 2336 5
+CONVEX 526 'GT_PK(2,2)' 6 2334 688 2337 2338 1140
+CONVEX 527 'GT_PK(2,2)' 372 2339 354 2340 2341 386
+CONVEX 528 'GT_PK(2,2)' 398 2342 372 2343 2340 386
+CONVEX 529 'GT_PK(2,2)' 514 2344 496 2345 2346 474
+CONVEX 530 'GT_PK(2,2)' 514 2347 534 2348 2349 554
+CONVEX 531 'GT_PK(2,2)' 496 2350 454 2346 2351 474
+CONVEX 532 'GT_PK(2,2)' 534 2352 574 2349 2353 554
+CONVEX 533 'GT_PK(2,2)' 574 2354 600 2355 2356 616
+CONVEX 534 'GT_PK(2,2)' 438 2357 414 2358 2359 458
+CONVEX 535 'GT_PK(2,2)' 585 2360 603 2361 2362 549
+CONVEX 536 'GT_PK(2,2)' 603 2363 583 2362 2313 549
+CONVEX 537 'GT_PK(2,2)' 310 2364 1304 2365 2366 1302
+CONVEX 538 'GT_PK(2,2)' 671 2367 662 2368 2369 691
+CONVEX 539 'GT_PK(2,2)' 662 2370 683 2369 2371 691
+CONVEX 540 'GT_PK(2,2)' 0 2372 1312 2373 2374 462
+CONVEX 541 'GT_PK(2,2)' 603 2375 621 2363 2376 583
+CONVEX 542 'GT_PK(2,2)' 603 2360 585 2377 2378 625
+CONVEX 543 'GT_PK(2,2)' 439 2379 461 1725 2380 481
+CONVEX 544 'GT_PK(2,2)' 643 2381 603 2382 2377 625
+CONVEX 545 'GT_PK(2,2)' 1224 2383 529 2384 1827 1222
+CONVEX 546 'GT_PK(2,2)' 567 2385 1224 1490 2386 1226
+CONVEX 547 'GT_PK(2,2)' 529 2383 1224 1829 2385 567
+CONVEX 548 'GT_PK(2,2)' 621 2375 603 2387 2381 643
+CONVEX 549 'GT_PK(2,2)' 582 2388 620 2389 2390 602
+CONVEX 550 'GT_PK(2,2)' 582 2389 602 2391 2392 548
+CONVEX 551 'GT_PK(2,2)' 530 2393 582 2394 2391 548
+CONVEX 552 'GT_PK(2,2)' 545 2395 525 2396 1834 565
+CONVEX 553 'GT_PK(2,2)' 525 2395 545 2397 2398 505
+CONVEX 554 'GT_PK(2,2)' 545 2399 523 2398 2400 505
+CONVEX 555 'GT_PK(2,2)' 558 2401 592 2402 2403 572
+CONVEX 556 'GT_PK(2,2)' 523 2404 562 2405 2406 542
+CONVEX 557 'GT_PK(2,2)' 545 2407 562 2399 2404 523
+CONVEX 558 'GT_PK(2,2)' 598 2408 552 2409 2410 572
+CONVEX 559 'GT_PK(2,2)' 532 2411 552 2412 2413 570
+CONVEX 560 'GT_PK(2,2)' 552 2408 598 2413 2414 570
+CONVEX 561 'GT_PK(2,2)' 651 2415 608 2416 2417 629
+CONVEX 562 'GT_PK(2,2)' 592 2418 608 2419 2420 634
+CONVEX 563 'GT_PK(2,2)' 608 2415 651 2420 2421 634
+CONVEX 564 'GT_PK(2,2)' 868 2422 896 2423 2424 1153
+CONVEX 565 'GT_PK(2,2)' 790 2425 1146 2426 2427 762
+CONVEX 566 'GT_PK(2,2)' 614 2428 598 2429 2409 572
+CONVEX 567 'GT_PK(2,2)' 614 2430 592 2431 2419 634
+CONVEX 568 'GT_PK(2,2)' 592 2430 614 2403 2429 572
+CONVEX 569 'GT_PK(2,2)' 658 2432 636 2433 2434 616
+CONVEX 570 'GT_PK(2,2)' 783 2435 749 2436 1840 769
+CONVEX 571 'GT_PK(2,2)' 803 2437 783 2438 2436 769
+CONVEX 572 'GT_PK(2,2)' 785 2439 803 2440 2438 769
+CONVEX 573 'GT_PK(2,2)' 807 2441 785 2442 2443 771
+CONVEX 574 'GT_PK(2,2)' 651 2444 675 2421 2445 634
+CONVEX 575 'GT_PK(2,2)' 796 2446 781 1842 2447 815
+CONVEX 576 'GT_PK(2,2)' 815 2447 781 2448 2449 799
+CONVEX 577 'GT_PK(2,2)' 764 2450 732 2451 2452 746
+CONVEX 578 'GT_PK(2,2)' 781 2453 764 2454 2451 746
+CONVEX 579 'GT_PK(2,2)' 764 2453 781 2455 2446 796
+CONVEX 580 'GT_PK(2,2)' 764 2456 752 2450 2457 732
+CONVEX 581 'GT_PK(2,2)' 764 2455 796 2458 2459 778
+CONVEX 582 'GT_PK(2,2)' 752 2456 764 2460 2458 778
+CONVEX 583 'GT_PK(2,2)' 121 2461 149 2462 2463 135
+CONVEX 584 'GT_PK(2,2)' 121 2464 107 1850 2465 95
+CONVEX 585 'GT_PK(2,2)' 107 2464 121 2466 2462 135
+CONVEX 586 'GT_PK(2,2)' 79 2467 52 1851 2468 61
+CONVEX 587 'GT_PK(2,2)' 1183 2469 52 2470 2471 1181
+CONVEX 588 'GT_PK(2,2)' 52 2469 1183 2468 1866 61
+CONVEX 589 'GT_PK(2,2)' 68 2472 79 2473 1854 95
+CONVEX 590 'GT_PK(2,2)' 68 2474 52 2472 2467 79
+CONVEX 591 'GT_PK(2,2)' 379 2475 397 2290 2476 365
+CONVEX 592 'GT_PK(2,2)' 381 2477 397 2478 2479 413
+CONVEX 593 'GT_PK(2,2)' 397 2477 381 2476 2480 365
+CONVEX 594 'GT_PK(2,2)' 226 2481 240 2482 1918 214
+CONVEX 595 'GT_PK(2,2)' 198 2483 226 2484 2482 214
+CONVEX 596 'GT_PK(2,2)' 248 2485 236 1494 2486 222
+CONVEX 597 'GT_PK(2,2)' 236 2487 208 2486 2488 222
+CONVEX 598 'GT_PK(2,2)' 231 2489 218 2490 2491 207
+CONVEX 599 'GT_PK(2,2)' 218 2489 231 2492 2493 244
+CONVEX 600 'GT_PK(2,2)' 218 2494 188 2491 2495 207
+CONVEX 601 'GT_PK(2,2)' 188 2494 218 1879 2496 204
+CONVEX 602 'GT_PK(2,2)' 218 2492 244 2497 1873 234
+CONVEX 603 'GT_PK(2,2)' 204 2496 218 1875 2497 234
+CONVEX 604 'GT_PK(2,2)' 204 2498 192 1880 2499 176
+CONVEX 605 'GT_PK(2,2)' 208 2500 192 2488 2501 222
+CONVEX 606 'GT_PK(2,2)' 192 2498 204 2501 1874 222
+CONVEX 607 'GT_PK(2,2)' 345 2502 367 2503 1894 331
+CONVEX 608 'GT_PK(2,2)' 345 2504 381 2502 2505 367
+CONVEX 609 'GT_PK(2,2)' 317 2506 345 2507 2503 331
+CONVEX 610 'GT_PK(2,2)' 381 2504 345 2480 2508 365
+CONVEX 611 'GT_PK(2,2)' 370 2509 384 2510 2511 404
+CONVEX 612 'GT_PK(2,2)' 370 2512 354 2513 1823 336
+CONVEX 613 'GT_PK(2,2)' 370 2513 336 2514 1504 352
+CONVEX 614 'GT_PK(2,2)' 384 2509 370 2515 2514 352
+CONVEX 615 'GT_PK(2,2)' 354 2512 370 2341 2516 386
+CONVEX 616 'GT_PK(2,2)' 370 2510 404 2516 2517 386
+CONVEX 617 'GT_PK(2,2)' 217 2518 231 2519 2490 207
+CONVEX 618 'GT_PK(2,2)' 231 2520 259 2493 2521 244
+CONVEX 619 'GT_PK(2,2)' 259 2522 275 2521 1890 244
+CONVEX 620 'GT_PK(2,2)' 275 2522 259 2523 2524 289
+CONVEX 621 'GT_PK(2,2)' 289 2524 259 2525 2526 273
+CONVEX 622 'GT_PK(2,2)' 275 2527 303 1889 2528 290
+CONVEX 623 'GT_PK(2,2)' 319 2529 303 1896 2530 331
+CONVEX 624 'GT_PK(2,2)' 303 2529 319 2528 1510 290
+CONVEX 625 'GT_PK(2,2)' 303 2531 317 2530 2507 331
+CONVEX 626 'GT_PK(2,2)' 303 2527 275 2532 2523 289
+CONVEX 627 'GT_PK(2,2)' 317 2531 303 2533 2532 289
+CONVEX 628 'GT_PK(2,2)' 301 2534 289 2535 2525 273
+CONVEX 629 'GT_PK(2,2)' 301 2536 317 2534 2533 289
+CONVEX 630 'GT_PK(2,2)' 175 2537 188 2538 1877 157
+CONVEX 631 'GT_PK(2,2)' 188 2537 175 2495 2539 207
+CONVEX 632 'GT_PK(2,2)' 126 2540 142 1884 2541 157
+CONVEX 633 'GT_PK(2,2)' 142 2542 175 2541 2538 157
+CONVEX 634 'GT_PK(2,2)' 175 2542 142 2543 2544 159
+CONVEX 635 'GT_PK(2,2)' 142 2540 126 2545 1524 1193
+CONVEX 636 'GT_PK(2,2)' 1195 2546 142 2547 2545 1193
+CONVEX 637 'GT_PK(2,2)' 159 2544 142 2548 2546 1195
+CONVEX 638 'GT_PK(2,2)' 308 2549 326 2550 2551 296
+CONVEX 639 'GT_PK(2,2)' 326 2552 310 2551 2553 296
+CONVEX 640 'GT_PK(2,2)' 280 2554 296 2555 2556 266
+CONVEX 641 'GT_PK(2,2)' 280 2557 308 2554 2550 296
+CONVEX 642 'GT_PK(2,2)' 73 2558 59 2559 2274 90
+CONVEX 643 'GT_PK(2,2)' 89 2560 75 1914 2561 111
+CONVEX 644 'GT_PK(2,2)' 60 2562 75 2563 2564 50
+CONVEX 645 'GT_PK(2,2)' 228 2565 201 1919 2566 214
+CONVEX 646 'GT_PK(2,2)' 201 2565 228 2567 2568 212
+CONVEX 647 'GT_PK(2,2)' 228 2569 1298 2568 2570 212
+CONVEX 648 'GT_PK(2,2)' 1298 2571 1296 2570 2572 212
+CONVEX 649 'GT_PK(2,2)' 254 2573 240 2574 2575 266
+CONVEX 650 'GT_PK(2,2)' 254 2576 228 2573 1917 240
+CONVEX 651 'GT_PK(2,2)' 1298 2577 254 2578 2579 1300
+CONVEX 652 'GT_PK(2,2)' 254 2577 1298 2576 2569 228
+CONVEX 653 'GT_PK(2,2)' 123 2580 107 2581 2466 135
+CONVEX 654 'GT_PK(2,2)' 107 2580 123 2582 2583 96
+CONVEX 655 'GT_PK(2,2)' 139 2584 173 2585 1375 146
+CONVEX 656 'GT_PK(2,2)' 139 2586 161 2584 2587 173
+CONVEX 657 'GT_PK(2,2)' 139 2585 146 2588 2278 114
+CONVEX 658 'GT_PK(2,2)' 111 2589 139 1916 2588 114
+CONVEX 659 'GT_PK(2,2)' 609 2590 635 2591 2592 650
+CONVEX 660 'GT_PK(2,2)' 593 2593 635 1932 2590 609
+CONVEX 661 'GT_PK(2,2)' 635 2594 674 2592 1593 650
+CONVEX 662 'GT_PK(2,2)' 635 2593 593 2595 1923 615
+CONVEX 663 'GT_PK(2,2)' 657 2596 635 2035 2595 615
+CONVEX 664 'GT_PK(2,2)' 635 2596 657 2594 2029 674
+CONVEX 665 'GT_PK(2,2)' 577 2597 589 1929 2598 563
+CONVEX 666 'GT_PK(2,2)' 589 2597 577 2599 1931 609
+CONVEX 667 'GT_PK(2,2)' 589 2600 568 2598 2601 563
+CONVEX 668 'GT_PK(2,2)' 568 2600 589 2602 2603 606
+CONVEX 669 'GT_PK(2,2)' 684 2604 652 2605 2606 666
+CONVEX 670 'GT_PK(2,2)' 708 2607 684 2608 2605 666
+CONVEX 671 'GT_PK(2,2)' 684 2607 708 2609 2610 724
+CONVEX 672 'GT_PK(2,2)' 652 2604 684 1949 2611 1233
+CONVEX 673 'GT_PK(2,2)' 684 2612 1235 2611 2613 1233
+CONVEX 674 'GT_PK(2,2)' 684 2609 724 2612 1934 1235
+CONVEX 675 'GT_PK(2,2)' 582 2393 530 2614 2615 556
+CONVEX 676 'GT_PK(2,2)' 582 2614 556 2616 2617 594
+CONVEX 677 'GT_PK(2,2)' 620 2388 582 2618 2616 594
+CONVEX 678 'GT_PK(2,2)' 546 2619 584 2620 1672 604
+CONVEX 679 'GT_PK(2,2)' 526 2621 584 2622 2619 546
+CONVEX 680 'GT_PK(2,2)' 584 2621 526 2623 2624 548
+CONVEX 681 'GT_PK(2,2)' 586 2625 568 2626 2602 606
+CONVEX 682 'GT_PK(2,2)' 1009 2627 1260 2628 2629 1258
+CONVEX 683 'GT_PK(2,2)' 992 2630 1009 1959 2628 1258
+CONVEX 684 'GT_PK(2,2)' 956 2631 992 2632 1962 972
+CONVEX 685 'GT_PK(2,2)' 956 2633 948 2634 1562 934
+CONVEX 686 'GT_PK(2,2)' 948 2633 956 1566 2632 972
+CONVEX 687 'GT_PK(2,2)' 1247 2635 888 2636 2637 1249
+CONVEX 688 'GT_PK(2,2)' 602 1671 584 2392 2623 548
+CONVEX 689 'GT_PK(2,2)' 642 2638 620 2639 2640 663
+CONVEX 690 'GT_PK(2,2)' 682 2641 642 2642 2639 663
+CONVEX 691 'GT_PK(2,2)' 908 2643 918 2644 1563 930
+CONVEX 692 'GT_PK(2,2)' 888 2645 908 2637 2646 1249
+CONVEX 693 'GT_PK(2,2)' 908 2647 1251 2646 2648 1249
+CONVEX 694 'GT_PK(2,2)' 1251 2647 908 1556 2644 930
+CONVEX 695 'GT_PK(2,2)' 744 2649 708 2650 2651 726
+CONVEX 696 'GT_PK(2,2)' 708 2649 744 2610 2652 724
+CONVEX 697 'GT_PK(2,2)' 812 2653 792 2654 2655 800
+CONVEX 698 'GT_PK(2,2)' 828 2656 812 2657 2654 800
+CONVEX 699 'GT_PK(2,2)' 812 2656 828 2658 2659 838
+CONVEX 700 'GT_PK(2,2)' 812 2658 838 2660 1979 1243
+CONVEX 701 'GT_PK(2,2)' 792 2653 812 1970 2661 1241
+CONVEX 702 'GT_PK(2,2)' 812 2660 1243 2661 2662 1241
+CONVEX 703 'GT_PK(2,2)' 754 2663 772 1589 2664 740
+CONVEX 704 'GT_PK(2,2)' 1067 2665 1080 1982 2666 1266
+CONVEX 705 'GT_PK(2,2)' 1080 2667 1090 2668 1685 1269
+CONVEX 706 'GT_PK(2,2)' 1266 2666 1080 2669 2668 1269
+CONVEX 707 'GT_PK(2,2)' 1080 2670 1064 2667 2153 1090
+CONVEX 708 'GT_PK(2,2)' 1064 2670 1080 1990 2671 1051
+CONVEX 709 'GT_PK(2,2)' 1080 2665 1067 2671 2672 1051
+CONVEX 710 'GT_PK(2,2)' 710 2673 668 2674 2001 694
+CONVEX 711 'GT_PK(2,2)' 710 2674 694 2675 1595 740
+CONVEX 712 'GT_PK(2,2)' 551 2676 575 2677 1395 601
+CONVEX 713 'GT_PK(2,2)' 551 2678 535 2676 2004 575
+CONVEX 714 'GT_PK(2,2)' 720 2679 734 2680 2016 750
+CONVEX 715 'GT_PK(2,2)' 720 2681 700 2682 2025 679
+CONVEX 716 'GT_PK(2,2)' 599 2683 639 2684 2034 615
+CONVEX 717 'GT_PK(2,2)' 573 2685 599 1924 2684 615
+CONVEX 718 'GT_PK(2,2)' 599 2685 573 2686 2687 553
+CONVEX 719 'GT_PK(2,2)' 782 2688 816 2050 2689 802
+CONVEX 720 'GT_PK(2,2)' 802 2689 816 1623 2690 832
+CONVEX 721 'GT_PK(2,2)' 816 2691 846 2690 1637 832
+CONVEX 722 'GT_PK(2,2)' 816 2692 830 2691 2036 846
+CONVEX 723 'GT_PK(2,2)' 830 2692 816 2041 2693 798
+CONVEX 724 'GT_PK(2,2)' 816 2688 782 2693 2048 798
+CONVEX 725 'GT_PK(2,2)' 901 2694 873 2695 2055 882
+CONVEX 726 'GT_PK(2,2)' 772 2696 804 2697 2698 788
+CONVEX 727 'GT_PK(2,2)' 971 2699 959 1996 2700 942
+CONVEX 728 'GT_PK(2,2)' 959 2701 929 2700 2702 942
+CONVEX 729 'GT_PK(2,2)' 929 2701 959 2703 2704 947
+CONVEX 730 'GT_PK(2,2)' 929 2705 916 2706 2707 903
+CONVEX 731 'GT_PK(2,2)' 916 2708 933 2709 1963 906
+CONVEX 732 'GT_PK(2,2)' 933 2708 916 2710 2711 947
+CONVEX 733 'GT_PK(2,2)' 916 2705 929 2711 2703 947
+CONVEX 734 'GT_PK(2,2)' 242 2712 270 2713 2099 262
+CONVEX 735 'GT_PK(2,2)' 242 2714 1202 2715 2716 220
+CONVEX 736 'GT_PK(2,2)' 1204 2717 242 2063 2713 262
+CONVEX 737 'GT_PK(2,2)' 242 2717 1204 2714 2718 1202
+CONVEX 738 'GT_PK(2,2)' 406 2719 442 2720 2721 426
+CONVEX 739 'GT_PK(2,2)' 442 2719 406 2722 2070 424
+CONVEX 740 'GT_PK(2,2)' 442 2723 466 2721 1660 426
+CONVEX 741 'GT_PK(2,2)' 442 2724 484 2723 2076 466
+CONVEX 742 'GT_PK(2,2)' 406 2725 358 2072 2726 374
+CONVEX 743 'GT_PK(2,2)' 350 2727 362 2728 2729 374
+CONVEX 744 'GT_PK(2,2)' 322 2730 350 2084 2731 338
+CONVEX 745 'GT_PK(2,2)' 358 2732 350 2726 2728 374
+CONVEX 746 'GT_PK(2,2)' 350 2732 358 2731 2733 338
+CONVEX 747 'GT_PK(2,2)' 378 2734 392 2091 2735 362
+CONVEX 748 'GT_PK(2,2)' 392 2736 424 2737 2071 374
+CONVEX 749 'GT_PK(2,2)' 362 2735 392 2729 2737 374
+CONVEX 750 'GT_PK(2,2)' 396 2738 378 2739 2094 364
+CONVEX 751 'GT_PK(2,2)' 396 2740 380 2741 2089 412
+CONVEX 752 'GT_PK(2,2)' 380 2740 396 2085 2739 364
+CONVEX 753 'GT_PK(2,2)' 1211 2742 312 2743 2083 338
+CONVEX 754 'GT_PK(2,2)' 1211 2744 1209 2742 2112 312
+CONVEX 755 'GT_PK(2,2)' 620 2638 642 2390 1675 602
+CONVEX 756 'GT_PK(2,2)' 390 2745 406 2746 2720 426
+CONVEX 757 'GT_PK(2,2)' 1217 2747 390 2113 2746 426
+CONVEX 758 'GT_PK(2,2)' 390 2747 1217 2748 2749 1215
+CONVEX 759 'GT_PK(2,2)' 358 2750 390 2751 2748 1215
+CONVEX 760 'GT_PK(2,2)' 390 2750 358 2745 2725 406
+CONVEX 761 'GT_PK(2,2)' 495 2752 537 2126 2753 517
+CONVEX 762 'GT_PK(2,2)' 537 2754 573 2755 1921 559
+CONVEX 763 'GT_PK(2,2)' 517 2753 537 1666 2755 559
+CONVEX 764 'GT_PK(2,2)' 573 2754 537 2687 2756 553
+CONVEX 765 'GT_PK(2,2)' 1119 2757 1134 1737 2758 1126
+CONVEX 766 'GT_PK(2,2)' 1134 2759 1282 2758 2138 1126
+CONVEX 767 'GT_PK(2,2)' 1282 2759 1134 2760 2761 1284
+CONVEX 768 'GT_PK(2,2)' 1100 2762 1084 1691 2763 1107
+CONVEX 769 'GT_PK(2,2)' 1072 2764 1084 2155 2762 1100
+CONVEX 770 'GT_PK(2,2)' 1084 2765 1095 2763 1407 1107
+CONVEX 771 'GT_PK(2,2)' 1084 2764 1072 2766 2151 1056
+CONVEX 772 'GT_PK(2,2)' 1070 2767 1084 1753 2766 1056
+CONVEX 773 'GT_PK(2,2)' 1084 2767 1070 2765 1754 1095
+CONVEX 774 'GT_PK(2,2)' 1285 2768 1133 2769 2770 1283
+CONVEX 775 'GT_PK(2,2)' 1133 2768 1285 2771 2156 1129
+CONVEX 776 'GT_PK(2,2)' 1118 2772 1133 2171 2771 1129
+CONVEX 777 'GT_PK(2,2)' 642 2641 682 1688 2773 664
+CONVEX 778 'GT_PK(2,2)' 819 1332 829 2774 2775 853
+CONVEX 779 'GT_PK(2,2)' 1117 2776 1105 2777 2778 1096
+CONVEX 780 'GT_PK(2,2)' 1106 2779 1117 2312 2777 1096
+CONVEX 781 'GT_PK(2,2)' 1117 2780 1275 2781 2782 1277
+CONVEX 782 'GT_PK(2,2)' 1275 2780 1117 2783 2779 1106
+CONVEX 783 'GT_PK(2,2)' 1105 2784 1121 2785 2786 1114
+CONVEX 784 'GT_PK(2,2)' 1117 2787 1121 2776 2784 1105
+CONVEX 785 'GT_PK(2,2)' 1279 2788 1121 2789 2790 1277
+CONVEX 786 'GT_PK(2,2)' 1121 2787 1117 2790 2781 1277
+CONVEX 787 'GT_PK(2,2)' 1098 2791 1111 2792 2793 1087
+CONVEX 788 'GT_PK(2,2)' 1098 2794 1118 2791 2172 1111
+CONVEX 789 'GT_PK(2,2)' 1123 2795 1101 2176 2796 1111
+CONVEX 790 'GT_PK(2,2)' 1111 2796 1101 2793 2797 1087
+CONVEX 791 'GT_PK(2,2)' 1110 2798 1119 2799 1738 1097
+CONVEX 792 'GT_PK(2,2)' 1101 2800 1112 2801 2802 1091
+CONVEX 793 'GT_PK(2,2)' 1112 2800 1101 2803 2795 1123
+CONVEX 794 'GT_PK(2,2)' 1131 2804 1289 2805 1704 1135
+CONVEX 795 'GT_PK(2,2)' 560 2806 540 2807 1422 581
+CONVEX 796 'GT_PK(2,2)' 560 2808 520 2806 2188 540
+CONVEX 797 'GT_PK(2,2)' 520 2808 560 2079 2809 539
+CONVEX 798 'GT_PK(2,2)' 560 2810 579 2809 2180 539
+CONVEX 799 'GT_PK(2,2)' 613 2811 590 1714 2812 631
+CONVEX 800 'GT_PK(2,2)' 579 2813 590 2179 2811 613
+CONVEX 801 'GT_PK(2,2)' 560 2814 590 2810 2813 579
+CONVEX 802 'GT_PK(2,2)' 590 2815 611 2812 2816 631
+CONVEX 803 'GT_PK(2,2)' 611 2815 590 2817 2818 581
+CONVEX 804 'GT_PK(2,2)' 590 2814 560 2818 2807 581
+CONVEX 805 'GT_PK(2,2)' 459 2819 437 1726 2820 415
+CONVEX 806 'GT_PK(2,2)' 120 2821 138 2822 2823 110
+CONVEX 807 'GT_PK(2,2)' 829 1709 867 2775 2824 853
+CONVEX 808 'GT_PK(2,2)' 1238 1387 761 2825 1380 1236
+CONVEX 809 'GT_PK(2,2)' 741 2826 711 2827 2828 759
+CONVEX 810 'GT_PK(2,2)' 318 2829 304 2830 2831 334
+CONVEX 811 'GT_PK(2,2)' 304 2829 318 2832 2195 291
+CONVEX 812 'GT_PK(2,2)' 321 2833 353 2834 2201 334
+CONVEX 813 'GT_PK(2,2)' 304 2835 321 2831 2834 334
+CONVEX 814 'GT_PK(2,2)' 321 2835 304 2836 2837 293
+CONVEX 815 'GT_PK(2,2)' 281 2838 253 2839 2840 267
+CONVEX 816 'GT_PK(2,2)' 711 1573 727 2828 1701 759
+CONVEX 817 'GT_PK(2,2)' 274 2841 291 2842 2196 302
+CONVEX 818 'GT_PK(2,2)' 274 2843 261 2841 2844 291
+CONVEX 819 'GT_PK(2,2)' 332 2845 314 2846 2847 346
+CONVEX 820 'GT_PK(2,2)' 362 2848 332 2093 2846 346
+CONVEX 821 'GT_PK(2,2)' 332 2849 322 2850 2102 298
+CONVEX 822 'GT_PK(2,2)' 314 2845 332 2851 2850 298
+CONVEX 823 'GT_PK(2,2)' 350 2852 332 2727 2848 362
+CONVEX 824 'GT_PK(2,2)' 332 2852 350 2849 2730 322
+CONVEX 825 'GT_PK(2,2)' 318 2853 348 2192 2854 330
+CONVEX 826 'GT_PK(2,2)' 348 2853 318 2855 2830 334
+CONVEX 827 'GT_PK(2,2)' 369 2856 348 2202 2855 334
+CONVEX 828 'GT_PK(2,2)' 385 2857 371 2214 2858 405
+CONVEX 829 'GT_PK(2,2)' 371 2857 385 2859 2206 353
+CONVEX 830 'GT_PK(2,2)' 387 2860 419 2861 2190 405
+CONVEX 831 'GT_PK(2,2)' 371 2862 387 2858 2861 405
+CONVEX 832 'GT_PK(2,2)' 387 2862 371 2863 2864 355
+CONVEX 833 'GT_PK(2,2)' 473 2865 495 2866 2128 450
+CONVEX 834 'GT_PK(2,2)' 430 2867 473 2217 2866 450
+CONVEX 835 'GT_PK(2,2)' 491 2868 473 2081 2869 449
+CONVEX 836 'GT_PK(2,2)' 473 2867 430 2869 2222 449
+CONVEX 837 'GT_PK(2,2)' 1075 2870 1059 2871 2872 1049
+CONVEX 838 'GT_PK(2,2)' 1075 2873 1086 2870 2232 1059
+CONVEX 839 'GT_PK(2,2)' 1063 2874 1075 1740 2871 1049
+CONVEX 840 'GT_PK(2,2)' 1086 2873 1075 2230 2875 1097
+CONVEX 841 'GT_PK(2,2)' 30 2876 46 2254 2877 36
+CONVEX 842 'GT_PK(2,2)' 57 2878 46 2879 2880 69
+CONVEX 843 'GT_PK(2,2)' 46 2878 57 2877 2881 36
+CONVEX 844 'GT_PK(2,2)' 46 2882 55 2880 2883 69
+CONVEX 845 'GT_PK(2,2)' 55 2882 46 2884 2885 34
+CONVEX 846 'GT_PK(2,2)' 46 2876 30 2885 2258 34
+CONVEX 847 'GT_PK(2,2)' 21 2886 1168 2887 2888 17
+CONVEX 848 'GT_PK(2,2)' 1167 2889 21 1777 2890 15
+CONVEX 849 'GT_PK(2,2)' 1168 2886 21 2891 2889 1167
+CONVEX 850 'GT_PK(2,2)' 40 2892 53 2260 2893 63
+CONVEX 851 'GT_PK(2,2)' 1168 2894 1170 2888 2895 17
+CONVEX 852 'GT_PK(2,2)' 25 2896 1170 2263 2897 1172
+CONVEX 853 'GT_PK(2,2)' 1170 2896 25 2895 2898 17
+CONVEX 854 'GT_PK(2,2)' 711 2826 741 2899 2900 695
+CONVEX 855 'GT_PK(2,2)' 711 2899 695 1575 2901 669
+CONVEX 856 'GT_PK(2,2)' 723 2902 741 2903 2904 755
+CONVEX 857 'GT_PK(2,2)' 48 2905 27 2906 2267 39
+CONVEX 858 'GT_PK(2,2)' 59 2907 48 2272 2906 39
+CONVEX 859 'GT_PK(2,2)' 48 2908 73 2909 2910 60
+CONVEX 860 'GT_PK(2,2)' 73 2908 48 2558 2907 59
+CONVEX 861 'GT_PK(2,2)' 27 2911 14 2269 2912 20
+CONVEX 862 'GT_PK(2,2)' 14 2913 1164 2912 1778 20
+CONVEX 863 'GT_PK(2,2)' 1164 2913 14 2914 2915 1163
+CONVEX 864 'GT_PK(2,2)' 14 2916 1165 2915 2917 1163
+CONVEX 865 'GT_PK(2,2)' 138 2918 124 2823 2919 110
+CONVEX 866 'GT_PK(2,2)' 124 2918 138 2920 2921 155
+CONVEX 867 'GT_PK(2,2)' 97 2922 108 2923 2924 80
+CONVEX 868 'GT_PK(2,2)' 70 2925 97 2926 2923 80
+CONVEX 869 'GT_PK(2,2)' 97 2927 124 2922 2928 108
+CONVEX 870 'GT_PK(2,2)' 124 2927 97 2919 2929 110
+CONVEX 871 'GT_PK(2,2)' 56 2930 70 2931 2926 80
+CONVEX 872 'GT_PK(2,2)' 741 2932 773 2904 2933 755
+CONVEX 873 'GT_PK(2,2)' 741 2902 723 2900 2934 695
+CONVEX 874 'GT_PK(2,2)' 1173 2935 24 2936 2937 1175
+CONVEX 875 'GT_PK(2,2)' 773 2932 741 2938 2827 759
+CONVEX 876 'GT_PK(2,2)' 701 2939 723 2940 2941 739
+CONVEX 877 'GT_PK(2,2)' 723 2903 755 2941 2942 739
+CONVEX 878 'GT_PK(2,2)' 313 2943 339 2944 2945 323
+CONVEX 879 'GT_PK(2,2)' 339 2943 313 2946 2284 1210
+CONVEX 880 'GT_PK(2,2)' 339 2946 1210 2947 2948 1212
+CONVEX 881 'GT_PK(2,2)' 359 2949 339 2293 2947 1212
+CONVEX 882 'GT_PK(2,2)' 359 2950 407 2951 2952 375
+CONVEX 883 'GT_PK(2,2)' 407 2950 359 2953 2294 391
+CONVEX 884 'GT_PK(2,2)' 485 2954 525 2955 2397 505
+CONVEX 885 'GT_PK(2,2)' 525 2954 485 1833 2956 499
+CONVEX 886 'GT_PK(2,2)' 1218 2957 427 2958 2959 1216
+CONVEX 887 'GT_PK(2,2)' 427 2960 391 2959 1788 1216
+CONVEX 888 'GT_PK(2,2)' 427 2961 407 2960 2953 391
+CONVEX 889 'GT_PK(2,2)' 407 2961 427 2962 2963 443
+CONVEX 890 'GT_PK(2,2)' 1060 2964 1076 2965 2966 1091
+CONVEX 891 'GT_PK(2,2)' 1076 2967 1062 2968 2969 1087
+CONVEX 892 'GT_PK(2,2)' 1101 2970 1076 2797 2968 1087
+CONVEX 893 'GT_PK(2,2)' 1076 2970 1101 2966 2801 1091
+CONVEX 894 'GT_PK(2,2)' 1039 2971 1060 2972 2973 1023
+CONVEX 895 'GT_PK(2,2)' 1076 2974 1039 2967 2975 1062
+CONVEX 896 'GT_PK(2,2)' 1039 2974 1076 2971 2964 1060
+CONVEX 897 'GT_PK(2,2)' 1060 2976 1045 2973 2977 1023
+CONVEX 898 'GT_PK(2,2)' 1021 2978 1005 2979 2980 986
+CONVEX 899 'GT_PK(2,2)' 1093 2981 1105 2982 2785 1114
+CONVEX 900 'GT_PK(2,2)' 723 2939 701 2983 2984 675
+CONVEX 901 'GT_PK(2,2)' 695 2934 723 2985 2983 675
+CONVEX 902 'GT_PK(2,2)' 1267 2986 1268 2987 2988 1079
+CONVEX 903 'GT_PK(2,2)' 685 2248 653 2989 2990 1232
+CONVEX 904 'GT_PK(2,2)' 685 2989 1232 1369 2991 1234
+CONVEX 905 'GT_PK(2,2)' 1071 2992 1083 2993 2311 1096
+CONVEX 906 'GT_PK(2,2)' 1273 2994 1275 2995 2783 1106
+CONVEX 907 'GT_PK(2,2)' 1099 2996 1273 2318 2995 1106
+CONVEX 908 'GT_PK(2,2)' 1273 2996 1099 2997 2998 1271
+CONVEX 909 'GT_PK(2,2)' 607 1663 647 2999 3000 629
+CONVEX 910 'GT_PK(2,2)' 647 1577 669 3000 3001 629
+CONVEX 911 'GT_PK(2,2)' 623 1585 587 3002 1835 567
+CONVEX 912 'GT_PK(2,2)' 815 3003 845 1844 3004 826
+CONVEX 913 'GT_PK(2,2)' 845 3005 857 3004 3006 826
+CONVEX 914 'GT_PK(2,2)' 858 3007 847 3008 3009 874
+CONVEX 915 'GT_PK(2,2)' 886 3010 858 3011 3008 874
+CONVEX 916 'GT_PK(2,2)' 886 3012 914 3013 3014 900
+CONVEX 917 'GT_PK(2,2)' 857 3015 883 3016 3017 870
+CONVEX 918 'GT_PK(2,2)' 883 3018 899 3017 3019 870
+CONVEX 919 'GT_PK(2,2)' 928 3020 902 2330 3021 917
+CONVEX 920 'GT_PK(2,2)' 902 3020 928 3022 3023 914
+CONVEX 921 'GT_PK(2,2)' 902 3024 886 3025 3011 874
+CONVEX 922 'GT_PK(2,2)' 886 3024 902 3012 3022 914
+CONVEX 923 'GT_PK(2,2)' 631 3026 649 1419 3027 673
+CONVEX 924 'GT_PK(2,2)' 611 3028 649 2816 3026 631
+CONVEX 925 'GT_PK(2,2)' 925 3029 937 1698 3030 953
+CONVEX 926 'GT_PK(2,2)' 911 3031 937 2319 3029 925
+CONVEX 927 'GT_PK(2,2)' 923 3032 937 3033 3031 911
+CONVEX 928 'GT_PK(2,2)' 623 3034 1230 1584 3035 653
+CONVEX 929 'GT_PK(2,2)' 1230 3034 623 3036 3037 1228
+CONVEX 930 'GT_PK(2,2)' 1045 3038 1024 2977 3039 1023
+CONVEX 931 'GT_PK(2,2)' 1059 3040 1032 2872 3041 1049
+CONVEX 932 'GT_PK(2,2)' 1042 3042 1032 2234 3040 1059
+CONVEX 933 'GT_PK(2,2)' 1143 3043 1145 3044 3045 743
+CONVEX 934 'GT_PK(2,2)' 1143 3046 707 3047 3048 1141
+CONVEX 935 'GT_PK(2,2)' 707 3046 1143 3049 3044 743
+CONVEX 936 'GT_PK(2,2)' 809 3050 791 3051 3052 1147
+CONVEX 937 'GT_PK(2,2)' 623 3002 567 3037 1488 1228
+CONVEX 938 'GT_PK(2,2)' 653 3035 1230 2990 3053 1232
+CONVEX 939 'GT_PK(2,2)' 939 3054 1154 3055 3056 1156
+CONVEX 940 'GT_PK(2,2)' 1154 3054 939 3057 3058 923
+CONVEX 941 'GT_PK(2,2)' 885 3059 911 3060 2320 898
+CONVEX 942 'GT_PK(2,2)' 871 3061 885 1806 3060 898
+CONVEX 943 'GT_PK(2,2)' 885 3061 871 3062 1808 855
+CONVEX 944 'GT_PK(2,2)' 993 1412 977 3063 3064 957
+CONVEX 945 'GT_PK(2,2)' 973 3065 993 3066 3063 957
+CONVEX 946 'GT_PK(2,2)' 1257 1731 993 3067 3065 973
+CONVEX 947 'GT_PK(2,2)' 1253 3068 931 3069 2324 1250
+CONVEX 948 'GT_PK(2,2)' 931 3068 1253 3070 3071 949
+CONVEX 949 'GT_PK(2,2)' 1253 3072 1255 3071 3073 949
+CONVEX 950 'GT_PK(2,2)' 949 3074 973 3075 3066 957
+CONVEX 951 'GT_PK(2,2)' 1255 3076 973 3073 3074 949
+CONVEX 952 'GT_PK(2,2)' 921 3077 907 3078 3079 893
+CONVEX 953 'GT_PK(2,2)' 905 3080 921 3081 3078 893
+CONVEX 954 'GT_PK(2,2)' 919 3082 931 3083 3070 949
+CONVEX 955 'GT_PK(2,2)' 931 3082 919 2325 3084 909
+CONVEX 956 'GT_PK(2,2)' 865 3085 853 3086 3087 881
+CONVEX 957 'GT_PK(2,2)' 946 3088 974 2332 3089 958
+CONVEX 958 'GT_PK(2,2)' 974 3088 946 3090 3091 962
+CONVEX 959 'GT_PK(2,2)' 994 3092 974 3093 3090 962
+CONVEX 960 'GT_PK(2,2)' 974 3092 994 3094 3095 1007
+CONVEX 961 'GT_PK(2,2)' 1065 3096 1047 1761 2306 1033
+CONVEX 962 'GT_PK(2,2)' 1047 3096 1065 3097 3098 1073
+CONVEX 963 'GT_PK(2,2)' 1035 3099 1026 3100 3101 1052
+CONVEX 964 'GT_PK(2,2)' 1026 3099 1035 3102 3103 1007
+CONVEX 965 'GT_PK(2,2)' 1035 1769 1019 3103 3104 1007
+CONVEX 966 'GT_PK(2,2)' 1035 3100 1052 1768 3105 1066
+CONVEX 967 'GT_PK(2,2)' 1026 3106 1263 3101 3107 1052
+CONVEX 968 'GT_PK(2,2)' 414 3108 376 3109 3110 398
+CONVEX 969 'GT_PK(2,2)' 372 3111 376 3112 3113 356
+CONVEX 970 'GT_PK(2,2)' 376 3111 372 3110 2342 398
+CONVEX 971 'GT_PK(2,2)' 282 3114 310 3115 2365 1302
+CONVEX 972 'GT_PK(2,2)' 282 3116 254 3117 2574 266
+CONVEX 973 'GT_PK(2,2)' 296 3118 282 2556 3117 266
+CONVEX 974 'GT_PK(2,2)' 310 3114 282 2553 3118 296
+CONVEX 975 'GT_PK(2,2)' 282 3115 1302 3119 3120 1300
+CONVEX 976 'GT_PK(2,2)' 254 3116 282 2579 3119 1300
+CONVEX 977 'GT_PK(2,2)' 578 3121 591 3122 3123 561
+CONVEX 978 'GT_PK(2,2)' 610 3124 591 3125 3126 630
+CONVEX 979 'GT_PK(2,2)' 610 3127 632 3128 3129 594
+CONVEX 980 'GT_PK(2,2)' 518 3130 530 3131 3132 488
+CONVEX 981 'GT_PK(2,2)' 530 3130 518 2615 3133 556
+CONVEX 982 'GT_PK(2,2)' 541 3134 521 3135 3136 561
+CONVEX 983 'GT_PK(2,2)' 521 3134 541 3137 3138 502
+CONVEX 984 'GT_PK(2,2)' 541 3139 518 3138 3140 502
+CONVEX 985 'GT_PK(2,2)' 518 3139 541 3133 3141 556
+CONVEX 986 'GT_PK(2,2)' 538 3142 521 3143 3144 496
+CONVEX 987 'GT_PK(2,2)' 578 3145 538 3146 3147 554
+CONVEX 988 'GT_PK(2,2)' 538 3145 578 3148 3122 561
+CONVEX 989 'GT_PK(2,2)' 521 3142 538 3136 3148 561
+CONVEX 990 'GT_PK(2,2)' 538 3149 514 3147 2348 554
+CONVEX 991 'GT_PK(2,2)' 514 3149 538 2344 3143 496
+CONVEX 992 'GT_PK(2,2)' 478 3150 502 3151 3152 458
+CONVEX 993 'GT_PK(2,2)' 478 3153 521 3150 3137 502
+CONVEX 994 'GT_PK(2,2)' 521 3153 478 3144 3154 496
+CONVEX 995 'GT_PK(2,2)' 478 3155 454 3154 2350 496
+CONVEX 996 'GT_PK(2,2)' 454 3156 434 2351 3157 474
+CONVEX 997 'GT_PK(2,2)' 550 3158 574 3159 2352 534
+CONVEX 998 'GT_PK(2,2)' 574 3158 550 2354 3160 600
+CONVEX 999 'GT_PK(2,2)' 550 3161 532 3162 2412 570
+CONVEX 1000 'GT_PK(2,2)' 600 3160 550 3163 3162 570
+CONVEX 1001 'GT_PK(2,2)' 1312 3164 444 2374 3165 462
+CONVEX 1002 'GT_PK(2,2)' 502 3166 480 3152 3167 458
+CONVEX 1003 'GT_PK(2,2)' 480 3168 438 3167 2358 458
+CONVEX 1004 'GT_PK(2,2)' 518 3169 480 3140 3166 502
+CONVEX 1005 'GT_PK(2,2)' 480 3169 518 3170 3131 488
+CONVEX 1006 'GT_PK(2,2)' 342 3171 1304 3172 2364 310
+CONVEX 1007 'GT_PK(2,2)' 342 3173 326 3174 3175 356
+CONVEX 1008 'GT_PK(2,2)' 326 3173 342 2552 3172 310
+CONVEX 1009 'GT_PK(2,2)' 705 3176 707 3177 3049 743
+CONVEX 1010 'GT_PK(2,2)' 707 3176 705 3178 3179 683
+CONVEX 1011 'GT_PK(2,2)' 683 3179 705 2371 3180 691
+CONVEX 1012 'GT_PK(2,2)' 705 3181 729 3180 3182 691
+CONVEX 1013 'GT_PK(2,2)' 729 3181 705 3183 3177 743
+CONVEX 1014 'GT_PK(2,2)' 707 3184 689 3048 3185 1141
+CONVEX 1015 'GT_PK(2,2)' 633 3186 662 3187 2367 671
+CONVEX 1016 'GT_PK(2,2)' 649 3188 633 3189 3187 671
+CONVEX 1017 'GT_PK(2,2)' 633 3188 649 3190 3028 611
+CONVEX 1018 'GT_PK(2,2)' 1 3191 0 3192 2373 462
+CONVEX 1019 'GT_PK(2,2)' 1263 3106 1026 3193 1448 1261
+CONVEX 1020 'GT_PK(2,2)' 506 3194 1 3195 3192 462
+CONVEX 1021 'GT_PK(2,2)' 1052 3107 1263 3196 3197 1265
+CONVEX 1022 'GT_PK(2,2)' 797 1772 811 1801 3198 827
+CONVEX 1023 'GT_PK(2,2)' 811 3199 843 3198 1474 827
+CONVEX 1024 'GT_PK(2,2)' 811 3200 825 3199 2322 843
+CONVEX 1025 'GT_PK(2,2)' 811 1780 795 3200 3201 825
+CONVEX 1026 'GT_PK(2,2)' 395 3202 423 1720 3203 439
+CONVEX 1027 'GT_PK(2,2)' 423 3204 461 3203 2379 439
+CONVEX 1028 'GT_PK(2,2)' 423 3202 395 3205 3206 389
+CONVEX 1029 'GT_PK(2,2)' 409 3207 423 3208 3205 389
+CONVEX 1030 'GT_PK(2,2)' 461 3204 423 3209 3210 447
+CONVEX 1031 'GT_PK(2,2)' 423 3207 409 3210 3211 447
+CONVEX 1032 'GT_PK(2,2)' 795 1783 775 3212 3213 791
+CONVEX 1033 'GT_PK(2,2)' 409 3214 1309 3215 3216 1311
+CONVEX 1034 'GT_PK(2,2)' 1307 3217 1309 3218 3219 389
+CONVEX 1035 'GT_PK(2,2)' 1309 3214 409 3219 3208 389
+CONVEX 1036 'GT_PK(2,2)' 713 3220 690 3221 3222 670
+CONVEX 1037 'GT_PK(2,2)' 692 3223 713 3224 3221 670
+CONVEX 1038 'GT_PK(2,2)' 713 3223 692 3225 3226 736
+CONVEX 1039 'GT_PK(2,2)' 526 2622 546 3227 3228 506
+CONVEX 1040 'GT_PK(2,2)' 791 3213 775 3229 3230 757
+CONVEX 1041 'GT_PK(2,2)' 536 3231 558 3232 2402 572
+CONVEX 1042 'GT_PK(2,2)' 552 3233 536 2410 3232 572
+CONVEX 1043 'GT_PK(2,2)' 569 3234 562 3235 2407 545
+CONVEX 1044 'GT_PK(2,2)' 587 3236 569 1836 3237 565
+CONVEX 1045 'GT_PK(2,2)' 569 3235 545 3237 2396 565
+CONVEX 1046 'GT_PK(2,2)' 492 3238 514 3239 2345 474
+CONVEX 1047 'GT_PK(2,2)' 514 3238 492 2347 3240 534
+CONVEX 1048 'GT_PK(2,2)' 397 3241 429 2479 3242 413
+CONVEX 1049 'GT_PK(2,2)' 523 3243 483 2400 3244 505
+CONVEX 1050 'GT_PK(2,2)' 558 3245 516 3246 3247 542
+CONVEX 1051 'GT_PK(2,2)' 516 3248 536 3249 3250 494
+CONVEX 1052 'GT_PK(2,2)' 536 3248 516 3231 3245 558
+CONVEX 1053 'GT_PK(2,2)' 441 3251 483 3252 3253 457
+CONVEX 1054 'GT_PK(2,2)' 562 3254 576 2406 3255 542
+CONVEX 1055 'GT_PK(2,2)' 576 3256 558 3255 3246 542
+CONVEX 1056 'GT_PK(2,2)' 558 3256 576 2401 3257 592
+CONVEX 1057 'GT_PK(2,2)' 576 3258 608 3257 2418 592
+CONVEX 1058 'GT_PK(2,2)' 774 3259 752 3260 2460 778
+CONVEX 1059 'GT_PK(2,2)' 752 3259 774 3261 3262 736
+CONVEX 1060 'GT_PK(2,2)' 810 3263 796 3264 1843 826
+CONVEX 1061 'GT_PK(2,2)' 796 3263 810 2459 3265 778
+CONVEX 1062 'GT_PK(2,2)' 808 3266 824 3267 3268 840
+CONVEX 1063 'GT_PK(2,2)' 1148 3269 808 3270 3267 840
+CONVEX 1064 'GT_PK(2,2)' 808 3269 1148 3271 3272 1146
+CONVEX 1065 'GT_PK(2,2)' 790 3273 808 2425 3271 1146
+CONVEX 1066 'GT_PK(2,2)' 648 3274 692 3275 3224 670
+CONVEX 1067 'GT_PK(2,2)' 632 3276 648 3277 3275 670
+CONVEX 1068 'GT_PK(2,2)' 648 3276 632 3278 3127 610
+CONVEX 1069 'GT_PK(2,2)' 648 3278 610 3279 3125 630
+CONVEX 1070 'GT_PK(2,2)' 672 3280 648 3281 3279 630
+CONVEX 1071 'GT_PK(2,2)' 648 3280 672 3274 3282 692
+CONVEX 1072 'GT_PK(2,2)' 698 3283 680 3284 3285 718
+CONVEX 1073 'GT_PK(2,2)' 680 3283 698 3286 3287 658
+CONVEX 1074 'GT_PK(2,2)' 702 3288 735 3289 1838 718
+CONVEX 1075 'GT_PK(2,2)' 680 3290 702 3285 3289 718
+CONVEX 1076 'GT_PK(2,2)' 702 3290 680 3291 3292 660
+CONVEX 1077 'GT_PK(2,2)' 702 3293 721 3288 3294 735
+CONVEX 1078 'GT_PK(2,2)' 702 3291 660 3295 3296 678
+CONVEX 1079 'GT_PK(2,2)' 721 3293 702 3297 3295 678
+CONVEX 1080 'GT_PK(2,2)' 660 3298 638 3296 3299 678
+CONVEX 1081 'GT_PK(2,2)' 614 3300 638 2428 3301 598
+CONVEX 1082 'GT_PK(2,2)' 618 3302 600 3303 3163 570
+CONVEX 1083 'GT_PK(2,2)' 618 3304 638 3305 3298 660
+CONVEX 1084 'GT_PK(2,2)' 598 3306 618 2414 3303 570
+CONVEX 1085 'GT_PK(2,2)' 638 3304 618 3301 3306 598
+CONVEX 1086 'GT_PK(2,2)' 749 3307 731 1839 3308 718
+CONVEX 1087 'GT_PK(2,2)' 731 3309 698 3308 3284 718
+CONVEX 1088 'GT_PK(2,2)' 716 3310 732 3311 3312 696
+CONVEX 1089 'GT_PK(2,2)' 732 3310 716 2452 3313 746
+CONVEX 1090 'GT_PK(2,2)' 716 3314 731 3313 3315 746
+CONVEX 1091 'GT_PK(2,2)' 731 3314 716 3309 3316 698
+CONVEX 1092 'GT_PK(2,2)' 591 3317 612 3126 3318 630
+CONVEX 1093 'GT_PK(2,2)' 612 3317 591 3319 3121 578
+CONVEX 1094 'GT_PK(2,2)' 890 3320 907 3321 3322 917
+CONVEX 1095 'GT_PK(2,2)' 902 3323 890 3021 3321 917
+CONVEX 1096 'GT_PK(2,2)' 890 3323 902 3324 3025 874
+CONVEX 1097 'GT_PK(2,2)' 821 3325 785 3326 2441 807
+CONVEX 1098 'GT_PK(2,2)' 785 3325 821 2439 3327 803
+CONVEX 1099 'GT_PK(2,2)' 656 3328 614 3329 2431 634
+CONVEX 1100 'GT_PK(2,2)' 675 3330 656 2445 3329 634
+CONVEX 1101 'GT_PK(2,2)' 638 3331 656 3299 3332 678
+CONVEX 1102 'GT_PK(2,2)' 656 3331 638 3328 3300 614
+CONVEX 1103 'GT_PK(2,2)' 735 3333 751 1841 3334 769
+CONVEX 1104 'GT_PK(2,2)' 721 3335 751 3294 3333 735
+CONVEX 1105 'GT_PK(2,2)' 751 3336 785 3334 2440 769
+CONVEX 1106 'GT_PK(2,2)' 785 3336 751 2443 3337 771
+CONVEX 1107 'GT_PK(2,2)' 751 3338 739 3337 3339 771
+CONVEX 1108 'GT_PK(2,2)' 751 3335 721 3338 3340 739
+CONVEX 1109 'GT_PK(2,2)' 692 3341 714 3226 3342 736
+CONVEX 1110 'GT_PK(2,2)' 714 3343 752 3342 3261 736
+CONVEX 1111 'GT_PK(2,2)' 672 3344 714 3282 3341 692
+CONVEX 1112 'GT_PK(2,2)' 752 3343 714 2457 3345 732
+CONVEX 1113 'GT_PK(2,2)' 732 3345 714 3312 3346 696
+CONVEX 1114 'GT_PK(2,2)' 714 3344 672 3346 3347 696
+CONVEX 1115 'GT_PK(2,2)' 180 3348 208 3349 3350 196
+CONVEX 1116 'GT_PK(2,2)' 180 3351 192 3348 2500 208
+CONVEX 1117 'GT_PK(2,2)' 143 3352 131 1886 3353 115
+CONVEX 1118 'GT_PK(2,2)' 131 3354 147 3355 3356 118
+CONVEX 1119 'GT_PK(2,2)' 101 3357 131 1906 3355 118
+CONVEX 1120 'GT_PK(2,2)' 131 3357 101 3353 1903 115
+CONVEX 1121 'GT_PK(2,2)' 133 3358 149 3359 2461 121
+CONVEX 1122 'GT_PK(2,2)' 105 3360 133 1848 3359 121
+CONVEX 1123 'GT_PK(2,2)' 133 3360 105 3361 1846 118
+CONVEX 1124 'GT_PK(2,2)' 147 3362 133 3356 3361 118
+CONVEX 1125 'GT_PK(2,2)' 107 3363 81 2465 3364 95
+CONVEX 1126 'GT_PK(2,2)' 55 3365 81 2883 3366 69
+CONVEX 1127 'GT_PK(2,2)' 81 3367 96 3366 3368 69
+CONVEX 1128 'GT_PK(2,2)' 81 3363 107 3367 2582 96
+CONVEX 1129 'GT_PK(2,2)' 81 3369 68 3364 2473 95
+CONVEX 1130 'GT_PK(2,2)' 68 3369 81 3370 3365 55
+CONVEX 1131 'GT_PK(2,2)' 68 3371 44 2474 3372 52
+CONVEX 1132 'GT_PK(2,2)' 1179 3373 44 2246 3374 34
+CONVEX 1133 'GT_PK(2,2)' 44 3375 55 3374 2884 34
+CONVEX 1134 'GT_PK(2,2)' 44 3371 68 3375 3370 55
+CONVEX 1135 'GT_PK(2,2)' 44 3373 1179 3376 3377 1181
+CONVEX 1136 'GT_PK(2,2)' 52 3372 44 2471 3376 1181
+CONVEX 1137 'GT_PK(2,2)' 285 3378 313 3379 2944 323
+CONVEX 1138 'GT_PK(2,2)' 1208 3380 285 3381 3382 1206
+CONVEX 1139 'GT_PK(2,2)' 313 3378 285 2283 3380 1208
+CONVEX 1140 'GT_PK(2,2)' 240 3383 252 2575 3384 266
+CONVEX 1141 'GT_PK(2,2)' 226 3385 252 2481 3383 240
+CONVEX 1142 'GT_PK(2,2)' 252 3386 280 3384 2555 266
+CONVEX 1143 'GT_PK(2,2)' 210 3387 182 3388 3389 196
+CONVEX 1144 'GT_PK(2,2)' 210 3390 226 3391 2483 198
+CONVEX 1145 'GT_PK(2,2)' 182 3387 210 3392 3391 198
+CONVEX 1146 'GT_PK(2,2)' 236 3393 264 3394 3395 250
+CONVEX 1147 'GT_PK(2,2)' 264 3396 276 3397 1901 292
+CONVEX 1148 'GT_PK(2,2)' 276 3396 264 1900 3398 248
+CONVEX 1149 'GT_PK(2,2)' 264 3393 236 3398 2485 248
+CONVEX 1150 'GT_PK(2,2)' 257 3399 243 3400 3401 271
+CONVEX 1151 'GT_PK(2,2)' 1203 3402 243 3403 3404 221
+CONVEX 1152 'GT_PK(2,2)' 217 3405 247 2518 3406 231
+CONVEX 1153 'GT_PK(2,2)' 259 3407 247 2526 3408 273
+CONVEX 1154 'GT_PK(2,2)' 247 3407 259 3406 2520 231
+CONVEX 1155 'GT_PK(2,2)' 247 3409 257 3408 3410 273
+CONVEX 1156 'GT_PK(2,2)' 301 3411 329 2536 3412 317
+CONVEX 1157 'GT_PK(2,2)' 345 3413 329 2508 3414 365
+CONVEX 1158 'GT_PK(2,2)' 329 3413 345 3412 2506 317
+CONVEX 1159 'GT_PK(2,2)' 329 3415 347 3414 2289 365
+CONVEX 1160 'GT_PK(2,2)' 329 3416 315 3415 3417 347
+CONVEX 1161 'GT_PK(2,2)' 315 3416 329 3418 3411 301
+CONVEX 1162 'GT_PK(2,2)' 775 3419 737 3230 3420 757
+CONVEX 1163 'GT_PK(2,2)' 195 3421 217 3422 2519 207
+CONVEX 1164 'GT_PK(2,2)' 175 3423 195 2539 3422 207
+CONVEX 1165 'GT_PK(2,2)' 195 3423 175 3424 2543 159
+CONVEX 1166 'GT_PK(2,2)' 1197 3425 159 3426 2548 1195
+CONVEX 1167 'GT_PK(2,2)' 775 1786 753 3419 3427 737
+CONVEX 1168 'GT_PK(2,2)' 967 1810 951 3428 3429 939
+CONVEX 1169 'GT_PK(2,2)' 939 3429 951 3058 3430 923
+CONVEX 1170 'GT_PK(2,2)' 1201 3431 1203 3432 3403 221
+CONVEX 1171 'GT_PK(2,2)' 951 3433 937 3430 3032 923
+CONVEX 1172 'GT_PK(2,2)' 951 1798 965 3433 3434 937
+CONVEX 1173 'GT_PK(2,2)' 924 3435 910 3436 3437 899
+CONVEX 1174 'GT_PK(2,2)' 910 3435 924 3438 1464 936
+CONVEX 1175 'GT_PK(2,2)' 340 3439 326 3440 2549 308
+CONVEX 1176 'GT_PK(2,2)' 372 3441 340 2339 3442 354
+CONVEX 1177 'GT_PK(2,2)' 340 3441 372 3443 3112 356
+CONVEX 1178 'GT_PK(2,2)' 326 3439 340 3175 3443 356
+CONVEX 1179 'GT_PK(2,2)' 354 3442 340 1824 3444 324
+CONVEX 1180 'GT_PK(2,2)' 340 3440 308 3444 3445 324
+CONVEX 1181 'GT_PK(2,2)' 306 3446 278 1502 3447 292
+CONVEX 1182 'GT_PK(2,2)' 278 3448 264 3447 3397 292
+CONVEX 1183 'GT_PK(2,2)' 264 3448 278 3395 3449 250
+CONVEX 1184 'GT_PK(2,2)' 308 3450 294 3445 3451 324
+CONVEX 1185 'GT_PK(2,2)' 280 3452 294 2557 3450 308
+CONVEX 1186 'GT_PK(2,2)' 294 3453 306 3451 1486 324
+CONVEX 1187 'GT_PK(2,2)' 294 3454 278 3453 3446 306
+CONVEX 1188 'GT_PK(2,2)' 75 3455 91 2561 3456 111
+CONVEX 1189 'GT_PK(2,2)' 73 3457 91 2910 3458 60
+CONVEX 1190 'GT_PK(2,2)' 91 3455 75 3458 2562 60
+CONVEX 1191 'GT_PK(2,2)' 75 3459 64 2564 3460 50
+CONVEX 1192 'GT_PK(2,2)' 64 3459 75 3461 2560 89
+CONVEX 1193 'GT_PK(2,2)' 93 3462 120 3463 2822 110
+CONVEX 1194 'GT_PK(2,2)' 154 3464 170 3465 3466 137
+CONVEX 1195 'GT_PK(2,2)' 154 3467 123 3468 2581 135
+CONVEX 1196 'GT_PK(2,2)' 123 3467 154 3469 3465 137
+CONVEX 1197 'GT_PK(2,2)' 184 3470 201 3471 2567 212
+CONVEX 1198 'GT_PK(2,2)' 184 3472 170 3470 3473 201
+CONVEX 1199 'GT_PK(2,2)' 96 3474 82 3368 3475 69
+CONVEX 1200 'GT_PK(2,2)' 82 3476 57 3475 2879 69
+CONVEX 1201 'GT_PK(2,2)' 57 3476 82 3477 3478 65
+CONVEX 1202 'GT_PK(2,2)' 82 3479 92 3478 3480 65
+CONVEX 1203 'GT_PK(2,2)' 92 2162 76 3480 3481 65
+CONVEX 1204 'GT_PK(2,2)' 53 3482 76 2893 3483 63
+CONVEX 1205 'GT_PK(2,2)' 76 3482 53 3481 3484 65
+CONVEX 1206 'GT_PK(2,2)' 1292 3485 160 3486 1366 172
+CONVEX 1207 'GT_PK(2,2)' 1294 3487 1292 3488 3486 172
+CONVEX 1208 'GT_PK(2,2)' 160 3485 1292 3489 3490 1291
+CONVEX 1209 'GT_PK(2,2)' 127 3491 106 3492 3493 90
+CONVEX 1210 'GT_PK(2,2)' 106 3494 73 3493 2559 90
+CONVEX 1211 'GT_PK(2,2)' 106 3495 91 3494 3457 73
+CONVEX 1212 'GT_PK(2,2)' 139 3496 128 2586 3497 161
+CONVEX 1213 'GT_PK(2,2)' 128 3498 106 3499 3491 127
+CONVEX 1214 'GT_PK(2,2)' 128 3496 139 3500 2589 111
+CONVEX 1215 'GT_PK(2,2)' 91 3501 128 3456 3500 111
+CONVEX 1216 'GT_PK(2,2)' 106 3498 128 3495 3501 91
+CONVEX 1217 'GT_PK(2,2)' 628 3502 589 3503 2599 609
+CONVEX 1218 'GT_PK(2,2)' 628 3503 609 3504 2591 650
+CONVEX 1219 'GT_PK(2,2)' 668 3505 628 2002 3504 650
+CONVEX 1220 'GT_PK(2,2)' 589 3502 628 2603 3506 606
+CONVEX 1221 'GT_PK(2,2)' 544 3507 522 3508 1926 563
+CONVEX 1222 'GT_PK(2,2)' 568 3509 544 2601 3508 563
+CONVEX 1223 'GT_PK(2,2)' 686 3510 708 3511 2608 666
+CONVEX 1224 'GT_PK(2,2)' 708 3510 686 2651 3512 726
+CONVEX 1225 'GT_PK(2,2)' 686 3513 710 3512 3514 726
+CONVEX 1226 'GT_PK(2,2)' 710 3513 686 2673 3515 668
+CONVEX 1227 'GT_PK(2,2)' 1227 3516 566 3517 3518 1229
+CONVEX 1228 'GT_PK(2,2)' 1227 3519 1225 3516 3520 566
+CONVEX 1229 'GT_PK(2,2)' 912 1826 924 3521 3436 899
+CONVEX 1230 'GT_PK(2,2)' 1048 3522 1074 3523 3524 1062
+CONVEX 1231 'GT_PK(2,2)' 1225 3525 528 3520 3526 566
+CONVEX 1232 'GT_PK(2,2)' 528 3527 498 3528 2074 524
+CONVEX 1233 'GT_PK(2,2)' 498 3527 528 2068 3529 1223
+CONVEX 1234 'GT_PK(2,2)' 528 3525 1225 3529 3530 1223
+CONVEX 1235 'GT_PK(2,2)' 586 3531 622 3532 3533 566
+CONVEX 1236 'GT_PK(2,2)' 566 3533 622 3518 3534 1229
+CONVEX 1237 'GT_PK(2,2)' 622 3535 1231 3534 3536 1229
+CONVEX 1238 'GT_PK(2,2)' 1231 3535 622 1947 3537 652
+CONVEX 1239 'GT_PK(2,2)' 652 3538 626 2606 3539 666
+CONVEX 1240 'GT_PK(2,2)' 626 3540 586 3541 2626 606
+CONVEX 1241 'GT_PK(2,2)' 622 3542 626 3537 3538 652
+CONVEX 1242 'GT_PK(2,2)' 626 3542 622 3540 3531 586
+CONVEX 1243 'GT_PK(2,2)' 586 3543 564 2625 3544 568
+CONVEX 1244 'GT_PK(2,2)' 544 3545 564 3546 3547 524
+CONVEX 1245 'GT_PK(2,2)' 564 3545 544 3544 3509 568
+CONVEX 1246 'GT_PK(2,2)' 564 3548 528 3547 3528 524
+CONVEX 1247 'GT_PK(2,2)' 564 3543 586 3549 3532 566
+CONVEX 1248 'GT_PK(2,2)' 528 3548 564 3526 3549 566
+CONVEX 1249 'GT_PK(2,2)' 1025 3550 1009 3551 3552 995
+CONVEX 1250 'GT_PK(2,2)' 1008 3553 1025 3554 3551 995
+CONVEX 1251 'GT_PK(2,2)' 1009 3550 1025 2627 3555 1260
+CONVEX 1252 'GT_PK(2,2)' 1025 3556 1053 3557 1580 1262
+CONVEX 1253 'GT_PK(2,2)' 1260 3555 1025 3558 3557 1262
+CONVEX 1254 'GT_PK(2,2)' 956 3559 976 2631 3560 992
+CONVEX 1255 'GT_PK(2,2)' 1009 3561 976 3552 3562 995
+CONVEX 1256 'GT_PK(2,2)' 976 3561 1009 3560 2630 992
+CONVEX 1257 'GT_PK(2,2)' 1247 3563 866 2635 3564 888
+CONVEX 1258 'GT_PK(2,2)' 838 3565 866 1981 3566 1245
+CONVEX 1259 'GT_PK(2,2)' 866 3563 1247 3566 3567 1245
+CONVEX 1260 'GT_PK(2,2)' 866 3568 828 3569 3570 852
+CONVEX 1261 'GT_PK(2,2)' 828 3568 866 2659 3565 838
+CONVEX 1262 'GT_PK(2,2)' 908 3571 894 2643 3572 918
+CONVEX 1263 'GT_PK(2,2)' 918 3572 894 1549 3573 904
+CONVEX 1264 'GT_PK(2,2)' 894 3574 878 3573 1655 904
+CONVEX 1265 'GT_PK(2,2)' 776 3575 744 3576 2650 726
+CONVEX 1266 'GT_PK(2,2)' 776 3577 788 3578 3579 800
+CONVEX 1267 'GT_PK(2,2)' 792 3580 776 2655 3578 800
+CONVEX 1268 'GT_PK(2,2)' 744 3575 776 3581 3580 792
+CONVEX 1269 'GT_PK(2,2)' 724 3582 760 1936 3583 1237
+CONVEX 1270 'GT_PK(2,2)' 744 3584 760 2652 3582 724
+CONVEX 1271 'GT_PK(2,2)' 760 3585 1239 3583 3586 1237
+CONVEX 1272 'GT_PK(2,2)' 760 3587 792 3585 1968 1239
+CONVEX 1273 'GT_PK(2,2)' 760 3584 744 3587 3581 792
+CONVEX 1274 'GT_PK(2,2)' 788 3588 818 3579 3589 800
+CONVEX 1275 'GT_PK(2,2)' 818 3590 828 3589 2657 800
+CONVEX 1276 'GT_PK(2,2)' 804 3591 818 2698 3588 788
+CONVEX 1277 'GT_PK(2,2)' 828 3590 818 3570 3592 852
+CONVEX 1278 'GT_PK(2,2)' 975 3593 1008 3594 3554 995
+CONVEX 1279 'GT_PK(2,2)' 959 3595 975 2704 3596 947
+CONVEX 1280 'GT_PK(2,2)' 1067 3597 1036 2672 3598 1051
+CONVEX 1281 'GT_PK(2,2)' 1036 3597 1067 3599 1985 1053
+CONVEX 1282 'GT_PK(2,2)' 1036 3600 1020 3598 1998 1051
+CONVEX 1283 'GT_PK(2,2)' 1036 3601 1008 3600 3602 1020
+CONVEX 1284 'GT_PK(2,2)' 1025 3603 1036 3556 3599 1053
+CONVEX 1285 'GT_PK(2,2)' 1036 3603 1025 3601 3553 1008
+CONVEX 1286 'GT_PK(2,2)' 433 3604 453 1727 3605 471
+CONVEX 1287 'GT_PK(2,2)' 453 3606 493 3605 3607 471
+CONVEX 1288 'GT_PK(2,2)' 421 3608 453 2215 3604 433
+CONVEX 1289 'GT_PK(2,2)' 453 3609 475 3606 3610 493
+CONVEX 1290 'GT_PK(2,2)' 453 3608 421 3611 2211 435
+CONVEX 1291 'GT_PK(2,2)' 475 3609 453 3612 3611 435
+CONVEX 1292 'GT_PK(2,2)' 491 3613 511 3614 3615 533
+CONVEX 1293 'GT_PK(2,2)' 511 3616 551 3615 3617 533
+CONVEX 1294 'GT_PK(2,2)' 511 3613 491 3618 2080 471
+CONVEX 1295 'GT_PK(2,2)' 493 3619 511 3607 3618 471
+CONVEX 1296 'GT_PK(2,2)' 511 3619 493 3620 3621 535
+CONVEX 1297 'GT_PK(2,2)' 551 3616 511 2678 3620 535
+CONVEX 1298 'GT_PK(2,2)' 720 3622 703 2679 3623 734
+CONVEX 1299 'GT_PK(2,2)' 734 3623 703 2020 3624 719
+CONVEX 1300 'GT_PK(2,2)' 661 3625 703 2032 3626 679
+CONVEX 1301 'GT_PK(2,2)' 703 3622 720 3626 2682 679
+CONVEX 1302 'GT_PK(2,2)' 719 3624 703 2011 3627 681
+CONVEX 1303 'GT_PK(2,2)' 703 3625 661 3627 1632 681
+CONVEX 1304 'GT_PK(2,2)' 720 3628 738 2681 3629 700
+CONVEX 1305 'GT_PK(2,2)' 738 3630 770 3631 3632 754
+CONVEX 1306 'GT_PK(2,2)' 770 3630 738 2023 3633 750
+CONVEX 1307 'GT_PK(2,2)' 738 3628 720 3633 2680 750
+CONVEX 1308 'GT_PK(2,2)' 738 3631 754 3634 1590 722
+CONVEX 1309 'GT_PK(2,2)' 700 3629 738 2028 3634 722
+CONVEX 1310 'GT_PK(2,2)' 533 3635 571 3636 3637 553
+CONVEX 1311 'GT_PK(2,2)' 571 3638 599 3637 2686 553
+CONVEX 1312 'GT_PK(2,2)' 571 3639 551 3640 2677 601
+CONVEX 1313 'GT_PK(2,2)' 551 3639 571 3617 3635 533
+CONVEX 1314 'GT_PK(2,2)' 929 3641 915 2702 3642 942
+CONVEX 1315 'GT_PK(2,2)' 915 3641 929 3643 2706 903
+CONVEX 1316 'GT_PK(2,2)' 913 3644 901 3645 2695 882
+CONVEX 1317 'GT_PK(2,2)' 913 3646 925 3647 1699 941
+CONVEX 1318 'GT_PK(2,2)' 913 3645 882 3648 1805 898
+CONVEX 1319 'GT_PK(2,2)' 925 3646 913 2321 3648 898
+CONVEX 1320 'GT_PK(2,2)' 834 3649 822 1653 3650 806
+CONVEX 1321 'GT_PK(2,2)' 850 3651 822 2056 3649 834
+CONVEX 1322 'GT_PK(2,2)' 786 3652 772 3653 2663 754
+CONVEX 1323 'GT_PK(2,2)' 786 3654 804 3652 2696 772
+CONVEX 1324 'GT_PK(2,2)' 786 3655 822 3654 3656 804
+CONVEX 1325 'GT_PK(2,2)' 822 3655 786 3650 3657 806
+CONVEX 1326 'GT_PK(2,2)' 786 3658 770 3657 2022 806
+CONVEX 1327 'GT_PK(2,2)' 770 3658 786 3632 3653 754
+CONVEX 1328 'GT_PK(2,2)' 916 3659 891 2707 3660 903
+CONVEX 1329 'GT_PK(2,2)' 875 3661 891 1638 3662 860
+CONVEX 1330 'GT_PK(2,2)' 903 3660 891 3663 3661 875
+CONVEX 1331 'GT_PK(2,2)' 891 3664 876 3662 1402 860
+CONVEX 1332 'GT_PK(2,2)' 891 3665 906 3664 1956 876
+CONVEX 1333 'GT_PK(2,2)' 891 3659 916 3665 2709 906
+CONVEX 1334 'GT_PK(2,2)' 209 3666 193 3667 3668 181
+CONVEX 1335 'GT_PK(2,2)' 197 3669 209 3670 3667 181
+CONVEX 1336 'GT_PK(2,2)' 167 3671 197 3672 3670 181
+CONVEX 1337 'GT_PK(2,2)' 94 3673 108 3674 3675 122
+CONVEX 1338 'GT_PK(2,2)' 108 3673 94 2924 3676 80
+CONVEX 1339 'GT_PK(2,2)' 148 3677 167 3678 3672 181
+CONVEX 1340 'GT_PK(2,2)' 62 3679 87 3680 3681 72
+CONVEX 1341 'GT_PK(2,2)' 87 3679 62 3682 3683 78
+CONVEX 1342 'GT_PK(2,2)' 1062 3524 1074 2969 3684 1087
+CONVEX 1343 'GT_PK(2,2)' 1074 3685 1085 3686 3687 1098
+CONVEX 1344 'GT_PK(2,2)' 1074 3686 1098 3684 2792 1087
+CONVEX 1345 'GT_PK(2,2)' 1074 3522 1048 3688 1819 1058
+CONVEX 1346 'GT_PK(2,2)' 1085 3685 1074 3689 3688 1058
+CONVEX 1347 'GT_PK(2,2)' 85 3690 1186 3691 3692 72
+CONVEX 1348 'GT_PK(2,2)' 1186 3690 85 3693 3694 1189
+CONVEX 1349 'GT_PK(2,2)' 1202 3695 1200 2716 3696 220
+CONVEX 1350 'GT_PK(2,2)' 1041 3697 1068 1822 3698 1058
+CONVEX 1351 'GT_PK(2,2)' 1041 1817 1013 3699 3700 1027
+CONVEX 1352 'GT_PK(2,2)' 1068 3697 1041 3701 3702 1054
+CONVEX 1353 'GT_PK(2,2)' 242 3703 256 2712 3704 270
+CONVEX 1354 'GT_PK(2,2)' 442 3705 464 2724 3706 484
+CONVEX 1355 'GT_PK(2,2)' 464 3705 442 3707 2722 424
+CONVEX 1356 'GT_PK(2,2)' 392 3708 440 2736 3709 424
+CONVEX 1357 'GT_PK(2,2)' 464 3710 440 3711 3712 482
+CONVEX 1358 'GT_PK(2,2)' 440 3710 464 3709 3707 424
+CONVEX 1359 'GT_PK(2,2)' 1213 3713 1211 3714 2743 338
+CONVEX 1360 'GT_PK(2,2)' 358 3715 1213 2733 3714 338
+CONVEX 1361 'GT_PK(2,2)' 1213 3715 358 3716 2751 1215
+CONVEX 1362 'GT_PK(2,2)' 1041 3699 1027 3702 3717 1054
+CONVEX 1363 'GT_PK(2,2)' 969 3718 984 3719 3720 1001
+CONVEX 1364 'GT_PK(2,2)' 984 3718 969 3721 1855 954
+CONVEX 1365 'GT_PK(2,2)' 982 1472 969 3722 3719 1001
+CONVEX 1366 'GT_PK(2,2)' 1098 3723 1108 2794 3724 1118
+CONVEX 1367 'GT_PK(2,2)' 1108 3725 1093 3726 2982 1114
+CONVEX 1368 'GT_PK(2,2)' 1121 3727 1128 2786 3728 1114
+CONVEX 1369 'GT_PK(2,2)' 1128 3727 1121 3729 2788 1279
+CONVEX 1370 'GT_PK(2,2)' 1281 3730 1128 3731 3729 1279
+CONVEX 1371 'GT_PK(2,2)' 1078 3732 1060 3733 2965 1091
+CONVEX 1372 'GT_PK(2,2)' 1078 3734 1045 3732 2976 1060
+CONVEX 1373 'GT_PK(2,2)' 1122 3735 1131 3736 2805 1135
+CONVEX 1374 'GT_PK(2,2)' 1131 3735 1122 3737 3738 1113
+CONVEX 1375 'GT_PK(2,2)' 1088 3739 1110 3740 2799 1097
+CONVEX 1376 'GT_PK(2,2)' 1075 3741 1088 2875 3740 1097
+CONVEX 1377 'GT_PK(2,2)' 1088 3742 1063 3743 2302 1077
+CONVEX 1378 'GT_PK(2,2)' 1088 3741 1075 3742 2874 1063
+CONVEX 1379 'GT_PK(2,2)' 1092 3744 1103 3745 3746 1113
+CONVEX 1380 'GT_PK(2,2)' 1112 3747 1103 2802 3748 1091
+CONVEX 1381 'GT_PK(2,2)' 1103 3749 1078 3748 3733 1091
+CONVEX 1382 'GT_PK(2,2)' 1078 3749 1103 3750 3744 1092
+CONVEX 1383 'GT_PK(2,2)' 1124 3751 1131 3752 3737 1113
+CONVEX 1384 'GT_PK(2,2)' 1103 3753 1124 3746 3752 1113
+CONVEX 1385 'GT_PK(2,2)' 1124 3753 1103 3754 3747 1112
+CONVEX 1386 'GT_PK(2,2)' 437 3755 455 3756 3757 419
+CONVEX 1387 'GT_PK(2,2)' 419 3757 455 2189 3758 435
+CONVEX 1388 'GT_PK(2,2)' 455 3759 475 3758 3612 435
+CONVEX 1389 'GT_PK(2,2)' 475 3759 455 3760 3761 497
+CONVEX 1390 'GT_PK(2,2)' 497 3762 479 2077 3763 520
+CONVEX 1391 'GT_PK(2,2)' 479 3764 437 3765 2819 459
+CONVEX 1392 'GT_PK(2,2)' 455 3766 479 3761 3762 497
+CONVEX 1393 'GT_PK(2,2)' 479 3766 455 3764 3755 437
+CONVEX 1394 'GT_PK(2,2)' 479 3767 503 3763 2187 520
+CONVEX 1395 'GT_PK(2,2)' 503 3767 479 2182 3765 459
+CONVEX 1396 'GT_PK(2,2)' 130 3768 152 3769 3770 120
+CONVEX 1397 'GT_PK(2,2)' 152 3771 138 3770 2821 120
+CONVEX 1398 'GT_PK(2,2)' 152 3768 130 3772 2277 164
+CONVEX 1399 'GT_PK(2,2)' 213 3773 1297 3774 3775 1299
+CONVEX 1400 'GT_PK(2,2)' 229 1951 213 3776 3774 1299
+CONVEX 1401 'GT_PK(2,2)' 1301 3777 255 3778 3779 1299
+CONVEX 1402 'GT_PK(2,2)' 255 3780 229 3779 3776 1299
+CONVEX 1403 'GT_PK(2,2)' 253 3781 241 2840 3782 267
+CONVEX 1404 'GT_PK(2,2)' 241 3783 255 3782 3784 267
+CONVEX 1405 'GT_PK(2,2)' 255 3783 241 3780 3785 229
+CONVEX 1406 'GT_PK(2,2)' 161 3786 1293 2587 3787 173
+CONVEX 1407 'GT_PK(2,2)' 1293 3788 1295 3787 3789 173
+CONVEX 1408 'GT_PK(2,2)' 1293 3786 161 3790 3791 1291
+CONVEX 1409 'GT_PK(2,2)' 950 3792 964 3793 3794 980
+CONVEX 1410 'GT_PK(2,2)' 964 3792 950 1467 3795 936
+CONVEX 1411 'GT_PK(2,2)' 980 3794 964 3796 3797 996
+CONVEX 1412 'GT_PK(2,2)' 964 1475 982 3797 3798 996
+CONVEX 1413 'GT_PK(2,2)' 1013 1812 999 3799 3800 980
+CONVEX 1414 'GT_PK(2,2)' 1013 3799 980 3801 3796 996
+CONVEX 1415 'GT_PK(2,2)' 1027 3700 1013 3802 3801 996
+CONVEX 1416 'GT_PK(2,2)' 1157 3803 1155 3804 3805 938
+CONVEX 1417 'GT_PK(2,2)' 1157 3804 938 3806 3807 960
+CONVEX 1418 'GT_PK(2,2)' 1157 3806 960 3808 3809 1158
+CONVEX 1419 'GT_PK(2,2)' 922 3810 1155 3811 3812 896
+CONVEX 1420 'GT_PK(2,2)' 896 3812 1155 2424 3813 1153
+CONVEX 1421 'GT_PK(2,2)' 277 3814 304 3815 2832 291
+CONVEX 1422 'GT_PK(2,2)' 277 3816 261 3817 2198 249
+CONVEX 1423 'GT_PK(2,2)' 261 3816 277 2844 3815 291
+CONVEX 1424 'GT_PK(2,2)' 304 3814 277 2837 3818 293
+CONVEX 1425 'GT_PK(2,2)' 225 3819 197 3820 3821 211
+CONVEX 1426 'GT_PK(2,2)' 197 3819 225 3669 3822 209
+CONVEX 1427 'GT_PK(2,2)' 279 3823 269 3824 3825 295
+CONVEX 1428 'GT_PK(2,2)' 269 3826 281 3825 3827 295
+CONVEX 1429 'GT_PK(2,2)' 281 3826 269 2838 3828 253
+CONVEX 1430 'GT_PK(2,2)' 265 3829 279 3830 3831 293
+CONVEX 1431 'GT_PK(2,2)' 265 3832 277 3833 3817 249
+CONVEX 1432 'GT_PK(2,2)' 277 3832 265 3818 3830 293
+CONVEX 1433 'GT_PK(2,2)' 279 3834 307 3831 3835 293
+CONVEX 1434 'GT_PK(2,2)' 307 3836 321 3835 2836 293
+CONVEX 1435 'GT_PK(2,2)' 307 3834 279 3837 3824 295
+CONVEX 1436 'GT_PK(2,2)' 297 3838 281 3839 2839 267
+CONVEX 1437 'GT_PK(2,2)' 1303 3840 1305 3841 3842 311
+CONVEX 1438 'GT_PK(2,2)' 938 3805 1155 3843 3810 922
+CONVEX 1439 'GT_PK(2,2)' 309 3844 325 3845 3846 295
+CONVEX 1440 'GT_PK(2,2)' 281 3847 309 3827 3845 295
+CONVEX 1441 'GT_PK(2,2)' 288 3848 274 3849 2842 302
+CONVEX 1442 'GT_PK(2,2)' 274 3848 288 3850 3851 258
+CONVEX 1443 'GT_PK(2,2)' 364 3852 328 2087 3853 344
+CONVEX 1444 'GT_PK(2,2)' 328 3852 364 3854 2095 346
+CONVEX 1445 'GT_PK(2,2)' 314 3855 328 2847 3854 346
+CONVEX 1446 'GT_PK(2,2)' 300 3856 328 3857 3855 314
+CONVEX 1447 'GT_PK(2,2)' 348 3858 366 2854 3859 330
+CONVEX 1448 'GT_PK(2,2)' 380 3860 366 2088 3861 400
+CONVEX 1449 'GT_PK(2,2)' 330 3859 366 3862 3863 344
+CONVEX 1450 'GT_PK(2,2)' 366 3860 380 3863 2086 344
+CONVEX 1451 'GT_PK(2,2)' 382 3864 416 3865 2223 400
+CONVEX 1452 'GT_PK(2,2)' 366 3866 382 3861 3865 400
+CONVEX 1453 'GT_PK(2,2)' 382 3866 366 3867 3858 348
+CONVEX 1454 'GT_PK(2,2)' 382 3867 348 3868 2856 369
+CONVEX 1455 'GT_PK(2,2)' 382 3868 369 3869 2204 402
+CONVEX 1456 'GT_PK(2,2)' 416 3864 382 2210 3869 402
+CONVEX 1457 'GT_PK(2,2)' 373 3870 387 3871 2863 355
+CONVEX 1458 'GT_PK(2,2)' 395 3872 361 3206 3873 389
+CONVEX 1459 'GT_PK(2,2)' 361 3874 1307 3873 3218 389
+CONVEX 1460 'GT_PK(2,2)' 473 3875 513 2865 3876 495
+CONVEX 1461 'GT_PK(2,2)' 537 3877 513 2756 3878 553
+CONVEX 1462 'GT_PK(2,2)' 513 3877 537 3876 2752 495
+CONVEX 1463 'GT_PK(2,2)' 513 3879 533 3878 3636 553
+CONVEX 1464 'GT_PK(2,2)' 513 3880 491 3879 3614 533
+CONVEX 1465 'GT_PK(2,2)' 513 3875 473 3880 2868 491
+CONVEX 1466 'GT_PK(2,2)' 309 3881 327 3882 3883 341
+CONVEX 1467 'GT_PK(2,2)' 327 3881 309 3884 3885 297
+CONVEX 1468 'GT_PK(2,2)' 1180 3886 1178 3887 3888 45
+CONVEX 1469 'GT_PK(2,2)' 325 3844 309 3889 3882 341
+CONVEX 1470 'GT_PK(2,2)' 297 3885 309 3838 3847 281
+CONVEX 1471 'GT_PK(2,2)' 21 3890 29 2890 3891 15
+CONVEX 1472 'GT_PK(2,2)' 29 3890 21 3892 3893 40
+CONVEX 1473 'GT_PK(2,2)' 29 3894 20 3891 1779 15
+CONVEX 1474 'GT_PK(2,2)' 29 3895 39 3894 2268 20
+CONVEX 1475 'GT_PK(2,2)' 39 3895 29 2273 3896 49
+CONVEX 1476 'GT_PK(2,2)' 29 3892 40 3896 2259 49
+CONVEX 1477 'GT_PK(2,2)' 42 3897 25 3898 2262 36
+CONVEX 1478 'GT_PK(2,2)' 53 3899 42 3484 3900 65
+CONVEX 1479 'GT_PK(2,2)' 57 3901 42 2881 3898 36
+CONVEX 1480 'GT_PK(2,2)' 42 3901 57 3900 3477 65
+CONVEX 1481 'GT_PK(2,2)' 1165 3902 16 3903 3904 1166
+CONVEX 1482 'GT_PK(2,2)' 48 3905 38 2905 3906 27
+CONVEX 1483 'GT_PK(2,2)' 28 3907 38 3908 3909 50
+CONVEX 1484 'GT_PK(2,2)' 38 3910 60 3909 2563 50
+CONVEX 1485 'GT_PK(2,2)' 38 3905 48 3910 2909 60
+CONVEX 1486 'GT_PK(2,2)' 41 3911 28 3912 3908 50
+CONVEX 1487 'GT_PK(2,2)' 64 3913 41 3460 3912 50
+CONVEX 1488 'GT_PK(2,2)' 41 3913 64 3914 3915 54
+CONVEX 1489 'GT_PK(2,2)' 35 3916 56 3917 3918 45
+CONVEX 1490 'GT_PK(2,2)' 1178 3919 35 3888 3917 45
+CONVEX 1491 'GT_PK(2,2)' 1177 3920 35 3921 3919 1178
+CONVEX 1492 'GT_PK(2,2)' 56 3922 47 2930 3923 70
+CONVEX 1493 'GT_PK(2,2)' 35 3924 47 3916 3922 56
+CONVEX 1494 'GT_PK(2,2)' 327 3884 297 3925 3926 311
+CONVEX 1495 'GT_PK(2,2)' 327 3927 343 3928 3929 357
+CONVEX 1496 'GT_PK(2,2)' 339 3930 351 2945 3931 323
+CONVEX 1497 'GT_PK(2,2)' 351 3932 375 3933 3934 363
+CONVEX 1498 'GT_PK(2,2)' 351 3935 359 3932 2951 375
+CONVEX 1499 'GT_PK(2,2)' 351 3930 339 3935 2949 359
+CONVEX 1500 'GT_PK(2,2)' 1220 3936 467 3937 3938 1218
+CONVEX 1501 'GT_PK(2,2)' 467 3939 427 3938 2957 1218
+CONVEX 1502 'GT_PK(2,2)' 467 3936 1220 3940 1795 499
+CONVEX 1503 'GT_PK(2,2)' 485 3941 467 2956 3940 499
+CONVEX 1504 'GT_PK(2,2)' 467 3941 485 3942 3943 443
+CONVEX 1505 'GT_PK(2,2)' 427 3939 467 2963 3942 443
+CONVEX 1506 'GT_PK(2,2)' 867 3944 889 3945 2295 881
+CONVEX 1507 'GT_PK(2,2)' 853 2824 867 3087 3945 881
+CONVEX 1508 'GT_PK(2,2)' 867 1711 1244 3946 3947 1246
+CONVEX 1509 'GT_PK(2,2)' 889 3944 867 2300 3946 1246
+CONVEX 1510 'GT_PK(2,2)' 1005 3948 978 2980 3949 986
+CONVEX 1511 'GT_PK(2,2)' 910 3950 922 3951 3811 896
+CONVEX 1512 'GT_PK(2,2)' 922 3950 910 3952 3438 936
+CONVEX 1513 'GT_PK(2,2)' 960 3953 966 3954 3955 986
+CONVEX 1514 'GT_PK(2,2)' 960 3956 978 3809 3957 1158
+CONVEX 1515 'GT_PK(2,2)' 978 3956 960 3949 3954 986
+CONVEX 1516 'GT_PK(2,2)' 1015 3958 1027 3959 3802 996
+CONVEX 1517 'GT_PK(2,2)' 1044 3960 1015 3961 3962 1029
+CONVEX 1518 'GT_PK(2,2)' 1044 3963 1071 3964 3965 1054
+CONVEX 1519 'GT_PK(2,2)' 1027 3966 1044 3717 3964 1054
+CONVEX 1520 'GT_PK(2,2)' 1044 3966 1027 3960 3958 1015
+CONVEX 1521 'GT_PK(2,2)' 1001 3967 1018 3968 2308 1029
+CONVEX 1522 'GT_PK(2,2)' 1015 3969 1001 3962 3968 1029
+CONVEX 1523 'GT_PK(2,2)' 1021 3970 1037 2978 3971 1005
+CONVEX 1524 'GT_PK(2,2)' 1039 3972 1037 2975 3973 1062
+CONVEX 1525 'GT_PK(2,2)' 1093 3974 1082 2981 3975 1105
+CONVEX 1526 'GT_PK(2,2)' 1071 3976 1082 3965 3977 1054
+CONVEX 1527 'GT_PK(2,2)' 1105 3975 1082 2778 3978 1096
+CONVEX 1528 'GT_PK(2,2)' 1082 3976 1071 3978 2993 1096
+CONVEX 1529 'GT_PK(2,2)' 914 3979 926 3014 3980 900
+CONVEX 1530 'GT_PK(2,2)' 1268 3981 1089 2988 3982 1079
+CONVEX 1531 'GT_PK(2,2)' 1089 3983 1099 3984 2316 1073
+CONVEX 1532 'GT_PK(2,2)' 1099 3983 1089 2998 3985 1271
+CONVEX 1533 'GT_PK(2,2)' 1089 3981 1268 3985 3986 1271
+CONVEX 1534 'GT_PK(2,2)' 1065 3987 1089 3098 3984 1073
+CONVEX 1535 'GT_PK(2,2)' 1089 3987 1065 3982 1759 1079
+CONVEX 1536 'GT_PK(2,2)' 1047 3988 1057 2309 3989 1029
+CONVEX 1537 'GT_PK(2,2)' 1057 3990 1044 3989 3961 1029
+CONVEX 1538 'GT_PK(2,2)' 1044 3990 1057 3963 3991 1071
+CONVEX 1539 'GT_PK(2,2)' 1071 3991 1057 2992 3992 1083
+CONVEX 1540 'GT_PK(2,2)' 1057 3988 1047 3993 3097 1073
+CONVEX 1541 'GT_PK(2,2)' 1083 3992 1057 2317 3993 1073
+CONVEX 1542 'GT_PK(2,2)' 845 3994 831 3995 3996 858
+CONVEX 1543 'GT_PK(2,2)' 831 3997 847 3996 3007 858
+CONVEX 1544 'GT_PK(2,2)' 831 3998 815 3999 2448 799
+CONVEX 1545 'GT_PK(2,2)' 831 3994 845 3998 3003 815
+CONVEX 1546 'GT_PK(2,2)' 821 4000 833 3327 4001 803
+CONVEX 1547 'GT_PK(2,2)' 833 4000 821 4002 4003 849
+CONVEX 1548 'GT_PK(2,2)' 845 4004 872 3005 4005 857
+CONVEX 1549 'GT_PK(2,2)' 872 4006 883 4005 3015 857
+CONVEX 1550 'GT_PK(2,2)' 883 4006 872 4007 4008 900
+CONVEX 1551 'GT_PK(2,2)' 872 4004 845 4009 3995 858
+CONVEX 1552 'GT_PK(2,2)' 872 4010 886 4008 3013 900
+CONVEX 1553 'GT_PK(2,2)' 886 4010 872 3010 4009 858
+CONVEX 1554 'GT_PK(2,2)' 899 4011 884 3019 4012 870
+CONVEX 1555 'GT_PK(2,2)' 910 4013 884 3437 4011 899
+CONVEX 1556 'GT_PK(2,2)' 868 4014 884 2422 4015 896
+CONVEX 1557 'GT_PK(2,2)' 884 4013 910 4015 3951 896
+CONVEX 1558 'GT_PK(2,2)' 742 4016 1142 4017 4018 706
+CONVEX 1559 'GT_PK(2,2)' 704 4019 742 4020 4017 706
+CONVEX 1560 'GT_PK(2,2)' 1150 4021 1148 4022 3270 840
+CONVEX 1561 'GT_PK(2,2)' 1150 4023 868 4024 2423 1153
+CONVEX 1562 'GT_PK(2,2)' 868 4023 1150 4025 4022 840
+CONVEX 1563 'GT_PK(2,2)' 343 3927 327 4026 3925 311
+CONVEX 1564 'GT_PK(2,2)' 341 3883 327 4027 3928 357
+CONVEX 1565 'GT_PK(2,2)' 325 4028 337 4029 4030 307
+CONVEX 1566 'GT_PK(2,2)' 937 3434 965 3030 4031 953
+CONVEX 1567 'GT_PK(2,2)' 953 4031 965 1442 4032 983
+CONVEX 1568 'GT_PK(2,2)' 965 1793 997 4032 1733 983
+CONVEX 1569 'GT_PK(2,2)' 325 4029 307 3846 3837 295
+CONVEX 1570 'GT_PK(2,2)' 978 4033 1160 3957 4034 1158
+CONVEX 1571 'GT_PK(2,2)' 1160 4033 978 4035 4036 990
+CONVEX 1572 'GT_PK(2,2)' 990 4037 1011 4038 4039 1023
+CONVEX 1573 'GT_PK(2,2)' 1011 4040 1039 4039 2972 1023
+CONVEX 1574 'GT_PK(2,2)' 1011 4041 978 4042 3948 1005
+CONVEX 1575 'GT_PK(2,2)' 978 4041 1011 4036 4037 990
+CONVEX 1576 'GT_PK(2,2)' 1037 4043 1011 3971 4042 1005
+CONVEX 1577 'GT_PK(2,2)' 1011 4043 1037 4040 3972 1039
+CONVEX 1578 'GT_PK(2,2)' 998 4044 990 4045 4038 1023
+CONVEX 1579 'GT_PK(2,2)' 1024 4046 998 3039 4045 1023
+CONVEX 1580 'GT_PK(2,2)' 1012 4047 1024 4048 4049 1040
+CONVEX 1581 'GT_PK(2,2)' 1012 4048 1040 4050 2304 1038
+CONVEX 1582 'GT_PK(2,2)' 1006 4051 1012 4052 4050 1038
+CONVEX 1583 'GT_PK(2,2)' 1032 1455 1022 3041 4053 1049
+CONVEX 1584 'GT_PK(2,2)' 1049 4053 1022 1742 4054 1038
+CONVEX 1585 'GT_PK(2,2)' 1022 4055 1006 4054 4052 1038
+CONVEX 1586 'GT_PK(2,2)' 1006 4055 1022 4056 1458 987
+CONVEX 1587 'GT_PK(2,2)' 1014 1452 1032 4057 3042 1042
+CONVEX 1588 'GT_PK(2,2)' 997 1791 1014 1734 4058 1028
+CONVEX 1589 'GT_PK(2,2)' 1014 4057 1042 4058 2237 1028
+CONVEX 1590 'GT_PK(2,2)' 1145 4059 763 3045 4060 743
+CONVEX 1591 'GT_PK(2,2)' 763 4061 729 4060 3183 743
+CONVEX 1592 'GT_PK(2,2)' 763 4059 1145 4062 4063 1147
+CONVEX 1593 'GT_PK(2,2)' 791 4064 763 3052 4062 1147
+CONVEX 1594 'GT_PK(2,2)' 729 4061 763 4065 4066 757
+CONVEX 1595 'GT_PK(2,2)' 763 4064 791 4066 3229 757
+CONVEX 1596 'GT_PK(2,2)' 693 4067 649 4068 3189 671
+CONVEX 1597 'GT_PK(2,2)' 649 4067 693 3027 4069 673
+CONVEX 1598 'GT_PK(2,2)' 715 4070 697 4071 1602 673
+CONVEX 1599 'GT_PK(2,2)' 715 4072 733 4070 2013 697
+CONVEX 1600 'GT_PK(2,2)' 693 4073 715 4069 4071 673
+CONVEX 1601 'GT_PK(2,2)' 715 4073 693 4074 4075 737
+CONVEX 1602 'GT_PK(2,2)' 825 3201 795 4076 4077 809
+CONVEX 1603 'GT_PK(2,2)' 795 3212 791 4077 3050 809
+CONVEX 1604 'GT_PK(2,2)' 961 4078 939 4079 3055 1156
+CONVEX 1605 'GT_PK(2,2)' 1159 4080 961 4081 4079 1156
+CONVEX 1606 'GT_PK(2,2)' 1149 4082 809 4083 3051 1147
+CONVEX 1607 'GT_PK(2,2)' 841 4084 825 4085 4076 809
+CONVEX 1608 'GT_PK(2,2)' 1149 4086 841 4082 4085 809
+CONVEX 1609 'GT_PK(2,2)' 841 4086 1149 4087 4088 1151
+CONVEX 1610 'GT_PK(2,2)' 825 4084 841 2323 4089 855
+CONVEX 1611 'GT_PK(2,2)' 869 4090 1151 4091 4092 1152
+CONVEX 1612 'GT_PK(2,2)' 869 4093 885 4094 3062 855
+CONVEX 1613 'GT_PK(2,2)' 841 4095 869 4089 4094 855
+CONVEX 1614 'GT_PK(2,2)' 869 4095 841 4090 4087 1151
+CONVEX 1615 'GT_PK(2,2)' 935 4096 921 4097 3080 905
+CONVEX 1616 'GT_PK(2,2)' 919 4098 935 4099 4097 905
+CONVEX 1617 'GT_PK(2,2)' 945 4100 935 4101 4102 957
+CONVEX 1618 'GT_PK(2,2)' 935 4100 945 4096 4103 921
+CONVEX 1619 'GT_PK(2,2)' 935 4104 949 4102 3075 957
+CONVEX 1620 'GT_PK(2,2)' 935 4098 919 4104 3083 949
+CONVEX 1621 'GT_PK(2,2)' 895 4105 881 4106 2296 909
+CONVEX 1622 'GT_PK(2,2)' 919 4107 895 3084 4106 909
+CONVEX 1623 'GT_PK(2,2)' 895 4108 865 4105 3086 881
+CONVEX 1624 'GT_PK(2,2)' 895 4107 919 4109 4099 905
+CONVEX 1625 'GT_PK(2,2)' 865 4110 879 4111 4112 851
+CONVEX 1626 'GT_PK(2,2)' 879 4113 863 4112 4114 851
+CONVEX 1627 'GT_PK(2,2)' 879 4115 895 4116 4109 905
+CONVEX 1628 'GT_PK(2,2)' 895 4115 879 4108 4110 865
+CONVEX 1629 'GT_PK(2,2)' 879 4116 905 4117 3081 893
+CONVEX 1630 'GT_PK(2,2)' 863 4113 879 4118 4117 893
+CONVEX 1631 'GT_PK(2,2)' 865 4119 837 3085 4120 853
+CONVEX 1632 'GT_PK(2,2)' 837 4121 823 4122 4123 805
+CONVEX 1633 'GT_PK(2,2)' 837 4119 865 4124 4111 851
+CONVEX 1634 'GT_PK(2,2)' 823 4121 837 4125 4124 851
+CONVEX 1635 'GT_PK(2,2)' 1267 4126 1066 4127 4128 1265
+CONVEX 1636 'GT_PK(2,2)' 1066 4126 1267 1757 2987 1079
+CONVEX 1637 'GT_PK(2,2)' 974 4129 988 3089 4130 958
+CONVEX 1638 'GT_PK(2,2)' 988 4131 970 4130 4132 958
+CONVEX 1639 'GT_PK(2,2)' 1019 4133 988 3104 4134 1007
+CONVEX 1640 'GT_PK(2,2)' 988 4129 974 4134 3094 1007
+CONVEX 1641 'GT_PK(2,2)' 977 1414 994 4135 3093 962
+CONVEX 1642 'GT_PK(2,2)' 977 4136 945 3064 4101 957
+CONVEX 1643 'GT_PK(2,2)' 945 4136 977 4137 4135 962
+CONVEX 1644 'GT_PK(2,2)' 325 3889 341 4138 4139 355
+CONVEX 1645 'GT_PK(2,2)' 337 4028 325 4140 4138 355
+CONVEX 1646 'GT_PK(2,2)' 239 4141 227 4142 4143 253
+CONVEX 1647 'GT_PK(2,2)' 669 4144 651 3001 2416 629
+CONVEX 1648 'GT_PK(2,2)' 739 2942 755 3339 4145 771
+CONVEX 1649 'GT_PK(2,2)' 438 4146 394 2357 4147 414
+CONVEX 1650 'GT_PK(2,2)' 394 4148 376 4147 3108 414
+CONVEX 1651 'GT_PK(2,2)' 422 4149 394 4150 4146 438
+CONVEX 1652 'GT_PK(2,2)' 690 4151 663 3222 4152 670
+CONVEX 1653 'GT_PK(2,2)' 663 4153 632 4152 3277 670
+CONVEX 1654 'GT_PK(2,2)' 591 4154 580 3123 4155 561
+CONVEX 1655 'GT_PK(2,2)' 580 4156 541 4155 3135 561
+CONVEX 1656 'GT_PK(2,2)' 580 4154 591 4157 3124 610
+CONVEX 1657 'GT_PK(2,2)' 541 4156 580 3141 4158 556
+CONVEX 1658 'GT_PK(2,2)' 580 4157 610 4159 3128 594
+CONVEX 1659 'GT_PK(2,2)' 556 4158 580 2617 4159 594
+CONVEX 1660 'GT_PK(2,2)' 478 4160 436 3155 4161 454
+CONVEX 1661 'GT_PK(2,2)' 436 4162 414 4163 3109 398
+CONVEX 1662 'GT_PK(2,2)' 414 4162 436 2359 4164 458
+CONVEX 1663 'GT_PK(2,2)' 436 4160 478 4164 3151 458
+CONVEX 1664 'GT_PK(2,2)' 418 4165 434 4166 3156 454
+CONVEX 1665 'GT_PK(2,2)' 436 4167 418 4161 4166 454
+CONVEX 1666 'GT_PK(2,2)' 404 4168 418 2517 4169 386
+CONVEX 1667 'GT_PK(2,2)' 434 4165 418 4170 4168 404
+CONVEX 1668 'GT_PK(2,2)' 418 4171 398 4169 2343 386
+CONVEX 1669 'GT_PK(2,2)' 418 4167 436 4171 4163 398
+CONVEX 1670 'GT_PK(2,2)' 550 4172 510 3161 4173 532
+CONVEX 1671 'GT_PK(2,2)' 510 4174 492 4175 4176 470
+CONVEX 1672 'GT_PK(2,2)' 510 4172 550 4177 3159 534
+CONVEX 1673 'GT_PK(2,2)' 492 4174 510 3240 4177 534
+CONVEX 1674 'GT_PK(2,2)' 444 4178 1310 4179 4180 408
+CONVEX 1675 'GT_PK(2,2)' 1310 4178 444 4181 3164 1312
+CONVEX 1676 'GT_PK(2,2)' 1310 4182 1308 4180 4183 408
+CONVEX 1677 'GT_PK(2,2)' 269 4184 239 3828 4142 253
+CONVEX 1678 'GT_PK(2,2)' 239 4185 251 4186 4187 225
+CONVEX 1679 'GT_PK(2,2)' 422 4188 446 4189 4190 408
+CONVEX 1680 'GT_PK(2,2)' 446 4191 444 4190 4179 408
+CONVEX 1681 'GT_PK(2,2)' 444 4191 446 4192 4193 468
+CONVEX 1682 'GT_PK(2,2)' 376 4194 360 3113 4195 356
+CONVEX 1683 'GT_PK(2,2)' 360 4196 342 4195 3174 356
+CONVEX 1684 'GT_PK(2,2)' 394 4197 360 4148 4194 376
+CONVEX 1685 'GT_PK(2,2)' 665 4198 625 4199 4200 645
+CONVEX 1686 'GT_PK(2,2)' 689 4201 665 4202 4199 645
+CONVEX 1687 'GT_PK(2,2)' 665 4203 707 4204 3178 683
+CONVEX 1688 'GT_PK(2,2)' 665 4201 689 4203 3184 707
+CONVEX 1689 'GT_PK(2,2)' 662 4205 643 2370 4206 683
+CONVEX 1690 'GT_PK(2,2)' 643 4207 665 4206 4204 683
+CONVEX 1691 'GT_PK(2,2)' 665 4207 643 4198 2382 625
+CONVEX 1692 'GT_PK(2,2)' 12 4208 689 4209 4202 645
+CONVEX 1693 'GT_PK(2,2)' 11 4210 12 4211 4209 645
+CONVEX 1694 'GT_PK(2,2)' 239 4186 225 4212 3820 211
+CONVEX 1695 'GT_PK(2,2)' 1142 4213 1140 4018 4214 706
+CONVEX 1696 'GT_PK(2,2)' 595 4215 611 4216 2817 581
+CONVEX 1697 'GT_PK(2,2)' 595 4217 633 4215 3190 611
+CONVEX 1698 'GT_PK(2,2)' 595 4216 581 4218 1423 557
+CONVEX 1699 'GT_PK(2,2)' 583 4219 595 2266 4218 557
+CONVEX 1700 'GT_PK(2,2)' 605 4220 585 4221 4222 547
+CONVEX 1701 'GT_PK(2,2)' 585 4220 605 2378 4223 625
+CONVEX 1702 'GT_PK(2,2)' 625 4223 605 4200 4224 645
+CONVEX 1703 'GT_PK(2,2)' 605 4225 11 4224 4211 645
+CONVEX 1704 'GT_PK(2,2)' 227 4141 239 4226 4212 211
+CONVEX 1705 'GT_PK(2,2)' 251 4185 239 4227 4184 269
+CONVEX 1706 'GT_PK(2,2)' 463 4228 7 4229 4230 8
+CONVEX 1707 'GT_PK(2,2)' 7 4228 463 4231 4232 1313
+CONVEX 1708 'GT_PK(2,2)' 713 4233 728 3220 4234 690
+CONVEX 1709 'GT_PK(2,2)' 742 4235 728 4236 4237 762
+CONVEX 1710 'GT_PK(2,2)' 728 4238 704 4234 4239 690
+CONVEX 1711 'GT_PK(2,2)' 728 4235 742 4238 4019 704
+CONVEX 1712 'GT_PK(2,2)' 526 4240 508 2624 4241 548
+CONVEX 1713 'GT_PK(2,2)' 508 4242 530 4241 2394 548
+CONVEX 1714 'GT_PK(2,2)' 508 4243 468 4244 4245 488
+CONVEX 1715 'GT_PK(2,2)' 530 4242 508 3132 4244 488
+CONVEX 1716 'GT_PK(2,2)' 486 4246 526 4247 3227 506
+CONVEX 1717 'GT_PK(2,2)' 486 4247 506 4248 3195 462
+CONVEX 1718 'GT_PK(2,2)' 508 4249 486 4243 4250 468
+CONVEX 1719 'GT_PK(2,2)' 486 4249 508 4246 4240 526
+CONVEX 1720 'GT_PK(2,2)' 444 4251 486 3165 4248 462
+CONVEX 1721 'GT_PK(2,2)' 486 4251 444 4250 4192 468
+CONVEX 1722 'GT_PK(2,2)' 507 4252 9 4253 4254 547
+CONVEX 1723 'GT_PK(2,2)' 9 4252 507 4255 4256 8
+CONVEX 1724 'GT_PK(2,2)' 507 4257 463 4256 4229 8
+CONVEX 1725 'GT_PK(2,2)' 463 4257 507 4258 4259 487
+CONVEX 1726 'GT_PK(2,2)' 9 4260 10 4254 4261 547
+CONVEX 1727 'GT_PK(2,2)' 10 4262 605 4261 4221 547
+CONVEX 1728 'GT_PK(2,2)' 605 4262 10 4225 4263 11
+CONVEX 1729 'GT_PK(2,2)' 199 1943 215 4264 4265 227
+CONVEX 1730 'GT_PK(2,2)' 546 4266 2 3228 4267 506
+CONVEX 1731 'GT_PK(2,2)' 2 4268 1 4267 3194 506
+CONVEX 1732 'GT_PK(2,2)' 199 4269 183 1862 4270 169
+CONVEX 1733 'GT_PK(2,2)' 183 4269 199 4271 4272 211
+CONVEX 1734 'GT_PK(2,2)' 569 4273 588 3234 4274 562
+CONVEX 1735 'GT_PK(2,2)' 588 4275 576 4274 3254 562
+CONVEX 1736 'GT_PK(2,2)' 608 4276 588 2417 4277 629
+CONVEX 1737 'GT_PK(2,2)' 576 4275 588 3258 4276 608
+CONVEX 1738 'GT_PK(2,2)' 434 4278 452 3157 4279 474
+CONVEX 1739 'GT_PK(2,2)' 452 4280 492 4279 3239 474
+CONVEX 1740 'GT_PK(2,2)' 492 4280 452 4176 4281 470
+CONVEX 1741 'GT_PK(2,2)' 452 4282 432 4281 4283 470
+CONVEX 1742 'GT_PK(2,2)' 510 4284 490 4173 4285 532
+CONVEX 1743 'GT_PK(2,2)' 490 4284 510 4286 4175 470
+CONVEX 1744 'GT_PK(2,2)' 512 4287 472 4288 4289 494
+CONVEX 1745 'GT_PK(2,2)' 536 4290 512 3250 4288 494
+CONVEX 1746 'GT_PK(2,2)' 512 4290 536 4291 3233 552
+CONVEX 1747 'GT_PK(2,2)' 512 4291 552 4292 2411 532
+CONVEX 1748 'GT_PK(2,2)' 490 4293 512 4285 4292 532
+CONVEX 1749 'GT_PK(2,2)' 512 4293 490 4287 4294 472
+CONVEX 1750 'GT_PK(2,2)' 401 4295 381 2170 2478 413
+CONVEX 1751 'GT_PK(2,2)' 381 4295 401 2505 4296 367
+CONVEX 1752 'GT_PK(2,2)' 349 4297 368 1892 4298 335
+CONVEX 1753 'GT_PK(2,2)' 335 4298 368 1499 4299 352
+CONVEX 1754 'GT_PK(2,2)' 368 4300 384 4299 2515 352
+CONVEX 1755 'GT_PK(2,2)' 429 4301 451 3242 2167 413
+CONVEX 1756 'GT_PK(2,2)' 472 2166 451 4289 4302 494
+CONVEX 1757 'GT_PK(2,2)' 411 4303 397 4304 2475 379
+CONVEX 1758 'GT_PK(2,2)' 411 4305 429 4303 3241 397
+CONVEX 1759 'GT_PK(2,2)' 429 4305 411 4306 4307 457
+CONVEX 1760 'GT_PK(2,2)' 411 4308 441 4307 3252 457
+CONVEX 1761 'GT_PK(2,2)' 516 4309 501 3247 4310 542
+CONVEX 1762 'GT_PK(2,2)' 483 4311 501 3253 4312 457
+CONVEX 1763 'GT_PK(2,2)' 501 4313 523 4310 2405 542
+CONVEX 1764 'GT_PK(2,2)' 501 4311 483 4313 3243 523
+CONVEX 1765 'GT_PK(2,2)' 477 4314 429 4315 4306 457
+CONVEX 1766 'GT_PK(2,2)' 501 4316 477 4312 4315 457
+CONVEX 1767 'GT_PK(2,2)' 477 4316 501 4317 4309 516
+CONVEX 1768 'GT_PK(2,2)' 477 4317 516 4318 3249 494
+CONVEX 1769 'GT_PK(2,2)' 451 4319 477 4302 4318 494
+CONVEX 1770 'GT_PK(2,2)' 477 4319 451 4314 4301 429
+CONVEX 1771 'GT_PK(2,2)' 425 4320 407 4321 2962 443
+CONVEX 1772 'GT_PK(2,2)' 407 4320 425 2952 4322 375
+CONVEX 1773 'GT_PK(2,2)' 756 4323 713 4324 3225 736
+CONVEX 1774 'GT_PK(2,2)' 774 4325 756 3262 4324 736
+CONVEX 1775 'GT_PK(2,2)' 756 4326 728 4323 4233 713
+CONVEX 1776 'GT_PK(2,2)' 756 4325 774 4327 4328 790
+CONVEX 1777 'GT_PK(2,2)' 756 4327 790 4329 2426 762
+CONVEX 1778 'GT_PK(2,2)' 728 4326 756 4237 4329 762
+CONVEX 1779 'GT_PK(2,2)' 810 4330 842 4331 4332 824
+CONVEX 1780 'GT_PK(2,2)' 842 4330 810 4333 3264 826
+CONVEX 1781 'GT_PK(2,2)' 857 4334 842 3006 4333 826
+CONVEX 1782 'GT_PK(2,2)' 842 4334 857 4335 3016 870
+CONVEX 1783 'GT_PK(2,2)' 808 4336 794 3266 4337 824
+CONVEX 1784 'GT_PK(2,2)' 794 4338 774 4339 3260 778
+CONVEX 1785 'GT_PK(2,2)' 774 4338 794 4328 4340 790
+CONVEX 1786 'GT_PK(2,2)' 794 4336 808 4340 3273 790
+CONVEX 1787 'GT_PK(2,2)' 810 4341 794 3265 4339 778
+CONVEX 1788 'GT_PK(2,2)' 794 4341 810 4337 4331 824
+CONVEX 1789 'GT_PK(2,2)' 640 4342 680 4343 3286 658
+CONVEX 1790 'GT_PK(2,2)' 640 4343 658 4344 2433 616
+CONVEX 1791 'GT_PK(2,2)' 600 4345 640 2356 4344 616
+CONVEX 1792 'GT_PK(2,2)' 680 4342 640 3292 4346 660
+CONVEX 1793 'GT_PK(2,2)' 618 4347 640 3302 4345 600
+CONVEX 1794 'GT_PK(2,2)' 640 4347 618 4346 3305 660
+CONVEX 1795 'GT_PK(2,2)' 767 4348 781 4349 2454 746
+CONVEX 1796 'GT_PK(2,2)' 731 4350 767 3315 4349 746
+CONVEX 1797 'GT_PK(2,2)' 781 4348 767 2449 4351 799
+CONVEX 1798 'GT_PK(2,2)' 767 4350 731 4352 3307 749
+CONVEX 1799 'GT_PK(2,2)' 767 4353 783 4351 4354 799
+CONVEX 1800 'GT_PK(2,2)' 783 4353 767 2435 4352 749
+CONVEX 1801 'GT_PK(2,2)' 676 4355 636 4356 2432 658
+CONVEX 1802 'GT_PK(2,2)' 698 4357 676 3287 4356 658
+CONVEX 1803 'GT_PK(2,2)' 716 4358 676 3316 4357 698
+CONVEX 1804 'GT_PK(2,2)' 676 4358 716 4359 3311 696
+CONVEX 1805 'GT_PK(2,2)' 612 4360 596 4361 4362 636
+CONVEX 1806 'GT_PK(2,2)' 574 4363 596 2353 4364 554
+CONVEX 1807 'GT_PK(2,2)' 596 4365 578 4364 3146 554
+CONVEX 1808 'GT_PK(2,2)' 596 4360 612 4365 3319 578
+CONVEX 1809 'GT_PK(2,2)' 596 4363 574 4366 2355 616
+CONVEX 1810 'GT_PK(2,2)' 636 4362 596 2434 4366 616
+CONVEX 1811 'GT_PK(2,2)' 654 4367 672 4368 3281 630
+CONVEX 1812 'GT_PK(2,2)' 612 4369 654 3318 4368 630
+CONVEX 1813 'GT_PK(2,2)' 672 4367 654 3347 4370 696
+CONVEX 1814 'GT_PK(2,2)' 654 4369 612 4371 4361 636
+CONVEX 1815 'GT_PK(2,2)' 654 4372 676 4370 4359 696
+CONVEX 1816 'GT_PK(2,2)' 676 4372 654 4355 4371 636
+CONVEX 1817 'GT_PK(2,2)' 890 4373 877 3320 4374 907
+CONVEX 1818 'GT_PK(2,2)' 907 4374 877 3079 4375 893
+CONVEX 1819 'GT_PK(2,2)' 877 4376 863 4375 4118 893
+CONVEX 1820 'GT_PK(2,2)' 863 4376 877 4377 4378 849
+CONVEX 1821 'GT_PK(2,2)' 835 4379 863 4380 4377 849
+CONVEX 1822 'GT_PK(2,2)' 835 4381 821 4382 3326 807
+CONVEX 1823 'GT_PK(2,2)' 821 4381 835 4003 4380 849
+CONVEX 1824 'GT_PK(2,2)' 823 4383 835 4384 4382 807
+CONVEX 1825 'GT_PK(2,2)' 835 4383 823 4385 4125 851
+CONVEX 1826 'GT_PK(2,2)' 863 4379 835 4114 4385 851
+CONVEX 1827 'GT_PK(2,2)' 701 4386 656 2984 3330 675
+CONVEX 1828 'GT_PK(2,2)' 656 4386 701 3332 4387 678
+CONVEX 1829 'GT_PK(2,2)' 701 4388 721 4387 3297 678
+CONVEX 1830 'GT_PK(2,2)' 721 4388 701 3340 2940 739
+CONVEX 1831 'GT_PK(2,2)' 131 4389 163 3354 4390 147
+CONVEX 1832 'GT_PK(2,2)' 163 4391 180 4390 4392 147
+CONVEX 1833 'GT_PK(2,2)' 180 4391 163 3351 4393 192
+CONVEX 1834 'GT_PK(2,2)' 192 4393 163 2499 4394 176
+CONVEX 1835 'GT_PK(2,2)' 163 4395 143 4394 1881 176
+CONVEX 1836 'GT_PK(2,2)' 163 4389 131 4395 3352 143
+CONVEX 1837 'GT_PK(2,2)' 149 4396 168 2463 4397 135
+CONVEX 1838 'GT_PK(2,2)' 182 4398 168 4399 4396 149
+CONVEX 1839 'GT_PK(2,2)' 168 4400 154 4397 3468 135
+CONVEX 1840 'GT_PK(2,2)' 168 4398 182 4401 3392 198
+CONVEX 1841 'GT_PK(2,2)' 133 4402 166 3358 4403 149
+CONVEX 1842 'GT_PK(2,2)' 182 4404 166 3389 4405 196
+CONVEX 1843 'GT_PK(2,2)' 166 4404 182 4403 4399 149
+CONVEX 1844 'GT_PK(2,2)' 166 4406 180 4405 3349 196
+CONVEX 1845 'GT_PK(2,2)' 180 4406 166 4392 4407 147
+CONVEX 1846 'GT_PK(2,2)' 166 4402 133 4407 3362 147
+CONVEX 1847 'GT_PK(2,2)' 299 4408 285 4409 3379 323
+CONVEX 1848 'GT_PK(2,2)' 285 4408 299 4410 4411 271
+CONVEX 1849 'GT_PK(2,2)' 224 4412 210 4413 3388 196
+CONVEX 1850 'GT_PK(2,2)' 224 4414 236 4415 3394 250
+CONVEX 1851 'GT_PK(2,2)' 208 4416 224 3350 4413 196
+CONVEX 1852 'GT_PK(2,2)' 236 4414 224 2487 4416 208
+CONVEX 1853 'GT_PK(2,2)' 1205 4417 243 4418 3402 1203
+CONVEX 1854 'GT_PK(2,2)' 199 4264 227 4272 4226 211
+CONVEX 1855 'GT_PK(2,2)' 227 4265 215 4419 4420 241
+CONVEX 1856 'GT_PK(2,2)' 241 4420 215 3785 1952 229
+CONVEX 1857 'GT_PK(2,2)' 185 4421 191 1946 4422 213
+CONVEX 1858 'GT_PK(2,2)' 247 4423 233 3409 4424 257
+CONVEX 1859 'GT_PK(2,2)' 233 4423 247 4425 3405 217
+CONVEX 1860 'GT_PK(2,2)' 243 4426 233 3404 4427 221
+CONVEX 1861 'GT_PK(2,2)' 233 4426 243 4424 3399 257
+CONVEX 1862 'GT_PK(2,2)' 257 4428 287 3410 4429 273
+CONVEX 1863 'GT_PK(2,2)' 287 4428 257 4430 3400 271
+CONVEX 1864 'GT_PK(2,2)' 287 4431 301 4429 2535 273
+CONVEX 1865 'GT_PK(2,2)' 287 4432 315 4431 3418 301
+CONVEX 1866 'GT_PK(2,2)' 299 4433 287 4411 4430 271
+CONVEX 1867 'GT_PK(2,2)' 287 4433 299 4432 4434 315
+CONVEX 1868 'GT_PK(2,2)' 333 4435 351 4436 3933 363
+CONVEX 1869 'GT_PK(2,2)' 351 4435 333 3931 4437 323
+CONVEX 1870 'GT_PK(2,2)' 347 4438 333 2288 4436 363
+CONVEX 1871 'GT_PK(2,2)' 315 4439 333 3417 4438 347
+CONVEX 1872 'GT_PK(2,2)' 333 4440 299 4437 4409 323
+CONVEX 1873 'GT_PK(2,2)' 299 4440 333 4434 4439 315
+CONVEX 1874 'GT_PK(2,2)' 203 4441 1201 4442 3432 221
+CONVEX 1875 'GT_PK(2,2)' 1201 4441 203 4443 4444 1199
+CONVEX 1876 'GT_PK(2,2)' 195 4445 203 3421 4446 217
+CONVEX 1877 'GT_PK(2,2)' 233 4447 203 4427 4442 221
+CONVEX 1878 'GT_PK(2,2)' 203 4447 233 4446 4425 217
+CONVEX 1879 'GT_PK(2,2)' 179 4448 1197 4449 4450 1199
+CONVEX 1880 'GT_PK(2,2)' 203 4451 179 4444 4449 1199
+CONVEX 1881 'GT_PK(2,2)' 179 4451 203 4452 4445 195
+CONVEX 1882 'GT_PK(2,2)' 179 4452 195 4453 3424 159
+CONVEX 1883 'GT_PK(2,2)' 1197 4448 179 3425 4453 159
+CONVEX 1884 'GT_PK(2,2)' 252 4454 268 3386 4455 280
+CONVEX 1885 'GT_PK(2,2)' 268 4456 294 4455 3452 280
+CONVEX 1886 'GT_PK(2,2)' 278 4457 268 3449 4458 250
+CONVEX 1887 'GT_PK(2,2)' 294 4456 268 3454 4457 278
+CONVEX 1888 'GT_PK(2,2)' 26 4459 1171 4460 2280 18
+CONVEX 1889 'GT_PK(2,2)' 24 4461 26 4462 4463 37
+CONVEX 1890 'GT_PK(2,2)' 26 4464 43 4463 4465 37
+CONVEX 1891 'GT_PK(2,2)' 1173 4466 26 2935 4461 24
+CONVEX 1892 'GT_PK(2,2)' 26 4466 1173 4459 4467 1171
+CONVEX 1893 'GT_PK(2,2)' 103 4468 130 4469 3769 120
+CONVEX 1894 'GT_PK(2,2)' 93 4470 103 3462 4469 120
+CONVEX 1895 'GT_PK(2,2)' 103 4471 89 4472 1915 114
+CONVEX 1896 'GT_PK(2,2)' 130 4468 103 2279 4472 114
+CONVEX 1897 'GT_PK(2,2)' 43 4473 58 4465 4474 37
+CONVEX 1898 'GT_PK(2,2)' 58 4475 47 4474 4476 37
+CONVEX 1899 'GT_PK(2,2)' 47 4475 58 3923 4477 70
+CONVEX 1900 'GT_PK(2,2)' 154 4478 186 3464 4479 170
+CONVEX 1901 'GT_PK(2,2)' 186 4480 198 4481 2484 214
+CONVEX 1902 'GT_PK(2,2)' 186 4482 168 4480 4401 198
+CONVEX 1903 'GT_PK(2,2)' 168 4482 186 4400 4478 154
+CONVEX 1904 'GT_PK(2,2)' 201 4483 186 2566 4481 214
+CONVEX 1905 'GT_PK(2,2)' 170 4479 186 3473 4483 201
+CONVEX 1906 'GT_PK(2,2)' 190 4484 1294 4485 3488 172
+CONVEX 1907 'GT_PK(2,2)' 1294 4484 190 4486 4487 1296
+CONVEX 1908 'GT_PK(2,2)' 1296 4487 190 2572 4488 212
+CONVEX 1909 'GT_PK(2,2)' 190 4489 184 4488 3471 212
+CONVEX 1910 'GT_PK(2,2)' 170 4490 151 3466 4491 137
+CONVEX 1911 'GT_PK(2,2)' 184 4492 151 3472 4490 170
+CONVEX 1912 'GT_PK(2,2)' 82 4493 109 3479 4494 92
+CONVEX 1913 'GT_PK(2,2)' 109 4495 123 4496 3469 137
+CONVEX 1914 'GT_PK(2,2)' 123 4495 109 2583 4497 96
+CONVEX 1915 'GT_PK(2,2)' 109 4493 82 4497 3474 96
+CONVEX 1916 'GT_PK(2,2)' 88 4498 74 4499 1528 63
+CONVEX 1917 'GT_PK(2,2)' 76 2160 88 3483 4499 63
+CONVEX 1918 'GT_PK(2,2)' 128 4500 153 3497 4501 161
+CONVEX 1919 'GT_PK(2,2)' 161 4501 153 3791 4502 1291
+CONVEX 1920 'GT_PK(2,2)' 153 4503 160 4502 3489 1291
+CONVEX 1921 'GT_PK(2,2)' 153 4504 127 4503 1364 160
+CONVEX 1922 'GT_PK(2,2)' 153 4500 128 4504 3499 127
+CONVEX 1923 'GT_PK(2,2)' 628 4505 646 3506 4506 606
+CONVEX 1924 'GT_PK(2,2)' 646 4507 686 4508 3511 666
+CONVEX 1925 'GT_PK(2,2)' 646 4505 628 4509 3505 668
+CONVEX 1926 'GT_PK(2,2)' 686 4507 646 3515 4509 668
+CONVEX 1927 'GT_PK(2,2)' 626 4510 646 3539 4508 666
+CONVEX 1928 'GT_PK(2,2)' 646 4510 626 4506 3541 606
+CONVEX 1929 'GT_PK(2,2)' 944 4511 976 4512 3559 956
+CONVEX 1930 'GT_PK(2,2)' 933 4513 944 1964 4514 920
+CONVEX 1931 'GT_PK(2,2)' 920 4514 944 1543 4515 934
+CONVEX 1932 'GT_PK(2,2)' 944 4512 956 4515 2634 934
+CONVEX 1933 'GT_PK(2,2)' 894 4516 864 3574 4517 878
+CONVEX 1934 'GT_PK(2,2)' 864 4518 850 4517 2058 878
+CONVEX 1935 'GT_PK(2,2)' 880 4519 908 4520 2645 888
+CONVEX 1936 'GT_PK(2,2)' 880 4521 894 4519 3571 908
+CONVEX 1937 'GT_PK(2,2)' 880 4522 866 4523 3569 852
+CONVEX 1938 'GT_PK(2,2)' 866 4522 880 3564 4520 888
+CONVEX 1939 'GT_PK(2,2)' 864 4524 880 4525 4523 852
+CONVEX 1940 'GT_PK(2,2)' 880 4524 864 4521 4516 894
+CONVEX 1941 'GT_PK(2,2)' 758 4526 776 4527 3576 726
+CONVEX 1942 'GT_PK(2,2)' 776 4526 758 3577 4528 788
+CONVEX 1943 'GT_PK(2,2)' 710 4529 758 3514 4527 726
+CONVEX 1944 'GT_PK(2,2)' 758 4529 710 4530 2675 740
+CONVEX 1945 'GT_PK(2,2)' 772 4531 758 2664 4530 740
+CONVEX 1946 'GT_PK(2,2)' 758 4531 772 4528 2697 788
+CONVEX 1947 'GT_PK(2,2)' 989 4532 975 4533 3595 959
+CONVEX 1948 'GT_PK(2,2)' 1020 4534 989 2000 4535 1004
+CONVEX 1949 'GT_PK(2,2)' 1008 4536 989 3602 4534 1020
+CONVEX 1950 'GT_PK(2,2)' 975 4532 989 3593 4536 1008
+CONVEX 1951 'GT_PK(2,2)' 989 4537 971 4535 1991 1004
+CONVEX 1952 'GT_PK(2,2)' 989 4533 959 4537 2699 971
+CONVEX 1953 'GT_PK(2,2)' 515 4538 475 4539 3760 497
+CONVEX 1954 'GT_PK(2,2)' 555 4540 515 2181 4541 539
+CONVEX 1955 'GT_PK(2,2)' 515 4539 497 4541 2078 539
+CONVEX 1956 'GT_PK(2,2)' 535 4542 515 2003 4540 555
+CONVEX 1957 'GT_PK(2,2)' 493 4543 515 3621 4542 535
+CONVEX 1958 'GT_PK(2,2)' 475 4538 515 3610 4543 493
+CONVEX 1959 'GT_PK(2,2)' 599 4544 619 2683 4545 639
+CONVEX 1960 'GT_PK(2,2)' 571 4546 619 3638 4544 599
+CONVEX 1961 'GT_PK(2,2)' 639 4545 619 2030 4547 661
+CONVEX 1962 'GT_PK(2,2)' 661 4547 619 1631 4548 641
+CONVEX 1963 'GT_PK(2,2)' 641 4548 619 1393 4549 601
+CONVEX 1964 'GT_PK(2,2)' 619 4546 571 4549 3640 601
+CONVEX 1965 'GT_PK(2,2)' 927 4550 955 4551 1995 942
+CONVEX 1966 'GT_PK(2,2)' 915 4552 927 3642 4551 942
+CONVEX 1967 'GT_PK(2,2)' 927 4552 915 4553 4554 901
+CONVEX 1968 'GT_PK(2,2)' 955 4550 927 1967 4555 941
+CONVEX 1969 'GT_PK(2,2)' 927 4556 913 4555 3647 941
+CONVEX 1970 'GT_PK(2,2)' 913 4556 927 3644 4553 901
+CONVEX 1971 'GT_PK(2,2)' 887 4557 903 4558 3663 875
+CONVEX 1972 'GT_PK(2,2)' 887 4559 915 4557 3643 903
+CONVEX 1973 'GT_PK(2,2)' 887 4558 875 4560 1634 859
+CONVEX 1974 'GT_PK(2,2)' 915 4559 887 4554 4561 901
+CONVEX 1975 'GT_PK(2,2)' 873 4562 887 2052 4560 859
+CONVEX 1976 'GT_PK(2,2)' 901 4561 887 2694 4562 873
+CONVEX 1977 'GT_PK(2,2)' 223 2140 193 4563 3666 209
+CONVEX 1978 'GT_PK(2,2)' 235 2143 223 2199 4564 249
+CONVEX 1979 'GT_PK(2,2)' 136 4565 124 4566 2920 155
+CONVEX 1980 'GT_PK(2,2)' 124 4565 136 2928 4567 108
+CONVEX 1981 'GT_PK(2,2)' 108 4567 136 3675 4568 122
+CONVEX 1982 'GT_PK(2,2)' 136 4569 150 4568 4570 122
+CONVEX 1983 'GT_PK(2,2)' 169 4571 136 1864 4566 155
+CONVEX 1984 'GT_PK(2,2)' 136 4571 169 4569 4572 150
+CONVEX 1985 'GT_PK(2,2)' 150 4573 183 4574 4575 167
+CONVEX 1986 'GT_PK(2,2)' 183 4576 197 4575 3671 167
+CONVEX 1987 'GT_PK(2,2)' 197 4576 183 3821 4271 211
+CONVEX 1988 'GT_PK(2,2)' 169 4270 183 4572 4573 150
+CONVEX 1989 'GT_PK(2,2)' 67 4577 94 4578 4579 78
+CONVEX 1990 'GT_PK(2,2)' 56 4580 67 3918 4581 45
+CONVEX 1991 'GT_PK(2,2)' 67 4580 56 4582 2931 80
+CONVEX 1992 'GT_PK(2,2)' 94 4577 67 3676 4582 80
+CONVEX 1993 'GT_PK(2,2)' 148 4583 162 4584 4585 132
+CONVEX 1994 'GT_PK(2,2)' 162 4586 144 4585 4587 132
+CONVEX 1995 'GT_PK(2,2)' 193 4588 162 3668 4589 181
+CONVEX 1996 'GT_PK(2,2)' 162 4583 148 4589 3678 181
+CONVEX 1997 'GT_PK(2,2)' 117 4590 148 4591 4584 132
+CONVEX 1998 'GT_PK(2,2)' 94 4592 104 4579 4593 78
+CONVEX 1999 'GT_PK(2,2)' 104 4594 87 4593 3682 78
+CONVEX 2000 'GT_PK(2,2)' 104 4595 117 4594 4596 87
+CONVEX 2001 'GT_PK(2,2)' 104 4592 94 4597 3674 122
+CONVEX 2002 'GT_PK(2,2)' 62 4598 51 3683 4599 78
+CONVEX 2003 'GT_PK(2,2)' 67 4600 51 4581 4601 45
+CONVEX 2004 'GT_PK(2,2)' 51 4600 67 4599 4578 78
+CONVEX 2005 'GT_PK(2,2)' 51 4602 1180 4601 3887 45
+CONVEX 2006 'GT_PK(2,2)' 51 4598 62 4603 4604 1182
+CONVEX 2007 'GT_PK(2,2)' 1180 4602 51 4605 4603 1182
+CONVEX 2008 'GT_PK(2,2)' 191 4421 185 4606 4607 164
+CONVEX 2009 'GT_PK(2,2)' 185 4608 152 4607 3772 164
+CONVEX 2010 'GT_PK(2,2)' 185 1953 171 4608 4609 152
+CONVEX 2011 'GT_PK(2,2)' 1192 4610 1190 4611 4612 125
+CONVEX 2012 'GT_PK(2,2)' 1132 4613 1124 4614 3754 1112
+CONVEX 2013 'GT_PK(2,2)' 1132 4614 1112 4615 2803 1123
+CONVEX 2014 'GT_PK(2,2)' 1137 4616 1132 4617 4618 1288
+CONVEX 2015 'GT_PK(2,2)' 1288 4618 1132 1712 4619 1136
+CONVEX 2016 'GT_PK(2,2)' 62 4620 1184 4604 4621 1182
+CONVEX 2017 'GT_PK(2,2)' 1184 4620 62 4622 3680 72
+CONVEX 2018 'GT_PK(2,2)' 1186 4623 1184 3692 4622 72
+CONVEX 2019 'GT_PK(2,2)' 87 4624 100 3681 4625 72
+CONVEX 2020 'GT_PK(2,2)' 100 4626 85 4625 3691 72
+CONVEX 2021 'GT_PK(2,2)' 117 4627 100 4596 4624 87
+CONVEX 2022 'GT_PK(2,2)' 100 4627 117 4628 4591 132
+CONVEX 2023 'GT_PK(2,2)' 98 4629 1190 4630 4631 1189
+CONVEX 2024 'GT_PK(2,2)' 85 4632 98 3694 4630 1189
+CONVEX 2025 'GT_PK(2,2)' 1190 4629 98 4612 4633 125
+CONVEX 2026 'GT_PK(2,2)' 245 4634 274 4635 3850 258
+CONVEX 2027 'GT_PK(2,2)' 261 4636 245 2197 4637 235
+CONVEX 2028 'GT_PK(2,2)' 274 4634 245 2843 4636 261
+CONVEX 2029 'GT_PK(2,2)' 245 4638 219 4637 2144 235
+CONVEX 2030 'GT_PK(2,2)' 288 4639 272 3851 2106 258
+CONVEX 2031 'GT_PK(2,2)' 272 4639 288 4640 4641 300
+CONVEX 2032 'GT_PK(2,2)' 464 4642 504 3706 4643 484
+CONVEX 2033 'GT_PK(2,2)' 484 4643 504 2075 4644 524
+CONVEX 2034 'GT_PK(2,2)' 504 4645 544 4644 3546 524
+CONVEX 2035 'GT_PK(2,2)' 544 4645 504 3507 4646 522
+CONVEX 2036 'GT_PK(2,2)' 522 4646 504 2123 4647 482
+CONVEX 2037 'GT_PK(2,2)' 504 4642 464 4647 3711 482
+CONVEX 2038 'GT_PK(2,2)' 396 4648 410 2738 4649 378
+CONVEX 2039 'GT_PK(2,2)' 410 4650 392 4649 2734 378
+CONVEX 2040 'GT_PK(2,2)' 410 4651 440 4650 3708 392
+CONVEX 2041 'GT_PK(2,2)' 1085 4652 1108 3687 3723 1098
+CONVEX 2042 'GT_PK(2,2)' 1108 4652 1085 3725 4653 1093
+CONVEX 2043 'GT_PK(2,2)' 1125 4654 1133 4655 2772 1118
+CONVEX 2044 'GT_PK(2,2)' 1108 4656 1125 3724 4655 1118
+CONVEX 2045 'GT_PK(2,2)' 1133 4654 1125 2770 4657 1283
+CONVEX 2046 'GT_PK(2,2)' 1125 4656 1108 4658 3726 1114
+CONVEX 2047 'GT_PK(2,2)' 1128 4659 1125 3728 4658 1114
+CONVEX 2048 'GT_PK(2,2)' 1125 4660 1281 4657 4661 1283
+CONVEX 2049 'GT_PK(2,2)' 1125 4659 1128 4660 3730 1281
+CONVEX 2050 'GT_PK(2,2)' 1078 4662 1061 3734 4663 1045
+CONVEX 2051 'GT_PK(2,2)' 1024 4664 1061 4049 4665 1040
+CONVEX 2052 'GT_PK(2,2)' 1061 4664 1024 4663 3038 1045
+CONVEX 2053 'GT_PK(2,2)' 1040 4665 1061 2303 4666 1077
+CONVEX 2054 'GT_PK(2,2)' 1061 4667 1092 4666 4668 1077
+CONVEX 2055 'GT_PK(2,2)' 1061 4662 1078 4667 3750 1092
+CONVEX 2056 'GT_PK(2,2)' 1122 4669 1130 4670 4671 1110
+CONVEX 2057 'GT_PK(2,2)' 1130 4672 1134 4673 2757 1119
+CONVEX 2058 'GT_PK(2,2)' 1110 4671 1130 2798 4673 1119
+CONVEX 2059 'GT_PK(2,2)' 1130 4669 1122 4674 3736 1135
+CONVEX 2060 'GT_PK(2,2)' 1134 4672 1130 2761 4675 1284
+CONVEX 2061 'GT_PK(2,2)' 1130 4674 1135 4676 1705 1287
+CONVEX 2062 'GT_PK(2,2)' 1284 4675 1130 4677 4676 1287
+CONVEX 2063 'GT_PK(2,2)' 1088 4678 1102 3739 4679 1110
+CONVEX 2064 'GT_PK(2,2)' 1102 4680 1092 4681 3745 1113
+CONVEX 2065 'GT_PK(2,2)' 1092 4680 1102 4668 4682 1077
+CONVEX 2066 'GT_PK(2,2)' 1102 4678 1088 4682 3743 1077
+CONVEX 2067 'GT_PK(2,2)' 1122 4683 1102 3738 4681 1113
+CONVEX 2068 'GT_PK(2,2)' 1102 4683 1122 4679 4670 1110
+CONVEX 2069 'GT_PK(2,2)' 1124 4684 1137 3751 4685 1131
+CONVEX 2070 'GT_PK(2,2)' 1289 4686 1137 4687 4688 1290
+CONVEX 2071 'GT_PK(2,2)' 1131 4685 1137 2804 4686 1289
+CONVEX 2072 'GT_PK(2,2)' 1137 4617 1288 4688 4689 1290
+CONVEX 2073 'GT_PK(2,2)' 213 4422 191 3773 4690 1297
+CONVEX 2074 'GT_PK(2,2)' 191 4691 1295 4690 4692 1297
+CONVEX 2075 'GT_PK(2,2)' 173 4693 191 1377 4606 164
+CONVEX 2076 'GT_PK(2,2)' 1295 4691 191 3789 4693 173
+CONVEX 2077 'GT_PK(2,2)' 138 4694 171 2921 1938 155
+CONVEX 2078 'GT_PK(2,2)' 152 4609 171 3771 4694 138
+CONVEX 2079 'GT_PK(2,2)' 227 4419 241 4143 3781 253
+CONVEX 2080 'GT_PK(2,2)' 1132 4615 1123 4619 2175 1136
+CONVEX 2081 'GT_PK(2,2)' 1132 4616 1137 4613 4684 1124
+CONVEX 2082 'GT_PK(2,2)' 428 4695 456 4696 4697 410
+CONVEX 2083 'GT_PK(2,2)' 456 4695 428 4698 4699 476
+CONVEX 2084 'GT_PK(2,2)' 251 4227 269 4700 3823 279
+CONVEX 2085 'GT_PK(2,2)' 265 4701 251 3829 4700 279
+CONVEX 2086 'GT_PK(2,2)' 225 4702 237 3822 4703 209
+CONVEX 2087 'GT_PK(2,2)' 237 4704 265 4705 3833 249
+CONVEX 2088 'GT_PK(2,2)' 251 4706 237 4187 4702 225
+CONVEX 2089 'GT_PK(2,2)' 237 4706 251 4704 4701 265
+CONVEX 2090 'GT_PK(2,2)' 223 4707 237 4564 4705 249
+CONVEX 2091 'GT_PK(2,2)' 237 4707 223 4703 4563 209
+CONVEX 2092 'GT_PK(2,2)' 371 4708 337 2864 4140 355
+CONVEX 2093 'GT_PK(2,2)' 337 4708 371 4709 2859 353
+CONVEX 2094 'GT_PK(2,2)' 321 4710 337 2833 4709 353
+CONVEX 2095 'GT_PK(2,2)' 307 4030 337 3836 4710 321
+CONVEX 2096 'GT_PK(2,2)' 283 4711 1303 4712 3841 311
+CONVEX 2097 'GT_PK(2,2)' 297 4713 283 3926 4712 311
+CONVEX 2098 'GT_PK(2,2)' 283 4713 297 4714 3839 267
+CONVEX 2099 'GT_PK(2,2)' 255 4715 283 3784 4714 267
+CONVEX 2100 'GT_PK(2,2)' 1303 4711 283 4716 4717 1301
+CONVEX 2101 'GT_PK(2,2)' 283 4715 255 4717 3777 1301
+CONVEX 2102 'GT_PK(2,2)' 341 4718 373 4139 3871 355
+CONVEX 2103 'GT_PK(2,2)' 373 4718 341 4719 4027 357
+CONVEX 2104 'GT_PK(2,2)' 316 4720 288 4721 3849 302
+CONVEX 2105 'GT_PK(2,2)' 316 4722 330 4723 3862 344
+CONVEX 2106 'GT_PK(2,2)' 330 4722 316 2194 4721 302
+CONVEX 2107 'GT_PK(2,2)' 328 4724 316 3853 4723 344
+CONVEX 2108 'GT_PK(2,2)' 288 4720 316 4641 4725 300
+CONVEX 2109 'GT_PK(2,2)' 316 4724 328 4725 3856 300
+CONVEX 2110 'GT_PK(2,2)' 377 4726 373 4727 4719 357
+CONVEX 2111 'GT_PK(2,2)' 377 4728 395 4729 1721 415
+CONVEX 2112 'GT_PK(2,2)' 377 4730 361 4728 3872 395
+CONVEX 2113 'GT_PK(2,2)' 361 4730 377 4731 4727 357
+CONVEX 2114 'GT_PK(2,2)' 373 4732 399 3870 4733 387
+CONVEX 2115 'GT_PK(2,2)' 399 4734 437 4735 3756 419
+CONVEX 2116 'GT_PK(2,2)' 387 4733 399 2860 4735 419
+CONVEX 2117 'GT_PK(2,2)' 437 4734 399 2820 4736 415
+CONVEX 2118 'GT_PK(2,2)' 399 4737 377 4736 4729 415
+CONVEX 2119 'GT_PK(2,2)' 377 4737 399 4726 4732 373
+CONVEX 2120 'GT_PK(2,2)' 343 4738 361 3929 4731 357
+CONVEX 2121 'GT_PK(2,2)' 1305 4739 343 3842 4026 311
+CONVEX 2122 'GT_PK(2,2)' 343 4739 1305 4740 4741 1307
+CONVEX 2123 'GT_PK(2,2)' 361 4738 343 3874 4740 1307
+CONVEX 2124 'GT_PK(2,2)' 25 4742 32 2898 4743 17
+CONVEX 2125 'GT_PK(2,2)' 42 4744 32 3897 4742 25
+CONVEX 2126 'GT_PK(2,2)' 32 4745 21 4743 2887 17
+CONVEX 2127 'GT_PK(2,2)' 21 4745 32 3893 4746 40
+CONVEX 2128 'GT_PK(2,2)' 32 4747 53 4746 2892 40
+CONVEX 2129 'GT_PK(2,2)' 32 4744 42 4747 3899 53
+CONVEX 2130 'GT_PK(2,2)' 22 4748 16 4749 4750 28
+CONVEX 2131 'GT_PK(2,2)' 41 4751 22 3911 4749 28
+CONVEX 2132 'GT_PK(2,2)' 22 4752 18 4753 2281 1169
+CONVEX 2133 'GT_PK(2,2)' 22 4753 1169 4754 4755 1166
+CONVEX 2134 'GT_PK(2,2)' 16 4748 22 3904 4754 1166
+CONVEX 2135 'GT_PK(2,2)' 14 4756 19 2916 4757 1165
+CONVEX 2136 'GT_PK(2,2)' 19 4758 16 4757 3902 1165
+CONVEX 2137 'GT_PK(2,2)' 19 4756 14 4759 2911 27
+CONVEX 2138 'GT_PK(2,2)' 16 4758 19 4750 4760 28
+CONVEX 2139 'GT_PK(2,2)' 38 4761 19 3906 4759 27
+CONVEX 2140 'GT_PK(2,2)' 19 4761 38 4760 3907 28
+CONVEX 2141 'GT_PK(2,2)' 33 4762 26 4763 4460 18
+CONVEX 2142 'GT_PK(2,2)' 26 4762 33 4464 4764 43
+CONVEX 2143 'GT_PK(2,2)' 22 4765 33 4752 4763 18
+CONVEX 2144 'GT_PK(2,2)' 33 4765 22 4766 4751 41
+CONVEX 2145 'GT_PK(2,2)' 43 4764 33 4767 4768 54
+CONVEX 2146 'GT_PK(2,2)' 33 4766 41 4768 3914 54
+CONVEX 2147 'GT_PK(2,2)' 31 4769 47 4770 3924 35
+CONVEX 2148 'GT_PK(2,2)' 24 4771 31 2937 4772 1175
+CONVEX 2149 'GT_PK(2,2)' 31 4771 24 4773 4462 37
+CONVEX 2150 'GT_PK(2,2)' 47 4769 31 4476 4773 37
+CONVEX 2151 'GT_PK(2,2)' 31 4774 1177 4772 4775 1175
+CONVEX 2152 'GT_PK(2,2)' 31 4770 35 4774 3920 1177
+CONVEX 2153 'GT_PK(2,2)' 950 3793 980 4776 4777 966
+CONVEX 2154 'GT_PK(2,2)' 950 4778 922 3795 3952 936
+CONVEX 2155 'GT_PK(2,2)' 960 3807 938 3953 4779 966
+CONVEX 2156 'GT_PK(2,2)' 938 4780 950 4779 4776 966
+CONVEX 2157 'GT_PK(2,2)' 950 4780 938 4778 3843 922
+CONVEX 2158 'GT_PK(2,2)' 999 1814 1021 4781 2979 986
+CONVEX 2159 'GT_PK(2,2)' 966 4782 999 3955 4781 986
+CONVEX 2160 'GT_PK(2,2)' 980 3800 999 4777 4782 966
+CONVEX 2161 'GT_PK(2,2)' 982 4783 1015 3798 3959 996
+CONVEX 2162 'GT_PK(2,2)' 982 3722 1001 4783 3969 1015
+CONVEX 2163 'GT_PK(2,2)' 1082 4784 1068 3977 3701 1054
+CONVEX 2164 'GT_PK(2,2)' 1068 4784 1082 4785 3974 1093
+CONVEX 2165 'GT_PK(2,2)' 1085 4786 1068 4653 4785 1093
+CONVEX 2166 'GT_PK(2,2)' 1068 4786 1085 3698 3689 1058
+CONVEX 2167 'GT_PK(2,2)' 1037 4787 1048 3973 3523 1062
+CONVEX 2168 'GT_PK(2,2)' 1048 4787 1037 1821 3970 1021
+CONVEX 2169 'GT_PK(2,2)' 970 4788 984 4789 3721 954
+CONVEX 2170 'GT_PK(2,2)' 1001 3720 984 3967 4790 1018
+CONVEX 2171 'GT_PK(2,2)' 943 4791 928 4792 2331 958
+CONVEX 2172 'GT_PK(2,2)' 970 4793 943 4132 4792 958
+CONVEX 2173 'GT_PK(2,2)' 928 4791 943 3023 4794 914
+CONVEX 2174 'GT_PK(2,2)' 943 4793 970 4795 4789 954
+CONVEX 2175 'GT_PK(2,2)' 943 4796 926 4794 3979 914
+CONVEX 2176 'GT_PK(2,2)' 926 4796 943 1858 4795 954
+CONVEX 2177 'GT_PK(2,2)' 1018 4797 1003 2307 4798 1033
+CONVEX 2178 'GT_PK(2,2)' 988 4799 1003 4131 4800 970
+CONVEX 2179 'GT_PK(2,2)' 984 4801 1003 4790 4797 1018
+CONVEX 2180 'GT_PK(2,2)' 1003 4801 984 4800 4788 970
+CONVEX 2181 'GT_PK(2,2)' 1003 4802 1019 4798 1766 1033
+CONVEX 2182 'GT_PK(2,2)' 1003 4799 988 4802 4133 1019
+CONVEX 2183 'GT_PK(2,2)' 912 4803 883 4804 4007 900
+CONVEX 2184 'GT_PK(2,2)' 926 1859 912 3980 4804 900
+CONVEX 2185 'GT_PK(2,2)' 883 4803 912 3018 3521 899
+CONVEX 2186 'GT_PK(2,2)' 831 4805 817 3997 4806 847
+CONVEX 2187 'GT_PK(2,2)' 817 4807 783 4808 2437 803
+CONVEX 2188 'GT_PK(2,2)' 783 4807 817 4354 4809 799
+CONVEX 2189 'GT_PK(2,2)' 817 4805 831 4809 3999 799
+CONVEX 2190 'GT_PK(2,2)' 833 4810 817 4001 4808 803
+CONVEX 2191 'GT_PK(2,2)' 817 4810 833 4806 4811 847
+CONVEX 2192 'GT_PK(2,2)' 847 4812 861 3009 4813 874
+CONVEX 2193 'GT_PK(2,2)' 833 4814 861 4811 4812 847
+CONVEX 2194 'GT_PK(2,2)' 861 4815 890 4813 3324 874
+CONVEX 2195 'GT_PK(2,2)' 861 4814 833 4816 4002 849
+CONVEX 2196 'GT_PK(2,2)' 877 4817 861 4378 4816 849
+CONVEX 2197 'GT_PK(2,2)' 861 4817 877 4815 4373 890
+CONVEX 2198 'GT_PK(2,2)' 500 4818 456 2125 4698 476
+CONVEX 2199 'GT_PK(2,2)' 440 4819 456 3712 4820 482
+CONVEX 2200 'GT_PK(2,2)' 742 4821 1144 4016 4822 1142
+CONVEX 2201 'GT_PK(2,2)' 1146 4823 1144 2427 4824 762
+CONVEX 2202 'GT_PK(2,2)' 1144 4821 742 4824 4236 762
+CONVEX 2203 'GT_PK(2,2)' 456 4818 500 4820 2122 482
+CONVEX 2204 'GT_PK(2,2)' 410 4697 456 4651 4819 440
+CONVEX 2205 'GT_PK(2,2)' 428 4825 396 4826 2741 412
+CONVEX 2206 'GT_PK(2,2)' 450 4827 428 2219 4826 412
+CONVEX 2207 'GT_PK(2,2)' 428 4827 450 4699 2129 476
+CONVEX 2208 'GT_PK(2,2)' 428 4696 410 4825 4648 396
+CONVEX 2209 'GT_PK(2,2)' 286 4828 272 4829 4640 300
+CONVEX 2210 'GT_PK(2,2)' 967 4830 961 1462 4831 987
+CONVEX 2211 'GT_PK(2,2)' 961 4830 967 4078 3428 939
+CONVEX 2212 'GT_PK(2,2)' 286 4829 300 4832 3857 314
+CONVEX 2213 'GT_PK(2,2)' 286 4832 314 4833 2851 298
+CONVEX 2214 'GT_PK(2,2)' 1162 4834 1160 4835 4035 990
+CONVEX 2215 'GT_PK(2,2)' 998 4836 1162 4044 4835 990
+CONVEX 2216 'GT_PK(2,2)' 979 4837 1012 4838 4051 1006
+CONVEX 2217 'GT_PK(2,2)' 979 4839 1159 4840 4841 1161
+CONVEX 2218 'GT_PK(2,2)' 979 4842 961 4839 4080 1159
+CONVEX 2219 'GT_PK(2,2)' 979 4838 1006 4843 4056 987
+CONVEX 2220 'GT_PK(2,2)' 961 4842 979 4831 4843 987
+CONVEX 2221 'GT_PK(2,2)' 991 4844 998 4845 4046 1024
+CONVEX 2222 'GT_PK(2,2)' 1012 4846 991 4047 4845 1024
+CONVEX 2223 'GT_PK(2,2)' 1162 4847 991 4848 4849 1161
+CONVEX 2224 'GT_PK(2,2)' 991 4847 1162 4844 4836 998
+CONVEX 2225 'GT_PK(2,2)' 991 4850 979 4849 4840 1161
+CONVEX 2226 'GT_PK(2,2)' 979 4850 991 4837 4846 1012
+CONVEX 2227 'GT_PK(2,2)' 712 4851 693 4852 4068 671
+CONVEX 2228 'GT_PK(2,2)' 712 4852 671 4853 2368 691
+CONVEX 2229 'GT_PK(2,2)' 729 4854 712 3182 4853 691
+CONVEX 2230 'GT_PK(2,2)' 693 4851 712 4075 4855 737
+CONVEX 2231 'GT_PK(2,2)' 712 4854 729 4856 4065 757
+CONVEX 2232 'GT_PK(2,2)' 737 4855 712 3420 4856 757
+CONVEX 2233 'GT_PK(2,2)' 753 4857 715 3427 4074 737
+CONVEX 2234 'GT_PK(2,2)' 733 4858 753 2015 1785 765
+CONVEX 2235 'GT_PK(2,2)' 715 4857 753 4072 4858 733
+CONVEX 2236 'GT_PK(2,2)' 885 4859 897 3059 4860 911
+CONVEX 2237 'GT_PK(2,2)' 869 4861 897 4093 4859 885
+CONVEX 2238 'GT_PK(2,2)' 897 4862 923 4860 3033 911
+CONVEX 2239 'GT_PK(2,2)' 897 4861 869 4863 4091 1152
+CONVEX 2240 'GT_PK(2,2)' 897 4864 1154 4862 3057 923
+CONVEX 2241 'GT_PK(2,2)' 1154 4864 897 4865 4863 1152
+CONVEX 2242 'GT_PK(2,2)' 946 4866 932 3091 4867 962
+CONVEX 2243 'GT_PK(2,2)' 932 4868 945 4867 4137 962
+CONVEX 2244 'GT_PK(2,2)' 907 4869 932 3322 4870 917
+CONVEX 2245 'GT_PK(2,2)' 932 4866 946 4870 2329 917
+CONVEX 2246 'GT_PK(2,2)' 921 4871 932 3077 4869 907
+CONVEX 2247 'GT_PK(2,2)' 945 4868 932 4103 4871 921
+CONVEX 2248 'GT_PK(2,2)' 1066 3105 1052 4128 3196 1265
+CONVEX 2249 'GT_PK(2,2)' 1257 3067 973 4872 3076 1255
+CONVEX 2250 'GT_PK(2,2)' 270 4873 286 2098 4833 298
+CONVEX 2251 'GT_PK(2,2)' 272 4828 286 2115 4874 256
+CONVEX 2252 'GT_PK(2,2)' 994 1449 1026 3095 3102 1007
+CONVEX 2253 'GT_PK(2,2)' 695 2985 675 4875 2444 651
+CONVEX 2254 'GT_PK(2,2)' 669 2901 695 4144 4875 651
+CONVEX 2255 'GT_PK(2,2)' 773 4876 789 4877 4878 805
+CONVEX 2256 'GT_PK(2,2)' 789 4876 773 1703 2938 759
+CONVEX 2257 'GT_PK(2,2)' 787 4879 807 4880 2442 771
+CONVEX 2258 'GT_PK(2,2)' 755 4881 787 4145 4880 771
+CONVEX 2259 'GT_PK(2,2)' 787 4882 823 4879 4384 807
+CONVEX 2260 'GT_PK(2,2)' 823 4882 787 4123 4883 805
+CONVEX 2261 'GT_PK(2,2)' 787 4884 773 4883 4877 805
+CONVEX 2262 'GT_PK(2,2)' 773 4884 787 2933 4881 755
+CONVEX 2263 'GT_PK(2,2)' 819 4885 837 4886 4122 805
+CONVEX 2264 'GT_PK(2,2)' 789 1337 819 4878 4886 805
+CONVEX 2265 'GT_PK(2,2)' 837 4885 819 4120 2774 853
+CONVEX 2266 'GT_PK(2,2)' 704 4887 682 4239 4888 690
+CONVEX 2267 'GT_PK(2,2)' 682 2642 663 4888 4151 690
+CONVEX 2268 'GT_PK(2,2)' 682 4887 704 4889 4020 706
+CONVEX 2269 'GT_PK(2,2)' 664 2773 682 4890 4889 706
+CONVEX 2270 'GT_PK(2,2)' 632 4891 620 3129 2618 594
+CONVEX 2271 'GT_PK(2,2)' 663 2640 620 4153 4891 632
+CONVEX 2272 'GT_PK(2,2)' 460 4892 446 4893 4188 422
+CONVEX 2273 'GT_PK(2,2)' 480 4894 460 3168 4895 438
+CONVEX 2274 'GT_PK(2,2)' 460 4893 422 4895 4150 438
+CONVEX 2275 'GT_PK(2,2)' 460 4894 480 4896 3170 488
+CONVEX 2276 'GT_PK(2,2)' 468 4897 460 4245 4896 488
+CONVEX 2277 'GT_PK(2,2)' 446 4892 460 4193 4897 468
+CONVEX 2278 'GT_PK(2,2)' 342 4898 1306 3171 4899 1304
+CONVEX 2279 'GT_PK(2,2)' 360 4900 1306 4196 4898 342
+CONVEX 2280 'GT_PK(2,2)' 256 4874 286 3704 4873 270
+CONVEX 2281 'GT_PK(2,2)' 230 4901 219 4902 4638 245
+CONVEX 2282 'GT_PK(2,2)' 388 4903 394 4904 4149 422
+CONVEX 2283 'GT_PK(2,2)' 388 4905 360 4903 4197 394
+CONVEX 2284 'GT_PK(2,2)' 388 4904 422 4906 4189 408
+CONVEX 2285 'GT_PK(2,2)' 1308 4907 388 4183 4906 408
+CONVEX 2286 'GT_PK(2,2)' 1306 4908 388 4909 4907 1308
+CONVEX 2287 'GT_PK(2,2)' 388 4908 1306 4905 4900 360
+CONVEX 2288 'GT_PK(2,2)' 621 2387 643 4910 4205 662
+CONVEX 2289 'GT_PK(2,2)' 621 4911 595 2376 4219 583
+CONVEX 2290 'GT_PK(2,2)' 633 4912 621 3186 4910 662
+CONVEX 2291 'GT_PK(2,2)' 595 4911 621 4217 4912 633
+CONVEX 2292 'GT_PK(2,2)' 688 4913 664 4914 4890 706
+CONVEX 2293 'GT_PK(2,2)' 1140 2338 688 4214 4914 706
+CONVEX 2294 'GT_PK(2,2)' 219 4901 230 1535 4915 206
+CONVEX 2295 'GT_PK(2,2)' 230 4902 245 2062 4635 258
+CONVEX 2296 'GT_PK(2,2)' 689 4916 13 3185 4917 1141
+CONVEX 2297 'GT_PK(2,2)' 12 4918 13 4208 4916 689
+CONVEX 2298 'GT_PK(2,2)' 644 4919 4 1677 4920 604
+CONVEX 2299 'GT_PK(2,2)' 4 4919 644 4921 4922 5
+CONVEX 2300 'GT_PK(2,2)' 644 4923 688 4922 2335 5
+CONVEX 2301 'GT_PK(2,2)' 688 4923 644 4913 1689 664
+CONVEX 2302 'GT_PK(2,2)' 489 2250 519 4924 2185 481
+CONVEX 2303 'GT_PK(2,2)' 461 4925 489 2380 4924 481
+CONVEX 2304 'GT_PK(2,2)' 509 4926 469 4927 4928 487
+CONVEX 2305 'GT_PK(2,2)' 489 4929 469 2327 4926 509
+CONVEX 2306 'GT_PK(2,2)' 469 4930 461 4931 3209 447
+CONVEX 2307 'GT_PK(2,2)' 469 4929 489 4930 4925 461
+CONVEX 2308 'GT_PK(2,2)' 445 4932 463 4933 4258 487
+CONVEX 2309 'GT_PK(2,2)' 445 4934 469 4935 4931 447
+CONVEX 2310 'GT_PK(2,2)' 469 4934 445 4928 4933 487
+CONVEX 2311 'GT_PK(2,2)' 409 4936 445 3211 4935 447
+CONVEX 2312 'GT_PK(2,2)' 445 4936 409 4937 3215 1311
+CONVEX 2313 'GT_PK(2,2)' 445 4937 1311 4938 4939 1313
+CONVEX 2314 'GT_PK(2,2)' 463 4932 445 4232 4938 1313
+CONVEX 2315 'GT_PK(2,2)' 527 4940 507 4941 4253 547
+CONVEX 2316 'GT_PK(2,2)' 509 4942 527 2333 4943 549
+CONVEX 2317 'GT_PK(2,2)' 527 4942 509 4944 4927 487
+CONVEX 2318 'GT_PK(2,2)' 507 4940 527 4259 4944 487
+CONVEX 2319 'GT_PK(2,2)' 527 4945 585 4943 2361 549
+CONVEX 2320 'GT_PK(2,2)' 585 4945 527 4222 4941 547
+CONVEX 2321 'GT_PK(2,2)' 3 4946 2 4947 4266 546
+CONVEX 2322 'GT_PK(2,2)' 230 2116 216 4915 4948 206
+CONVEX 2323 'GT_PK(2,2)' 3 4947 546 4949 2620 604
+CONVEX 2324 'GT_PK(2,2)' 4 4950 3 4920 4949 604
+CONVEX 2325 'GT_PK(2,2)' 202 1973 194 4951 4952 216
+CONVEX 2326 'GT_PK(2,2)' 588 4953 607 4277 2999 629
+CONVEX 2327 'GT_PK(2,2)' 607 4953 588 4954 4273 569
+CONVEX 2328 'GT_PK(2,2)' 607 4954 569 1658 3236 587
+CONVEX 2329 'GT_PK(2,2)' 420 4955 452 4956 4278 434
+CONVEX 2330 'GT_PK(2,2)' 384 4957 420 2511 4958 404
+CONVEX 2331 'GT_PK(2,2)' 420 4956 434 4958 4170 404
+CONVEX 2332 'GT_PK(2,2)' 452 4955 420 4282 4959 432
+CONVEX 2333 'GT_PK(2,2)' 490 4960 448 4294 2225 472
+CONVEX 2334 'GT_PK(2,2)' 448 4960 490 4961 4286 470
+CONVEX 2335 'GT_PK(2,2)' 432 4962 448 4283 4961 470
+CONVEX 2336 'GT_PK(2,2)' 448 4962 432 2227 4963 417
+CONVEX 2337 'GT_PK(2,2)' 383 4964 368 4965 4297 349
+CONVEX 2338 'GT_PK(2,2)' 383 4966 401 4967 2247 417
+CONVEX 2339 'GT_PK(2,2)' 383 4965 349 4968 1893 367
+CONVEX 2340 'GT_PK(2,2)' 401 4966 383 4296 4968 367
+CONVEX 2341 'GT_PK(2,2)' 432 4969 403 4963 4970 417
+CONVEX 2342 'GT_PK(2,2)' 403 4971 383 4970 4967 417
+CONVEX 2343 'GT_PK(2,2)' 383 4971 403 4964 4972 368
+CONVEX 2344 'GT_PK(2,2)' 368 4972 403 4300 4973 384
+CONVEX 2345 'GT_PK(2,2)' 403 4974 420 4973 4957 384
+CONVEX 2346 'GT_PK(2,2)' 420 4974 403 4959 4969 432
+CONVEX 2347 'GT_PK(2,2)' 465 4975 425 4976 4321 443
+CONVEX 2348 'GT_PK(2,2)' 483 4977 465 3244 4978 505
+CONVEX 2349 'GT_PK(2,2)' 441 4979 465 3251 4977 483
+CONVEX 2350 'GT_PK(2,2)' 425 4975 465 4980 4979 441
+CONVEX 2351 'GT_PK(2,2)' 465 4981 485 4978 2955 505
+CONVEX 2352 'GT_PK(2,2)' 485 4981 465 3943 4976 443
+CONVEX 2353 'GT_PK(2,2)' 411 4982 393 4308 4983 441
+CONVEX 2354 'GT_PK(2,2)' 393 4984 425 4983 4980 441
+CONVEX 2355 'GT_PK(2,2)' 393 4985 379 4986 2287 363
+CONVEX 2356 'GT_PK(2,2)' 393 4982 411 4985 4304 379
+CONVEX 2357 'GT_PK(2,2)' 375 4987 393 3934 4986 363
+CONVEX 2358 'GT_PK(2,2)' 425 4984 393 4322 4987 375
+CONVEX 2359 'GT_PK(2,2)' 824 4988 854 3268 4989 840
+CONVEX 2360 'GT_PK(2,2)' 842 4990 854 4332 4988 824
+CONVEX 2361 'GT_PK(2,2)' 854 4991 868 4989 4025 840
+CONVEX 2362 'GT_PK(2,2)' 854 4990 842 4992 4335 870
+CONVEX 2363 'GT_PK(2,2)' 884 4993 854 4012 4992 870
+CONVEX 2364 'GT_PK(2,2)' 854 4993 884 4991 4014 868
+CONVEX 2365 'GT_PK(2,2)' 1205 4994 263 4417 4995 243
+CONVEX 2366 'GT_PK(2,2)' 263 4996 285 4997 4410 271
+CONVEX 2367 'GT_PK(2,2)' 243 4995 263 3401 4997 271
+CONVEX 2368 'GT_PK(2,2)' 285 4996 263 3382 4998 1206
+CONVEX 2369 'GT_PK(2,2)' 263 4994 1205 4998 4999 1206
+CONVEX 2370 'GT_PK(2,2)' 238 5000 252 5001 3385 226
+CONVEX 2371 'GT_PK(2,2)' 238 5002 268 5000 4454 252
+CONVEX 2372 'GT_PK(2,2)' 210 5003 238 3390 5001 226
+CONVEX 2373 'GT_PK(2,2)' 268 5002 238 4458 5004 250
+CONVEX 2374 'GT_PK(2,2)' 238 5005 224 5004 4415 250
+CONVEX 2375 'GT_PK(2,2)' 224 5005 238 4412 5003 210
+CONVEX 2376 'GT_PK(2,2)' 77 5006 103 5007 4470 93
+CONVEX 2377 'GT_PK(2,2)' 64 5008 77 3915 5009 54
+CONVEX 2378 'GT_PK(2,2)' 77 5008 64 5010 3461 89
+CONVEX 2379 'GT_PK(2,2)' 103 5006 77 4471 5010 89
+CONVEX 2380 'GT_PK(2,2)' 66 5011 43 5012 4767 54
+CONVEX 2381 'GT_PK(2,2)' 66 5013 58 5011 4473 43
+CONVEX 2382 'GT_PK(2,2)' 77 5014 66 5009 5012 54
+CONVEX 2383 'GT_PK(2,2)' 66 5014 77 5015 5007 93
+CONVEX 2384 'GT_PK(2,2)' 83 5016 93 5017 3463 110
+CONVEX 2385 'GT_PK(2,2)' 97 5018 83 2929 5017 110
+CONVEX 2386 'GT_PK(2,2)' 83 5019 66 5016 5015 93
+CONVEX 2387 'GT_PK(2,2)' 66 5019 83 5013 5020 58
+CONVEX 2388 'GT_PK(2,2)' 83 5018 97 5021 2925 70
+CONVEX 2389 'GT_PK(2,2)' 58 5020 83 4477 5021 70
+CONVEX 2390 'GT_PK(2,2)' 190 5022 165 4489 5023 184
+CONVEX 2391 'GT_PK(2,2)' 165 1539 151 5023 4492 184
+CONVEX 2392 'GT_PK(2,2)' 165 5022 190 1354 4485 172
+CONVEX 2393 'GT_PK(2,2)' 109 5024 119 4494 2163 92
+CONVEX 2394 'GT_PK(2,2)' 151 1550 119 4491 5025 137
+CONVEX 2395 'GT_PK(2,2)' 119 5024 109 5025 4496 137
+CONVEX 2396 'GT_PK(2,2)' 112 1362 127 5026 3492 90
+CONVEX 2397 'GT_PK(2,2)' 74 5027 112 2275 5026 90
+CONVEX 2398 'GT_PK(2,2)' 88 1553 112 4498 5027 74
+CONVEX 2399 'GT_PK(2,2)' 944 5028 963 4511 5029 976
+CONVEX 2400 'GT_PK(2,2)' 976 5029 963 3562 5030 995
+CONVEX 2401 'GT_PK(2,2)' 963 5031 975 5030 3594 995
+CONVEX 2402 'GT_PK(2,2)' 963 5028 944 5032 4513 933
+CONVEX 2403 'GT_PK(2,2)' 963 5032 933 5033 2710 947
+CONVEX 2404 'GT_PK(2,2)' 975 5031 963 3596 5033 947
+CONVEX 2405 'GT_PK(2,2)' 836 5034 818 5035 3591 804
+CONVEX 2406 'GT_PK(2,2)' 822 5036 836 3656 5035 804
+CONVEX 2407 'GT_PK(2,2)' 818 5034 836 3592 5037 852
+CONVEX 2408 'GT_PK(2,2)' 836 5038 864 5037 4525 852
+CONVEX 2409 'GT_PK(2,2)' 836 5036 822 5039 3651 850
+CONVEX 2410 'GT_PK(2,2)' 864 5038 836 4518 5039 850
+CONVEX 2411 'GT_PK(2,2)' 117 5040 134 4590 5041 148
+CONVEX 2412 'GT_PK(2,2)' 104 5042 134 4595 5040 117
+CONVEX 2413 'GT_PK(2,2)' 134 5042 104 5043 4597 122
+CONVEX 2414 'GT_PK(2,2)' 148 5041 134 3677 5044 167
+CONVEX 2415 'GT_PK(2,2)' 150 5045 134 4570 5043 122
+CONVEX 2416 'GT_PK(2,2)' 134 5045 150 5044 4574 167
+CONVEX 2417 'GT_PK(2,2)' 144 5046 116 4587 5047 132
+CONVEX 2418 'GT_PK(2,2)' 116 5048 100 5047 4628 132
+CONVEX 2419 'GT_PK(2,2)' 116 5046 144 5049 2158 125
+CONVEX 2420 'GT_PK(2,2)' 98 5050 116 4633 5049 125
+CONVEX 2421 'GT_PK(2,2)' 100 5048 116 4626 5051 85
+CONVEX 2422 'GT_PK(2,2)' 116 5050 98 5051 4632 85
+CONVEX 2423 'GT_PK(2,2)' 158 2059 1196 5052 5053 1194
+CONVEX 2424 'GT_PK(2,2)' 216 4952 194 4948 1484 206
+CONVEX 2425 'GT_PK(2,2)' 232 5054 202 2118 4951 216
+CONVEX 2426 'GT_PK(2,2)' 202 5054 232 5055 5056 220
+CONVEX 2427 'GT_PK(2,2)' 202 5057 1200 1975 5058 1198
+CONVEX 2428 'GT_PK(2,2)' 141 1526 158 5059 5052 1194
+CONVEX 2429 'GT_PK(2,2)' 141 5060 1192 2149 4611 125
+CONVEX 2430 'GT_PK(2,2)' 1192 5060 141 5061 5059 1194
+CONVEX 2431 'GT_PK(2,2)' 177 5062 162 2145 4588 193
+CONVEX 2432 'GT_PK(2,2)' 162 5062 177 4586 2146 144
+CONVEX 2433 'GT_PK(2,2)' 232 5063 242 5056 2715 220
+CONVEX 2434 'GT_PK(2,2)' 232 2108 256 5063 3703 242
+CONVEX 2435 'GT_PK(2,2)' 1200 5057 202 3696 5055 220
+
+END MESH STRUCTURE DESCRIPTION
diff --git a/tests/nonlinear_elastostatic.cc b/tests/nonlinear_elastostatic.cc
index 2c80c44..44f3f4c 100644
--- a/tests/nonlinear_elastostatic.cc
+++ b/tests/nonlinear_elastostatic.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file nonlinear_elastostatic.cc
@@ -37,6 +37,9 @@
#include "getfem/getfem_superlu.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/nonlinear_elastostatic.pl b/tests/nonlinear_elastostatic.pl
index 46854aa..2bbc238 100644
--- a/tests/nonlinear_elastostatic.pl
+++ b/tests/nonlinear_elastostatic.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = .5; % size in X.
LY = 1.0; % size in Y.
LZ = 2.0; % size in Z.
diff --git a/tests/nonlinear_membrane.cc b/tests/nonlinear_membrane.cc
index e5c6d5d..f0d798e 100644
--- a/tests/nonlinear_membrane.cc
+++ b/tests/nonlinear_membrane.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Jean-Yves Heddebaut.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Jean-Yves Heddebaut.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file nonlinear_membrane.cc
@@ -34,6 +34,9 @@
#include "getfem/getfem_superlu.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
diff --git a/tests/nonlinear_membrane.pl b/tests/nonlinear_membrane.pl
index 740d488..ecc7dc6 100644
--- a/tests/nonlinear_membrane.pl
+++ b/tests/nonlinear_membrane.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX =50;
LY =25;
NX =10;
diff --git a/tests/plasticity.cc b/tests/plasticity.cc
index c8f6c67..96c2004 100644
--- a/tests/plasticity.cc
+++ b/tests/plasticity.cc
@@ -1,30 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===================================================================
-//
-// Copyright (C) 2000-2010 Yves Renard
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software;
-// you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published
-// by the Free Software Foundation;
-// either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of
-// the GNU Lesser General Public License
-// along with this program;
-// if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===================================================================
+/*===========================================================================
+
+ Copyright (C) 2000-2012 Yves Renard
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@@ -35,13 +28,14 @@
This is also a good example of use of Getfem++.
*/
-
#include "getfem/getfem_assembling.h"
#include "getfem/getfem_regular_meshes.h"
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_plasticity.h"
#include "getfem/getfem_export.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
@@ -341,7 +335,7 @@ bool elastoplasticity_problem::solve(plain_vector &U) {
cout << "Number of variables : "
<< model.nb_dof() << endl;
- gmm::simplest_newton_line_search ls;
+ getfem::simplest_newton_line_search ls;
gmm::iteration iter(residual, 2, 40000);
getfem::standard_solve(model, iter, getfem::rselect_linear_solver(model, "superlu"), ls);
diff --git a/tests/plasticity.pl b/tests/plasticity.pl
index 881ea0a..78ab121 100644
--- a/tests/plasticity.pl
+++ b/tests/plasticity.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX =100; % size in X in mm. %2.0; %1.0;
LY =20; % size in Y in mm. %0.5; %1.0;
LZ =20; % size in Z in mm. %0.5;
diff --git a/tests/plasticity_old_brick.cc b/tests/plasticity_old_brick.cc
index c578c27..5d38a7f 100644
--- a/tests/plasticity_old_brick.cc
+++ b/tests/plasticity_old_brick.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file plasticity.cc
@@ -32,6 +32,8 @@
#include "getfem/getfem_model_solvers.h"
#include "getfem/getfem_plasticity.h"
#include "getfem/getfem_export.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/plasticity_old_brick.pl b/tests/plasticity_old_brick.pl
index 68d838f..8a4aeaa 100644
--- a/tests/plasticity_old_brick.pl
+++ b/tests/plasticity_old_brick.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX =100; % size in X in mm. %2.0; %1.0;
LY =20; % size in Y in mm. %0.5; %1.0;
LZ =20; % size in Z in mm. %0.5;
diff --git a/tests/plate.cc b/tests/plate.cc
index b2db8b6..6cd1f67 100644
--- a/tests/plate.cc
+++ b/tests/plate.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard, Michel Salaün.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Michel Salaün.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file plate.cc
@@ -34,6 +34,9 @@
#include "getfem/getfem_model_solvers.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
@@ -73,7 +76,7 @@ struct plate_problem {
// sol_ref = 1 : homogeneous on the vertical edges
// sol_ref = 2 : homogeneous on the 4 vertical
// edges with solution u3 = sin²(x)*sin²(y)
- scalar_type eta; // usefull only if sol_ref == 2 :
+ scalar_type eta; // useful only if sol_ref == 2 :
// eta = 0 => Kirchoff-Love
// eta = small => Mindlin
size_type N_Four ;
diff --git a/tests/plate.param b/tests/plate.param
old mode 100755
new mode 100644
index 3eb1a38..b392778
--- a/tests/plate.param
+++ b/tests/plate.param
@@ -29,15 +29,15 @@ STUDY_FLAG = 0 ; % if equal to 1 then all the loadings applied are chosen
% in order to have a maximum vertical displacement equal to 1.
PRESSURE = 0.0005; % pressure on the top surface of the plate
- % (only usefull if SOL_REF = 0 or 1)
+ % (only useful if SOL_REF = 0 or 1)
% will be multiplied by EPSILON^3.
-ETA = 1e-4; % only usefull if SOL_REF = 2 :
+ETA = 1e-4; % only useful if SOL_REF = 2 :
% if eta = 0 => solution of the Kirchoff-Love model
% if eta != 0 => solution of the Mindlin-Reissner model
% To be taken of order epsilon^2 ?
-N_Four = 100 % only usefull if SOL_REF = 4
+N_Four = 100 % only useful if SOL_REF = 4
%%%%% parameters for computation :
diff --git a/tests/plate.pl b/tests/plate.pl
old mode 100755
new mode 100644
index 6b9fcd2..34de2df
--- a/tests/plate.pl
+++ b/tests/plate.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
MU = 1.0; % Lamé coefficient.
LAMBDA = 0.0; % Lamé coefficient.
EPSILON = 0.01; % thickness of the plate
diff --git a/tests/poly.cc b/tests/poly.cc
index cb089f7..5ef7c92 100644
--- a/tests/poly.cc
+++ b/tests/poly.cc
@@ -1,25 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_poly.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
std::string horner_print(bgeot::short_type degree, bgeot::power_index &mi,
bgeot::short_type k, bgeot::short_type de) {
char s[1024];
diff --git a/tests/poly.pl b/tests/poly.pl
old mode 100755
new mode 100644
index a64b8f5..bfb1c56
--- a/tests/poly.pl
+++ b/tests/poly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/schwarz_additive.cc b/tests/schwarz_additive.cc
index 12e0938..d5cf431 100644
--- a/tests/schwarz_additive.cc
+++ b/tests/schwarz_additive.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**************************************************************************/
/* */
@@ -36,6 +36,8 @@
#ifdef GMM_USES_MPI
#include <mpi++.h>
#endif
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_vector;
using bgeot::base_node;
diff --git a/tests/schwarz_additive.pl b/tests/schwarz_additive.pl
old mode 100755
new mode 100644
index 777bada..d530c5d
--- a/tests/schwarz_additive.pl
+++ b/tests/schwarz_additive.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
N = 3; % dimension.
PG = 9.81; % gravity constant.
RHO = 0.1; % mass density
diff --git a/tests/stokes.cc b/tests/stokes.cc
index 4440dfa..5d28c73 100644
--- a/tests/stokes.cc
+++ b/tests/stokes.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**
@file stokes.cc
@@ -36,6 +36,8 @@
#include "getfem/getfem_regular_meshes.h"
#include "getfem/getfem_model_solvers.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/stokes.pl b/tests/stokes.pl
old mode 100755
new mode 100644
index ce5c1fb..d2dfe91
--- a/tests/stokes.pl
+++ b/tests/stokes.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
diff --git a/tests/test_assembly.cc b/tests/test_assembly.cc
index f7c774d..66fac4a 100644
--- a/tests/test_assembly.cc
+++ b/tests/test_assembly.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_assembling.h"
#include "getfem/getfem_assembling.h"
#include "getfem/getfem_export.h"
@@ -27,7 +27,11 @@
#ifdef GETFEM_HAVE_SYS_TIMES
# include <sys/times.h>
#endif
+#ifndef _MSC_VER
#include <unistd.h>
+#endif
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_vector;
using bgeot::base_matrix;
diff --git a/tests/test_assembly.pl b/tests/test_assembly.pl
old mode 100755
new mode 100644
index a2ca8a6..bc37083
--- a/tests/test_assembly.pl
+++ b/tests/test_assembly.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_continuation.cc b/tests/test_continuation.cc
new file mode 100644
index 0000000..ccd479d
--- /dev/null
+++ b/tests/test_continuation.cc
@@ -0,0 +1,187 @@
+/*===========================================================================
+
+ Copyright (C) 2011-2012 Yves Renard, Tomas Ligursky.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ @file test_continuation.cc
+
+ Continuation of solutions to the following state problem parameterized by
+ lambda:
+ -u'' + u = lambda * exp(u) in (0, 1), u'(0) = u'(1) = 0.
+
+ This program is used to check that getfem++ is working. This is also
+ a good example of use of Getfem++.
+*/
+
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_continuation.h" /* import continuation method */
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type; /* = unsigned long */
+
+/* definition of a vector type; this one is built using the predefined types
+ in Gmm++ */
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+/*
+ structure for the state problem
+*/
+struct state_problem {
+
+ getfem::mesh mesh; /* the mesh */
+ getfem::mesh_fem mf_u; /* the FEM-method */
+ getfem::mesh_im mim; /* the integration method */
+ scalar_type lambda;
+
+ std::string datafilename;
+ bgeot::md_param PARAM;
+
+ bool cont(plain_vector &U);
+ void init(void);
+ state_problem(void) : mf_u(mesh), mim(mesh) {}
+};
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ * and integration methods.
+ */
+void state_problem::init(void) {
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
+ std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+ "Name of integration method");
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+ /* First step: build the mesh */
+ std::vector<getfem::size_type> nsubdiv(1);
+ nsubdiv[0] = PARAM.int_value("NX", "Number of the space steps ");
+ regular_unit_mesh(mesh, nsubdiv, bgeot::simplex_geotrans(1, 1));
+
+ datafilename = PARAM.string_value("ROOTFILENAME",
+ "Base name of data files.");
+
+ /* set the finite element on the mf_u */
+ getfem::pfem pf_u = getfem::fem_descriptor(FEM_TYPE);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor(INTEGRATION);
+
+ mf_u.set_finite_element(pf_u);
+ mim.set_integration_method(ppi);
+
+}
+
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
+
+bool state_problem::cont(plain_vector &U) {
+
+ //Define the model
+ getfem::model model;
+ model.add_fem_variable("u", mf_u);
+ add_Laplacian_brick(model, mim, "u");
+ std::string f = "u-lambda*exp(u)", dfdu = "1-lambda*exp(u)";
+ lambda = PARAM.real_value("LAMBDA0");
+ model.add_initialized_scalar_data("lambda", lambda);
+ add_basic_nonlinear_brick(model, mim, "u", f, dfdu,
+ size_type(-1), "lambda");
+
+
+ // Initialise the continuation
+ getfem::rmodel_plsolver_type ls =
+ getfem::default_linear_solver<getfem::model_real_sparse_matrix,
+ getfem::model_real_plain_vector>(model);
+ size_type nb_step = int(PARAM.int_value("NBSTEP")),
+ maxit = PARAM.int_value("MAXITER"),
+ thrit = PARAM.int_value("THR_ITER"),
+ nb_dof = mf_u.nb_dof();
+ scalar_type scfac = 1./ nb_dof,
+ maxres = PARAM.real_value("RESIDUAL"),
+ maxdiff = PARAM.real_value("DIFFERENCE"),
+ minang = PARAM.real_value("ANGLE"),
+ h_init = PARAM.real_value("H_INIT"),
+ h_max = PARAM.real_value("H_MAX"),
+ h_min = PARAM.real_value("H_MIN"),
+ h_inc = PARAM.real_value("H_INC"),
+ h_dec = PARAM.real_value("H_DEC"),
+ eps = PARAM.real_value("EPSILON"),
+ maxres_solve = PARAM.real_value("RESIDUAL_SOLVE");
+ int noisy = PARAM.int_value("NOISY");
+ getfem::cont_struct_getfem_model
+ S(model, "lambda", ls, scfac, maxit, thrit, maxres, maxdiff, minang,
+ h_init, h_max, h_min, h_inc, h_dec, eps, maxres_solve, noisy);
+
+ if (noisy > 0) cout << "computing initial point" << endl;
+ gmm::iteration iter(maxres_solve, noisy, 40000);
+ getfem::standard_solve(model, iter);
+
+ gmm::resize(U, nb_dof);
+ gmm::copy(model.real_variable("u"), U);
+
+ cout << "U = " << U << endl;
+ cout << "lambda - u * exp(-u) = " << lambda - U[0] * exp(-U[0]) << endl;
+
+ plain_vector T_U(U);
+ scalar_type T_lambda = PARAM.real_value("DIRECTION"), h;
+ getfem::init_Moore_Penrose_continuation(S, U, lambda, T_U, T_lambda, h);
+
+ // Continuation
+ for (size_type step = 0; step < nb_step; ++step) {
+ cout << endl << "beginning of step " << step + 1 << endl;
+
+ getfem::Moore_Penrose_continuation(S, U, lambda, T_U, T_lambda, h);
+ if (h == 0) break;
+
+ cout << "U = " << U << endl;
+ cout << "lambda = " << lambda << endl;
+ cout << "lambda - U[0] * exp(-U[0]) = "
+ << lambda - U[0] * exp(-U[0]) << endl;
+
+ cout << "end of Step nº " << step+1 << " / " << nb_step << endl;
+ }
+
+ return (h > 0);
+}
+
+/**************************************************************************/
+/* main program. */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ try {
+ state_problem p;
+ p.PARAM.read_command_line(argc, argv);
+ p.init();
+ plain_vector U(p.mf_u.nb_dof());
+ if (!p.cont(U)) GMM_ASSERT1(false, "Continuation has failed");
+ }
+ GMM_STANDARD_CATCH_ERROR;
+
+ return 0;
+}
diff --git a/tests/test_continuation.param b/tests/test_continuation.param
new file mode 100644
index 0000000..a325d67
--- /dev/null
+++ b/tests/test_continuation.param
@@ -0,0 +1,36 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program test_continuation %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%% discretisation parameters: %%%%%
+NX = 10; % space step.
+FEM_TYPE = 'FEM_PK(1,1)'; % P1 for segments
+INTEGRATION = 'IM_GAUSS1D(3)'; % Gauss-Legendre integration on the
+ % segment of order 3
+
+%%%%% continuation parameters: %%%%%
+LAMBDA0 = 0.; % initial value of the parameter lambda
+DIRECTION = 1.; % direction of the continuation
+NBSTEP = 100; % number of the continuation steps
+
+MAXITER = 5; % maximum iterations of the Newton correction
+THR_ITER = 4; % threshold for the number of iterations for
+ % increasing the step length
+RESIDUAL = 1E-6; % residual
+DIFFERENCE = 1E-9; % difference of two forthcoming iteratives
+ANGLE = 0.993; % cosine of the angle between tangents at
+ % two forthcoming points
+
+H_INIT = 1E-3; % initial step length
+H_MAX = 2E-1; % maximal step length
+H_MIN = 1E-5; % minimal step length
+H_INC = 1.3; % scale factor for increasing the step length
+H_DEC = 0.5; % scale factor for decreasing the step length
+
+EPSILON = 1E-8; % spacing for finite differences
+RESIDUAL_SOLVE = 1E-7; % initial residual
+
+
+%%%%% saving and output parameters %%%%%
+ROOTFILENAME = 'continuation'; % Root of data files.
+NOISY = 2;
diff --git a/tests/test_int_set.cc b/tests/test_int_set.cc
old mode 100755
new mode 100644
index 204b461..6b7134e
--- a/tests/test_int_set.cc
+++ b/tests/test_int_set.cc
@@ -1,25 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/dal_bit_vector.h"
#include <deque>
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
typedef size_t size_type;
bool quick = false;
diff --git a/tests/test_int_set.pl b/tests/test_int_set.pl
old mode 100755
new mode 100644
index 1a734e5..83b3cb5
--- a/tests/test_int_set.pl
+++ b/tests/test_int_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_interpolated_fem.cc b/tests/test_interpolated_fem.cc
index 51447fc..f48337b 100644
--- a/tests/test_interpolated_fem.cc
+++ b/tests/test_interpolated_fem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/***************************************************************************/
/* */
/* Test the interpolated fem method. */
@@ -30,6 +30,8 @@
#include "gmm/gmm.h"
#include "getfem/getfem_interpolated_fem.h"
#include "getfem/getfem_mesh_fem_sum.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_vector;
using bgeot::base_small_vector;
diff --git a/tests/test_interpolated_fem.pl b/tests/test_interpolated_fem.pl
old mode 100755
new mode 100644
index 6905e03..31d3b5d
--- a/tests/test_interpolated_fem.pl
+++ b/tests/test_interpolated_fem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_interpolation.cc b/tests/test_interpolation.cc
index 72efd75..55b5afe 100644
--- a/tests/test_interpolation.cc
+++ b/tests/test_interpolation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_export.h"
#include "getfem/getfem_export.h"
#include "getfem/getfem_regular_meshes.h"
@@ -26,7 +26,8 @@
#endif
#include <unistd.h>
#include <iomanip>
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using getfem::scalar_type;
using getfem::size_type;
diff --git a/tests/test_interpolation.pl b/tests/test_interpolation.pl
index 862b970..ee3cb9e 100755
--- a/tests/test_interpolation.pl
+++ b/tests/test_interpolation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_kdtree.cc b/tests/test_kdtree.cc
old mode 100755
new mode 100644
index c6a86d9..6482494
--- a/tests/test_kdtree.cc
+++ b/tests/test_kdtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_kdtree.h"
#include "getfem/bgeot_kdtree.h"
#include "getfem/dal_bit_vector.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_node;
using bgeot::size_type;
using bgeot::dim_type;
diff --git a/tests/test_kdtree.pl b/tests/test_kdtree.pl
index 6447aec..2d064eb 100755
--- a/tests/test_kdtree.pl
+++ b/tests/test_kdtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_large_sliding_contact.cc b/tests/test_large_sliding_contact.cc
new file mode 100644
index 0000000..ff4e628
--- /dev/null
+++ b/tests/test_large_sliding_contact.cc
@@ -0,0 +1,448 @@
+/*===========================================================================
+
+ Copyright (C) 2012-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ * Large sliding contact.
+ *
+ * This program is used to check that getfem++ is working. This is also
+ * a good example of use of Getfem++.
+ */
+
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms comp.) */
+#include "getfem/getfem_export.h" /* export functions (save solution in a file) */
+#include "getfem/getfem_import.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_contact_and_friction_integral.h"
+#include "getfem/getfem_contact_and_friction_common.h"
+#include "getfem/getfem_model_solvers.h"
+#include "gmm/gmm.h"
+#include <fstream>
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* some Getfem++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node; /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type; /* = unsigned long */
+using bgeot::short_type;
+using bgeot::dim_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+/* definition of some matrix/vector types.
+ * default types of getfem_model_solvers.h
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector plain_vector;
+
+
+
+
+
+base_small_vector normal_vect(base_matrix A, base_small_vector n0) {
+ base_small_vector n = n0;
+ gmm::lu_inverse(A);
+ gmm::mult(gmm::transposed(A), n0, n);
+ n /= gmm::vect_norm2(n);
+ return n;
+}
+
+
+
+base_small_vector grad_normal_vect(base_matrix A, base_small_vector n0, base_matrix Dir) {
+
+ base_small_vector d = n0, d2 = n0;
+ base_small_vector n = normal_vect(A, n0);
+
+ gmm::lu_inverse(A);
+ gmm::mult(gmm::transposed(Dir), n, d);
+ gmm::mult(gmm::transposed(A), gmm::scaled(d, -1.), d2);
+ gmm::add(d2, gmm::scaled(n, -gmm::vect_sp(d2, n)), d);
+ return d;
+}
+
+
+void grad_normal_test(void) {
+
+ size_type N = 3;
+ base_small_vector n0(N), grad1(N), grad2(N);
+ base_matrix dir(N, N), x(N, N);
+ scalar_type EPS = 1E-8;
+
+
+ for (size_type i = 0; i < 1000; ++i) {
+ // The normal vector n is not supposed to be unitary
+ gmm::fill_random(x); gmm::fill_random(dir); gmm::fill_random(n0);
+
+
+ base_matrix xe = x;
+ gmm::add(gmm::scaled(dir, EPS), xe);
+
+ base_small_vector n1 = normal_vect(x, n0);
+ base_small_vector n2 = normal_vect(xe, n0);
+ grad1 = (n2-n1)/EPS;
+ grad2 = grad_normal_vect(x, n0, dir);
+
+ scalar_type err = gmm::vect_norm2(grad1 - grad2);
+
+ // cout << "grad1 = " << grad1 << "grad2 = " << grad2 << endl;
+ // cout << "test " << i << " err = " << err << endl; getchar();
+ GMM_ASSERT1(err < 4e-6, "Erroneous gradient of normal vector ");
+ }
+}
+
+
+
+
+// Test the validity of the two gradients of the De Saxce's projection
+void De_Saxce_projection_test(void) {
+
+ size_type N = 3;
+ base_small_vector x(N), n(N), dir(N), grad1(N), grad2(N);
+ base_matrix g(N, N);
+ scalar_type f, EPS = 1E-8;
+
+
+ for (size_type i = 0; i < 1000; ++i) {
+ // The normal vector n is not supposed to be unitary
+ gmm::fill_random(x); gmm::fill_random(dir); gmm::fill_random(n);
+ f = gmm::random();
+
+ base_small_vector xx = x, xxe = x;
+ base_small_vector ne = n + dir*EPS;
+
+ getfem::De_Saxce_projection(xx, n, f);
+ getfem::De_Saxce_projection(xxe, ne, f);
+ grad1 = (xxe-xx)/EPS;
+ getfem::De_Saxce_projection_gradn(x, n, f, g);
+ gmm::mult(g, dir, grad2);
+
+ scalar_type err = gmm::vect_norm2(grad1 - grad2);
+ GMM_ASSERT1(err < 1e-6, "Erroneous gradient of De Saxcé projection "
+ "with respect to the normal vector");
+
+ xx = x; xxe = x + dir*EPS;
+ getfem::De_Saxce_projection(xx, n, f);
+ getfem::De_Saxce_projection(xxe, n, f);
+ grad1 = (xxe-xx)/EPS;
+ getfem::De_Saxce_projection_grad(x, n, f, g);
+ gmm::mult(g, dir, grad2);
+ err = gmm::vect_norm2(grad1 - grad2);
+ GMM_ASSERT1(err < 1e-6, "Erroneous gradient of De Saxcé projection");
+ }
+}
+
+
+
+/*
+ * structure for the friction problem
+ */
+struct contact_problem {
+
+ enum {
+ DIRICHLET_BOUNDARY, CONTACT_BOUNDARY1, CONTACT_BOUNDARY2
+ };
+ getfem::mesh mesh1, mesh2; /* the mesh */
+ getfem::mesh_im mim1, mim2; /* integration methods. */
+ getfem::mesh_fem mf_u1, mf_u2; /* main mesh_fems. */
+ getfem::mesh_fem mf_lambda1, mf_lambda2; /* mesh_fems for multipliers. */
+ getfem::mesh_fem mf_rhs1, mf_rhs2; /* mesh_fems for the right hand side. */
+ scalar_type lambda, mu; /* Lamé coefficients. */
+ scalar_type friction_coef; /* friction coefficient. */
+ scalar_type R; /* Augmentation parameter. */
+
+ scalar_type residual; /* max residual for the iterative solvers */
+ size_type N, noisy;
+
+ std::string datafilename, INTEGRATION;
+ bgeot::md_param PARAM;
+
+ void solve(void);
+ void init(void);
+ contact_problem(void) : mim1(mesh1), mim2(mesh2), mf_u1(mesh1), mf_u2(mesh2), mf_lambda1(mesh1), mf_lambda2(mesh2), mf_rhs1(mesh1), mf_rhs2(mesh2) {}
+};
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ * and integration methods and selects the boundaries.
+ */
+void contact_problem::init(void) {
+ std::string FEM_TYPE = PARAM.string_value("FEM_TYPE","FEM name");
+ std::string MULT_FEM_TYPE = PARAM.string_value("MULT_FEM_TYPE",
+ "FEM name for multipliers");
+ INTEGRATION = PARAM.string_value("INTEGRATION","Name of integration method");
+ cout << "FEM_TYPE=" << FEM_TYPE << "\n";
+ cout << "MULT_FEM_TYPE=" << MULT_FEM_TYPE << "\n";
+ cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+ std::string meshname1
+ (PARAM.string_value("MESHNAME1", "Name of file for the first mesh"));
+
+ getfem::import_mesh(meshname1, mesh1);
+ N = mesh1.dim();
+
+ std::string meshname2
+ (PARAM.string_value("MESHNAME2", "Name of file for the second mesh"));
+
+ getfem::import_mesh(meshname2, mesh2);
+ GMM_ASSERT1(N == mesh2.dim(), "Meshes of incompatible dimensions");;
+
+ datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+
+ residual = PARAM.real_value("RESIDUAL");
+ R = PARAM.real_value("R", "Augmentation parameter");
+ if (residual == 0.) residual = 1e-10;
+
+ mu = PARAM.real_value("MU", "Lamé coefficient mu");
+ lambda = PARAM.real_value("LAMBDA", "Lamé coefficient lambda");
+ friction_coef = PARAM.real_value("FRICTION_COEF", "Friction coefficient");
+
+ noisy = (PARAM.int_value("NOISY", "verbosity of iterative methods") != 0);
+
+ mf_u1.set_qdim(dim_type(N));
+ mf_u2.set_qdim(dim_type(N));
+ mf_lambda1.set_qdim(dim_type(N));
+ mf_lambda2.set_qdim(dim_type(N));
+
+ /* set the finite element on the mf_u */
+ getfem::pfem pf_u = getfem::fem_descriptor(FEM_TYPE);
+ getfem::pfem pf_lambda = getfem::fem_descriptor(MULT_FEM_TYPE);
+ getfem::pintegration_method ppi =
+ getfem::int_method_descriptor(INTEGRATION);
+
+ mim1.set_integration_method(mesh1.convex_index(), ppi);
+ mim2.set_integration_method(mesh2.convex_index(), ppi);
+ mf_u1.set_finite_element(mesh1.convex_index(), pf_u);
+ mf_u2.set_finite_element(mesh2.convex_index(), pf_u);
+ mf_lambda1.set_finite_element(mesh1.convex_index(), pf_lambda);
+ mf_lambda2.set_finite_element(mesh2.convex_index(), pf_lambda);
+
+ /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
+ not used in the .param file */
+ std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+ if (data_fem_name.size() == 0) {
+ if (!pf_u->is_lagrange()) {
+ GMM_ASSERT1(false, "You are using a non-lagrange FEM. "
+ << "In that case you need to set "
+ << "DATA_FEM_TYPE in the .param file");
+ }
+ mf_rhs1.set_finite_element(mesh1.convex_index(), pf_u);
+ mf_rhs2.set_finite_element(mesh2.convex_index(), pf_u);
+ } else {
+ mf_rhs1.set_finite_element(mesh1.convex_index(),
+ getfem::fem_descriptor(data_fem_name));
+ mf_rhs2.set_finite_element(mesh2.convex_index(),
+ getfem::fem_descriptor(data_fem_name));
+ }
+
+ getfem::mesh_region border_faces1;
+ getfem::outer_faces_of_mesh(mesh1, border_faces1);
+ for (getfem::mr_visitor i(border_faces1); !i.finished(); ++i)
+ mesh1.region(CONTACT_BOUNDARY1).add(i.cv(), i.f());
+
+ getfem::mesh_region border_faces2;
+ getfem::outer_faces_of_mesh(mesh2, border_faces2);
+ for (getfem::mr_visitor i(border_faces2); !i.finished(); ++i)
+ mesh2.region(CONTACT_BOUNDARY2).add(i.cv(), i.f());
+
+ dal::bit_vector dol1 = mf_lambda1.basic_dof_on_region(CONTACT_BOUNDARY1);
+ mf_lambda1.reduce_to_basic_dof(dol1);
+ dal::bit_vector dol2 = mf_lambda2.basic_dof_on_region(CONTACT_BOUNDARY2);
+ mf_lambda2.reduce_to_basic_dof(dol2);
+}
+
+
+
+void test_tangent_matrix(getfem::model &md) {
+
+ size_type nbdof = md.nb_dof();
+ scalar_type EPS = 1E-6;
+ scalar_type errmax = scalar_type(0);
+ size_type NN = 5;
+ scalar_type scale = 0.0001;
+
+
+ if (md.is_linear()) cout << "Non relevant test" << endl;
+ else {
+ std::vector<scalar_type> U(nbdof), DIR(nbdof);
+ std::vector<scalar_type> D1(nbdof), D2(nbdof), Ddiff(nbdof);
+ for (size_type i = 0; i < NN; ++i) {
+ gmm::fill_random(U); gmm::scale(U, scale);
+ gmm::fill_random(DIR); gmm::scale(DIR, scale);
+ md.to_variables(U);
+ md.assembly(getfem::model::BUILD_ALL);
+ gmm::copy(md.real_rhs(), D2);
+ gmm::mult(md.real_tangent_matrix(), DIR, D1);
+ gmm::add(gmm::scaled(DIR, EPS), U);
+ md.to_variables(U);
+ md.assembly(getfem::model::BUILD_RHS);
+ gmm::add(gmm::scaled(md.real_rhs(), -scalar_type(1)), D2);
+ gmm::scale(D2, scalar_type(1)/EPS);
+ scalar_type err = gmm::vect_dist2(D1, D2);
+ scalar_type ratio = 0;
+ for (size_type j = 0; j < nbdof; ++j) {
+ scalar_type r = (D1[j] - D2[j]) / (gmm::abs(D1[j]) + 1E-10);
+ ratio = std::max(ratio, r);
+ if (r > 0.01) {
+ cout << "WARNING, ratio " << r << " j = " << j << " D1 = "
+ << D1[j] << " D2 = " << D2[j] << " D1[j-1] = " << D1[j-1]
+ << " D1[j+1] = " << D1[j+1] << endl; // getchar();
+ }
+ }
+
+
+ gmm::add(gmm::scaled(D1, -1.), D2, Ddiff);
+ gmm::clean(Ddiff, 1E-9); // à enlever ?
+ // cout << "Ddiff = " << Ddiff << endl;
+ // cout << "norminf(Ddiff) = " << gmm::vect_norminf(Ddiff) << endl;
+ // cout << "D1 = " << gmm::sub_vector(D1, gmm::sub_interval(0, 300)) << endl;
+ // cout << "D2 = " << gmm::sub_vector(D2, gmm::sub_interval(0, 300)) << endl;
+ // cout << "norm(D1) = " << gmm::vect_norm2(D1)
+ // << " norm(D2) = " << gmm::vect_norm2(D2) << endl;
+ // cout << "Max ratio " << ratio << endl;
+ // cout << "Error at step " << i << " : " << err << endl; // getchar();
+ GMM_ASSERT1(err < 1e-6, "Erroneous tangent matrix");
+ errmax = std::max(err, errmax);
+ }
+ }
+}
+
+
+
+
+
+/**************************************************************************/
+/* Model. */
+/**************************************************************************/
+
+base_small_vector vol_f(const base_node &x) {
+ int N = x.size();
+ base_small_vector res(N); res[N-1] = -1.0;
+ return res;
+}
+
+void contact_problem::solve(void) {
+ cout << "Number of dof for u: " << mf_u1.nb_dof() + mf_u2.nb_dof() << endl;
+
+ getfem::model model;
+ std::vector<scalar_type> F;
+
+ bool two_bodies = false;
+
+ // Main unknowns of the problem.
+ if (two_bodies) model.add_fem_variable("u1", mf_u1);
+ model.add_fem_variable("u2", mf_u2);
+ if (two_bodies) model.add_fem_variable("lambda1", mf_lambda1);
+ model.add_fem_variable("lambda2", mf_lambda2);
+
+ gmm::resize(F, mf_rhs1.nb_dof() * N);
+ getfem::interpolation_function(mf_rhs1, F, vol_f);
+ model.add_initialized_fem_data("VolumicData1", mf_rhs1, F);
+ if (two_bodies)
+ getfem::add_source_term_brick(model, mim1, "u1", "VolumicData1");
+ gmm::resize(F, mf_rhs2.nb_dof() * N);
+ getfem::interpolation_function(mf_rhs2, F, vol_f);
+ model.add_initialized_fem_data("VolumicData2", mf_rhs2, F);
+ getfem::add_source_term_brick(model, mim2, "u2", "VolumicData2");
+
+
+ // Pointwise constraints for frictionless problems
+ GMM_ASSERT1(N == 2, "Pointwises constraints have to be adapted for 3D");
+ std::vector<scalar_type> cpoints(N);
+ cpoints[0] = 0.0; cpoints[1] = 0.1;
+ std::vector<scalar_type> cunitv(N);
+ cunitv[0] = 1.0; cunitv[1] = 0.0;
+ model.add_initialized_fixed_size_data("cpoints1", cpoints);
+ model.add_initialized_fixed_size_data("cunitv1", cunitv);
+ if (two_bodies)
+ getfem::add_pointwise_constraints_with_multipliers
+ (model, "u1", "cpoints1", "cunitv1");
+ cpoints[0] = 0.0; cpoints[1] = 0.0;
+ model.add_initialized_fixed_size_data("cpoints2", cpoints);
+ model.add_initialized_fixed_size_data("cunitv2", cunitv);
+ getfem::add_pointwise_constraints_with_multipliers
+ (model, "u2", "cpoints2", "cunitv2");
+
+
+ // Linearized elasticity bricks.
+ model.add_initialized_scalar_data("lambda", lambda);
+ model.add_initialized_scalar_data("mu", mu);
+ if (two_bodies)
+ getfem::add_isotropic_linearized_elasticity_brick
+ (model, mim1, "u1", "lambda", "mu");
+ getfem::add_isotropic_linearized_elasticity_brick
+ (model, mim2, "u2", "lambda", "mu");
+
+ cout << "Number of dof of the model: " << model.nb_dof() << endl;
+
+ // Contact brick.
+ model.add_initialized_scalar_data("r", R);
+ model.add_initialized_scalar_data("f", friction_coef);
+ size_type indb = add_integral_large_sliding_contact_brick
+ (model, mim2, "u2", "lambda2", "r", "f", CONTACT_BOUNDARY2);
+
+ if (two_bodies)
+ getfem::add_boundary_to_large_sliding_contact_brick
+ (model, indb, mim1, "u1", "lambda1", CONTACT_BOUNDARY1);
+
+ getfem::add_rigid_obstacle_to_large_sliding_contact_brick(model, indb, "y");
+
+
+ test_tangent_matrix(model);
+
+
+ gmm::iteration iter(residual, 1, 40000);
+ getfem::standard_solve(model, iter);
+
+// gmm::col_matrix<gmm::wsvector<double> > T(model.nb_dof(), model.nb_dof());
+// gmm::copy(model.real_tangent_matrix(), T);
+// gmm::clean(T, 1E-10);
+// cout << T << endl;
+
+}
+
+
+
+
+
+
+/**************************************************************************/
+/* main program. */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+
+ GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+ // FE_ENABLE_EXCEPT; // Enable floating point exception for Nan.
+
+ De_Saxce_projection_test();
+ grad_normal_test();
+
+ contact_problem p;
+ p.PARAM.read_command_line(argc, argv);
+ p.init();
+ p.solve();
+
+ return 0;
+}
diff --git a/tests/test_large_sliding_contact.param b/tests/test_large_sliding_contact.param
new file mode 100644
index 0000000..4450a56
--- /dev/null
+++ b/tests/test_large_sliding_contact.param
@@ -0,0 +1,40 @@
+% -*- matlab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program dynamic Coulomb friction problem %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+N = 2;
+%%%%% pde parameters : %%%%%
+MU = 7700; % Lamé coefficient.
+LAMBDA = 11500; % Lamé coefficient.
+R = 1; % Augmentation parameter
+FRICTION_COEF = 0.1; % Friction coefficient.
+
+NOISY = 1;
+
+
+if (N == 2)
+ MESHNAME1='meshes/disc_with_a_hole.mesh';
+ MESHNAME2='structured:GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]';
+ FEM_TYPE = 'FEM_PK(2, 2)'; % Main FEM
+ MULT_FEM_TYPE = 'FEM_PK(2, 1)'; % FEM for multipiers
+ DATA_FEM_TYPE = 'FEM_PK(2, 2)'; % must be defined for non-Lagrangian main FEM
+ INTEGRATION = 'IM_TRIANGLE(4)'; % Quadrature rule
+end;
+
+if (N == 3)
+ error('to be completed');
+ FEM_TYPE = 'FEM_PK(3, 2)'; % Main FEM
+ MULT_FEM_TYPE = 'FEM_PK(3, 1)'; % FEM for multipiers
+ DATA_FEM_TYPE = 'FEM_PK(3, 2)'; % must be defined for non-Lagrangian main FEM
+ INTEGRATION = 'IM_TETRAHEDRON(4)'; % Quadrature rule
+end;
+
+
+
+%%%%% saving parameters %%%%%
+ROOTFILENAME = 'dynamic_friction'; % Root of data files.
+DX_EXPORT = 1; % export solution to an OpenDX file ?
+DT_EXPORT = 0.001; % Time step for the export
+COMPARE = 1; % Convergence test to be done or not
+REFROOTNAME = 'mixed_dynamic_friction_ref';
diff --git a/tests/test_large_sliding_contact.pl b/tests/test_large_sliding_contact.pl
new file mode 100644
index 0000000..e5648a8
--- /dev/null
+++ b/tests/test_large_sliding_contact.pl
@@ -0,0 +1,67 @@
+# Copyright (C) 2001-2012 Yves Renard
+#
+# This file is a part of GETFEM++
+#
+# Getfem++ is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
+# License and GCC Runtime Library Exception for more details.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+
+$srcdir = "$ENV{srcdir}";
+$bin_dir = "$srcdir/../bin";
+$tmp = `$bin_dir/createmp elas.param`;
+
+sub catch { `rm -f $tmp`; exit(1); }
+$SIG{INT} = 'catch';
+
+open(TMPF, ">$tmp") or die "Open file impossible : $!\n";
+print TMPF <<""
+N = 2;
+MU = 7700; % Lamé coefficient.
+LAMBDA = 11500; % Lamé coefficient.
+R = 1; % Augmentation parameter
+FRICTION_COEF = 0.1; % Friction coefficient.
+NOISY = 1;
+if (N == 2)
+ MESHNAME1='meshes/disc_with_a_hole.mesh';
+ MESHNAME2='structured:GT="GT_PK(2,1)";ORG=[-0.5,0];SIZES=[1,0.1];NSUBDIV=[20,2]';
+ FEM_TYPE = 'FEM_PK(2, 2)'; % Main FEM
+ MULT_FEM_TYPE = 'FEM_PK(2, 1)'; % FEM for multipiers
+ DATA_FEM_TYPE = 'FEM_PK(2, 2)'; % must be defined for non-Lagrangian main FEM
+ INTEGRATION = 'IM_TRIANGLE(4)'; % Quadrature rule
+end;
+ROOTFILENAME = 'large_sliding_contact'; % Root of data files.
+
+;
+
+close(TMPF);
+
+
+
+
+
+$er = 0;
+open F, "./test_large_sliding_contact $tmp 2>&1 |" or die;
+while (<F>) {
+ # print $_;
+ if ($_ =~ /error has been detected/)
+ {
+ $er = 1;
+ print " =============================================================\n";
+ print $_, <F>;
+ }
+}
+close(F); if ($?) { exit(1); }
+if ($er == 1) { exit(1); }
+
+
diff --git a/tests/test_mat_elem.cc b/tests/test_mat_elem.cc
index 8d1972f..2855e7c 100644
--- a/tests/test_mat_elem.cc
+++ b/tests/test_mat_elem.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/* *********************************************************************** */
/* */
/* Program to test the efficiency of elementary matrices computation. */
@@ -28,6 +28,9 @@
#include "getfem/getfem_export.h"
#include "getfem/getfem_regular_meshes.h"
#include "getfem/getfem_mat_elem.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using bgeot::base_vector;
using bgeot::base_small_vector;
diff --git a/tests/test_mat_elem.pl b/tests/test_mat_elem.pl
index 3bf1da9..38d5309 100755
--- a/tests/test_mat_elem.pl
+++ b/tests/test_mat_elem.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_mesh.cc b/tests/test_mesh.cc
index d5280a7..69072f6 100644
--- a/tests/test_mesh.cc
+++ b/tests/test_mesh.cc
@@ -1,30 +1,30 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_regular_meshes.h"
#include "getfem/bgeot_poly_composite.h"
#include "getfem/bgeot_comma_init.h"
#include "getfem/getfem_export.h"
#include "getfem/bgeot_node_tab.h"
-
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using getfem::size_type;
using getfem::base_node;
using getfem::base_small_vector;
diff --git a/tests/test_mesh.pl b/tests/test_mesh.pl
old mode 100755
new mode 100644
index ab43067..1230c2e
--- a/tests/test_mesh.pl
+++ b/tests/test_mesh.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_mesh_generation.cc b/tests/test_mesh_generation.cc
old mode 100755
new mode 100644
index ca3b79a..86beb62
--- a/tests/test_mesh_generation.cc
+++ b/tests/test_mesh_generation.cc
@@ -1,27 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesher.h"
#include "getfem/getfem_mesher.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using getfem::base_node;
using getfem::scalar_type;
@@ -143,71 +144,80 @@ int main(int argc, char **argv) {
getfem::mesher_ball D22(base_node(0.,0.,20.),20.);
-
-
-
+ getfem::mesher_rectangle D23_1(base_node(0.,1.), base_node(20.0, 10.0));
+ getfem::mesher_rectangle D23_2(base_node(1.,0.), base_node(19.0, 1.0));
+ getfem::mesher_ball D23_3(getfem::base_node(1.0,1.0),1.0);
+ getfem::mesher_ball D23_4(getfem::base_node(19.0,1.0),1.0);
+ getfem::mesher_union D23(D23_1, D23_2, D23_3, D23_4);
getfem::mesher_signed_distance *dist = &D0;
switch (opt) {
- case 0: dist = &D0; break; /* disk */
- case 1: {
- getfem::scalar_type z = sqrt(4 - 1.5*1.5);
- fixed.push_back(base_node(0,z));
- fixed.push_back(base_node(0,-z));
+ case 0: dist = &D0; break; /* disk */
+ case 1: {
+ getfem::scalar_type z = sqrt(4 - 1.5*1.5);
+ fixed.push_back(base_node(0,z));
+ fixed.push_back(base_node(0,-z));
+ }
+ case 2: dist = &D2; break; /* union of 2 disks */
+ case 3: dist = &D3; break; /* cube */
+ case 4: dist = &D4; break; /* cylinder */
+ case 5: dist = &D5; break; /* ball */
+ case 6: dist = &D6; break; /* union of 2 balls */
+ case 7: dist = &D7; break; /* union of 3 balls */
+ case 8: dist = &D8; break; /* union of 3 disks */
+ case 9: dist = &D9; break; /* union of 3 half balls */
+ case 10: dist = &D10; /* disk r=20 with fixed points */
+ fixed.push_back(getfem::base_node(0.,0.));
+ fixed.push_back(getfem::base_node(0.,20.));
+ fixed.push_back(getfem::base_node(-20.,20.));
+ fixed.push_back(getfem::base_node(20.,20.));
+ fixed.push_back(getfem::base_node(0.,40.));
+ dist = &D10;
+ break;
+ case 11: dist = &D11; break; /* half-balls */
+ case 12: dist = &D12; break; /* UFO */
+ case 13: dist = &D13; break; /* moon */
+ case 14: dist = &D14; break; /* substraction of two balls */
+ case 15: dist = &D15; break; /* torus */
+ case 16: dist = &D16; break; /* cube with a hole */
+ case 17: dist = &D17; break; /* space station */
+ case 18: dist = &D18; break;
+ case 19: dist = &D19; break;
+ case 20: { /* ladder */
+ scalar_type H = 20;
+ unsigned nb_step = 3;
+ dist = new getfem::mesher_union
+ (*new getfem::mesher_rectangle(base_node(-3, -1.2, 0), base_node(-1.8, 1.2, H)),
+ *new getfem::mesher_rectangle(base_node(1.8, -1.2, 0), base_node(3, 1.2, H)));
+ for (unsigned i=0; i < nb_step; ++i) {
+ scalar_type z = H/nb_step/2 + i*(H/nb_step);
+ getfem::mesher_signed_distance *d =
+ new getfem::mesher_cylinder(base_node(-2.4, 0, z), base_node(1, 0, 0), 4.8, .8);
+ dist = new getfem::mesher_union(*dist, *d);
+ }
+ } break;
+ case 21: { /* bar with holes */
+ scalar_type H=20;
+ unsigned nb_holes = 4;
+ dist = new getfem::mesher_rectangle(base_node(-2, -1, 0),
+ base_node(+2, +1, H));
+ for (unsigned i=0; i < nb_holes; ++i) {
+ scalar_type z = H/nb_holes/2 + i*(H/nb_holes);
+ getfem::mesher_signed_distance *d =
+ new getfem::mesher_cylinder(base_node(0, -20, z),
+ base_node(0, 1, 0), 40, .7);
+ dist = new getfem::mesher_setminus(*dist, *d);
}
- case 2: dist = &D2; break; /* union of 2 disks */
- case 3: dist = &D3; break; /* cube */
- case 4: dist = &D4; break; /* cylinder */
- case 5: dist = &D5; break; /* ball */
- case 6: dist = &D6; break; /* union of 2 balls */
- case 7: dist = &D7; break; /* union of 3 balls */
- case 8: dist = &D8; break; /* union of 3 disks */
- case 9: dist = &D9; break; /* union of 3 half balls */
- case 10: dist = &D10; /* disk r=20 with fixed points */
- fixed.push_back(getfem::base_node(0.,0.));
- fixed.push_back(getfem::base_node(0.,20.));
- fixed.push_back(getfem::base_node(-20.,20.));
- fixed.push_back(getfem::base_node(20.,20.));
- fixed.push_back(getfem::base_node(0.,40.));
- dist = &D10;
- break;
- case 11: dist = &D11; break; /* half-balls */
- case 12: dist = &D12; break; /* UFO */
- case 13: dist = &D13; break; /* moon */
- case 14: dist = &D14; break; /* substraction of two balls */
- case 15: dist = &D15; break; /* torus */
- case 16: dist = &D16; break; /* cube with a hole */
- case 17: dist = &D17; break; /* space station */
- case 18: dist = &D18; break;
- case 19: dist = &D19; break;
- case 20: { /* ladder */
- scalar_type H = 20;
- unsigned nb_step = 3;
- dist = new getfem::mesher_union
- (*new getfem::mesher_rectangle(base_node(-3, -1.2, 0), base_node(-1.8, 1.2, H)),
- *new getfem::mesher_rectangle(base_node(1.8, -1.2, 0), base_node(3, 1.2, H)));
- for (unsigned i=0; i < nb_step; ++i) {
- scalar_type z = H/nb_step/2 + i*(H/nb_step);
- getfem::mesher_signed_distance *d =
- new getfem::mesher_cylinder(base_node(-2.4, 0, z), base_node(1, 0, 0), 4.8, .8);
- dist = new getfem::mesher_union(*dist, *d);
- }
- } break;
- case 21: { /* bar with holes */
- scalar_type H=20;
- unsigned nb_holes = 4;
- dist = new getfem::mesher_rectangle(base_node(-2, -1, 0),
- base_node(+2, +1, H));
- for (unsigned i=0; i < nb_holes; ++i) {
- scalar_type z = H/nb_holes/2 + i*(H/nb_holes);
- getfem::mesher_signed_distance *d =
- new getfem::mesher_cylinder(base_node(0, -20, z),
- base_node(0, 1, 0), 40, .7);
- dist = new getfem::mesher_setminus(*dist, *d);
- }
- } break;
+ } break;
case 22: dist = &D22; break; /* ball for test of radius 20. */
+ case 23: /* rectangle with rounded corners */
+ fixed.push_back(getfem::base_node(0.,1.));
+ fixed.push_back(getfem::base_node(1.,0.));
+ fixed.push_back(getfem::base_node(19.,0.));
+ fixed.push_back(getfem::base_node(20.,1.));
+ dist = &D23;
+ break;
}
getfem::build_mesh(m, *dist, h, fixed, K, 2, max_iter, prefind);
cerr << "You can view the result with\n mayavi -d totoq.vtk -m BandedSurfaceMap\n";
diff --git a/tests/test_mesh_im_level_set.cc b/tests/test_mesh_im_level_set.cc
old mode 100755
new mode 100644
index 7b772a6..0a864e1
--- a/tests/test_mesh_im_level_set.cc
+++ b/tests/test_mesh_im_level_set.cc
@@ -1,25 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_mesh_im_level_set.h"
#include "getfem/getfem_mesh_im_level_set.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/test_mesh_im_level_set.pl b/tests/test_mesh_im_level_set.pl
old mode 100755
new mode 100644
index 5b2d0c8..9f4376b
--- a/tests/test_mesh_im_level_set.pl
+++ b/tests/test_mesh_im_level_set.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_norm.cc b/tests/test_norm.cc
index 1e7121f..9ff0bc8 100644
--- a/tests/test_norm.cc
+++ b/tests/test_norm.cc
@@ -1,27 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2009 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/getfem_assembling.h" /* import assembly methods (and comp. of norms) */
#include "getfem/getfem_assembling.h" /* import assembly methods (and comp. of norms) */
#include "getfem/getfem_regular_meshes.h"
#include "getfem/getfem_norm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small(dim < 16) vectors */
diff --git a/tests/test_norm.pl b/tests/test_norm.pl
old mode 100755
new mode 100644
index b339f56..b9ab3fa
--- a/tests/test_norm.pl
+++ b/tests/test_norm.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_range_basis.cc b/tests/test_range_basis.cc
index 40f21c8..8c6e7c5 100644
--- a/tests/test_range_basis.cc
+++ b/tests/test_range_basis.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2010 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file test_rang_basis.cc
@brief A small test for gmm_range_basis function.
@@ -26,6 +26,8 @@
#include "gmm/gmm.h"
#include "getfem/getfem_assembling.h"
#include "getfem/getfem_regular_meshes.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
diff --git a/tests/test_range_basis.pl b/tests/test_range_basis.pl
index 468836d..d76833b 100644
--- a/tests/test_range_basis.pl
+++ b/tests/test_range_basis.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
diff --git a/tests/test_rtree.cc b/tests/test_rtree.cc
index a889356..41b2416 100644
--- a/tests/test_rtree.cc
+++ b/tests/test_rtree.cc
@@ -1,26 +1,28 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_rtree.h"
#include "getfem/bgeot_rtree.h"
#include "getfem/dal_bit_vector.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
using bgeot::base_node;
using bgeot::size_type;
using bgeot::dim_type;
diff --git a/tests/test_rtree.pl b/tests/test_rtree.pl
old mode 100755
new mode 100644
index fedb116..de0b459
--- a/tests/test_rtree.pl
+++ b/tests/test_rtree.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_slice.cc b/tests/test_slice.cc
old mode 100755
new mode 100644
index ac89db3..39cf311
--- a/tests/test_slice.cc
+++ b/tests/test_slice.cc
@@ -1,26 +1,29 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "getfem/bgeot_comma_init.h"
#include "getfem/bgeot_comma_init.h"
#include "getfem/getfem_mesh_slice.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
using getfem::size_type;
namespace getfem {
diff --git a/tests/test_slice.pl b/tests/test_slice.pl
index 8d3c7f4..d1b7db4 100755
--- a/tests/test_slice.pl
+++ b/tests/test_slice.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_small_vector.cc b/tests/test_small_vector.cc
index 45b075a..eb6e0ea 100644
--- a/tests/test_small_vector.cc
+++ b/tests/test_small_vector.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2007-2008 Yves Renard, Julien Pommier.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2007-2012 Yves Renard, Julien Pommier.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#ifndef DEBUG_SMALL_VECTOR
@@ -32,6 +32,9 @@
#include "getfem/bgeot_small_vector.h"
#include "getfem/getfem_mesh.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
bool quick = false;
#ifdef GETFEM_HAVE_SYS_TIMES
diff --git a/tests/test_small_vector.pl b/tests/test_small_vector.pl
index 610fdcd..6c932f3 100755
--- a/tests/test_small_vector.pl
+++ b/tests/test_small_vector.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/test_tree_sorted.cc b/tests/test_tree_sorted.cc
index 565a8ef..6ad9134 100644
--- a/tests/test_tree_sorted.cc
+++ b/tests/test_tree_sorted.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2002-2008 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2002-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
#include "gmm/gmm_std.h"
#ifndef GETFEM_VERIFY__
@@ -25,7 +25,8 @@
#endif
#include "getfem/dal_tree_sorted.h"
-
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
int main(void)
{
diff --git a/tests/test_tree_sorted.pl b/tests/test_tree_sorted.pl
old mode 100755
new mode 100644
index 7970012..57a9c83
--- a/tests/test_tree_sorted.pl
+++ b/tests/test_tree_sorted.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/tests/wave_equation.cc b/tests/wave_equation.cc
index 5e31828..b14a8e6 100644
--- a/tests/wave_equation.cc
+++ b/tests/wave_equation.cc
@@ -1,23 +1,23 @@
-// -*- c++ -*- (enables emacs c++ mode)
-//===========================================================================
-//
-// Copyright (C) 2009-2009 Yves Renard.
-//
-// This file is a part of GETFEM++
-//
-// Getfem++ is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License as published
-// by the Free Software Foundation; either version 2.1 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 Lesser General Public
-// License for more details.
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//===========================================================================
+/*===========================================================================
+
+ Copyright (C) 2009-2012 Yves Renard.
+
+ This file is a part of GETFEM++
+
+ Getfem++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+===========================================================================*/
/**@file wave_equation.cc
@brief Transient wave equation.
@@ -36,6 +36,9 @@
#include "getfem/getfem_regular_meshes.h"
#include "gmm/gmm.h"
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
/* some Getfem++ types that we will be using */
using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
using bgeot::base_node; /* geometrical nodes (derived from base_small_vector)*/
diff --git a/tests/wave_equation.pl b/tests/wave_equation.pl
index 1c45c28..1ac0b27 100644
--- a/tests/wave_equation.pl
+++ b/tests/wave_equation.pl
@@ -1,15 +1,16 @@
-# Copyright (C) 2001-2009 Yves Renard
+# Copyright (C) 2001-2012 Yves Renard
#
# This file is a part of GETFEM++
#
# Getfem++ is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
+# by the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
-# License for more details.
+# License and GCC Runtime Library Exception for more details.
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -21,7 +22,7 @@ sub catch { `rm -f $tmp`; exit(1); }
$SIG{INT} = 'catch';
open(TMPF, ">$tmp") or die "Open file $tmp impossible : $!\n";
-print TMPF <<
+print TMPF <<""
LX = 1.0; % size in X.
LY = 1.0; % size in Y.
LZ = 1.0; % size in Z.
--
Packaging for getfem++
More information about the debian-science-commits
mailing list